[{"data":1,"prerenderedAt":8867},["ShallowReactive",2],{"navigation_docs":3,"blog-landing":205,"blog-posts":217},[4,24,51,73,95,112,158,171],{"title":5,"path":6,"stem":7,"children":8,"icon":23},"Getting Started","/docs/getting-started","docs/1.getting-started/1.index",[9,11,15,19],{"title":10,"path":6,"stem":7},"Introduction",{"title":12,"path":13,"stem":14},"Installation","/docs/getting-started/installation","docs/1.getting-started/2.installation",{"title":16,"path":17,"stem":18},"Configuration","/docs/getting-started/configuration","docs/1.getting-started/3.configuration",{"title":20,"path":21,"stem":22},"Migration","/docs/getting-started/migration","docs/1.getting-started/4.migration","i-lucide-square-play",{"title":25,"icon":26,"path":27,"stem":28,"children":29,"page":50},"Collections","i-lucide-database","/docs/collections","docs/2.collections",[30,34,38,42,46],{"title":31,"path":32,"stem":33},"Define","/docs/collections/define","docs/2.collections/1.define",{"title":35,"path":36,"stem":37},"Types","/docs/collections/types","docs/2.collections/2.types",{"title":39,"path":40,"stem":41},"Sources","/docs/collections/sources","docs/2.collections/3.sources",{"title":43,"path":44,"stem":45},"Validators","/docs/collections/validators","docs/2.collections/4.validators",{"title":47,"path":48,"stem":49},"Components","/docs/collections/inherit-schema-from-component","docs/2.collections/5.inherit-schema-from-component",false,{"title":52,"icon":53,"path":54,"stem":55,"children":56,"page":50},"Files","i-lucide-file","/docs/files","docs/3.files",[57,61,65,69],{"title":58,"path":59,"stem":60},"Markdown","/docs/files/markdown","docs/3.files/1.markdown",{"title":62,"path":63,"stem":64},"YAML","/docs/files/yaml","docs/3.files/2.yaml",{"title":66,"path":67,"stem":68},"JSON","/docs/files/json","docs/3.files/3.json",{"title":70,"path":71,"stem":72},"CSV","/docs/files/csv","docs/3.files/4.csv",{"title":74,"icon":75,"path":76,"stem":77,"children":78,"page":50},"Query Utils","i-lucide-square-function","/docs/utils","docs/4.utils",[79,83,87,91],{"title":80,"path":81,"stem":82},"queryCollection","/docs/utils/query-collection","docs/4.utils/1.query-collection",{"title":84,"path":85,"stem":86},"queryCollectionNavigation","/docs/utils/query-collection-navigation","docs/4.utils/2.query-collection-navigation",{"title":88,"path":89,"stem":90},"queryCollectionItemSurroundings","/docs/utils/query-collection-item-surroundings","docs/4.utils/3.query-collection-item-surroundings",{"title":92,"path":93,"stem":94},"queryCollectionSearchSections","/docs/utils/query-collection-search-sections","docs/4.utils/4.query-collection-search-sections",{"title":47,"icon":96,"path":97,"stem":98,"children":99,"page":50},"i-lucide-square-code","/docs/components","docs/5.components",[100,104,108],{"title":101,"path":102,"stem":103},"ContentRenderer","/docs/components/content-renderer","docs/5.components/0.content-renderer",{"title":105,"path":106,"stem":107},"Slot","/docs/components/slot","docs/5.components/1.slot",{"title":109,"path":110,"stem":111},"Prose Components","/docs/components/prose","docs/5.components/2.prose",{"title":113,"icon":114,"path":115,"stem":116,"children":117,"page":50},"Deploy","i-lucide-cloud-upload","/docs/deploy","docs/6.deploy",[118,122,126,130,134,138,142,146,150,154],{"title":119,"path":120,"stem":121},"Server","/docs/deploy/server","docs/6.deploy/1.server",{"title":123,"path":124,"stem":125},"Static","/docs/deploy/static","docs/6.deploy/10.static",{"title":127,"path":128,"stem":129},"Serverless","/docs/deploy/serverless","docs/6.deploy/2.serverless",{"title":131,"path":132,"stem":133},"NuxtHub","/docs/deploy/nuxthub","docs/6.deploy/3.nuxthub",{"title":135,"path":136,"stem":137},"Cloudflare Pages","/docs/deploy/cloudflare-pages","docs/6.deploy/4.cloudflare-pages",{"title":139,"path":140,"stem":141},"Cloudflare Workers","/docs/deploy/cloudflare-workers","docs/6.deploy/5.cloudflare-workers",{"title":143,"path":144,"stem":145},"Vercel","/docs/deploy/vercel","docs/6.deploy/6.vercel",{"title":147,"path":148,"stem":149},"Netlify","/docs/deploy/netlify","docs/6.deploy/7.netlify",{"title":151,"path":152,"stem":153},"AWS Amplify","/docs/deploy/aws-amplify","docs/6.deploy/8.aws-amplify",{"title":155,"path":156,"stem":157},"Docker","/docs/deploy/docker","docs/6.deploy/9.docker",{"title":159,"icon":114,"path":160,"stem":161,"children":162,"page":50},"Integrations","/docs/integrations","docs/7.integrations",[163,167],{"title":164,"path":165,"stem":166},"Nuxt i18n","/docs/integrations/i18n","docs/7.integrations/01.i18n",{"title":168,"path":169,"stem":170},"Nuxt LLMs","/docs/integrations/llms","docs/7.integrations/02.llms",{"title":172,"icon":173,"path":174,"stem":175,"children":176,"page":50},"Advanced","i-lucide-code-xml","/docs/advanced","docs/8.advanced",[177,181,185,189,193,197,201],{"title":178,"path":179,"stem":180},"Full-Text Search","/docs/advanced/fulltext-search","docs/8.advanced/1.fulltext-search",{"title":182,"path":183,"stem":184},"Raw Content","/docs/advanced/raw-content","docs/8.advanced/2.raw-content",{"title":186,"path":187,"stem":188},"SQL Storage","/docs/advanced/database","docs/8.advanced/3.database",{"title":190,"path":191,"stem":192},"Debugging tools","/docs/advanced/tools","docs/8.advanced/4.tools",{"title":194,"path":195,"stem":196},"Hooks","/docs/advanced/hooks","docs/8.advanced/5.hooks",{"title":198,"path":199,"stem":200},"Custom Source","/docs/advanced/custom-source","docs/8.advanced/6.custom-source",{"title":202,"path":203,"stem":204},"Transformers","/docs/advanced/transformers","docs/8.advanced/8.transformers",{"id":206,"title":207,"body":208,"description":209,"extension":210,"meta":211,"navigation":212,"path":213,"seo":214,"stem":215,"__hash__":216},"landing/blog.yml","Blog",null,"Read the latest news about Nuxt Content or articles about the Studio platform.","yml",{},true,"/blog",{"title":207,"description":209},"blog","GWCKXDcfN-FpMZV8McYgMfYtsbPJyjUEcMQIXa6jjAU",[218,1076,1641,2103,2455,7379,8451,8665],{"id":219,"title":220,"authors":221,"body":234,"categories":1061,"category":1062,"date":1063,"description":1064,"draft":50,"extension":1065,"image":1066,"meta":1069,"navigation":212,"path":1070,"seo":1071,"stem":1074,"__hash__":1075},"posts/blog/ai-assistant.md","Meet the AI Assistant for Docus",[222,228],{"name":223,"avatar":224,"to":226,"username":227},"Hugo Richard",{"src":225},"https://avatars.githubusercontent.com/u/71938701?v=4","https://x.com/hugorcd","hugorcd",{"name":229,"avatar":230,"to":232,"username":233},"Baptiste Leproux",{"src":231},"https://avatars.githubusercontent.com/u/7290030?v=4","https://x.com/_larbish","larbish",{"type":235,"value":236,"toc":1044},"minimark",[237,241,248,257,262,265,268,272,275,303,311,314,325,330,334,339,346,370,373,376,380,391,394,662,669,714,718,722,725,732,901,905,908,911,915,919,922,946,950,953,956,960,963,966,970,1005,1008,1020,1023,1026,1030,1034,1037,1040],[238,239,240],"p",{},"Documentation is only as valuable as the answers users can extract from it. We're introducing the Docus AI Assistant, a native, embedded chat experience that transforms how developers interact with your documentation.",[238,242,243,244],{},"The AI Assistant searches your content and generates code examples users can copy directly. The best part? ",[245,246,247],"strong",{},"It activates with a single environment variable.",[249,250],"video",{":autoplay":251,":controls":251,":loop":251,":muted":251,":playsinline":251,"className":252,"src":256},"true",[253,254,255],"w-full","h-auto","rounded-md","https://res.cloudinary.com/nuxt/video/upload/v1770204403/studio/docus-assistant_e8xmxu.mp4",[258,259,261],"h2",{"id":260},"the-documentation-discovery-problem","The Documentation Discovery Problem",[238,263,264],{},"Users arrive at your docs with questions, not keywords. They scroll through navigation, guess search terms, and scan pages hoping to find what they need. Even well-organized documentation creates friction between the question in their mind and the answer on the page.",[238,266,267],{},"AI changes this dynamic. Instead of adapting their question to your navigation structure, users ask naturally and receive answers grounded in your actual documentation.",[258,269,271],{"id":270},"activation-with-one-environment-variable","Activation With One Environment Variable",[238,273,274],{},"Docus abstracts the AI setup complexity and enables your own AI assistant chat with one environment variable.",[276,277,283],"pre",{"className":278,"code":279,"filename":280,"language":281,"meta":282,"style":282},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","AI_GATEWAY_API_KEY=your-api-key\n",".env","bash","",[284,285,286],"code",{"__ignoreMap":282},[287,288,291,295,299],"span",{"class":289,"line":290},"line",1,[287,292,294],{"class":293},"sTEyZ","AI_GATEWAY_API_KEY",[287,296,298],{"class":297},"sMK4o","=",[287,300,302],{"class":301},"sfazB","your-api-key\n",[304,305,306,307,310],"note",{},"A ",[245,308,309],{},"Vercel AI Gateway API key"," is required unless you deploy to Vercel, in which case no API key or configuration is needed. Test it for free with $5 credits offer!",[238,312,313],{},"That's it. Deploy your docs and the AI Assistant activates automatically. No configuration files, no API setup, no infrastructure changes.",[238,315,316,317,324],{},"The assistant works through ",[318,319,323],"a",{"href":320,"rel":321},"https://vercel.com/docs/ai-gateway",[322],"nofollow","Vercel AI Gateway",", supporting OpenAI, Anthropic, Google, and other providers. Choose your preferred model and budget, the integration remains the same.",[326,327,329],"prose-tip",{"to":328},"https://docus.dev/en/ai/assistant#quick-start","Read the full setup guide in the Docus documentation.",[258,331,333],{"id":332},"how-it-works","How It Works",[335,336,338],"h3",{"id":337},"mcp-integration","MCP Integration",[238,340,341,342,345],{},"The AI Assistant leverages the ",[245,343,344],{},"Model Context Protocol (MCP)"," to give AI models direct access to your documentation. Here's the simple architecture:",[347,348,349,361,367],"ol",{},[350,351,352,353,356,357,360],"li",{},"Docus automatically exposes an ",[245,354,355],{},"MCP server"," at ",[284,358,359],{},"/mcp"," that provides tools to search and retrieve your documentation",[350,362,363,364,366],{},"When you provide an ",[284,365,294],{},", AI models connect to your MCP server",[350,368,369],{},"The AI uses MCP tools to search your docs in real-time and provide accurate answers",[238,371,372],{},"This approach prevents hallucination by grounding every response in actual content. The AI can only answer based on what's in your documentation.",[238,374,375],{},"The MCP protocol is an open standard that allows AI models to interact with external data sources through well-defined tools. Docus implements this automatically, you just provide the API key.",[335,377,379],{"id":378},"ai-customization","AI Customization",[238,381,382,383,386,387,390],{},"The real power of the MCP integration is ",[245,384,385],{},"extensibility",". Docus uses ",[284,388,389],{},"@nuxtjs/mcp-toolkit"," under the hood. It allows to add custom tools that expand what the AI assistant can do beyond just searching documentation.",[238,392,393],{},"Want your AI to check API status, fetch live data, run code examples, or interact with your own services? Add custom MCP tools in your project:",[276,395,400],{"className":396,"code":397,"filename":398,"language":399,"meta":282,"style":282},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineMcpTool({\n  description: 'Check the current status of the API',\n  inputSchema: z.object({\n    endpoint: z.string().describe('API endpoint to check')\n  }),\n  handler: async ({ endpoint }) => {\n    const status = await checkEndpointStatus(endpoint)\n    return {\n      content: [{\n        type: 'text',\n        text: `API endpoint ${endpoint} is ${status}`\n      }]\n    }\n  }\n})\n","server/mcp/tools/check-api-status.ts","typescript",[284,401,402,421,443,464,499,510,538,563,571,584,601,634,643,649,655],{"__ignoreMap":282},[287,403,404,408,411,415,418],{"class":289,"line":290},[287,405,407],{"class":406},"s7zQu","export",[287,409,410],{"class":406}," default",[287,412,414],{"class":413},"s2Zo4"," defineMcpTool",[287,416,417],{"class":293},"(",[287,419,420],{"class":297},"{\n",[287,422,424,428,431,434,437,440],{"class":289,"line":423},2,[287,425,427],{"class":426},"swJcz","  description",[287,429,430],{"class":297},":",[287,432,433],{"class":297}," '",[287,435,436],{"class":301},"Check the current status of the API",[287,438,439],{"class":297},"'",[287,441,442],{"class":297},",\n",[287,444,446,449,451,454,457,460,462],{"class":289,"line":445},3,[287,447,448],{"class":426},"  inputSchema",[287,450,430],{"class":297},[287,452,453],{"class":293}," z",[287,455,456],{"class":297},".",[287,458,459],{"class":413},"object",[287,461,417],{"class":293},[287,463,420],{"class":297},[287,465,467,470,472,474,476,479,482,484,487,489,491,494,496],{"class":289,"line":466},4,[287,468,469],{"class":426},"    endpoint",[287,471,430],{"class":297},[287,473,453],{"class":293},[287,475,456],{"class":297},[287,477,478],{"class":413},"string",[287,480,481],{"class":293},"()",[287,483,456],{"class":297},[287,485,486],{"class":413},"describe",[287,488,417],{"class":293},[287,490,439],{"class":297},[287,492,493],{"class":301},"API endpoint to check",[287,495,439],{"class":297},[287,497,498],{"class":293},")\n",[287,500,502,505,508],{"class":289,"line":501},5,[287,503,504],{"class":297},"  }",[287,506,507],{"class":293},")",[287,509,442],{"class":297},[287,511,513,516,518,522,525,529,532,535],{"class":289,"line":512},6,[287,514,515],{"class":413},"  handler",[287,517,430],{"class":297},[287,519,521],{"class":520},"spNyl"," async",[287,523,524],{"class":297}," ({",[287,526,528],{"class":527},"sHdIc"," endpoint",[287,530,531],{"class":297}," })",[287,533,534],{"class":520}," =>",[287,536,537],{"class":297}," {\n",[287,539,541,544,547,550,553,556,558,561],{"class":289,"line":540},7,[287,542,543],{"class":520},"    const",[287,545,546],{"class":293}," status",[287,548,549],{"class":297}," =",[287,551,552],{"class":406}," await",[287,554,555],{"class":413}," checkEndpointStatus",[287,557,417],{"class":426},[287,559,560],{"class":293},"endpoint",[287,562,498],{"class":426},[287,564,566,569],{"class":289,"line":565},8,[287,567,568],{"class":406},"    return",[287,570,537],{"class":297},[287,572,574,577,579,582],{"class":289,"line":573},9,[287,575,576],{"class":426},"      content",[287,578,430],{"class":297},[287,580,581],{"class":426}," [",[287,583,420],{"class":297},[287,585,587,590,592,594,597,599],{"class":289,"line":586},10,[287,588,589],{"class":426},"        type",[287,591,430],{"class":297},[287,593,433],{"class":297},[287,595,596],{"class":301},"text",[287,598,439],{"class":297},[287,600,442],{"class":297},[287,602,604,607,609,612,615,618,620,623,626,628,631],{"class":289,"line":603},11,[287,605,606],{"class":426},"        text",[287,608,430],{"class":297},[287,610,611],{"class":297}," `",[287,613,614],{"class":301},"API endpoint ",[287,616,617],{"class":297},"${",[287,619,560],{"class":293},[287,621,622],{"class":297},"}",[287,624,625],{"class":301}," is ",[287,627,617],{"class":297},[287,629,630],{"class":293},"status",[287,632,633],{"class":297},"}`\n",[287,635,637,640],{"class":289,"line":636},12,[287,638,639],{"class":297},"      }",[287,641,642],{"class":426},"]\n",[287,644,646],{"class":289,"line":645},13,[287,647,648],{"class":297},"    }\n",[287,650,652],{"class":289,"line":651},14,[287,653,654],{"class":297},"  }\n",[287,656,658,660],{"class":289,"line":657},15,[287,659,622],{"class":297},[287,661,498],{"class":293},[238,663,664,665,668],{},"The AI assistant automatically discovers and uses your custom tools. Users can now ask ",[245,666,667],{},"\"Is the API down?\""," and get real-time answers, not just documentation.",[304,670,671,674],{},[238,672,673],{},"You can override different aspects of your AI assistant with:",[675,676,677,690,699,708],"ul",{},[350,678,679,682,683,686,687],{},[245,680,681],{},"Custom Tools",": add any capability in ",[284,684,685],{},"server/mcp/tools/"," using ",[284,688,689],{},"defineMcpTool",[350,691,692,695,696],{},[245,693,694],{},"Resources",": expose files or data through ",[284,697,698],{},"server/mcp/resources/",[350,700,701,704,705],{},[245,702,703],{},"Prompts",": create reusable prompt templates in ",[284,706,707],{},"server/mcp/prompts/",[350,709,710,713],{},[245,711,712],{},"Custom Handlers",": build separate MCP endpoints for specialized use cases",[326,715,717],{"to":716},"https://docus.dev/ai/mcp#customization","Learn more about MCP customization in the Docus documentation.",[335,719,721],{"id":720},"questions-configuration","Questions Configuration",[238,723,724],{},"Users can ask questions without leaving the page they're reading. The assistant understands the current context and can reference the page you're viewing.",[238,726,727,728,731],{},"Configuration is optional but powerful. Pre-populate common questions, adjust UI visibility, customize keyboard shortcuts, or disable features you don't need in the ",[284,729,730],{},"app.config.ts"," file.",[276,733,735],{"className":396,"code":734,"filename":730,"language":399,"meta":282,"style":282},"export default defineAppConfig({\n  docus: {\n    ai: {\n      floatingInput: true,\n      explainWithAI: true,\n      faqs: [\n        {\n          question: 'How do I install Docus?',\n          category: 'Getting Started'\n        },\n        {\n          question: 'Can I customize the theme?',\n          category: 'Customization'\n        }\n      ]\n    }\n  }\n})\n",[284,736,737,750,759,768,781,792,802,807,823,837,842,846,861,874,879,884,889,894],{"__ignoreMap":282},[287,738,739,741,743,746,748],{"class":289,"line":290},[287,740,407],{"class":406},[287,742,410],{"class":406},[287,744,745],{"class":413}," defineAppConfig",[287,747,417],{"class":293},[287,749,420],{"class":297},[287,751,752,755,757],{"class":289,"line":423},[287,753,754],{"class":426},"  docus",[287,756,430],{"class":297},[287,758,537],{"class":297},[287,760,761,764,766],{"class":289,"line":445},[287,762,763],{"class":426},"    ai",[287,765,430],{"class":297},[287,767,537],{"class":297},[287,769,770,773,775,779],{"class":289,"line":466},[287,771,772],{"class":426},"      floatingInput",[287,774,430],{"class":297},[287,776,778],{"class":777},"sfNiH"," true",[287,780,442],{"class":297},[287,782,783,786,788,790],{"class":289,"line":501},[287,784,785],{"class":426},"      explainWithAI",[287,787,430],{"class":297},[287,789,778],{"class":777},[287,791,442],{"class":297},[287,793,794,797,799],{"class":289,"line":512},[287,795,796],{"class":426},"      faqs",[287,798,430],{"class":297},[287,800,801],{"class":293}," [\n",[287,803,804],{"class":289,"line":540},[287,805,806],{"class":297},"        {\n",[287,808,809,812,814,816,819,821],{"class":289,"line":565},[287,810,811],{"class":426},"          question",[287,813,430],{"class":297},[287,815,433],{"class":297},[287,817,818],{"class":301},"How do I install Docus?",[287,820,439],{"class":297},[287,822,442],{"class":297},[287,824,825,828,830,832,834],{"class":289,"line":573},[287,826,827],{"class":426},"          category",[287,829,430],{"class":297},[287,831,433],{"class":297},[287,833,5],{"class":301},[287,835,836],{"class":297},"'\n",[287,838,839],{"class":289,"line":586},[287,840,841],{"class":297},"        },\n",[287,843,844],{"class":289,"line":603},[287,845,806],{"class":297},[287,847,848,850,852,854,857,859],{"class":289,"line":636},[287,849,811],{"class":426},[287,851,430],{"class":297},[287,853,433],{"class":297},[287,855,856],{"class":301},"Can I customize the theme?",[287,858,439],{"class":297},[287,860,442],{"class":297},[287,862,863,865,867,869,872],{"class":289,"line":645},[287,864,827],{"class":426},[287,866,430],{"class":297},[287,868,433],{"class":297},[287,870,871],{"class":301},"Customization",[287,873,836],{"class":297},[287,875,876],{"class":289,"line":651},[287,877,878],{"class":297},"        }\n",[287,880,881],{"class":289,"line":657},[287,882,883],{"class":293},"      ]\n",[287,885,887],{"class":289,"line":886},16,[287,888,648],{"class":297},[287,890,892],{"class":289,"line":891},17,[287,893,654],{"class":297},[287,895,897,899],{"class":289,"line":896},18,[287,898,622],{"class":297},[287,900,498],{"class":293},[335,902,904],{"id":903},"internationalization","Internationalization",[238,906,907],{},"The AI Assistant automatically adapts to your documentation's language settings. All UI text translates based on user locale, and the assistant responds in the user's language.",[238,909,910],{},"If your docs support multiple languages, the assistant works across all of them without additional configuration. The same environment variable enables AI for every locale.",[258,912,914],{"id":913},"key-benefits","Key Benefits",[335,916,918],{"id":917},"built-for-developers","Built for Developers",[238,920,921],{},"The AI Assistant integrates with how developers browse documentation:",[675,923,924,934,940],{},[350,925,926,929,930,933],{},[245,927,928],{},"Floating Input"," (",[284,931,932],{},"Cmd/Ctrl+I","): Bottom-of-screen chat accessible via keyboard shortcut",[350,935,936,939],{},[245,937,938],{},"Explain with AI Button",": Sidebar button that opens the assistant with current page context",[350,941,942,945],{},[245,943,944],{},"Slideover Panel",": Persistent conversation history for continued interaction",[335,947,949],{"id":948},"code-generation","Code Generation",[238,951,952],{},"Beyond answering questions, the assistant generates code examples based on your documentation patterns. Users can copy implementations directly from the chat without hunting through example repositories.",[238,954,955],{},"The assistant understands your API structure, knows your conventions, and generates examples that match your documentation style.",[335,957,959],{"id":958},"privacy-and-control","Privacy and Control",[238,961,962],{},"Your documentation content stays within your control. The AI Assistant queries your published docs, the same content publicly available on your site. No separate indexing, no data collection, no external databases.",[238,964,965],{},"You control the AI provider through Vercel AI Gateway, allowing you to choose models based on privacy requirements, latency needs, or cost constraints. Switch providers without changing your documentation code.",[258,967,969],{"id":968},"get-started-today","Get Started Today",[326,971,972,978,998],{},[238,973,974,977],{},[245,975,976],{},"New to Docus?"," Create a complete documentation site with AI assistant built-in:",[276,979,981],{"className":278,"code":980,"language":281,"meta":282,"style":282},"npx skills add nuxt-content/docus\n",[284,982,983],{"__ignoreMap":282},[287,984,985,989,992,995],{"class":289,"line":290},[287,986,988],{"class":987},"sBMFI","npx",[287,990,991],{"class":301}," skills",[287,993,994],{"class":301}," add",[287,996,997],{"class":301}," nuxt-content/docus\n",[238,999,1000,1001,1004],{},"Then run ",[284,1002,1003],{},"/create-docs"," in your AI agent (Claude, Cursor, or any agent supporting skills) to generate everything automatically.",[238,1006,1007],{},"Already have a Docus site? Add the AI Assistant with one environment variable:",[276,1009,1010],{"className":278,"code":279,"filename":280,"language":281,"meta":282,"style":282},[284,1011,1012],{"__ignoreMap":282},[287,1013,1014,1016,1018],{"class":289,"line":290},[287,1015,294],{"class":293},[287,1017,298],{"class":297},[287,1019,302],{"class":301},[238,1021,1022],{},"Deploy and the assistant activates automatically.",[238,1024,1025],{},"The AI Assistant represents a shift in how developers interact with documentation. Instead of searching for answers, they have a conversation. Instead of parsing examples, they generate code.",[326,1027,1029],{"to":1028},"https://docus.dev/ai/assistant","Read the complete AI Assistant documentation.",[258,1031,1033],{"id":1032},"whats-next","What's Next",[238,1035,1036],{},"We're constantly exploring new ways to make documentation more interactive and helpful. The AI Assistant is just the beginning of what's possible when you combine great documentation with intelligent tooling.",[238,1038,1039],{},"Documentation is evolving from static reference material into an interactive learning environment, and we're excited to see where this journey takes us.",[1041,1042,1043],"style",{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":282,"searchDepth":423,"depth":423,"links":1045},[1046,1047,1048,1054,1059,1060],{"id":260,"depth":423,"text":261},{"id":270,"depth":423,"text":271},{"id":332,"depth":423,"text":333,"children":1049},[1050,1051,1052,1053],{"id":337,"depth":445,"text":338},{"id":378,"depth":445,"text":379},{"id":720,"depth":445,"text":721},{"id":903,"depth":445,"text":904},{"id":913,"depth":423,"text":914,"children":1055},[1056,1057,1058],{"id":917,"depth":445,"text":918},{"id":948,"depth":445,"text":949},{"id":958,"depth":445,"text":959},{"id":968,"depth":423,"text":969},{"id":1032,"depth":423,"text":1033},[],"docus","2026-02-04","Setup your assistant in seconds with a single environment variable. Fast and real-time search. Make it yours with custom tools.","md",{"src":1067,"alt":1068},"/blog/docus-assistant.png","Docus AI Assistant Interface",{},"/blog/ai-assistant",{"title":1072,"description":1073},"Meet the AI Assistant for Docus | Add AI to Your Documentation","AI-powered documentation search that actually works. Generate code, extend with custom tools. Zero infrastructure, just add your API key.","blog/ai-assistant","vy83YmOIDFxg5ArV9Ek6H3TW4aDC671m5_9z9XIaqCI",{"id":1077,"title":1078,"authors":1079,"body":1094,"categories":1628,"category":1629,"date":1630,"description":1631,"draft":50,"extension":1065,"image":1632,"meta":1635,"navigation":212,"path":1636,"seo":1637,"stem":1639,"__hash__":1640},"posts/blog/studio-oss.md","Nuxt Studio is Now Free and Open Source",[1080,1082,1088],{"name":229,"avatar":1081,"to":232,"username":233},{"src":231},{"name":1083,"avatar":1084,"to":1086,"username":1087},"Ahad Birang",{"src":1085},"https://avatars.githubusercontent.com/u/2047945?v=4","https://x.com/farnabaz","farnabaz",{"name":1089,"avatar":1090,"to":1092,"username":1093},"Sébastien Chopin",{"src":1091},"https://avatars.githubusercontent.com/u/904724?v=4","https://x.com/atinux","atinux",{"type":235,"value":1095,"toc":1603},[1096,1101,1114,1123,1130,1143,1149,1152,1156,1159,1163,1183,1187,1190,1194,1209,1229,1233,1239,1253,1257,1264,1268,1275,1279,1282,1286,1289,1293,1296,1300,1303,1307,1310,1331,1334,1449,1454,1458,1475,1483,1487,1490,1535,1538,1541,1565,1569,1572,1575,1590,1593,1600],[238,1097,1098],{},[245,1099,1100],{},"Nuxt Studio is dead, long live Nuxt Studio.",[238,1102,1103,1104,1107,1108,1113],{},"We promised to deliver by the end of the 2025 year and today we're keeping that promise: we're officially releasing the first stable version of Nuxt Studio as a ",[245,1105,1106],{},"free, open-source Nuxt module",". At the same time, we're sunsetting the legacy ",[318,1109,1112],{"href":1110,"rel":1111},"https://nuxt.studio",[322],"nuxt.studio"," platform. It now becomes the new official documentation.",[1115,1116,1122],"u-button",{"color":1117,"icon":1118,"target":1119,"to":1120,"variant":1121},"neutral","i-simple-icons-github","_blank","https://github.com/nuxt-content/nuxt-studio","outline","Discover the Nuxt Studio module on GitHub.",[258,1124,1126,1127],{"id":1125},"why-were-sunsetting-nuxtstudio","🌄 Why We're Sunsetting ",[318,1128,1112],{"href":1110,"rel":1129},[322],[238,1131,1132,1133,1138,1139,456],{},"When NuxtLabs joined Vercel, we promised to make our premium products free and open source.We're following the same approach already taken with ",[318,1134,1137],{"href":1135,"rel":1136},"https://ui.nuxt.com",[322],"Nuxt UI"," and soon applied to ",[318,1140,131],{"href":1141,"rel":1142},"https://hub.nuxt.com",[322],[238,1144,1145,1146,456],{},"For us, this means everything. It's the opportunity to focus entirely on building tools that are ",[245,1147,1148],{},"free, open source, and accessible to everyone",[238,1150,1151],{},"This is why Studio platform will be discontinued.",[258,1153,1155],{"id":1154},"meet-the-new-studio-module","🚀 Meet the New Studio Module",[238,1157,1158],{},"We rebuilt Studio from the ground up as a Nuxt module. The result is a fully self-hosted content management solution that runs alongside your Nuxt Content website.",[335,1160,1162],{"id":1161},"whats-different","What's Different?",[675,1164,1165,1171,1177],{},[350,1166,1167,1170],{},[245,1168,1169],{},"Self-hosted"," — runs entirely on your infrastructure alongside your Nuxt app",[350,1172,1173,1176],{},[245,1174,1175],{},"Free and open-source"," — released under the MIT license",[350,1178,1179,1182],{},[245,1180,1181],{},"Dev integration"," — works also in development mode",[258,1184,1186],{"id":1185},"features","📦 Features",[238,1188,1189],{},"This stable release includes everything you need to edit content in production:",[335,1191,1193],{"id":1192},"tiptap-visual-editor","TipTap Visual Editor",[238,1195,1196,1197,1202,1203,1208],{},"The modern Notion-like editing experience for Markdown content is back with a improved version, powered by ",[318,1198,1201],{"href":1199,"rel":1200},"https://tiptap.dev/",[322],"TipTap"," integrated through the ",[318,1204,1207],{"href":1205,"rel":1206},"https://ui.nuxt.com/pro/components/editor",[322],"Nuxt UI Editor"," component:",[675,1210,1211,1214,1217,1220,1223,1226],{},[350,1212,1213],{},"Rich text editing with headings, formatting, links, and more",[350,1215,1216],{},"MDC component support for inserting Vue components",[350,1218,1219],{},"Vue component props editor for visual property editing",[350,1221,1222],{},"Drag & drop for reordering content blocks",[350,1224,1225],{},"Slash commands for quick formatting access",[350,1227,1228],{},"Real-time conversion between visual content and MDC syntax",[335,1230,1232],{"id":1231},"form-based-editor","Form-Based Editor",[238,1234,1235,1236,430],{},"Schema-based forms automatically generated from your ",[318,1237,1238],{"href":32},"collection definitions",[675,1240,1241,1244,1247,1250],{},[350,1242,1243],{},"Automatic form generation for frontmatter, YAML, and JSON files",[350,1245,1246],{},"Custom inputs for media and icon selection",[350,1248,1249],{},"Native type mapping (string → text, boolean → toggle, enum → select)",[350,1251,1252],{},"Array support and object support",[335,1254,1256],{"id":1255},"file-operations","File Operations",[238,1258,1259,1260,1263],{},"Complete CRUD operations for your ",[284,1261,1262],{},"content/"," directory: create, edit, delete, rename, and move files with built-in draft management.",[335,1265,1267],{"id":1266},"media-management","Media Management",[238,1269,1270,1271,1274],{},"Centralized media library for assets in your ",[284,1272,1273],{},"public/"," directory with upload, organize and preview.",[335,1276,1278],{"id":1277},"git-integration","Git Integration",[238,1280,1281],{},"Direct commits to GitHub or GitLab with conflict detection, author attribution, and custom commit messages.",[335,1283,1285],{"id":1284},"real-time-preview","Real-time Preview",[238,1287,1288],{},"Live preview of draft changes on your production website with instant updates and side-by-side editing.",[335,1290,1292],{"id":1291},"multi-language-support","Multi-Language Support",[238,1294,1295],{},"The Studio interface is available in 17 languages including English, French, German, Spanish, Japanese, Chinese, and more.",[335,1297,1299],{"id":1298},"authentication-options","Authentication Options",[238,1301,1302],{},"Multiple authentication providers: GitHub OAuth, GitLab OAuth, Google OAuth, or custom authentication with your own flow.",[258,1304,1306],{"id":1305},"quick-start","📦 Quick Start",[238,1308,1309],{},"Install the module using the Nuxt CLI:",[276,1311,1314],{"className":278,"code":1312,"filename":1313,"language":281,"meta":282,"style":282},"npx nuxt module add nuxt-studio\n","Terminal",[284,1315,1316],{"__ignoreMap":282},[287,1317,1318,1320,1323,1326,1328],{"class":289,"line":290},[287,1319,988],{"class":987},[287,1321,1322],{"class":301}," nuxt",[287,1324,1325],{"class":301}," module",[287,1327,994],{"class":301},[287,1329,1330],{"class":301}," nuxt-studio\n",[238,1332,1333],{},"Start editing in local or configure your repository for production:",[276,1335,1340],{"className":1336,"code":1337,"filename":1338,"language":1339,"meta":282,"style":282},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  studio: {\n    repository: {\n      provider: 'github',\n      owner: 'your-username',\n      repo: 'your-repo',\n      branch: 'main'\n    }\n  }\n})\n","nuxt.config.ts","ts",[284,1341,1342,1355,1364,1373,1389,1405,1421,1435,1439,1443],{"__ignoreMap":282},[287,1343,1344,1346,1348,1351,1353],{"class":289,"line":290},[287,1345,407],{"class":406},[287,1347,410],{"class":406},[287,1349,1350],{"class":413}," defineNuxtConfig",[287,1352,417],{"class":293},[287,1354,420],{"class":297},[287,1356,1357,1360,1362],{"class":289,"line":423},[287,1358,1359],{"class":426},"  studio",[287,1361,430],{"class":297},[287,1363,537],{"class":297},[287,1365,1366,1369,1371],{"class":289,"line":445},[287,1367,1368],{"class":426},"    repository",[287,1370,430],{"class":297},[287,1372,537],{"class":297},[287,1374,1375,1378,1380,1382,1385,1387],{"class":289,"line":466},[287,1376,1377],{"class":426},"      provider",[287,1379,430],{"class":297},[287,1381,433],{"class":297},[287,1383,1384],{"class":301},"github",[287,1386,439],{"class":297},[287,1388,442],{"class":297},[287,1390,1391,1394,1396,1398,1401,1403],{"class":289,"line":501},[287,1392,1393],{"class":426},"      owner",[287,1395,430],{"class":297},[287,1397,433],{"class":297},[287,1399,1400],{"class":301},"your-username",[287,1402,439],{"class":297},[287,1404,442],{"class":297},[287,1406,1407,1410,1412,1414,1417,1419],{"class":289,"line":512},[287,1408,1409],{"class":426},"      repo",[287,1411,430],{"class":297},[287,1413,433],{"class":297},[287,1415,1416],{"class":301},"your-repo",[287,1418,439],{"class":297},[287,1420,442],{"class":297},[287,1422,1423,1426,1428,1430,1433],{"class":289,"line":540},[287,1424,1425],{"class":426},"      branch",[287,1427,430],{"class":297},[287,1429,433],{"class":297},[287,1431,1432],{"class":301},"main",[287,1434,836],{"class":297},[287,1436,1437],{"class":289,"line":565},[287,1438,648],{"class":297},[287,1440,1441],{"class":289,"line":573},[287,1442,654],{"class":297},[287,1444,1445,1447],{"class":289,"line":586},[287,1446,622],{"class":297},[287,1448,498],{"class":293},[1450,1451,1453],"tip",{"to":1452},"https://nuxt.studio/setup","Follow the complete setup guide for detailed installation instructions.",[258,1455,1457],{"id":1456},"sunset-timeline","📅 Sunset Timeline",[1459,1460,1461,1465,1468,1472],"prose-steps",{},[335,1462,1464],{"id":1463},"now","Now",[238,1466,1467],{},"You can already migrate to the new module. All existing subscription have been canceled.",[335,1469,1471],{"id":1470},"_2026","2026",[238,1473,1474],{},"The legacy nuxt.studio platform becomes the new official documentation and we'll keep improving this module day after day.",[304,1476,1477,1478,1482],{},"The ",[318,1479,1112],{"href":1480,"rel":1481},"http://nuxt.studio",[322]," platform has always been just an editing layer. Your content lives in your Git repository and you remain in full control. The sunset of the platform will have zero impact on your deployed website or its behaviour.",[258,1484,1486],{"id":1485},"migration-guide","🔄 Migration Guide",[238,1488,1489],{},"Migration is extremely simple:",[347,1491,1492,1502,1525],{},[350,1493,1494,1497,1498],{},[245,1495,1496],{},"Install the module",": Follow the ",[318,1499,1501],{"href":1452,"rel":1500},[322],"setup documentation",[350,1503,1504,1507,1508,1513,1514,1519,1520],{},[245,1505,1506],{},"Configure authentication",": Set up ",[318,1509,1512],{"href":1510,"rel":1511},"https://nuxt.studio/git-providers#github",[322],"GitHub",", ",[318,1515,1518],{"href":1516,"rel":1517},"https://nuxt.studio/git-providers#gitlab",[322],"GitLab",", or ",[318,1521,1524],{"href":1522,"rel":1523},"https://nuxt.studio/auth-providers#google",[322],"Google OAuth",[350,1526,1527,1530,1531,1534],{},[245,1528,1529],{},"Remove legacy code",": Upcoming versions of Nuxt Content will automatically remove all legacy Studio code, but you can already remove the ",[284,1532,1533],{},"preview"," key in your Nuxt Content configuration.",[258,1536,1537],{"id":1032},"🗺 What's Next",[238,1539,1540],{},"We're committed to making the open-source module an even better experience. Here's what's coming in 2026:",[675,1542,1543,1549,1559],{},[350,1544,1545,1548],{},[245,1546,1547],{},"AI-powered content generation"," — intelligent content suggestions and assistance",[350,1550,1551,1554,1555,456],{},[245,1552,1553],{},"TipTap extension exposal"," — we'll expose the TipTap extensions we've built (related to MDC syntax) so you can use it with the ",[318,1556,1207],{"href":1557,"rel":1558},"https://ui.nuxt.com/docs/components/editor",[322],[350,1560,1561,1564],{},[245,1562,1563],{},"Community-driven features"," — shaped by your feedback",[258,1566,1568],{"id":1567},"thank-you","🙏 Thank You",[238,1570,1571],{},"Your feedback shaped both the old and new Studio. Your support made this transition possible.",[238,1573,1574],{},"Thanks to Vercel for making this happen. Their pushing towards open source.",[238,1576,1577,1578,1583,1584,1589],{},"We're excited to see what you build with the new Nuxt Studio module. Join the conversation on ",[318,1579,1582],{"href":1580,"rel":1581},"https://github.com/nuxt-content/nuxt-studio/discussions",[322],"GitHub Discussions"," or ",[318,1585,1588],{"href":1586,"rel":1587},"https://discord.gg/sBXDm6e8SP",[322],"join our Discord"," to help shape the future of content editing.",[1591,1592],"hr",{},[238,1594,1595,1596,456],{},"If you need help migrating, reach out on our ",[318,1597,1599],{"href":1586,"rel":1598},[322],"Discord server",[1041,1601,1602],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"title":282,"searchDepth":423,"depth":423,"links":1604},[1605,1607,1610,1620,1621,1625,1626,1627],{"id":1125,"depth":423,"text":1606},"🌄 Why We're Sunsetting nuxt.studio",{"id":1154,"depth":423,"text":1155,"children":1608},[1609],{"id":1161,"depth":445,"text":1162},{"id":1185,"depth":423,"text":1186,"children":1611},[1612,1613,1614,1615,1616,1617,1618,1619],{"id":1192,"depth":445,"text":1193},{"id":1231,"depth":445,"text":1232},{"id":1255,"depth":445,"text":1256},{"id":1266,"depth":445,"text":1267},{"id":1277,"depth":445,"text":1278},{"id":1284,"depth":445,"text":1285},{"id":1291,"depth":445,"text":1292},{"id":1298,"depth":445,"text":1299},{"id":1305,"depth":423,"text":1306},{"id":1456,"depth":423,"text":1457,"children":1622},[1623,1624],{"id":1463,"depth":445,"text":1464},{"id":1470,"depth":445,"text":1471},{"id":1485,"depth":423,"text":1486},{"id":1032,"depth":423,"text":1537},{"id":1567,"depth":423,"text":1568},[],"release","2026-01-05","We're officially releasing Nuxt Studio as a free, open-source, self-hosted module. The legacy nuxt.studio platform is being sunset and now becomes the official documentation. Your content editing experience continues, now on your own terms.",{"src":1633,"alt":1634},"/blog/Nuxt-Studio-is-Dead.png","Nuxt Studio Official Release",{},"/blog/studio-oss",{"title":1078,"description":1638},"We're officially releasing Nuxt Studio as a free, open-source, self-hosted module. The legacy nuxt.studio platform is being sunset. Your content editing experience continues, now on your own terms.","blog/studio-oss","HLQh9hZ3pk0wNQxnoz1UAbHh4f9y4uCG9DLF84Wn88k",{"id":1642,"title":1643,"authors":1644,"body":1651,"categories":208,"category":2093,"date":2094,"description":2095,"draft":50,"extension":1065,"image":2096,"meta":2098,"navigation":212,"path":2099,"seo":2100,"stem":2101,"__hash__":2102},"posts/blog/studio-module-alpha.md","Nuxt Studio Alpha Release",[1645,1647,1649],{"name":229,"avatar":1646,"to":232,"username":233},{"src":231},{"name":1083,"avatar":1648,"to":1086,"username":1087},{"src":1085},{"name":1089,"avatar":1650,"to":1092,"username":1093},{"src":1091},{"type":235,"value":1652,"toc":2065},[1653,1664,1667,1670,1673,1680,1684,1687,1689,1696,1699,1721,1730,1734,1741,1747,1755,1763,1768,1773,1777,1784,1791,1816,1823,1826,1830,1836,1839,1843,1846,1853,1856,1863,1872,1875,1882,1885,1889,1893,1924,1928,1977,1981,2017,2020,2023,2042,2050,2052,2062],[238,1654,1655,1656,1659,1660,1663],{},"When NuxtLabs joined Vercel, we promised to transform ",[318,1657,1112],{"href":1110,"rel":1658},[322]," from a hosted platform into a free, open-source module. Today, we're excited to announce the ",[245,1661,1662],{},"first alpha release"," of the Nuxt Studio module.",[1115,1665,1122],{"color":1117,"icon":1118,"to":1120,"target":1119,"variant":1666},"subtle",[238,1668,1669],{},"You can now enable content editing directly in production, with real-time preview and GitHub integration, all from within your own Nuxt application.",[249,1671],{":controls":251,":loop":251,"src":1672},"https://res.cloudinary.com/nuxt/video/upload/v1733494722/contentv3final_rc8bvu.mp4",[1115,1674,1679],{"color":1117,"icon":1675,"to":1676,":external":251,"className":1677},"i-lucide-mouse-pointer-click","/admin?redirect=/blog/studio-module-alpha",[1678],"mt-4","Try editing this page",[258,1681,1683],{"id":1682},"from-hosted-platform-to-self-hosted-module","🏠 From Hosted Platform to Self-Hosted Module",[238,1685,1686],{},"This milestone wouldn't have been possible without Vercel's support. Their backing allowed us to dedicate the resources needed to rebuild Studio as an open-source module.",[335,1688,1162],{"id":1161},[238,1690,1691,1692,1695],{},"Originally provided as a hosted platform at ",[318,1693,1112],{"href":1110,"rel":1694},[322],", Studio is now a free and open-source Nuxt module that you can deploy alongside your Nuxt Content website.",[238,1697,1698],{},"This means content editors can manage and update content directly in production, on their website, without the need of local development tools or Git knowledge.",[675,1700,1701,1705,1711,1715],{},[350,1702,1703,1170],{},[245,1704,1169],{},[350,1706,1707,1710],{},[245,1708,1709],{},"No external dependencies"," — no APIs or third-party services required",[350,1712,1713,1176],{},[245,1714,1175],{},[350,1716,1717,1720],{},[245,1718,1719],{},"Direct integration"," — a simple GitHub OAuth app is needed to get started",[238,1722,1723,1724,1729],{},"The only trade-off is that Studio now requires a server-side route for authentication. While static generation remains supported with ",[318,1725,1728],{"href":1726,"rel":1727},"https://nuxt.com/docs/4.x/guide/concepts/rendering#hybrid-rendering",[322],"Nuxt hybrid rendering",", your site must be deployed on a platform that supports SSR.",[258,1731,1733],{"id":1732},"whats-shipped-in-alpha","📦 What's Shipped in Alpha",[238,1735,1736,1737,1740],{},"The alpha release focuses on ",[245,1738,1739],{},"core infrastructure and stability"," without risking any bugs introduced by the Visual editor. We're using Monaco editor to ensure all file operations and GitHub workflows are rock-solid before introducing visual editing.",[238,1742,1743,1746],{},[245,1744,1745],{},"Monaco Code Editor"," → IDE editing experience with syntax highlighting for Markdown, YAML, and JSON, including full MDC syntax support and split-screen diff viewer for conflicts.",[238,1748,1749,1751,1752,1754],{},[245,1750,1256],{}," → Complete CRUD operations for your ",[284,1753,1262],{}," directory. Create, edit, delete, rename, and move files with built-in draft management.",[238,1756,1757,1759,1760,1762],{},[245,1758,1267],{}," → Centralized library for assets in your ",[284,1761,1273],{}," directory with upload, organize, preview, and integrate capabilities.",[238,1764,1765,1767],{},[245,1766,1278],{}," → Direct commits to GitHub via OAuth with conflict detection, author attribution, and custom commit messages.",[238,1769,1770,1772],{},[245,1771,1285],{}," → Live preview of draft changes on your production website with instant updates and side-by-side editing.",[258,1774,1776],{"id":1775},"️-the-road-ahead","🗺️ The Road Ahead",[335,1778,1780,1781],{"id":1779},"beta-release-q4-2025","Beta Release ",[284,1782,1783],{},"Q4 2025",[238,1785,1786,1787,1790],{},"Inspired from what we've built on ",[318,1788,1112],{"href":1110,"rel":1789},[322],", the beta phase will introduce the open-source visual editor, making Studio accessible to non-technical users:",[675,1792,1793,1799,1805,1811],{},[350,1794,1795,1798],{},[245,1796,1797],{},"Markdown Editor"," — Notion-inspired experience for Markdown",[350,1800,1801,1804],{},[245,1802,1803],{},"Form-based Editing"," — Schema-based forms for Markdown frontmatter, YAML, and JSON files",[350,1806,1807,1810],{},[245,1808,1809],{},"Vue Component Edition"," — Visual interface for editing component props and slots",[350,1812,1813,1815],{},[245,1814,1524],{}," — Alternative authentication for non-GitHub users",[335,1817,1819,1820],{"id":1818},"stable-release-end-of-year-2025","Stable Release ",[284,1821,1822],{},"End of Year 2025",[238,1824,1825],{},"Production-ready features, performance optimizations, and enhanced stability.",[1827,1828,1829],"warning",{},"At the end of year, the hosted platform will be sunset and the module will be the only way to edit your Nuxt Content website.",[335,1831,1833,1834],{"id":1832},"beyond-2026","Beyond ",[284,1835,1471],{},[238,1837,1838],{},"AI-powered content suggestions, multiple git providers, and community-driven features.",[258,1840,1842],{"id":1841},"️-storage-architecture","🗄️ Storage Architecture",[238,1844,1845],{},"Studio uses a three-tier storage architecture to keep content synchronized between your browser and GitHub.",[335,1847,1849,1850],{"id":1848},"production-database-sqlite-wasm","Production Database ",[284,1851,1852],{},"SQLite WASM",[238,1854,1855],{},"When your Nuxt Content website loads, Nuxt Content v3 downloads a SQLite database dump from your server and initializes a local WASM database containing all content from your deployed branch. This database stays in sync with GitHub as long as your last deployment completed successfully. This is the production database updated by Studio when you edit content.",[335,1857,1859,1860],{"id":1858},"draft-storage-indexeddb","Draft Storage ",[284,1861,1862],{},"IndexedDB",[238,1864,1865,1866,1871],{},"Studio maintains a separate draft layer using ",[318,1867,1870],{"href":1868,"rel":1869},"https://unstorage.unjs.io/",[322],"unstorage"," backed by IndexedDB. When you edit content, changes are stored as drafts locally in your browser. Each time Studio loads, these drafts are merged with the SQLite database to render a drafted version of your production site.",[304,1873,1874],{},"Drafts are stored only in your browser. They're not shared between editors or devices.",[335,1876,1878,1879],{"id":1877},"github-repository-api-integration","GitHub Repository ",[284,1880,1881],{},"API Integration",[238,1883,1884],{},"When you publish, Studio commits your draft changes directly to GitHub through the GitHub API. Your CI/CD pipeline then rebuilds and redeploys your site automatically. After deployment, you'll need to refresh to update your browser database with the latest content.",[258,1886,1888],{"id":1887},"the-sync-flow","🔄 The Sync Flow",[335,1890,1892],{"id":1891},"initial-load","Initial Load",[1459,1894,1896,1901,1911,1915,1918,1921],{"level":1895},"4",[1897,1898,1900],"h4",{"id":1899},"database-initialization","Database Initialization",[238,1902,1903,1904,1907,1908,1910],{},"Nuxt Content downloads the SQLite database dump generated during the build process. ",[1905,1906],"br",{},"\nThis file contains all parsed content from your ",[284,1909,1262],{}," directory.",[1897,1912,1914],{"id":1913},"draft-recovery","Draft Recovery",[238,1916,1917],{},"Studio checks IndexedDB for any existing drafts from previous sessions and loads them into the SQLite database.",[1897,1919,1920],{"id":1533},"Preview",[238,1922,1923],{},"Studio refreshes the site preview so you can view your latest drafts and edits directly on your production website.",[335,1925,1927],{"id":1926},"editing-content","Editing Content",[1459,1929,1930,1934,1946,1950,1953,1957,1960],{"level":1895},[1897,1931,1933],{"id":1932},"draft-modification","Draft Modification",[238,1935,1936,1937,1513,1940,1519,1943,456],{},"Changes are saved immediately in IndexedDB as draft items with a status of ",[284,1938,1939],{},"created",[284,1941,1942],{},"modified",[284,1944,1945],{},"deleted",[1897,1947,1949],{"id":1948},"database-update","Database Update",[238,1951,1952],{},"The local SQLite database is updated to include your draft content, allowing instant visual preview.",[1897,1954,1956],{"id":1955},"conflict-detection","Conflict Detection",[238,1958,1959],{},"Studio compares your draft content against the latest version on GitHub to detect possible conflicts.",[304,1961,1962,1967,1969],{},[238,1963,1964],{},[245,1965,1966],{},"Conflicts can occur when:",[1905,1968],{},[675,1970,1971,1974],{},[350,1972,1973],{},"Someone pushes a commit that modifies the same file and its version is currently building.",[350,1975,1976],{},"A deployment fails or hasn’t completed, leaving the production out of date and unsync with GitHub.",[335,1978,1980],{"id":1979},"publishing-changes","Publishing Changes",[1459,1982,1983,1987,1990,1994,1997,2001,2004,2008,2014],{"level":1895},[1897,1984,1986],{"id":1985},"draft-collection","Draft Collection",[238,1988,1989],{},"Studio gathers all draft items that contain changes.",[1897,1991,1993],{"id":1992},"github-commit","GitHub Commit",[238,1995,1996],{},"Using the GitHub API, Studio creates a new commit with all updated files.",[1897,1998,2000],{"id":1999},"deployment-trigger","Deployment Trigger",[238,2002,2003],{},"Your CI/CD platform detects the commit and automatically rebuilds and redeploys your website.",[1897,2005,2007],{"id":2006},"deployment-wait","Deployment Wait",[238,2009,2010,2011,2013],{},"After publication, Studio clears the local drafts and waits for the deployment to complete. ",[1905,2012],{},"\nDuring this time, a loading state is shown while the production SQLite database catches up with your latest commit.",[1827,2015,2016],{},"Until your commit is deployed, Studio remains in a pending state where the production database is not yet up to date.",[258,2018,2019],{"id":968},"🚀 Get Started Today",[238,2021,2022],{},"Install the module and configure your GitHub OAuth app to start editing content in production:",[276,2024,2026],{"className":278,"code":2025,"language":281,"meta":282,"style":282},"npx nuxi module add nuxt-studio@alpha\n",[284,2027,2028],{"__ignoreMap":282},[287,2029,2030,2032,2035,2037,2039],{"class":289,"line":290},[287,2031,988],{"class":987},[287,2033,2034],{"class":301}," nuxi",[287,2036,1325],{"class":301},[287,2038,994],{"class":301},[287,2040,2041],{"class":301}," nuxt-studio@alpha\n",[238,2043,2044,2045,2049],{},"Check out the ",[318,2046,2048],{"href":2047},"/docs/studio/setup","setup guide"," for complete installation and configuration instructions.",[1591,2051],{},[238,2053,2054,2055,1583,2058,2061],{},"We're excited to see what you build with Nuxt Studio. Join the conversation on ",[318,2056,1582],{"href":1580,"rel":2057},[322],[318,2059,1588],{"href":1586,"rel":2060},[322]," to help shape the future of the module.",[1041,2063,2064],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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);}",{"title":282,"searchDepth":423,"depth":423,"links":2066},[2067,2070,2071,2079,2087,2092],{"id":1682,"depth":423,"text":1683,"children":2068},[2069],{"id":1161,"depth":445,"text":1162},{"id":1732,"depth":423,"text":1733},{"id":1775,"depth":423,"text":1776,"children":2072},[2073,2075,2077],{"id":1779,"depth":445,"text":2074},"Beta Release Q4 2025",{"id":1818,"depth":445,"text":2076},"Stable Release End of Year 2025",{"id":1832,"depth":445,"text":2078},"Beyond 2026",{"id":1841,"depth":423,"text":1842,"children":2080},[2081,2083,2085],{"id":1848,"depth":445,"text":2082},"Production Database SQLite WASM",{"id":1858,"depth":445,"text":2084},"Draft Storage IndexedDB",{"id":1877,"depth":445,"text":2086},"GitHub Repository API Integration",{"id":1887,"depth":423,"text":1888,"children":2088},[2089,2090,2091],{"id":1891,"depth":445,"text":1892},{"id":1926,"depth":445,"text":1927},{"id":1979,"depth":445,"text":1980},{"id":968,"depth":423,"text":2019},"Release","2025-11-04","Introducing the first alpha release of Nuxt Studio as a free, open-source Nuxt module. Edit your content in production with GitHub integration and real-time preview.",{"src":2097,"alt":1643},"/blog/nuxt-studio-module-alpha.png",{},"/blog/studio-module-alpha",{"title":1643,"description":2095},"blog/studio-module-alpha","_QTuWA5f7MaS8hwBjBo4k-bZGGny6H7EE4zuMLN6QCE",{"id":2104,"title":2105,"authors":2106,"body":2109,"categories":208,"category":2443,"date":2444,"description":2445,"draft":50,"extension":1065,"image":2446,"meta":2449,"navigation":212,"path":2450,"seo":2451,"stem":2453,"__hash__":2454},"posts/blog/docus-v3.md","Docus, the Comeback",[2107],{"name":229,"avatar":2108,"to":232,"username":233},{"src":231},{"type":235,"value":2110,"toc":2420},[2111,2120,2127,2133,2148,2157,2176,2180,2192,2210,2215,2219,2227,2239,2242,2246,2254,2261,2265,2271,2274,2278,2284,2295,2299,2306,2317,2321,2327,2330,2347,2354,2364,2369,2375,2393,2399,2402,2408,2415,2418],[238,2112,2113,2114,2119],{},"We’ve completely rewritten the ",[318,2115,2118],{"href":2116,"rel":2117},"https://docus.dev",[322],"Docus"," theme. Reviving it with a fresh and modern foundation powered by the Nuxt ecosystem and designed by Nuxt UI to offer the best documentation experience.",[238,2121,2122,2123,2126],{},"The goal was simple: take ",[245,2124,2125],{},"the best parts of the Nuxt ecosystem"," and deliver a documentation theme that’s powerful, elegant and easy to maintain.",[258,2128,2130],{"id":2129},"whats-new-in-docus-v3",[245,2131,2132],{},"What’s New in Docus v3?",[335,2134,2136,2139,2140,2139,2145],{"id":2135},"a-real-nuxt-app-with-just-one-dependency",[245,2137,2138],{},"📦 A real"," ",[287,2141,2144],{"className":2142},[2143],"text-primary","Nuxt",[245,2146,2147],{},"app with just one dependency",[238,2149,2150,2151,2156],{},"Docus is built on top of ",[318,2152,2155],{"href":2153,"rel":2154},"https://nuxt.com",[322],"Nuxt 3"," (version 4 compatibility mode is enabled so we're already ready for Nuxt 4). That means your documentation is a full Nuxt application with access to the entire Nuxt features: components, modules, plugins, runtime config, and more.",[238,2158,2159,1513,2162,2165,2166,2168,2169,2172,2173,2175],{},[245,2160,2161],{},"But",[245,2163,2164],{},"the best part is","... You only need the ",[245,2167,1062],{}," package. It bundles all the necessary officials Nuxt modules, so you can start writing documentation in seconds. All you need in your app is a ",[284,2170,2171],{},"package.json"," file and a ",[284,2174,1262],{}," folder with your Markdown in it. Then you’re good to go.",[326,2177,2179],{"to":2178},"https://docus.dev/concepts/nuxt","Learn more about Nuxt layer in Docus dedicated section.",[335,2181,2183,2139,2186,2139,2189],{"id":2182},"designed-by-nuxt-ui-pro",[245,2184,2185],{},"✨ Designed by",[287,2187,2144],{"className":2188},[2143],[245,2190,2191],{},"UI Pro",[238,2193,2194,2195,2198,2199,1513,2202,2205,2206,2209],{},"Docus v2 is powered by ",[245,2196,2197],{},"Nuxt UI Pro",", giving you a beautiful, responsive, and accessible theme out of the box. With ",[245,2200,2201],{},"Tailwind CSS v4",[245,2203,2204],{},"CSS variables",", and the ",[245,2207,2208],{},"Tailwind Variants API",", your docs look great by default but stays fully customizable.",[238,2211,2212,2213,456],{},"You can tweak colors, update typography or adjust component styles globally or per component with simple updates in your ",[284,2214,730],{},[326,2216,2218],{"to":2217},"https://docus.dev/concepts/theme","Learn more about UI theming in Docus dedicated section.",[2220,2221,2222,2223,2226],"prose-note",{},"A UI Pro license is currently required, but we’re working to make it free for everyone soon. Also, if you're currently building an OSS documentation, you can ask for the OSS license at ",[284,2224,2225],{},"ui-pro@nuxt.com"," .",[335,2228,2230,2139,2233,2139,2236],{"id":2229},"️-markdown-with-superpowers-mdc-syntax-by-nuxt-content",[245,2231,2232],{},"✍️ Markdown with superpowers (MDC syntax by",[287,2234,2144],{"className":2235},[2143],[245,2237,2238],{},"Content)",[238,2240,2241],{},"Writing docs has never been more simple. You're one Markdown folder away from it. Furthermore with Nuxt Content and the MDC syntax, you can embed interactive Vue components in Markdown and use any Nuxt UI components or your own custom ones.",[326,2243,2245],{"to":2244},"https://docus.dev/concepts/edition","Learn more about MDC syntax in Docus dedicated section.",[335,2247,2249,2250,2253],{"id":2248},"️-nuxt-studio-ready","🖥️ ",[287,2251,2144],{"className":2252},[2143]," Studio ready",[238,2255,2256,2257,2260],{},"Docus works perfectly with ",[245,2258,2259],{},"Nuxt Studio",", allowing you to manage and edit your docs entirely from the browser. No terminal, no local setup. It’s the ideal way to collaborate with non-technical contributors or manage docs centrally for your team.",[326,2262,2264],{"to":2263},"https://docus.dev/getting-started/studio","Learn more about Studio editor in Docus dedicated section.",[335,2266,2268],{"id":2267},"seo-out-of-the-box",[245,2269,2270],{},"🔍 SEO out of the box",[238,2272,2273],{},"Technical SEO is tricky and boring. Docus offers a solid, opt-in default setup that works out of the box while giving you full control to customize your SEO metadata, from pages metas to social sharing images.",[326,2275,2277],{"to":2276},"https://docus.dev/concepts/configuration","Learn more about app configuration in Docus dedicated section.",[335,2279,2281],{"id":2280},"full-customization-via-component-overrides",[245,2282,2283],{},"🔧 Full customization via component overrides",[238,2285,2286,2287,2290,2291,2294],{},"Need to replace parts of the layout or UI? Docus uses ",[245,2288,2289],{},"Nuxt Layers"," to let you override core components we've defined. Just create a new component in your project’s ",[284,2292,2293],{},"components/"," directory using the same name, and Docus will automatically use it.",[326,2296,2298],{"to":2297},"https://docus.dev/concepts/customization","Learn more about components override in Docus dedicated section.",[335,2300,2302,2305],{"id":2301},"llms-integration-by-default",[245,2303,2304],{},"🤖"," LLMs integration by default",[238,2307,2308,2309,2312,2313,2316],{},"Docus integrates ",[284,2310,2311],{},"nuxt-llms"," by default to prepare your content for Large Language Models (LLMs). All your documentation pages are injected and ",[284,2314,2315],{},"/llms.txt"," file is automatically generated and pre-rendered.",[326,2318,2320],{"to":2319},"https://docus.dev/concepts/llms","Learn more about LLMs integration in Docus dedicated section.",[335,2322,2324],{"id":2323},"smart-defaults-for-a-ready-docs",[245,2325,2326],{},"🧠 Smart defaults for a ready docs",[238,2328,2329],{},"Docus includes thoughtful defaults that save you time:",[675,2331,2332,2335,2338,2341,2344],{},[350,2333,2334],{},"✅ Auto-generated sidebar navigation from your folder structure",[350,2336,2337],{},"🔍 Full-text search using Fuse.js",[350,2339,2340],{},"✨ Optimized typography and layout",[350,2342,2343],{},"🌙 Dark mode support out of the box",[350,2345,2346],{},"🖼️ Nuxt Image integration for responsive, optimized images",[335,2348,2350,2353],{"id":2349},"easy-migration",[245,2351,2352],{},"🔁"," Easy migration",[238,2355,2356,2357,2360,2361,2363],{},"Moving from any Markdown-based is straightforward: drop your ",[284,2358,2359],{},".md"," files into your ",[284,2362,1262],{}," folder and you’re live.",[258,2365,2366],{"id":1032},[245,2367,2368],{},"What’s Next?",[335,2370,2372],{"id":2371},"try-docus-today",[245,2373,2374],{},"🔧 Try Docus Today",[276,2376,2378],{"className":278,"code":2377,"language":281,"meta":282,"style":282},"npx docus init docs\n",[284,2379,2380],{"__ignoreMap":282},[287,2381,2382,2384,2387,2390],{"class":289,"line":290},[287,2383,988],{"class":987},[287,2385,2386],{"class":301}," docus",[287,2388,2389],{"class":301}," init",[287,2391,2392],{"class":301}," docs\n",[238,2394,2395,2396,2398],{},"That's it 🚀 You're ready to edit your ",[284,2397,1262],{}," folder and start writing your doc.",[326,2400,2401],{"to":2116},"Visit the documentation to learn everything about Docus.",[335,2403,2405],{"id":2404},"contribute",[245,2406,2407],{},"🤝 Contribute",[238,2409,2410,2411,2414],{},"We’ve moved the repository to the ",[245,2412,2413],{},"NuxtLabs"," GitHub organization and cleaned up the issue tracker to start fresh.",[238,2416,2417],{},"Whether you’re fixing bugs, suggesting features, or writing docs, we’d love your help. Feedback, contributions, and discussions about the future of Docus are all welcome!",[1041,2419,2064],{},{"title":282,"searchDepth":423,"depth":423,"links":2421},[2422,2439],{"id":2129,"depth":423,"text":2132,"children":2423},[2424,2426,2428,2430,2432,2433,2434,2436,2437],{"id":2135,"depth":445,"text":2425},"📦 A real Nuxt app with just one dependency",{"id":2182,"depth":445,"text":2427},"✨ Designed by Nuxt UI Pro",{"id":2229,"depth":445,"text":2429},"✍️ Markdown with superpowers (MDC syntax by Nuxt Content)",{"id":2248,"depth":445,"text":2431},"🖥️ Nuxt Studio ready",{"id":2267,"depth":445,"text":2270},{"id":2280,"depth":445,"text":2283},{"id":2301,"depth":445,"text":2435},"🤖 LLMs integration by default",{"id":2323,"depth":445,"text":2326},{"id":2349,"depth":445,"text":2438},"🔁 Easy migration",{"id":1032,"depth":423,"text":2368,"children":2440},[2441,2442],{"id":2371,"depth":445,"text":2374},{"id":2404,"depth":445,"text":2407},"content","2025-06-13","The Nuxt documentation theme and CLI is back with version 3 rewritten from the ground up.",{"src":2447,"alt":2448},"https://docus.dev/__og-image__/static/og.png","Docus Landing Page",{},"/blog/docus-v3",{"title":2452,"description":2445},"Docus v3 — The Return of the Nuxt Docs Theme","blog/docus-v3","N7NSaIMli7LiUYi0E63N6rt3pcn6_QrykvkbADbLepU",{"id":2456,"title":2457,"authors":2458,"body":2461,"categories":208,"category":20,"date":7370,"description":7371,"draft":50,"extension":1065,"image":7372,"meta":7374,"navigation":212,"path":7375,"seo":7376,"stem":7377,"__hash__":7378},"posts/blog/ui-pro-docs-migration.md","Migrate Nuxt UI Pro Documentation Starter",[2459],{"name":229,"avatar":2460,"to":232,"username":233},{"src":231},{"type":235,"value":2462,"toc":7344},[2463,2468,2473,2487,2506,2510,2514,2518,2579,2587,2598,2949,2970,2976,2983,3268,3272,3561,3565,4191,4195,4198,4208,4273,4277,4287,4291,4310,4313,4377,4385,4389,4393,4397,4400,4921,4931,4948,5216,5222,5229,5591,5597,5640,5928,5932,5940,5947,6925,6929,7244,7247,7251,7254,7266,7324,7337,7341],[2464,2465,2467],"h1",{"id":2466},"how-to-upgrade-your-nuxt-documentation-website-to-content-x-ui-v3","How to upgrade your Nuxt documentation website to Content x UI v3",[238,2469,2470],{},[245,2471,2472],{},"2025 kicks off with the power of 3!",[238,2474,2475,2476,2479,2480,2483,2484,456],{},"This start of year is marked by major updates to our favorite tools. The UI team is about to launch ",[245,2477,2478],{},"version 3"," of the ",[245,2481,2482],{},"UI / UI Pro libraries"," (currently in alpha), while the Content team has already released ",[245,2485,2486],{},"Nuxt Content v3",[238,2488,2489,2490,2493,2494,2497,2498,2501,2502,2505],{},"These updates mean that all our starter templates combining ",[245,2491,2492],{},"Content"," and ",[245,2495,2496],{},"UI"," will need to be updated to align with the latest versions. To help you make the transition, this guide walks through migrating the ",[245,2499,2500],{},"Nuxt UI Pro Docs Starter"," to the new ",[245,2503,2504],{},"Content v3 and Nuxt UI v3"," packages.",[326,2507,2509],{"to":2508},"https://github.com/nuxt-ui-pro/docs/tree/v3","Check the UI Pro documentation starter repository source code.",[258,2511,2513],{"id":2512},"content-migration-v2-v3","Content migration (v2 → v3)",[335,2515,2517],{"id":2516},"_1-update-package-to-v3","1. Update package to v3",[2519,2520,2521,2536,2550,2565],"code-group",{},[276,2522,2525],{"className":278,"code":2523,"filename":2524,"language":281,"meta":282,"style":282},"pnpm add @nuxt/content@^3\n","pnpm",[284,2526,2527],{"__ignoreMap":282},[287,2528,2529,2531,2533],{"class":289,"line":290},[287,2530,2524],{"class":987},[287,2532,994],{"class":301},[287,2534,2535],{"class":301}," @nuxt/content@^3\n",[276,2537,2540],{"className":278,"code":2538,"filename":2539,"language":281,"meta":282,"style":282},"yarn add @nuxt/content@^3\n","yarn",[284,2541,2542],{"__ignoreMap":282},[287,2543,2544,2546,2548],{"class":289,"line":290},[287,2545,2539],{"class":987},[287,2547,994],{"class":301},[287,2549,2535],{"class":301},[276,2551,2554],{"className":278,"code":2552,"filename":2553,"language":281,"meta":282,"style":282},"npm install @nuxt/content@^3\n","npm",[284,2555,2556],{"__ignoreMap":282},[287,2557,2558,2560,2563],{"class":289,"line":290},[287,2559,2553],{"class":987},[287,2561,2562],{"class":301}," install",[287,2564,2535],{"class":301},[276,2566,2569],{"className":278,"code":2567,"filename":2568,"language":281,"meta":282,"style":282},"bun add @nuxt/content@^3\n","bun",[284,2570,2571],{"__ignoreMap":282},[287,2572,2573,2575,2577],{"class":289,"line":290},[287,2574,2568],{"class":987},[287,2576,994],{"class":301},[287,2578,2535],{"class":301},[335,2580,2582,2583,2586],{"id":2581},"_2-create-contentconfigts-file","2. Create ",[284,2584,2585],{},"content.config.ts"," file",[238,2588,2589,2590,2593,2594,2597],{},"This configuration file defines your data structure. A collection represents a set of related items. In the case of the docs starter, there are two different collections, the ",[284,2591,2592],{},"landing"," collection representing the home page and another ",[284,2595,2596],{},"docs"," collection for the documentation pages.",[276,2599,2603],{"className":2600,"code":2601,"filename":2585,"language":2602,"meta":282,"style":282},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineContentConfig, defineCollection, z } from '@nuxt/content'\n\nexport default defineContentConfig({\n  collections: {\n    landing: defineCollection({\n      type: 'page',\n      source: 'index.yml'\n    }),\n    docs: defineCollection({\n      type: 'page',\n      source: {\n        include: '**',\n        exclude: ['index.yml']\n      },\n      schema: z.object({\n        links: z.array(z.object({\n          label: z.string(),\n          icon: z.string(),\n          to: z.string(),\n          target: z.string().optional()\n        })).optional()\n      })\n    })\n  }\n})\n","js",[284,2604,2605,2639,2644,2656,2665,2678,2694,2708,2717,2730,2744,2752,2768,2785,2790,2807,2832,2849,2866,2884,2908,2923,2930,2937,2942],{"__ignoreMap":282},[287,2606,2607,2610,2613,2616,2619,2622,2624,2626,2629,2632,2634,2637],{"class":289,"line":290},[287,2608,2609],{"class":406},"import",[287,2611,2612],{"class":297}," {",[287,2614,2615],{"class":293}," defineContentConfig",[287,2617,2618],{"class":297},",",[287,2620,2621],{"class":293}," defineCollection",[287,2623,2618],{"class":297},[287,2625,453],{"class":293},[287,2627,2628],{"class":297}," }",[287,2630,2631],{"class":406}," from",[287,2633,433],{"class":297},[287,2635,2636],{"class":301},"@nuxt/content",[287,2638,836],{"class":297},[287,2640,2641],{"class":289,"line":423},[287,2642,2643],{"emptyLinePlaceholder":212},"\n",[287,2645,2646,2648,2650,2652,2654],{"class":289,"line":445},[287,2647,407],{"class":406},[287,2649,410],{"class":406},[287,2651,2615],{"class":413},[287,2653,417],{"class":293},[287,2655,420],{"class":297},[287,2657,2658,2661,2663],{"class":289,"line":466},[287,2659,2660],{"class":426},"  collections",[287,2662,430],{"class":297},[287,2664,537],{"class":297},[287,2666,2667,2670,2672,2674,2676],{"class":289,"line":501},[287,2668,2669],{"class":426},"    landing",[287,2671,430],{"class":297},[287,2673,2621],{"class":413},[287,2675,417],{"class":293},[287,2677,420],{"class":297},[287,2679,2680,2683,2685,2687,2690,2692],{"class":289,"line":512},[287,2681,2682],{"class":426},"      type",[287,2684,430],{"class":297},[287,2686,433],{"class":297},[287,2688,2689],{"class":301},"page",[287,2691,439],{"class":297},[287,2693,442],{"class":297},[287,2695,2696,2699,2701,2703,2706],{"class":289,"line":540},[287,2697,2698],{"class":426},"      source",[287,2700,430],{"class":297},[287,2702,433],{"class":297},[287,2704,2705],{"class":301},"index.yml",[287,2707,836],{"class":297},[287,2709,2710,2713,2715],{"class":289,"line":565},[287,2711,2712],{"class":297},"    }",[287,2714,507],{"class":293},[287,2716,442],{"class":297},[287,2718,2719,2722,2724,2726,2728],{"class":289,"line":573},[287,2720,2721],{"class":426},"    docs",[287,2723,430],{"class":297},[287,2725,2621],{"class":413},[287,2727,417],{"class":293},[287,2729,420],{"class":297},[287,2731,2732,2734,2736,2738,2740,2742],{"class":289,"line":586},[287,2733,2682],{"class":426},[287,2735,430],{"class":297},[287,2737,433],{"class":297},[287,2739,2689],{"class":301},[287,2741,439],{"class":297},[287,2743,442],{"class":297},[287,2745,2746,2748,2750],{"class":289,"line":603},[287,2747,2698],{"class":426},[287,2749,430],{"class":297},[287,2751,537],{"class":297},[287,2753,2754,2757,2759,2761,2764,2766],{"class":289,"line":636},[287,2755,2756],{"class":426},"        include",[287,2758,430],{"class":297},[287,2760,433],{"class":297},[287,2762,2763],{"class":301},"**",[287,2765,439],{"class":297},[287,2767,442],{"class":297},[287,2769,2770,2773,2775,2777,2779,2781,2783],{"class":289,"line":645},[287,2771,2772],{"class":426},"        exclude",[287,2774,430],{"class":297},[287,2776,581],{"class":293},[287,2778,439],{"class":297},[287,2780,2705],{"class":301},[287,2782,439],{"class":297},[287,2784,642],{"class":293},[287,2786,2787],{"class":289,"line":651},[287,2788,2789],{"class":297},"      },\n",[287,2791,2792,2795,2797,2799,2801,2803,2805],{"class":289,"line":657},[287,2793,2794],{"class":426},"      schema",[287,2796,430],{"class":297},[287,2798,453],{"class":293},[287,2800,456],{"class":297},[287,2802,459],{"class":413},[287,2804,417],{"class":293},[287,2806,420],{"class":297},[287,2808,2809,2812,2814,2816,2818,2821,2824,2826,2828,2830],{"class":289,"line":886},[287,2810,2811],{"class":426},"        links",[287,2813,430],{"class":297},[287,2815,453],{"class":293},[287,2817,456],{"class":297},[287,2819,2820],{"class":413},"array",[287,2822,2823],{"class":293},"(z",[287,2825,456],{"class":297},[287,2827,459],{"class":413},[287,2829,417],{"class":293},[287,2831,420],{"class":297},[287,2833,2834,2837,2839,2841,2843,2845,2847],{"class":289,"line":891},[287,2835,2836],{"class":426},"          label",[287,2838,430],{"class":297},[287,2840,453],{"class":293},[287,2842,456],{"class":297},[287,2844,478],{"class":413},[287,2846,481],{"class":293},[287,2848,442],{"class":297},[287,2850,2851,2854,2856,2858,2860,2862,2864],{"class":289,"line":896},[287,2852,2853],{"class":426},"          icon",[287,2855,430],{"class":297},[287,2857,453],{"class":293},[287,2859,456],{"class":297},[287,2861,478],{"class":413},[287,2863,481],{"class":293},[287,2865,442],{"class":297},[287,2867,2869,2872,2874,2876,2878,2880,2882],{"class":289,"line":2868},19,[287,2870,2871],{"class":426},"          to",[287,2873,430],{"class":297},[287,2875,453],{"class":293},[287,2877,456],{"class":297},[287,2879,478],{"class":413},[287,2881,481],{"class":293},[287,2883,442],{"class":297},[287,2885,2887,2890,2892,2894,2896,2898,2900,2902,2905],{"class":289,"line":2886},20,[287,2888,2889],{"class":426},"          target",[287,2891,430],{"class":297},[287,2893,453],{"class":293},[287,2895,456],{"class":297},[287,2897,478],{"class":413},[287,2899,481],{"class":293},[287,2901,456],{"class":297},[287,2903,2904],{"class":413},"optional",[287,2906,2907],{"class":293},"()\n",[287,2909,2911,2914,2917,2919,2921],{"class":289,"line":2910},21,[287,2912,2913],{"class":297},"        }",[287,2915,2916],{"class":293},"))",[287,2918,456],{"class":297},[287,2920,2904],{"class":413},[287,2922,2907],{"class":293},[287,2924,2926,2928],{"class":289,"line":2925},22,[287,2927,639],{"class":297},[287,2929,498],{"class":293},[287,2931,2933,2935],{"class":289,"line":2932},23,[287,2934,2712],{"class":297},[287,2936,498],{"class":293},[287,2938,2940],{"class":289,"line":2939},24,[287,2941,654],{"class":297},[287,2943,2945,2947],{"class":289,"line":2944},25,[287,2946,622],{"class":297},[287,2948,498],{"class":293},[238,2950,2951,2952,2957,2958,2961,2962,2964,2965,456],{},"On top of the built-in fields provided by the ",[318,2953,2955],{"href":2954},"/docs/collections/types#page-type",[284,2956,2689],{}," type, we added the extra field ",[284,2959,2960],{},"links"," to the ",[284,2963,2596],{}," collection so we can optionally display them in the docs ",[318,2966,2969],{"href":2967,"rel":2968},"https://ui3.nuxt.dev/components/page-header",[322],"page header",[326,2971,1477,2972,2975],{},[284,2973,2974],{},"type: page"," means there is a 1-to-1 relationship between the content file and a page on your site.",[335,2977,2979,2980],{"id":2978},"_3-migrate-appvue","3. Migrate ",[284,2981,2982],{},"app.vue",[1459,2984,2985,2996,3105,3111],{"level":1895},[1897,2986,2988,2989,2992,2993,2995],{"id":2987},"navigation-fetch-can-be-updated-by-moving-from-fetchcontentnavigation-to-querycollectionnavigation-method","Navigation fetch can be updated by moving from ",[284,2990,2991],{},"fetchContentNavigation"," to ",[284,2994,84],{}," method",[2997,2998,2999,3059],"prose-code-group",{},[276,3000,3003],{"className":1336,"code":3001,"filename":3002,"language":1339,"meta":282,"style":282},"const { data: navigation } = await useAsyncData('navigation', () => queryCollectionNavigation('docs'))\n\n","app.vue (v3)",[284,3004,3005],{"__ignoreMap":282},[287,3006,3007,3010,3012,3015,3017,3020,3022,3024,3026,3029,3031,3033,3036,3038,3040,3043,3045,3048,3050,3052,3054,3056],{"class":289,"line":290},[287,3008,3009],{"class":520},"const",[287,3011,2612],{"class":297},[287,3013,3014],{"class":426}," data",[287,3016,430],{"class":297},[287,3018,3019],{"class":293}," navigation ",[287,3021,622],{"class":297},[287,3023,549],{"class":297},[287,3025,552],{"class":406},[287,3027,3028],{"class":413}," useAsyncData",[287,3030,417],{"class":293},[287,3032,439],{"class":297},[287,3034,3035],{"class":301},"navigation",[287,3037,439],{"class":297},[287,3039,2618],{"class":297},[287,3041,3042],{"class":297}," ()",[287,3044,534],{"class":520},[287,3046,3047],{"class":413}," queryCollectionNavigation",[287,3049,417],{"class":293},[287,3051,439],{"class":297},[287,3053,2596],{"class":301},[287,3055,439],{"class":297},[287,3057,3058],{"class":293},"))\n",[276,3060,3063],{"className":1336,"code":3061,"filename":3062,"language":1339,"meta":282,"style":282},"const { data: navigation } = await useAsyncData('navigation', () => fetchContentNavigation())\n","app.vue (v2)",[284,3064,3065],{"__ignoreMap":282},[287,3066,3067,3069,3071,3073,3075,3077,3079,3081,3083,3085,3087,3089,3091,3093,3095,3097,3099,3102],{"class":289,"line":290},[287,3068,3009],{"class":520},[287,3070,2612],{"class":297},[287,3072,3014],{"class":426},[287,3074,430],{"class":297},[287,3076,3019],{"class":293},[287,3078,622],{"class":297},[287,3080,549],{"class":297},[287,3082,552],{"class":406},[287,3084,3028],{"class":413},[287,3086,417],{"class":293},[287,3088,439],{"class":297},[287,3090,3035],{"class":301},[287,3092,439],{"class":297},[287,3094,2618],{"class":297},[287,3096,3042],{"class":297},[287,3098,534],{"class":520},[287,3100,3101],{"class":413}," fetchContentNavigation",[287,3103,3104],{"class":293},"())\n",[1897,3106,3108,3109,2995],{"id":3107},"content-search-command-palette-data-can-use-the-new-querycollectionsearchsections-method","Content search command palette data can use the new ",[284,3110,92],{},[2997,3112,3113,3188],{},[276,3114,3116],{"className":1336,"code":3115,"filename":3002,"language":1339,"meta":282,"style":282},"const { data: files } = useLazyAsyncData('search', () => queryCollectionSearchSections('docs'), {\n  server: false,\n})\n",[284,3117,3118,3170,3182],{"__ignoreMap":282},[287,3119,3120,3122,3124,3126,3128,3131,3133,3135,3138,3140,3142,3145,3147,3149,3151,3153,3156,3158,3160,3162,3164,3166,3168],{"class":289,"line":290},[287,3121,3009],{"class":520},[287,3123,2612],{"class":297},[287,3125,3014],{"class":426},[287,3127,430],{"class":297},[287,3129,3130],{"class":293}," files ",[287,3132,622],{"class":297},[287,3134,549],{"class":297},[287,3136,3137],{"class":413}," useLazyAsyncData",[287,3139,417],{"class":293},[287,3141,439],{"class":297},[287,3143,3144],{"class":301},"search",[287,3146,439],{"class":297},[287,3148,2618],{"class":297},[287,3150,3042],{"class":297},[287,3152,534],{"class":520},[287,3154,3155],{"class":413}," queryCollectionSearchSections",[287,3157,417],{"class":293},[287,3159,439],{"class":297},[287,3161,2596],{"class":301},[287,3163,439],{"class":297},[287,3165,507],{"class":293},[287,3167,2618],{"class":297},[287,3169,537],{"class":297},[287,3171,3172,3175,3177,3180],{"class":289,"line":423},[287,3173,3174],{"class":426},"  server",[287,3176,430],{"class":297},[287,3178,3179],{"class":777}," false",[287,3181,442],{"class":297},[287,3183,3184,3186],{"class":289,"line":445},[287,3185,622],{"class":297},[287,3187,498],{"class":293},[276,3189,3191],{"className":1336,"code":3190,"filename":3062,"language":1339,"meta":282,"style":282},"const { data: files } = useLazyFetch\u003CParsedContent[]>('/api/search.json', {\n  default: () => [],\n  server: false\n})\n",[284,3192,3193,3237,3253,3262],{"__ignoreMap":282},[287,3194,3195,3197,3199,3201,3203,3205,3207,3209,3212,3215,3218,3221,3224,3226,3228,3231,3233,3235],{"class":289,"line":290},[287,3196,3009],{"class":520},[287,3198,2612],{"class":297},[287,3200,3014],{"class":426},[287,3202,430],{"class":297},[287,3204,3130],{"class":293},[287,3206,622],{"class":297},[287,3208,549],{"class":297},[287,3210,3211],{"class":413}," useLazyFetch",[287,3213,3214],{"class":297},"\u003C",[287,3216,3217],{"class":987},"ParsedContent",[287,3219,3220],{"class":293},"[]",[287,3222,3223],{"class":297},">",[287,3225,417],{"class":293},[287,3227,439],{"class":297},[287,3229,3230],{"class":301},"/api/search.json",[287,3232,439],{"class":297},[287,3234,2618],{"class":297},[287,3236,537],{"class":297},[287,3238,3239,3242,3244,3246,3248,3251],{"class":289,"line":423},[287,3240,3241],{"class":413},"  default",[287,3243,430],{"class":297},[287,3245,3042],{"class":297},[287,3247,534],{"class":520},[287,3249,3250],{"class":293}," []",[287,3252,442],{"class":297},[287,3254,3255,3257,3259],{"class":289,"line":445},[287,3256,3174],{"class":426},[287,3258,430],{"class":297},[287,3260,3261],{"class":777}," false\n",[287,3263,3264,3266],{"class":289,"line":466},[287,3265,622],{"class":297},[287,3267,498],{"class":293},[335,3269,3271],{"id":3270},"_4-migrate-landing-page","4. Migrate landing page",[1459,3273,3274,3283,3423,3437,3550],{"level":1895},[1897,3275,3277,3278,2992,3281,2995],{"id":3276},"home-page-data-fetching-can-be-updated-by-moving-from-querycontent-to-querycollection-method","Home page data fetching can be updated by moving from ",[284,3279,3280],{},"queryContent",[284,3282,80],{},[2997,3284,3285,3363],{},[276,3286,3289],{"className":1336,"code":3287,"filename":3288,"language":1339,"meta":282,"style":282},"const { data: page } = await useAsyncData('index', () => queryCollection('landing').path('/').first())\n","index.vue (v3)",[284,3290,3291],{"__ignoreMap":282},[287,3292,3293,3295,3297,3299,3301,3304,3306,3308,3310,3312,3314,3316,3319,3321,3323,3325,3327,3330,3332,3334,3336,3338,3340,3342,3345,3347,3349,3352,3354,3356,3358,3361],{"class":289,"line":290},[287,3294,3009],{"class":520},[287,3296,2612],{"class":297},[287,3298,3014],{"class":426},[287,3300,430],{"class":297},[287,3302,3303],{"class":293}," page ",[287,3305,622],{"class":297},[287,3307,549],{"class":297},[287,3309,552],{"class":406},[287,3311,3028],{"class":413},[287,3313,417],{"class":293},[287,3315,439],{"class":297},[287,3317,3318],{"class":301},"index",[287,3320,439],{"class":297},[287,3322,2618],{"class":297},[287,3324,3042],{"class":297},[287,3326,534],{"class":520},[287,3328,3329],{"class":413}," queryCollection",[287,3331,417],{"class":293},[287,3333,439],{"class":297},[287,3335,2592],{"class":301},[287,3337,439],{"class":297},[287,3339,507],{"class":293},[287,3341,456],{"class":297},[287,3343,3344],{"class":413},"path",[287,3346,417],{"class":293},[287,3348,439],{"class":297},[287,3350,3351],{"class":301},"/",[287,3353,439],{"class":297},[287,3355,507],{"class":293},[287,3357,456],{"class":297},[287,3359,3360],{"class":413},"first",[287,3362,3104],{"class":293},[276,3364,3367],{"className":1336,"code":3365,"filename":3366,"language":1339,"meta":282,"style":282},"const { data: page } = await useAsyncData('index', () => queryContent('/').findOne())\n","index.vue (v2)",[284,3368,3369],{"__ignoreMap":282},[287,3370,3371,3373,3375,3377,3379,3381,3383,3385,3387,3389,3391,3393,3395,3397,3399,3401,3403,3406,3408,3410,3412,3414,3416,3418,3421],{"class":289,"line":290},[287,3372,3009],{"class":520},[287,3374,2612],{"class":297},[287,3376,3014],{"class":426},[287,3378,430],{"class":297},[287,3380,3303],{"class":293},[287,3382,622],{"class":297},[287,3384,549],{"class":297},[287,3386,552],{"class":406},[287,3388,3028],{"class":413},[287,3390,417],{"class":293},[287,3392,439],{"class":297},[287,3394,3318],{"class":301},[287,3396,439],{"class":297},[287,3398,2618],{"class":297},[287,3400,3042],{"class":297},[287,3402,534],{"class":520},[287,3404,3405],{"class":413}," queryContent",[287,3407,417],{"class":293},[287,3409,439],{"class":297},[287,3411,3351],{"class":301},[287,3413,439],{"class":297},[287,3415,507],{"class":293},[287,3417,456],{"class":297},[287,3419,3420],{"class":413},"findOne",[287,3422,3104],{"class":293},[1897,3424,3426,3429,3430,3433,3434,3436],{"id":3425},"useseometa-can-be-populated-using-the-seo-field-provided-by-the-page-type",[284,3427,3428],{},"useSeoMeta"," can be populated using the ",[284,3431,3432],{},"seo"," field provided by the ",[318,3435,2689],{"href":2954}," type",[276,3438,3441],{"className":1336,"code":3439,"filename":3440,"language":1339,"meta":282,"style":282},"useSeoMeta({\ntitle: page.value.seo.title,\nogTitle: page.value.seo.title,\ndescription: page.value.seo.description,\nogDescription: page.value.seo.description\n})\n","index.vue",[284,3442,3443,3451,3476,3499,3522,3544],{"__ignoreMap":282},[287,3444,3445,3447,3449],{"class":289,"line":290},[287,3446,3428],{"class":413},[287,3448,417],{"class":293},[287,3450,420],{"class":297},[287,3452,3453,3456,3458,3461,3463,3466,3468,3470,3472,3474],{"class":289,"line":423},[287,3454,3455],{"class":426},"title",[287,3457,430],{"class":297},[287,3459,3460],{"class":293}," page",[287,3462,456],{"class":297},[287,3464,3465],{"class":293},"value",[287,3467,456],{"class":297},[287,3469,3432],{"class":293},[287,3471,456],{"class":297},[287,3473,3455],{"class":293},[287,3475,442],{"class":297},[287,3477,3478,3481,3483,3485,3487,3489,3491,3493,3495,3497],{"class":289,"line":445},[287,3479,3480],{"class":426},"ogTitle",[287,3482,430],{"class":297},[287,3484,3460],{"class":293},[287,3486,456],{"class":297},[287,3488,3465],{"class":293},[287,3490,456],{"class":297},[287,3492,3432],{"class":293},[287,3494,456],{"class":297},[287,3496,3455],{"class":293},[287,3498,442],{"class":297},[287,3500,3501,3504,3506,3508,3510,3512,3514,3516,3518,3520],{"class":289,"line":466},[287,3502,3503],{"class":426},"description",[287,3505,430],{"class":297},[287,3507,3460],{"class":293},[287,3509,456],{"class":297},[287,3511,3465],{"class":293},[287,3513,456],{"class":297},[287,3515,3432],{"class":293},[287,3517,456],{"class":297},[287,3519,3503],{"class":293},[287,3521,442],{"class":297},[287,3523,3524,3527,3529,3531,3533,3535,3537,3539,3541],{"class":289,"line":501},[287,3525,3526],{"class":426},"ogDescription",[287,3528,430],{"class":297},[287,3530,3460],{"class":293},[287,3532,456],{"class":297},[287,3534,3465],{"class":293},[287,3536,456],{"class":297},[287,3538,3432],{"class":293},[287,3540,456],{"class":297},[287,3542,3543],{"class":293},"description\n",[287,3545,3546,3548],{"class":289,"line":512},[287,3547,622],{"class":297},[287,3549,498],{"class":293},[2220,3551,3552,3553,3555,3556,2493,3558,3560],{},"Please note that the ",[284,3554,3432],{}," field is automatically overridden by the root ",[284,3557,3455],{},[284,3559,3503],{}," if not set.",[335,3562,3564],{"id":3563},"_5-migrate-catch-all-docs-page","5. Migrate catch-all docs page",[1459,3566,3567,3578,4047,4058,4183],{"level":1895},[1897,3568,3570,3571,2992,3573,2493,3575,3577],{"id":3569},"docs-page-data-and-surround-fetching-can-be-updated-and-mutualised-by-moving-from-querycontent-to-querycollection-and-querycollectionitemsurroundings-methods","Docs page data and surround fetching can be updated and mutualised by moving from ",[284,3572,3280],{},[284,3574,80],{},[284,3576,88],{}," methods",[2997,3579,3580,3837],{},[276,3581,3584],{"className":1336,"code":3582,"filename":3583,"language":1339,"meta":282,"style":282},"const { data } = await useAsyncData(route.path, () => Promise.all([\n  queryCollection('docs').path(route.path).first(),\n  queryCollectionItemSurroundings('docs', route.path, {\n    fields: ['title', 'description'],\n  }),\n]), {\n  transform: ([page, surround]) => ({ page, surround }),\n})\n\nconst page = computed(() => data.value?.page)\nconst surround = computed(() => data.value?.surround)\n","docs/[...slug].vue (v3)",[284,3585,3586,3627,3661,3687,3715,3723,3732,3771,3777,3781,3810],{"__ignoreMap":282},[287,3587,3588,3590,3592,3595,3597,3599,3601,3603,3606,3608,3610,3612,3614,3616,3619,3621,3624],{"class":289,"line":290},[287,3589,3009],{"class":520},[287,3591,2612],{"class":297},[287,3593,3594],{"class":293}," data ",[287,3596,622],{"class":297},[287,3598,549],{"class":297},[287,3600,552],{"class":406},[287,3602,3028],{"class":413},[287,3604,3605],{"class":293},"(route",[287,3607,456],{"class":297},[287,3609,3344],{"class":293},[287,3611,2618],{"class":297},[287,3613,3042],{"class":297},[287,3615,534],{"class":520},[287,3617,3618],{"class":987}," Promise",[287,3620,456],{"class":297},[287,3622,3623],{"class":413},"all",[287,3625,3626],{"class":293},"([\n",[287,3628,3629,3632,3634,3636,3638,3640,3642,3644,3646,3648,3650,3653,3655,3657,3659],{"class":289,"line":423},[287,3630,3631],{"class":413},"  queryCollection",[287,3633,417],{"class":293},[287,3635,439],{"class":297},[287,3637,2596],{"class":301},[287,3639,439],{"class":297},[287,3641,507],{"class":293},[287,3643,456],{"class":297},[287,3645,3344],{"class":413},[287,3647,3605],{"class":293},[287,3649,456],{"class":297},[287,3651,3652],{"class":293},"path)",[287,3654,456],{"class":297},[287,3656,3360],{"class":413},[287,3658,481],{"class":293},[287,3660,442],{"class":297},[287,3662,3663,3666,3668,3670,3672,3674,3676,3679,3681,3683,3685],{"class":289,"line":445},[287,3664,3665],{"class":413},"  queryCollectionItemSurroundings",[287,3667,417],{"class":293},[287,3669,439],{"class":297},[287,3671,2596],{"class":301},[287,3673,439],{"class":297},[287,3675,2618],{"class":297},[287,3677,3678],{"class":293}," route",[287,3680,456],{"class":297},[287,3682,3344],{"class":293},[287,3684,2618],{"class":297},[287,3686,537],{"class":297},[287,3688,3689,3692,3694,3696,3698,3700,3702,3704,3706,3708,3710,3713],{"class":289,"line":466},[287,3690,3691],{"class":426},"    fields",[287,3693,430],{"class":297},[287,3695,581],{"class":293},[287,3697,439],{"class":297},[287,3699,3455],{"class":301},[287,3701,439],{"class":297},[287,3703,2618],{"class":297},[287,3705,433],{"class":297},[287,3707,3503],{"class":301},[287,3709,439],{"class":297},[287,3711,3712],{"class":293},"]",[287,3714,442],{"class":297},[287,3716,3717,3719,3721],{"class":289,"line":501},[287,3718,504],{"class":297},[287,3720,507],{"class":293},[287,3722,442],{"class":297},[287,3724,3725,3728,3730],{"class":289,"line":512},[287,3726,3727],{"class":293},"])",[287,3729,2618],{"class":297},[287,3731,537],{"class":297},[287,3733,3734,3737,3739,3742,3744,3746,3749,3751,3753,3755,3758,3760,3762,3765,3767,3769],{"class":289,"line":540},[287,3735,3736],{"class":413},"  transform",[287,3738,430],{"class":297},[287,3740,3741],{"class":297}," ([",[287,3743,2689],{"class":527},[287,3745,2618],{"class":297},[287,3747,3748],{"class":527}," surround",[287,3750,3727],{"class":297},[287,3752,534],{"class":520},[287,3754,929],{"class":293},[287,3756,3757],{"class":297},"{",[287,3759,3460],{"class":293},[287,3761,2618],{"class":297},[287,3763,3764],{"class":293}," surround ",[287,3766,622],{"class":297},[287,3768,507],{"class":293},[287,3770,442],{"class":297},[287,3772,3773,3775],{"class":289,"line":565},[287,3774,622],{"class":297},[287,3776,498],{"class":293},[287,3778,3779],{"class":289,"line":573},[287,3780,2643],{"emptyLinePlaceholder":212},[287,3782,3783,3785,3787,3789,3792,3794,3796,3798,3800,3802,3804,3807],{"class":289,"line":586},[287,3784,3009],{"class":520},[287,3786,3303],{"class":293},[287,3788,298],{"class":297},[287,3790,3791],{"class":413}," computed",[287,3793,417],{"class":293},[287,3795,481],{"class":297},[287,3797,534],{"class":520},[287,3799,3014],{"class":293},[287,3801,456],{"class":297},[287,3803,3465],{"class":293},[287,3805,3806],{"class":297},"?.",[287,3808,3809],{"class":293},"page)\n",[287,3811,3812,3814,3816,3818,3820,3822,3824,3826,3828,3830,3832,3834],{"class":289,"line":603},[287,3813,3009],{"class":520},[287,3815,3764],{"class":293},[287,3817,298],{"class":297},[287,3819,3791],{"class":413},[287,3821,417],{"class":293},[287,3823,481],{"class":297},[287,3825,534],{"class":520},[287,3827,3014],{"class":293},[287,3829,456],{"class":297},[287,3831,3465],{"class":293},[287,3833,3806],{"class":297},[287,3835,3836],{"class":293},"surround)\n",[276,3838,3841],{"className":1336,"code":3839,"filename":3840,"language":1339,"meta":282,"style":282},"const { data: page } = await useAsyncData(route.path, () => queryContent(route.path).findOne())\n\nconst { data: surround } = await useAsyncData(`${route.path}-surround`, () => queryContent()\n  .where({ _extension: 'md', navigation: { $ne: false } })\n  .only(['title', 'description', '_path'])\n  .findSurround(withoutTrailingSlash(route.path))\n)\n","docs/[...slug].vue (v2)",[284,3842,3843,3889,3893,3943,3988,4024,4043],{"__ignoreMap":282},[287,3844,3845,3847,3849,3851,3853,3855,3857,3859,3861,3863,3865,3867,3869,3871,3873,3875,3877,3879,3881,3883,3885,3887],{"class":289,"line":290},[287,3846,3009],{"class":520},[287,3848,2612],{"class":297},[287,3850,3014],{"class":426},[287,3852,430],{"class":297},[287,3854,3303],{"class":293},[287,3856,622],{"class":297},[287,3858,549],{"class":297},[287,3860,552],{"class":406},[287,3862,3028],{"class":413},[287,3864,3605],{"class":293},[287,3866,456],{"class":297},[287,3868,3344],{"class":293},[287,3870,2618],{"class":297},[287,3872,3042],{"class":297},[287,3874,534],{"class":520},[287,3876,3405],{"class":413},[287,3878,3605],{"class":293},[287,3880,456],{"class":297},[287,3882,3652],{"class":293},[287,3884,456],{"class":297},[287,3886,3420],{"class":413},[287,3888,3104],{"class":293},[287,3890,3891],{"class":289,"line":423},[287,3892,2643],{"emptyLinePlaceholder":212},[287,3894,3895,3897,3899,3901,3903,3905,3907,3909,3911,3913,3915,3918,3921,3923,3925,3927,3930,3933,3935,3937,3939,3941],{"class":289,"line":445},[287,3896,3009],{"class":520},[287,3898,2612],{"class":297},[287,3900,3014],{"class":426},[287,3902,430],{"class":297},[287,3904,3764],{"class":293},[287,3906,622],{"class":297},[287,3908,549],{"class":297},[287,3910,552],{"class":406},[287,3912,3028],{"class":413},[287,3914,417],{"class":293},[287,3916,3917],{"class":297},"`${",[287,3919,3920],{"class":293},"route",[287,3922,456],{"class":297},[287,3924,3344],{"class":293},[287,3926,622],{"class":297},[287,3928,3929],{"class":301},"-surround",[287,3931,3932],{"class":297},"`",[287,3934,2618],{"class":297},[287,3936,3042],{"class":297},[287,3938,534],{"class":520},[287,3940,3405],{"class":413},[287,3942,2907],{"class":293},[287,3944,3945,3948,3951,3953,3955,3958,3960,3962,3964,3966,3968,3971,3973,3975,3978,3980,3982,3984,3986],{"class":289,"line":466},[287,3946,3947],{"class":297},"  .",[287,3949,3950],{"class":413},"where",[287,3952,417],{"class":293},[287,3954,3757],{"class":297},[287,3956,3957],{"class":426}," _extension",[287,3959,430],{"class":297},[287,3961,433],{"class":297},[287,3963,1065],{"class":301},[287,3965,439],{"class":297},[287,3967,2618],{"class":297},[287,3969,3970],{"class":426}," navigation",[287,3972,430],{"class":297},[287,3974,2612],{"class":297},[287,3976,3977],{"class":426}," $ne",[287,3979,430],{"class":297},[287,3981,3179],{"class":777},[287,3983,2628],{"class":297},[287,3985,2628],{"class":297},[287,3987,498],{"class":293},[287,3989,3990,3992,3995,3998,4000,4002,4004,4006,4008,4010,4012,4014,4016,4019,4021],{"class":289,"line":501},[287,3991,3947],{"class":297},[287,3993,3994],{"class":413},"only",[287,3996,3997],{"class":293},"([",[287,3999,439],{"class":297},[287,4001,3455],{"class":301},[287,4003,439],{"class":297},[287,4005,2618],{"class":297},[287,4007,433],{"class":297},[287,4009,3503],{"class":301},[287,4011,439],{"class":297},[287,4013,2618],{"class":297},[287,4015,433],{"class":297},[287,4017,4018],{"class":301},"_path",[287,4020,439],{"class":297},[287,4022,4023],{"class":293},"])\n",[287,4025,4026,4028,4031,4033,4036,4038,4040],{"class":289,"line":512},[287,4027,3947],{"class":297},[287,4029,4030],{"class":413},"findSurround",[287,4032,417],{"class":293},[287,4034,4035],{"class":413},"withoutTrailingSlash",[287,4037,3605],{"class":293},[287,4039,456],{"class":297},[287,4041,4042],{"class":293},"path))\n",[287,4044,4045],{"class":289,"line":540},[287,4046,498],{"class":293},[1897,4048,4050,4051,4053,4054,3433,4056,3436],{"id":4049},"populate-useseometa-with-the-seo-field-provided-by-the-page-type","Populate ",[284,4052,3428],{}," with the ",[284,4055,3432],{},[318,4057,2689],{"href":2954},[276,4059,4061],{"className":1336,"code":4060,"filename":3440,"language":1339,"meta":282,"style":282},"useSeoMeta({\ntitle: page.value.seo.title,\nogTitle: `${page.value.seo.title} - ${seo?.siteName}`,\ndescription: page.value.seo.description,\nogDescription: page.value.seo.description\n})\n",[284,4062,4063,4071,4093,4135,4157,4177],{"__ignoreMap":282},[287,4064,4065,4067,4069],{"class":289,"line":290},[287,4066,3428],{"class":413},[287,4068,417],{"class":293},[287,4070,420],{"class":297},[287,4072,4073,4075,4077,4079,4081,4083,4085,4087,4089,4091],{"class":289,"line":423},[287,4074,3455],{"class":426},[287,4076,430],{"class":297},[287,4078,3460],{"class":293},[287,4080,456],{"class":297},[287,4082,3465],{"class":293},[287,4084,456],{"class":297},[287,4086,3432],{"class":293},[287,4088,456],{"class":297},[287,4090,3455],{"class":293},[287,4092,442],{"class":297},[287,4094,4095,4097,4099,4102,4104,4106,4108,4110,4112,4114,4116,4118,4121,4123,4125,4127,4130,4133],{"class":289,"line":445},[287,4096,3480],{"class":426},[287,4098,430],{"class":297},[287,4100,4101],{"class":297}," `${",[287,4103,2689],{"class":293},[287,4105,456],{"class":297},[287,4107,3465],{"class":293},[287,4109,456],{"class":297},[287,4111,3432],{"class":293},[287,4113,456],{"class":297},[287,4115,3455],{"class":293},[287,4117,622],{"class":297},[287,4119,4120],{"class":301}," - ",[287,4122,617],{"class":297},[287,4124,3432],{"class":293},[287,4126,3806],{"class":297},[287,4128,4129],{"class":293},"siteName",[287,4131,4132],{"class":297},"}`",[287,4134,442],{"class":297},[287,4136,4137,4139,4141,4143,4145,4147,4149,4151,4153,4155],{"class":289,"line":466},[287,4138,3503],{"class":426},[287,4140,430],{"class":297},[287,4142,3460],{"class":293},[287,4144,456],{"class":297},[287,4146,3465],{"class":293},[287,4148,456],{"class":297},[287,4150,3432],{"class":293},[287,4152,456],{"class":297},[287,4154,3503],{"class":293},[287,4156,442],{"class":297},[287,4158,4159,4161,4163,4165,4167,4169,4171,4173,4175],{"class":289,"line":501},[287,4160,3526],{"class":426},[287,4162,430],{"class":297},[287,4164,3460],{"class":293},[287,4166,456],{"class":297},[287,4168,3465],{"class":293},[287,4170,456],{"class":297},[287,4172,3432],{"class":293},[287,4174,456],{"class":297},[287,4176,3543],{"class":293},[287,4178,4179,4181],{"class":289,"line":512},[287,4180,622],{"class":297},[287,4182,498],{"class":293},[2220,4184,3552,4185,3555,4187,2493,4189,3560],{},[284,4186,3432],{},[284,4188,3455],{},[284,4190,3503],{},[335,4192,4194],{"id":4193},"_6-update-types","6. Update types",[238,4196,4197],{},"Types have been significantly enhanced in Content v3, eliminating the need for most manual typings, as they are now directly provided by the Nuxt Content APIs.",[238,4199,4200,4201,4204,4205,2226],{},"Concerning the documentation starter, the only typing needed concerns the navigation items where ",[284,4202,4203],{},"NavItem"," can be replaced by ",[284,4206,4207],{},"ContentNavigationItem",[276,4209,4211],{"className":1336,"code":4210,"language":1339,"meta":282,"style":282},"import type { ContentNavigationItem } from '@nuxt/content'\n\nconst navigation = inject\u003CRef\u003CContentNavigationItem[]>>('navigation')\n",[284,4212,4213,4234,4238],{"__ignoreMap":282},[287,4214,4215,4217,4219,4221,4224,4226,4228,4230,4232],{"class":289,"line":290},[287,4216,2609],{"class":406},[287,4218,3436],{"class":406},[287,4220,2612],{"class":297},[287,4222,4223],{"class":293}," ContentNavigationItem",[287,4225,2628],{"class":297},[287,4227,2631],{"class":406},[287,4229,433],{"class":297},[287,4231,2636],{"class":301},[287,4233,836],{"class":297},[287,4235,4236],{"class":289,"line":423},[287,4237,2643],{"emptyLinePlaceholder":212},[287,4239,4240,4242,4244,4246,4249,4251,4254,4256,4258,4260,4263,4265,4267,4269,4271],{"class":289,"line":445},[287,4241,3009],{"class":520},[287,4243,3019],{"class":293},[287,4245,298],{"class":297},[287,4247,4248],{"class":413}," inject",[287,4250,3214],{"class":297},[287,4252,4253],{"class":987},"Ref",[287,4255,3214],{"class":297},[287,4257,4207],{"class":987},[287,4259,3220],{"class":293},[287,4261,4262],{"class":297},">>",[287,4264,417],{"class":293},[287,4266,439],{"class":297},[287,4268,3035],{"class":301},[287,4270,439],{"class":297},[287,4272,498],{"class":293},[335,4274,4276],{"id":4275},"_7-replace-folder-metadata-files","7. Replace folder metadata files",[238,4278,4279,4280,4283,4284],{},"All ",[284,4281,4282],{},"_dir.yml"," files become ",[284,4285,4286],{},".navigation.yml",[335,4288,4290],{"id":4289},"_8-migrate-studio-activation","8. Migrate Studio activation",[238,4292,4293,4294,4298,4299,4302,4303,4306,4307,4309],{},"Since the ",[318,4295,4297],{"href":1110,"rel":4296},[322],"studio module"," has been deprecated and a new generic ",[284,4300,4301],{},"Preview API"," has been implemented directly into Nuxt Content, we can remove the ",[284,4304,4305],{},"@nuxthq/studio"," package from our dependencies and from the ",[284,4308,1338],{}," modules.",[238,4311,4312],{},"Instead we just need to enable the preview mode in the Nuxt configuration file by binding the Studio API.",[276,4314,4316],{"className":1336,"code":4315,"filename":1338,"language":1339,"meta":282,"style":282},"export default defineNuxtConfig({\n  content: {\n    preview: {\n      api: 'https://api.nuxt.studio'\n    }\n  },\n})\n",[284,4317,4318,4330,4339,4348,4362,4366,4371],{"__ignoreMap":282},[287,4319,4320,4322,4324,4326,4328],{"class":289,"line":290},[287,4321,407],{"class":406},[287,4323,410],{"class":406},[287,4325,1350],{"class":413},[287,4327,417],{"class":293},[287,4329,420],{"class":297},[287,4331,4332,4335,4337],{"class":289,"line":423},[287,4333,4334],{"class":426},"  content",[287,4336,430],{"class":297},[287,4338,537],{"class":297},[287,4340,4341,4344,4346],{"class":289,"line":445},[287,4342,4343],{"class":426},"    preview",[287,4345,430],{"class":297},[287,4347,537],{"class":297},[287,4349,4350,4353,4355,4357,4360],{"class":289,"line":466},[287,4351,4352],{"class":426},"      api",[287,4354,430],{"class":297},[287,4356,433],{"class":297},[287,4358,4359],{"class":301},"https://api.nuxt.studio",[287,4361,836],{"class":297},[287,4363,4364],{"class":289,"line":501},[287,4365,648],{"class":297},[287,4367,4368],{"class":289,"line":512},[287,4369,4370],{"class":297},"  },\n",[287,4372,4373,4375],{"class":289,"line":540},[287,4374,622],{"class":297},[287,4376,498],{"class":293},[326,4378,4379,4380,456],{},"That's it, content v3 is now powering the starter. Let's now migrate to version 3 of ",[318,4381,4384],{"href":4382,"rel":4383},"https://ui3.nuxt.dev",[322],"Nuxt UI / UI Pro",[258,4386,4388],{"id":4387},"nuxt-ui-pro-migration-v1-v3","Nuxt UI Pro Migration (v1 → v3)",[4390,4391,4392],"prose-caution",{},"This is a migration case, it won't cover all breaking changes introduced by the version upgrade. You should check each component you're using in the documentation to know if you need updates concerning props, slots or styles.",[335,4394,4396],{"id":4395},"_1-setup-package-to-v3","1. Setup package to v3",[2220,4398,4399],{},"To maintain consistency with the UI versioning, which transitioned from v1 to v2. The Nuxt UI Pro version 2 is being skipped, and the update jumps directly to v3.",[1459,4401,4402,4406,4462,4466,4476,4578,4584,4588,4634,4693,4697,4704,4731],{"level":1895},[1897,4403,4405],{"id":4404},"install-the-nuxt-ui-v3-alpha-package","Install the Nuxt UI v3 alpha package",[2519,4407,4409,4423,4436,4449],{"sync":4408},"pm",[276,4410,4412],{"className":278,"code":4411,"filename":2524,"language":281,"meta":282,"style":282},"pnpm add @nuxt/ui-pro@next\n",[284,4413,4414],{"__ignoreMap":282},[287,4415,4416,4418,4420],{"class":289,"line":290},[287,4417,2524],{"class":987},[287,4419,994],{"class":301},[287,4421,4422],{"class":301}," @nuxt/ui-pro@next\n",[276,4424,4426],{"className":278,"code":4425,"filename":2539,"language":281,"meta":282,"style":282},"yarn add @nuxt/ui-pro@next\n",[284,4427,4428],{"__ignoreMap":282},[287,4429,4430,4432,4434],{"class":289,"line":290},[287,4431,2539],{"class":987},[287,4433,994],{"class":301},[287,4435,4422],{"class":301},[276,4437,4439],{"className":278,"code":4438,"filename":2553,"language":281,"meta":282,"style":282},"npm install @nuxt/ui-pro@next\n",[284,4440,4441],{"__ignoreMap":282},[287,4442,4443,4445,4447],{"class":289,"line":290},[287,4444,2553],{"class":987},[287,4446,2562],{"class":301},[287,4448,4422],{"class":301},[276,4450,4452],{"className":278,"code":4451,"filename":2568,"language":281,"meta":282,"style":282},"bun add @nuxt/ui-pro@next\n",[284,4453,4454],{"__ignoreMap":282},[287,4455,4456,4458,4460],{"class":289,"line":290},[287,4457,2568],{"class":987},[287,4459,994],{"class":301},[287,4461,4422],{"class":301},[1897,4463,4465],{"id":4464},"add-the-module-in-the-nuxt-configuration-file","Add the module in the Nuxt configuration file",[238,4467,4468,4469,4472,4473,2226],{},"It's no longer required to add ",[284,4470,4471],{},"@nuxt/ui"," in modules as it is automatically imported by ",[284,4474,4475],{},"@nuxt/ui-pro",[2997,4477,4478,4519],{},[276,4479,4482],{"className":1336,"code":4480,"filename":4481,"language":1339,"meta":282,"style":282},"export default defineNuxtConfig({\n  modules: ['@nuxt/ui-pro']\n})\n","nuxt.config.ts (v3)",[284,4483,4484,4496,4513],{"__ignoreMap":282},[287,4485,4486,4488,4490,4492,4494],{"class":289,"line":290},[287,4487,407],{"class":406},[287,4489,410],{"class":406},[287,4491,1350],{"class":413},[287,4493,417],{"class":293},[287,4495,420],{"class":297},[287,4497,4498,4501,4503,4505,4507,4509,4511],{"class":289,"line":423},[287,4499,4500],{"class":426},"  modules",[287,4502,430],{"class":297},[287,4504,581],{"class":293},[287,4506,439],{"class":297},[287,4508,4475],{"class":301},[287,4510,439],{"class":297},[287,4512,642],{"class":293},[287,4514,4515,4517],{"class":289,"line":445},[287,4516,622],{"class":297},[287,4518,498],{"class":293},[276,4520,4523],{"className":1336,"code":4521,"filename":4522,"language":1339,"meta":282,"style":282},"export default defineNuxtConfig({\n  extends: ['@nuxt/ui-pro'],\n  modules: ['@nuxt/ui']\n})\n","nuxt.config.ts (v1)",[284,4524,4525,4537,4556,4572],{"__ignoreMap":282},[287,4526,4527,4529,4531,4533,4535],{"class":289,"line":290},[287,4528,407],{"class":406},[287,4530,410],{"class":406},[287,4532,1350],{"class":413},[287,4534,417],{"class":293},[287,4536,420],{"class":297},[287,4538,4539,4542,4544,4546,4548,4550,4552,4554],{"class":289,"line":423},[287,4540,4541],{"class":426},"  extends",[287,4543,430],{"class":297},[287,4545,581],{"class":293},[287,4547,439],{"class":297},[287,4549,4475],{"class":301},[287,4551,439],{"class":297},[287,4553,3712],{"class":293},[287,4555,442],{"class":297},[287,4557,4558,4560,4562,4564,4566,4568,4570],{"class":289,"line":445},[287,4559,4500],{"class":426},[287,4561,430],{"class":297},[287,4563,581],{"class":293},[287,4565,439],{"class":297},[287,4567,4471],{"class":301},[287,4569,439],{"class":297},[287,4571,642],{"class":293},[287,4573,4574,4576],{"class":289,"line":466},[287,4575,622],{"class":297},[287,4577,498],{"class":293},[2220,4579,4580,4583],{},[245,4581,4582],{},"Nuxt UIPro V3"," is now considered as a module and no longer as a layer.",[1897,4585,4587],{"id":4586},"import-tailwind-css-and-nuxt-ui-pro-in-your-css","Import Tailwind CSS and Nuxt UI Pro in your CSS",[276,4589,4594],{"className":4590,"code":4591,"filename":4592,"language":4593,"meta":282,"style":282},"language-css shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","@import \"tailwindcss\" theme(static);\n@import \"@nuxt/ui-pro\";\n","assets/css/main.css","css",[284,4595,4596,4621],{"__ignoreMap":282},[287,4597,4598,4601,4604,4607,4610,4613,4615,4618],{"class":289,"line":290},[287,4599,4600],{"class":406},"@import",[287,4602,4603],{"class":297}," \"",[287,4605,4606],{"class":301},"tailwindcss",[287,4608,4609],{"class":297},"\"",[287,4611,4612],{"class":293}," theme",[287,4614,417],{"class":297},[287,4616,4617],{"class":293},"static",[287,4619,4620],{"class":297},");\n",[287,4622,4623,4625,4627,4629,4631],{"class":289,"line":423},[287,4624,4600],{"class":406},[287,4626,4603],{"class":297},[287,4628,4475],{"class":301},[287,4630,4609],{"class":297},[287,4632,4633],{"class":297},";\n",[276,4635,4637],{"className":1336,"code":4636,"filename":1338,"language":1339,"meta":282,"style":282},"export default defineNuxtConfig({\nmodules: ['@nuxt/ui-pro'],\ncss: ['~/assets/css/main.css']\n})\n",[284,4638,4639,4651,4670,4687],{"__ignoreMap":282},[287,4640,4641,4643,4645,4647,4649],{"class":289,"line":290},[287,4642,407],{"class":406},[287,4644,410],{"class":406},[287,4646,1350],{"class":413},[287,4648,417],{"class":293},[287,4650,420],{"class":297},[287,4652,4653,4656,4658,4660,4662,4664,4666,4668],{"class":289,"line":423},[287,4654,4655],{"class":426},"modules",[287,4657,430],{"class":297},[287,4659,581],{"class":293},[287,4661,439],{"class":297},[287,4663,4475],{"class":301},[287,4665,439],{"class":297},[287,4667,3712],{"class":293},[287,4669,442],{"class":297},[287,4671,4672,4674,4676,4678,4680,4683,4685],{"class":289,"line":445},[287,4673,4593],{"class":426},[287,4675,430],{"class":297},[287,4677,581],{"class":293},[287,4679,439],{"class":297},[287,4681,4682],{"class":301},"~/assets/css/main.css",[287,4684,439],{"class":297},[287,4686,642],{"class":293},[287,4688,4689,4691],{"class":289,"line":466},[287,4690,622],{"class":297},[287,4692,498],{"class":293},[1897,4694,4696],{"id":4695},"remove-tailwind-config-file-and-use-css-first-theming","Remove tailwind config file and use CSS-first theming",[238,4698,4699,4700,4703],{},"Nuxt UI v3 uses Tailwind CSS v4 that follows a CSS-first configuration approach. You can now customize your theme with CSS variables inside a ",[284,4701,4702],{},"@theme"," directive.",[675,4705,4706,4712,4721],{},[350,4707,4708,4709,2586],{},"Delete the ",[284,4710,4711],{},"tailwind.config.ts",[350,4713,4714,4715,4717,4718,2586],{},"Use the ",[284,4716,4702],{}," directive to apply your theme in ",[284,4719,4720],{},"main.css",[350,4722,4714,4723,4726,4727,4730],{},[284,4724,4725],{},"@source"," directive in order for Tailwind to detect classes in ",[284,4728,4729],{},"markdown"," files.",[276,4732,4734],{"className":4590,"code":4733,"filename":4592,"language":4593,"meta":282,"style":282},"@import \"tailwindcss\" theme(static);\n@import \"@nuxt/ui-pro\";\n\n@source \"../content/**/*\";\n\n@theme {\n--font-sans: 'DM Sans', sans-serif;\n\n--color-green-50: #EFFDF5;\n--color-green-100: #D9FBE8;\n--color-green-200: #B3F5D1;\n--color-green-300: #75EDAE;\n--color-green-400: #00DC82;\n--color-green-500: #00C16A;\n--color-green-600: #00A155;\n--color-green-700: #007F45;\n--color-green-800: #016538;\n--color-green-900: #0A5331;\n--color-green-950: #052E16;\n}\n\n",[284,4735,4736,4754,4766,4770,4779,4783,4789,4801,4805,4816,4826,4836,4846,4856,4866,4876,4886,4896,4906,4916],{"__ignoreMap":282},[287,4737,4738,4740,4742,4744,4746,4748,4750,4752],{"class":289,"line":290},[287,4739,4600],{"class":406},[287,4741,4603],{"class":297},[287,4743,4606],{"class":301},[287,4745,4609],{"class":297},[287,4747,4612],{"class":293},[287,4749,417],{"class":297},[287,4751,4617],{"class":293},[287,4753,4620],{"class":297},[287,4755,4756,4758,4760,4762,4764],{"class":289,"line":423},[287,4757,4600],{"class":406},[287,4759,4603],{"class":297},[287,4761,4475],{"class":301},[287,4763,4609],{"class":297},[287,4765,4633],{"class":297},[287,4767,4768],{"class":289,"line":445},[287,4769,2643],{"emptyLinePlaceholder":212},[287,4771,4772,4774,4777],{"class":289,"line":466},[287,4773,4725],{"class":406},[287,4775,4776],{"class":293}," \"../content/**/*\"",[287,4778,4633],{"class":297},[287,4780,4781],{"class":289,"line":501},[287,4782,2643],{"emptyLinePlaceholder":212},[287,4784,4785,4787],{"class":289,"line":512},[287,4786,4702],{"class":406},[287,4788,537],{"class":297},[287,4790,4791,4794,4796,4799],{"class":289,"line":540},[287,4792,4793],{"class":293},"--font-sans: 'DM Sans'",[287,4795,2618],{"class":297},[287,4797,4798],{"class":987}," sans-serif",[287,4800,4633],{"class":293},[287,4802,4803],{"class":289,"line":565},[287,4804,2643],{"emptyLinePlaceholder":212},[287,4806,4807,4810,4813],{"class":289,"line":573},[287,4808,4809],{"class":293},"--color-green-50: ",[287,4811,4812],{"class":297},"#",[287,4814,4815],{"class":293},"EFFDF5;\n",[287,4817,4818,4821,4823],{"class":289,"line":586},[287,4819,4820],{"class":293},"--color-green-100: ",[287,4822,4812],{"class":297},[287,4824,4825],{"class":293},"D9FBE8;\n",[287,4827,4828,4831,4833],{"class":289,"line":603},[287,4829,4830],{"class":293},"--color-green-200: ",[287,4832,4812],{"class":297},[287,4834,4835],{"class":293},"B3F5D1;\n",[287,4837,4838,4841,4843],{"class":289,"line":636},[287,4839,4840],{"class":293},"--color-green-300: ",[287,4842,4812],{"class":297},[287,4844,4845],{"class":293},"75EDAE;\n",[287,4847,4848,4851,4853],{"class":289,"line":645},[287,4849,4850],{"class":293},"--color-green-400: ",[287,4852,4812],{"class":297},[287,4854,4855],{"class":293},"00DC82;\n",[287,4857,4858,4861,4863],{"class":289,"line":651},[287,4859,4860],{"class":293},"--color-green-500: ",[287,4862,4812],{"class":297},[287,4864,4865],{"class":293},"00C16A;\n",[287,4867,4868,4871,4873],{"class":289,"line":657},[287,4869,4870],{"class":293},"--color-green-600: ",[287,4872,4812],{"class":297},[287,4874,4875],{"class":293},"00A155;\n",[287,4877,4878,4881,4883],{"class":289,"line":886},[287,4879,4880],{"class":293},"--color-green-700: ",[287,4882,4812],{"class":297},[287,4884,4885],{"class":293},"007F45;\n",[287,4887,4888,4891,4893],{"class":289,"line":891},[287,4889,4890],{"class":293},"--color-green-800: ",[287,4892,4812],{"class":297},[287,4894,4895],{"class":293},"016538;\n",[287,4897,4898,4901,4903],{"class":289,"line":896},[287,4899,4900],{"class":293},"--color-green-900: ",[287,4902,4812],{"class":297},[287,4904,4905],{"class":293},"0A5331;\n",[287,4907,4908,4911,4913],{"class":289,"line":2868},[287,4909,4910],{"class":293},"--color-green-950: ",[287,4912,4812],{"class":297},[287,4914,4915],{"class":293},"052E16;\n",[287,4917,4918],{"class":289,"line":2886},[287,4919,4920],{"class":293},"}\n",[335,4922,4924,4925,4928,4929],{"id":4923},"_2-update-ui-overloads-in-appconfigts","2. Update ",[284,4926,4927],{},"ui"," overloads in ",[284,4930,730],{},[4390,4932,4934,4935,4937,4938,4940,4941,4943,4944,4947],{"to":4933},"https://ui3.nuxt.dev/getting-started/theme#customize-theme","All overloads using the ",[284,4936,4927],{}," props in a component or the ",[284,4939,4927],{}," key in the ",[284,4942,730],{}," are obsolete and need to be checked in the ",[245,4945,4946],{},"UI / UI Pro"," documentation.",[2997,4949,4950,5098],{},[276,4951,4954],{"className":1336,"code":4952,"filename":4953,"language":1339,"meta":282,"style":282},"export default defineAppConfig({\n  ui: {\n    colors: {\n      primary: 'green',\n      neutral: 'slate'\n    }\n  },\n  uiPro: {\n    footer: {\n      slots: {\n        root: 'border-t border-gray-200 dark:border-gray-800',\n        left: 'text-sm text-gray-500 dark:text-gray-400'\n      }\n    }\n  },\n}\n","app.config.ts (v3)",[284,4955,4956,4968,4977,4986,5002,5016,5020,5024,5033,5042,5051,5067,5081,5086,5090,5094],{"__ignoreMap":282},[287,4957,4958,4960,4962,4964,4966],{"class":289,"line":290},[287,4959,407],{"class":406},[287,4961,410],{"class":406},[287,4963,745],{"class":413},[287,4965,417],{"class":293},[287,4967,420],{"class":297},[287,4969,4970,4973,4975],{"class":289,"line":423},[287,4971,4972],{"class":426},"  ui",[287,4974,430],{"class":297},[287,4976,537],{"class":297},[287,4978,4979,4982,4984],{"class":289,"line":445},[287,4980,4981],{"class":426},"    colors",[287,4983,430],{"class":297},[287,4985,537],{"class":297},[287,4987,4988,4991,4993,4995,4998,5000],{"class":289,"line":466},[287,4989,4990],{"class":426},"      primary",[287,4992,430],{"class":297},[287,4994,433],{"class":297},[287,4996,4997],{"class":301},"green",[287,4999,439],{"class":297},[287,5001,442],{"class":297},[287,5003,5004,5007,5009,5011,5014],{"class":289,"line":501},[287,5005,5006],{"class":426},"      neutral",[287,5008,430],{"class":297},[287,5010,433],{"class":297},[287,5012,5013],{"class":301},"slate",[287,5015,836],{"class":297},[287,5017,5018],{"class":289,"line":512},[287,5019,648],{"class":297},[287,5021,5022],{"class":289,"line":540},[287,5023,4370],{"class":297},[287,5025,5026,5029,5031],{"class":289,"line":565},[287,5027,5028],{"class":426},"  uiPro",[287,5030,430],{"class":297},[287,5032,537],{"class":297},[287,5034,5035,5038,5040],{"class":289,"line":573},[287,5036,5037],{"class":426},"    footer",[287,5039,430],{"class":297},[287,5041,537],{"class":297},[287,5043,5044,5047,5049],{"class":289,"line":586},[287,5045,5046],{"class":426},"      slots",[287,5048,430],{"class":297},[287,5050,537],{"class":297},[287,5052,5053,5056,5058,5060,5063,5065],{"class":289,"line":603},[287,5054,5055],{"class":426},"        root",[287,5057,430],{"class":297},[287,5059,433],{"class":297},[287,5061,5062],{"class":301},"border-t border-gray-200 dark:border-gray-800",[287,5064,439],{"class":297},[287,5066,442],{"class":297},[287,5068,5069,5072,5074,5076,5079],{"class":289,"line":636},[287,5070,5071],{"class":426},"        left",[287,5073,430],{"class":297},[287,5075,433],{"class":297},[287,5077,5078],{"class":301},"text-sm text-gray-500 dark:text-gray-400",[287,5080,836],{"class":297},[287,5082,5083],{"class":289,"line":645},[287,5084,5085],{"class":297},"      }\n",[287,5087,5088],{"class":289,"line":651},[287,5089,648],{"class":297},[287,5091,5092],{"class":289,"line":657},[287,5093,4370],{"class":297},[287,5095,5096],{"class":289,"line":886},[287,5097,4920],{"class":297},[276,5099,5102],{"className":1336,"code":5100,"filename":5101,"language":1339,"meta":282,"style":282},"export default defineAppConfig({\n  ui: {\n    primary: 'green',\n    gray: 'slate',\n    footer: {\n      bottom: {\n        left: 'text-sm text-gray-500 dark:text-gray-400',\n        wrapper: 'border-t border-gray-200 dark:border-gray-800'\n      }\n    }\n  },\n})\n","app.config.ts (v1)",[284,5103,5104,5116,5124,5139,5154,5162,5171,5185,5198,5202,5206,5210],{"__ignoreMap":282},[287,5105,5106,5108,5110,5112,5114],{"class":289,"line":290},[287,5107,407],{"class":406},[287,5109,410],{"class":406},[287,5111,745],{"class":413},[287,5113,417],{"class":293},[287,5115,420],{"class":297},[287,5117,5118,5120,5122],{"class":289,"line":423},[287,5119,4972],{"class":426},[287,5121,430],{"class":297},[287,5123,537],{"class":297},[287,5125,5126,5129,5131,5133,5135,5137],{"class":289,"line":445},[287,5127,5128],{"class":426},"    primary",[287,5130,430],{"class":297},[287,5132,433],{"class":297},[287,5134,4997],{"class":301},[287,5136,439],{"class":297},[287,5138,442],{"class":297},[287,5140,5141,5144,5146,5148,5150,5152],{"class":289,"line":466},[287,5142,5143],{"class":426},"    gray",[287,5145,430],{"class":297},[287,5147,433],{"class":297},[287,5149,5013],{"class":301},[287,5151,439],{"class":297},[287,5153,442],{"class":297},[287,5155,5156,5158,5160],{"class":289,"line":501},[287,5157,5037],{"class":426},[287,5159,430],{"class":297},[287,5161,537],{"class":297},[287,5163,5164,5167,5169],{"class":289,"line":512},[287,5165,5166],{"class":426},"      bottom",[287,5168,430],{"class":297},[287,5170,537],{"class":297},[287,5172,5173,5175,5177,5179,5181,5183],{"class":289,"line":540},[287,5174,5071],{"class":426},[287,5176,430],{"class":297},[287,5178,433],{"class":297},[287,5180,5078],{"class":301},[287,5182,439],{"class":297},[287,5184,442],{"class":297},[287,5186,5187,5190,5192,5194,5196],{"class":289,"line":565},[287,5188,5189],{"class":426},"        wrapper",[287,5191,430],{"class":297},[287,5193,433],{"class":297},[287,5195,5062],{"class":301},[287,5197,836],{"class":297},[287,5199,5200],{"class":289,"line":573},[287,5201,5085],{"class":297},[287,5203,5204],{"class":289,"line":586},[287,5205,648],{"class":297},[287,5207,5208],{"class":289,"line":603},[287,5209,4370],{"class":297},[287,5211,5212,5214],{"class":289,"line":636},[287,5213,622],{"class":297},[287,5215,498],{"class":293},[335,5217,2979,5219,3460],{"id":5218},"_3-migrate-errorvue-page",[284,5220,5221],{},"error.vue",[238,5223,5224,5225,5228],{},"New ",[284,5226,5227],{},"UError"," component can be used as full page structure.",[2997,5230,5231,5388],{},[276,5232,5237],{"className":5233,"code":5234,"filename":5235,"language":5236,"meta":282,"style":282},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Ctemplate>\n  \u003Cdiv>\n    \u003CAppHeader />\n\n    \u003CUError :error=\"error\" />\n\n    \u003CAppFooter />\n\n    \u003CClientOnly>\n      \u003CLazyUContentSearch\n        :files=\"files\"\n        :navigation=\"navigation\"\n      />\n    \u003C/ClientOnly>\n  \u003C/div>\n\u003C/template>\n","error.vue (v3)","vue",[284,5238,5239,5249,5259,5270,5274,5294,5298,5307,5311,5320,5328,5343,5356,5361,5370,5379],{"__ignoreMap":282},[287,5240,5241,5243,5246],{"class":289,"line":290},[287,5242,3214],{"class":297},[287,5244,5245],{"class":426},"template",[287,5247,5248],{"class":297},">\n",[287,5250,5251,5254,5257],{"class":289,"line":423},[287,5252,5253],{"class":297},"  \u003C",[287,5255,5256],{"class":426},"div",[287,5258,5248],{"class":297},[287,5260,5261,5264,5267],{"class":289,"line":445},[287,5262,5263],{"class":297},"    \u003C",[287,5265,5266],{"class":426},"AppHeader",[287,5268,5269],{"class":297}," />\n",[287,5271,5272],{"class":289,"line":466},[287,5273,2643],{"emptyLinePlaceholder":212},[287,5275,5276,5278,5280,5283,5285,5287,5290,5292],{"class":289,"line":501},[287,5277,5263],{"class":297},[287,5279,5227],{"class":426},[287,5281,5282],{"class":520}," :error",[287,5284,298],{"class":297},[287,5286,4609],{"class":297},[287,5288,5289],{"class":301},"error",[287,5291,4609],{"class":297},[287,5293,5269],{"class":297},[287,5295,5296],{"class":289,"line":512},[287,5297,2643],{"emptyLinePlaceholder":212},[287,5299,5300,5302,5305],{"class":289,"line":540},[287,5301,5263],{"class":297},[287,5303,5304],{"class":426},"AppFooter",[287,5306,5269],{"class":297},[287,5308,5309],{"class":289,"line":565},[287,5310,2643],{"emptyLinePlaceholder":212},[287,5312,5313,5315,5318],{"class":289,"line":573},[287,5314,5263],{"class":297},[287,5316,5317],{"class":426},"ClientOnly",[287,5319,5248],{"class":297},[287,5321,5322,5325],{"class":289,"line":586},[287,5323,5324],{"class":297},"      \u003C",[287,5326,5327],{"class":426},"LazyUContentSearch\n",[287,5329,5330,5333,5335,5337,5340],{"class":289,"line":603},[287,5331,5332],{"class":520},"        :files",[287,5334,298],{"class":297},[287,5336,4609],{"class":297},[287,5338,5339],{"class":301},"files",[287,5341,5342],{"class":297},"\"\n",[287,5344,5345,5348,5350,5352,5354],{"class":289,"line":636},[287,5346,5347],{"class":520},"        :navigation",[287,5349,298],{"class":297},[287,5351,4609],{"class":297},[287,5353,3035],{"class":301},[287,5355,5342],{"class":297},[287,5357,5358],{"class":289,"line":645},[287,5359,5360],{"class":297},"      />\n",[287,5362,5363,5366,5368],{"class":289,"line":651},[287,5364,5365],{"class":297},"    \u003C/",[287,5367,5317],{"class":426},[287,5369,5248],{"class":297},[287,5371,5372,5375,5377],{"class":289,"line":657},[287,5373,5374],{"class":297},"  \u003C/",[287,5376,5256],{"class":426},[287,5378,5248],{"class":297},[287,5380,5381,5384,5386],{"class":289,"line":886},[287,5382,5383],{"class":297},"\u003C/",[287,5385,5245],{"class":426},[287,5387,5248],{"class":297},[276,5389,5392],{"className":5233,"code":5390,"filename":5391,"language":5236,"meta":282,"style":282},"\u003Ctemplate>\n  \u003Cdiv>\n    \u003CAppHeader />\n\n    \u003CUMain>\n      \u003CUContainer>\n        \u003CUPage>\n          \u003CUPageError :error=\"error\" />\n        \u003C/UPage>\n      \u003C/UContainer>\n    \u003C/UMain>\n\n    \u003CAppFooter />\n\n    \u003CClientOnly>\n      \u003CLazyUContentSearch\n        :files=\"files\"\n        :navigation=\"navigation\"\n      />\n    \u003C/ClientOnly>\n\n    \u003CUNotifications />\n  \u003C/div>\n\u003C/template>\n","error.vue (v1)",[284,5393,5394,5402,5410,5418,5422,5431,5440,5450,5470,5479,5488,5496,5500,5508,5512,5520,5526,5538,5550,5554,5562,5566,5575,5583],{"__ignoreMap":282},[287,5395,5396,5398,5400],{"class":289,"line":290},[287,5397,3214],{"class":297},[287,5399,5245],{"class":426},[287,5401,5248],{"class":297},[287,5403,5404,5406,5408],{"class":289,"line":423},[287,5405,5253],{"class":297},[287,5407,5256],{"class":426},[287,5409,5248],{"class":297},[287,5411,5412,5414,5416],{"class":289,"line":445},[287,5413,5263],{"class":297},[287,5415,5266],{"class":426},[287,5417,5269],{"class":297},[287,5419,5420],{"class":289,"line":466},[287,5421,2643],{"emptyLinePlaceholder":212},[287,5423,5424,5426,5429],{"class":289,"line":501},[287,5425,5263],{"class":297},[287,5427,5428],{"class":426},"UMain",[287,5430,5248],{"class":297},[287,5432,5433,5435,5438],{"class":289,"line":512},[287,5434,5324],{"class":297},[287,5436,5437],{"class":426},"UContainer",[287,5439,5248],{"class":297},[287,5441,5442,5445,5448],{"class":289,"line":540},[287,5443,5444],{"class":297},"        \u003C",[287,5446,5447],{"class":426},"UPage",[287,5449,5248],{"class":297},[287,5451,5452,5455,5458,5460,5462,5464,5466,5468],{"class":289,"line":565},[287,5453,5454],{"class":297},"          \u003C",[287,5456,5457],{"class":426},"UPageError",[287,5459,5282],{"class":520},[287,5461,298],{"class":297},[287,5463,4609],{"class":297},[287,5465,5289],{"class":301},[287,5467,4609],{"class":297},[287,5469,5269],{"class":297},[287,5471,5472,5475,5477],{"class":289,"line":573},[287,5473,5474],{"class":297},"        \u003C/",[287,5476,5447],{"class":426},[287,5478,5248],{"class":297},[287,5480,5481,5484,5486],{"class":289,"line":586},[287,5482,5483],{"class":297},"      \u003C/",[287,5485,5437],{"class":426},[287,5487,5248],{"class":297},[287,5489,5490,5492,5494],{"class":289,"line":603},[287,5491,5365],{"class":297},[287,5493,5428],{"class":426},[287,5495,5248],{"class":297},[287,5497,5498],{"class":289,"line":636},[287,5499,2643],{"emptyLinePlaceholder":212},[287,5501,5502,5504,5506],{"class":289,"line":645},[287,5503,5263],{"class":297},[287,5505,5304],{"class":426},[287,5507,5269],{"class":297},[287,5509,5510],{"class":289,"line":651},[287,5511,2643],{"emptyLinePlaceholder":212},[287,5513,5514,5516,5518],{"class":289,"line":657},[287,5515,5263],{"class":297},[287,5517,5317],{"class":426},[287,5519,5248],{"class":297},[287,5521,5522,5524],{"class":289,"line":886},[287,5523,5324],{"class":297},[287,5525,5327],{"class":426},[287,5527,5528,5530,5532,5534,5536],{"class":289,"line":891},[287,5529,5332],{"class":520},[287,5531,298],{"class":297},[287,5533,4609],{"class":297},[287,5535,5339],{"class":301},[287,5537,5342],{"class":297},[287,5539,5540,5542,5544,5546,5548],{"class":289,"line":896},[287,5541,5347],{"class":520},[287,5543,298],{"class":297},[287,5545,4609],{"class":297},[287,5547,3035],{"class":301},[287,5549,5342],{"class":297},[287,5551,5552],{"class":289,"line":2868},[287,5553,5360],{"class":297},[287,5555,5556,5558,5560],{"class":289,"line":2886},[287,5557,5365],{"class":297},[287,5559,5317],{"class":426},[287,5561,5248],{"class":297},[287,5563,5564],{"class":289,"line":2910},[287,5565,2643],{"emptyLinePlaceholder":212},[287,5567,5568,5570,5573],{"class":289,"line":2925},[287,5569,5263],{"class":297},[287,5571,5572],{"class":426},"UNotifications",[287,5574,5269],{"class":297},[287,5576,5577,5579,5581],{"class":289,"line":2932},[287,5578,5374],{"class":297},[287,5580,5256],{"class":426},[287,5582,5248],{"class":297},[287,5584,5585,5587,5589],{"class":289,"line":2939},[287,5586,5383],{"class":297},[287,5588,5245],{"class":426},[287,5590,5248],{"class":297},[335,5592,5594,5595,3460],{"id":5593},"_4-migrate-appvue-page","4. Migrate ",[284,5596,2982],{},[675,5598,5599,5611,5625],{},[350,5600,5601,1513,5604,2493,5607,5610],{},[284,5602,5603],{},"Main",[284,5605,5606],{},"Footer",[284,5608,5609],{},"LazyUContentSearch"," components do not need any updates in our case.",[350,5612,5613,5616,5617,5620,5621,5624],{},[284,5614,5615],{},"Notification"," component can be removed since ",[284,5618,5619],{},"Toast"," components are directly handled by the ",[284,5622,5623],{},"App"," component.",[350,5626,5627,5628,5631,5632,5635,5636,5639],{},"Instead of the ",[284,5629,5630],{},"NavigationTree"," component you can use the ",[284,5633,5634],{},"NavigationMenu"," component or the ",[284,5637,5638],{},"ContentNavigation"," component to display content navigation.",[2997,5641,5642,5791],{},[276,5643,5646],{"className":5233,"code":5644,"filename":5645,"language":5236,"meta":282,"style":282},"\u003Cscript>\n// Content navigation provided by queryCollectionNavigation('docs')\nconst navigation = inject\u003CRef\u003CContentNavigationItem[]>>('navigation')\n\u003C/script>\n\n\u003Ctemplate>\n  \u003CUHeader>\n    \u003Ctemplate #content>\n      \u003CUContentNavigation\n        highlight\n        :navigation=\"navigation\"\n      />\n     \u003C/template>\n   \u003C/UHeader>\n\u003C/template>\n","Header.vue (v3)",[284,5647,5648,5657,5663,5695,5703,5707,5715,5724,5737,5744,5749,5761,5765,5774,5783],{"__ignoreMap":282},[287,5649,5650,5652,5655],{"class":289,"line":290},[287,5651,3214],{"class":297},[287,5653,5654],{"class":426},"script",[287,5656,5248],{"class":297},[287,5658,5659],{"class":289,"line":423},[287,5660,5662],{"class":5661},"sHwdD","// Content navigation provided by queryCollectionNavigation('docs')\n",[287,5664,5665,5667,5669,5671,5673,5675,5677,5679,5681,5683,5685,5687,5689,5691,5693],{"class":289,"line":445},[287,5666,3009],{"class":520},[287,5668,3019],{"class":293},[287,5670,298],{"class":297},[287,5672,4248],{"class":413},[287,5674,3214],{"class":297},[287,5676,4253],{"class":987},[287,5678,3214],{"class":297},[287,5680,4207],{"class":987},[287,5682,3220],{"class":293},[287,5684,4262],{"class":297},[287,5686,417],{"class":293},[287,5688,439],{"class":297},[287,5690,3035],{"class":301},[287,5692,439],{"class":297},[287,5694,498],{"class":293},[287,5696,5697,5699,5701],{"class":289,"line":466},[287,5698,5383],{"class":297},[287,5700,5654],{"class":426},[287,5702,5248],{"class":297},[287,5704,5705],{"class":289,"line":501},[287,5706,2643],{"emptyLinePlaceholder":212},[287,5708,5709,5711,5713],{"class":289,"line":512},[287,5710,3214],{"class":297},[287,5712,5245],{"class":426},[287,5714,5248],{"class":297},[287,5716,5717,5719,5722],{"class":289,"line":540},[287,5718,5253],{"class":297},[287,5720,5721],{"class":426},"UHeader",[287,5723,5248],{"class":297},[287,5725,5726,5728,5730,5733,5735],{"class":289,"line":565},[287,5727,5263],{"class":297},[287,5729,5245],{"class":426},[287,5731,5732],{"class":297}," #",[287,5734,2443],{"class":520},[287,5736,5248],{"class":297},[287,5738,5739,5741],{"class":289,"line":573},[287,5740,5324],{"class":297},[287,5742,5743],{"class":426},"UContentNavigation\n",[287,5745,5746],{"class":289,"line":586},[287,5747,5748],{"class":520},"        highlight\n",[287,5750,5751,5753,5755,5757,5759],{"class":289,"line":603},[287,5752,5347],{"class":520},[287,5754,298],{"class":297},[287,5756,4609],{"class":297},[287,5758,3035],{"class":301},[287,5760,5342],{"class":297},[287,5762,5763],{"class":289,"line":636},[287,5764,5360],{"class":297},[287,5766,5767,5770,5772],{"class":289,"line":645},[287,5768,5769],{"class":297},"     \u003C/",[287,5771,5245],{"class":426},[287,5773,5248],{"class":297},[287,5775,5776,5779,5781],{"class":289,"line":651},[287,5777,5778],{"class":297},"   \u003C/",[287,5780,5721],{"class":426},[287,5782,5248],{"class":297},[287,5784,5785,5787,5789],{"class":289,"line":657},[287,5786,5383],{"class":297},[287,5788,5245],{"class":426},[287,5790,5248],{"class":297},[276,5792,5795],{"className":5233,"code":5793,"filename":5794,"language":5236,"meta":282,"style":282},"\u003Cscript>\n// Content navigation provided by fetchContentNavigation()\nconst navigation = inject\u003CRef\u003CNavItem[]>>('navigation')\n\u003C/script>\n\n\u003Ctemplate>\n  \u003CUHeader>\n    \u003Ctemplate #panel>\n      \u003CUNavigationTree :links=\"mapContentNavigation(navigation)\" />\n     \u003C/template>\n   \u003C/UHeader>\n\u003C/template>\n","Header.vue (v1)",[284,5796,5797,5805,5810,5842,5850,5854,5862,5870,5883,5904,5912,5920],{"__ignoreMap":282},[287,5798,5799,5801,5803],{"class":289,"line":290},[287,5800,3214],{"class":297},[287,5802,5654],{"class":426},[287,5804,5248],{"class":297},[287,5806,5807],{"class":289,"line":423},[287,5808,5809],{"class":5661},"// Content navigation provided by fetchContentNavigation()\n",[287,5811,5812,5814,5816,5818,5820,5822,5824,5826,5828,5830,5832,5834,5836,5838,5840],{"class":289,"line":445},[287,5813,3009],{"class":520},[287,5815,3019],{"class":293},[287,5817,298],{"class":297},[287,5819,4248],{"class":413},[287,5821,3214],{"class":297},[287,5823,4253],{"class":987},[287,5825,3214],{"class":297},[287,5827,4203],{"class":987},[287,5829,3220],{"class":293},[287,5831,4262],{"class":297},[287,5833,417],{"class":293},[287,5835,439],{"class":297},[287,5837,3035],{"class":301},[287,5839,439],{"class":297},[287,5841,498],{"class":293},[287,5843,5844,5846,5848],{"class":289,"line":466},[287,5845,5383],{"class":297},[287,5847,5654],{"class":426},[287,5849,5248],{"class":297},[287,5851,5852],{"class":289,"line":501},[287,5853,2643],{"emptyLinePlaceholder":212},[287,5855,5856,5858,5860],{"class":289,"line":512},[287,5857,3214],{"class":297},[287,5859,5245],{"class":426},[287,5861,5248],{"class":297},[287,5863,5864,5866,5868],{"class":289,"line":540},[287,5865,5253],{"class":297},[287,5867,5721],{"class":426},[287,5869,5248],{"class":297},[287,5871,5872,5874,5876,5878,5881],{"class":289,"line":565},[287,5873,5263],{"class":297},[287,5875,5245],{"class":426},[287,5877,5732],{"class":297},[287,5879,5880],{"class":520},"panel",[287,5882,5248],{"class":297},[287,5884,5885,5887,5890,5893,5895,5897,5900,5902],{"class":289,"line":573},[287,5886,5324],{"class":297},[287,5888,5889],{"class":426},"UNavigationTree",[287,5891,5892],{"class":520}," :links",[287,5894,298],{"class":297},[287,5896,4609],{"class":297},[287,5898,5899],{"class":301},"mapContentNavigation(navigation)",[287,5901,4609],{"class":297},[287,5903,5269],{"class":297},[287,5905,5906,5908,5910],{"class":289,"line":586},[287,5907,5769],{"class":297},[287,5909,5245],{"class":426},[287,5911,5248],{"class":297},[287,5913,5914,5916,5918],{"class":289,"line":603},[287,5915,5778],{"class":297},[287,5917,5721],{"class":426},[287,5919,5248],{"class":297},[287,5921,5922,5924,5926],{"class":289,"line":636},[287,5923,5383],{"class":297},[287,5925,5245],{"class":426},[287,5927,5248],{"class":297},[335,5929,5931],{"id":5930},"_5-update-landing-page","5. Update landing page",[238,5933,5934,5935,2992,5938,2226],{},"We've decided to move the landing content from ",[284,5936,5937],{},"YML",[284,5939,58],{},[326,5941,5942,5943,5946],{},"This decision was made because components used in Markdown no longer need to be exposed globally (nor do they need to be created in the ",[284,5944,5945],{},"components/content"," folder). Content v3 handles it under the hood.",[1459,5948,5949,5953,6114,6123,6141,6866,6870,6879,6886,6918],{"level":1895},[1897,5950,5952],{"id":5951},"update-content-configuration","Update content configuration",[276,5954,5956],{"className":1336,"code":5955,"filename":2585,"language":1339,"meta":282,"style":282},"export default defineContentConfig({\n  collections: {\n    landing: defineCollection({\n      type: 'page',\n      source: 'index.md'\n    }),\n    docs: defineCollection({\n      type: 'page',\n      source: {\n        include: '**',\n        exclude: ['index.md']\n      },\n      ...\n    })\n  }\n})\n",[284,5957,5958,5970,5978,5990,6004,6017,6025,6037,6051,6059,6073,6089,6093,6098,6104,6108],{"__ignoreMap":282},[287,5959,5960,5962,5964,5966,5968],{"class":289,"line":290},[287,5961,407],{"class":406},[287,5963,410],{"class":406},[287,5965,2615],{"class":413},[287,5967,417],{"class":293},[287,5969,420],{"class":297},[287,5971,5972,5974,5976],{"class":289,"line":423},[287,5973,2660],{"class":426},[287,5975,430],{"class":297},[287,5977,537],{"class":297},[287,5979,5980,5982,5984,5986,5988],{"class":289,"line":445},[287,5981,2669],{"class":426},[287,5983,430],{"class":297},[287,5985,2621],{"class":413},[287,5987,417],{"class":293},[287,5989,420],{"class":297},[287,5991,5992,5994,5996,5998,6000,6002],{"class":289,"line":466},[287,5993,2682],{"class":426},[287,5995,430],{"class":297},[287,5997,433],{"class":297},[287,5999,2689],{"class":301},[287,6001,439],{"class":297},[287,6003,442],{"class":297},[287,6005,6006,6008,6010,6012,6015],{"class":289,"line":501},[287,6007,2698],{"class":426},[287,6009,430],{"class":297},[287,6011,433],{"class":297},[287,6013,6014],{"class":301},"index.md",[287,6016,836],{"class":297},[287,6018,6019,6021,6023],{"class":289,"line":512},[287,6020,2712],{"class":297},[287,6022,507],{"class":293},[287,6024,442],{"class":297},[287,6026,6027,6029,6031,6033,6035],{"class":289,"line":540},[287,6028,2721],{"class":426},[287,6030,430],{"class":297},[287,6032,2621],{"class":413},[287,6034,417],{"class":293},[287,6036,420],{"class":297},[287,6038,6039,6041,6043,6045,6047,6049],{"class":289,"line":565},[287,6040,2682],{"class":426},[287,6042,430],{"class":297},[287,6044,433],{"class":297},[287,6046,2689],{"class":301},[287,6048,439],{"class":297},[287,6050,442],{"class":297},[287,6052,6053,6055,6057],{"class":289,"line":573},[287,6054,2698],{"class":426},[287,6056,430],{"class":297},[287,6058,537],{"class":297},[287,6060,6061,6063,6065,6067,6069,6071],{"class":289,"line":586},[287,6062,2756],{"class":426},[287,6064,430],{"class":297},[287,6066,433],{"class":297},[287,6068,2763],{"class":301},[287,6070,439],{"class":297},[287,6072,442],{"class":297},[287,6074,6075,6077,6079,6081,6083,6085,6087],{"class":289,"line":603},[287,6076,2772],{"class":426},[287,6078,430],{"class":297},[287,6080,581],{"class":293},[287,6082,439],{"class":297},[287,6084,6014],{"class":301},[287,6086,439],{"class":297},[287,6088,642],{"class":293},[287,6090,6091],{"class":289,"line":636},[287,6092,2789],{"class":297},[287,6094,6095],{"class":289,"line":645},[287,6096,6097],{"class":297},"      ...\n",[287,6099,6100,6102],{"class":289,"line":651},[287,6101,2712],{"class":297},[287,6103,498],{"class":293},[287,6105,6106],{"class":289,"line":657},[287,6107,654],{"class":297},[287,6109,6110,6112],{"class":289,"line":886},[287,6111,622],{"class":297},[287,6113,498],{"class":293},[1897,6115,6117,6118,6120,6121],{"id":6116},"use-contentrenderer-to-render-markdown","Use ",[284,6119,101],{}," to render ",[284,6122,58],{},[2220,6124,6125,6128,6129,6132,6133,6136,6137,6140],{},[284,6126,6127],{},"prose"," property must be set to ",[284,6130,6131],{},"false"," in ",[284,6134,6135],{},"ContentRendered"," as we don't want ",[284,6138,6139],{},"Mardown"," to be applied with prose styling in the case of a landing page integrating non prose Vue components.",[2997,6142,6143,6231],{},[276,6144,6146],{"className":5233,"code":6145,"filename":3288,"language":5236,"meta":282,"style":282},"\u003Ctemplate>\n  \u003CUContainer>\n    \u003CContentRenderer\n      v-if=\"page\"\n      :value=\"page\"\n      :prose=\"false\"\n    />\n  \u003C/UContainer>\n\u003C/template>\n",[284,6147,6148,6156,6164,6171,6184,6197,6210,6215,6223],{"__ignoreMap":282},[287,6149,6150,6152,6154],{"class":289,"line":290},[287,6151,3214],{"class":297},[287,6153,5245],{"class":426},[287,6155,5248],{"class":297},[287,6157,6158,6160,6162],{"class":289,"line":423},[287,6159,5253],{"class":297},[287,6161,5437],{"class":426},[287,6163,5248],{"class":297},[287,6165,6166,6168],{"class":289,"line":445},[287,6167,5263],{"class":297},[287,6169,6170],{"class":426},"ContentRenderer\n",[287,6172,6173,6176,6178,6180,6182],{"class":289,"line":466},[287,6174,6175],{"class":520},"      v-if",[287,6177,298],{"class":297},[287,6179,4609],{"class":297},[287,6181,2689],{"class":301},[287,6183,5342],{"class":297},[287,6185,6186,6189,6191,6193,6195],{"class":289,"line":501},[287,6187,6188],{"class":520},"      :value",[287,6190,298],{"class":297},[287,6192,4609],{"class":297},[287,6194,2689],{"class":301},[287,6196,5342],{"class":297},[287,6198,6199,6202,6204,6206,6208],{"class":289,"line":512},[287,6200,6201],{"class":520},"      :prose",[287,6203,298],{"class":297},[287,6205,4609],{"class":297},[287,6207,6131],{"class":301},[287,6209,5342],{"class":297},[287,6211,6212],{"class":289,"line":540},[287,6213,6214],{"class":297},"    />\n",[287,6216,6217,6219,6221],{"class":289,"line":565},[287,6218,5374],{"class":297},[287,6220,5437],{"class":426},[287,6222,5248],{"class":297},[287,6224,6225,6227,6229],{"class":289,"line":573},[287,6226,5383],{"class":297},[287,6228,5245],{"class":426},[287,6230,5248],{"class":297},[276,6232,6235],{"className":5233,"code":6233,"filename":6234,"language":5236,"meta":282,"style":282},"\u003Ctemplate>\n  \u003Cdiv>\n    \u003CULandingHero\n      v-if=\"page.hero\"\n      v-bind=\"page.hero\"\n    >\n      \u003Ctemplate #headline>\n        \u003CUBadge\n          v-if=\"page.hero.headline\"\n          variant=\"subtle\"\n          size=\"lg\"\n          class=\"relative rounded-full font-semibold\"\n        >\n          \u003CNuxtLink\n            :to=\"page.hero.headline.to\"\n            target=\"_blank\"\n            class=\"focus:outline-none\"\n            tabindex=\"-1\"\n          >\n            \u003Cspan\n              class=\"absolute inset-0\"\n              aria-hidden=\"true\"\n            />\n          \u003C/NuxtLink>\n\n          {{ page.hero.headline.label }}\n\n          \u003CUIcon\n            v-if=\"page.hero.headline.icon\"\n            :name=\"page.hero.headline.icon\"\n            class=\"ml-1 w-4 h-4 pointer-events-none\"\n          />\n        \u003C/UBadge>\n      \u003C/template>\n\n      \u003Ctemplate #title>\n        \u003CMDC cache-key=\"head-title\" :value=\"page.hero.title\" />\n      \u003C/template>\n\n      \u003CMDC\n        :value=\"page.hero.code\"\n        cache-key=\"head-code\"\n        class=\"prose prose-primary dark:prose-invert mx-auto\"\n      />\n    \u003C/ULandingHero>\n\n    \u003CULandingSection\n      :title=\"page.features.title\"\n      :links=\"page.features.links\"\n    >\n      \u003CUPageGrid>\n        \u003CULandingCard\n          v-for=\"(item, index) of page.features.items\"\n          :key=\"index\"\n          v-bind=\"item\"\n        />\n      \u003C/UPageGrid>\n    \u003C/ULandingSection>\n  \u003C/div>\n\u003C/template>\n","index.vue (v1)",[284,6236,6237,6245,6253,6260,6273,6286,6291,6304,6311,6325,6338,6352,6366,6371,6378,6392,6405,6419,6433,6438,6446,6460,6473,6478,6488,6492,6498,6503,6511,6526,6540,6554,6560,6570,6579,6584,6597,6631,6640,6645,6653,6668,6683,6698,6703,6713,6718,6726,6741,6756,6761,6771,6779,6794,6808,6823,6829,6838,6848,6857],{"__ignoreMap":282},[287,6238,6239,6241,6243],{"class":289,"line":290},[287,6240,3214],{"class":297},[287,6242,5245],{"class":426},[287,6244,5248],{"class":297},[287,6246,6247,6249,6251],{"class":289,"line":423},[287,6248,5253],{"class":297},[287,6250,5256],{"class":426},[287,6252,5248],{"class":297},[287,6254,6255,6257],{"class":289,"line":445},[287,6256,5263],{"class":297},[287,6258,6259],{"class":426},"ULandingHero\n",[287,6261,6262,6264,6266,6268,6271],{"class":289,"line":466},[287,6263,6175],{"class":520},[287,6265,298],{"class":297},[287,6267,4609],{"class":297},[287,6269,6270],{"class":301},"page.hero",[287,6272,5342],{"class":297},[287,6274,6275,6278,6280,6282,6284],{"class":289,"line":501},[287,6276,6277],{"class":520},"      v-bind",[287,6279,298],{"class":297},[287,6281,4609],{"class":297},[287,6283,6270],{"class":301},[287,6285,5342],{"class":297},[287,6287,6288],{"class":289,"line":512},[287,6289,6290],{"class":297},"    >\n",[287,6292,6293,6295,6297,6299,6302],{"class":289,"line":540},[287,6294,5324],{"class":297},[287,6296,5245],{"class":426},[287,6298,5732],{"class":297},[287,6300,6301],{"class":520},"headline",[287,6303,5248],{"class":297},[287,6305,6306,6308],{"class":289,"line":565},[287,6307,5444],{"class":297},[287,6309,6310],{"class":426},"UBadge\n",[287,6312,6313,6316,6318,6320,6323],{"class":289,"line":573},[287,6314,6315],{"class":520},"          v-if",[287,6317,298],{"class":297},[287,6319,4609],{"class":297},[287,6321,6322],{"class":301},"page.hero.headline",[287,6324,5342],{"class":297},[287,6326,6327,6330,6332,6334,6336],{"class":289,"line":586},[287,6328,6329],{"class":520},"          variant",[287,6331,298],{"class":297},[287,6333,4609],{"class":297},[287,6335,1666],{"class":301},[287,6337,5342],{"class":297},[287,6339,6340,6343,6345,6347,6350],{"class":289,"line":603},[287,6341,6342],{"class":520},"          size",[287,6344,298],{"class":297},[287,6346,4609],{"class":297},[287,6348,6349],{"class":301},"lg",[287,6351,5342],{"class":297},[287,6353,6354,6357,6359,6361,6364],{"class":289,"line":636},[287,6355,6356],{"class":520},"          class",[287,6358,298],{"class":297},[287,6360,4609],{"class":297},[287,6362,6363],{"class":301},"relative rounded-full font-semibold",[287,6365,5342],{"class":297},[287,6367,6368],{"class":289,"line":645},[287,6369,6370],{"class":297},"        >\n",[287,6372,6373,6375],{"class":289,"line":651},[287,6374,5454],{"class":297},[287,6376,6377],{"class":426},"NuxtLink\n",[287,6379,6380,6383,6385,6387,6390],{"class":289,"line":657},[287,6381,6382],{"class":520},"            :to",[287,6384,298],{"class":297},[287,6386,4609],{"class":297},[287,6388,6389],{"class":301},"page.hero.headline.to",[287,6391,5342],{"class":297},[287,6393,6394,6397,6399,6401,6403],{"class":289,"line":886},[287,6395,6396],{"class":520},"            target",[287,6398,298],{"class":297},[287,6400,4609],{"class":297},[287,6402,1119],{"class":301},[287,6404,5342],{"class":297},[287,6406,6407,6410,6412,6414,6417],{"class":289,"line":891},[287,6408,6409],{"class":520},"            class",[287,6411,298],{"class":297},[287,6413,4609],{"class":297},[287,6415,6416],{"class":301},"focus:outline-none",[287,6418,5342],{"class":297},[287,6420,6421,6424,6426,6428,6431],{"class":289,"line":896},[287,6422,6423],{"class":520},"            tabindex",[287,6425,298],{"class":297},[287,6427,4609],{"class":297},[287,6429,6430],{"class":301},"-1",[287,6432,5342],{"class":297},[287,6434,6435],{"class":289,"line":2868},[287,6436,6437],{"class":297},"          >\n",[287,6439,6440,6443],{"class":289,"line":2886},[287,6441,6442],{"class":297},"            \u003C",[287,6444,6445],{"class":426},"span\n",[287,6447,6448,6451,6453,6455,6458],{"class":289,"line":2910},[287,6449,6450],{"class":520},"              class",[287,6452,298],{"class":297},[287,6454,4609],{"class":297},[287,6456,6457],{"class":301},"absolute inset-0",[287,6459,5342],{"class":297},[287,6461,6462,6465,6467,6469,6471],{"class":289,"line":2925},[287,6463,6464],{"class":520},"              aria-hidden",[287,6466,298],{"class":297},[287,6468,4609],{"class":297},[287,6470,251],{"class":301},[287,6472,5342],{"class":297},[287,6474,6475],{"class":289,"line":2932},[287,6476,6477],{"class":297},"            />\n",[287,6479,6480,6483,6486],{"class":289,"line":2939},[287,6481,6482],{"class":297},"          \u003C/",[287,6484,6485],{"class":426},"NuxtLink",[287,6487,5248],{"class":297},[287,6489,6490],{"class":289,"line":2944},[287,6491,2643],{"emptyLinePlaceholder":212},[287,6493,6495],{"class":289,"line":6494},26,[287,6496,6497],{"class":293},"          {{ page.hero.headline.label }}\n",[287,6499,6501],{"class":289,"line":6500},27,[287,6502,2643],{"emptyLinePlaceholder":212},[287,6504,6506,6508],{"class":289,"line":6505},28,[287,6507,5454],{"class":297},[287,6509,6510],{"class":426},"UIcon\n",[287,6512,6514,6517,6519,6521,6524],{"class":289,"line":6513},29,[287,6515,6516],{"class":520},"            v-if",[287,6518,298],{"class":297},[287,6520,4609],{"class":297},[287,6522,6523],{"class":301},"page.hero.headline.icon",[287,6525,5342],{"class":297},[287,6527,6529,6532,6534,6536,6538],{"class":289,"line":6528},30,[287,6530,6531],{"class":520},"            :name",[287,6533,298],{"class":297},[287,6535,4609],{"class":297},[287,6537,6523],{"class":301},[287,6539,5342],{"class":297},[287,6541,6543,6545,6547,6549,6552],{"class":289,"line":6542},31,[287,6544,6409],{"class":520},[287,6546,298],{"class":297},[287,6548,4609],{"class":297},[287,6550,6551],{"class":301},"ml-1 w-4 h-4 pointer-events-none",[287,6553,5342],{"class":297},[287,6555,6557],{"class":289,"line":6556},32,[287,6558,6559],{"class":297},"          />\n",[287,6561,6563,6565,6568],{"class":289,"line":6562},33,[287,6564,5474],{"class":297},[287,6566,6567],{"class":426},"UBadge",[287,6569,5248],{"class":297},[287,6571,6573,6575,6577],{"class":289,"line":6572},34,[287,6574,5483],{"class":297},[287,6576,5245],{"class":426},[287,6578,5248],{"class":297},[287,6580,6582],{"class":289,"line":6581},35,[287,6583,2643],{"emptyLinePlaceholder":212},[287,6585,6587,6589,6591,6593,6595],{"class":289,"line":6586},36,[287,6588,5324],{"class":297},[287,6590,5245],{"class":426},[287,6592,5732],{"class":297},[287,6594,3455],{"class":520},[287,6596,5248],{"class":297},[287,6598,6600,6602,6605,6608,6610,6612,6615,6617,6620,6622,6624,6627,6629],{"class":289,"line":6599},37,[287,6601,5444],{"class":297},[287,6603,6604],{"class":426},"MDC",[287,6606,6607],{"class":520}," cache-key",[287,6609,298],{"class":297},[287,6611,4609],{"class":297},[287,6613,6614],{"class":301},"head-title",[287,6616,4609],{"class":297},[287,6618,6619],{"class":520}," :value",[287,6621,298],{"class":297},[287,6623,4609],{"class":297},[287,6625,6626],{"class":301},"page.hero.title",[287,6628,4609],{"class":297},[287,6630,5269],{"class":297},[287,6632,6634,6636,6638],{"class":289,"line":6633},38,[287,6635,5483],{"class":297},[287,6637,5245],{"class":426},[287,6639,5248],{"class":297},[287,6641,6643],{"class":289,"line":6642},39,[287,6644,2643],{"emptyLinePlaceholder":212},[287,6646,6648,6650],{"class":289,"line":6647},40,[287,6649,5324],{"class":297},[287,6651,6652],{"class":426},"MDC\n",[287,6654,6656,6659,6661,6663,6666],{"class":289,"line":6655},41,[287,6657,6658],{"class":520},"        :value",[287,6660,298],{"class":297},[287,6662,4609],{"class":297},[287,6664,6665],{"class":301},"page.hero.code",[287,6667,5342],{"class":297},[287,6669,6671,6674,6676,6678,6681],{"class":289,"line":6670},42,[287,6672,6673],{"class":520},"        cache-key",[287,6675,298],{"class":297},[287,6677,4609],{"class":297},[287,6679,6680],{"class":301},"head-code",[287,6682,5342],{"class":297},[287,6684,6686,6689,6691,6693,6696],{"class":289,"line":6685},43,[287,6687,6688],{"class":520},"        class",[287,6690,298],{"class":297},[287,6692,4609],{"class":297},[287,6694,6695],{"class":301},"prose prose-primary dark:prose-invert mx-auto",[287,6697,5342],{"class":297},[287,6699,6701],{"class":289,"line":6700},44,[287,6702,5360],{"class":297},[287,6704,6706,6708,6711],{"class":289,"line":6705},45,[287,6707,5365],{"class":297},[287,6709,6710],{"class":426},"ULandingHero",[287,6712,5248],{"class":297},[287,6714,6716],{"class":289,"line":6715},46,[287,6717,2643],{"emptyLinePlaceholder":212},[287,6719,6721,6723],{"class":289,"line":6720},47,[287,6722,5263],{"class":297},[287,6724,6725],{"class":426},"ULandingSection\n",[287,6727,6729,6732,6734,6736,6739],{"class":289,"line":6728},48,[287,6730,6731],{"class":520},"      :title",[287,6733,298],{"class":297},[287,6735,4609],{"class":297},[287,6737,6738],{"class":301},"page.features.title",[287,6740,5342],{"class":297},[287,6742,6744,6747,6749,6751,6754],{"class":289,"line":6743},49,[287,6745,6746],{"class":520},"      :links",[287,6748,298],{"class":297},[287,6750,4609],{"class":297},[287,6752,6753],{"class":301},"page.features.links",[287,6755,5342],{"class":297},[287,6757,6759],{"class":289,"line":6758},50,[287,6760,6290],{"class":297},[287,6762,6764,6766,6769],{"class":289,"line":6763},51,[287,6765,5324],{"class":297},[287,6767,6768],{"class":426},"UPageGrid",[287,6770,5248],{"class":297},[287,6772,6774,6776],{"class":289,"line":6773},52,[287,6775,5444],{"class":297},[287,6777,6778],{"class":426},"ULandingCard\n",[287,6780,6782,6785,6787,6789,6792],{"class":289,"line":6781},53,[287,6783,6784],{"class":520},"          v-for",[287,6786,298],{"class":297},[287,6788,4609],{"class":297},[287,6790,6791],{"class":301},"(item, index) of page.features.items",[287,6793,5342],{"class":297},[287,6795,6797,6800,6802,6804,6806],{"class":289,"line":6796},54,[287,6798,6799],{"class":520},"          :key",[287,6801,298],{"class":297},[287,6803,4609],{"class":297},[287,6805,3318],{"class":301},[287,6807,5342],{"class":297},[287,6809,6811,6814,6816,6818,6821],{"class":289,"line":6810},55,[287,6812,6813],{"class":520},"          v-bind",[287,6815,298],{"class":297},[287,6817,4609],{"class":297},[287,6819,6820],{"class":301},"item",[287,6822,5342],{"class":297},[287,6824,6826],{"class":289,"line":6825},56,[287,6827,6828],{"class":297},"        />\n",[287,6830,6832,6834,6836],{"class":289,"line":6831},57,[287,6833,5483],{"class":297},[287,6835,6768],{"class":426},[287,6837,5248],{"class":297},[287,6839,6841,6843,6846],{"class":289,"line":6840},58,[287,6842,5365],{"class":297},[287,6844,6845],{"class":426},"ULandingSection",[287,6847,5248],{"class":297},[287,6849,6851,6853,6855],{"class":289,"line":6850},59,[287,6852,5374],{"class":297},[287,6854,5256],{"class":426},[287,6856,5248],{"class":297},[287,6858,6860,6862,6864],{"class":289,"line":6859},60,[287,6861,5383],{"class":297},[287,6863,5245],{"class":426},[287,6865,5248],{"class":297},[1897,6867,6869],{"id":6868},"migrate-vue-components-to-mdc","Migrate Vue components to MDC",[238,6871,6872,6873,6875,6876,456],{},"Move all components in ",[284,6874,6014],{}," following the ",[318,6877,6878],{"href":59},"MDC syntax",[238,6880,6881,6882,6885],{},"Landing components have been reorganised and standardised as generic ",[284,6883,6884],{},"Page"," components.",[675,6887,6888,6897,6905],{},[350,6889,6890,6893,6894],{},[284,6891,6892],{},"LandingHero"," => ",[284,6895,6896],{},"PageHero",[350,6898,6899,6893,6902],{},[284,6900,6901],{},"LandingSection",[284,6903,6904],{},"PageSection",[350,6906,6907,6893,6910,6913,6914,6917],{},[284,6908,6909],{},"LandingCard",[284,6911,6912],{},"PageCard"," (we'll use the ",[284,6915,6916],{},"PageFeature"," instead)",[326,6919,6921,6922,6924],{"to":6920},"https://github.com/nuxt-ui-pro/docs/blob/v3/content/index.md","Have a look at the final ",[284,6923,58],{}," result on GitHub.",[335,6926,6928],{"id":6927},"_6-migrate-docs-page","6. Migrate docs page",[1459,6930,6931,6935,6956,7212,7216],{"level":1895},[1897,6932,6934],{"id":6933},"layout","Layout",[675,6936,6937,6946],{},[350,6938,6939,6942,6943,2226],{},[284,6940,6941],{},"Aside"," component has been renamed to ",[284,6944,6945],{},"PageAside",[350,6947,6948,6950,6951,6953,6954,456],{},[284,6949,5638],{}," component can be used (instead of ",[284,6952,5630],{},") to display the content navigation returned by ",[284,6955,84],{},[2997,6957,6958,7091],{},[276,6959,6962],{"className":5233,"code":6960,"filename":6961,"language":5236,"meta":282,"style":282},"\u003Ctemplate>\n  \u003CUContainer>\n    \u003CUPage>\n      \u003Ctemplate #left>\n        \u003CUPageAside>\n          \u003CUContentNavigation\n            highlight\n            :navigation=\"navigation\"\n          />\n        \u003C/UPageAside>\n      \u003C/template>\n\n      \u003Cslot />\n    \u003C/UPage>\n  \u003C/UContainer>\n\u003C/template>\n","layout/docs.vue (v3)",[284,6963,6964,6972,6980,6988,7001,7010,7016,7021,7034,7038,7046,7054,7058,7067,7075,7083],{"__ignoreMap":282},[287,6965,6966,6968,6970],{"class":289,"line":290},[287,6967,3214],{"class":297},[287,6969,5245],{"class":426},[287,6971,5248],{"class":297},[287,6973,6974,6976,6978],{"class":289,"line":423},[287,6975,5253],{"class":297},[287,6977,5437],{"class":426},[287,6979,5248],{"class":297},[287,6981,6982,6984,6986],{"class":289,"line":445},[287,6983,5263],{"class":297},[287,6985,5447],{"class":426},[287,6987,5248],{"class":297},[287,6989,6990,6992,6994,6996,6999],{"class":289,"line":466},[287,6991,5324],{"class":297},[287,6993,5245],{"class":426},[287,6995,5732],{"class":297},[287,6997,6998],{"class":520},"left",[287,7000,5248],{"class":297},[287,7002,7003,7005,7008],{"class":289,"line":501},[287,7004,5444],{"class":297},[287,7006,7007],{"class":426},"UPageAside",[287,7009,5248],{"class":297},[287,7011,7012,7014],{"class":289,"line":512},[287,7013,5454],{"class":297},[287,7015,5743],{"class":426},[287,7017,7018],{"class":289,"line":540},[287,7019,7020],{"class":520},"            highlight\n",[287,7022,7023,7026,7028,7030,7032],{"class":289,"line":565},[287,7024,7025],{"class":520},"            :navigation",[287,7027,298],{"class":297},[287,7029,4609],{"class":297},[287,7031,3035],{"class":301},[287,7033,5342],{"class":297},[287,7035,7036],{"class":289,"line":573},[287,7037,6559],{"class":297},[287,7039,7040,7042,7044],{"class":289,"line":586},[287,7041,5474],{"class":297},[287,7043,7007],{"class":426},[287,7045,5248],{"class":297},[287,7047,7048,7050,7052],{"class":289,"line":603},[287,7049,5483],{"class":297},[287,7051,5245],{"class":426},[287,7053,5248],{"class":297},[287,7055,7056],{"class":289,"line":636},[287,7057,2643],{"emptyLinePlaceholder":212},[287,7059,7060,7062,7065],{"class":289,"line":645},[287,7061,5324],{"class":297},[287,7063,7064],{"class":426},"slot",[287,7066,5269],{"class":297},[287,7068,7069,7071,7073],{"class":289,"line":651},[287,7070,5365],{"class":297},[287,7072,5447],{"class":426},[287,7074,5248],{"class":297},[287,7076,7077,7079,7081],{"class":289,"line":657},[287,7078,5374],{"class":297},[287,7080,5437],{"class":426},[287,7082,5248],{"class":297},[287,7084,7085,7087,7089],{"class":289,"line":886},[287,7086,5383],{"class":297},[287,7088,5245],{"class":426},[287,7090,5248],{"class":297},[276,7092,7095],{"className":5233,"code":7093,"filename":7094,"language":5236,"meta":282,"style":282},"\u003Ctemplate>\n  \u003CUContainer>\n    \u003CUPage>\n      \u003Ctemplate #left>\n        \u003CUAside>\n          \u003CUNavigationTree :links=\"mapContentNavigation(navigation)\" />\n        \u003C/UAside>\n      \u003C/template>\n\n      \u003Cslot />\n    \u003C/UPage>\n  \u003C/UContainer>\n\u003C/template>\n","layout/docs.vue (v1)",[284,7096,7097,7105,7113,7121,7133,7142,7160,7168,7176,7180,7188,7196,7204],{"__ignoreMap":282},[287,7098,7099,7101,7103],{"class":289,"line":290},[287,7100,3214],{"class":297},[287,7102,5245],{"class":426},[287,7104,5248],{"class":297},[287,7106,7107,7109,7111],{"class":289,"line":423},[287,7108,5253],{"class":297},[287,7110,5437],{"class":426},[287,7112,5248],{"class":297},[287,7114,7115,7117,7119],{"class":289,"line":445},[287,7116,5263],{"class":297},[287,7118,5447],{"class":426},[287,7120,5248],{"class":297},[287,7122,7123,7125,7127,7129,7131],{"class":289,"line":466},[287,7124,5324],{"class":297},[287,7126,5245],{"class":426},[287,7128,5732],{"class":297},[287,7130,6998],{"class":520},[287,7132,5248],{"class":297},[287,7134,7135,7137,7140],{"class":289,"line":501},[287,7136,5444],{"class":297},[287,7138,7139],{"class":426},"UAside",[287,7141,5248],{"class":297},[287,7143,7144,7146,7148,7150,7152,7154,7156,7158],{"class":289,"line":512},[287,7145,5454],{"class":297},[287,7147,5889],{"class":426},[287,7149,5892],{"class":520},[287,7151,298],{"class":297},[287,7153,4609],{"class":297},[287,7155,5899],{"class":301},[287,7157,4609],{"class":297},[287,7159,5269],{"class":297},[287,7161,7162,7164,7166],{"class":289,"line":540},[287,7163,5474],{"class":297},[287,7165,7139],{"class":426},[287,7167,5248],{"class":297},[287,7169,7170,7172,7174],{"class":289,"line":565},[287,7171,5483],{"class":297},[287,7173,5245],{"class":426},[287,7175,5248],{"class":297},[287,7177,7178],{"class":289,"line":573},[287,7179,2643],{"emptyLinePlaceholder":212},[287,7181,7182,7184,7186],{"class":289,"line":586},[287,7183,5324],{"class":297},[287,7185,7064],{"class":426},[287,7187,5269],{"class":297},[287,7189,7190,7192,7194],{"class":289,"line":603},[287,7191,5365],{"class":297},[287,7193,5447],{"class":426},[287,7195,5248],{"class":297},[287,7197,7198,7200,7202],{"class":289,"line":636},[287,7199,5374],{"class":297},[287,7201,5437],{"class":426},[287,7203,5248],{"class":297},[287,7205,7206,7208,7210],{"class":289,"line":645},[287,7207,5383],{"class":297},[287,7209,5245],{"class":426},[287,7211,5248],{"class":297},[1897,7213,7215],{"id":7214},"catch-all-pages","Catch-all pages",[675,7217,7218,7227,7236],{},[350,7219,7220,7223,7224],{},[284,7221,7222],{},"Divider"," has been renamed to ",[284,7225,7226],{},"Separator",[350,7228,7229,7232,7233],{},[284,7230,7231],{},"findPageHeadline"," must be imported from ",[284,7234,7235],{},"#ui-pro/utils/content",[350,7237,7238,7240,7241,5624],{},[284,7239,6127],{}," property does not exist no more on ",[284,7242,7243],{},"PageBody",[326,7245,7246],{"to":2508},"That's it! The docs starter is now fully running on both UI and Content v3 🎉",[258,7248,7250],{"id":7249},"edit-on-studio","Edit on Studio",[238,7252,7253],{},"If you're using Nuxt Studio to edit your documentation you also need to migrate the related code.",[238,7255,7256,7257,7259,7260,7262,7263,7265],{},"The Studio module has been deprecated and a new generic ",[284,7258,4301],{}," has been implemented directly into Nuxt Content, you can remove the ",[284,7261,4305],{}," package from your dependencies and from the",[284,7264,1338],{}," modules. Instead you just need to enable the preview mode in the Nuxt configuration file by binding the Studio API.",[276,7267,7268],{"className":1336,"code":4315,"filename":1338,"language":1339,"meta":282,"style":282},[284,7269,7270,7282,7290,7298,7310,7314,7318],{"__ignoreMap":282},[287,7271,7272,7274,7276,7278,7280],{"class":289,"line":290},[287,7273,407],{"class":406},[287,7275,410],{"class":406},[287,7277,1350],{"class":413},[287,7279,417],{"class":293},[287,7281,420],{"class":297},[287,7283,7284,7286,7288],{"class":289,"line":423},[287,7285,4334],{"class":426},[287,7287,430],{"class":297},[287,7289,537],{"class":297},[287,7291,7292,7294,7296],{"class":289,"line":445},[287,7293,4343],{"class":426},[287,7295,430],{"class":297},[287,7297,537],{"class":297},[287,7299,7300,7302,7304,7306,7308],{"class":289,"line":466},[287,7301,4352],{"class":426},[287,7303,430],{"class":297},[287,7305,433],{"class":297},[287,7307,4359],{"class":301},[287,7309,836],{"class":297},[287,7311,7312],{"class":289,"line":501},[287,7313,648],{"class":297},[287,7315,7316],{"class":289,"line":512},[287,7317,4370],{"class":297},[287,7319,7320,7322],{"class":289,"line":540},[287,7321,622],{"class":297},[287,7323,498],{"class":293},[238,7325,7326,7327,7330,7331,2992,7334,456],{},"In order to keep the app config file updatable from Studio you need to update the helper import of the ",[284,7328,7329],{},"nuxt.schema.ts"," file from ",[284,7332,7333],{},"@nuxthq/studio/theme",[284,7335,7336],{},"@nuxt/content/preview",[249,7338],{":autoplay":251,":controls":251,":loop":251,"poster":7339,"src":7340},"https://res.cloudinary.com/nuxt/video/upload/v1737458923/studio/docs-v3_lqfasl.png","https://res.cloudinary.com/nuxt/video/upload/v1737458923/studio/docs-v3_lqfasl.mp4",[1041,7342,7343],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":282,"searchDepth":423,"depth":423,"links":7345},[7346,7358,7369],{"id":2512,"depth":423,"text":2513,"children":7347},[7348,7349,7351,7353,7354,7355,7356,7357],{"id":2516,"depth":445,"text":2517},{"id":2581,"depth":445,"text":7350},"2. Create content.config.ts file",{"id":2978,"depth":445,"text":7352},"3. Migrate app.vue",{"id":3270,"depth":445,"text":3271},{"id":3563,"depth":445,"text":3564},{"id":4193,"depth":445,"text":4194},{"id":4275,"depth":445,"text":4276},{"id":4289,"depth":445,"text":4290},{"id":4387,"depth":423,"text":4388,"children":7359},[7360,7361,7363,7365,7367,7368],{"id":4395,"depth":445,"text":4396},{"id":4923,"depth":445,"text":7362},"2. Update ui overloads in app.config.ts",{"id":5218,"depth":445,"text":7364},"3. Migrate error.vue page",{"id":5593,"depth":445,"text":7366},"4. Migrate app.vue page",{"id":5930,"depth":445,"text":5931},{"id":6927,"depth":445,"text":6928},{"id":7249,"depth":423,"text":7250},"2025-01-21","How to upgrade your Nuxt UI Pro documentation to Content and UI v3",{"src":7373},"/blog/migrate-docs-starter.png",{},"/blog/ui-pro-docs-migration",{"title":2457,"description":7371},"blog/ui-pro-docs-migration","2n-TKYtoTGJnRcfipy5JP9QZzInGPPegmhWEBNHuqYg",{"id":7380,"title":2486,"authors":7381,"body":7388,"categories":208,"category":2093,"date":8440,"description":8441,"draft":50,"extension":1065,"image":8442,"meta":8445,"navigation":212,"path":8446,"seo":8447,"stem":8449,"__hash__":8450},"posts/blog/v3.md",[7382,7384,7386],{"name":229,"avatar":7383,"to":232,"username":233},{"src":231},{"name":1083,"avatar":7385,"to":1086,"username":1087},{"src":1085},{"name":1089,"avatar":7387,"to":1092,"username":1093},{"src":1091},{"type":235,"value":7389,"toc":8422},[7390,7396,7399,7403,7406,7418,7427,7434,7438,7452,7455,7464,7468,7471,7475,7478,7484,7492,7498,7501,7780,7783,7787,7790,7812,7815,8054,8058,8061,8082,8085,8259,8263,8266,8270,8276,8279,8283,8300,8303,8314,8320,8379,8382,8388,8401,8419],[2464,7391,7393],{"id":7392},"announcing-nuxt-content-30",[245,7394,7395],{},"Announcing Nuxt Content 3.0",[238,7397,7398],{},"We are thrilled to announce the first stable version of Nuxt Content 3.0.0 ✨",[258,7400,7402],{"id":7401},"performance-improvements","🚀 Performance Improvements",[238,7404,7405],{},"Nuxt Content v3 moves away from a file-based storage approach to an SQL database system. Using a database instead of the file-based storage reduces many I/O operations when querying large datasets.",[2220,7407,7408,7409,1513,7411,7414,7415,7417],{},"The new database system enhances the way your data files are stored and structured, ensuring better performance and scalability. This update is entirely behind the scenes and does not affect the file types you can use in Content (",[284,7410,210],{},[284,7412,7413],{},"json",", and ",[284,7416,4729],{}," ).",[238,7419,7420,7421,2493,7424,456],{},"This switch is transparent to users and Nuxt Content still provides a zero config support for development mode, ",[318,7422,7423],{"href":120},"server hosting",[318,7425,7426],{"href":124},"static generation",[238,7428,7429,7430,7433],{},"Furthermore, ",[318,7431,7432],{"href":128},"serverless"," hosting is now supported and client-side navigation performance has been improved.",[335,7435,7437],{"id":7436},"serverless-compatibility","Serverless Compatibility",[238,7439,7440,7441,1513,7445,1583,7448,456],{},"A key challenge with Nuxt Content v2 was the large bundle size required to store all content files. It was an issue when deploying to serverless or edge platforms like ",[318,7442,147],{"href":7443,"rel":7444},"https://netlify.com",[322],[318,7446,131],{"href":1141,"rel":7447},[322],[318,7449,143],{"href":7450,"rel":7451},"https://vercel.com",[322],[238,7453,7454],{},"In serverless environments, each user request triggers a fresh instance of your Nuxt server, it starts from scratch each time. This \"stateless\" nature means you can't store data in server memory or use file-based databases like SQLite. That's why we've implemented database adaptors that persist data independently of your server instances.",[2220,7456,7457,7458,7463],{},"We're manually switching to the appropriate provider (Vercel / Postgres, NuxtHub / D1...) according to the ",[318,7459,7462],{"href":7460,"rel":7461},"https://cfec52f9.content-f0q.pages.dev/docs/getting-started/configuration#database",[322],"database type"," you've set in your config.",[335,7465,7467],{"id":7466},"wasm-sqlite-in-browser","WASM SQLite in Browser",[238,7469,7470],{},"For client-side navigation, the module uses a similar approach. When the application executes the first content query, it downloads the generated dump from the server and initializes a local SQLite database within the browser. From that point onward, all queries are executed locally without needing to call the server: significantly improving the responsiveness of the application and providing a seamless user experience.",[258,7472,7474],{"id":7473},"️-content-collections","🗄️ Content Collections",[238,7476,7477],{},"Collections are groups of related content items within your Nuxt Content project. They help organize and manage large datasets more efficiently.",[335,7479,7481],{"id":7480},"define-collections",[245,7482,7483],{},"Define Collections",[238,7485,7486,7487,7491],{},"You can now define collections in the ",[318,7488,7489],{"href":17},[284,7490,2585],{}," file to configure the database structure, utility types, and methods for finding, parsing, and querying content.",[335,7493,7495],{"id":7494},"collections-schema",[245,7496,7497],{},"Collections Schema",[238,7499,7500],{},"Schemas enforce consistency within collections and improve TypeScript typings for better integration with Nuxt Content utilities.",[276,7502,7504],{"className":1336,"code":7503,"filename":2585,"language":1339,"meta":282,"style":282},"import { defineCollection, z } from '@nuxt/content'\n\n// Export collections\nexport const collections = {\n  // Define collection using `defineCollection` utility\n  posts: defineCollection({\n    // Specify the type of content in this collection\n    type: 'page',\n    // Load every file matching this pattern\n    source: 'blog/**/*.md',\n    // Define custom schema for this collection\n    schema: z.object({\n      date: z.date(),\n      image: z.object({\n        src: z.string(),\n        alt: z.string()\n      }),\n      badge: z.object({\n        label: z.string(),\n        color: z.string()\n      })\n    })\n  }),\n}\n",[284,7505,7506,7528,7532,7537,7551,7556,7569,7574,7589,7594,7610,7615,7632,7650,7667,7684,7699,7707,7724,7741,7756,7762,7768,7776],{"__ignoreMap":282},[287,7507,7508,7510,7512,7514,7516,7518,7520,7522,7524,7526],{"class":289,"line":290},[287,7509,2609],{"class":406},[287,7511,2612],{"class":297},[287,7513,2621],{"class":293},[287,7515,2618],{"class":297},[287,7517,453],{"class":293},[287,7519,2628],{"class":297},[287,7521,2631],{"class":406},[287,7523,433],{"class":297},[287,7525,2636],{"class":301},[287,7527,836],{"class":297},[287,7529,7530],{"class":289,"line":423},[287,7531,2643],{"emptyLinePlaceholder":212},[287,7533,7534],{"class":289,"line":445},[287,7535,7536],{"class":5661},"// Export collections\n",[287,7538,7539,7541,7544,7547,7549],{"class":289,"line":466},[287,7540,407],{"class":406},[287,7542,7543],{"class":520}," const",[287,7545,7546],{"class":293}," collections ",[287,7548,298],{"class":297},[287,7550,537],{"class":297},[287,7552,7553],{"class":289,"line":501},[287,7554,7555],{"class":5661},"  // Define collection using `defineCollection` utility\n",[287,7557,7558,7561,7563,7565,7567],{"class":289,"line":512},[287,7559,7560],{"class":426},"  posts",[287,7562,430],{"class":297},[287,7564,2621],{"class":413},[287,7566,417],{"class":293},[287,7568,420],{"class":297},[287,7570,7571],{"class":289,"line":540},[287,7572,7573],{"class":5661},"    // Specify the type of content in this collection\n",[287,7575,7576,7579,7581,7583,7585,7587],{"class":289,"line":565},[287,7577,7578],{"class":426},"    type",[287,7580,430],{"class":297},[287,7582,433],{"class":297},[287,7584,2689],{"class":301},[287,7586,439],{"class":297},[287,7588,442],{"class":297},[287,7590,7591],{"class":289,"line":573},[287,7592,7593],{"class":5661},"    // Load every file matching this pattern\n",[287,7595,7596,7599,7601,7603,7606,7608],{"class":289,"line":586},[287,7597,7598],{"class":426},"    source",[287,7600,430],{"class":297},[287,7602,433],{"class":297},[287,7604,7605],{"class":301},"blog/**/*.md",[287,7607,439],{"class":297},[287,7609,442],{"class":297},[287,7611,7612],{"class":289,"line":603},[287,7613,7614],{"class":5661},"    // Define custom schema for this collection\n",[287,7616,7617,7620,7622,7624,7626,7628,7630],{"class":289,"line":636},[287,7618,7619],{"class":426},"    schema",[287,7621,430],{"class":297},[287,7623,453],{"class":293},[287,7625,456],{"class":297},[287,7627,459],{"class":413},[287,7629,417],{"class":293},[287,7631,420],{"class":297},[287,7633,7634,7637,7639,7641,7643,7646,7648],{"class":289,"line":645},[287,7635,7636],{"class":426},"      date",[287,7638,430],{"class":297},[287,7640,453],{"class":293},[287,7642,456],{"class":297},[287,7644,7645],{"class":413},"date",[287,7647,481],{"class":293},[287,7649,442],{"class":297},[287,7651,7652,7655,7657,7659,7661,7663,7665],{"class":289,"line":651},[287,7653,7654],{"class":426},"      image",[287,7656,430],{"class":297},[287,7658,453],{"class":293},[287,7660,456],{"class":297},[287,7662,459],{"class":413},[287,7664,417],{"class":293},[287,7666,420],{"class":297},[287,7668,7669,7672,7674,7676,7678,7680,7682],{"class":289,"line":657},[287,7670,7671],{"class":426},"        src",[287,7673,430],{"class":297},[287,7675,453],{"class":293},[287,7677,456],{"class":297},[287,7679,478],{"class":413},[287,7681,481],{"class":293},[287,7683,442],{"class":297},[287,7685,7686,7689,7691,7693,7695,7697],{"class":289,"line":886},[287,7687,7688],{"class":426},"        alt",[287,7690,430],{"class":297},[287,7692,453],{"class":293},[287,7694,456],{"class":297},[287,7696,478],{"class":413},[287,7698,2907],{"class":293},[287,7700,7701,7703,7705],{"class":289,"line":891},[287,7702,639],{"class":297},[287,7704,507],{"class":293},[287,7706,442],{"class":297},[287,7708,7709,7712,7714,7716,7718,7720,7722],{"class":289,"line":896},[287,7710,7711],{"class":426},"      badge",[287,7713,430],{"class":297},[287,7715,453],{"class":293},[287,7717,456],{"class":297},[287,7719,459],{"class":413},[287,7721,417],{"class":293},[287,7723,420],{"class":297},[287,7725,7726,7729,7731,7733,7735,7737,7739],{"class":289,"line":2868},[287,7727,7728],{"class":426},"        label",[287,7730,430],{"class":297},[287,7732,453],{"class":293},[287,7734,456],{"class":297},[287,7736,478],{"class":413},[287,7738,481],{"class":293},[287,7740,442],{"class":297},[287,7742,7743,7746,7748,7750,7752,7754],{"class":289,"line":2886},[287,7744,7745],{"class":426},"        color",[287,7747,430],{"class":297},[287,7749,453],{"class":293},[287,7751,456],{"class":297},[287,7753,478],{"class":413},[287,7755,2907],{"class":293},[287,7757,7758,7760],{"class":289,"line":2910},[287,7759,639],{"class":297},[287,7761,498],{"class":293},[287,7763,7764,7766],{"class":289,"line":2925},[287,7765,2712],{"class":297},[287,7767,498],{"class":293},[287,7769,7770,7772,7774],{"class":289,"line":2932},[287,7771,504],{"class":297},[287,7773,507],{"class":293},[287,7775,442],{"class":297},[287,7777,7778],{"class":289,"line":2939},[287,7779,4920],{"class":297},[326,7781,7782],{"to":32},"Learn more about collections in the documentation.",[258,7784,7786],{"id":7785},"simplified-vue-utils","🔧 Simplified Vue Utils",[238,7788,7789],{},"We simplified the utils to now expose:",[675,7791,7792,7797,7802,7807],{},[350,7793,7794,7796],{},[318,7795,80],{"href":81}," to fetch your collections with our powerful query builder",[350,7798,7799,7801],{},[318,7800,84],{"href":85}," to fetch the generated navigation for a specific collection",[350,7803,7804,7806],{},[318,7805,88],{"href":89}," to fetch sibling content for a specific path",[350,7808,7809,7811],{},[318,7810,92],{"href":93}," to fetch searchable sections from a collection for enhanced content discovery",[238,7813,7814],{},"These four utils allow your to efficiently fetch and query your content within your Vue pages and components:",[276,7816,7819],{"className":5233,"code":7817,"filename":7818,"language":5236,"meta":282,"style":282},"\u003Cscript setup lang=\"ts\">\nconst { data: posts } = await useAsyncData('blog', () => {\n  return queryCollection('blog').all()\n})\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cdiv>\n    \u003Ch1>Blog\u003C/h1>\n    \u003Cul>\n      \u003Cli v-for=\"post in posts\" :key=\"post.id\">\n        \u003CNuxtLink :to=\"post.path\">{{ post.title }}\u003C/NuxtLink>\n      \u003C/li>\n    \u003C/ul>\n  \u003C/div>\n\u003C/template>\n","pages/blog.vue",[284,7820,7821,7843,7880,7903,7909,7917,7921,7929,7937,7953,7961,7993,8022,8030,8038,8046],{"__ignoreMap":282},[287,7822,7823,7825,7827,7830,7833,7835,7837,7839,7841],{"class":289,"line":290},[287,7824,3214],{"class":297},[287,7826,5654],{"class":426},[287,7828,7829],{"class":520}," setup",[287,7831,7832],{"class":520}," lang",[287,7834,298],{"class":297},[287,7836,4609],{"class":297},[287,7838,1339],{"class":301},[287,7840,4609],{"class":297},[287,7842,5248],{"class":297},[287,7844,7845,7847,7849,7851,7853,7856,7858,7860,7862,7864,7866,7868,7870,7872,7874,7876,7878],{"class":289,"line":423},[287,7846,3009],{"class":520},[287,7848,2612],{"class":297},[287,7850,3014],{"class":426},[287,7852,430],{"class":297},[287,7854,7855],{"class":293}," posts ",[287,7857,622],{"class":297},[287,7859,549],{"class":297},[287,7861,552],{"class":406},[287,7863,3028],{"class":413},[287,7865,417],{"class":293},[287,7867,439],{"class":297},[287,7869,215],{"class":301},[287,7871,439],{"class":297},[287,7873,2618],{"class":297},[287,7875,3042],{"class":297},[287,7877,534],{"class":520},[287,7879,537],{"class":297},[287,7881,7882,7885,7887,7889,7891,7893,7895,7897,7899,7901],{"class":289,"line":445},[287,7883,7884],{"class":406},"  return",[287,7886,3329],{"class":413},[287,7888,417],{"class":426},[287,7890,439],{"class":297},[287,7892,215],{"class":301},[287,7894,439],{"class":297},[287,7896,507],{"class":426},[287,7898,456],{"class":297},[287,7900,3623],{"class":413},[287,7902,2907],{"class":426},[287,7904,7905,7907],{"class":289,"line":466},[287,7906,622],{"class":297},[287,7908,498],{"class":293},[287,7910,7911,7913,7915],{"class":289,"line":501},[287,7912,5383],{"class":297},[287,7914,5654],{"class":426},[287,7916,5248],{"class":297},[287,7918,7919],{"class":289,"line":512},[287,7920,2643],{"emptyLinePlaceholder":212},[287,7922,7923,7925,7927],{"class":289,"line":540},[287,7924,3214],{"class":297},[287,7926,5245],{"class":426},[287,7928,5248],{"class":297},[287,7930,7931,7933,7935],{"class":289,"line":565},[287,7932,5253],{"class":297},[287,7934,5256],{"class":426},[287,7936,5248],{"class":297},[287,7938,7939,7941,7943,7945,7947,7949,7951],{"class":289,"line":573},[287,7940,5263],{"class":297},[287,7942,2464],{"class":426},[287,7944,3223],{"class":297},[287,7946,207],{"class":293},[287,7948,5383],{"class":297},[287,7950,2464],{"class":426},[287,7952,5248],{"class":297},[287,7954,7955,7957,7959],{"class":289,"line":586},[287,7956,5263],{"class":297},[287,7958,675],{"class":426},[287,7960,5248],{"class":297},[287,7962,7963,7965,7967,7970,7972,7974,7977,7979,7982,7984,7986,7989,7991],{"class":289,"line":603},[287,7964,5324],{"class":297},[287,7966,350],{"class":426},[287,7968,7969],{"class":520}," v-for",[287,7971,298],{"class":297},[287,7973,4609],{"class":297},[287,7975,7976],{"class":301},"post in posts",[287,7978,4609],{"class":297},[287,7980,7981],{"class":520}," :key",[287,7983,298],{"class":297},[287,7985,4609],{"class":297},[287,7987,7988],{"class":301},"post.id",[287,7990,4609],{"class":297},[287,7992,5248],{"class":297},[287,7994,7995,7997,7999,8002,8004,8006,8009,8011,8013,8016,8018,8020],{"class":289,"line":636},[287,7996,5444],{"class":297},[287,7998,6485],{"class":426},[287,8000,8001],{"class":520}," :to",[287,8003,298],{"class":297},[287,8005,4609],{"class":297},[287,8007,8008],{"class":301},"post.path",[287,8010,4609],{"class":297},[287,8012,3223],{"class":297},[287,8014,8015],{"class":293},"{{ post.title }}",[287,8017,5383],{"class":297},[287,8019,6485],{"class":426},[287,8021,5248],{"class":297},[287,8023,8024,8026,8028],{"class":289,"line":645},[287,8025,5483],{"class":297},[287,8027,350],{"class":426},[287,8029,5248],{"class":297},[287,8031,8032,8034,8036],{"class":289,"line":651},[287,8033,5365],{"class":297},[287,8035,675],{"class":426},[287,8037,5248],{"class":297},[287,8039,8040,8042,8044],{"class":289,"line":657},[287,8041,5374],{"class":297},[287,8043,5256],{"class":426},[287,8045,5248],{"class":297},[287,8047,8048,8050,8052],{"class":289,"line":886},[287,8049,5383],{"class":297},[287,8051,5245],{"class":426},[287,8053,5248],{"class":297},[258,8055,8057],{"id":8056},"built-in-components","📦 Built-in Components",[238,8059,8060],{},"We've updated the components to include only the essentials:",[675,8062,8063,8068,8077],{},[350,8064,8065,8067],{},[318,8066,101],{"href":102}," to render the parsed Markdown to HTML & Vue components",[350,8069,8070,8072,8073,8076],{},[318,8071,105],{"href":106}," replaced ",[284,8074,8075],{},"ContentSlot"," as we now support unwrapping using a directive, making your Vue components perfectly compatible to be used in both Vue & Markdown",[350,8078,8079,8081],{},[318,8080,109],{"href":110}," are pre-designed components tailored for MDC syntax, with integrated styling for a good appearance",[238,8083,8084],{},"Here's an example of displaying the content of a Markdown file:",[276,8086,8089],{"className":5233,"code":8087,"filename":8088,"language":5236,"meta":282,"style":282},"\u003Cscript lang=\"ts\" setup>\nconst { data: page } = await useAsyncData(() => {\n  return queryCollection('content').path('/about').first()\n})\n\u003C/script>\n\n\u003Ctemplate>\n  \u003CContentRenderer v-if=\"page\" :value=\"page\" />\n  \u003Cp v-else>About page not written yet.\u003C/p>\n\u003C/template>\n","pages/about.vue",[284,8090,8091,8111,8139,8176,8182,8190,8194,8202,8231,8251],{"__ignoreMap":282},[287,8092,8093,8095,8097,8099,8101,8103,8105,8107,8109],{"class":289,"line":290},[287,8094,3214],{"class":297},[287,8096,5654],{"class":426},[287,8098,7832],{"class":520},[287,8100,298],{"class":297},[287,8102,4609],{"class":297},[287,8104,1339],{"class":301},[287,8106,4609],{"class":297},[287,8108,7829],{"class":520},[287,8110,5248],{"class":297},[287,8112,8113,8115,8117,8119,8121,8123,8125,8127,8129,8131,8133,8135,8137],{"class":289,"line":423},[287,8114,3009],{"class":520},[287,8116,2612],{"class":297},[287,8118,3014],{"class":426},[287,8120,430],{"class":297},[287,8122,3303],{"class":293},[287,8124,622],{"class":297},[287,8126,549],{"class":297},[287,8128,552],{"class":406},[287,8130,3028],{"class":413},[287,8132,417],{"class":293},[287,8134,481],{"class":297},[287,8136,534],{"class":520},[287,8138,537],{"class":297},[287,8140,8141,8143,8145,8147,8149,8151,8153,8155,8157,8159,8161,8163,8166,8168,8170,8172,8174],{"class":289,"line":445},[287,8142,7884],{"class":406},[287,8144,3329],{"class":413},[287,8146,417],{"class":426},[287,8148,439],{"class":297},[287,8150,2443],{"class":301},[287,8152,439],{"class":297},[287,8154,507],{"class":426},[287,8156,456],{"class":297},[287,8158,3344],{"class":413},[287,8160,417],{"class":426},[287,8162,439],{"class":297},[287,8164,8165],{"class":301},"/about",[287,8167,439],{"class":297},[287,8169,507],{"class":426},[287,8171,456],{"class":297},[287,8173,3360],{"class":413},[287,8175,2907],{"class":426},[287,8177,8178,8180],{"class":289,"line":466},[287,8179,622],{"class":297},[287,8181,498],{"class":293},[287,8183,8184,8186,8188],{"class":289,"line":501},[287,8185,5383],{"class":297},[287,8187,5654],{"class":426},[287,8189,5248],{"class":297},[287,8191,8192],{"class":289,"line":512},[287,8193,2643],{"emptyLinePlaceholder":212},[287,8195,8196,8198,8200],{"class":289,"line":540},[287,8197,3214],{"class":297},[287,8199,5245],{"class":426},[287,8201,5248],{"class":297},[287,8203,8204,8206,8208,8211,8213,8215,8217,8219,8221,8223,8225,8227,8229],{"class":289,"line":565},[287,8205,5253],{"class":297},[287,8207,101],{"class":426},[287,8209,8210],{"class":520}," v-if",[287,8212,298],{"class":297},[287,8214,4609],{"class":297},[287,8216,2689],{"class":301},[287,8218,4609],{"class":297},[287,8220,6619],{"class":520},[287,8222,298],{"class":297},[287,8224,4609],{"class":297},[287,8226,2689],{"class":301},[287,8228,4609],{"class":297},[287,8230,5269],{"class":297},[287,8232,8233,8235,8237,8240,8242,8245,8247,8249],{"class":289,"line":573},[287,8234,5253],{"class":297},[287,8236,238],{"class":426},[287,8238,8239],{"class":520}," v-else",[287,8241,3223],{"class":297},[287,8243,8244],{"class":293},"About page not written yet.",[287,8246,5383],{"class":297},[287,8248,238],{"class":426},[287,8250,5248],{"class":297},[287,8252,8253,8255,8257],{"class":289,"line":586},[287,8254,5383],{"class":297},[287,8256,5245],{"class":426},[287,8258,5248],{"class":297},[258,8260,8262],{"id":8261},"typescript-integration","🔷 TypeScript Integration",[238,8264,8265],{},"The new collections system provides automatic TypeScript types for all your data. Every utility and API is strongly typed based on your collection definitions, ensuring robust type safety throughout development.",[258,8267,8269],{"id":8268},"️-migrating-from-v2","⬆️ Migrating from V2",[238,8271,8272,8273,456],{},"Migration should be as easy as possible, this is why we wrote the ",[318,8274,8275],{"href":21},"migration guide",[2220,8277,8278],{},"Note that we've decided to remove the document-driven mode to simplify the module usage.",[258,8280,8282],{"id":8281},"️-studio-integration","🖼️ Studio Integration",[238,8284,8285,8288,8289,8292,8293,1513,8295,1519,8297,8299],{},[318,8286,2259],{"href":8287},"/studio"," is a platform to visually edit your ",[245,8290,8291],{},"Nuxt Content"," projects in production. With support for ",[284,8294,58],{},[284,8296,62],{},[284,8298,66],{}," files, our editor ensures versatility and ease of use.",[335,8301,4301],{"id":8302},"preview-api",[238,8304,8305,8306,8311,8312,456],{},"Previously an independent module, the ",[318,8307,8310],{"href":8308,"rel":8309},"https://github.com/nuxtlabs/studio-module",[322],"Studio module"," has been updated to be more generic and is now integrated directly into Nuxt Content as a ",[284,8313,4301],{},[238,8315,8316,8317,8319],{},"Enabling the preview functionality in Studio is easier than ever—simply configure the Studio API as your ",[284,8318,4301],{}," in your Nuxt Content settings:",[276,8321,8323],{"className":1336,"code":8322,"filename":1338,"language":1339,"meta":282,"style":282},"export default defineNuxtConfig({\n  content: {\n    preview: {\n      api: 'https://api.nuxt.studio'\n    }\n  }\n})\n",[284,8324,8325,8337,8345,8353,8365,8369,8373],{"__ignoreMap":282},[287,8326,8327,8329,8331,8333,8335],{"class":289,"line":290},[287,8328,407],{"class":406},[287,8330,410],{"class":406},[287,8332,1350],{"class":413},[287,8334,417],{"class":293},[287,8336,420],{"class":297},[287,8338,8339,8341,8343],{"class":289,"line":423},[287,8340,4334],{"class":426},[287,8342,430],{"class":297},[287,8344,537],{"class":297},[287,8346,8347,8349,8351],{"class":289,"line":445},[287,8348,4343],{"class":426},[287,8350,430],{"class":297},[287,8352,537],{"class":297},[287,8354,8355,8357,8359,8361,8363],{"class":289,"line":466},[287,8356,4352],{"class":426},[287,8358,430],{"class":297},[287,8360,433],{"class":297},[287,8362,4359],{"class":301},[287,8364,836],{"class":297},[287,8366,8367],{"class":289,"line":501},[287,8368,648],{"class":297},[287,8370,8371],{"class":289,"line":512},[287,8372,654],{"class":297},[287,8374,8375,8377],{"class":289,"line":540},[287,8376,622],{"class":297},[287,8378,498],{"class":293},[238,8380,8381],{},"This simplification means no extra module is required for Studio, making setup faster. Furthermore, the Preview API is now generic, enabling other providers to deliver great editing experiences on top of Nuxt Content.",[335,8383,8385],{"id":8384},"unified-documentation",[245,8386,8387],{},"Unified Documentation",[238,8389,8390,8391,2493,8393,8396,8397,456],{},"In addition to this integration, we’ve unified the ",[245,8392,2492],{},[245,8394,8395],{},"Studio"," documentation and websites into a single comprehensive resource. Only the Studio platform (available once the user is logged-in) remains as a ",[318,8398,8400],{"href":1110,"rel":8399},[322],"standalone site",[238,8402,8403,8406,8407,2493,8410,8413,8414,2493,8416,8418],{},[245,8404,8405],{},"We can now take advantage of data structures and collections in Studio",". The Studio platform supports and adapts its behaviour to ",[245,8408,8409],{},"collections",[245,8411,8412],{},"user-defined schemas",". This enhancement will allow schema-generated forms for both ",[284,8415,62],{},[284,8417,66],{}," files as well as front-matter within Markdown files.",[1041,8420,8421],{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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);}",{"title":282,"searchDepth":423,"depth":423,"links":8423},[8424,8428,8432,8433,8434,8435,8436],{"id":7401,"depth":423,"text":7402,"children":8425},[8426,8427],{"id":7436,"depth":445,"text":7437},{"id":7466,"depth":445,"text":7467},{"id":7473,"depth":423,"text":7474,"children":8429},[8430,8431],{"id":7480,"depth":445,"text":7483},{"id":7494,"depth":445,"text":7497},{"id":7785,"depth":423,"text":7786},{"id":8056,"depth":423,"text":8057},{"id":8261,"depth":423,"text":8262},{"id":8268,"depth":423,"text":8269},{"id":8281,"depth":423,"text":8282,"children":8437},[8438,8439],{"id":8302,"depth":445,"text":4301},{"id":8384,"depth":445,"text":8387},"2025-01-16","Content version 3 is out - introducing SQL based storage, collections, preview API for a better Studio integration and tons of performance improvements. ",{"src":8443,"alt":8444},"/blog/nuxt-content-v3.png","Version 3 of Nuxt Content",{},"/blog/v3",{"title":8448,"description":8441},"Announcing Nuxt Content version 3","blog/v3","eAWpSIRiAO42szep5SKPpbjLil-ILermiuSQYlN5fvE",{"id":8452,"title":8453,"authors":8454,"body":8463,"categories":208,"category":8656,"date":8657,"description":8658,"draft":50,"extension":1065,"image":8659,"meta":8660,"navigation":212,"path":8661,"seo":8662,"stem":8663,"__hash__":8664},"posts/blog/visual-editor.md","Behind the scenes of Nuxt Studio's visual editor",[8455,8457],{"name":229,"avatar":8456,"to":232,"username":233},{"src":231},{"name":8458,"avatar":8459,"to":8461,"username":8462},"Ferdinand Coumau",{"src":8460},"https://avatars.githubusercontent.com/u/98885012?v=4","https://x.com/CoumauFerdinand","CoumauFerdinand",{"type":235,"value":8464,"toc":8644},[8465,8470,8473,8480,8483,8490,8493,8498,8504,8510,8513,8519,8525,8537,8543,8552,8555,8561,8567,8573,8576,8582,8595,8598,8601,8607,8610,8630,8636,8639,8642],[258,8466,8468],{"id":8467},"introduction",[245,8469,10],{},[238,8471,8472],{},"Nuxt Studio offers a versatile workspace for both developers and content writers, giving them the freedom to choose between two distinct editors for content creation and management: the Markdown editor and the Visual editor.",[238,8474,8475],{},[8476,8477],"img",{"alt":8478,"src":8479},"Select your favorit editor from the project settings","/blog/favorite-editor.webp",[238,8481,8482],{},"Each editor serves its own purpose—some users are used to Markdown edition, while others prefer a non-technical, visual approach.",[238,8484,8485,8486,8489],{},"At the end, ",[245,8487,8488],{},"Markdown syntax is the final output"," for both editors.",[238,8491,8492],{},"This article explains the technical processes behind the visual editor, exploring how it interprets Markdown, converts it back, and why this process might occasionally lead to changes from the original content.",[258,8494,8496],{"id":8495},"markdown-editor",[245,8497,1797],{},[238,8499,8500],{},[8476,8501],{"alt":8502,"src":8503},"Edit directly markdown on Nuxt Studio","/blog/markdown-editor.webp",[238,8505,8506,8507,8509],{},"The Markdown editor in Nuxt Studio provides full control over your content, allowing you to write directly in ",[318,8508,6604],{"href":59}," (an empowered Markdown syntax). This syntax enables integration of Vue components directly into your Markdown files, offering more flexibility to structure your pages.",[238,8511,8512],{},"When your file is saved with the Markdown editor, the content is stored exactly as you've written it, preserving all specific syntax and formatting. This editor is ideal for users comfortable with Markdown who want precise control over the layout and structure of their content.",[258,8514,8516],{"id":8515},"visual-editor",[245,8517,8518],{},"Visual Editor",[238,8520,8521],{},[8476,8522],{"alt":8523,"src":8524},"Edit your content with a visual editor on Nuxt Studio","/blog/visual-editor.webp",[238,8526,8527,8528,2493,8531,8536],{},"The Visual Editor is a sort of WYSIWYG (What You See Is What You Get) tool built on top of ",[318,8529,1201],{"href":1199,"rel":8530},[322],[318,8532,8535],{"href":8533,"rel":8534},"https://prosemirror.net/",[322],"ProseMirror",", designed to abstract away the complexities of Markdown syntax and offer a more intuitive, visual editing experience. This editor is particularly user-friendly for those who prefer not to deal with raw Markdown code.",[335,8538,8540],{"id":8539},"how-the-visual-editor-processes-files",[245,8541,8542],{},"How the visual editor processes files",[238,8544,8545,8546,8551],{},"When you open a Markdown file with the Visual Editor, Nuxt Studio first parses the original Markdown file. Using the ",[318,8547,8550],{"href":8548,"rel":8549},"https://github.com/nuxt-modules/mdc",[322],"MDC module",", it generates an Abstract Syntax Tree (AST). This AST is then converted into a TipTap-compatible format (TipTap AST), allowing the editor to accurately render the document visually.",[238,8553,8554],{},"Once the Visual Editor displays the content, users can make updates in a visually intuitive way. Behind the scenes, the editor continuously transforms the TipTap AST back into MDC AST then MDC syntax, ensuring that your content remains in Markdown format.",[335,8556,8558],{"id":8557},"why-changes-might-occur-in-the-original-markdown-file-without-user-modification",[245,8559,8560],{},"Why Changes might occur in the original markdown file without user modification",[238,8562,8563],{},[8476,8564],{"alt":8565,"src":8566},"Alert is displayed when automatic markdown parsing is detected","/blog/automatic-parsing-modal.webp",[1897,8568,8570],{"id":8569},"non-critical-changes",[245,8571,8572],{},"Non-Critical Changes",[238,8574,8575],{},"As the Visual Editor translates the visual formatting back into Markdown, it applies a parsing algorithm that applies predefined Markdown standards. In some cases, these standards may differ slightly from the original content. These changes are typically non-impactful and are only another working syntax of the Markdown, the rendered website should remain consistent with the original.",[1897,8577,8579],{"id":8578},"critical-changes",[245,8580,8581],{},"Critical Changes",[238,8583,8584,8585,8589,8590,8594],{},"Ideally, every feature in Markdown has a direct and accurate equivalent in the Visual Editor. We've built custom TipTap extensions to support custom MDC syntax such as ",[318,8586,8588],{"href":8587},"/docs/files/markdown#vue-components","Vue components"," edition or ",[318,8591,8593],{"href":8592},"/docs/files/markdown#front-matter","front-matter",". However, in rare cases, particularly with complex or unconventional Markdown elements, the Visual Editor may not fully support or correctly interpret these elements. When this happens, the editor might approximate, simplify, or even omit these elements during the parsing process.",[238,8596,8597],{},"Such discrepancies can result in data loss or regressions when converting back to Markdown. While these occurrences are rare, they can disrupt the intended display or functionality of your content.",[238,8599,8600],{},"Our primary objective is to prevent any loss of content and to maintain the integrity of your Markdown files. If you encounter any issues where the transition from visual to Markdown isn’t perfect, we encourage you to report them on our Discord server. Your feedback is invaluable in helping us refine and improve the Visual Editor, ensuring it meets the needs of all users.",[258,8602,8604],{"id":8603},"best-practices-to-minimize-unintended-changes",[245,8605,8606],{},"Best practices to minimize unintended changes",[238,8608,8609],{},"To avoid losing crucial formatting or content, consider the following best practices:",[675,8611,8612,8618,8624],{},[350,8613,8614,8617],{},[245,8615,8616],{},"Avoid using complex HTML structures",". As the MDC syntax allows you to integrate Vue components, It's more effective to create reusable components that can be easily inserted into the Markdown and edited within the editor, rather than relying on intricate HTML code.",[350,8619,8620,8623],{},[245,8621,8622],{},"Use one editor consistently."," Whenever possible, select the editor that best suits your needs and stick with it for the entire page.",[350,8625,8626,8629],{},[245,8627,8628],{},"Review changes after switching from an editor to the other."," After switching editors, always review the Markdown (on the review page) and check the preview to ensure no important elements have been altered.",[258,8631,8633],{"id":8632},"conclusion",[245,8634,8635],{},"Conclusion",[238,8637,8638],{},"Switching between the Markdown editor and the visual editor in Nuxt Studio offers flexibility, but it's important to be aware of the technical implications.",[238,8640,8641],{},"Understanding how the visual editor processes and converts Markdown can help ensure that what you craft in Markdown is accurately displayed in the visual editor, allowing non-technical users to easily edit everything without altering the original Markdown file.",[335,8643],{"id":282},{"title":282,"searchDepth":423,"depth":423,"links":8645},[8646,8647,8648,8652,8653],{"id":8467,"depth":423,"text":10},{"id":8495,"depth":423,"text":1797},{"id":8515,"depth":423,"text":8518,"children":8649},[8650,8651],{"id":8539,"depth":445,"text":8542},{"id":8557,"depth":445,"text":8560},{"id":8603,"depth":423,"text":8606},{"id":8632,"depth":423,"text":8635,"children":8654},[8655],{"id":282,"depth":445,"text":282},"studio","2024-09-04","Discover the inner workings of Nuxt Studio's visual editor and how it interprets the Markdown syntax and generate it back.",{"src":8524},{},"/blog/visual-editor",{"title":8453,"description":8658},"blog/visual-editor","ieSU3iaWPFGPKqufYut2nGbmAghIIuWKIYTgBvRRrcc",{"id":8666,"title":8667,"authors":8668,"body":8671,"categories":208,"category":8656,"date":8858,"description":8859,"draft":50,"extension":1065,"image":8860,"meta":8862,"navigation":212,"path":8863,"seo":8864,"stem":8865,"__hash__":8866},"posts/blog/studio-v2.md","Introducing Nuxt Studio v2",[8669],{"name":229,"avatar":8670,"to":232,"username":233},{"src":231},{"type":235,"value":8672,"toc":8849},[8673,8687,8690,8700,8706,8712,8719,8725,8731,8741,8748,8754,8761,8764,8770,8773,8777,8783,8786,8798,8804,8808,8817,8832,8836,8839,8844,8847],[1827,8674,8675,8676,2493,8680,8683,8684,456],{},"This article was published before the merge of the ",[318,8677,2492],{"href":8678,"rel":8679},"https://github.com/nuxt/content",[322],[318,8681,8395],{"href":8308,"rel":8682},[322]," modules on January 6, 2025. As a result, it may contain some inconsistencies. The Studio module is now deprecated and available as an opt-in feature of the Content module. Learn how to enable it in ",[318,8685,8686],{"href":6},"this guide",[238,8688,8689],{},"We are excited to announce the release of Nuxt Studio v2, a major update bringing a brand new interface designed specifically for our users, based on their feedback.",[1450,8691,8692,8693,8695,8696,8699],{},"Studio is optimized for ",[245,8694,8291],{}," project but the only real requirement is to have a ",[8697,8698,2443],"em",{}," folder with Markdown files. This simple setup is enough to start editing and publishing your files with the platform.",[258,8701,8703],{"id":8702},"a-more-intuitive-interface",[245,8704,8705],{},"A more intuitive interface",[238,8707,8708],{},[8476,8709],{"alt":8710,"src":8711},"Nuxt studio v2 interface","/blog/v2-interface.webp",[238,8713,8714,8715,8718],{},"The main improvement in Version 2 is a ",[245,8716,8717],{},"complete rework of the interface",". We have designed it to be more intuitive and user-friendly, especially for non-technical users. Our goal was to simplify the user experience, making it easier to create and set up projects with minimal hassle. The new interface is light, straightforward, and designed to streamline your workflow.",[258,8720,8722],{"id":8721},"google-authentication",[245,8723,8724],{},"Google authentication",[238,8726,8727],{},[8476,8728],{"alt":8729,"src":8730},"Google and GitHub authentication","/blog/google-github.webp",[238,8732,8733,8734,8736,8737,8740],{},"We now have two different authentication methods. You can either login with ",[245,8735,1512],{}," or with ",[245,8738,8739],{},"Google",". Both methods give you the same edition rights but since Studio is synchronized with GitHub, some features are specific to GitHub users, especially project creation.",[1827,8742,8743,8744,8747],{},"Since a Google user can not create a project, he has to ",[245,8745,8746],{},"join a team"," with existing projects to edit them.",[258,8749,8751],{"id":8750},"minimal-setup-to-edit-your-files",[245,8752,8753],{},"Minimal setup to edit your files",[238,8755,8756,8757,8760],{},"You can now edit your content ",[245,8758,8759],{},"without any setup",", just import your repository and this is it. You can navigate through your files and medias, edit your content and publish on GitHub.",[238,8762,8763],{},"Collaboration is available for teams.",[238,8765,8766],{},[8476,8767],{"alt":8768,"src":8769},"Notion-like editor with collaboration","/blog/collaborate.webp",[1827,8771,8772],{},"Medias in the editor are not displayed until you set up the live preview (see section below).",[258,8774,8776],{"id":8775},"simplified-setup-for-live-preview","Simplified setup for live preview",[238,8778,8779],{},[8476,8780],{"alt":8781,"src":8782},"preview enable between notion like editor and website","/blog/preview.webp",[238,8784,8785],{},"As the live preview feature requires a deployed URL, we made it as simple as possible to set it up.",[238,8787,8788,8789,8794,8795],{},"While GitHub pages deployment remains available and still does not require any configuration on your end, requirements have been simplified for self-hosted project as we removed the token verification. ",[318,8790,8793],{"href":8791,"rel":8792},"https://nuxt.studio/docs/get-started/setup#enable-the-live-preview",[322],"Enabling the Studio module"," is the ",[245,8796,8797],{},"only remaining requirement.",[1827,8799,8800,8801,8803],{"to":8308},"It's crucial to use the latest version of the ",[245,8802,8310],{}," to ensure compatibility and access to new features.",[258,8805,8807],{"id":8806},"new-documentation","New documentation",[238,8809,8810,8811,8816],{},"With a revamped platform comes a ",[318,8812,8815],{"href":8813,"rel":8814},"https://nuxt.studio/docs/get-started/introduction",[322],"new documentation",". Don't hesitate to check it out to learn everything about the new Studio.",[238,8818,8819,8820,8825,8826,8831],{},"Whether you are an ",[318,8821,8824],{"href":8822,"rel":8823},"https://nuxt.studio/docs/editors/introduction",[322],"editor"," or a ",[318,8827,8830],{"href":8828,"rel":8829},"https://nuxt.studio/docs/developers/introduction",[322],"developer"," you now have your dedicated section in the docs.",[258,8833,8835],{"id":8834},"a-new-direction-for-studio","A new direction for Studio",[238,8837,8838],{},"Most available CMS solutions have to choose between being very customizable for developers or highly user friendly for content editors, with Studio we want to do both.",[238,8840,8841,456],{},[245,8842,8843],{},"The developer provides the tools for the editors to focus on content, without requiring any technical knowledge",[1450,8845,8846],{},"Our Notion-like editor has a bright future ahead, and we want to develop it collaboratively with the community.",[258,8848],{"id":282},{"title":282,"searchDepth":423,"depth":423,"links":8850},[8851,8852,8853,8854,8855,8856,8857],{"id":8702,"depth":423,"text":8705},{"id":8721,"depth":423,"text":8724},{"id":8750,"depth":423,"text":8753},{"id":8775,"depth":423,"text":8776},{"id":8806,"depth":423,"text":8807},{"id":8834,"depth":423,"text":8835},{"id":282,"depth":423,"text":282},"2024-06-13","We are excited to announce the v2 release of Nuxt Studio, the new editing experience for your Nuxt Content website",{"src":8861},"/blog/nuxt-studio-v2.png",{},"/blog/studio-v2",{"title":8667,"description":8859},"blog/studio-v2","cQiOm5nhWgxyULIuQUoc-4_rO5SQooO1t4gXCwdeaUw",1774543455315]