[{"data":1,"prerenderedAt":2991},["ShallowReactive",2],{"navigation":3,"-docs-getting-started-migration-v4":899,"-docs-getting-started-migration-v4-description":2981},[4],{"title":5,"path":6,"stem":7,"children":8,"page":36},"Docs","/docs","docs",[9,157,777,798],{"title":10,"path":11,"stem":12,"children":13,"framework":16,"category":16,"description":16,"icon":30},"Get Started","/docs/getting-started","docs/1.getting-started/1.index",[14,19,37,47,53,76,140],{"title":15,"path":11,"stem":12,"framework":16,"category":16,"description":17,"icon":18},"Introduction",null,"Nuxt UI is a comprehensive UI library for Vue and Nuxt applications, offering a collection of fully styled and accessible components.","i-lucide-house",{"title":20,"framework":16,"category":16,"description":16,"shadow":21,"path":22,"stem":23,"children":24,"page":36},"Installation",true,"/docs/getting-started/installation","docs/1.getting-started/2.installation",[25,31],{"title":20,"path":26,"stem":27,"framework":28,"category":16,"description":29,"icon":30},"/docs/getting-started/installation/nuxt","docs/1.getting-started/2.installation/1.nuxt","nuxt","Learn how to install and configure Nuxt UI in your Nuxt application.","i-lucide-square-play",{"title":20,"path":32,"stem":33,"framework":34,"category":16,"description":35,"icon":30},"/docs/getting-started/installation/vue","docs/1.getting-started/2.installation/2.vue","vue","Learn how to install and configure Nuxt UI in your Vue application, compatible with both plain Vite and Inertia.",false,{"title":38,"framework":16,"category":16,"description":16,"icon":39,"shadow":21,"path":40,"stem":41,"children":42,"page":36},"Migration","i-lucide-arrow-right-left","/docs/getting-started/migration","docs/1.getting-started/3.migration",[43],{"title":38,"path":44,"stem":45,"framework":16,"category":16,"description":46,"icon":39},"/docs/getting-started/migration/v4","docs/1.getting-started/3.migration/1.v4","A comprehensive guide to migrate your application from Nuxt UI v3 to Nuxt UI v4.",{"title":48,"path":49,"stem":50,"framework":16,"category":16,"description":51,"icon":52},"Contribution","/docs/getting-started/contribution","docs/1.getting-started/4.contribution","A comprehensive guide on contributing to Nuxt UI, including project structure, development workflow, and best practices.","i-lucide-handshake",{"title":54,"path":55,"stem":56,"children":57,"page":36},"Theme","/docs/getting-started/theme","docs/1.getting-started/5.theme",[58,64,70],{"title":59,"path":60,"stem":61,"framework":16,"category":16,"description":62,"icon":63},"Design System","/docs/getting-started/theme/design-system","docs/1.getting-started/5.theme/1.design-system","Nuxt UI's design system uses Tailwind CSS for simple theming and easy customization.","i-lucide-palette",{"title":65,"path":66,"stem":67,"framework":16,"category":16,"description":68,"icon":69},"CSS Variables","/docs/getting-started/theme/css-variables","docs/1.getting-started/5.theme/2.css-variables","Nuxt UI uses CSS variables as design tokens for flexible, consistent theming with built-in light and dark mode support.","i-lucide-swatch-book",{"title":71,"path":72,"stem":73,"framework":16,"category":16,"description":74,"icon":75},"Components","/docs/getting-started/theme/components","docs/1.getting-started/5.theme/3.components","Learn how to customize Nuxt UI components with the Tailwind Variants API for advanced, flexible, and maintainable styling.","i-lucide-layout-grid",{"title":77,"framework":16,"category":16,"description":16,"path":78,"stem":79,"children":80,"page":36},"Integrations","/docs/getting-started/integrations","docs/1.getting-started/6.integrations",[81,95,101,115,129,135],{"title":82,"framework":16,"category":16,"description":16,"shadow":21,"path":83,"stem":84,"children":85,"page":36},"Icons","/docs/getting-started/integrations/icons","docs/1.getting-started/6.integrations/1.icons",[86,91],{"title":82,"path":87,"stem":88,"framework":28,"category":16,"description":89,"icon":90},"/docs/getting-started/integrations/icons/nuxt","docs/1.getting-started/6.integrations/1.icons/1.nuxt","Nuxt UI integrates with Nuxt Icon to access over 200,000+ icons from Iconify.","i-lucide-smile",{"title":82,"path":92,"stem":93,"framework":34,"category":16,"description":94,"icon":90},"/docs/getting-started/integrations/icons/vue","docs/1.getting-started/6.integrations/1.icons/2.vue","Nuxt UI integrates with Iconify to access over 200,000+ icons.",{"title":96,"path":97,"stem":98,"framework":28,"category":16,"description":99,"icon":100},"Fonts","/docs/getting-started/integrations/fonts","docs/1.getting-started/6.integrations/2.fonts","Nuxt UI integrates with Nuxt Fonts to provide plug-and-play font optimization.","i-lucide-a-large-small",{"title":102,"framework":16,"category":16,"description":16,"shadow":21,"path":103,"stem":104,"children":105,"page":36},"Color Mode","/docs/getting-started/integrations/color-mode","docs/1.getting-started/6.integrations/3.color-mode",[106,111],{"title":102,"path":107,"stem":108,"framework":28,"category":16,"description":109,"icon":110},"/docs/getting-started/integrations/color-mode/nuxt","docs/1.getting-started/6.integrations/3.color-mode/1.nuxt","Nuxt UI integrates with Nuxt Color Mode to allow for easy switching between light and dark themes.","i-lucide-sun-moon",{"title":102,"path":112,"stem":113,"framework":34,"category":16,"description":114,"icon":110},"/docs/getting-started/integrations/color-mode/vue","docs/1.getting-started/6.integrations/3.color-mode/2.vue","Nuxt UI integrates with VueUse to allow for easy switching between light and dark themes.",{"title":116,"framework":16,"category":16,"description":16,"shadow":21,"path":117,"stem":118,"children":119,"page":36},"I18n","/docs/getting-started/integrations/i18n","docs/1.getting-started/6.integrations/4.i18n",[120,126],{"title":121,"path":122,"stem":123,"framework":28,"category":16,"description":124,"icon":125},"Internationalization (i18n)","/docs/getting-started/integrations/i18n/nuxt","docs/1.getting-started/6.integrations/4.i18n/1.nuxt","Nuxt UI supports 50+ locales and multi-directional (LTR/RTL) internationalization.","i-lucide-languages",{"title":121,"path":127,"stem":128,"framework":34,"category":16,"description":124,"icon":125},"/docs/getting-started/integrations/i18n/vue","docs/1.getting-started/6.integrations/4.i18n/2.vue",{"title":130,"path":131,"stem":132,"framework":28,"category":16,"description":133,"icon":134},"Content","/docs/getting-started/integrations/content","docs/1.getting-started/6.integrations/5.content","Nuxt UI integrates with Nuxt Content to deliver beautiful typography and consistent component styling.","i-simple-icons-markdown",{"title":136,"path":137,"stem":138,"framework":34,"category":16,"description":139,"icon":134},"SSR","/docs/getting-started/integrations/ssr","docs/1.getting-started/6.integrations/6.ssr","Nuxt UI have first-party support for Vue.js SSR. This guide will help you have it fully enabled.",{"title":141,"framework":16,"category":16,"description":16,"path":142,"stem":143,"children":144,"page":36},"AI Tools","/docs/getting-started/ai","docs/1.getting-started/7.ai",[145,151],{"title":146,"path":147,"stem":148,"framework":16,"category":16,"description":149,"icon":150},"MCP Server","/docs/getting-started/ai/mcp","docs/1.getting-started/7.ai/1.mcp","Use Nuxt UI components in your AI assistants with Model Context Protocol support.","i-lucide-server",{"title":152,"path":153,"stem":154,"framework":16,"category":16,"description":155,"icon":156},"LLMs.txt","/docs/getting-started/ai/llms-txt","docs/1.getting-started/7.ai/2.llms-txt","How to get AI tools like Cursor, Windsurf, GitHub Copilot, ChatGPT, and Claude to understand Nuxt UI components, theming, and best practices.","i-lucide-bot",{"title":71,"framework":16,"category":16,"description":16,"icon":158,"path":159,"stem":160,"children":161,"page":36},"i-lucide-square-code","/docs/components","docs/2.components",[162,168,174,180,186,191,196,201,206,211,216,222,227,232,237,242,247,252,258,263,268,273,278,284,289,294,299,305,310,315,320,325,330,335,340,346,351,356,361,366,372,378,383,388,393,398,403,408,413,418,423,428,433,440,445,450,455,460,465,470,475,480,485,490,495,500,505,510,515,520,526,531,536,541,546,551,556,562,567,572,577,582,587,592,597,602,607,612,617,622,627,632,637,642,647,652,657,662,667,672,677,682,687,692,697,702,707,712,717,722,727,732,737,742,747,752,757,762,767,772],{"title":163,"path":164,"stem":165,"framework":16,"category":166,"description":167},"Accordion","/docs/components/accordion","docs/2.components/accordion","data","A stacked set of collapsible panels.",{"title":169,"path":170,"stem":171,"framework":16,"category":172,"description":173},"Alert","/docs/components/alert","docs/2.components/alert","element","A callout to draw user's attention.",{"title":175,"path":176,"stem":177,"framework":16,"category":178,"description":179},"App","/docs/components/app","docs/2.components/app","layout","Wraps your app to provide global configurations and more.",{"title":181,"path":182,"stem":183,"framework":16,"category":184,"description":185},"AuthForm","/docs/components/auth-form","docs/2.components/auth-form","page","A customizable Form to create login, register or password reset forms.",{"title":187,"path":188,"stem":189,"framework":16,"category":172,"description":190},"Avatar","/docs/components/avatar","docs/2.components/avatar","An img element with fallback and Nuxt Image support.",{"title":192,"path":193,"stem":194,"framework":16,"category":172,"description":195},"AvatarGroup","/docs/components/avatar-group","docs/2.components/avatar-group","Stack multiple avatars in a group.",{"title":197,"path":198,"stem":199,"framework":16,"category":172,"description":200},"Badge","/docs/components/badge","docs/2.components/badge","A short text to represent a status or a category.",{"title":202,"path":203,"stem":204,"framework":16,"category":172,"description":205},"Banner","/docs/components/banner","docs/2.components/banner","Display a banner at the top of your website to inform users about important information.",{"title":207,"path":208,"stem":209,"framework":16,"category":184,"description":210},"BlogPost","/docs/components/blog-post","docs/2.components/blog-post","A customizable article to display in a blog page.",{"title":212,"path":213,"stem":214,"framework":16,"category":184,"description":215},"BlogPosts","/docs/components/blog-posts","docs/2.components/blog-posts","Display a list of blog posts in a responsive grid layout.",{"title":217,"path":218,"stem":219,"framework":16,"category":220,"description":221},"Breadcrumb","/docs/components/breadcrumb","docs/2.components/breadcrumb","navigation","A hierarchy of links to navigate through a website.",{"title":223,"path":224,"stem":225,"framework":16,"category":172,"description":226},"Button","/docs/components/button","docs/2.components/button","A button element that can act as a link or trigger an action.",{"title":228,"path":229,"stem":230,"framework":16,"category":172,"description":231},"Calendar","/docs/components/calendar","docs/2.components/calendar","A calendar component for selecting single dates, multiple dates or date ranges.",{"title":233,"path":234,"stem":235,"framework":16,"category":172,"description":236},"Card","/docs/components/card","docs/2.components/card","Display content in a card with a header, body and footer.",{"title":238,"path":239,"stem":240,"framework":16,"category":166,"description":241},"Carousel","/docs/components/carousel","docs/2.components/carousel","A carousel with motion and swipe built using Embla.",{"title":243,"path":244,"stem":245,"framework":16,"category":184,"description":246},"ChangelogVersion","/docs/components/changelog-version","docs/2.components/changelog-version","A customizable article to display in a changelog.",{"title":248,"path":249,"stem":250,"framework":16,"category":184,"description":251},"ChangelogVersions","/docs/components/changelog-versions","docs/2.components/changelog-versions","Display a list of changelog versions in a timeline.",{"title":253,"path":254,"stem":255,"framework":16,"category":256,"description":257},"ChatMessage","/docs/components/chat-message","docs/2.components/chat-message","chat","Display a chat message with icon, avatar, and actions.",{"title":259,"path":260,"stem":261,"framework":16,"category":256,"description":262},"ChatMessages","/docs/components/chat-messages","docs/2.components/chat-messages","Display a list of chat messages, designed to work seamlessly with Vercel AI SDK.",{"title":264,"path":265,"stem":266,"framework":16,"category":256,"description":267},"ChatPalette","/docs/components/chat-palette","docs/2.components/chat-palette","A chat palette to create a chatbot interface inside an overlay.",{"title":269,"path":270,"stem":271,"framework":16,"category":256,"description":272},"ChatPrompt","/docs/components/chat-prompt","docs/2.components/chat-prompt","An enhanced Textarea for submitting prompts in AI chat interfaces.",{"title":274,"path":275,"stem":276,"framework":16,"category":256,"description":277},"ChatPromptSubmit","/docs/components/chat-prompt-submit","docs/2.components/chat-prompt-submit","A Button for submitting chat prompts with automatic status handling.",{"title":279,"path":280,"stem":281,"framework":16,"category":282,"description":283},"Checkbox","/docs/components/checkbox","docs/2.components/checkbox","form","An input element to toggle between checked and unchecked states.",{"title":285,"path":286,"stem":287,"framework":16,"category":282,"description":288},"CheckboxGroup","/docs/components/checkbox-group","docs/2.components/checkbox-group","A set of checklist buttons to select multiple option from a list.",{"title":290,"path":291,"stem":292,"framework":16,"category":172,"description":293},"Chip","/docs/components/chip","docs/2.components/chip","An indicator of a numeric value or a state.",{"title":295,"path":296,"stem":297,"framework":16,"category":172,"description":298},"Collapsible","/docs/components/collapsible","docs/2.components/collapsible","A collapsible element to toggle visibility of its content.",{"title":300,"path":301,"stem":302,"framework":16,"category":303,"description":304},"ColorModeAvatar","/docs/components/color-mode-avatar","docs/2.components/color-mode-avatar","color-mode","An Avatar with a different source for light and dark mode.",{"title":306,"path":307,"stem":308,"framework":16,"category":303,"description":309},"ColorModeButton","/docs/components/color-mode-button","docs/2.components/color-mode-button","A Button to switch between light and dark mode.",{"title":311,"path":312,"stem":313,"framework":16,"category":303,"description":314},"ColorModeImage","/docs/components/color-mode-image","docs/2.components/color-mode-image","An image element with a different source for light and dark mode.",{"title":316,"path":317,"stem":318,"framework":16,"category":303,"description":319},"ColorModeSelect","/docs/components/color-mode-select","docs/2.components/color-mode-select","A Select to switch between system, dark & light mode.",{"title":321,"path":322,"stem":323,"framework":16,"category":303,"description":324},"ColorModeSwitch","/docs/components/color-mode-switch","docs/2.components/color-mode-switch","A switch to toggle between light and dark mode.",{"title":326,"path":327,"stem":328,"framework":16,"category":282,"description":329},"ColorPicker","/docs/components/color-picker","docs/2.components/color-picker","A component to select a color.",{"title":331,"path":332,"stem":333,"framework":16,"category":220,"description":334},"CommandPalette","/docs/components/command-palette","docs/2.components/command-palette","A command palette with full-text search powered by Fuse.js for efficient fuzzy matching.",{"title":336,"path":337,"stem":338,"framework":16,"category":178,"description":339},"Container","/docs/components/container","docs/2.components/container","A container lets you center and constrain the width of your content.",{"title":341,"path":342,"stem":343,"framework":28,"category":344,"description":345},"ContentNavigation","/docs/components/content-navigation","docs/2.components/content-navigation","content","An accordion-style navigation component for organizing page links.",{"title":347,"path":348,"stem":349,"framework":28,"category":344,"description":350},"ContentSearch","/docs/components/content-search","docs/2.components/content-search","A ready to use CommandPalette to add to your documentation.",{"title":352,"path":353,"stem":354,"framework":28,"category":344,"description":355},"ContentSearchButton","/docs/components/content-search-button","docs/2.components/content-search-button","A pre-styled Button to open the ContentSearch modal.",{"title":357,"path":358,"stem":359,"framework":28,"category":344,"description":360},"ContentSurround","/docs/components/content-surround","docs/2.components/content-surround","A pair of prev and next links to navigate between pages.",{"title":362,"path":363,"stem":364,"framework":28,"category":344,"description":365},"ContentToc","/docs/components/content-toc","docs/2.components/content-toc","A sticky Table of Contents with automatic active anchor link highlighting.",{"title":367,"path":368,"stem":369,"framework":16,"category":370,"description":371},"ContextMenu","/docs/components/context-menu","docs/2.components/context-menu","overlay","A menu to display actions when right-clicking on an element.",{"title":373,"path":374,"stem":375,"framework":16,"category":376,"description":377},"DashboardGroup","/docs/components/dashboard-group","docs/2.components/dashboard-group","dashboard","A fixed layout component that provides context for dashboard components with sidebar state management and persistence.",{"title":379,"path":380,"stem":381,"framework":16,"category":376,"description":382},"DashboardNavbar","/docs/components/dashboard-navbar","docs/2.components/dashboard-navbar","A responsive navbar to display in a dashboard.",{"title":384,"path":385,"stem":386,"framework":16,"category":376,"description":387},"DashboardPanel","/docs/components/dashboard-panel","docs/2.components/dashboard-panel","A resizable panel to display in a dashboard.",{"title":389,"path":390,"stem":391,"framework":16,"category":376,"description":392},"DashboardResizeHandle","/docs/components/dashboard-resize-handle","docs/2.components/dashboard-resize-handle","A handle to resize a sidebar or panel.",{"title":394,"path":395,"stem":396,"framework":16,"category":376,"description":397},"DashboardSearch","/docs/components/dashboard-search","docs/2.components/dashboard-search","A ready to use CommandPalette to add to your dashboard.",{"title":399,"path":400,"stem":401,"framework":16,"category":376,"description":402},"DashboardSearchButton","/docs/components/dashboard-search-button","docs/2.components/dashboard-search-button","A pre-styled Button to open the DashboardSearch modal.",{"title":404,"path":405,"stem":406,"framework":16,"category":376,"description":407},"DashboardSidebar","/docs/components/dashboard-sidebar","docs/2.components/dashboard-sidebar","A resizable and collapsible sidebar to display in a dashboard.",{"title":409,"path":410,"stem":411,"framework":16,"category":376,"description":412},"DashboardSidebarCollapse","/docs/components/dashboard-sidebar-collapse","docs/2.components/dashboard-sidebar-collapse","A Button to collapse the sidebar on desktop.",{"title":414,"path":415,"stem":416,"framework":16,"category":376,"description":417},"DashboardSidebarToggle","/docs/components/dashboard-sidebar-toggle","docs/2.components/dashboard-sidebar-toggle","A Button to toggle the sidebar on mobile.",{"title":419,"path":420,"stem":421,"framework":16,"category":376,"description":422},"DashboardToolbar","/docs/components/dashboard-toolbar","docs/2.components/dashboard-toolbar","A toolbar to display under the navbar in a dashboard.",{"title":424,"path":425,"stem":426,"framework":16,"category":370,"description":427},"Drawer","/docs/components/drawer","docs/2.components/drawer","A drawer that smoothly slides in & out of the screen.",{"title":429,"path":430,"stem":431,"framework":16,"category":370,"description":432},"DropdownMenu","/docs/components/dropdown-menu","docs/2.components/dropdown-menu","A menu to display actions when clicking on an element.",{"title":434,"path":435,"stem":436,"framework":16,"category":437,"description":438,"badge":439},"Editor","/docs/components/editor","docs/2.components/editor","editor","A rich text editor component based on TipTap with support for markdown, HTML, and JSON content types.","Soon",{"title":441,"path":442,"stem":443,"framework":16,"category":437,"description":444,"badge":439},"EditorDragHandle","/docs/components/editor-drag-handle","docs/2.components/editor-drag-handle","A draggable handle for reordering and selecting blocks in the editor.",{"title":446,"path":447,"stem":448,"framework":16,"category":437,"description":449,"badge":439},"EditorEmojiMenu","/docs/components/editor-emoji-menu","docs/2.components/editor-emoji-menu","An emoji picker menu that displays emoji suggestions when typing the : character in the editor.",{"title":451,"path":452,"stem":453,"framework":16,"category":437,"description":454,"badge":439},"EditorMentionMenu","/docs/components/editor-mention-menu","docs/2.components/editor-mention-menu","A mention menu that displays user suggestions when typing the @ character in the editor.",{"title":456,"path":457,"stem":458,"framework":16,"category":437,"description":459,"badge":439},"EditorSuggestionMenu","/docs/components/editor-suggestion-menu","docs/2.components/editor-suggestion-menu","A command menu that displays formatting and action suggestions when typing the / character in the editor.",{"title":461,"path":462,"stem":463,"framework":16,"category":437,"description":464,"badge":439},"EditorToolbar","/docs/components/editor-toolbar","docs/2.components/editor-toolbar","A customizable toolbar for editor actions that can be displayed as fixed, bubble, or floating menu.",{"title":466,"path":467,"stem":468,"framework":16,"category":166,"description":469},"Empty","/docs/components/empty","docs/2.components/empty","A component to display an empty state.",{"title":471,"path":472,"stem":473,"framework":16,"category":178,"description":474},"Error","/docs/components/error","docs/2.components/error","A pre-built error component with NuxtError support.",{"title":476,"path":477,"stem":478,"framework":16,"category":172,"description":479},"FieldGroup","/docs/components/field-group","docs/2.components/field-group","Group multiple button-like elements together.",{"title":481,"path":482,"stem":483,"framework":16,"category":282,"description":484},"FileUpload","/docs/components/file-upload","docs/2.components/file-upload","An input element to upload files.",{"title":486,"path":487,"stem":488,"framework":16,"category":178,"description":489},"Footer","/docs/components/footer","docs/2.components/footer","A responsive footer component.",{"title":491,"path":492,"stem":493,"framework":16,"category":220,"description":494},"FooterColumns","/docs/components/footer-columns","docs/2.components/footer-columns","A list of links as columns to display in your Footer.",{"title":496,"path":497,"stem":498,"framework":16,"category":282,"description":499},"Form","/docs/components/form","docs/2.components/form","A form component with built-in validation and submission handling.",{"title":501,"path":502,"stem":503,"framework":16,"category":282,"description":504},"FormField","/docs/components/form-field","docs/2.components/form-field","A wrapper for form elements that provides validation and error handling.",{"title":506,"path":507,"stem":508,"framework":16,"category":178,"description":509},"Header","/docs/components/header","docs/2.components/header","A responsive header component.",{"title":511,"path":512,"stem":513,"framework":16,"category":172,"description":514},"Icon","/docs/components/icon","docs/2.components/icon","A component to display any icon from Iconify or another component.",{"title":516,"path":517,"stem":518,"framework":16,"category":282,"description":519},"Input","/docs/components/input","docs/2.components/input","An input element to enter text.",{"title":521,"path":522,"stem":523,"framework":16,"category":282,"description":524,"badge":525},"InputDate","/docs/components/input-date","docs/2.components/input-date","An input component for date selection.","New",{"title":527,"path":528,"stem":529,"framework":16,"category":282,"description":530},"InputMenu","/docs/components/input-menu","docs/2.components/input-menu","An autocomplete input with real-time suggestions.",{"title":532,"path":533,"stem":534,"framework":16,"category":282,"description":535},"InputNumber","/docs/components/input-number","docs/2.components/input-number","An input for numerical values with a customizable range.",{"title":537,"path":538,"stem":539,"framework":16,"category":282,"description":540},"InputTags","/docs/components/input-tags","docs/2.components/input-tags","An input element that displays interactive tags.",{"title":542,"path":543,"stem":544,"framework":16,"category":282,"description":545,"badge":525},"InputTime","/docs/components/input-time","docs/2.components/input-time","An input for selecting a time.",{"title":547,"path":548,"stem":549,"framework":16,"category":172,"description":550},"Kbd","/docs/components/kbd","docs/2.components/kbd","A kbd element to display a keyboard key.",{"title":552,"path":553,"stem":554,"framework":16,"category":220,"description":555},"Link","/docs/components/link","docs/2.components/link","A wrapper around \u003CNuxtLink> with extra props.",{"title":557,"path":558,"stem":559,"framework":16,"category":560,"description":561},"LocaleSelect","/docs/components/locale-select","docs/2.components/locale-select","i18n","A Select to switch between locales.",{"title":563,"path":564,"stem":565,"framework":16,"category":178,"description":566},"Main","/docs/components/main","docs/2.components/main","A main element that fills the available viewport height.",{"title":568,"path":569,"stem":570,"framework":16,"category":166,"description":571},"Marquee","/docs/components/marquee","docs/2.components/marquee","A component to create infinite scrolling content.",{"title":573,"path":574,"stem":575,"framework":16,"category":370,"description":576},"Modal","/docs/components/modal","docs/2.components/modal","A dialog window that can be used to display a message or request user input.",{"title":578,"path":579,"stem":580,"framework":16,"category":220,"description":581},"NavigationMenu","/docs/components/navigation-menu","docs/2.components/navigation-menu","A list of links that can be displayed horizontally or vertically.",{"title":583,"path":584,"stem":585,"framework":16,"category":184,"description":586},"Page","/docs/components/page","docs/2.components/page","A grid layout for your pages with left and right columns.",{"title":588,"path":589,"stem":590,"framework":16,"category":184,"description":591},"PageAnchors","/docs/components/page-anchors","docs/2.components/page-anchors","A list of anchors to be displayed in the page.",{"title":593,"path":594,"stem":595,"framework":16,"category":184,"description":596},"PageAside","/docs/components/page-aside","docs/2.components/page-aside","A sticky aside to display your page navigation.",{"title":598,"path":599,"stem":600,"framework":16,"category":184,"description":601},"PageBody","/docs/components/page-body","docs/2.components/page-body","The main content of your page.",{"title":603,"path":604,"stem":605,"framework":16,"category":184,"description":606},"PageCard","/docs/components/page-card","docs/2.components/page-card","A pre-styled card component that displays a title, description and optional link.",{"title":608,"path":609,"stem":610,"framework":16,"category":184,"description":611},"PageColumns","/docs/components/page-columns","docs/2.components/page-columns","A responsive multi-column layout system for organizing content side-by-side.",{"title":613,"path":614,"stem":615,"framework":16,"category":184,"description":616},"PageCTA","/docs/components/page-cta","docs/2.components/page-cta","A call to action section to display in your pages.",{"title":618,"path":619,"stem":620,"framework":16,"category":184,"description":621},"PageFeature","/docs/components/page-feature","docs/2.components/page-feature","A component to showcase key features of your application.",{"title":623,"path":624,"stem":625,"framework":16,"category":184,"description":626},"PageGrid","/docs/components/page-grid","docs/2.components/page-grid","A responsive grid system for displaying content in a flexible layout.",{"title":628,"path":629,"stem":630,"framework":16,"category":184,"description":631},"PageHeader","/docs/components/page-header","docs/2.components/page-header","A responsive header for your pages.",{"title":633,"path":634,"stem":635,"framework":16,"category":184,"description":636},"PageHero","/docs/components/page-hero","docs/2.components/page-hero","A responsive hero for your pages.",{"title":638,"path":639,"stem":640,"framework":16,"category":184,"description":641},"PageLinks","/docs/components/page-links","docs/2.components/page-links","A list of links to be displayed in the page.",{"title":643,"path":644,"stem":645,"framework":16,"category":184,"description":646},"PageList","/docs/components/page-list","docs/2.components/page-list","A vertical list layout for displaying content in a stacked format.",{"title":648,"path":649,"stem":650,"framework":16,"category":184,"description":651},"PageLogos","/docs/components/page-logos","docs/2.components/page-logos","A list of logos or images to display on your pages.",{"title":653,"path":654,"stem":655,"framework":16,"category":184,"description":656},"PageSection","/docs/components/page-section","docs/2.components/page-section","A responsive section for your pages.",{"title":658,"path":659,"stem":660,"framework":16,"category":220,"description":661},"Pagination","/docs/components/pagination","docs/2.components/pagination","A list of buttons or links to navigate through pages.",{"title":663,"path":664,"stem":665,"framework":16,"category":282,"description":666},"PinInput","/docs/components/pin-input","docs/2.components/pin-input","An input element to enter a pin.",{"title":668,"path":669,"stem":670,"framework":16,"category":370,"description":671},"Popover","/docs/components/popover","docs/2.components/popover","A non-modal dialog that floats around a trigger element.",{"title":673,"path":674,"stem":675,"framework":16,"category":184,"description":676},"PricingPlan","/docs/components/pricing-plan","docs/2.components/pricing-plan","A customizable pricing plan to display in a pricing page.",{"title":678,"path":679,"stem":680,"framework":16,"category":184,"description":681},"PricingPlans","/docs/components/pricing-plans","docs/2.components/pricing-plans","Display a list of pricing plans in a responsive grid layout.",{"title":683,"path":684,"stem":685,"framework":16,"category":184,"description":686},"PricingTable","/docs/components/pricing-table","docs/2.components/pricing-table","A responsive pricing table component that displays tiered pricing plans with feature comparisons.",{"title":688,"path":689,"stem":690,"framework":16,"category":172,"description":691},"Progress","/docs/components/progress","docs/2.components/progress","An indicator showing the progress of a task.",{"title":693,"path":694,"stem":695,"framework":16,"category":282,"description":696},"RadioGroup","/docs/components/radio-group","docs/2.components/radio-group","A set of radio buttons to select a single option from a list.",{"title":698,"path":699,"stem":700,"framework":16,"category":282,"description":701},"Select","/docs/components/select","docs/2.components/select","A select element to choose from a list of options.",{"title":703,"path":704,"stem":705,"framework":16,"category":282,"description":706},"SelectMenu","/docs/components/select-menu","docs/2.components/select-menu","An advanced searchable select element.",{"title":708,"path":709,"stem":710,"framework":16,"category":172,"description":711},"Separator","/docs/components/separator","docs/2.components/separator","Separates content horizontally or vertically.",{"title":713,"path":714,"stem":715,"framework":16,"category":172,"description":716},"Skeleton","/docs/components/skeleton","docs/2.components/skeleton","A placeholder to show while content is loading.",{"title":718,"path":719,"stem":720,"framework":16,"category":370,"description":721},"Slideover","/docs/components/slideover","docs/2.components/slideover","A dialog that slides in from any side of the screen.",{"title":723,"path":724,"stem":725,"framework":16,"category":282,"description":726},"Slider","/docs/components/slider","docs/2.components/slider","An input to select a numeric value within a range.",{"title":728,"path":729,"stem":730,"framework":16,"category":220,"description":731},"Stepper","/docs/components/stepper","docs/2.components/stepper","A set of steps that are used to indicate progress through a multi-step process.",{"title":733,"path":734,"stem":735,"framework":16,"category":282,"description":736},"Switch","/docs/components/switch","docs/2.components/switch","A control that toggles between two states.",{"title":738,"path":739,"stem":740,"framework":16,"category":166,"description":741},"Table","/docs/components/table","docs/2.components/table","A responsive table element to display data in rows and columns.",{"title":743,"path":744,"stem":745,"framework":16,"category":220,"description":746},"Tabs","/docs/components/tabs","docs/2.components/tabs","A set of tab panels that are displayed one at a time.",{"title":748,"path":749,"stem":750,"framework":16,"category":282,"description":751},"Textarea","/docs/components/textarea","docs/2.components/textarea","A textarea element to input multi-line text.",{"title":753,"path":754,"stem":755,"framework":16,"category":166,"description":756},"Timeline","/docs/components/timeline","docs/2.components/timeline","A component that displays a sequence of events with dates, titles, icons or avatars.",{"title":758,"path":759,"stem":760,"framework":16,"category":370,"description":761},"Toast","/docs/components/toast","docs/2.components/toast","A succinct message to provide information or feedback to the user.",{"title":763,"path":764,"stem":765,"framework":16,"category":370,"description":766},"Tooltip","/docs/components/tooltip","docs/2.components/tooltip","A popup that reveals information when hovering over an element.",{"title":768,"path":769,"stem":770,"framework":16,"category":166,"description":771},"Tree","/docs/components/tree","docs/2.components/tree","A tree view component to display and interact with hierarchical data structures.",{"title":773,"path":774,"stem":775,"framework":16,"category":166,"description":776},"User","/docs/components/user","docs/2.components/user","Display user information with name, description and avatar.",{"title":778,"framework":16,"category":16,"description":16,"icon":779,"path":780,"stem":781,"children":782,"page":36},"Composables","i-lucide-square-function","/docs/composables","docs/3.composables",[783,788,793],{"title":784,"path":785,"stem":786,"framework":16,"category":16,"description":787},"defineShortcuts","/docs/composables/define-shortcuts","docs/3.composables/define-shortcuts","A composable to define keyboard shortcuts in your app.",{"title":789,"path":790,"stem":791,"framework":16,"category":16,"description":792},"useOverlay","/docs/composables/use-overlay","docs/3.composables/use-overlay","A composable to programmatically control overlays.",{"title":794,"path":795,"stem":796,"framework":16,"category":16,"description":797},"useToast","/docs/composables/use-toast","docs/3.composables/use-toast","A composable to display toast notifications in your app.",{"title":799,"path":800,"stem":801,"children":802,"framework":28,"category":16,"description":16,"icon":898},"Typography","/docs/typography","docs/4.typography/1.index",[803,805,810,815,820,825,830,834,839,843,848,853,858,863,868,872,877,881,885,889,894],{"title":15,"path":800,"stem":801,"framework":28,"category":16,"description":804},"Beautiful typography components and utilities to style your content with Nuxt UI.",{"title":806,"path":807,"stem":808,"framework":28,"category":16,"description":809},"Headers and text","/docs/typography/headers-and-text","docs/4.typography/2.headers-and-text","Beautifully styled headings, paragraphs, text formatting, and links for optimal readability.",{"title":811,"path":812,"stem":813,"framework":28,"category":16,"description":814},"Lists and tables","/docs/typography/lists-and-tables","docs/4.typography/3.lists-and-tables","Organize information with styled lists and responsive tables for clear, consistent readability.",{"title":816,"path":817,"stem":818,"framework":28,"category":16,"description":819},"Images and embeds","/docs/typography/images-and-embeds","docs/4.typography/4.images-and-embeds","Responsive images, videos, and rich media embeds to enhance and illustrate your documentation.",{"title":821,"path":822,"stem":823,"framework":28,"category":16,"description":824},"Code","/docs/typography/code","docs/4.typography/5.code","Display inline code and syntax-highlighted code blocks with copy-to-clipboard support.",{"title":163,"path":826,"stem":827,"framework":28,"category":828,"description":829},"/docs/typography/accordion","docs/4.typography/accordion","components","Create expandable content sections for better information organization.",{"title":197,"path":831,"stem":832,"framework":28,"category":828,"description":833},"/docs/typography/badge","docs/4.typography/badge","Display version numbers, status labels, and tags within your content.",{"title":835,"path":836,"stem":837,"framework":28,"category":828,"description":838},"Callout","/docs/typography/callout","docs/4.typography/callout","Highlight important information with eye-catching colored boxes and icons.",{"title":233,"path":840,"stem":841,"framework":28,"category":828,"description":842},"/docs/typography/card","docs/4.typography/card","Create highlighted content blocks with optional links and navigation.",{"title":844,"path":845,"stem":846,"framework":28,"category":828,"description":847},"CardGroup","/docs/typography/card-group","docs/4.typography/card-group","Organize multiple cards in responsive grid layouts for better content presentation.",{"title":849,"path":850,"stem":851,"framework":28,"category":828,"description":852},"CodeCollapse","/docs/typography/code-collapse","docs/4.typography/code-collapse","Make long code blocks collapsible to save space and improve readability.",{"title":854,"path":855,"stem":856,"framework":28,"category":828,"description":857},"CodeGroup","/docs/typography/code-group","docs/4.typography/code-group","Group multiple code examples in tabbed interfaces for easy comparison.",{"title":859,"path":860,"stem":861,"framework":28,"category":828,"description":862},"CodePreview","/docs/typography/code-preview","docs/4.typography/code-preview","Display code examples with a preview and their source for clearer documentation.",{"title":864,"path":865,"stem":866,"framework":28,"category":828,"description":867},"CodeTree","/docs/typography/code-tree","docs/4.typography/code-tree","Visualize file and folder structures with syntax-highlighted code.",{"title":295,"path":869,"stem":870,"framework":28,"category":828,"description":871},"/docs/typography/collapsible","docs/4.typography/collapsible","Toggle content visibility with smooth expand and collapse animations.",{"title":873,"path":874,"stem":875,"framework":28,"category":828,"description":876},"Field","/docs/typography/field","docs/4.typography/field","Document API parameters, props, and configuration options clearly.",{"title":476,"path":878,"stem":879,"framework":28,"category":828,"description":880},"/docs/typography/field-group","docs/4.typography/field-group","Group related fields together for comprehensive API documentation.",{"title":511,"path":882,"stem":883,"framework":28,"category":828,"description":884},"/docs/typography/icon","docs/4.typography/icon","Display icons from popular icon libraries to enhance your content.",{"title":547,"path":886,"stem":887,"framework":28,"category":828,"description":888},"/docs/typography/kbd","docs/4.typography/kbd","Display keyboard shortcuts and key combinations with proper styling.",{"title":890,"path":891,"stem":892,"framework":28,"category":828,"description":893},"Steps","/docs/typography/steps","docs/4.typography/steps","Transform headings into numbered step-by-step guides and tutorials.",{"title":743,"path":895,"stem":896,"framework":28,"category":828,"description":897},"/docs/typography/tabs","docs/4.typography/tabs","Organize related content in interactive tabbed interfaces.","i-lucide-square-pilcrow",{"id":900,"title":901,"body":902,"category":16,"description":46,"extension":2972,"framework":16,"links":2973,"meta":2977,"navigation":2978,"path":44,"seo":2979,"stem":45,"__hash__":2980},"docs/docs/1.getting-started/3.migration/1.v4.md","Migration to v4",{"type":903,"value":904,"toc":2957},"minimark",[905,919,929,932,937,942,960,1068,1272,1574,1583,1681,1690,1709,1713,1718,1772,1776,1779,1783,1795,1848,1852,1861,1888,1892,1902,1953,1971,1975,1996,2022,2041,2060,2075,2079,2084,2123,2245,2249,2260,2273,2276,2313,2317,2331,2345,2398,2410,2528,2539,2631,2636,2697,2706,2931,2942,2953],[906,907,908,909,913,914,918],"p",{},"Nuxt UI v4 marks a major milestone: ",[910,911,912],"strong",{},"Nuxt UI and Nuxt UI Pro are now unified into a single, fully open-source and free library",". You now have access to 100+ production-ready components, all available in the ",[915,916,917],"code",{},"@nuxt/ui"," package.",[920,921,922],"note",{},[906,923,924,925,928],{},"Nuxt UI v4 requires ",[910,926,927],{},"Nuxt 4"," due to some dependencies. Make sure to upgrade to Nuxt 4 before migrating to Nuxt UI v4.",[906,930,931],{},"This guide provides step-by-step instructions to migrate your application from v3 to v4.",[933,934,936],"h2",{"id":935},"migrate-your-project","Migrate your project",[938,939,941],"h3",{"id":940},"from-nuxt-ui-pro","From Nuxt UI Pro",[943,944,945],"ol",{},[946,947,948,949,952,953,955,956,959],"li",{},"Replace ",[915,950,951],{},"@nuxt/ui-pro"," with ",[915,954,917],{}," in your ",[915,957,958],{},"package.json",":",[961,962,964,1000,1022,1046],"code-group",{"sync":963},"pm",[965,966,972],"pre",{"className":967,"code":968,"filename":969,"language":970,"meta":971,"style":971},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm remove @nuxt/ui-pro\npnpm add @nuxt/ui\n","pnpm","bash","",[915,973,974,989],{"__ignoreMap":971},[975,976,979,982,986],"span",{"class":977,"line":978},"line",1,[975,980,969],{"class":981},"sBMFI",[975,983,985],{"class":984},"sfazB"," remove",[975,987,988],{"class":984}," @nuxt/ui-pro\n",[975,990,992,994,997],{"class":977,"line":991},2,[975,993,969],{"class":981},[975,995,996],{"class":984}," add",[975,998,999],{"class":984}," @nuxt/ui\n",[965,1001,1004],{"className":967,"code":1002,"filename":1003,"language":970,"meta":971,"style":971},"yarn remove @nuxt/ui-pro\nyarn add @nuxt/ui\n","yarn",[915,1005,1006,1014],{"__ignoreMap":971},[975,1007,1008,1010,1012],{"class":977,"line":978},[975,1009,1003],{"class":981},[975,1011,985],{"class":984},[975,1013,988],{"class":984},[975,1015,1016,1018,1020],{"class":977,"line":991},[975,1017,1003],{"class":981},[975,1019,996],{"class":984},[975,1021,999],{"class":984},[965,1023,1026],{"className":967,"code":1024,"filename":1025,"language":970,"meta":971,"style":971},"npm uninstall @nuxt/ui-pro\nnpm install @nuxt/ui\n","npm",[915,1027,1028,1037],{"__ignoreMap":971},[975,1029,1030,1032,1035],{"class":977,"line":978},[975,1031,1025],{"class":981},[975,1033,1034],{"class":984}," uninstall",[975,1036,988],{"class":984},[975,1038,1039,1041,1044],{"class":977,"line":991},[975,1040,1025],{"class":981},[975,1042,1043],{"class":984}," install",[975,1045,999],{"class":984},[965,1047,1050],{"className":967,"code":1048,"filename":1049,"language":970,"meta":971,"style":971},"bun remove @nuxt/ui-pro\nbun add @nuxt/ui\n","bun",[915,1051,1052,1060],{"__ignoreMap":971},[975,1053,1054,1056,1058],{"class":977,"line":978},[975,1055,1049],{"class":981},[975,1057,985],{"class":984},[975,1059,988],{"class":984},[975,1061,1062,1064,1066],{"class":977,"line":991},[975,1063,1049],{"class":981},[975,1065,996],{"class":984},[975,1067,999],{"class":984},[1069,1070,1071,1138],"framework-only",{},[1072,1073,1074],"template",{"v-slot:nuxt":971},[1075,1076,1077,1088],"div",{},[943,1078,1079],{"start":991},[946,1080,948,1081,952,1083,955,1085,959],{},[915,1082,951],{},[915,1084,917],{},[915,1086,1087],{},"nuxt.config.ts",[965,1089,1093],{"className":1090,"code":1091,"filename":1087,"language":1092,"meta":971,"style":971},"language-diff shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  modules: [\n-   '@nuxt/ui-pro',\n+   '@nuxt/ui'\n  ]\n})\n","diff",[915,1094,1095,1101,1106,1117,1126,1132],{"__ignoreMap":971},[975,1096,1097],{"class":977,"line":978},[975,1098,1100],{"class":1099},"sTEyZ","export default defineNuxtConfig({\n",[975,1102,1103],{"class":977,"line":991},[975,1104,1105],{"class":1099},"  modules: [\n",[975,1107,1109,1113],{"class":977,"line":1108},3,[975,1110,1112],{"class":1111},"sMK4o","-",[975,1114,1116],{"class":1115},"swJcz","   '@nuxt/ui-pro',\n",[975,1118,1120,1123],{"class":977,"line":1119},4,[975,1121,1122],{"class":1111},"+",[975,1124,1125],{"class":984},"   '@nuxt/ui'\n",[975,1127,1129],{"class":977,"line":1128},5,[975,1130,1131],{"class":1099},"  ]\n",[975,1133,1135],{"class":977,"line":1134},6,[975,1136,1137],{"class":1099},"})\n",[1072,1139,1140],{"v-slot:vue":971},[1075,1141,1142,1153],{},[943,1143,1144],{"start":991},[946,1145,948,1146,952,1148,955,1150,959],{},[915,1147,951],{},[915,1149,917],{},[915,1151,1152],{},"vite.config.ts",[965,1154,1156],{"className":1090,"code":1155,"filename":1152,"language":1092,"meta":971,"style":971},"import { defineConfig } from 'vite'\nimport vue from '@vitejs/plugin-vue'\n- import uiPro from '@nuxt/ui-pro/vite'\n+ import ui from '@nuxt/ui/vite'\n\nexport default defineConfig({\n  plugins: [\n    vue(),\n-   uiPro({\n+   ui({\n      ui: {\n        colors: {\n          primary: 'green',\n          neutral: 'slate'\n        }\n      }\n    })\n  ]\n})\n",[915,1157,1158,1163,1168,1175,1182,1187,1192,1198,1204,1212,1220,1226,1232,1238,1244,1250,1256,1262,1267],{"__ignoreMap":971},[975,1159,1160],{"class":977,"line":978},[975,1161,1162],{"class":1099},"import { defineConfig } from 'vite'\n",[975,1164,1165],{"class":977,"line":991},[975,1166,1167],{"class":1099},"import vue from '@vitejs/plugin-vue'\n",[975,1169,1170,1172],{"class":977,"line":1108},[975,1171,1112],{"class":1111},[975,1173,1174],{"class":1115}," import uiPro from '@nuxt/ui-pro/vite'\n",[975,1176,1177,1179],{"class":977,"line":1119},[975,1178,1122],{"class":1111},[975,1180,1181],{"class":984}," import ui from '@nuxt/ui/vite'\n",[975,1183,1184],{"class":977,"line":1128},[975,1185,1186],{"emptyLinePlaceholder":21},"\n",[975,1188,1189],{"class":977,"line":1134},[975,1190,1191],{"class":1099},"export default defineConfig({\n",[975,1193,1195],{"class":977,"line":1194},7,[975,1196,1197],{"class":1099},"  plugins: [\n",[975,1199,1201],{"class":977,"line":1200},8,[975,1202,1203],{"class":1099},"    vue(),\n",[975,1205,1207,1209],{"class":977,"line":1206},9,[975,1208,1112],{"class":1111},[975,1210,1211],{"class":1115},"   uiPro({\n",[975,1213,1215,1217],{"class":977,"line":1214},10,[975,1216,1122],{"class":1111},[975,1218,1219],{"class":984},"   ui({\n",[975,1221,1223],{"class":977,"line":1222},11,[975,1224,1225],{"class":1099},"      ui: {\n",[975,1227,1229],{"class":977,"line":1228},12,[975,1230,1231],{"class":1099},"        colors: {\n",[975,1233,1235],{"class":977,"line":1234},13,[975,1236,1237],{"class":1099},"          primary: 'green',\n",[975,1239,1241],{"class":977,"line":1240},14,[975,1242,1243],{"class":1099},"          neutral: 'slate'\n",[975,1245,1247],{"class":977,"line":1246},15,[975,1248,1249],{"class":1099},"        }\n",[975,1251,1253],{"class":977,"line":1252},16,[975,1254,1255],{"class":1099},"      }\n",[975,1257,1259],{"class":977,"line":1258},17,[975,1260,1261],{"class":1099},"    })\n",[975,1263,1265],{"class":977,"line":1264},18,[975,1266,1131],{"class":1099},[975,1268,1270],{"class":977,"line":1269},19,[975,1271,1137],{"class":1099},[1069,1273,1274,1417],{},[1072,1275,1276],{"v-slot:nuxt":971},[1075,1277,1278,1293],{},[943,1279,1280],{"start":1108},[946,1281,1282,1283,1286,1287,955,1290,959],{},"Use the ",[915,1284,1285],{},"ui"," key instead of ",[915,1288,1289],{},"uiPro",[915,1291,1292],{},"app.config.ts",[965,1294,1296],{"className":1090,"code":1295,"filename":1292,"language":1092,"meta":971,"style":971},"export default defineAppConfig({\n  ui: {\n    colors: {\n      primary: 'green',\n      neutral: 'slate'\n    },\n+   pageCard: {\n+     slots: {\n+       root: 'rounded-xl',\n+     }\n+   }\n  },\n- uiPro: {\n-   pageCard: {\n-     slots: {\n-       root: 'rounded-xl',\n-     }\n-   }\n- }\n})\n",[915,1297,1298,1303,1308,1313,1318,1323,1328,1335,1342,1349,1356,1363,1368,1375,1381,1387,1393,1399,1405,1412],{"__ignoreMap":971},[975,1299,1300],{"class":977,"line":978},[975,1301,1302],{"class":1099},"export default defineAppConfig({\n",[975,1304,1305],{"class":977,"line":991},[975,1306,1307],{"class":1099},"  ui: {\n",[975,1309,1310],{"class":977,"line":1108},[975,1311,1312],{"class":1099},"    colors: {\n",[975,1314,1315],{"class":977,"line":1119},[975,1316,1317],{"class":1099},"      primary: 'green',\n",[975,1319,1320],{"class":977,"line":1128},[975,1321,1322],{"class":1099},"      neutral: 'slate'\n",[975,1324,1325],{"class":977,"line":1134},[975,1326,1327],{"class":1099},"    },\n",[975,1329,1330,1332],{"class":977,"line":1194},[975,1331,1122],{"class":1111},[975,1333,1334],{"class":984},"   pageCard: {\n",[975,1336,1337,1339],{"class":977,"line":1200},[975,1338,1122],{"class":1111},[975,1340,1341],{"class":984},"     slots: {\n",[975,1343,1344,1346],{"class":977,"line":1206},[975,1345,1122],{"class":1111},[975,1347,1348],{"class":984},"       root: 'rounded-xl',\n",[975,1350,1351,1353],{"class":977,"line":1214},[975,1352,1122],{"class":1111},[975,1354,1355],{"class":984},"     }\n",[975,1357,1358,1360],{"class":977,"line":1222},[975,1359,1122],{"class":1111},[975,1361,1362],{"class":984},"   }\n",[975,1364,1365],{"class":977,"line":1228},[975,1366,1367],{"class":1099},"  },\n",[975,1369,1370,1372],{"class":977,"line":1234},[975,1371,1112],{"class":1111},[975,1373,1374],{"class":1115}," uiPro: {\n",[975,1376,1377,1379],{"class":977,"line":1240},[975,1378,1112],{"class":1111},[975,1380,1334],{"class":1115},[975,1382,1383,1385],{"class":977,"line":1246},[975,1384,1112],{"class":1111},[975,1386,1341],{"class":1115},[975,1388,1389,1391],{"class":977,"line":1252},[975,1390,1112],{"class":1111},[975,1392,1348],{"class":1115},[975,1394,1395,1397],{"class":977,"line":1258},[975,1396,1112],{"class":1111},[975,1398,1355],{"class":1115},[975,1400,1401,1403],{"class":977,"line":1264},[975,1402,1112],{"class":1111},[975,1404,1362],{"class":1115},[975,1406,1407,1409],{"class":977,"line":1269},[975,1408,1112],{"class":1111},[975,1410,1411],{"class":1115}," }\n",[975,1413,1415],{"class":977,"line":1414},20,[975,1416,1137],{"class":1099},[1072,1418,1419],{"v-slot:vue":971},[1075,1420,1421,1431],{},[943,1422,1423],{"start":1108},[946,1424,1282,1425,1286,1427,955,1429,959],{},[915,1426,1285],{},[915,1428,1289],{},[915,1430,1152],{},[965,1432,1434],{"className":1090,"code":1433,"filename":1152,"language":1092,"meta":971,"style":971},"export default defineConfig({\n  plugins: [\n    vue(),\n    ui({\n      ui: {\n        colors: {\n          primary: 'green',\n          neutral: 'slate'\n        },\n+       pageCard: {\n+         slots: {\n+           root: 'rounded-xl',\n+         }\n+       }\n      },\n-     uiPro: {\n-       pageCard: {\n-         slots: {\n-           root: 'rounded-xl',\n-         }\n-       }\n-     }\n    })\n  ]\n})\n",[915,1435,1436,1440,1444,1448,1453,1457,1461,1465,1469,1474,1481,1488,1495,1502,1509,1514,1521,1527,1533,1539,1545,1552,1559,1564,1569],{"__ignoreMap":971},[975,1437,1438],{"class":977,"line":978},[975,1439,1191],{"class":1099},[975,1441,1442],{"class":977,"line":991},[975,1443,1197],{"class":1099},[975,1445,1446],{"class":977,"line":1108},[975,1447,1203],{"class":1099},[975,1449,1450],{"class":977,"line":1119},[975,1451,1452],{"class":1099},"    ui({\n",[975,1454,1455],{"class":977,"line":1128},[975,1456,1225],{"class":1099},[975,1458,1459],{"class":977,"line":1134},[975,1460,1231],{"class":1099},[975,1462,1463],{"class":977,"line":1194},[975,1464,1237],{"class":1099},[975,1466,1467],{"class":977,"line":1200},[975,1468,1243],{"class":1099},[975,1470,1471],{"class":977,"line":1206},[975,1472,1473],{"class":1099},"        },\n",[975,1475,1476,1478],{"class":977,"line":1214},[975,1477,1122],{"class":1111},[975,1479,1480],{"class":984},"       pageCard: {\n",[975,1482,1483,1485],{"class":977,"line":1222},[975,1484,1122],{"class":1111},[975,1486,1487],{"class":984},"         slots: {\n",[975,1489,1490,1492],{"class":977,"line":1228},[975,1491,1122],{"class":1111},[975,1493,1494],{"class":984},"           root: 'rounded-xl',\n",[975,1496,1497,1499],{"class":977,"line":1234},[975,1498,1122],{"class":1111},[975,1500,1501],{"class":984},"         }\n",[975,1503,1504,1506],{"class":977,"line":1240},[975,1505,1122],{"class":1111},[975,1507,1508],{"class":984},"       }\n",[975,1510,1511],{"class":977,"line":1246},[975,1512,1513],{"class":1099},"      },\n",[975,1515,1516,1518],{"class":977,"line":1252},[975,1517,1112],{"class":1111},[975,1519,1520],{"class":1115},"     uiPro: {\n",[975,1522,1523,1525],{"class":977,"line":1258},[975,1524,1112],{"class":1111},[975,1526,1480],{"class":1115},[975,1528,1529,1531],{"class":977,"line":1264},[975,1530,1112],{"class":1111},[975,1532,1487],{"class":1115},[975,1534,1535,1537],{"class":977,"line":1269},[975,1536,1112],{"class":1111},[975,1538,1494],{"class":1115},[975,1540,1541,1543],{"class":977,"line":1414},[975,1542,1112],{"class":1111},[975,1544,1501],{"class":1115},[975,1546,1548,1550],{"class":977,"line":1547},21,[975,1549,1112],{"class":1111},[975,1551,1508],{"class":1115},[975,1553,1555,1557],{"class":977,"line":1554},22,[975,1556,1112],{"class":1111},[975,1558,1355],{"class":1115},[975,1560,1562],{"class":977,"line":1561},23,[975,1563,1261],{"class":1099},[975,1565,1567],{"class":977,"line":1566},24,[975,1568,1131],{"class":1099},[975,1570,1572],{"class":977,"line":1571},25,[975,1573,1137],{"class":1099},[943,1575,1576],{"start":1119},[946,1577,948,1578,952,1580,1582],{},[915,1579,951],{},[915,1581,917],{}," in your CSS:",[1069,1584,1585,1656],{},[1072,1586,1587],{"v-slot:nuxt":971},[1075,1588,1589,1614],{},[965,1590,1593],{"className":1090,"code":1591,"filename":1592,"language":1092,"meta":971,"style":971},"@import \"tailwindcss\";\n- @import \"@nuxt/ui-pro\";\n+ @import \"@nuxt/ui\";\n","app/assets/css/main.css",[915,1594,1595,1600,1607],{"__ignoreMap":971},[975,1596,1597],{"class":977,"line":978},[975,1598,1599],{"class":1099},"@import \"tailwindcss\";\n",[975,1601,1602,1604],{"class":977,"line":991},[975,1603,1112],{"class":1111},[975,1605,1606],{"class":1115}," @import \"@nuxt/ui-pro\";\n",[975,1608,1609,1611],{"class":977,"line":1108},[975,1610,1122],{"class":1111},[975,1612,1613],{"class":984}," @import \"@nuxt/ui\";\n",[1615,1616,1617,1624],"warning",{},[906,1618,1619,1620,1623],{},"If you are upgrading to Nuxt 4 at the same time as Nuxt UI v4, make sure to update the ",[915,1621,1622],{},"@source"," directive to match the new directory structure.",[965,1625,1627],{"className":1090,"code":1626,"filename":1592,"language":1092,"meta":971,"style":971},"@import \"tailwindcss\";\n@import \"@nuxt/ui\";\n\n- @source \"../../content/**/*\";\n+ @source \"../../../content/**/*\";\n",[915,1628,1629,1633,1638,1642,1649],{"__ignoreMap":971},[975,1630,1631],{"class":977,"line":978},[975,1632,1599],{"class":1099},[975,1634,1635],{"class":977,"line":991},[975,1636,1637],{"class":1099},"@import \"@nuxt/ui\";\n",[975,1639,1640],{"class":977,"line":1108},[975,1641,1186],{"emptyLinePlaceholder":21},[975,1643,1644,1646],{"class":977,"line":1119},[975,1645,1112],{"class":1111},[975,1647,1648],{"class":1115}," @source \"../../content/**/*\";\n",[975,1650,1651,1653],{"class":977,"line":1128},[975,1652,1122],{"class":1111},[975,1654,1655],{"class":984}," @source \"../../../content/**/*\";\n",[1072,1657,1658],{"v-slot:vue":971},[1075,1659,1660],{},[965,1661,1663],{"className":1090,"code":1591,"filename":1662,"language":1092,"meta":971,"style":971},"src/assets/css/main.css",[915,1664,1665,1669,1675],{"__ignoreMap":971},[975,1666,1667],{"class":977,"line":978},[975,1668,1599],{"class":1099},[975,1670,1671,1673],{"class":977,"line":991},[975,1672,1112],{"class":1111},[975,1674,1606],{"class":1115},[975,1676,1677,1679],{"class":977,"line":1108},[975,1678,1122],{"class":1111},[975,1680,1613],{"class":984},[943,1682,1683],{"start":1128},[946,1684,948,1685,952,1687,1689],{},[915,1686,951],{},[915,1688,917],{}," in your imports:",[965,1691,1693],{"className":1090,"code":1692,"language":1092,"meta":971,"style":971},"- import type { BannerProps } from '@nuxt/ui-pro'\n+ import type { BannerProps } from '@nuxt/ui'\n",[915,1694,1695,1702],{"__ignoreMap":971},[975,1696,1697,1699],{"class":977,"line":978},[975,1698,1112],{"class":1111},[975,1700,1701],{"class":1115}," import type { BannerProps } from '@nuxt/ui-pro'\n",[975,1703,1704,1706],{"class":977,"line":991},[975,1705,1122],{"class":1111},[975,1707,1708],{"class":984}," import type { BannerProps } from '@nuxt/ui'\n",[938,1710,1712],{"id":1711},"from-nuxt-ui","From Nuxt UI",[943,1714,1715],{},[946,1716,1717],{},"When upgrading from Nuxt UI v3, you simply need to update to v4:",[961,1719,1720,1733,1746,1759],{"sync":963},[965,1721,1723],{"className":967,"code":1722,"filename":969,"language":970,"meta":971,"style":971},"pnpm add @nuxt/ui\n",[915,1724,1725],{"__ignoreMap":971},[975,1726,1727,1729,1731],{"class":977,"line":978},[975,1728,969],{"class":981},[975,1730,996],{"class":984},[975,1732,999],{"class":984},[965,1734,1736],{"className":967,"code":1735,"filename":1003,"language":970,"meta":971,"style":971},"yarn add @nuxt/ui\n",[915,1737,1738],{"__ignoreMap":971},[975,1739,1740,1742,1744],{"class":977,"line":978},[975,1741,1003],{"class":981},[975,1743,996],{"class":984},[975,1745,999],{"class":984},[965,1747,1749],{"className":967,"code":1748,"filename":1025,"language":970,"meta":971,"style":971},"npm install @nuxt/ui\n",[915,1750,1751],{"__ignoreMap":971},[975,1752,1753,1755,1757],{"class":977,"line":978},[975,1754,1025],{"class":981},[975,1756,1043],{"class":984},[975,1758,999],{"class":984},[965,1760,1762],{"className":967,"code":1761,"filename":1049,"language":970,"meta":971,"style":971},"bun add @nuxt/ui\n",[915,1763,1764],{"__ignoreMap":971},[975,1765,1766,1768,1770],{"class":977,"line":978},[975,1767,1049],{"class":981},[975,1769,996],{"class":984},[975,1771,999],{"class":984},[933,1773,1775],{"id":1774},"changes-from-v3","Changes from v3",[906,1777,1778],{},"After upgrading to Nuxt UI v4, please note the following important changes:",[938,1780,1782],{"id":1781},"renamed-buttongroup","Renamed ButtonGroup",[906,1784,1785,1786,1789,1790,959],{},"The ",[915,1787,1788],{},"ButtonGroup"," component has been renamed to ",[1791,1792,1793],"a",{"href":477},[915,1794,476],{},[965,1796,1798],{"className":1090,"code":1797,"language":1092,"meta":971,"style":971},"\u003Ctemplate>\n- \u003CUButtonGroup>\n+ \u003CUFieldGroup>\n    \u003CUButton label=\"Button\" />\n    \u003CUButton icon=\"i-lucide-chevron-down\" />\n+ \u003C/UFieldGroup>\n- \u003C/UButtonGroup>\n\u003C/template>\n",[915,1799,1800,1805,1812,1819,1824,1829,1836,1843],{"__ignoreMap":971},[975,1801,1802],{"class":977,"line":978},[975,1803,1804],{"class":1099},"\u003Ctemplate>\n",[975,1806,1807,1809],{"class":977,"line":991},[975,1808,1112],{"class":1111},[975,1810,1811],{"class":1115}," \u003CUButtonGroup>\n",[975,1813,1814,1816],{"class":977,"line":1108},[975,1815,1122],{"class":1111},[975,1817,1818],{"class":984}," \u003CUFieldGroup>\n",[975,1820,1821],{"class":977,"line":1119},[975,1822,1823],{"class":1099},"    \u003CUButton label=\"Button\" />\n",[975,1825,1826],{"class":977,"line":1128},[975,1827,1828],{"class":1099},"    \u003CUButton icon=\"i-lucide-chevron-down\" />\n",[975,1830,1831,1833],{"class":977,"line":1134},[975,1832,1122],{"class":1111},[975,1834,1835],{"class":984}," \u003C/UFieldGroup>\n",[975,1837,1838,1840],{"class":977,"line":1194},[975,1839,1112],{"class":1111},[975,1841,1842],{"class":1115}," \u003C/UButtonGroup>\n",[975,1844,1845],{"class":977,"line":1200},[975,1846,1847],{"class":1099},"\u003C/template>\n",[938,1849,1851],{"id":1850},"renamed-pagemarquee","Renamed PageMarquee",[906,1853,1785,1854,1789,1857,959],{},[915,1855,1856],{},"PageMarquee",[1791,1858,1859],{"href":569},[915,1860,568],{},[965,1862,1864],{"className":1090,"code":1863,"language":1092,"meta":971,"style":971},"\u003Ctemplate>\n- \u003CUPageMarquee :items=\"items\" />\n+ \u003CUMarquee :items=\"items\" />\n\u003C/template>\n",[915,1865,1866,1870,1877,1884],{"__ignoreMap":971},[975,1867,1868],{"class":977,"line":978},[975,1869,1804],{"class":1099},[975,1871,1872,1874],{"class":977,"line":991},[975,1873,1112],{"class":1111},[975,1875,1876],{"class":1115}," \u003CUPageMarquee :items=\"items\" />\n",[975,1878,1879,1881],{"class":977,"line":1108},[975,1880,1122],{"class":1111},[975,1882,1883],{"class":984}," \u003CUMarquee :items=\"items\" />\n",[975,1885,1886],{"class":977,"line":1119},[975,1887,1847],{"class":1099},[938,1889,1891],{"id":1890},"removed-pageaccordion","Removed PageAccordion",[906,1893,1785,1894,1897,1898,959],{},[915,1895,1896],{},"PageAccordion"," component has been removed in favor of ",[1791,1899,1900],{"href":164},[915,1901,163],{},[965,1903,1905],{"className":1090,"code":1904,"language":1092,"meta":971,"style":971},"\u003Ctemplate>\n- \u003CUPageAccordion\n+ \u003CUAccordion\n    :items=\"items\"\n+   :unmount-on-hide=\"false\"\n+   :ui=\"{ trigger: 'text-base', body: 'text-base text-muted' }\"\n  />\n\u003C/template>\n",[915,1906,1907,1911,1918,1925,1930,1937,1944,1949],{"__ignoreMap":971},[975,1908,1909],{"class":977,"line":978},[975,1910,1804],{"class":1099},[975,1912,1913,1915],{"class":977,"line":991},[975,1914,1112],{"class":1111},[975,1916,1917],{"class":1115}," \u003CUPageAccordion\n",[975,1919,1920,1922],{"class":977,"line":1108},[975,1921,1122],{"class":1111},[975,1923,1924],{"class":984}," \u003CUAccordion\n",[975,1926,1927],{"class":977,"line":1119},[975,1928,1929],{"class":1099},"    :items=\"items\"\n",[975,1931,1932,1934],{"class":977,"line":1128},[975,1933,1122],{"class":1111},[975,1935,1936],{"class":984},"   :unmount-on-hide=\"false\"\n",[975,1938,1939,1941],{"class":977,"line":1134},[975,1940,1122],{"class":1111},[975,1942,1943],{"class":984},"   :ui=\"{ trigger: 'text-base', body: 'text-base text-muted' }\"\n",[975,1945,1946],{"class":977,"line":1194},[975,1947,1948],{"class":1099},"  />\n",[975,1950,1951],{"class":977,"line":1200},[975,1952,1847],{"class":1099},[920,1954,1955],{},[906,1956,1785,1957,1959,1960,1963,1964,1967,1968,1970],{},[915,1958,1896],{}," component was a wrapper that set ",[915,1961,1962],{},"unmount-on-hide"," to ",[915,1965,1966],{},"false"," and customized the ",[915,1969,1285],{}," prop.",[938,1972,1974],{"id":1973},"renamed-model-modifiers","Renamed model modifiers",[906,1976,1785,1977,1980,1981,1985,1986,1990,1991,1995],{},[915,1978,1979],{},"modelModifiers"," shape used by ",[1791,1982,1983],{"href":517},[915,1984,516],{},", ",[1791,1987,1988],{"href":533},[915,1989,532],{}," and ",[1791,1992,1993],{"href":749},[915,1994,748],{}," has changed in v4:",[943,1997,1998,2012],{},[946,1999,1785,2000,2003,2004,2007,2008,2011],{},[915,2001,2002],{},"nullify"," modifier was renamed to ",[915,2005,2006],{},"nullable"," (it converts empty/blank values to ",[915,2009,2010],{},"null",").",[946,2013,2014,2015,2018,2019,2011],{},"A new ",[915,2016,2017],{},"optional"," modifier was added (it converts empty/blank values to ",[915,2020,2021],{},"undefined",[965,2023,2025],{"className":1090,"code":2024,"language":1092,"meta":971,"style":971},"- \u003CUInput v-model.nullify=\"value\" />\n+ \u003CUInput v-model.nullable=\"value\" />\n",[915,2026,2027,2034],{"__ignoreMap":971},[975,2028,2029,2031],{"class":977,"line":978},[975,2030,1112],{"class":1111},[975,2032,2033],{"class":1115}," \u003CUInput v-model.nullify=\"value\" />\n",[975,2035,2036,2038],{"class":977,"line":991},[975,2037,1122],{"class":1111},[975,2039,2040],{"class":984}," \u003CUInput v-model.nullable=\"value\" />\n",[965,2042,2044],{"className":1090,"code":2043,"language":1092,"meta":971,"style":971},"- \u003CUTextarea v-model=\"value\" :model-modifiers=\"{ nullify: true }\" />\n+ \u003CUTextarea v-model=\"value\" :model-modifiers=\"{ nullable: true }\" />\n",[915,2045,2046,2053],{"__ignoreMap":971},[975,2047,2048,2050],{"class":977,"line":978},[975,2049,1112],{"class":1111},[975,2051,2052],{"class":1115}," \u003CUTextarea v-model=\"value\" :model-modifiers=\"{ nullify: true }\" />\n",[975,2054,2055,2057],{"class":977,"line":991},[975,2056,1122],{"class":1111},[975,2058,2059],{"class":984}," \u003CUTextarea v-model=\"value\" :model-modifiers=\"{ nullable: true }\" />\n",[906,2061,2062,2063,2065,2066,2068,2069,2071,2072,2074],{},"Use ",[915,2064,2006],{}," when you want empty values as ",[915,2067,2010],{},", and ",[915,2070,2017],{}," when you prefer ",[915,2073,2021],{}," for absent values.",[938,2076,2078],{"id":2077},"changes-to-form-component","Changes to Form component",[906,2080,1785,2081,2083],{},[915,2082,496],{}," component has been improved in v4 with better state management and nested form handling. Here are the key changes you need to be aware of:",[943,2085,2086,2100,2110],{},[946,2087,2088,2089,2092,2093,2099],{},"Schema ",[910,2090,2091],{},"transformations will only"," be applied to the ",[910,2094,2095,2098],{},[915,2096,2097],{},"@submit"," data"," and will no longer mutate the form's state. This provides better predictability and prevents unexpected state mutations.",[946,2101,2102,2105,2106,2109],{},[910,2103,2104],{},"Nested forms must be enabled explicitly"," using the ",[915,2107,2108],{},"nested"," prop. This makes the component behavior more explicit and prevents accidental nested form creation.",[946,2111,2112,2118,2119,2122],{},[910,2113,2114,2115],{},"Nested forms should now provide a ",[915,2116,2117],{},"name"," prop (similar to ",[915,2120,2121],{},"UFormField",") and will automatically inherit their state from their parent form.",[965,2124,2126],{"className":1090,"code":2125,"language":1092,"meta":971,"style":971},"\u003Ctemplate>\n  \u003CUForm :state=\"state\" :schema=\"schema\" @submit=\"onSubmit\">\n    \u003CUFormField label=\"Customer\" name=\"customer\">\n      \u003CUInput v-model=\"state.customer\" placeholder=\"Wonka Industries\" />\n    \u003C/UFormField>\n\n    \u003Cdiv v-for=\"(item, index) in state.items\" :key=\"index\">\n      \u003CUForm\n-       :state=\"item\"\n+       :name=\"`items.${index}`\"\n        :schema=\"itemSchema\"\n+       nested\n      >\n        \u003CUFormField :label=\"!index ? 'Description' : undefined\" name=\"description\">\n          \u003CUInput v-model=\"item.description\" />\n        \u003C/UFormField>\n        \u003CUFormField :label=\"!index ? 'Price' : undefined\" name=\"price\">\n          \u003CUInput v-model=\"item.price\" type=\"number\" />\n        \u003C/UFormField>\n      \u003C/UForm>\n    \u003C/div>\n  \u003C/UForm>\n\u003C/template>\n",[915,2127,2128,2132,2137,2142,2147,2152,2156,2161,2166,2173,2180,2185,2192,2197,2202,2207,2212,2217,2222,2226,2231,2236,2241],{"__ignoreMap":971},[975,2129,2130],{"class":977,"line":978},[975,2131,1804],{"class":1099},[975,2133,2134],{"class":977,"line":991},[975,2135,2136],{"class":1099},"  \u003CUForm :state=\"state\" :schema=\"schema\" @submit=\"onSubmit\">\n",[975,2138,2139],{"class":977,"line":1108},[975,2140,2141],{"class":1099},"    \u003CUFormField label=\"Customer\" name=\"customer\">\n",[975,2143,2144],{"class":977,"line":1119},[975,2145,2146],{"class":1099},"      \u003CUInput v-model=\"state.customer\" placeholder=\"Wonka Industries\" />\n",[975,2148,2149],{"class":977,"line":1128},[975,2150,2151],{"class":1099},"    \u003C/UFormField>\n",[975,2153,2154],{"class":977,"line":1134},[975,2155,1186],{"emptyLinePlaceholder":21},[975,2157,2158],{"class":977,"line":1194},[975,2159,2160],{"class":1099},"    \u003Cdiv v-for=\"(item, index) in state.items\" :key=\"index\">\n",[975,2162,2163],{"class":977,"line":1200},[975,2164,2165],{"class":1099},"      \u003CUForm\n",[975,2167,2168,2170],{"class":977,"line":1206},[975,2169,1112],{"class":1111},[975,2171,2172],{"class":1115},"       :state=\"item\"\n",[975,2174,2175,2177],{"class":977,"line":1214},[975,2176,1122],{"class":1111},[975,2178,2179],{"class":984},"       :name=\"`items.${index}`\"\n",[975,2181,2182],{"class":977,"line":1222},[975,2183,2184],{"class":1099},"        :schema=\"itemSchema\"\n",[975,2186,2187,2189],{"class":977,"line":1228},[975,2188,1122],{"class":1111},[975,2190,2191],{"class":984},"       nested\n",[975,2193,2194],{"class":977,"line":1234},[975,2195,2196],{"class":1099},"      >\n",[975,2198,2199],{"class":977,"line":1240},[975,2200,2201],{"class":1099},"        \u003CUFormField :label=\"!index ? 'Description' : undefined\" name=\"description\">\n",[975,2203,2204],{"class":977,"line":1246},[975,2205,2206],{"class":1099},"          \u003CUInput v-model=\"item.description\" />\n",[975,2208,2209],{"class":977,"line":1252},[975,2210,2211],{"class":1099},"        \u003C/UFormField>\n",[975,2213,2214],{"class":977,"line":1258},[975,2215,2216],{"class":1099},"        \u003CUFormField :label=\"!index ? 'Price' : undefined\" name=\"price\">\n",[975,2218,2219],{"class":977,"line":1264},[975,2220,2221],{"class":1099},"          \u003CUInput v-model=\"item.price\" type=\"number\" />\n",[975,2223,2224],{"class":977,"line":1269},[975,2225,2211],{"class":1099},[975,2227,2228],{"class":977,"line":1414},[975,2229,2230],{"class":1099},"      \u003C/UForm>\n",[975,2232,2233],{"class":977,"line":1547},[975,2234,2235],{"class":1099},"    \u003C/div>\n",[975,2237,2238],{"class":977,"line":1554},[975,2239,2240],{"class":1099},"  \u003C/UForm>\n",[975,2242,2243],{"class":977,"line":1561},[975,2244,1847],{"class":1099},[938,2246,2248],{"id":2247},"removed-deprecated-utilities","Removed deprecated utilities",[906,2250,2251,2252,2255,2256,2259],{},"Some ",[910,2253,2254],{},"Nuxt Content utilities"," that were previously available in Nuxt UI Pro have been ",[910,2257,2258],{},"removed"," in v4:",[2261,2262,2263,2268],"ul",{},[946,2264,2265],{},[915,2266,2267],{},"findPageBreadcrumb",[946,2269,2270],{},[915,2271,2272],{},"findPageHeadline",[906,2274,2275],{},"These are now fully provided by Nuxt Content. Make sure to update your imports and usage accordingly.",[965,2277,2279],{"className":1090,"code":2278,"language":1092,"meta":971,"style":971},"- import { findPageHeadline } from '@nuxt/ui-pro/utils/content'\n+ import { findPageHeadline } from '@nuxt/content/utils'\n\n- import { findPageBreadcrumb } from '@nuxt/ui-pro/utils/content'\n+ import { findPageBreadcrumb } from '@nuxt/content/utils'\n",[915,2280,2281,2288,2295,2299,2306],{"__ignoreMap":971},[975,2282,2283,2285],{"class":977,"line":978},[975,2284,1112],{"class":1111},[975,2286,2287],{"class":1115}," import { findPageHeadline } from '@nuxt/ui-pro/utils/content'\n",[975,2289,2290,2292],{"class":977,"line":991},[975,2291,1122],{"class":1111},[975,2293,2294],{"class":984}," import { findPageHeadline } from '@nuxt/content/utils'\n",[975,2296,2297],{"class":977,"line":1108},[975,2298,1186],{"emptyLinePlaceholder":21},[975,2300,2301,2303],{"class":977,"line":1119},[975,2302,1112],{"class":1111},[975,2304,2305],{"class":1115}," import { findPageBreadcrumb } from '@nuxt/ui-pro/utils/content'\n",[975,2307,2308,2310],{"class":977,"line":1128},[975,2309,1122],{"class":1111},[975,2311,2312],{"class":984}," import { findPageBreadcrumb } from '@nuxt/content/utils'\n",[938,2314,2316],{"id":2315},"ai-sdk-v5-migration-optional","AI SDK v5 migration (optional)",[906,2318,2319,2320,1985,2322,1985,2324,1985,2326,1985,2328,2330],{},"This section only applies if you're using the AI SDK and chat components (",[915,2321,253],{},[915,2323,259],{},[915,2325,269],{},[915,2327,274],{},[915,2329,264],{},"). If you're not using AI features, you can skip this section.",[943,2332,2333],{},[946,2334,2335,2336,1990,2339,2342,2343,959],{},"Update ",[915,2337,2338],{},"@ai-sdk/vue",[915,2340,2341],{},"ai"," dependencies in your ",[915,2344,958],{},[965,2346,2348],{"className":1090,"code":2347,"language":1092,"meta":971,"style":971},"{\n  \"dependencies\": {\n-   \"@ai-sdk/vue\": \"^1.2.x\",\n+   \"@ai-sdk/vue\": \"^2.0.x\",\n-   \"ai\": \"^4.3.x\"\n+   \"ai\": \"^5.0.x\"\n  }\n}\n",[915,2349,2350,2355,2360,2367,2374,2381,2388,2393],{"__ignoreMap":971},[975,2351,2352],{"class":977,"line":978},[975,2353,2354],{"class":1099},"{\n",[975,2356,2357],{"class":977,"line":991},[975,2358,2359],{"class":1099},"  \"dependencies\": {\n",[975,2361,2362,2364],{"class":977,"line":1108},[975,2363,1112],{"class":1111},[975,2365,2366],{"class":1115},"   \"@ai-sdk/vue\": \"^1.2.x\",\n",[975,2368,2369,2371],{"class":977,"line":1119},[975,2370,1122],{"class":1111},[975,2372,2373],{"class":984},"   \"@ai-sdk/vue\": \"^2.0.x\",\n",[975,2375,2376,2378],{"class":977,"line":1128},[975,2377,1112],{"class":1111},[975,2379,2380],{"class":1115},"   \"ai\": \"^4.3.x\"\n",[975,2382,2383,2385],{"class":977,"line":1134},[975,2384,1122],{"class":1111},[975,2386,2387],{"class":984},"   \"ai\": \"^5.0.x\"\n",[975,2389,2390],{"class":977,"line":1194},[975,2391,2392],{"class":1099},"  }\n",[975,2394,2395],{"class":977,"line":1200},[975,2396,2397],{"class":1099},"}\n",[943,2399,2400],{"start":991},[946,2401,2402,2405,2406,2409],{},[915,2403,2404],{},"useChat"," composable has been replaced with the new ",[915,2407,2408],{},"Chat"," class:",[965,2411,2413],{"className":1090,"code":2412,"language":1092,"meta":971,"style":971},"\u003Cscript setup lang=\"ts\">\n- import { useChat } from '@ai-sdk/vue'\n+ import { Chat } from '@ai-sdk/vue'\n+ import type { UIMessage } from 'ai'\n\n- const { messages, input, handleSubmit, status, error, reload, setMessages } = useChat()\n+ const messages: UIMessage[] = []\n+ const input = ref('')\n+\n+ const chat = new Chat({\n+   messages\n+ })\n+\n+ function handleSubmit() {\n+   chat.sendMessage({ text: input.value })\n+   input.value = ''\n+ }\n\u003C/script>\n",[915,2414,2415,2420,2427,2434,2441,2445,2452,2459,2466,2471,2478,2485,2492,2496,2503,2510,2517,2523],{"__ignoreMap":971},[975,2416,2417],{"class":977,"line":978},[975,2418,2419],{"class":1099},"\u003Cscript setup lang=\"ts\">\n",[975,2421,2422,2424],{"class":977,"line":991},[975,2423,1112],{"class":1111},[975,2425,2426],{"class":1115}," import { useChat } from '@ai-sdk/vue'\n",[975,2428,2429,2431],{"class":977,"line":1108},[975,2430,1122],{"class":1111},[975,2432,2433],{"class":984}," import { Chat } from '@ai-sdk/vue'\n",[975,2435,2436,2438],{"class":977,"line":1119},[975,2437,1122],{"class":1111},[975,2439,2440],{"class":984}," import type { UIMessage } from 'ai'\n",[975,2442,2443],{"class":977,"line":1128},[975,2444,1186],{"emptyLinePlaceholder":21},[975,2446,2447,2449],{"class":977,"line":1134},[975,2448,1112],{"class":1111},[975,2450,2451],{"class":1115}," const { messages, input, handleSubmit, status, error, reload, setMessages } = useChat()\n",[975,2453,2454,2456],{"class":977,"line":1194},[975,2455,1122],{"class":1111},[975,2457,2458],{"class":984}," const messages: UIMessage[] = []\n",[975,2460,2461,2463],{"class":977,"line":1200},[975,2462,1122],{"class":1111},[975,2464,2465],{"class":984}," const input = ref('')\n",[975,2467,2468],{"class":977,"line":1206},[975,2469,2470],{"class":1111},"+\n",[975,2472,2473,2475],{"class":977,"line":1214},[975,2474,1122],{"class":1111},[975,2476,2477],{"class":984}," const chat = new Chat({\n",[975,2479,2480,2482],{"class":977,"line":1222},[975,2481,1122],{"class":1111},[975,2483,2484],{"class":984},"   messages\n",[975,2486,2487,2489],{"class":977,"line":1228},[975,2488,1122],{"class":1111},[975,2490,2491],{"class":984}," })\n",[975,2493,2494],{"class":977,"line":1234},[975,2495,2470],{"class":1111},[975,2497,2498,2500],{"class":977,"line":1240},[975,2499,1122],{"class":1111},[975,2501,2502],{"class":984}," function handleSubmit() {\n",[975,2504,2505,2507],{"class":977,"line":1246},[975,2506,1122],{"class":1111},[975,2508,2509],{"class":984},"   chat.sendMessage({ text: input.value })\n",[975,2511,2512,2514],{"class":977,"line":1252},[975,2513,1122],{"class":1111},[975,2515,2516],{"class":984},"   input.value = ''\n",[975,2518,2519,2521],{"class":977,"line":1258},[975,2520,1122],{"class":1111},[975,2522,1411],{"class":984},[975,2524,2525],{"class":977,"line":1264},[975,2526,2527],{"class":1099},"\u003C/script>\n",[943,2529,2530],{"start":1108},[946,2531,2532,2533,2536,2537,959],{},"Messages now use ",[915,2534,2535],{},"parts"," instead of ",[915,2538,344],{},[965,2540,2542],{"className":1090,"code":2541,"language":1092,"meta":971,"style":971},"// When manually creating messages\n- setMessages([{\n+ messages.push({\n  id: '1',\n  role: 'user',\n- content: 'Hello world'\n+ parts: [{ type: 'text', text: 'Hello world' }]\n- }])\n+ })\n\n// In templates\n\u003Ctemplate>\n- \u003CUChatMessage :content=\"message.content\" />\n+ \u003CUChatMessage :parts=\"message.parts\" />\n\u003C/template>\n",[915,2543,2544,2549,2556,2563,2568,2573,2580,2587,2594,2600,2604,2609,2613,2620,2627],{"__ignoreMap":971},[975,2545,2546],{"class":977,"line":978},[975,2547,2548],{"class":1099},"// When manually creating messages\n",[975,2550,2551,2553],{"class":977,"line":991},[975,2552,1112],{"class":1111},[975,2554,2555],{"class":1115}," setMessages([{\n",[975,2557,2558,2560],{"class":977,"line":1108},[975,2559,1122],{"class":1111},[975,2561,2562],{"class":984}," messages.push({\n",[975,2564,2565],{"class":977,"line":1119},[975,2566,2567],{"class":1099},"  id: '1',\n",[975,2569,2570],{"class":977,"line":1128},[975,2571,2572],{"class":1099},"  role: 'user',\n",[975,2574,2575,2577],{"class":977,"line":1134},[975,2576,1112],{"class":1111},[975,2578,2579],{"class":1115}," content: 'Hello world'\n",[975,2581,2582,2584],{"class":977,"line":1194},[975,2583,1122],{"class":1111},[975,2585,2586],{"class":984}," parts: [{ type: 'text', text: 'Hello world' }]\n",[975,2588,2589,2591],{"class":977,"line":1200},[975,2590,1112],{"class":1111},[975,2592,2593],{"class":1115}," }])\n",[975,2595,2596,2598],{"class":977,"line":1206},[975,2597,1122],{"class":1111},[975,2599,2491],{"class":984},[975,2601,2602],{"class":977,"line":1214},[975,2603,1186],{"emptyLinePlaceholder":21},[975,2605,2606],{"class":977,"line":1222},[975,2607,2608],{"class":1099},"// In templates\n",[975,2610,2611],{"class":977,"line":1228},[975,2612,1804],{"class":1099},[975,2614,2615,2617],{"class":977,"line":1234},[975,2616,1112],{"class":1111},[975,2618,2619],{"class":1115}," \u003CUChatMessage :content=\"message.content\" />\n",[975,2621,2622,2624],{"class":977,"line":1240},[975,2623,1122],{"class":1111},[975,2625,2626],{"class":984}," \u003CUChatMessage :parts=\"message.parts\" />\n",[975,2628,2629],{"class":977,"line":1246},[975,2630,1847],{"class":1099},[943,2632,2633],{"start":1119},[946,2634,2635],{},"Some methods have been renamed:",[965,2637,2639],{"className":1090,"code":2638,"language":1092,"meta":971,"style":971},"// Regenerate the last message\n- reload()\n+ chat.regenerate()\n\n// Access chat state\n- :messages=\"messages\"\n- :status=\"status\"\n+ :messages=\"chat.messages\"\n+ :status=\"chat.status\"\n",[915,2640,2641,2646,2653,2660,2664,2669,2676,2683,2690],{"__ignoreMap":971},[975,2642,2643],{"class":977,"line":978},[975,2644,2645],{"class":1099},"// Regenerate the last message\n",[975,2647,2648,2650],{"class":977,"line":991},[975,2649,1112],{"class":1111},[975,2651,2652],{"class":1115}," reload()\n",[975,2654,2655,2657],{"class":977,"line":1108},[975,2656,1122],{"class":1111},[975,2658,2659],{"class":984}," chat.regenerate()\n",[975,2661,2662],{"class":977,"line":1119},[975,2663,1186],{"emptyLinePlaceholder":21},[975,2665,2666],{"class":977,"line":1128},[975,2667,2668],{"class":1099},"// Access chat state\n",[975,2670,2671,2673],{"class":977,"line":1134},[975,2672,1112],{"class":1111},[975,2674,2675],{"class":1115}," :messages=\"messages\"\n",[975,2677,2678,2680],{"class":977,"line":1194},[975,2679,1112],{"class":1111},[975,2681,2682],{"class":1115}," :status=\"status\"\n",[975,2684,2685,2687],{"class":977,"line":1200},[975,2686,1122],{"class":1111},[975,2688,2689],{"class":984}," :messages=\"chat.messages\"\n",[975,2691,2692,2694],{"class":977,"line":1206},[975,2693,1122],{"class":1111},[975,2695,2696],{"class":984}," :status=\"chat.status\"\n",[943,2698,2699],{"start":1128},[946,2700,2701,2702,2705],{},"New ",[915,2703,2704],{},"getTextFromMessage"," utility to extract text from AI SDK v5 message parts:",[965,2707,2710],{"className":2708,"code":2709,"language":34,"meta":971,"style":971},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup lang=\"ts\">\nimport { getTextFromMessage } from '@nuxt/ui/utils/ai'\n\u003C/script>\n\n\u003Ctemplate>\n  \u003CUChatMessages :messages=\"chat.messages\" :status=\"chat.status\">\n    \u003Ctemplate #content=\"{ message }\">\n      \u003C!-- Extract text from message parts and render with MDC -->\n      \u003CMDC :value=\"getTextFromMessage(message)\" :cache-key=\"message.id\" class=\"*:first:mt-0 *:last:mb-0\" />\n    \u003C/template>\n  \u003C/UChatMessages>\n\u003C/template>\n",[915,2711,2712,2741,2768,2777,2781,2789,2823,2852,2858,2905,2914,2923],{"__ignoreMap":971},[975,2713,2714,2717,2720,2724,2727,2730,2733,2736,2738],{"class":977,"line":978},[975,2715,2716],{"class":1111},"\u003C",[975,2718,2719],{"class":1115},"script",[975,2721,2723],{"class":2722},"spNyl"," setup",[975,2725,2726],{"class":2722}," lang",[975,2728,2729],{"class":1111},"=",[975,2731,2732],{"class":1111},"\"",[975,2734,2735],{"class":984},"ts",[975,2737,2732],{"class":1111},[975,2739,2740],{"class":1111},">\n",[975,2742,2743,2747,2750,2753,2756,2759,2762,2765],{"class":977,"line":991},[975,2744,2746],{"class":2745},"s7zQu","import",[975,2748,2749],{"class":1111}," {",[975,2751,2752],{"class":1099}," getTextFromMessage",[975,2754,2755],{"class":1111}," }",[975,2757,2758],{"class":2745}," from",[975,2760,2761],{"class":1111}," '",[975,2763,2764],{"class":984},"@nuxt/ui/utils/ai",[975,2766,2767],{"class":1111},"'\n",[975,2769,2770,2773,2775],{"class":977,"line":1108},[975,2771,2772],{"class":1111},"\u003C/",[975,2774,2719],{"class":1115},[975,2776,2740],{"class":1111},[975,2778,2779],{"class":977,"line":1119},[975,2780,1186],{"emptyLinePlaceholder":21},[975,2782,2783,2785,2787],{"class":977,"line":1128},[975,2784,2716],{"class":1111},[975,2786,1072],{"class":1115},[975,2788,2740],{"class":1111},[975,2790,2791,2794,2797,2800,2802,2804,2807,2809,2812,2814,2816,2819,2821],{"class":977,"line":1134},[975,2792,2793],{"class":1111},"  \u003C",[975,2795,2796],{"class":1115},"UChatMessages",[975,2798,2799],{"class":2722}," :messages",[975,2801,2729],{"class":1111},[975,2803,2732],{"class":1111},[975,2805,2806],{"class":984},"chat.messages",[975,2808,2732],{"class":1111},[975,2810,2811],{"class":2722}," :status",[975,2813,2729],{"class":1111},[975,2815,2732],{"class":1111},[975,2817,2818],{"class":984},"chat.status",[975,2820,2732],{"class":1111},[975,2822,2740],{"class":1111},[975,2824,2825,2828,2830,2833,2835,2837,2839,2842,2845,2848,2850],{"class":977,"line":1194},[975,2826,2827],{"class":1111},"    \u003C",[975,2829,1072],{"class":1115},[975,2831,2832],{"class":1111}," #",[975,2834,344],{"class":2722},[975,2836,2729],{"class":1111},[975,2838,2732],{"class":1111},[975,2840,2841],{"class":1111},"{",[975,2843,2844],{"class":1099}," message ",[975,2846,2847],{"class":1111},"}",[975,2849,2732],{"class":1111},[975,2851,2740],{"class":1111},[975,2853,2854],{"class":977,"line":1200},[975,2855,2857],{"class":2856},"sHwdD","      \u003C!-- Extract text from message parts and render with MDC -->\n",[975,2859,2860,2863,2866,2869,2871,2873,2876,2878,2881,2883,2885,2888,2890,2893,2895,2897,2900,2902],{"class":977,"line":1206},[975,2861,2862],{"class":1111},"      \u003C",[975,2864,2865],{"class":1115},"MDC",[975,2867,2868],{"class":2722}," :value",[975,2870,2729],{"class":1111},[975,2872,2732],{"class":1111},[975,2874,2875],{"class":984},"getTextFromMessage(message)",[975,2877,2732],{"class":1111},[975,2879,2880],{"class":2722}," :cache-key",[975,2882,2729],{"class":1111},[975,2884,2732],{"class":1111},[975,2886,2887],{"class":984},"message.id",[975,2889,2732],{"class":1111},[975,2891,2892],{"class":2722}," class",[975,2894,2729],{"class":1111},[975,2896,2732],{"class":1111},[975,2898,2899],{"class":984},"*:first:mt-0 *:last:mb-0",[975,2901,2732],{"class":1111},[975,2903,2904],{"class":1111}," />\n",[975,2906,2907,2910,2912],{"class":977,"line":1214},[975,2908,2909],{"class":1111},"    \u003C/",[975,2911,1072],{"class":1115},[975,2913,2740],{"class":1111},[975,2915,2916,2919,2921],{"class":977,"line":1222},[975,2917,2918],{"class":1111},"  \u003C/",[975,2920,2796],{"class":1115},[975,2922,2740],{"class":1111},[975,2924,2925,2927,2929],{"class":977,"line":1228},[975,2926,2772],{"class":1111},[975,2928,1072],{"class":1115},[975,2930,2740],{"class":1111},[920,2932,2935],{"target":2933,"to":2934},"_blank","https://ai-sdk.dev/docs/migration-guides/migration-guide-5-0",[906,2936,2937,2938,2941],{},"For more details on AI SDK v5 changes, review the ",[910,2939,2940],{},"official AI SDK v5 migration guide",".",[2943,2944,2946],"tip",{"target":2933,"to":2945},"https://github.com/nuxt/ui/pull/4698",[906,2947,2948,2949,2952],{},"View all changes from AI SDK v4 to v5 ",[910,2950,2951],{},"in the upgrade PR"," for a detailed migration reference.",[2954,2955,2956],"style",{},"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 .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}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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 .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":971,"searchDepth":991,"depth":991,"links":2958},[2959,2963],{"id":935,"depth":991,"text":936,"children":2960},[2961,2962],{"id":940,"depth":1108,"text":941},{"id":1711,"depth":1108,"text":1712},{"id":1774,"depth":991,"text":1775,"children":2964},[2965,2966,2967,2968,2969,2970,2971],{"id":1781,"depth":1108,"text":1782},{"id":1850,"depth":1108,"text":1851},{"id":1890,"depth":1108,"text":1891},{"id":1973,"depth":1108,"text":1974},{"id":2077,"depth":1108,"text":2078},{"id":2247,"depth":1108,"text":2248},{"id":2315,"depth":1108,"text":2316},"md",[2974],{"label":2975,"to":2976,"icon":39},"Migration to v3","/docs/getting-started/migration/v3",{},{"title":38,"icon":39},{"title":901,"description":46},"c7XKdLlDjZyfScnSbRFUeDn0pwq6q3NizL_de06elQQ",{"data":2982,"body":2983},{},{"type":2984,"children":2985},"root",[2986],{"type":172,"tag":906,"props":2987,"children":2988},{},[2989],{"type":2990,"value":46},"text",1765201485280]