[{"data":1,"prerenderedAt":12348},["ShallowReactive",2],{"navigation":3,"blog":958,"blog-posts":970,"blog-hero-title":12321,"blog-hero-description":12340},[4],{"title":5,"path":6,"stem":7,"children":8,"page":36},"Docs","\u002Fdocs","docs",[9,163,816,857],{"title":10,"path":11,"stem":12,"children":13,"framework":16,"category":16,"description":16,"icon":30},"Get Started","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started\u002F1.index",[14,19,37,47,53,76,141],{"title":15,"path":11,"stem":12,"framework":16,"category":16,"description":17,"icon":18},"Introduction",null,"Nuxt UI is a comprehensive Vue UI component library (Nuxt optional), offering 125+ accessible, Tailwind CSS components for building modern web applications.","i-lucide-house",{"title":20,"framework":16,"category":16,"description":16,"shadow":21,"path":22,"stem":23,"children":24,"page":36},"Installation",true,"\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F1.getting-started\u002F2.installation",[25,31],{"title":20,"path":26,"stem":27,"framework":28,"category":16,"description":29,"icon":30},"\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fnuxt","docs\u002F1.getting-started\u002F2.installation\u002F1.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},"\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fvue","docs\u002F1.getting-started\u002F2.installation\u002F2.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","\u002Fdocs\u002Fgetting-started\u002Fmigration","docs\u002F1.getting-started\u002F3.migration",[43],{"title":38,"path":44,"stem":45,"framework":16,"category":16,"description":46,"icon":39},"\u002Fdocs\u002Fgetting-started\u002Fmigration\u002Fv4","docs\u002F1.getting-started\u002F3.migration\u002F1.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","\u002Fdocs\u002Fgetting-started\u002Fcontribution","docs\u002F1.getting-started\u002F4.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","\u002Fdocs\u002Fgetting-started\u002Ftheme","docs\u002F1.getting-started\u002F5.theme",[58,64,70],{"title":59,"path":60,"stem":61,"framework":16,"category":16,"description":62,"icon":63},"Design System","\u002Fdocs\u002Fgetting-started\u002Ftheme\u002Fdesign-system","docs\u002F1.getting-started\u002F5.theme\u002F1.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","\u002Fdocs\u002Fgetting-started\u002Ftheme\u002Fcss-variables","docs\u002F1.getting-started\u002F5.theme\u002F2.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","\u002Fdocs\u002Fgetting-started\u002Ftheme\u002Fcomponents","docs\u002F1.getting-started\u002F5.theme\u002F3.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","\u002Fdocs\u002Fgetting-started\u002Fintegrations","docs\u002F1.getting-started\u002F6.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","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ficons","docs\u002F1.getting-started\u002F6.integrations\u002F1.icons",[86,91],{"title":82,"path":87,"stem":88,"framework":28,"category":16,"description":89,"icon":90},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ficons\u002Fnuxt","docs\u002F1.getting-started\u002F6.integrations\u002F1.icons\u002F1.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},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ficons\u002Fvue","docs\u002F1.getting-started\u002F6.integrations\u002F1.icons\u002F2.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","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ffonts","docs\u002F1.getting-started\u002F6.integrations\u002F2.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","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcolor-mode","docs\u002F1.getting-started\u002F6.integrations\u002F3.color-mode",[106,111],{"title":102,"path":107,"stem":108,"framework":28,"category":16,"description":109,"icon":110},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcolor-mode\u002Fnuxt","docs\u002F1.getting-started\u002F6.integrations\u002F3.color-mode\u002F1.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},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcolor-mode\u002Fvue","docs\u002F1.getting-started\u002F6.integrations\u002F3.color-mode\u002F2.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","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fi18n","docs\u002F1.getting-started\u002F6.integrations\u002F4.i18n",[120,126],{"title":121,"path":122,"stem":123,"framework":28,"category":16,"description":124,"icon":125},"Internationalization (i18n)","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fi18n\u002Fnuxt","docs\u002F1.getting-started\u002F6.integrations\u002F4.i18n\u002F1.nuxt","Nuxt UI supports 50+ locales and multi-directional (LTR\u002FRTL) internationalization.","i-lucide-languages",{"title":121,"path":127,"stem":128,"framework":34,"category":16,"description":124,"icon":125},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fi18n\u002Fvue","docs\u002F1.getting-started\u002F6.integrations\u002F4.i18n\u002F2.vue",{"title":130,"path":131,"stem":132,"framework":28,"category":16,"description":133,"icon":134},"Content","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcontent","docs\u002F1.getting-started\u002F6.integrations\u002F5.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":140},"SSR","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fssr","docs\u002F1.getting-started\u002F6.integrations\u002F6.ssr","Nuxt UI has first-party support for Vue SSR. This guide will help you have it fully enabled.","i-lucide-server",{"title":142,"framework":16,"category":16,"description":16,"path":143,"stem":144,"children":145,"page":36},"Agents","\u002Fdocs\u002Fgetting-started\u002Fai","docs\u002F1.getting-started\u002F7.ai",[146,151,157],{"title":147,"path":148,"stem":149,"framework":16,"category":16,"description":150,"icon":140},"MCP Server","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fmcp","docs\u002F1.getting-started\u002F7.ai\u002F1.mcp","Use Nuxt UI components in your AI assistants with Model Context Protocol support.",{"title":152,"path":153,"stem":154,"framework":16,"category":16,"description":155,"icon":156},"LLMs.txt","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fllms-txt","docs\u002F1.getting-started\u002F7.ai\u002F2.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":158,"path":159,"stem":160,"framework":16,"category":16,"description":161,"icon":162},"Skills","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fskills","docs\u002F1.getting-started\u002F7.ai\u002F3.skills","Install Nuxt UI skills to give AI coding agents deep knowledge of components, theming, and best practices.","i-lucide-sparkles",{"title":71,"framework":16,"category":16,"description":16,"icon":164,"path":165,"stem":166,"children":167,"page":36},"i-lucide-square-code","\u002Fdocs\u002Fcomponents","docs\u002F2.components",[168,174,180,186,192,197,202,207,212,217,222,228,233,238,243,248,253,258,264,269,274,279,284,289,295,300,305,311,316,321,326,332,337,342,347,352,357,362,367,373,378,383,388,393,399,405,410,415,420,425,430,435,440,445,450,455,460,466,471,476,481,486,491,496,501,506,511,516,521,526,531,536,541,546,551,556,561,566,571,576,581,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,777,782,787,791,796,801,806,811],{"title":169,"path":170,"stem":171,"framework":16,"category":172,"description":173},"Accordion","\u002Fdocs\u002Fcomponents\u002Faccordion","docs\u002F2.components\u002Faccordion","data","A stacked set of collapsible panels.",{"title":175,"path":176,"stem":177,"framework":16,"category":178,"description":179},"Alert","\u002Fdocs\u002Fcomponents\u002Falert","docs\u002F2.components\u002Falert","element","A callout to draw user's attention.",{"title":181,"path":182,"stem":183,"framework":16,"category":184,"description":185},"App","\u002Fdocs\u002Fcomponents\u002Fapp","docs\u002F2.components\u002Fapp","layout","Wraps your app to provide global configurations and more.",{"title":187,"path":188,"stem":189,"framework":16,"category":190,"description":191},"AuthForm","\u002Fdocs\u002Fcomponents\u002Fauth-form","docs\u002F2.components\u002Fauth-form","page","A customizable Form to create login, register or password reset forms.",{"title":193,"path":194,"stem":195,"framework":16,"category":178,"description":196},"Avatar","\u002Fdocs\u002Fcomponents\u002Favatar","docs\u002F2.components\u002Favatar","An img element with fallback and Nuxt Image support.",{"title":198,"path":199,"stem":200,"framework":16,"category":178,"description":201},"AvatarGroup","\u002Fdocs\u002Fcomponents\u002Favatar-group","docs\u002F2.components\u002Favatar-group","Stack multiple avatars in a group.",{"title":203,"path":204,"stem":205,"framework":16,"category":178,"description":206},"Badge","\u002Fdocs\u002Fcomponents\u002Fbadge","docs\u002F2.components\u002Fbadge","A short text to represent a status or a category.",{"title":208,"path":209,"stem":210,"framework":16,"category":178,"description":211},"Banner","\u002Fdocs\u002Fcomponents\u002Fbanner","docs\u002F2.components\u002Fbanner","Display a banner at the top of your website to inform users about important information.",{"title":213,"path":214,"stem":215,"framework":16,"category":190,"description":216},"BlogPost","\u002Fdocs\u002Fcomponents\u002Fblog-post","docs\u002F2.components\u002Fblog-post","A customizable article to display in a blog page.",{"title":218,"path":219,"stem":220,"framework":16,"category":190,"description":221},"BlogPosts","\u002Fdocs\u002Fcomponents\u002Fblog-posts","docs\u002F2.components\u002Fblog-posts","Display a list of blog posts in a responsive grid layout.",{"title":223,"path":224,"stem":225,"framework":16,"category":226,"description":227},"Breadcrumb","\u002Fdocs\u002Fcomponents\u002Fbreadcrumb","docs\u002F2.components\u002Fbreadcrumb","navigation","A hierarchy of links to navigate through a website.",{"title":229,"path":230,"stem":231,"framework":16,"category":178,"description":232},"Button","\u002Fdocs\u002Fcomponents\u002Fbutton","docs\u002F2.components\u002Fbutton","A button element that can act as a link or trigger an action.",{"title":234,"path":235,"stem":236,"framework":16,"category":178,"description":237},"Calendar","\u002Fdocs\u002Fcomponents\u002Fcalendar","docs\u002F2.components\u002Fcalendar","A calendar component for selecting single dates, multiple dates or date ranges.",{"title":239,"path":240,"stem":241,"framework":16,"category":178,"description":242},"Card","\u002Fdocs\u002Fcomponents\u002Fcard","docs\u002F2.components\u002Fcard","Display content in a card with a header, body and footer.",{"title":244,"path":245,"stem":246,"framework":16,"category":172,"description":247},"Carousel","\u002Fdocs\u002Fcomponents\u002Fcarousel","docs\u002F2.components\u002Fcarousel","A carousel with motion and swipe built using Embla.",{"title":249,"path":250,"stem":251,"framework":16,"category":190,"description":252},"ChangelogVersion","\u002Fdocs\u002Fcomponents\u002Fchangelog-version","docs\u002F2.components\u002Fchangelog-version","A customizable article to display in a changelog.",{"title":254,"path":255,"stem":256,"framework":16,"category":190,"description":257},"ChangelogVersions","\u002Fdocs\u002Fcomponents\u002Fchangelog-versions","docs\u002F2.components\u002Fchangelog-versions","Display a list of changelog versions in a timeline.",{"title":259,"path":260,"stem":261,"framework":16,"category":262,"description":263},"Chat","\u002Fdocs\u002Fcomponents\u002Fchat","docs\u002F2.components\u002Fchat","chat","Build AI chat interfaces with streaming, reasoning, and tool calling.",{"title":265,"path":266,"stem":267,"framework":16,"category":262,"description":268},"ChatMessage","\u002Fdocs\u002Fcomponents\u002Fchat-message","docs\u002F2.components\u002Fchat-message","Display a chat message with icon, avatar, and actions.",{"title":270,"path":271,"stem":272,"framework":16,"category":262,"description":273},"ChatMessages","\u002Fdocs\u002Fcomponents\u002Fchat-messages","docs\u002F2.components\u002Fchat-messages","Display a list of chat messages, designed to work seamlessly with Vercel AI SDK.",{"title":275,"path":276,"stem":277,"framework":16,"category":262,"description":278},"ChatPalette","\u002Fdocs\u002Fcomponents\u002Fchat-palette","docs\u002F2.components\u002Fchat-palette","A chat palette to create a chatbot interface inside an overlay.",{"title":280,"path":281,"stem":282,"framework":16,"category":262,"description":283},"ChatPrompt","\u002Fdocs\u002Fcomponents\u002Fchat-prompt","docs\u002F2.components\u002Fchat-prompt","An enhanced Textarea for submitting prompts in AI chat interfaces.",{"title":285,"path":286,"stem":287,"framework":16,"category":262,"description":288},"ChatPromptSubmit","\u002Fdocs\u002Fcomponents\u002Fchat-prompt-submit","docs\u002F2.components\u002Fchat-prompt-submit","A Button for submitting chat prompts with automatic status handling.",{"title":290,"path":291,"stem":292,"framework":16,"category":262,"description":293,"badge":294},"ChatReasoning","\u002Fdocs\u002Fcomponents\u002Fchat-reasoning","docs\u002F2.components\u002Fchat-reasoning","Display a collapsible AI reasoning or thinking process.","New",{"title":296,"path":297,"stem":298,"framework":16,"category":262,"description":299,"badge":294},"ChatShimmer","\u002Fdocs\u002Fcomponents\u002Fchat-shimmer","docs\u002F2.components\u002Fchat-shimmer","Display a text shimmer animation effect.",{"title":301,"path":302,"stem":303,"framework":16,"category":262,"description":304,"badge":294},"ChatTool","\u002Fdocs\u002Fcomponents\u002Fchat-tool","docs\u002F2.components\u002Fchat-tool","Display a collapsible AI tool invocation status.",{"title":306,"path":307,"stem":308,"framework":16,"category":309,"description":310},"Checkbox","\u002Fdocs\u002Fcomponents\u002Fcheckbox","docs\u002F2.components\u002Fcheckbox","form","An input element to toggle between checked and unchecked states.",{"title":312,"path":313,"stem":314,"framework":16,"category":309,"description":315},"CheckboxGroup","\u002Fdocs\u002Fcomponents\u002Fcheckbox-group","docs\u002F2.components\u002Fcheckbox-group","A set of checklist buttons to select multiple option from a list.",{"title":317,"path":318,"stem":319,"framework":16,"category":178,"description":320},"Chip","\u002Fdocs\u002Fcomponents\u002Fchip","docs\u002F2.components\u002Fchip","An indicator of a numeric value or a state.",{"title":322,"path":323,"stem":324,"framework":16,"category":178,"description":325},"Collapsible","\u002Fdocs\u002Fcomponents\u002Fcollapsible","docs\u002F2.components\u002Fcollapsible","A collapsible element to toggle visibility of its content.",{"title":327,"path":328,"stem":329,"framework":16,"category":330,"description":331},"ColorModeAvatar","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-avatar","docs\u002F2.components\u002Fcolor-mode-avatar","color-mode","An Avatar with a different source for light and dark mode.",{"title":333,"path":334,"stem":335,"framework":16,"category":330,"description":336},"ColorModeButton","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-button","docs\u002F2.components\u002Fcolor-mode-button","A Button to switch between light and dark mode.",{"title":338,"path":339,"stem":340,"framework":16,"category":330,"description":341},"ColorModeImage","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-image","docs\u002F2.components\u002Fcolor-mode-image","An image element with a different source for light and dark mode.",{"title":343,"path":344,"stem":345,"framework":16,"category":330,"description":346},"ColorModeSelect","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-select","docs\u002F2.components\u002Fcolor-mode-select","A Select to switch between system, dark & light mode.",{"title":348,"path":349,"stem":350,"framework":16,"category":330,"description":351},"ColorModeSwitch","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-switch","docs\u002F2.components\u002Fcolor-mode-switch","A switch to toggle between light and dark mode.",{"title":353,"path":354,"stem":355,"framework":16,"category":309,"description":356},"ColorPicker","\u002Fdocs\u002Fcomponents\u002Fcolor-picker","docs\u002F2.components\u002Fcolor-picker","A component to select a color.",{"title":358,"path":359,"stem":360,"framework":16,"category":226,"description":361},"CommandPalette","\u002Fdocs\u002Fcomponents\u002Fcommand-palette","docs\u002F2.components\u002Fcommand-palette","A command palette with full-text search powered by Fuse.js for efficient fuzzy matching.",{"title":363,"path":364,"stem":365,"framework":16,"category":184,"description":366},"Container","\u002Fdocs\u002Fcomponents\u002Fcontainer","docs\u002F2.components\u002Fcontainer","A container lets you center and constrain the width of your content.",{"title":368,"path":369,"stem":370,"framework":28,"category":371,"description":372},"ContentNavigation","\u002Fdocs\u002Fcomponents\u002Fcontent-navigation","docs\u002F2.components\u002Fcontent-navigation","content","An accordion-style navigation component for organizing page links.",{"title":374,"path":375,"stem":376,"framework":28,"category":371,"description":377},"ContentSearch","\u002Fdocs\u002Fcomponents\u002Fcontent-search","docs\u002F2.components\u002Fcontent-search","A ready to use CommandPalette to add to your documentation.",{"title":379,"path":380,"stem":381,"framework":28,"category":371,"description":382},"ContentSearchButton","\u002Fdocs\u002Fcomponents\u002Fcontent-search-button","docs\u002F2.components\u002Fcontent-search-button","A pre-styled Button to open the ContentSearch modal.",{"title":384,"path":385,"stem":386,"framework":28,"category":371,"description":387},"ContentSurround","\u002Fdocs\u002Fcomponents\u002Fcontent-surround","docs\u002F2.components\u002Fcontent-surround","A pair of prev and next links to navigate between pages.",{"title":389,"path":390,"stem":391,"framework":28,"category":371,"description":392},"ContentToc","\u002Fdocs\u002Fcomponents\u002Fcontent-toc","docs\u002F2.components\u002Fcontent-toc","A sticky Table of Contents with automatic active anchor link highlighting.",{"title":394,"path":395,"stem":396,"framework":16,"category":397,"description":398},"ContextMenu","\u002Fdocs\u002Fcomponents\u002Fcontext-menu","docs\u002F2.components\u002Fcontext-menu","overlay","A menu to display actions when right-clicking on an element.",{"title":400,"path":401,"stem":402,"framework":16,"category":403,"description":404},"DashboardGroup","\u002Fdocs\u002Fcomponents\u002Fdashboard-group","docs\u002F2.components\u002Fdashboard-group","dashboard","A fixed layout component that provides context for dashboard components with sidebar state management and persistence.",{"title":406,"path":407,"stem":408,"framework":16,"category":403,"description":409},"DashboardNavbar","\u002Fdocs\u002Fcomponents\u002Fdashboard-navbar","docs\u002F2.components\u002Fdashboard-navbar","A responsive navbar to display in a dashboard.",{"title":411,"path":412,"stem":413,"framework":16,"category":403,"description":414},"DashboardPanel","\u002Fdocs\u002Fcomponents\u002Fdashboard-panel","docs\u002F2.components\u002Fdashboard-panel","A resizable panel to display in a dashboard.",{"title":416,"path":417,"stem":418,"framework":16,"category":403,"description":419},"DashboardResizeHandle","\u002Fdocs\u002Fcomponents\u002Fdashboard-resize-handle","docs\u002F2.components\u002Fdashboard-resize-handle","A handle to resize a sidebar or panel.",{"title":421,"path":422,"stem":423,"framework":16,"category":403,"description":424},"DashboardSearch","\u002Fdocs\u002Fcomponents\u002Fdashboard-search","docs\u002F2.components\u002Fdashboard-search","A ready to use CommandPalette to add to your dashboard.",{"title":426,"path":427,"stem":428,"framework":16,"category":403,"description":429},"DashboardSearchButton","\u002Fdocs\u002Fcomponents\u002Fdashboard-search-button","docs\u002F2.components\u002Fdashboard-search-button","A pre-styled Button to open the DashboardSearch modal.",{"title":431,"path":432,"stem":433,"framework":16,"category":403,"description":434},"DashboardSidebar","\u002Fdocs\u002Fcomponents\u002Fdashboard-sidebar","docs\u002F2.components\u002Fdashboard-sidebar","A resizable and collapsible sidebar to display in a dashboard.",{"title":436,"path":437,"stem":438,"framework":16,"category":403,"description":439},"DashboardSidebarCollapse","\u002Fdocs\u002Fcomponents\u002Fdashboard-sidebar-collapse","docs\u002F2.components\u002Fdashboard-sidebar-collapse","A Button to collapse the sidebar on desktop.",{"title":441,"path":442,"stem":443,"framework":16,"category":403,"description":444},"DashboardSidebarToggle","\u002Fdocs\u002Fcomponents\u002Fdashboard-sidebar-toggle","docs\u002F2.components\u002Fdashboard-sidebar-toggle","A Button to toggle the sidebar on mobile.",{"title":446,"path":447,"stem":448,"framework":16,"category":403,"description":449},"DashboardToolbar","\u002Fdocs\u002Fcomponents\u002Fdashboard-toolbar","docs\u002F2.components\u002Fdashboard-toolbar","A toolbar to display under the navbar in a dashboard.",{"title":451,"path":452,"stem":453,"framework":16,"category":397,"description":454},"Drawer","\u002Fdocs\u002Fcomponents\u002Fdrawer","docs\u002F2.components\u002Fdrawer","A drawer that smoothly slides in & out of the screen.",{"title":456,"path":457,"stem":458,"framework":16,"category":397,"description":459},"DropdownMenu","\u002Fdocs\u002Fcomponents\u002Fdropdown-menu","docs\u002F2.components\u002Fdropdown-menu","A menu to display actions when clicking on an element.",{"title":461,"path":462,"stem":463,"framework":16,"category":464,"description":465},"Editor","\u002Fdocs\u002Fcomponents\u002Feditor","docs\u002F2.components\u002Feditor","editor","A rich text editor component based on TipTap with support for markdown, HTML, and JSON content types.",{"title":467,"path":468,"stem":469,"framework":16,"category":464,"description":470},"EditorDragHandle","\u002Fdocs\u002Fcomponents\u002Feditor-drag-handle","docs\u002F2.components\u002Feditor-drag-handle","A draggable handle for reordering and selecting blocks in the editor.",{"title":472,"path":473,"stem":474,"framework":16,"category":464,"description":475},"EditorEmojiMenu","\u002Fdocs\u002Fcomponents\u002Feditor-emoji-menu","docs\u002F2.components\u002Feditor-emoji-menu","An emoji picker menu that displays emoji suggestions when typing the : character in the editor.",{"title":477,"path":478,"stem":479,"framework":16,"category":464,"description":480},"EditorMentionMenu","\u002Fdocs\u002Fcomponents\u002Feditor-mention-menu","docs\u002F2.components\u002Feditor-mention-menu","A mention menu that displays user suggestions when typing a trigger character in the editor.",{"title":482,"path":483,"stem":484,"framework":16,"category":464,"description":485},"EditorSuggestionMenu","\u002Fdocs\u002Fcomponents\u002Feditor-suggestion-menu","docs\u002F2.components\u002Feditor-suggestion-menu","A command menu that displays formatting and action suggestions when typing the \u002F character in the editor.",{"title":487,"path":488,"stem":489,"framework":16,"category":464,"description":490},"EditorToolbar","\u002Fdocs\u002Fcomponents\u002Feditor-toolbar","docs\u002F2.components\u002Feditor-toolbar","A customizable toolbar for editor actions that can be displayed as fixed, bubble, or floating menu.",{"title":492,"path":493,"stem":494,"framework":16,"category":172,"description":495},"Empty","\u002Fdocs\u002Fcomponents\u002Fempty","docs\u002F2.components\u002Fempty","A component to display an empty state.",{"title":497,"path":498,"stem":499,"framework":16,"category":184,"description":500},"Error","\u002Fdocs\u002Fcomponents\u002Ferror","docs\u002F2.components\u002Ferror","A pre-built error component with NuxtError support.",{"title":502,"path":503,"stem":504,"framework":16,"category":178,"description":505},"FieldGroup","\u002Fdocs\u002Fcomponents\u002Ffield-group","docs\u002F2.components\u002Ffield-group","Group multiple button-like elements together.",{"title":507,"path":508,"stem":509,"framework":16,"category":309,"description":510},"FileUpload","\u002Fdocs\u002Fcomponents\u002Ffile-upload","docs\u002F2.components\u002Ffile-upload","An input element to upload files.",{"title":512,"path":513,"stem":514,"framework":16,"category":184,"description":515},"Footer","\u002Fdocs\u002Fcomponents\u002Ffooter","docs\u002F2.components\u002Ffooter","A responsive footer component.",{"title":517,"path":518,"stem":519,"framework":16,"category":226,"description":520},"FooterColumns","\u002Fdocs\u002Fcomponents\u002Ffooter-columns","docs\u002F2.components\u002Ffooter-columns","A list of links as columns to display in your Footer.",{"title":522,"path":523,"stem":524,"framework":16,"category":309,"description":525},"Form","\u002Fdocs\u002Fcomponents\u002Fform","docs\u002F2.components\u002Fform","A form component with built-in validation and submission handling.",{"title":527,"path":528,"stem":529,"framework":16,"category":309,"description":530},"FormField","\u002Fdocs\u002Fcomponents\u002Fform-field","docs\u002F2.components\u002Fform-field","A wrapper for form elements that provides validation and error handling.",{"title":532,"path":533,"stem":534,"framework":16,"category":184,"description":535},"Header","\u002Fdocs\u002Fcomponents\u002Fheader","docs\u002F2.components\u002Fheader","A responsive header component.",{"title":537,"path":538,"stem":539,"framework":16,"category":178,"description":540},"Icon","\u002Fdocs\u002Fcomponents\u002Ficon","docs\u002F2.components\u002Ficon","A component to display any icon from Iconify or another component.",{"title":542,"path":543,"stem":544,"framework":16,"category":309,"description":545},"Input","\u002Fdocs\u002Fcomponents\u002Finput","docs\u002F2.components\u002Finput","An input element to enter text.",{"title":547,"path":548,"stem":549,"framework":16,"category":309,"description":550},"InputDate","\u002Fdocs\u002Fcomponents\u002Finput-date","docs\u002F2.components\u002Finput-date","An input component for date selection.",{"title":552,"path":553,"stem":554,"framework":16,"category":309,"description":555},"InputMenu","\u002Fdocs\u002Fcomponents\u002Finput-menu","docs\u002F2.components\u002Finput-menu","An autocomplete input with real-time suggestions.",{"title":557,"path":558,"stem":559,"framework":16,"category":309,"description":560},"InputNumber","\u002Fdocs\u002Fcomponents\u002Finput-number","docs\u002F2.components\u002Finput-number","An input for numerical values with a customizable range.",{"title":562,"path":563,"stem":564,"framework":16,"category":309,"description":565},"InputTags","\u002Fdocs\u002Fcomponents\u002Finput-tags","docs\u002F2.components\u002Finput-tags","An input element that displays interactive tags.",{"title":567,"path":568,"stem":569,"framework":16,"category":309,"description":570},"InputTime","\u002Fdocs\u002Fcomponents\u002Finput-time","docs\u002F2.components\u002Finput-time","An input for selecting a time.",{"title":572,"path":573,"stem":574,"framework":16,"category":178,"description":575},"Kbd","\u002Fdocs\u002Fcomponents\u002Fkbd","docs\u002F2.components\u002Fkbd","A kbd element to display a keyboard key.",{"title":577,"path":578,"stem":579,"framework":16,"category":226,"description":580},"Link","\u002Fdocs\u002Fcomponents\u002Flink","docs\u002F2.components\u002Flink","A wrapper around \u003CNuxtLink> with extra props.",{"title":582,"path":583,"stem":584,"framework":16,"category":585,"description":586},"LocaleSelect","\u002Fdocs\u002Fcomponents\u002Flocale-select","docs\u002F2.components\u002Flocale-select","i18n","A Select to switch between locales.",{"title":588,"path":589,"stem":590,"framework":16,"category":184,"description":591},"Main","\u002Fdocs\u002Fcomponents\u002Fmain","docs\u002F2.components\u002Fmain","A main element that fills the available viewport height.",{"title":593,"path":594,"stem":595,"framework":16,"category":172,"description":596},"Marquee","\u002Fdocs\u002Fcomponents\u002Fmarquee","docs\u002F2.components\u002Fmarquee","A component to create infinite scrolling content.",{"title":598,"path":599,"stem":600,"framework":16,"category":397,"description":601},"Modal","\u002Fdocs\u002Fcomponents\u002Fmodal","docs\u002F2.components\u002Fmodal","A dialog window that can be used to display a message or request user input.",{"title":603,"path":604,"stem":605,"framework":16,"category":226,"description":606},"NavigationMenu","\u002Fdocs\u002Fcomponents\u002Fnavigation-menu","docs\u002F2.components\u002Fnavigation-menu","A list of links that can be displayed horizontally or vertically.",{"title":608,"path":609,"stem":610,"framework":16,"category":190,"description":611},"Page","\u002Fdocs\u002Fcomponents\u002Fpage","docs\u002F2.components\u002Fpage","A grid layout for your pages with left and right columns.",{"title":613,"path":614,"stem":615,"framework":16,"category":190,"description":616},"PageAnchors","\u002Fdocs\u002Fcomponents\u002Fpage-anchors","docs\u002F2.components\u002Fpage-anchors","A list of anchors to be displayed in the page.",{"title":618,"path":619,"stem":620,"framework":16,"category":190,"description":621},"PageAside","\u002Fdocs\u002Fcomponents\u002Fpage-aside","docs\u002F2.components\u002Fpage-aside","A sticky aside to display your page navigation.",{"title":623,"path":624,"stem":625,"framework":16,"category":190,"description":626},"PageBody","\u002Fdocs\u002Fcomponents\u002Fpage-body","docs\u002F2.components\u002Fpage-body","The main content of your page.",{"title":628,"path":629,"stem":630,"framework":16,"category":190,"description":631},"PageCard","\u002Fdocs\u002Fcomponents\u002Fpage-card","docs\u002F2.components\u002Fpage-card","A pre-styled card component that displays a title, description and optional link.",{"title":633,"path":634,"stem":635,"framework":16,"category":190,"description":636},"PageColumns","\u002Fdocs\u002Fcomponents\u002Fpage-columns","docs\u002F2.components\u002Fpage-columns","A responsive multi-column layout system for organizing content side-by-side.",{"title":638,"path":639,"stem":640,"framework":16,"category":190,"description":641},"PageCTA","\u002Fdocs\u002Fcomponents\u002Fpage-cta","docs\u002F2.components\u002Fpage-cta","A call to action section to display in your pages.",{"title":643,"path":644,"stem":645,"framework":16,"category":190,"description":646},"PageFeature","\u002Fdocs\u002Fcomponents\u002Fpage-feature","docs\u002F2.components\u002Fpage-feature","A component to showcase key features of your application.",{"title":648,"path":649,"stem":650,"framework":16,"category":190,"description":651},"PageGrid","\u002Fdocs\u002Fcomponents\u002Fpage-grid","docs\u002F2.components\u002Fpage-grid","A responsive grid system for displaying content in a flexible layout.",{"title":653,"path":654,"stem":655,"framework":16,"category":190,"description":656},"PageHeader","\u002Fdocs\u002Fcomponents\u002Fpage-header","docs\u002F2.components\u002Fpage-header","A responsive header for your pages.",{"title":658,"path":659,"stem":660,"framework":16,"category":190,"description":661},"PageHero","\u002Fdocs\u002Fcomponents\u002Fpage-hero","docs\u002F2.components\u002Fpage-hero","A responsive hero for your pages.",{"title":663,"path":664,"stem":665,"framework":16,"category":190,"description":666},"PageLinks","\u002Fdocs\u002Fcomponents\u002Fpage-links","docs\u002F2.components\u002Fpage-links","A list of links to be displayed in the page.",{"title":668,"path":669,"stem":670,"framework":16,"category":190,"description":671},"PageList","\u002Fdocs\u002Fcomponents\u002Fpage-list","docs\u002F2.components\u002Fpage-list","A vertical list layout for displaying content in a stacked format.",{"title":673,"path":674,"stem":675,"framework":16,"category":190,"description":676},"PageLogos","\u002Fdocs\u002Fcomponents\u002Fpage-logos","docs\u002F2.components\u002Fpage-logos","A list of logos or images to display on your pages.",{"title":678,"path":679,"stem":680,"framework":16,"category":190,"description":681},"PageSection","\u002Fdocs\u002Fcomponents\u002Fpage-section","docs\u002F2.components\u002Fpage-section","A responsive section for your pages.",{"title":683,"path":684,"stem":685,"framework":16,"category":226,"description":686},"Pagination","\u002Fdocs\u002Fcomponents\u002Fpagination","docs\u002F2.components\u002Fpagination","A list of buttons or links to navigate through pages.",{"title":688,"path":689,"stem":690,"framework":16,"category":309,"description":691},"PinInput","\u002Fdocs\u002Fcomponents\u002Fpin-input","docs\u002F2.components\u002Fpin-input","An input element to enter a pin.",{"title":693,"path":694,"stem":695,"framework":16,"category":397,"description":696},"Popover","\u002Fdocs\u002Fcomponents\u002Fpopover","docs\u002F2.components\u002Fpopover","A non-modal dialog that floats around a trigger element.",{"title":698,"path":699,"stem":700,"framework":16,"category":190,"description":701},"PricingPlan","\u002Fdocs\u002Fcomponents\u002Fpricing-plan","docs\u002F2.components\u002Fpricing-plan","A customizable pricing plan to display in a pricing page.",{"title":703,"path":704,"stem":705,"framework":16,"category":190,"description":706},"PricingPlans","\u002Fdocs\u002Fcomponents\u002Fpricing-plans","docs\u002F2.components\u002Fpricing-plans","Display a list of pricing plans in a responsive grid layout.",{"title":708,"path":709,"stem":710,"framework":16,"category":190,"description":711},"PricingTable","\u002Fdocs\u002Fcomponents\u002Fpricing-table","docs\u002F2.components\u002Fpricing-table","A responsive pricing table component that displays tiered pricing plans with feature comparisons.",{"title":713,"path":714,"stem":715,"framework":16,"category":178,"description":716},"Progress","\u002Fdocs\u002Fcomponents\u002Fprogress","docs\u002F2.components\u002Fprogress","An indicator showing the progress of a task.",{"title":718,"path":719,"stem":720,"framework":16,"category":309,"description":721},"RadioGroup","\u002Fdocs\u002Fcomponents\u002Fradio-group","docs\u002F2.components\u002Fradio-group","A set of radio buttons to select a single option from a list.",{"title":723,"path":724,"stem":725,"framework":16,"category":172,"description":726},"ScrollArea","\u002Fdocs\u002Fcomponents\u002Fscroll-area","docs\u002F2.components\u002Fscroll-area","A flexible scroll container with virtualization support.",{"title":728,"path":729,"stem":730,"framework":16,"category":309,"description":731},"Select","\u002Fdocs\u002Fcomponents\u002Fselect","docs\u002F2.components\u002Fselect","A select element to choose from a list of options.",{"title":733,"path":734,"stem":735,"framework":16,"category":309,"description":736},"SelectMenu","\u002Fdocs\u002Fcomponents\u002Fselect-menu","docs\u002F2.components\u002Fselect-menu","An advanced searchable select element.",{"title":738,"path":739,"stem":740,"framework":16,"category":178,"description":741},"Separator","\u002Fdocs\u002Fcomponents\u002Fseparator","docs\u002F2.components\u002Fseparator","Separates content horizontally or vertically.",{"title":743,"path":744,"stem":745,"framework":16,"category":184,"description":746,"badge":294},"Sidebar","\u002Fdocs\u002Fcomponents\u002Fsidebar","docs\u002F2.components\u002Fsidebar","A collapsible sidebar with multiple visual variants.",{"title":748,"path":749,"stem":750,"framework":16,"category":178,"description":751},"Skeleton","\u002Fdocs\u002Fcomponents\u002Fskeleton","docs\u002F2.components\u002Fskeleton","A placeholder to show while content is loading.",{"title":753,"path":754,"stem":755,"framework":16,"category":397,"description":756},"Slideover","\u002Fdocs\u002Fcomponents\u002Fslideover","docs\u002F2.components\u002Fslideover","A dialog that slides in from any side of the screen.",{"title":758,"path":759,"stem":760,"framework":16,"category":309,"description":761},"Slider","\u002Fdocs\u002Fcomponents\u002Fslider","docs\u002F2.components\u002Fslider","An input to select a numeric value within a range.",{"title":763,"path":764,"stem":765,"framework":16,"category":226,"description":766},"Stepper","\u002Fdocs\u002Fcomponents\u002Fstepper","docs\u002F2.components\u002Fstepper","A set of steps that are used to indicate progress through a multi-step process.",{"title":768,"path":769,"stem":770,"framework":16,"category":309,"description":771},"Switch","\u002Fdocs\u002Fcomponents\u002Fswitch","docs\u002F2.components\u002Fswitch","A control that toggles between two states.",{"title":773,"path":774,"stem":775,"framework":16,"category":172,"description":776},"Table","\u002Fdocs\u002Fcomponents\u002Ftable","docs\u002F2.components\u002Ftable","A responsive table element to display data in rows and columns.",{"title":778,"path":779,"stem":780,"framework":16,"category":226,"description":781},"Tabs","\u002Fdocs\u002Fcomponents\u002Ftabs","docs\u002F2.components\u002Ftabs","A set of tab panels that are displayed one at a time.",{"title":783,"path":784,"stem":785,"framework":16,"category":309,"description":786},"Textarea","\u002Fdocs\u002Fcomponents\u002Ftextarea","docs\u002F2.components\u002Ftextarea","A textarea element to input multi-line text.",{"title":54,"path":788,"stem":789,"framework":16,"category":184,"description":790},"\u002Fdocs\u002Fcomponents\u002Ftheme","docs\u002F2.components\u002Ftheme","A headless component to theme child components.",{"title":792,"path":793,"stem":794,"framework":16,"category":172,"description":795},"Timeline","\u002Fdocs\u002Fcomponents\u002Ftimeline","docs\u002F2.components\u002Ftimeline","A component that displays a sequence of events with dates, titles, icons or avatars.",{"title":797,"path":798,"stem":799,"framework":16,"category":397,"description":800},"Toast","\u002Fdocs\u002Fcomponents\u002Ftoast","docs\u002F2.components\u002Ftoast","A succinct message to provide information or feedback to the user.",{"title":802,"path":803,"stem":804,"framework":16,"category":397,"description":805},"Tooltip","\u002Fdocs\u002Fcomponents\u002Ftooltip","docs\u002F2.components\u002Ftooltip","A popup that reveals information when hovering over an element.",{"title":807,"path":808,"stem":809,"framework":16,"category":172,"description":810},"Tree","\u002Fdocs\u002Fcomponents\u002Ftree","docs\u002F2.components\u002Ftree","A tree view component to display and interact with hierarchical data structures.",{"title":812,"path":813,"stem":814,"framework":16,"category":172,"description":815},"User","\u002Fdocs\u002Fcomponents\u002Fuser","docs\u002F2.components\u002Fuser","Display user information with name, description and avatar.",{"title":817,"framework":16,"category":16,"description":16,"icon":818,"path":819,"stem":820,"children":821,"page":36},"Composables","i-lucide-square-function","\u002Fdocs\u002Fcomposables","docs\u002F3.composables",[822,827,832,837,842,847,852],{"title":823,"path":824,"stem":825,"framework":16,"category":16,"description":826},"defineLocale","\u002Fdocs\u002Fcomposables\u002Fdefine-locale","docs\u002F3.composables\u002Fdefine-locale","A utility to create a custom locale for your app.",{"title":828,"path":829,"stem":830,"framework":16,"category":16,"description":831},"defineShortcuts","\u002Fdocs\u002Fcomposables\u002Fdefine-shortcuts","docs\u002F3.composables\u002Fdefine-shortcuts","A composable to define keyboard shortcuts in your app.",{"title":833,"path":834,"stem":835,"framework":16,"category":16,"description":836},"extendLocale","\u002Fdocs\u002Fcomposables\u002Fextend-locale","docs\u002F3.composables\u002Fextend-locale","A utility to extend an existing locale with custom translations.",{"title":838,"path":839,"stem":840,"framework":16,"category":16,"description":841},"extractShortcuts","\u002Fdocs\u002Fcomposables\u002Fextract-shortcuts","docs\u002F3.composables\u002Fextract-shortcuts","A utility to extract keyboard shortcuts from menu items.",{"title":843,"path":844,"stem":845,"framework":16,"category":16,"description":846},"useOverlay","\u002Fdocs\u002Fcomposables\u002Fuse-overlay","docs\u002F3.composables\u002Fuse-overlay","A composable to programmatically control overlays.",{"title":848,"path":849,"stem":850,"framework":16,"category":16,"description":851,"badge":294},"useScrollShadow","\u002Fdocs\u002Fcomposables\u002Fuse-scroll-shadow","docs\u002F3.composables\u002Fuse-scroll-shadow","A composable to apply scroll shadow effects on any scrollable element.",{"title":853,"path":854,"stem":855,"framework":16,"category":16,"description":856},"useToast","\u002Fdocs\u002Fcomposables\u002Fuse-toast","docs\u002F3.composables\u002Fuse-toast","A composable to display toast notifications in your app.",{"title":858,"path":859,"stem":860,"children":861,"framework":28,"category":16,"description":16,"icon":957},"Typography","\u002Fdocs\u002Ftypography","docs\u002F4.typography\u002F1.index",[862,864,869,874,879,884,889,893,898,902,907,912,917,922,927,931,936,940,944,948,953],{"title":15,"path":859,"stem":860,"framework":28,"category":16,"description":863},"Beautiful typography components and utilities to style your content with Nuxt UI.",{"title":865,"path":866,"stem":867,"framework":28,"category":16,"description":868},"Headers and text","\u002Fdocs\u002Ftypography\u002Fheaders-and-text","docs\u002F4.typography\u002F2.headers-and-text","Beautifully styled headings, paragraphs, text formatting, and links for optimal readability.",{"title":870,"path":871,"stem":872,"framework":28,"category":16,"description":873},"Lists and tables","\u002Fdocs\u002Ftypography\u002Flists-and-tables","docs\u002F4.typography\u002F3.lists-and-tables","Organize information with styled lists and responsive tables for clear, consistent readability.",{"title":875,"path":876,"stem":877,"framework":28,"category":16,"description":878},"Images and embeds","\u002Fdocs\u002Ftypography\u002Fimages-and-embeds","docs\u002F4.typography\u002F4.images-and-embeds","Responsive images, videos, and rich media embeds to enhance and illustrate your documentation.",{"title":880,"path":881,"stem":882,"framework":28,"category":16,"description":883},"Code","\u002Fdocs\u002Ftypography\u002Fcode","docs\u002F4.typography\u002F5.code","Display inline code and syntax-highlighted code blocks with copy-to-clipboard support.",{"title":169,"path":885,"stem":886,"framework":28,"category":887,"description":888},"\u002Fdocs\u002Ftypography\u002Faccordion","docs\u002F4.typography\u002Faccordion","components","Create expandable content sections for better information organization.",{"title":203,"path":890,"stem":891,"framework":28,"category":887,"description":892},"\u002Fdocs\u002Ftypography\u002Fbadge","docs\u002F4.typography\u002Fbadge","Display version numbers, status labels, and tags within your content.",{"title":894,"path":895,"stem":896,"framework":28,"category":887,"description":897},"Callout","\u002Fdocs\u002Ftypography\u002Fcallout","docs\u002F4.typography\u002Fcallout","Highlight important information with eye-catching colored boxes and icons.",{"title":239,"path":899,"stem":900,"framework":28,"category":887,"description":901},"\u002Fdocs\u002Ftypography\u002Fcard","docs\u002F4.typography\u002Fcard","Create highlighted content blocks with optional links and navigation.",{"title":903,"path":904,"stem":905,"framework":28,"category":887,"description":906},"CardGroup","\u002Fdocs\u002Ftypography\u002Fcard-group","docs\u002F4.typography\u002Fcard-group","Organize multiple cards in responsive grid layouts for better content presentation.",{"title":908,"path":909,"stem":910,"framework":28,"category":887,"description":911},"CodeCollapse","\u002Fdocs\u002Ftypography\u002Fcode-collapse","docs\u002F4.typography\u002Fcode-collapse","Make long code blocks collapsible to save space and improve readability.",{"title":913,"path":914,"stem":915,"framework":28,"category":887,"description":916},"CodeGroup","\u002Fdocs\u002Ftypography\u002Fcode-group","docs\u002F4.typography\u002Fcode-group","Group multiple code examples in tabbed interfaces for easy comparison.",{"title":918,"path":919,"stem":920,"framework":28,"category":887,"description":921},"CodePreview","\u002Fdocs\u002Ftypography\u002Fcode-preview","docs\u002F4.typography\u002Fcode-preview","Display code examples with a preview and their source for clearer documentation.",{"title":923,"path":924,"stem":925,"framework":28,"category":887,"description":926},"CodeTree","\u002Fdocs\u002Ftypography\u002Fcode-tree","docs\u002F4.typography\u002Fcode-tree","Visualize file and folder structures with syntax-highlighted code.",{"title":322,"path":928,"stem":929,"framework":28,"category":887,"description":930},"\u002Fdocs\u002Ftypography\u002Fcollapsible","docs\u002F4.typography\u002Fcollapsible","Toggle content visibility with smooth expand and collapse animations.",{"title":932,"path":933,"stem":934,"framework":28,"category":887,"description":935},"Field","\u002Fdocs\u002Ftypography\u002Ffield","docs\u002F4.typography\u002Ffield","Document API parameters, props, and configuration options clearly.",{"title":502,"path":937,"stem":938,"framework":28,"category":887,"description":939},"\u002Fdocs\u002Ftypography\u002Ffield-group","docs\u002F4.typography\u002Ffield-group","Group related fields together for comprehensive API documentation.",{"title":537,"path":941,"stem":942,"framework":28,"category":887,"description":943},"\u002Fdocs\u002Ftypography\u002Ficon","docs\u002F4.typography\u002Ficon","Display icons from popular icon libraries to enhance your content.",{"title":572,"path":945,"stem":946,"framework":28,"category":887,"description":947},"\u002Fdocs\u002Ftypography\u002Fkbd","docs\u002F4.typography\u002Fkbd","Display keyboard shortcuts and key combinations with proper styling.",{"title":949,"path":950,"stem":951,"framework":28,"category":887,"description":952},"Steps","\u002Fdocs\u002Ftypography\u002Fsteps","docs\u002F4.typography\u002Fsteps","Transform headings into numbered step-by-step guides and tutorials.",{"title":778,"path":954,"stem":955,"framework":28,"category":887,"description":956},"\u002Fdocs\u002Ftypography\u002Ftabs","docs\u002F4.typography\u002Ftabs","Organize related content in interactive tabbed interfaces.","i-lucide-square-pilcrow",{"id":959,"title":960,"body":16,"description":961,"extension":962,"hero":963,"meta":965,"navigation":36,"path":966,"seo":967,"stem":968,"__hash__":969},"blog\u002Fblog.yml","Blog","Tutorials, guides, and insights to help you build beautiful applications with Nuxt UI.","yml",{"title":964,"description":961},"Nuxt [UI]{.text-primary} Blog",{},"\u002Fblog",{"title":960,"description":961},"blog","ESl67YJxs4hhxlk_OHymZ1sSoeclVge2lYINtoN5zxg",[971],{"id":972,"title":973,"authors":974,"body":985,"date":12311,"description":12312,"extension":12313,"image":12314,"meta":12315,"navigation":36,"path":12317,"seo":12318,"stem":12319,"__hash__":12320},"posts\u002Fblog\u002Fhow-to-build-an-ai-chat.md","Build an AI Chatbot with Nuxt, Nuxt UI, and AI SDK",[975,980],{"name":976,"avatar":977,"to":979},"Hugo Richard",{"src":978},"https:\u002F\u002Fgithub.com\u002Fhugorcd.png","https:\u002F\u002Fx.com\u002Fhugorcd",{"name":981,"avatar":982,"to":984},"Benjamin Canac",{"src":983},"https:\u002F\u002Fgithub.com\u002Fbenjamincanac.png","https:\u002F\u002Fx.com\u002Fbenjamincanac",{"type":986,"value":987,"toc":12278},"minimark",[988,992,997,1000,1035,1061,1065,1068,1082,1086,1089,1126,1131,1134,1278,1282,1289,1505,1508,1547,1551,1558,1653,1660,1677,1687,1691,1705,2436,2439,2457,2467,2471,2479,2483,2494,2862,2866,2893,4600,4603,4608,4615,4620,4631,4636,4645,4663,4668,4683,4696,4700,4703,5078,5082,5097,5101,5109,5682,5689,5714,5718,5736,7183,7186,7191,7202,7240,7255,7260,7267,7281,7286,7325,7330,7335,7342,7353,7357,7360,7364,7367,7520,7524,7549,8027,8031,8570,8574,9910,9919,9923,9930,9934,9944,10202,10206,10214,10461,10465,10468,11883,11887,11890,11895,11904,11909,11918,12121,12125,12128,12143,12146,12161,12176,12185,12189,12192,12222,12225,12230,12271,12274],[989,990,991],"p",{},"Building AI-powered applications has never been more accessible. This guide walks through creating a full-featured AI chatbot using Nuxt, Nuxt UI, and the Vercel AI SDK. Each step is explained in detail so you understand how every piece works together.",[993,994,996],"h2",{"id":995},"what-were-building","What we're building",[989,998,999],{},"By the end of this tutorial, you'll have a fully functional AI chatbot with:",[1001,1002,1003,1011,1017,1023,1029],"ul",{},[1004,1005,1006,1010],"li",{},[1007,1008,1009],"strong",{},"Streaming responses"," that appear in real-time as the AI generates them",[1004,1012,1013,1016],{},[1007,1014,1015],{},"A beautiful chat interface"," built with Nuxt UI's purpose-built chat components",[1004,1018,1019,1022],{},[1007,1020,1021],{},"Markdown rendering"," for rich AI responses with code highlighting",[1004,1024,1025,1028],{},[1007,1026,1027],{},"Multi-model support"," allowing users to switch between OpenAI, Anthropic, and Google models",[1004,1030,1031,1034],{},[1007,1032,1033],{},"Server-side AI integration"," using Nitro API routes and the AI SDK",[1036,1037,1039],"callout",{"icon":1038},"i-simple-icons-github",[989,1040,1041,1042,1052,1053,1060],{},"Check out the ",[1043,1044,1048],"a",{"href":1045,"rel":1046},"https:\u002F\u002Fgithub.com\u002Fnuxt-ui-templates\u002Fchat",[1047],"nofollow",[1049,1050,1051],"code",{},"Nuxt"," and ",[1043,1054,1057],{"href":1055,"rel":1056},"https:\u002F\u002Fgithub.com\u002Fnuxt-ui-templates\u002Fchat-vue",[1047],[1049,1058,1059],{},"Vue"," AI Chat templates on GitHub for production-ready implementations with authentication, database persistence, and more.",[993,1062,1064],{"id":1063},"prerequisites","Prerequisites",[989,1066,1067],{},"Before we start, make sure you have:",[1001,1069,1070,1073],{},[1004,1071,1072],{},"Node.js 20+ installed",[1004,1074,1075,1076,1081],{},"A ",[1043,1077,1080],{"href":1078,"rel":1079},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fai-gateway",[1047],"Vercel AI Gateway"," API key (provides access to multiple AI providers through a single endpoint)",[993,1083,1085],{"id":1084},"project-setup","Project setup",[989,1087,1088],{},"Start by creating a new Nuxt project:",[1090,1091,1096],"pre",{"className":1092,"code":1093,"language":1094,"meta":1095,"style":1095},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npx nuxi@latest init nuxt-ai-chat\ncd nuxt-ai-chat\n","bash","",[1049,1097,1098,1117],{"__ignoreMap":1095},[1099,1100,1103,1107,1111,1114],"span",{"class":1101,"line":1102},"line",1,[1099,1104,1106],{"class":1105},"sBMFI","npx",[1099,1108,1110],{"class":1109},"sfazB"," nuxi@latest",[1099,1112,1113],{"class":1109}," init",[1099,1115,1116],{"class":1109}," nuxt-ai-chat\n",[1099,1118,1120,1124],{"class":1101,"line":1119},2,[1099,1121,1123],{"class":1122},"s2Zo4","cd",[1099,1125,1116],{"class":1109},[1127,1128,1130],"h3",{"id":1129},"installing-dependencies","Installing dependencies",[989,1132,1133],{},"Install Nuxt UI and the AI-specific dependencies:",[1135,1136,1138,1181,1213,1246],"code-group",{"sync":1137},"pm",[1090,1139,1142],{"className":1092,"code":1140,"filename":1141,"language":1094,"meta":1095,"style":1095},"pnpm add @nuxt\u002Fui tailwindcss @nuxtjs\u002Fmdc @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","pnpm",[1049,1143,1144],{"__ignoreMap":1095},[1099,1145,1146,1148,1151,1154,1157,1160,1163,1166,1169,1172,1175,1178],{"class":1101,"line":1102},[1099,1147,1141],{"class":1105},[1099,1149,1150],{"class":1109}," add",[1099,1152,1153],{"class":1109}," @nuxt\u002Fui",[1099,1155,1156],{"class":1109}," tailwindcss",[1099,1158,1159],{"class":1109}," @nuxtjs\u002Fmdc",[1099,1161,1162],{"class":1109}," @nuxthub\u002Fcore",[1099,1164,1165],{"class":1109}," drizzle-orm",[1099,1167,1168],{"class":1109}," drizzle-kit",[1099,1170,1171],{"class":1109}," @libsql\u002Fclient",[1099,1173,1174],{"class":1109}," ai",[1099,1176,1177],{"class":1109}," @ai-sdk\u002Fvue",[1099,1179,1180],{"class":1109}," zod\n",[1090,1182,1185],{"className":1092,"code":1183,"filename":1184,"language":1094,"meta":1095,"style":1095},"yarn add @nuxt\u002Fui tailwindcss @nuxtjs\u002Fmdc @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","yarn",[1049,1186,1187],{"__ignoreMap":1095},[1099,1188,1189,1191,1193,1195,1197,1199,1201,1203,1205,1207,1209,1211],{"class":1101,"line":1102},[1099,1190,1184],{"class":1105},[1099,1192,1150],{"class":1109},[1099,1194,1153],{"class":1109},[1099,1196,1156],{"class":1109},[1099,1198,1159],{"class":1109},[1099,1200,1162],{"class":1109},[1099,1202,1165],{"class":1109},[1099,1204,1168],{"class":1109},[1099,1206,1171],{"class":1109},[1099,1208,1174],{"class":1109},[1099,1210,1177],{"class":1109},[1099,1212,1180],{"class":1109},[1090,1214,1217],{"className":1092,"code":1215,"filename":1216,"language":1094,"meta":1095,"style":1095},"npm install @nuxt\u002Fui tailwindcss @nuxtjs\u002Fmdc @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","npm",[1049,1218,1219],{"__ignoreMap":1095},[1099,1220,1221,1223,1226,1228,1230,1232,1234,1236,1238,1240,1242,1244],{"class":1101,"line":1102},[1099,1222,1216],{"class":1105},[1099,1224,1225],{"class":1109}," install",[1099,1227,1153],{"class":1109},[1099,1229,1156],{"class":1109},[1099,1231,1159],{"class":1109},[1099,1233,1162],{"class":1109},[1099,1235,1165],{"class":1109},[1099,1237,1168],{"class":1109},[1099,1239,1171],{"class":1109},[1099,1241,1174],{"class":1109},[1099,1243,1177],{"class":1109},[1099,1245,1180],{"class":1109},[1090,1247,1250],{"className":1092,"code":1248,"filename":1249,"language":1094,"meta":1095,"style":1095},"bun add @nuxt\u002Fui tailwindcss @nuxtjs\u002Fmdc @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","bun",[1049,1251,1252],{"__ignoreMap":1095},[1099,1253,1254,1256,1258,1260,1262,1264,1266,1268,1270,1272,1274,1276],{"class":1101,"line":1102},[1099,1255,1249],{"class":1105},[1099,1257,1150],{"class":1109},[1099,1259,1153],{"class":1109},[1099,1261,1156],{"class":1109},[1099,1263,1159],{"class":1109},[1099,1265,1162],{"class":1109},[1099,1267,1165],{"class":1109},[1099,1269,1168],{"class":1109},[1099,1271,1171],{"class":1109},[1099,1273,1174],{"class":1109},[1099,1275,1177],{"class":1109},[1099,1277,1180],{"class":1109},[1127,1279,1281],{"id":1280},"configuration","Configuration",[989,1283,1284,1285,1288],{},"Update your ",[1049,1286,1287],{},"nuxt.config.ts"," to register the modules:",[1290,1291,1292],"code-tree-intersection",{},[1090,1293,1297],{"className":1294,"code":1295,"filename":1287,"language":1296,"meta":1095,"style":1095},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  modules: [\n    '@nuxt\u002Fui',\n    '@nuxtjs\u002Fmdc',\n    '@nuxthub\u002Fcore'\n  ],\n\n  hub: {\n    db: 'sqlite'\n  },\n\n  css: ['~\u002Fassets\u002Fcss\u002Fmain.css'],\n\n  mdc: {\n    headings: {\n      anchorLinks: false \u002F\u002F Disable anchor links in AI responses\n    }\n  },\n})\n","ts",[1049,1298,1299,1319,1331,1346,1358,1369,1377,1383,1394,1410,1416,1421,1444,1449,1459,1469,1485,1491,1496],{"__ignoreMap":1095},[1099,1300,1301,1305,1308,1311,1315],{"class":1101,"line":1102},[1099,1302,1304],{"class":1303},"s7zQu","export",[1099,1306,1307],{"class":1303}," default",[1099,1309,1310],{"class":1122}," defineNuxtConfig",[1099,1312,1314],{"class":1313},"sTEyZ","(",[1099,1316,1318],{"class":1317},"sMK4o","{\n",[1099,1320,1321,1325,1328],{"class":1101,"line":1119},[1099,1322,1324],{"class":1323},"swJcz","  modules",[1099,1326,1327],{"class":1317},":",[1099,1329,1330],{"class":1313}," [\n",[1099,1332,1334,1337,1340,1343],{"class":1101,"line":1333},3,[1099,1335,1336],{"class":1317},"    '",[1099,1338,1339],{"class":1109},"@nuxt\u002Fui",[1099,1341,1342],{"class":1317},"'",[1099,1344,1345],{"class":1317},",\n",[1099,1347,1349,1351,1354,1356],{"class":1101,"line":1348},4,[1099,1350,1336],{"class":1317},[1099,1352,1353],{"class":1109},"@nuxtjs\u002Fmdc",[1099,1355,1342],{"class":1317},[1099,1357,1345],{"class":1317},[1099,1359,1361,1363,1366],{"class":1101,"line":1360},5,[1099,1362,1336],{"class":1317},[1099,1364,1365],{"class":1109},"@nuxthub\u002Fcore",[1099,1367,1368],{"class":1317},"'\n",[1099,1370,1372,1375],{"class":1101,"line":1371},6,[1099,1373,1374],{"class":1313},"  ]",[1099,1376,1345],{"class":1317},[1099,1378,1380],{"class":1101,"line":1379},7,[1099,1381,1382],{"emptyLinePlaceholder":21},"\n",[1099,1384,1386,1389,1391],{"class":1101,"line":1385},8,[1099,1387,1388],{"class":1323},"  hub",[1099,1390,1327],{"class":1317},[1099,1392,1393],{"class":1317}," {\n",[1099,1395,1397,1400,1402,1405,1408],{"class":1101,"line":1396},9,[1099,1398,1399],{"class":1323},"    db",[1099,1401,1327],{"class":1317},[1099,1403,1404],{"class":1317}," '",[1099,1406,1407],{"class":1109},"sqlite",[1099,1409,1368],{"class":1317},[1099,1411,1413],{"class":1101,"line":1412},10,[1099,1414,1415],{"class":1317},"  },\n",[1099,1417,1419],{"class":1101,"line":1418},11,[1099,1420,1382],{"emptyLinePlaceholder":21},[1099,1422,1424,1427,1429,1432,1434,1437,1439,1442],{"class":1101,"line":1423},12,[1099,1425,1426],{"class":1323},"  css",[1099,1428,1327],{"class":1317},[1099,1430,1431],{"class":1313}," [",[1099,1433,1342],{"class":1317},[1099,1435,1436],{"class":1109},"~\u002Fassets\u002Fcss\u002Fmain.css",[1099,1438,1342],{"class":1317},[1099,1440,1441],{"class":1313},"]",[1099,1443,1345],{"class":1317},[1099,1445,1447],{"class":1101,"line":1446},13,[1099,1448,1382],{"emptyLinePlaceholder":21},[1099,1450,1452,1455,1457],{"class":1101,"line":1451},14,[1099,1453,1454],{"class":1323},"  mdc",[1099,1456,1327],{"class":1317},[1099,1458,1393],{"class":1317},[1099,1460,1462,1465,1467],{"class":1101,"line":1461},15,[1099,1463,1464],{"class":1323},"    headings",[1099,1466,1327],{"class":1317},[1099,1468,1393],{"class":1317},[1099,1470,1472,1475,1477,1481],{"class":1101,"line":1471},16,[1099,1473,1474],{"class":1323},"      anchorLinks",[1099,1476,1327],{"class":1317},[1099,1478,1480],{"class":1479},"sfNiH"," false",[1099,1482,1484],{"class":1483},"sHwdD"," \u002F\u002F Disable anchor links in AI responses\n",[1099,1486,1488],{"class":1101,"line":1487},17,[1099,1489,1490],{"class":1317},"    }\n",[1099,1492,1494],{"class":1101,"line":1493},18,[1099,1495,1415],{"class":1317},[1099,1497,1499,1502],{"class":1101,"line":1498},19,[1099,1500,1501],{"class":1317},"}",[1099,1503,1504],{"class":1313},")\n",[989,1506,1507],{},"Create the main CSS file to import Tailwind CSS and Nuxt UI:",[1290,1509,1510],{},[1090,1511,1516],{"className":1512,"code":1513,"filename":1514,"language":1515,"meta":1095,"style":1095},"language-css shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","@import \"tailwindcss\";\n@import \"@nuxt\u002Fui\";\n","app\u002Fassets\u002Fcss\u002Fmain.css","css",[1049,1517,1518,1535],{"__ignoreMap":1095},[1099,1519,1520,1523,1526,1529,1532],{"class":1101,"line":1102},[1099,1521,1522],{"class":1303},"@import",[1099,1524,1525],{"class":1317}," \"",[1099,1527,1528],{"class":1109},"tailwindcss",[1099,1530,1531],{"class":1317},"\"",[1099,1533,1534],{"class":1317},";\n",[1099,1536,1537,1539,1541,1543,1545],{"class":1101,"line":1119},[1099,1538,1522],{"class":1303},[1099,1540,1525],{"class":1317},[1099,1542,1339],{"class":1109},[1099,1544,1531],{"class":1317},[1099,1546,1534],{"class":1317},[1127,1548,1550],{"id":1549},"setting-up-the-app","Setting up the app",[989,1552,1553,1554,1557],{},"Nuxt UI requires wrapping your app with ",[1049,1555,1556],{},"UApp"," for modals, toasts, and overlays to work properly:",[1290,1559,1560],{},[1090,1561,1566],{"className":1562,"code":1563,"filename":1564,"highlights":1565,"language":34,"meta":1095,"style":1095},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Ctemplate>\n  \u003CUApp>\n    \u003CUDashboardGroup unit=\"rem\">\n      \u003CNuxtPage \u002F>\n    \u003C\u002FUDashboardGroup>\n  \u003C\u002FUApp>\n\u003C\u002Ftemplate>\n","app\u002Fapp.vue",[1119,1371],[1049,1567,1568,1579,1590,1614,1625,1634,1644],{"__ignoreMap":1095},[1099,1569,1570,1573,1576],{"class":1101,"line":1102},[1099,1571,1572],{"class":1317},"\u003C",[1099,1574,1575],{"class":1323},"template",[1099,1577,1578],{"class":1317},">\n",[1099,1580,1583,1586,1588],{"class":1581,"line":1119},[1101,1582],"highlight",[1099,1584,1585],{"class":1317},"  \u003C",[1099,1587,1556],{"class":1323},[1099,1589,1578],{"class":1317},[1099,1591,1592,1595,1598,1602,1605,1607,1610,1612],{"class":1101,"line":1333},[1099,1593,1594],{"class":1317},"    \u003C",[1099,1596,1597],{"class":1323},"UDashboardGroup",[1099,1599,1601],{"class":1600},"spNyl"," unit",[1099,1603,1604],{"class":1317},"=",[1099,1606,1531],{"class":1317},[1099,1608,1609],{"class":1109},"rem",[1099,1611,1531],{"class":1317},[1099,1613,1578],{"class":1317},[1099,1615,1616,1619,1622],{"class":1101,"line":1348},[1099,1617,1618],{"class":1317},"      \u003C",[1099,1620,1621],{"class":1323},"NuxtPage",[1099,1623,1624],{"class":1317}," \u002F>\n",[1099,1626,1627,1630,1632],{"class":1101,"line":1360},[1099,1628,1629],{"class":1317},"    \u003C\u002F",[1099,1631,1597],{"class":1323},[1099,1633,1578],{"class":1317},[1099,1635,1637,1640,1642],{"class":1636,"line":1371},[1101,1582],[1099,1638,1639],{"class":1317},"  \u003C\u002F",[1099,1641,1556],{"class":1323},[1099,1643,1578],{"class":1317},[1099,1645,1646,1649,1651],{"class":1101,"line":1379},[1099,1647,1648],{"class":1317},"\u003C\u002F",[1099,1650,1575],{"class":1323},[1099,1652,1578],{"class":1317},[989,1654,1655,1656,1659],{},"Create a ",[1049,1657,1658],{},".env"," file with your AI Gateway API key:",[1290,1661,1662],{},[1090,1663,1665],{"className":1092,"code":1664,"filename":1658,"language":1094,"meta":1095,"style":1095},"AI_GATEWAY_API_KEY=your-api-key-here\n",[1049,1666,1667],{"__ignoreMap":1095},[1099,1668,1669,1672,1674],{"class":1101,"line":1102},[1099,1670,1671],{"class":1313},"AI_GATEWAY_API_KEY",[1099,1673,1604],{"class":1317},[1099,1675,1676],{"class":1109},"your-api-key-here\n",[1678,1679,1680],"note",{},[989,1681,1682,1683,1686],{},"With ",[1043,1684,1080],{"href":1078,"rel":1685},[1047],", you don't need individual API keys for OpenAI, Anthropic, or Google. The AI Gateway provides a unified API to access hundreds of models through a single endpoint.",[1127,1688,1690],{"id":1689},"setting-up-the-database","Setting up the database",[989,1692,1693,1698,1699,1704],{},[1043,1694,1697],{"href":1695,"rel":1696},"https:\u002F\u002Fhub.nuxt.com",[1047],"NuxtHub"," provides a zero-config database powered by ",[1043,1700,1703],{"href":1701,"rel":1702},"https:\u002F\u002Form.drizzle.team",[1047],"Drizzle ORM",". Here is the schema for the chat application:",[1290,1706,1707],{},[1708,1709,1710],"code-collapse",{},[1090,1711,1714],{"className":1294,"code":1712,"filename":1713,"language":1296,"meta":1095,"style":1095},"import { sqliteTable, text, integer, index } from 'drizzle-orm\u002Fsqlite-core'\nimport { relations } from 'drizzle-orm'\n\nexport const chats = sqliteTable('chats', {\n  id: text().primaryKey().$defaultFn(() => crypto.randomUUID()),\n  title: text(),\n  createdAt: integer({ mode: 'timestamp' }).notNull().$defaultFn(() => new Date())\n})\n\nexport const chatsRelations = relations(chats, ({ many }) => ({\n  messages: many(messages)\n}))\n\nexport const messages = sqliteTable('messages', {\n  id: text('id').primaryKey().$defaultFn(() => crypto.randomUUID()),\n  chatId: text('chat_id').notNull().references(() => chats.id, { onDelete: 'cascade' }),\n  role: text('role', { enum: ['user', 'assistant', 'system'] }).notNull(),\n  parts: text('parts', { mode: 'json' }),\n  createdAt: integer({ mode: 'timestamp' }).notNull().$defaultFn(() => new Date()),\n}, table => [\n  index('messages_chat_id_idx').on(table.chatId)\n])\n\nexport const messagesRelations = relations(messages, ({ one }) => ({\n  chat: one(chats, {\n    fields: [messages.chatId],\n    references: [chats.id]\n  })\n}))\n","server\u002Fdb\u002Fschema.ts",[1049,1715,1716,1756,1776,1780,1807,1852,1865,1922,1928,1932,1967,1979,1986,1990,2016,2061,2127,2196,2235,2285,2298,2328,2334,2339,2371,2387,2405,2421,2429],{"__ignoreMap":1095},[1099,1717,1718,1721,1724,1727,1730,1733,1735,1738,1740,1743,1746,1749,1751,1754],{"class":1101,"line":1102},[1099,1719,1720],{"class":1303},"import",[1099,1722,1723],{"class":1317}," {",[1099,1725,1726],{"class":1313}," sqliteTable",[1099,1728,1729],{"class":1317},",",[1099,1731,1732],{"class":1313}," text",[1099,1734,1729],{"class":1317},[1099,1736,1737],{"class":1313}," integer",[1099,1739,1729],{"class":1317},[1099,1741,1742],{"class":1313}," index",[1099,1744,1745],{"class":1317}," }",[1099,1747,1748],{"class":1303}," from",[1099,1750,1404],{"class":1317},[1099,1752,1753],{"class":1109},"drizzle-orm\u002Fsqlite-core",[1099,1755,1368],{"class":1317},[1099,1757,1758,1760,1762,1765,1767,1769,1771,1774],{"class":1101,"line":1119},[1099,1759,1720],{"class":1303},[1099,1761,1723],{"class":1317},[1099,1763,1764],{"class":1313}," relations",[1099,1766,1745],{"class":1317},[1099,1768,1748],{"class":1303},[1099,1770,1404],{"class":1317},[1099,1772,1773],{"class":1109},"drizzle-orm",[1099,1775,1368],{"class":1317},[1099,1777,1778],{"class":1101,"line":1333},[1099,1779,1382],{"emptyLinePlaceholder":21},[1099,1781,1782,1784,1787,1790,1792,1794,1796,1798,1801,1803,1805],{"class":1101,"line":1348},[1099,1783,1304],{"class":1303},[1099,1785,1786],{"class":1600}," const",[1099,1788,1789],{"class":1313}," chats ",[1099,1791,1604],{"class":1317},[1099,1793,1726],{"class":1122},[1099,1795,1314],{"class":1313},[1099,1797,1342],{"class":1317},[1099,1799,1800],{"class":1109},"chats",[1099,1802,1342],{"class":1317},[1099,1804,1729],{"class":1317},[1099,1806,1393],{"class":1317},[1099,1808,1809,1812,1814,1816,1819,1822,1825,1827,1829,1832,1834,1836,1839,1842,1844,1847,1850],{"class":1101,"line":1360},[1099,1810,1811],{"class":1323},"  id",[1099,1813,1327],{"class":1317},[1099,1815,1732],{"class":1122},[1099,1817,1818],{"class":1313},"()",[1099,1820,1821],{"class":1317},".",[1099,1823,1824],{"class":1122},"primaryKey",[1099,1826,1818],{"class":1313},[1099,1828,1821],{"class":1317},[1099,1830,1831],{"class":1122},"$defaultFn",[1099,1833,1314],{"class":1313},[1099,1835,1818],{"class":1317},[1099,1837,1838],{"class":1600}," =>",[1099,1840,1841],{"class":1313}," crypto",[1099,1843,1821],{"class":1317},[1099,1845,1846],{"class":1122},"randomUUID",[1099,1848,1849],{"class":1313},"())",[1099,1851,1345],{"class":1317},[1099,1853,1854,1857,1859,1861,1863],{"class":1101,"line":1371},[1099,1855,1856],{"class":1323},"  title",[1099,1858,1327],{"class":1317},[1099,1860,1732],{"class":1122},[1099,1862,1818],{"class":1313},[1099,1864,1345],{"class":1317},[1099,1866,1867,1870,1872,1874,1876,1879,1882,1884,1886,1889,1891,1893,1896,1898,1901,1903,1905,1907,1909,1911,1913,1916,1919],{"class":1101,"line":1379},[1099,1868,1869],{"class":1323},"  createdAt",[1099,1871,1327],{"class":1317},[1099,1873,1737],{"class":1122},[1099,1875,1314],{"class":1313},[1099,1877,1878],{"class":1317},"{",[1099,1880,1881],{"class":1323}," mode",[1099,1883,1327],{"class":1317},[1099,1885,1404],{"class":1317},[1099,1887,1888],{"class":1109},"timestamp",[1099,1890,1342],{"class":1317},[1099,1892,1745],{"class":1317},[1099,1894,1895],{"class":1313},")",[1099,1897,1821],{"class":1317},[1099,1899,1900],{"class":1122},"notNull",[1099,1902,1818],{"class":1313},[1099,1904,1821],{"class":1317},[1099,1906,1831],{"class":1122},[1099,1908,1314],{"class":1313},[1099,1910,1818],{"class":1317},[1099,1912,1838],{"class":1600},[1099,1914,1915],{"class":1317}," new",[1099,1917,1918],{"class":1122}," Date",[1099,1920,1921],{"class":1313},"())\n",[1099,1923,1924,1926],{"class":1101,"line":1385},[1099,1925,1501],{"class":1317},[1099,1927,1504],{"class":1313},[1099,1929,1930],{"class":1101,"line":1396},[1099,1931,1382],{"emptyLinePlaceholder":21},[1099,1933,1934,1936,1938,1941,1943,1945,1948,1950,1953,1957,1960,1962,1965],{"class":1101,"line":1412},[1099,1935,1304],{"class":1303},[1099,1937,1786],{"class":1600},[1099,1939,1940],{"class":1313}," chatsRelations ",[1099,1942,1604],{"class":1317},[1099,1944,1764],{"class":1122},[1099,1946,1947],{"class":1313},"(chats",[1099,1949,1729],{"class":1317},[1099,1951,1952],{"class":1317}," ({",[1099,1954,1956],{"class":1955},"sHdIc"," many",[1099,1958,1959],{"class":1317}," })",[1099,1961,1838],{"class":1600},[1099,1963,1964],{"class":1313}," (",[1099,1966,1318],{"class":1317},[1099,1968,1969,1972,1974,1976],{"class":1101,"line":1418},[1099,1970,1971],{"class":1323},"  messages",[1099,1973,1327],{"class":1317},[1099,1975,1956],{"class":1122},[1099,1977,1978],{"class":1313},"(messages)\n",[1099,1980,1981,1983],{"class":1101,"line":1423},[1099,1982,1501],{"class":1317},[1099,1984,1985],{"class":1313},"))\n",[1099,1987,1988],{"class":1101,"line":1446},[1099,1989,1382],{"emptyLinePlaceholder":21},[1099,1991,1992,1994,1996,1999,2001,2003,2005,2007,2010,2012,2014],{"class":1101,"line":1451},[1099,1993,1304],{"class":1303},[1099,1995,1786],{"class":1600},[1099,1997,1998],{"class":1313}," messages ",[1099,2000,1604],{"class":1317},[1099,2002,1726],{"class":1122},[1099,2004,1314],{"class":1313},[1099,2006,1342],{"class":1317},[1099,2008,2009],{"class":1109},"messages",[1099,2011,1342],{"class":1317},[1099,2013,1729],{"class":1317},[1099,2015,1393],{"class":1317},[1099,2017,2018,2020,2022,2024,2026,2028,2031,2033,2035,2037,2039,2041,2043,2045,2047,2049,2051,2053,2055,2057,2059],{"class":1101,"line":1461},[1099,2019,1811],{"class":1323},[1099,2021,1327],{"class":1317},[1099,2023,1732],{"class":1122},[1099,2025,1314],{"class":1313},[1099,2027,1342],{"class":1317},[1099,2029,2030],{"class":1109},"id",[1099,2032,1342],{"class":1317},[1099,2034,1895],{"class":1313},[1099,2036,1821],{"class":1317},[1099,2038,1824],{"class":1122},[1099,2040,1818],{"class":1313},[1099,2042,1821],{"class":1317},[1099,2044,1831],{"class":1122},[1099,2046,1314],{"class":1313},[1099,2048,1818],{"class":1317},[1099,2050,1838],{"class":1600},[1099,2052,1841],{"class":1313},[1099,2054,1821],{"class":1317},[1099,2056,1846],{"class":1122},[1099,2058,1849],{"class":1313},[1099,2060,1345],{"class":1317},[1099,2062,2063,2066,2068,2070,2072,2074,2077,2079,2081,2083,2085,2087,2089,2092,2094,2096,2098,2101,2103,2105,2107,2109,2112,2114,2116,2119,2121,2123,2125],{"class":1101,"line":1471},[1099,2064,2065],{"class":1323},"  chatId",[1099,2067,1327],{"class":1317},[1099,2069,1732],{"class":1122},[1099,2071,1314],{"class":1313},[1099,2073,1342],{"class":1317},[1099,2075,2076],{"class":1109},"chat_id",[1099,2078,1342],{"class":1317},[1099,2080,1895],{"class":1313},[1099,2082,1821],{"class":1317},[1099,2084,1900],{"class":1122},[1099,2086,1818],{"class":1313},[1099,2088,1821],{"class":1317},[1099,2090,2091],{"class":1122},"references",[1099,2093,1314],{"class":1313},[1099,2095,1818],{"class":1317},[1099,2097,1838],{"class":1600},[1099,2099,2100],{"class":1313}," chats",[1099,2102,1821],{"class":1317},[1099,2104,2030],{"class":1313},[1099,2106,1729],{"class":1317},[1099,2108,1723],{"class":1317},[1099,2110,2111],{"class":1323}," onDelete",[1099,2113,1327],{"class":1317},[1099,2115,1404],{"class":1317},[1099,2117,2118],{"class":1109},"cascade",[1099,2120,1342],{"class":1317},[1099,2122,1745],{"class":1317},[1099,2124,1895],{"class":1313},[1099,2126,1345],{"class":1317},[1099,2128,2129,2132,2134,2136,2138,2140,2143,2145,2147,2149,2152,2154,2156,2158,2161,2163,2165,2167,2170,2172,2174,2176,2179,2181,2184,2186,2188,2190,2192,2194],{"class":1101,"line":1487},[1099,2130,2131],{"class":1323},"  role",[1099,2133,1327],{"class":1317},[1099,2135,1732],{"class":1122},[1099,2137,1314],{"class":1313},[1099,2139,1342],{"class":1317},[1099,2141,2142],{"class":1109},"role",[1099,2144,1342],{"class":1317},[1099,2146,1729],{"class":1317},[1099,2148,1723],{"class":1317},[1099,2150,2151],{"class":1323}," enum",[1099,2153,1327],{"class":1317},[1099,2155,1431],{"class":1313},[1099,2157,1342],{"class":1317},[1099,2159,2160],{"class":1109},"user",[1099,2162,1342],{"class":1317},[1099,2164,1729],{"class":1317},[1099,2166,1404],{"class":1317},[1099,2168,2169],{"class":1109},"assistant",[1099,2171,1342],{"class":1317},[1099,2173,1729],{"class":1317},[1099,2175,1404],{"class":1317},[1099,2177,2178],{"class":1109},"system",[1099,2180,1342],{"class":1317},[1099,2182,2183],{"class":1313},"] ",[1099,2185,1501],{"class":1317},[1099,2187,1895],{"class":1313},[1099,2189,1821],{"class":1317},[1099,2191,1900],{"class":1122},[1099,2193,1818],{"class":1313},[1099,2195,1345],{"class":1317},[1099,2197,2198,2201,2203,2205,2207,2209,2212,2214,2216,2218,2220,2222,2224,2227,2229,2231,2233],{"class":1101,"line":1493},[1099,2199,2200],{"class":1323},"  parts",[1099,2202,1327],{"class":1317},[1099,2204,1732],{"class":1122},[1099,2206,1314],{"class":1313},[1099,2208,1342],{"class":1317},[1099,2210,2211],{"class":1109},"parts",[1099,2213,1342],{"class":1317},[1099,2215,1729],{"class":1317},[1099,2217,1723],{"class":1317},[1099,2219,1881],{"class":1323},[1099,2221,1327],{"class":1317},[1099,2223,1404],{"class":1317},[1099,2225,2226],{"class":1109},"json",[1099,2228,1342],{"class":1317},[1099,2230,1745],{"class":1317},[1099,2232,1895],{"class":1313},[1099,2234,1345],{"class":1317},[1099,2236,2237,2239,2241,2243,2245,2247,2249,2251,2253,2255,2257,2259,2261,2263,2265,2267,2269,2271,2273,2275,2277,2279,2281,2283],{"class":1101,"line":1498},[1099,2238,1869],{"class":1323},[1099,2240,1327],{"class":1317},[1099,2242,1737],{"class":1122},[1099,2244,1314],{"class":1313},[1099,2246,1878],{"class":1317},[1099,2248,1881],{"class":1323},[1099,2250,1327],{"class":1317},[1099,2252,1404],{"class":1317},[1099,2254,1888],{"class":1109},[1099,2256,1342],{"class":1317},[1099,2258,1745],{"class":1317},[1099,2260,1895],{"class":1313},[1099,2262,1821],{"class":1317},[1099,2264,1900],{"class":1122},[1099,2266,1818],{"class":1313},[1099,2268,1821],{"class":1317},[1099,2270,1831],{"class":1122},[1099,2272,1314],{"class":1313},[1099,2274,1818],{"class":1317},[1099,2276,1838],{"class":1600},[1099,2278,1915],{"class":1317},[1099,2280,1918],{"class":1122},[1099,2282,1849],{"class":1313},[1099,2284,1345],{"class":1317},[1099,2286,2288,2291,2294,2296],{"class":1101,"line":2287},20,[1099,2289,2290],{"class":1317},"},",[1099,2292,2293],{"class":1955}," table",[1099,2295,1838],{"class":1600},[1099,2297,1330],{"class":1313},[1099,2299,2301,2304,2306,2308,2311,2313,2315,2317,2320,2323,2325],{"class":1101,"line":2300},21,[1099,2302,2303],{"class":1122},"  index",[1099,2305,1314],{"class":1313},[1099,2307,1342],{"class":1317},[1099,2309,2310],{"class":1109},"messages_chat_id_idx",[1099,2312,1342],{"class":1317},[1099,2314,1895],{"class":1313},[1099,2316,1821],{"class":1317},[1099,2318,2319],{"class":1122},"on",[1099,2321,2322],{"class":1313},"(table",[1099,2324,1821],{"class":1317},[1099,2326,2327],{"class":1313},"chatId)\n",[1099,2329,2331],{"class":1101,"line":2330},22,[1099,2332,2333],{"class":1313},"])\n",[1099,2335,2337],{"class":1101,"line":2336},23,[1099,2338,1382],{"emptyLinePlaceholder":21},[1099,2340,2342,2344,2346,2349,2351,2353,2356,2358,2360,2363,2365,2367,2369],{"class":1101,"line":2341},24,[1099,2343,1304],{"class":1303},[1099,2345,1786],{"class":1600},[1099,2347,2348],{"class":1313}," messagesRelations ",[1099,2350,1604],{"class":1317},[1099,2352,1764],{"class":1122},[1099,2354,2355],{"class":1313},"(messages",[1099,2357,1729],{"class":1317},[1099,2359,1952],{"class":1317},[1099,2361,2362],{"class":1955}," one",[1099,2364,1959],{"class":1317},[1099,2366,1838],{"class":1600},[1099,2368,1964],{"class":1313},[1099,2370,1318],{"class":1317},[1099,2372,2374,2377,2379,2381,2383,2385],{"class":1101,"line":2373},25,[1099,2375,2376],{"class":1323},"  chat",[1099,2378,1327],{"class":1317},[1099,2380,2362],{"class":1122},[1099,2382,1947],{"class":1313},[1099,2384,1729],{"class":1317},[1099,2386,1393],{"class":1317},[1099,2388,2390,2393,2395,2398,2400,2403],{"class":1101,"line":2389},26,[1099,2391,2392],{"class":1323},"    fields",[1099,2394,1327],{"class":1317},[1099,2396,2397],{"class":1313}," [messages",[1099,2399,1821],{"class":1317},[1099,2401,2402],{"class":1313},"chatId]",[1099,2404,1345],{"class":1317},[1099,2406,2408,2411,2413,2416,2418],{"class":1101,"line":2407},27,[1099,2409,2410],{"class":1323},"    references",[1099,2412,1327],{"class":1317},[1099,2414,2415],{"class":1313}," [chats",[1099,2417,1821],{"class":1317},[1099,2419,2420],{"class":1313},"id]\n",[1099,2422,2424,2427],{"class":1101,"line":2423},28,[1099,2425,2426],{"class":1317},"  }",[1099,2428,1504],{"class":1313},[1099,2430,2432,2434],{"class":1101,"line":2431},29,[1099,2433,1501],{"class":1317},[1099,2435,1985],{"class":1313},[989,2437,2438],{},"Generate the database migrations from your schema:",[1090,2440,2442],{"className":1092,"code":2441,"language":1094,"meta":1095,"style":1095},"npx nuxt db generate\n",[1049,2443,2444],{"__ignoreMap":1095},[1099,2445,2446,2448,2451,2454],{"class":1101,"line":1102},[1099,2447,1106],{"class":1105},[1099,2449,2450],{"class":1109}," nuxt",[1099,2452,2453],{"class":1109}," db",[1099,2455,2456],{"class":1109}," generate\n",[2458,2459,2460],"tip",{},[989,2461,2462,2463,2466],{},"Migrations are automatically applied when you start the development server with ",[1049,2464,2465],{},"npx nuxt dev",". NuxtHub uses SQLite locally, so no external database is required during development.",[993,2468,2470],{"id":2469},"building-the-backend","Building the backend",[989,2472,2473,2474,1821],{},"This section covers integrating AI on the server. The following API endpoints handle chat creation, AI streaming, and data persistence using ",[1043,2475,2478],{"href":2476,"rel":2477},"https:\u002F\u002Fnitro.build",[1047],"Nitro",[1127,2480,2482],{"id":2481},"creating-a-chat","Creating a chat",[989,2484,2485,2486,2493],{},"First, create the endpoint that initializes a new chat and saves the first message to the database. This uses the ",[1043,2487,2490],{"href":2488,"rel":2489},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fui-message",[1047],[1049,2491,2492],{},"UIMessage"," type from the AI SDK:",[1290,2495,2496],{},[1090,2497,2500],{"className":1294,"code":2498,"filename":2499,"language":1296,"meta":1095,"style":1095},"import { defineEventHandler, readValidatedBody } from 'h3'\nimport type { UIMessage } from 'ai'\nimport { db, schema } from 'hub:db'\nimport { z } from 'zod'\n\nexport default defineEventHandler(async (event) => {\n  const { message } = await readValidatedBody(event, z.object({\n    message: z.custom\u003CUIMessage>()\n  }).parse)\n\n  \u002F\u002F Create a new chat\n  const [chat] = await db.insert(schema.chats).values({}).returning()\n\n  \u002F\u002F Save the first user message\n  await db.insert(schema.messages).values({\n    chatId: chat.id,\n    role: 'user',\n    parts: message.parts\n  })\n\n  return chat\n})\n","server\u002Fapi\u002Fchats.post.ts",[1049,2501,2502,2526,2549,2573,2593,2597,2621,2658,2682,2695,2699,2704,2755,2759,2764,2793,2809,2824,2838,2844,2848,2856],{"__ignoreMap":1095},[1099,2503,2504,2506,2508,2511,2513,2516,2518,2520,2522,2524],{"class":1101,"line":1102},[1099,2505,1720],{"class":1303},[1099,2507,1723],{"class":1317},[1099,2509,2510],{"class":1313}," defineEventHandler",[1099,2512,1729],{"class":1317},[1099,2514,2515],{"class":1313}," readValidatedBody",[1099,2517,1745],{"class":1317},[1099,2519,1748],{"class":1303},[1099,2521,1404],{"class":1317},[1099,2523,1127],{"class":1109},[1099,2525,1368],{"class":1317},[1099,2527,2528,2530,2533,2535,2538,2540,2542,2544,2547],{"class":1101,"line":1119},[1099,2529,1720],{"class":1303},[1099,2531,2532],{"class":1303}," type",[1099,2534,1723],{"class":1317},[1099,2536,2537],{"class":1313}," UIMessage",[1099,2539,1745],{"class":1317},[1099,2541,1748],{"class":1303},[1099,2543,1404],{"class":1317},[1099,2545,2546],{"class":1109},"ai",[1099,2548,1368],{"class":1317},[1099,2550,2551,2553,2555,2557,2559,2562,2564,2566,2568,2571],{"class":1101,"line":1333},[1099,2552,1720],{"class":1303},[1099,2554,1723],{"class":1317},[1099,2556,2453],{"class":1313},[1099,2558,1729],{"class":1317},[1099,2560,2561],{"class":1313}," schema",[1099,2563,1745],{"class":1317},[1099,2565,1748],{"class":1303},[1099,2567,1404],{"class":1317},[1099,2569,2570],{"class":1109},"hub:db",[1099,2572,1368],{"class":1317},[1099,2574,2575,2577,2579,2582,2584,2586,2588,2591],{"class":1101,"line":1348},[1099,2576,1720],{"class":1303},[1099,2578,1723],{"class":1317},[1099,2580,2581],{"class":1313}," z",[1099,2583,1745],{"class":1317},[1099,2585,1748],{"class":1303},[1099,2587,1404],{"class":1317},[1099,2589,2590],{"class":1109},"zod",[1099,2592,1368],{"class":1317},[1099,2594,2595],{"class":1101,"line":1360},[1099,2596,1382],{"emptyLinePlaceholder":21},[1099,2598,2599,2601,2603,2605,2607,2610,2612,2615,2617,2619],{"class":1101,"line":1371},[1099,2600,1304],{"class":1303},[1099,2602,1307],{"class":1303},[1099,2604,2510],{"class":1122},[1099,2606,1314],{"class":1313},[1099,2608,2609],{"class":1600},"async",[1099,2611,1964],{"class":1317},[1099,2613,2614],{"class":1955},"event",[1099,2616,1895],{"class":1317},[1099,2618,1838],{"class":1600},[1099,2620,1393],{"class":1317},[1099,2622,2623,2626,2628,2631,2633,2636,2639,2641,2643,2645,2647,2649,2651,2654,2656],{"class":1101,"line":1379},[1099,2624,2625],{"class":1600},"  const",[1099,2627,1723],{"class":1317},[1099,2629,2630],{"class":1313}," message",[1099,2632,1745],{"class":1317},[1099,2634,2635],{"class":1317}," =",[1099,2637,2638],{"class":1303}," await",[1099,2640,2515],{"class":1122},[1099,2642,1314],{"class":1323},[1099,2644,2614],{"class":1313},[1099,2646,1729],{"class":1317},[1099,2648,2581],{"class":1313},[1099,2650,1821],{"class":1317},[1099,2652,2653],{"class":1122},"object",[1099,2655,1314],{"class":1323},[1099,2657,1318],{"class":1317},[1099,2659,2660,2663,2665,2667,2669,2672,2674,2676,2679],{"class":1101,"line":1385},[1099,2661,2662],{"class":1323},"    message",[1099,2664,1327],{"class":1317},[1099,2666,2581],{"class":1313},[1099,2668,1821],{"class":1317},[1099,2670,2671],{"class":1122},"custom",[1099,2673,1572],{"class":1317},[1099,2675,2492],{"class":1105},[1099,2677,2678],{"class":1317},">",[1099,2680,2681],{"class":1323},"()\n",[1099,2683,2684,2686,2688,2690,2693],{"class":1101,"line":1396},[1099,2685,2426],{"class":1317},[1099,2687,1895],{"class":1323},[1099,2689,1821],{"class":1317},[1099,2691,2692],{"class":1313},"parse",[1099,2694,1504],{"class":1323},[1099,2696,2697],{"class":1101,"line":1412},[1099,2698,1382],{"emptyLinePlaceholder":21},[1099,2700,2701],{"class":1101,"line":1418},[1099,2702,2703],{"class":1483},"  \u002F\u002F Create a new chat\n",[1099,2705,2706,2708,2710,2712,2714,2716,2718,2720,2722,2725,2727,2730,2732,2734,2736,2738,2741,2743,2746,2748,2750,2753],{"class":1101,"line":1423},[1099,2707,2625],{"class":1600},[1099,2709,1431],{"class":1317},[1099,2711,262],{"class":1313},[1099,2713,1441],{"class":1317},[1099,2715,2635],{"class":1317},[1099,2717,2638],{"class":1303},[1099,2719,2453],{"class":1313},[1099,2721,1821],{"class":1317},[1099,2723,2724],{"class":1122},"insert",[1099,2726,1314],{"class":1323},[1099,2728,2729],{"class":1313},"schema",[1099,2731,1821],{"class":1317},[1099,2733,1800],{"class":1313},[1099,2735,1895],{"class":1323},[1099,2737,1821],{"class":1317},[1099,2739,2740],{"class":1122},"values",[1099,2742,1314],{"class":1323},[1099,2744,2745],{"class":1317},"{}",[1099,2747,1895],{"class":1323},[1099,2749,1821],{"class":1317},[1099,2751,2752],{"class":1122},"returning",[1099,2754,2681],{"class":1323},[1099,2756,2757],{"class":1101,"line":1446},[1099,2758,1382],{"emptyLinePlaceholder":21},[1099,2760,2761],{"class":1101,"line":1451},[1099,2762,2763],{"class":1483},"  \u002F\u002F Save the first user message\n",[1099,2765,2766,2769,2771,2773,2775,2777,2779,2781,2783,2785,2787,2789,2791],{"class":1101,"line":1461},[1099,2767,2768],{"class":1303},"  await",[1099,2770,2453],{"class":1313},[1099,2772,1821],{"class":1317},[1099,2774,2724],{"class":1122},[1099,2776,1314],{"class":1323},[1099,2778,2729],{"class":1313},[1099,2780,1821],{"class":1317},[1099,2782,2009],{"class":1313},[1099,2784,1895],{"class":1323},[1099,2786,1821],{"class":1317},[1099,2788,2740],{"class":1122},[1099,2790,1314],{"class":1323},[1099,2792,1318],{"class":1317},[1099,2794,2795,2798,2800,2803,2805,2807],{"class":1101,"line":1471},[1099,2796,2797],{"class":1323},"    chatId",[1099,2799,1327],{"class":1317},[1099,2801,2802],{"class":1313}," chat",[1099,2804,1821],{"class":1317},[1099,2806,2030],{"class":1313},[1099,2808,1345],{"class":1317},[1099,2810,2811,2814,2816,2818,2820,2822],{"class":1101,"line":1487},[1099,2812,2813],{"class":1323},"    role",[1099,2815,1327],{"class":1317},[1099,2817,1404],{"class":1317},[1099,2819,2160],{"class":1109},[1099,2821,1342],{"class":1317},[1099,2823,1345],{"class":1317},[1099,2825,2826,2829,2831,2833,2835],{"class":1101,"line":1493},[1099,2827,2828],{"class":1323},"    parts",[1099,2830,1327],{"class":1317},[1099,2832,2630],{"class":1313},[1099,2834,1821],{"class":1317},[1099,2836,2837],{"class":1313},"parts\n",[1099,2839,2840,2842],{"class":1101,"line":1498},[1099,2841,2426],{"class":1317},[1099,2843,1504],{"class":1323},[1099,2845,2846],{"class":1101,"line":2287},[1099,2847,1382],{"emptyLinePlaceholder":21},[1099,2849,2850,2853],{"class":1101,"line":2300},[1099,2851,2852],{"class":1303},"  return",[1099,2854,2855],{"class":1313}," chat\n",[1099,2857,2858,2860],{"class":1101,"line":2330},[1099,2859,1501],{"class":1317},[1099,2861,1504],{"class":1313},[1127,2863,2865],{"id":2864},"streaming-ai-responses","Streaming AI responses",[989,2867,2868,2869,2876,2877,2884,2885,2892],{},"Next, create the endpoint that handles the AI conversation. This endpoint uses ",[1043,2870,2873],{"href":2871,"rel":2872},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-core\u002Fstream-text",[1047],[1049,2874,2875],{},"streamText",", ",[1043,2878,2881],{"href":2879,"rel":2880},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream",[1047],[1049,2882,2883],{},"createUIMessageStream",", and ",[1043,2886,2889],{"href":2887,"rel":2888},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream-response",[1047],[1049,2890,2891],{},"createUIMessageStreamResponse"," from the AI SDK:",[1290,2894,2895],{},[1708,2896,2897],{},[1090,2898,2901],{"className":1294,"code":2899,"filename":2900,"language":1296,"meta":1095,"style":1095},"import { createError, defineEventHandler, getValidatedRouterParams, readValidatedBody } from 'h3'\nimport { eq } from 'drizzle-orm'\nimport { db, schema } from 'hub:db'\nimport { z } from 'zod'\nimport {\n  convertToModelMessages,\n  createUIMessageStream,\n  createUIMessageStreamResponse,\n  generateText,\n  streamText\n} from 'ai'\nimport type { UIMessage } from 'ai'\n\nconst MODELS = [\n  { value: 'openai\u002Fgpt-5-nano', label: 'GPT-5 Nano' },\n  { value: 'anthropic\u002Fclaude-haiku-4.5', label: 'Claude Haiku 4.5' },\n  { value: 'google\u002Fgemini-3-flash', label: 'Gemini 3 Flash' }\n]\n\nexport default defineEventHandler(async (event) => {\n  const { id } = await getValidatedRouterParams(event, z.object({\n    id: z.string()\n  }).parse)\n\n  const { model, messages } = await readValidatedBody(event, z.object({\n    model: z.string().refine(value => MODELS.some(m => m.value === value), {\n      message: 'Invalid model'\n    }),\n    messages: z.array(z.custom\u003CUIMessage>())\n  }).parse)\n\n  \u002F\u002F Fetch the chat from the database\n  const chat = await db.query.chats.findFirst({\n    where: (chat, { eq }) => eq(chat.id, id as string)\n  })\n\n  if (!chat) {\n    throw createError({ statusCode: 404, statusMessage: 'Chat not found' })\n  }\n\n  \u002F\u002F Generate a title for the chat if it doesn't have one\n  if (!chat.title) {\n    const { text: title } = await generateText({\n      model: 'anthropic\u002Fclaude-haiku-4.5',\n      system: `Generate a short title (max 30 characters) based on the user's message. No quotes or punctuation.`,\n      prompt: JSON.stringify(messages[0])\n    })\n\n    await db.update(schema.chats).set({ title }).where(eq(schema.chats.id, id))\n  }\n\n  \u002F\u002F Save the user message if it's a follow-up\n  const lastMessage = messages[messages.length - 1]\n  if (lastMessage?.role === 'user' && messages.length > 1) {\n    await db.insert(schema.messages).values({\n      chatId: id,\n      role: 'user',\n      parts: lastMessage.parts\n    })\n  }\n\n  \u002F\u002F Create the streaming response\n  const stream = createUIMessageStream({\n    execute: async ({ writer }) => {\n      const result = streamText({\n        model,\n        system: `You are a helpful AI assistant. Be concise and friendly.`,\n        messages: await convertToModelMessages(messages),\n        providerOptions: {\n          anthropic: {\n            thinking: {\n              type: 'enabled',\n              budgetTokens: 2048\n            }\n          },\n          google: {\n            thinkingConfig: {\n              includeThoughts: true,\n              thinkingLevel: 'low'\n            }\n          },\n          openai: {\n            reasoningEffort: 'low',\n            reasoningSummary: 'detailed'\n          }\n        }\n      })\n\n      \u002F\u002F Notify the client that a title was generated\n      if (!chat.title) {\n        writer.write({\n          type: 'data-chat-title',\n          data: { message: 'Title generated' },\n          transient: true\n        })\n      }\n\n      writer.merge(result.toUIMessageStream())\n    },\n    onFinish: async ({ messages }) => {\n      \u002F\u002F Save the assistant's response to the database\n      await db.insert(schema.messages).values(messages.map(message => ({\n        chatId: chat.id,\n        role: message.role as 'user' | 'assistant',\n        parts: message.parts\n      })))\n    }\n  })\n\n  return createUIMessageStreamResponse({ stream })\n})\n","server\u002Fapi\u002Fchats\u002F[id].post.ts",[1049,2902,2903,2935,2954,2976,2994,3000,3007,3014,3021,3028,3033,3045,3065,3069,3081,3115,3145,3176,3181,3185,3207,3240,3256,3268,3272,3310,3370,3384,3393,3424,3437,3442,3448,3479,3523,3530,3535,3553,3592,3598,3603,3609,3629,3657,3673,3692,3720,3727,3732,3798,3803,3808,3814,3843,3884,3913,3925,3941,3955,3962,3967,3972,3978,3995,4017,4035,4043,4060,4081,4091,4101,4111,4128,4139,4145,4151,4161,4171,4184,4199,4204,4209,4219,4235,4250,4256,4262,4270,4275,4281,4301,4316,4333,4356,4367,4375,4381,4386,4409,4415,4435,4441,4487,4503,4536,4550,4558,4563,4570,4575,4593],{"__ignoreMap":1095},[1099,2904,2905,2907,2909,2912,2914,2916,2918,2921,2923,2925,2927,2929,2931,2933],{"class":1101,"line":1102},[1099,2906,1720],{"class":1303},[1099,2908,1723],{"class":1317},[1099,2910,2911],{"class":1313}," createError",[1099,2913,1729],{"class":1317},[1099,2915,2510],{"class":1313},[1099,2917,1729],{"class":1317},[1099,2919,2920],{"class":1313}," getValidatedRouterParams",[1099,2922,1729],{"class":1317},[1099,2924,2515],{"class":1313},[1099,2926,1745],{"class":1317},[1099,2928,1748],{"class":1303},[1099,2930,1404],{"class":1317},[1099,2932,1127],{"class":1109},[1099,2934,1368],{"class":1317},[1099,2936,2937,2939,2941,2944,2946,2948,2950,2952],{"class":1101,"line":1119},[1099,2938,1720],{"class":1303},[1099,2940,1723],{"class":1317},[1099,2942,2943],{"class":1313}," eq",[1099,2945,1745],{"class":1317},[1099,2947,1748],{"class":1303},[1099,2949,1404],{"class":1317},[1099,2951,1773],{"class":1109},[1099,2953,1368],{"class":1317},[1099,2955,2956,2958,2960,2962,2964,2966,2968,2970,2972,2974],{"class":1101,"line":1333},[1099,2957,1720],{"class":1303},[1099,2959,1723],{"class":1317},[1099,2961,2453],{"class":1313},[1099,2963,1729],{"class":1317},[1099,2965,2561],{"class":1313},[1099,2967,1745],{"class":1317},[1099,2969,1748],{"class":1303},[1099,2971,1404],{"class":1317},[1099,2973,2570],{"class":1109},[1099,2975,1368],{"class":1317},[1099,2977,2978,2980,2982,2984,2986,2988,2990,2992],{"class":1101,"line":1348},[1099,2979,1720],{"class":1303},[1099,2981,1723],{"class":1317},[1099,2983,2581],{"class":1313},[1099,2985,1745],{"class":1317},[1099,2987,1748],{"class":1303},[1099,2989,1404],{"class":1317},[1099,2991,2590],{"class":1109},[1099,2993,1368],{"class":1317},[1099,2995,2996,2998],{"class":1101,"line":1360},[1099,2997,1720],{"class":1303},[1099,2999,1393],{"class":1317},[1099,3001,3002,3005],{"class":1101,"line":1371},[1099,3003,3004],{"class":1313},"  convertToModelMessages",[1099,3006,1345],{"class":1317},[1099,3008,3009,3012],{"class":1101,"line":1379},[1099,3010,3011],{"class":1313},"  createUIMessageStream",[1099,3013,1345],{"class":1317},[1099,3015,3016,3019],{"class":1101,"line":1385},[1099,3017,3018],{"class":1313},"  createUIMessageStreamResponse",[1099,3020,1345],{"class":1317},[1099,3022,3023,3026],{"class":1101,"line":1396},[1099,3024,3025],{"class":1313},"  generateText",[1099,3027,1345],{"class":1317},[1099,3029,3030],{"class":1101,"line":1412},[1099,3031,3032],{"class":1313},"  streamText\n",[1099,3034,3035,3037,3039,3041,3043],{"class":1101,"line":1418},[1099,3036,1501],{"class":1317},[1099,3038,1748],{"class":1303},[1099,3040,1404],{"class":1317},[1099,3042,2546],{"class":1109},[1099,3044,1368],{"class":1317},[1099,3046,3047,3049,3051,3053,3055,3057,3059,3061,3063],{"class":1101,"line":1423},[1099,3048,1720],{"class":1303},[1099,3050,2532],{"class":1303},[1099,3052,1723],{"class":1317},[1099,3054,2537],{"class":1313},[1099,3056,1745],{"class":1317},[1099,3058,1748],{"class":1303},[1099,3060,1404],{"class":1317},[1099,3062,2546],{"class":1109},[1099,3064,1368],{"class":1317},[1099,3066,3067],{"class":1101,"line":1446},[1099,3068,1382],{"emptyLinePlaceholder":21},[1099,3070,3071,3074,3077,3079],{"class":1101,"line":1451},[1099,3072,3073],{"class":1600},"const",[1099,3075,3076],{"class":1313}," MODELS ",[1099,3078,1604],{"class":1317},[1099,3080,1330],{"class":1313},[1099,3082,3083,3086,3089,3091,3093,3096,3098,3100,3103,3105,3107,3110,3112],{"class":1101,"line":1461},[1099,3084,3085],{"class":1317},"  {",[1099,3087,3088],{"class":1323}," value",[1099,3090,1327],{"class":1317},[1099,3092,1404],{"class":1317},[1099,3094,3095],{"class":1109},"openai\u002Fgpt-5-nano",[1099,3097,1342],{"class":1317},[1099,3099,1729],{"class":1317},[1099,3101,3102],{"class":1323}," label",[1099,3104,1327],{"class":1317},[1099,3106,1404],{"class":1317},[1099,3108,3109],{"class":1109},"GPT-5 Nano",[1099,3111,1342],{"class":1317},[1099,3113,3114],{"class":1317}," },\n",[1099,3116,3117,3119,3121,3123,3125,3128,3130,3132,3134,3136,3138,3141,3143],{"class":1101,"line":1471},[1099,3118,3085],{"class":1317},[1099,3120,3088],{"class":1323},[1099,3122,1327],{"class":1317},[1099,3124,1404],{"class":1317},[1099,3126,3127],{"class":1109},"anthropic\u002Fclaude-haiku-4.5",[1099,3129,1342],{"class":1317},[1099,3131,1729],{"class":1317},[1099,3133,3102],{"class":1323},[1099,3135,1327],{"class":1317},[1099,3137,1404],{"class":1317},[1099,3139,3140],{"class":1109},"Claude Haiku 4.5",[1099,3142,1342],{"class":1317},[1099,3144,3114],{"class":1317},[1099,3146,3147,3149,3151,3153,3155,3158,3160,3162,3164,3166,3168,3171,3173],{"class":1101,"line":1487},[1099,3148,3085],{"class":1317},[1099,3150,3088],{"class":1323},[1099,3152,1327],{"class":1317},[1099,3154,1404],{"class":1317},[1099,3156,3157],{"class":1109},"google\u002Fgemini-3-flash",[1099,3159,1342],{"class":1317},[1099,3161,1729],{"class":1317},[1099,3163,3102],{"class":1323},[1099,3165,1327],{"class":1317},[1099,3167,1404],{"class":1317},[1099,3169,3170],{"class":1109},"Gemini 3 Flash",[1099,3172,1342],{"class":1317},[1099,3174,3175],{"class":1317}," }\n",[1099,3177,3178],{"class":1101,"line":1493},[1099,3179,3180],{"class":1313},"]\n",[1099,3182,3183],{"class":1101,"line":1498},[1099,3184,1382],{"emptyLinePlaceholder":21},[1099,3186,3187,3189,3191,3193,3195,3197,3199,3201,3203,3205],{"class":1101,"line":2287},[1099,3188,1304],{"class":1303},[1099,3190,1307],{"class":1303},[1099,3192,2510],{"class":1122},[1099,3194,1314],{"class":1313},[1099,3196,2609],{"class":1600},[1099,3198,1964],{"class":1317},[1099,3200,2614],{"class":1955},[1099,3202,1895],{"class":1317},[1099,3204,1838],{"class":1600},[1099,3206,1393],{"class":1317},[1099,3208,3209,3211,3213,3216,3218,3220,3222,3224,3226,3228,3230,3232,3234,3236,3238],{"class":1101,"line":2300},[1099,3210,2625],{"class":1600},[1099,3212,1723],{"class":1317},[1099,3214,3215],{"class":1313}," id",[1099,3217,1745],{"class":1317},[1099,3219,2635],{"class":1317},[1099,3221,2638],{"class":1303},[1099,3223,2920],{"class":1122},[1099,3225,1314],{"class":1323},[1099,3227,2614],{"class":1313},[1099,3229,1729],{"class":1317},[1099,3231,2581],{"class":1313},[1099,3233,1821],{"class":1317},[1099,3235,2653],{"class":1122},[1099,3237,1314],{"class":1323},[1099,3239,1318],{"class":1317},[1099,3241,3242,3245,3247,3249,3251,3254],{"class":1101,"line":2330},[1099,3243,3244],{"class":1323},"    id",[1099,3246,1327],{"class":1317},[1099,3248,2581],{"class":1313},[1099,3250,1821],{"class":1317},[1099,3252,3253],{"class":1122},"string",[1099,3255,2681],{"class":1323},[1099,3257,3258,3260,3262,3264,3266],{"class":1101,"line":2336},[1099,3259,2426],{"class":1317},[1099,3261,1895],{"class":1323},[1099,3263,1821],{"class":1317},[1099,3265,2692],{"class":1313},[1099,3267,1504],{"class":1323},[1099,3269,3270],{"class":1101,"line":2341},[1099,3271,1382],{"emptyLinePlaceholder":21},[1099,3273,3274,3276,3278,3281,3283,3286,3288,3290,3292,3294,3296,3298,3300,3302,3304,3306,3308],{"class":1101,"line":2373},[1099,3275,2625],{"class":1600},[1099,3277,1723],{"class":1317},[1099,3279,3280],{"class":1313}," model",[1099,3282,1729],{"class":1317},[1099,3284,3285],{"class":1313}," messages",[1099,3287,1745],{"class":1317},[1099,3289,2635],{"class":1317},[1099,3291,2638],{"class":1303},[1099,3293,2515],{"class":1122},[1099,3295,1314],{"class":1323},[1099,3297,2614],{"class":1313},[1099,3299,1729],{"class":1317},[1099,3301,2581],{"class":1313},[1099,3303,1821],{"class":1317},[1099,3305,2653],{"class":1122},[1099,3307,1314],{"class":1323},[1099,3309,1318],{"class":1317},[1099,3311,3312,3315,3317,3319,3321,3323,3325,3327,3330,3332,3335,3337,3340,3342,3345,3347,3350,3352,3355,3357,3359,3362,3364,3366,3368],{"class":1101,"line":2389},[1099,3313,3314],{"class":1323},"    model",[1099,3316,1327],{"class":1317},[1099,3318,2581],{"class":1313},[1099,3320,1821],{"class":1317},[1099,3322,3253],{"class":1122},[1099,3324,1818],{"class":1323},[1099,3326,1821],{"class":1317},[1099,3328,3329],{"class":1122},"refine",[1099,3331,1314],{"class":1323},[1099,3333,3334],{"class":1955},"value",[1099,3336,1838],{"class":1600},[1099,3338,3339],{"class":1313}," MODELS",[1099,3341,1821],{"class":1317},[1099,3343,3344],{"class":1122},"some",[1099,3346,1314],{"class":1323},[1099,3348,3349],{"class":1955},"m",[1099,3351,1838],{"class":1600},[1099,3353,3354],{"class":1313}," m",[1099,3356,1821],{"class":1317},[1099,3358,3334],{"class":1313},[1099,3360,3361],{"class":1317}," ===",[1099,3363,3088],{"class":1313},[1099,3365,1895],{"class":1323},[1099,3367,1729],{"class":1317},[1099,3369,1393],{"class":1317},[1099,3371,3372,3375,3377,3379,3382],{"class":1101,"line":2407},[1099,3373,3374],{"class":1323},"      message",[1099,3376,1327],{"class":1317},[1099,3378,1404],{"class":1317},[1099,3380,3381],{"class":1109},"Invalid model",[1099,3383,1368],{"class":1317},[1099,3385,3386,3389,3391],{"class":1101,"line":2423},[1099,3387,3388],{"class":1317},"    }",[1099,3390,1895],{"class":1323},[1099,3392,1345],{"class":1317},[1099,3394,3395,3398,3400,3402,3404,3407,3409,3412,3414,3416,3418,3420,3422],{"class":1101,"line":2431},[1099,3396,3397],{"class":1323},"    messages",[1099,3399,1327],{"class":1317},[1099,3401,2581],{"class":1313},[1099,3403,1821],{"class":1317},[1099,3405,3406],{"class":1122},"array",[1099,3408,1314],{"class":1323},[1099,3410,3411],{"class":1313},"z",[1099,3413,1821],{"class":1317},[1099,3415,2671],{"class":1122},[1099,3417,1572],{"class":1317},[1099,3419,2492],{"class":1105},[1099,3421,2678],{"class":1317},[1099,3423,1921],{"class":1323},[1099,3425,3427,3429,3431,3433,3435],{"class":1101,"line":3426},30,[1099,3428,2426],{"class":1317},[1099,3430,1895],{"class":1323},[1099,3432,1821],{"class":1317},[1099,3434,2692],{"class":1313},[1099,3436,1504],{"class":1323},[1099,3438,3440],{"class":1101,"line":3439},31,[1099,3441,1382],{"emptyLinePlaceholder":21},[1099,3443,3445],{"class":1101,"line":3444},32,[1099,3446,3447],{"class":1483},"  \u002F\u002F Fetch the chat from the database\n",[1099,3449,3451,3453,3455,3457,3459,3461,3463,3466,3468,3470,3472,3475,3477],{"class":1101,"line":3450},33,[1099,3452,2625],{"class":1600},[1099,3454,2802],{"class":1313},[1099,3456,2635],{"class":1317},[1099,3458,2638],{"class":1303},[1099,3460,2453],{"class":1313},[1099,3462,1821],{"class":1317},[1099,3464,3465],{"class":1313},"query",[1099,3467,1821],{"class":1317},[1099,3469,1800],{"class":1313},[1099,3471,1821],{"class":1317},[1099,3473,3474],{"class":1122},"findFirst",[1099,3476,1314],{"class":1323},[1099,3478,1318],{"class":1317},[1099,3480,3482,3485,3487,3489,3491,3493,3495,3497,3499,3501,3503,3505,3507,3509,3511,3513,3515,3518,3521],{"class":1101,"line":3481},34,[1099,3483,3484],{"class":1122},"    where",[1099,3486,1327],{"class":1317},[1099,3488,1964],{"class":1317},[1099,3490,262],{"class":1955},[1099,3492,1729],{"class":1317},[1099,3494,1723],{"class":1317},[1099,3496,2943],{"class":1955},[1099,3498,1959],{"class":1317},[1099,3500,1838],{"class":1600},[1099,3502,2943],{"class":1122},[1099,3504,1314],{"class":1323},[1099,3506,262],{"class":1313},[1099,3508,1821],{"class":1317},[1099,3510,2030],{"class":1313},[1099,3512,1729],{"class":1317},[1099,3514,3215],{"class":1313},[1099,3516,3517],{"class":1303}," as",[1099,3519,3520],{"class":1105}," string",[1099,3522,1504],{"class":1323},[1099,3524,3526,3528],{"class":1101,"line":3525},35,[1099,3527,2426],{"class":1317},[1099,3529,1504],{"class":1323},[1099,3531,3533],{"class":1101,"line":3532},36,[1099,3534,1382],{"emptyLinePlaceholder":21},[1099,3536,3538,3541,3543,3546,3548,3551],{"class":1101,"line":3537},37,[1099,3539,3540],{"class":1303},"  if",[1099,3542,1964],{"class":1323},[1099,3544,3545],{"class":1317},"!",[1099,3547,262],{"class":1313},[1099,3549,3550],{"class":1323},") ",[1099,3552,1318],{"class":1317},[1099,3554,3556,3559,3561,3563,3565,3568,3570,3574,3576,3579,3581,3583,3586,3588,3590],{"class":1101,"line":3555},38,[1099,3557,3558],{"class":1303},"    throw",[1099,3560,2911],{"class":1122},[1099,3562,1314],{"class":1323},[1099,3564,1878],{"class":1317},[1099,3566,3567],{"class":1323}," statusCode",[1099,3569,1327],{"class":1317},[1099,3571,3573],{"class":3572},"sbssI"," 404",[1099,3575,1729],{"class":1317},[1099,3577,3578],{"class":1323}," statusMessage",[1099,3580,1327],{"class":1317},[1099,3582,1404],{"class":1317},[1099,3584,3585],{"class":1109},"Chat not found",[1099,3587,1342],{"class":1317},[1099,3589,1745],{"class":1317},[1099,3591,1504],{"class":1323},[1099,3593,3595],{"class":1101,"line":3594},39,[1099,3596,3597],{"class":1317},"  }\n",[1099,3599,3601],{"class":1101,"line":3600},40,[1099,3602,1382],{"emptyLinePlaceholder":21},[1099,3604,3606],{"class":1101,"line":3605},41,[1099,3607,3608],{"class":1483},"  \u002F\u002F Generate a title for the chat if it doesn't have one\n",[1099,3610,3612,3614,3616,3618,3620,3622,3625,3627],{"class":1101,"line":3611},42,[1099,3613,3540],{"class":1303},[1099,3615,1964],{"class":1323},[1099,3617,3545],{"class":1317},[1099,3619,262],{"class":1313},[1099,3621,1821],{"class":1317},[1099,3623,3624],{"class":1313},"title",[1099,3626,3550],{"class":1323},[1099,3628,1318],{"class":1317},[1099,3630,3632,3635,3637,3639,3641,3644,3646,3648,3650,3653,3655],{"class":1101,"line":3631},43,[1099,3633,3634],{"class":1600},"    const",[1099,3636,1723],{"class":1317},[1099,3638,1732],{"class":1323},[1099,3640,1327],{"class":1317},[1099,3642,3643],{"class":1313}," title",[1099,3645,1745],{"class":1317},[1099,3647,2635],{"class":1317},[1099,3649,2638],{"class":1303},[1099,3651,3652],{"class":1122}," generateText",[1099,3654,1314],{"class":1323},[1099,3656,1318],{"class":1317},[1099,3658,3660,3663,3665,3667,3669,3671],{"class":1101,"line":3659},44,[1099,3661,3662],{"class":1323},"      model",[1099,3664,1327],{"class":1317},[1099,3666,1404],{"class":1317},[1099,3668,3127],{"class":1109},[1099,3670,1342],{"class":1317},[1099,3672,1345],{"class":1317},[1099,3674,3676,3679,3681,3684,3687,3690],{"class":1101,"line":3675},45,[1099,3677,3678],{"class":1323},"      system",[1099,3680,1327],{"class":1317},[1099,3682,3683],{"class":1317}," `",[1099,3685,3686],{"class":1109},"Generate a short title (max 30 characters) based on the user's message. No quotes or punctuation.",[1099,3688,3689],{"class":1317},"`",[1099,3691,1345],{"class":1317},[1099,3693,3695,3698,3700,3703,3705,3708,3710,3712,3715,3718],{"class":1101,"line":3694},46,[1099,3696,3697],{"class":1323},"      prompt",[1099,3699,1327],{"class":1317},[1099,3701,3702],{"class":1313}," JSON",[1099,3704,1821],{"class":1317},[1099,3706,3707],{"class":1122},"stringify",[1099,3709,1314],{"class":1323},[1099,3711,2009],{"class":1313},[1099,3713,3714],{"class":1323},"[",[1099,3716,3717],{"class":3572},"0",[1099,3719,2333],{"class":1323},[1099,3721,3723,3725],{"class":1101,"line":3722},47,[1099,3724,3388],{"class":1317},[1099,3726,1504],{"class":1323},[1099,3728,3730],{"class":1101,"line":3729},48,[1099,3731,1382],{"emptyLinePlaceholder":21},[1099,3733,3735,3738,3740,3742,3745,3747,3749,3751,3753,3755,3757,3760,3762,3764,3766,3768,3770,3772,3775,3777,3780,3782,3784,3786,3788,3790,3792,3794,3796],{"class":1101,"line":3734},49,[1099,3736,3737],{"class":1303},"    await",[1099,3739,2453],{"class":1313},[1099,3741,1821],{"class":1317},[1099,3743,3744],{"class":1122},"update",[1099,3746,1314],{"class":1323},[1099,3748,2729],{"class":1313},[1099,3750,1821],{"class":1317},[1099,3752,1800],{"class":1313},[1099,3754,1895],{"class":1323},[1099,3756,1821],{"class":1317},[1099,3758,3759],{"class":1122},"set",[1099,3761,1314],{"class":1323},[1099,3763,1878],{"class":1317},[1099,3765,3643],{"class":1313},[1099,3767,1745],{"class":1317},[1099,3769,1895],{"class":1323},[1099,3771,1821],{"class":1317},[1099,3773,3774],{"class":1122},"where",[1099,3776,1314],{"class":1323},[1099,3778,3779],{"class":1122},"eq",[1099,3781,1314],{"class":1323},[1099,3783,2729],{"class":1313},[1099,3785,1821],{"class":1317},[1099,3787,1800],{"class":1313},[1099,3789,1821],{"class":1317},[1099,3791,2030],{"class":1313},[1099,3793,1729],{"class":1317},[1099,3795,3215],{"class":1313},[1099,3797,1985],{"class":1323},[1099,3799,3801],{"class":1101,"line":3800},50,[1099,3802,3597],{"class":1317},[1099,3804,3806],{"class":1101,"line":3805},51,[1099,3807,1382],{"emptyLinePlaceholder":21},[1099,3809,3811],{"class":1101,"line":3810},52,[1099,3812,3813],{"class":1483},"  \u002F\u002F Save the user message if it's a follow-up\n",[1099,3815,3817,3819,3822,3824,3826,3828,3830,3832,3835,3838,3841],{"class":1101,"line":3816},53,[1099,3818,2625],{"class":1600},[1099,3820,3821],{"class":1313}," lastMessage",[1099,3823,2635],{"class":1317},[1099,3825,3285],{"class":1313},[1099,3827,3714],{"class":1323},[1099,3829,2009],{"class":1313},[1099,3831,1821],{"class":1317},[1099,3833,3834],{"class":1313},"length",[1099,3836,3837],{"class":1317}," -",[1099,3839,3840],{"class":3572}," 1",[1099,3842,3180],{"class":1323},[1099,3844,3846,3848,3850,3853,3856,3858,3860,3862,3864,3866,3869,3871,3873,3875,3878,3880,3882],{"class":1101,"line":3845},54,[1099,3847,3540],{"class":1303},[1099,3849,1964],{"class":1323},[1099,3851,3852],{"class":1313},"lastMessage",[1099,3854,3855],{"class":1317},"?.",[1099,3857,2142],{"class":1313},[1099,3859,3361],{"class":1317},[1099,3861,1404],{"class":1317},[1099,3863,2160],{"class":1109},[1099,3865,1342],{"class":1317},[1099,3867,3868],{"class":1317}," &&",[1099,3870,3285],{"class":1313},[1099,3872,1821],{"class":1317},[1099,3874,3834],{"class":1313},[1099,3876,3877],{"class":1317}," >",[1099,3879,3840],{"class":3572},[1099,3881,3550],{"class":1323},[1099,3883,1318],{"class":1317},[1099,3885,3887,3889,3891,3893,3895,3897,3899,3901,3903,3905,3907,3909,3911],{"class":1101,"line":3886},55,[1099,3888,3737],{"class":1303},[1099,3890,2453],{"class":1313},[1099,3892,1821],{"class":1317},[1099,3894,2724],{"class":1122},[1099,3896,1314],{"class":1323},[1099,3898,2729],{"class":1313},[1099,3900,1821],{"class":1317},[1099,3902,2009],{"class":1313},[1099,3904,1895],{"class":1323},[1099,3906,1821],{"class":1317},[1099,3908,2740],{"class":1122},[1099,3910,1314],{"class":1323},[1099,3912,1318],{"class":1317},[1099,3914,3916,3919,3921,3923],{"class":1101,"line":3915},56,[1099,3917,3918],{"class":1323},"      chatId",[1099,3920,1327],{"class":1317},[1099,3922,3215],{"class":1313},[1099,3924,1345],{"class":1317},[1099,3926,3928,3931,3933,3935,3937,3939],{"class":1101,"line":3927},57,[1099,3929,3930],{"class":1323},"      role",[1099,3932,1327],{"class":1317},[1099,3934,1404],{"class":1317},[1099,3936,2160],{"class":1109},[1099,3938,1342],{"class":1317},[1099,3940,1345],{"class":1317},[1099,3942,3944,3947,3949,3951,3953],{"class":1101,"line":3943},58,[1099,3945,3946],{"class":1323},"      parts",[1099,3948,1327],{"class":1317},[1099,3950,3821],{"class":1313},[1099,3952,1821],{"class":1317},[1099,3954,2837],{"class":1313},[1099,3956,3958,3960],{"class":1101,"line":3957},59,[1099,3959,3388],{"class":1317},[1099,3961,1504],{"class":1323},[1099,3963,3965],{"class":1101,"line":3964},60,[1099,3966,3597],{"class":1317},[1099,3968,3970],{"class":1101,"line":3969},61,[1099,3971,1382],{"emptyLinePlaceholder":21},[1099,3973,3975],{"class":1101,"line":3974},62,[1099,3976,3977],{"class":1483},"  \u002F\u002F Create the streaming response\n",[1099,3979,3981,3983,3986,3988,3991,3993],{"class":1101,"line":3980},63,[1099,3982,2625],{"class":1600},[1099,3984,3985],{"class":1313}," stream",[1099,3987,2635],{"class":1317},[1099,3989,3990],{"class":1122}," createUIMessageStream",[1099,3992,1314],{"class":1323},[1099,3994,1318],{"class":1317},[1099,3996,3998,4001,4003,4006,4008,4011,4013,4015],{"class":1101,"line":3997},64,[1099,3999,4000],{"class":1122},"    execute",[1099,4002,1327],{"class":1317},[1099,4004,4005],{"class":1600}," async",[1099,4007,1952],{"class":1317},[1099,4009,4010],{"class":1955}," writer",[1099,4012,1959],{"class":1317},[1099,4014,1838],{"class":1600},[1099,4016,1393],{"class":1317},[1099,4018,4020,4023,4026,4028,4031,4033],{"class":1101,"line":4019},65,[1099,4021,4022],{"class":1600},"      const",[1099,4024,4025],{"class":1313}," result",[1099,4027,2635],{"class":1317},[1099,4029,4030],{"class":1122}," streamText",[1099,4032,1314],{"class":1323},[1099,4034,1318],{"class":1317},[1099,4036,4038,4041],{"class":1101,"line":4037},66,[1099,4039,4040],{"class":1313},"        model",[1099,4042,1345],{"class":1317},[1099,4044,4046,4049,4051,4053,4056,4058],{"class":1101,"line":4045},67,[1099,4047,4048],{"class":1323},"        system",[1099,4050,1327],{"class":1317},[1099,4052,3683],{"class":1317},[1099,4054,4055],{"class":1109},"You are a helpful AI assistant. Be concise and friendly.",[1099,4057,3689],{"class":1317},[1099,4059,1345],{"class":1317},[1099,4061,4063,4066,4068,4070,4073,4075,4077,4079],{"class":1101,"line":4062},68,[1099,4064,4065],{"class":1323},"        messages",[1099,4067,1327],{"class":1317},[1099,4069,2638],{"class":1303},[1099,4071,4072],{"class":1122}," convertToModelMessages",[1099,4074,1314],{"class":1323},[1099,4076,2009],{"class":1313},[1099,4078,1895],{"class":1323},[1099,4080,1345],{"class":1317},[1099,4082,4084,4087,4089],{"class":1101,"line":4083},69,[1099,4085,4086],{"class":1323},"        providerOptions",[1099,4088,1327],{"class":1317},[1099,4090,1393],{"class":1317},[1099,4092,4094,4097,4099],{"class":1101,"line":4093},70,[1099,4095,4096],{"class":1323},"          anthropic",[1099,4098,1327],{"class":1317},[1099,4100,1393],{"class":1317},[1099,4102,4104,4107,4109],{"class":1101,"line":4103},71,[1099,4105,4106],{"class":1323},"            thinking",[1099,4108,1327],{"class":1317},[1099,4110,1393],{"class":1317},[1099,4112,4114,4117,4119,4121,4124,4126],{"class":1101,"line":4113},72,[1099,4115,4116],{"class":1323},"              type",[1099,4118,1327],{"class":1317},[1099,4120,1404],{"class":1317},[1099,4122,4123],{"class":1109},"enabled",[1099,4125,1342],{"class":1317},[1099,4127,1345],{"class":1317},[1099,4129,4131,4134,4136],{"class":1101,"line":4130},73,[1099,4132,4133],{"class":1323},"              budgetTokens",[1099,4135,1327],{"class":1317},[1099,4137,4138],{"class":3572}," 2048\n",[1099,4140,4142],{"class":1101,"line":4141},74,[1099,4143,4144],{"class":1317},"            }\n",[1099,4146,4148],{"class":1101,"line":4147},75,[1099,4149,4150],{"class":1317},"          },\n",[1099,4152,4154,4157,4159],{"class":1101,"line":4153},76,[1099,4155,4156],{"class":1323},"          google",[1099,4158,1327],{"class":1317},[1099,4160,1393],{"class":1317},[1099,4162,4164,4167,4169],{"class":1101,"line":4163},77,[1099,4165,4166],{"class":1323},"            thinkingConfig",[1099,4168,1327],{"class":1317},[1099,4170,1393],{"class":1317},[1099,4172,4174,4177,4179,4182],{"class":1101,"line":4173},78,[1099,4175,4176],{"class":1323},"              includeThoughts",[1099,4178,1327],{"class":1317},[1099,4180,4181],{"class":1479}," true",[1099,4183,1345],{"class":1317},[1099,4185,4187,4190,4192,4194,4197],{"class":1101,"line":4186},79,[1099,4188,4189],{"class":1323},"              thinkingLevel",[1099,4191,1327],{"class":1317},[1099,4193,1404],{"class":1317},[1099,4195,4196],{"class":1109},"low",[1099,4198,1368],{"class":1317},[1099,4200,4202],{"class":1101,"line":4201},80,[1099,4203,4144],{"class":1317},[1099,4205,4207],{"class":1101,"line":4206},81,[1099,4208,4150],{"class":1317},[1099,4210,4212,4215,4217],{"class":1101,"line":4211},82,[1099,4213,4214],{"class":1323},"          openai",[1099,4216,1327],{"class":1317},[1099,4218,1393],{"class":1317},[1099,4220,4222,4225,4227,4229,4231,4233],{"class":1101,"line":4221},83,[1099,4223,4224],{"class":1323},"            reasoningEffort",[1099,4226,1327],{"class":1317},[1099,4228,1404],{"class":1317},[1099,4230,4196],{"class":1109},[1099,4232,1342],{"class":1317},[1099,4234,1345],{"class":1317},[1099,4236,4238,4241,4243,4245,4248],{"class":1101,"line":4237},84,[1099,4239,4240],{"class":1323},"            reasoningSummary",[1099,4242,1327],{"class":1317},[1099,4244,1404],{"class":1317},[1099,4246,4247],{"class":1109},"detailed",[1099,4249,1368],{"class":1317},[1099,4251,4253],{"class":1101,"line":4252},85,[1099,4254,4255],{"class":1317},"          }\n",[1099,4257,4259],{"class":1101,"line":4258},86,[1099,4260,4261],{"class":1317},"        }\n",[1099,4263,4265,4268],{"class":1101,"line":4264},87,[1099,4266,4267],{"class":1317},"      }",[1099,4269,1504],{"class":1323},[1099,4271,4273],{"class":1101,"line":4272},88,[1099,4274,1382],{"emptyLinePlaceholder":21},[1099,4276,4278],{"class":1101,"line":4277},89,[1099,4279,4280],{"class":1483},"      \u002F\u002F Notify the client that a title was generated\n",[1099,4282,4284,4287,4289,4291,4293,4295,4297,4299],{"class":1101,"line":4283},90,[1099,4285,4286],{"class":1303},"      if",[1099,4288,1964],{"class":1323},[1099,4290,3545],{"class":1317},[1099,4292,262],{"class":1313},[1099,4294,1821],{"class":1317},[1099,4296,3624],{"class":1313},[1099,4298,3550],{"class":1323},[1099,4300,1318],{"class":1317},[1099,4302,4304,4307,4309,4312,4314],{"class":1101,"line":4303},91,[1099,4305,4306],{"class":1313},"        writer",[1099,4308,1821],{"class":1317},[1099,4310,4311],{"class":1122},"write",[1099,4313,1314],{"class":1323},[1099,4315,1318],{"class":1317},[1099,4317,4319,4322,4324,4326,4329,4331],{"class":1101,"line":4318},92,[1099,4320,4321],{"class":1323},"          type",[1099,4323,1327],{"class":1317},[1099,4325,1404],{"class":1317},[1099,4327,4328],{"class":1109},"data-chat-title",[1099,4330,1342],{"class":1317},[1099,4332,1345],{"class":1317},[1099,4334,4336,4339,4341,4343,4345,4347,4349,4352,4354],{"class":1101,"line":4335},93,[1099,4337,4338],{"class":1323},"          data",[1099,4340,1327],{"class":1317},[1099,4342,1723],{"class":1317},[1099,4344,2630],{"class":1323},[1099,4346,1327],{"class":1317},[1099,4348,1404],{"class":1317},[1099,4350,4351],{"class":1109},"Title generated",[1099,4353,1342],{"class":1317},[1099,4355,3114],{"class":1317},[1099,4357,4359,4362,4364],{"class":1101,"line":4358},94,[1099,4360,4361],{"class":1323},"          transient",[1099,4363,1327],{"class":1317},[1099,4365,4366],{"class":1479}," true\n",[1099,4368,4370,4373],{"class":1101,"line":4369},95,[1099,4371,4372],{"class":1317},"        }",[1099,4374,1504],{"class":1323},[1099,4376,4378],{"class":1101,"line":4377},96,[1099,4379,4380],{"class":1317},"      }\n",[1099,4382,4384],{"class":1101,"line":4383},97,[1099,4385,1382],{"emptyLinePlaceholder":21},[1099,4387,4389,4392,4394,4397,4399,4402,4404,4407],{"class":1101,"line":4388},98,[1099,4390,4391],{"class":1313},"      writer",[1099,4393,1821],{"class":1317},[1099,4395,4396],{"class":1122},"merge",[1099,4398,1314],{"class":1323},[1099,4400,4401],{"class":1313},"result",[1099,4403,1821],{"class":1317},[1099,4405,4406],{"class":1122},"toUIMessageStream",[1099,4408,1921],{"class":1323},[1099,4410,4412],{"class":1101,"line":4411},99,[1099,4413,4414],{"class":1317},"    },\n",[1099,4416,4418,4421,4423,4425,4427,4429,4431,4433],{"class":1101,"line":4417},100,[1099,4419,4420],{"class":1122},"    onFinish",[1099,4422,1327],{"class":1317},[1099,4424,4005],{"class":1600},[1099,4426,1952],{"class":1317},[1099,4428,3285],{"class":1955},[1099,4430,1959],{"class":1317},[1099,4432,1838],{"class":1600},[1099,4434,1393],{"class":1317},[1099,4436,4438],{"class":1101,"line":4437},101,[1099,4439,4440],{"class":1483},"      \u002F\u002F Save the assistant's response to the database\n",[1099,4442,4444,4447,4449,4451,4453,4455,4457,4459,4461,4463,4465,4467,4469,4471,4473,4476,4478,4481,4483,4485],{"class":1101,"line":4443},102,[1099,4445,4446],{"class":1303},"      await",[1099,4448,2453],{"class":1313},[1099,4450,1821],{"class":1317},[1099,4452,2724],{"class":1122},[1099,4454,1314],{"class":1323},[1099,4456,2729],{"class":1313},[1099,4458,1821],{"class":1317},[1099,4460,2009],{"class":1313},[1099,4462,1895],{"class":1323},[1099,4464,1821],{"class":1317},[1099,4466,2740],{"class":1122},[1099,4468,1314],{"class":1323},[1099,4470,2009],{"class":1313},[1099,4472,1821],{"class":1317},[1099,4474,4475],{"class":1122},"map",[1099,4477,1314],{"class":1323},[1099,4479,4480],{"class":1955},"message",[1099,4482,1838],{"class":1600},[1099,4484,1964],{"class":1323},[1099,4486,1318],{"class":1317},[1099,4488,4490,4493,4495,4497,4499,4501],{"class":1101,"line":4489},103,[1099,4491,4492],{"class":1323},"        chatId",[1099,4494,1327],{"class":1317},[1099,4496,2802],{"class":1313},[1099,4498,1821],{"class":1317},[1099,4500,2030],{"class":1313},[1099,4502,1345],{"class":1317},[1099,4504,4506,4509,4511,4513,4515,4517,4519,4521,4523,4525,4528,4530,4532,4534],{"class":1101,"line":4505},104,[1099,4507,4508],{"class":1323},"        role",[1099,4510,1327],{"class":1317},[1099,4512,2630],{"class":1313},[1099,4514,1821],{"class":1317},[1099,4516,2142],{"class":1313},[1099,4518,3517],{"class":1303},[1099,4520,1404],{"class":1317},[1099,4522,2160],{"class":1109},[1099,4524,1342],{"class":1317},[1099,4526,4527],{"class":1317}," |",[1099,4529,1404],{"class":1317},[1099,4531,2169],{"class":1109},[1099,4533,1342],{"class":1317},[1099,4535,1345],{"class":1317},[1099,4537,4539,4542,4544,4546,4548],{"class":1101,"line":4538},105,[1099,4540,4541],{"class":1323},"        parts",[1099,4543,1327],{"class":1317},[1099,4545,2630],{"class":1313},[1099,4547,1821],{"class":1317},[1099,4549,2837],{"class":1313},[1099,4551,4553,4555],{"class":1101,"line":4552},106,[1099,4554,4267],{"class":1317},[1099,4556,4557],{"class":1323},")))\n",[1099,4559,4561],{"class":1101,"line":4560},107,[1099,4562,1490],{"class":1317},[1099,4564,4566,4568],{"class":1101,"line":4565},108,[1099,4567,2426],{"class":1317},[1099,4569,1504],{"class":1323},[1099,4571,4573],{"class":1101,"line":4572},109,[1099,4574,1382],{"emptyLinePlaceholder":21},[1099,4576,4578,4580,4583,4585,4587,4589,4591],{"class":1101,"line":4577},110,[1099,4579,2852],{"class":1303},[1099,4581,4582],{"class":1122}," createUIMessageStreamResponse",[1099,4584,1314],{"class":1323},[1099,4586,1878],{"class":1317},[1099,4588,3985],{"class":1313},[1099,4590,1745],{"class":1317},[1099,4592,1504],{"class":1323},[1099,4594,4596,4598],{"class":1101,"line":4595},111,[1099,4597,1501],{"class":1317},[1099,4599,1504],{"class":1313},[989,4601,4602],{},"Here's what each part does:",[989,4604,4605],{},[1007,4606,4607],{},"AI Gateway",[989,4609,4610,4611,4614],{},"Thanks to ",[1043,4612,1080],{"href":1078,"rel":4613},[1047],", we can use any AI model supported by the gateway just by specifying the model name.",[989,4616,4617],{},[1007,4618,4619],{},"Automatic Title Generation",[989,4621,4622,4623,4630],{},"When a chat doesn't have a title yet, we use ",[1043,4624,4627],{"href":4625,"rel":4626},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-core\u002Fgenerate-text#generatetext",[1047],[1049,4628,4629],{},"generateText"," to create one based on the first message. This provides a better UX by showing meaningful titles in the chat history instead of \"Untitled\".",[989,4632,4633],{},[1007,4634,4635],{},"Streaming with streamText",[989,4637,4638,4639,4644],{},"The ",[1043,4640,4642],{"href":2871,"rel":4641},[1047],[1049,4643,2875],{}," function generates a streaming response from the AI model. Key options include:",[1001,4646,4647,4653,4658],{},[1004,4648,4649,4652],{},[1049,4650,4651],{},"model",": The AI model to use",[1004,4654,4655,4657],{},[1049,4656,2178],{},": Instructions that guide the AI's behavior",[1004,4659,4660,4662],{},[1049,4661,2009],{},": The conversation history",[989,4664,4665],{},[1007,4666,4667],{},"UIMessageStream",[989,4669,4638,4670,1052,4676,4682],{},[1043,4671,4674],{"href":4672,"rel":4673},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream#createuimessagestream",[1047],[1049,4675,2883],{},[1043,4677,4680],{"href":4678,"rel":4679},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream-response#createuimessagestreamresponse",[1047],[1049,4681,2891],{}," functions create a stream that the AI SDK client can consume. The response streams chunks as they're generated, creating the real-time typing effect.",[989,4684,4638,4685,4688,4689,4691,4692,4695],{},[1049,4686,4687],{},"writer.write()"," method allows sending custom data events to the client (like ",[1049,4690,4328],{},"), while ",[1049,4693,4694],{},"onFinish"," is called when streaming completes, perfect for persisting the assistant's response.",[1127,4697,4699],{"id":4698},"fetching-a-chat","Fetching a chat",[989,4701,4702],{},"Add an endpoint to fetch existing chat data from your database:",[1290,4704,4705],{},[1090,4706,4709],{"className":1294,"code":4707,"filename":4708,"language":1296,"meta":1095,"style":1095},"import { createError, defineEventHandler, getValidatedRouterParams } from 'h3'\nimport { asc, eq } from 'drizzle-orm'\nimport { db, schema } from 'hub:db'\nimport { z } from 'zod'\n\nexport default defineEventHandler(async (event) => {\n  const { id } = await getValidatedRouterParams(event, z.object({\n    id: z.string()\n  }).parse)\n\n  const chat = await db.query.chats.findFirst({\n    where: (eq(schema.chats.id, id)),\n    with: {\n      messages: {\n        orderBy: () => asc(schema.messages.createdAt)\n      }\n    }\n  })\n\n  if (!chat) {\n    throw createError({ statusCode: 404, statusMessage: 'Chat not found' })\n  }\n\n  return chat\n})\n","server\u002Fapi\u002Fchats\u002F[id].get.ts",[1049,4710,4711,4737,4760,4782,4800,4804,4826,4858,4872,4884,4888,4916,4947,4956,4965,4994,4998,5002,5008,5012,5026,5058,5062,5066,5072],{"__ignoreMap":1095},[1099,4712,4713,4715,4717,4719,4721,4723,4725,4727,4729,4731,4733,4735],{"class":1101,"line":1102},[1099,4714,1720],{"class":1303},[1099,4716,1723],{"class":1317},[1099,4718,2911],{"class":1313},[1099,4720,1729],{"class":1317},[1099,4722,2510],{"class":1313},[1099,4724,1729],{"class":1317},[1099,4726,2920],{"class":1313},[1099,4728,1745],{"class":1317},[1099,4730,1748],{"class":1303},[1099,4732,1404],{"class":1317},[1099,4734,1127],{"class":1109},[1099,4736,1368],{"class":1317},[1099,4738,4739,4741,4743,4746,4748,4750,4752,4754,4756,4758],{"class":1101,"line":1119},[1099,4740,1720],{"class":1303},[1099,4742,1723],{"class":1317},[1099,4744,4745],{"class":1313}," asc",[1099,4747,1729],{"class":1317},[1099,4749,2943],{"class":1313},[1099,4751,1745],{"class":1317},[1099,4753,1748],{"class":1303},[1099,4755,1404],{"class":1317},[1099,4757,1773],{"class":1109},[1099,4759,1368],{"class":1317},[1099,4761,4762,4764,4766,4768,4770,4772,4774,4776,4778,4780],{"class":1101,"line":1333},[1099,4763,1720],{"class":1303},[1099,4765,1723],{"class":1317},[1099,4767,2453],{"class":1313},[1099,4769,1729],{"class":1317},[1099,4771,2561],{"class":1313},[1099,4773,1745],{"class":1317},[1099,4775,1748],{"class":1303},[1099,4777,1404],{"class":1317},[1099,4779,2570],{"class":1109},[1099,4781,1368],{"class":1317},[1099,4783,4784,4786,4788,4790,4792,4794,4796,4798],{"class":1101,"line":1348},[1099,4785,1720],{"class":1303},[1099,4787,1723],{"class":1317},[1099,4789,2581],{"class":1313},[1099,4791,1745],{"class":1317},[1099,4793,1748],{"class":1303},[1099,4795,1404],{"class":1317},[1099,4797,2590],{"class":1109},[1099,4799,1368],{"class":1317},[1099,4801,4802],{"class":1101,"line":1360},[1099,4803,1382],{"emptyLinePlaceholder":21},[1099,4805,4806,4808,4810,4812,4814,4816,4818,4820,4822,4824],{"class":1101,"line":1371},[1099,4807,1304],{"class":1303},[1099,4809,1307],{"class":1303},[1099,4811,2510],{"class":1122},[1099,4813,1314],{"class":1313},[1099,4815,2609],{"class":1600},[1099,4817,1964],{"class":1317},[1099,4819,2614],{"class":1955},[1099,4821,1895],{"class":1317},[1099,4823,1838],{"class":1600},[1099,4825,1393],{"class":1317},[1099,4827,4828,4830,4832,4834,4836,4838,4840,4842,4844,4846,4848,4850,4852,4854,4856],{"class":1101,"line":1379},[1099,4829,2625],{"class":1600},[1099,4831,1723],{"class":1317},[1099,4833,3215],{"class":1313},[1099,4835,1745],{"class":1317},[1099,4837,2635],{"class":1317},[1099,4839,2638],{"class":1303},[1099,4841,2920],{"class":1122},[1099,4843,1314],{"class":1323},[1099,4845,2614],{"class":1313},[1099,4847,1729],{"class":1317},[1099,4849,2581],{"class":1313},[1099,4851,1821],{"class":1317},[1099,4853,2653],{"class":1122},[1099,4855,1314],{"class":1323},[1099,4857,1318],{"class":1317},[1099,4859,4860,4862,4864,4866,4868,4870],{"class":1101,"line":1385},[1099,4861,3244],{"class":1323},[1099,4863,1327],{"class":1317},[1099,4865,2581],{"class":1313},[1099,4867,1821],{"class":1317},[1099,4869,3253],{"class":1122},[1099,4871,2681],{"class":1323},[1099,4873,4874,4876,4878,4880,4882],{"class":1101,"line":1396},[1099,4875,2426],{"class":1317},[1099,4877,1895],{"class":1323},[1099,4879,1821],{"class":1317},[1099,4881,2692],{"class":1313},[1099,4883,1504],{"class":1323},[1099,4885,4886],{"class":1101,"line":1412},[1099,4887,1382],{"emptyLinePlaceholder":21},[1099,4889,4890,4892,4894,4896,4898,4900,4902,4904,4906,4908,4910,4912,4914],{"class":1101,"line":1418},[1099,4891,2625],{"class":1600},[1099,4893,2802],{"class":1313},[1099,4895,2635],{"class":1317},[1099,4897,2638],{"class":1303},[1099,4899,2453],{"class":1313},[1099,4901,1821],{"class":1317},[1099,4903,3465],{"class":1313},[1099,4905,1821],{"class":1317},[1099,4907,1800],{"class":1313},[1099,4909,1821],{"class":1317},[1099,4911,3474],{"class":1122},[1099,4913,1314],{"class":1323},[1099,4915,1318],{"class":1317},[1099,4917,4918,4920,4922,4924,4926,4928,4930,4932,4934,4936,4938,4940,4942,4945],{"class":1101,"line":1423},[1099,4919,3484],{"class":1323},[1099,4921,1327],{"class":1317},[1099,4923,1964],{"class":1323},[1099,4925,3779],{"class":1122},[1099,4927,1314],{"class":1323},[1099,4929,2729],{"class":1313},[1099,4931,1821],{"class":1317},[1099,4933,1800],{"class":1313},[1099,4935,1821],{"class":1317},[1099,4937,2030],{"class":1313},[1099,4939,1729],{"class":1317},[1099,4941,3215],{"class":1313},[1099,4943,4944],{"class":1323},"))",[1099,4946,1345],{"class":1317},[1099,4948,4949,4952,4954],{"class":1101,"line":1446},[1099,4950,4951],{"class":1323},"    with",[1099,4953,1327],{"class":1317},[1099,4955,1393],{"class":1317},[1099,4957,4958,4961,4963],{"class":1101,"line":1451},[1099,4959,4960],{"class":1323},"      messages",[1099,4962,1327],{"class":1317},[1099,4964,1393],{"class":1317},[1099,4966,4967,4970,4972,4975,4977,4979,4981,4983,4985,4987,4989,4992],{"class":1101,"line":1461},[1099,4968,4969],{"class":1122},"        orderBy",[1099,4971,1327],{"class":1317},[1099,4973,4974],{"class":1317}," ()",[1099,4976,1838],{"class":1600},[1099,4978,4745],{"class":1122},[1099,4980,1314],{"class":1323},[1099,4982,2729],{"class":1313},[1099,4984,1821],{"class":1317},[1099,4986,2009],{"class":1313},[1099,4988,1821],{"class":1317},[1099,4990,4991],{"class":1313},"createdAt",[1099,4993,1504],{"class":1323},[1099,4995,4996],{"class":1101,"line":1471},[1099,4997,4380],{"class":1317},[1099,4999,5000],{"class":1101,"line":1487},[1099,5001,1490],{"class":1317},[1099,5003,5004,5006],{"class":1101,"line":1493},[1099,5005,2426],{"class":1317},[1099,5007,1504],{"class":1323},[1099,5009,5010],{"class":1101,"line":1498},[1099,5011,1382],{"emptyLinePlaceholder":21},[1099,5013,5014,5016,5018,5020,5022,5024],{"class":1101,"line":2287},[1099,5015,3540],{"class":1303},[1099,5017,1964],{"class":1323},[1099,5019,3545],{"class":1317},[1099,5021,262],{"class":1313},[1099,5023,3550],{"class":1323},[1099,5025,1318],{"class":1317},[1099,5027,5028,5030,5032,5034,5036,5038,5040,5042,5044,5046,5048,5050,5052,5054,5056],{"class":1101,"line":2300},[1099,5029,3558],{"class":1303},[1099,5031,2911],{"class":1122},[1099,5033,1314],{"class":1323},[1099,5035,1878],{"class":1317},[1099,5037,3567],{"class":1323},[1099,5039,1327],{"class":1317},[1099,5041,3573],{"class":3572},[1099,5043,1729],{"class":1317},[1099,5045,3578],{"class":1323},[1099,5047,1327],{"class":1317},[1099,5049,1404],{"class":1317},[1099,5051,3585],{"class":1109},[1099,5053,1342],{"class":1317},[1099,5055,1745],{"class":1317},[1099,5057,1504],{"class":1323},[1099,5059,5060],{"class":1101,"line":2330},[1099,5061,3597],{"class":1317},[1099,5063,5064],{"class":1101,"line":2336},[1099,5065,1382],{"emptyLinePlaceholder":21},[1099,5067,5068,5070],{"class":1101,"line":2341},[1099,5069,2852],{"class":1303},[1099,5071,2855],{"class":1313},[1099,5073,5074,5076],{"class":1101,"line":2373},[1099,5075,1501],{"class":1317},[1099,5077,1504],{"class":1313},[993,5079,5081],{"id":5080},"wire-up-the-ui","Wire up the UI",[989,5083,5084,5085,5090,5091,5096],{},"Nuxt UI provides purpose-built components for AI chat interfaces: ",[1043,5086,5087],{"href":281},[1049,5088,5089],{},"UChatPrompt"," for the input area and ",[1043,5092,5093],{"href":271},[1049,5094,5095],{},"UChatMessages"," for displaying the conversation.",[1127,5098,5100],{"id":5099},"creating-the-home-page","Creating the home page",[989,5102,5103,5104,5108],{},"The home page is where users start a new conversation. The ",[1043,5105,5106],{"href":281},[1049,5107,5089],{}," component provides a textarea with auto-resize, keyboard shortcuts, and a submit button:",[1290,5110,5111],{},[1090,5112,5116],{"className":1562,"code":5113,"filename":5114,"highlights":5115,"language":34,"meta":1095,"style":1095},"\u003Cscript setup lang=\"ts\">\nconst input = ref('')\nconst loading = ref(false)\n\nasync function createChat() {\n  if (!input.value.trim()) return\n\n  loading.value = true\n\n  \u002F\u002F Create a new chat on the server\n  const chat = await $fetch('\u002Fapi\u002Fchats', {\n    method: 'POST',\n    body: {\n      message: {\n        role: 'user',\n        parts: [{ type: 'text', text: input.value }]\n      }\n    }\n  })\n\n  \u002F\u002F Navigate to the chat page\n  navigateTo(`\u002Fchat\u002F${chat.id}`)\n}\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CUDashboardPanel :ui=\"{ body: 'p-0 sm:p-0' }\">\n    \u003Ctemplate #body>\n      \u003CUContainer class=\"min-h-dvh flex flex-col justify-center gap-6 py-8\">\n        \u003Ch1 class=\"text-3xl sm:text-4xl text-highlighted font-bold\">\n          How can I help you today?\n        \u003C\u002Fh1>\n\n        \u003CUChatPrompt\n          v-model=\"input\"\n          :status=\"loading ? 'streaming' : 'ready'\"\n          variant=\"subtle\"\n          placeholder=\"Ask me anything...\"\n          @submit=\"createChat\"\n        >\n          \u003CUChatPromptSubmit color=\"neutral\" \u002F>\n        \u003C\u002FUChatPrompt>\n      \u003C\u002FUContainer>\n    \u003C\u002Ftemplate>\n  \u003C\u002FUDashboardPanel>\n\u003C\u002Ftemplate>\n","app\u002Fpages\u002Findex.vue",[3481,3525,3532,3537,3555,3594,3600,3605,3611],[1049,5117,5118,5141,5160,5178,5182,5196,5222,5226,5239,5243,5248,5274,5290,5299,5307,5321,5359,5363,5367,5373,5377,5382,5408,5413,5421,5425,5433,5454,5468,5489,5510,5515,5524,5528,5536,5551,5566,5581,5596,5611,5617,5640,5649,5658,5666,5674],{"__ignoreMap":1095},[1099,5119,5120,5122,5125,5128,5131,5133,5135,5137,5139],{"class":1101,"line":1102},[1099,5121,1572],{"class":1317},[1099,5123,5124],{"class":1323},"script",[1099,5126,5127],{"class":1600}," setup",[1099,5129,5130],{"class":1600}," lang",[1099,5132,1604],{"class":1317},[1099,5134,1531],{"class":1317},[1099,5136,1296],{"class":1109},[1099,5138,1531],{"class":1317},[1099,5140,1578],{"class":1317},[1099,5142,5143,5145,5148,5150,5153,5155,5158],{"class":1101,"line":1119},[1099,5144,3073],{"class":1600},[1099,5146,5147],{"class":1313}," input ",[1099,5149,1604],{"class":1317},[1099,5151,5152],{"class":1122}," ref",[1099,5154,1314],{"class":1313},[1099,5156,5157],{"class":1317},"''",[1099,5159,1504],{"class":1313},[1099,5161,5162,5164,5167,5169,5171,5173,5176],{"class":1101,"line":1333},[1099,5163,3073],{"class":1600},[1099,5165,5166],{"class":1313}," loading ",[1099,5168,1604],{"class":1317},[1099,5170,5152],{"class":1122},[1099,5172,1314],{"class":1313},[1099,5174,5175],{"class":1479},"false",[1099,5177,1504],{"class":1313},[1099,5179,5180],{"class":1101,"line":1348},[1099,5181,1382],{"emptyLinePlaceholder":21},[1099,5183,5184,5186,5189,5192,5194],{"class":1101,"line":1360},[1099,5185,2609],{"class":1600},[1099,5187,5188],{"class":1600}," function",[1099,5190,5191],{"class":1122}," createChat",[1099,5193,1818],{"class":1317},[1099,5195,1393],{"class":1317},[1099,5197,5198,5200,5202,5204,5207,5209,5211,5213,5216,5219],{"class":1101,"line":1371},[1099,5199,3540],{"class":1303},[1099,5201,1964],{"class":1323},[1099,5203,3545],{"class":1317},[1099,5205,5206],{"class":1313},"input",[1099,5208,1821],{"class":1317},[1099,5210,3334],{"class":1313},[1099,5212,1821],{"class":1317},[1099,5214,5215],{"class":1122},"trim",[1099,5217,5218],{"class":1323},"()) ",[1099,5220,5221],{"class":1303},"return\n",[1099,5223,5224],{"class":1101,"line":1379},[1099,5225,1382],{"emptyLinePlaceholder":21},[1099,5227,5228,5231,5233,5235,5237],{"class":1101,"line":1385},[1099,5229,5230],{"class":1313},"  loading",[1099,5232,1821],{"class":1317},[1099,5234,3334],{"class":1313},[1099,5236,2635],{"class":1317},[1099,5238,4366],{"class":1479},[1099,5240,5241],{"class":1101,"line":1396},[1099,5242,1382],{"emptyLinePlaceholder":21},[1099,5244,5245],{"class":1101,"line":1412},[1099,5246,5247],{"class":1483},"  \u002F\u002F Create a new chat on the server\n",[1099,5249,5250,5252,5254,5256,5258,5261,5263,5265,5268,5270,5272],{"class":1101,"line":1418},[1099,5251,2625],{"class":1600},[1099,5253,2802],{"class":1313},[1099,5255,2635],{"class":1317},[1099,5257,2638],{"class":1303},[1099,5259,5260],{"class":1122}," $fetch",[1099,5262,1314],{"class":1323},[1099,5264,1342],{"class":1317},[1099,5266,5267],{"class":1109},"\u002Fapi\u002Fchats",[1099,5269,1342],{"class":1317},[1099,5271,1729],{"class":1317},[1099,5273,1393],{"class":1317},[1099,5275,5276,5279,5281,5283,5286,5288],{"class":1101,"line":1423},[1099,5277,5278],{"class":1323},"    method",[1099,5280,1327],{"class":1317},[1099,5282,1404],{"class":1317},[1099,5284,5285],{"class":1109},"POST",[1099,5287,1342],{"class":1317},[1099,5289,1345],{"class":1317},[1099,5291,5292,5295,5297],{"class":1101,"line":1446},[1099,5293,5294],{"class":1323},"    body",[1099,5296,1327],{"class":1317},[1099,5298,1393],{"class":1317},[1099,5300,5301,5303,5305],{"class":1101,"line":1451},[1099,5302,3374],{"class":1323},[1099,5304,1327],{"class":1317},[1099,5306,1393],{"class":1317},[1099,5308,5309,5311,5313,5315,5317,5319],{"class":1101,"line":1461},[1099,5310,4508],{"class":1323},[1099,5312,1327],{"class":1317},[1099,5314,1404],{"class":1317},[1099,5316,2160],{"class":1109},[1099,5318,1342],{"class":1317},[1099,5320,1345],{"class":1317},[1099,5322,5323,5325,5327,5329,5331,5333,5335,5337,5340,5342,5344,5346,5348,5351,5353,5355,5357],{"class":1101,"line":1471},[1099,5324,4541],{"class":1323},[1099,5326,1327],{"class":1317},[1099,5328,1431],{"class":1323},[1099,5330,1878],{"class":1317},[1099,5332,2532],{"class":1323},[1099,5334,1327],{"class":1317},[1099,5336,1404],{"class":1317},[1099,5338,5339],{"class":1109},"text",[1099,5341,1342],{"class":1317},[1099,5343,1729],{"class":1317},[1099,5345,1732],{"class":1323},[1099,5347,1327],{"class":1317},[1099,5349,5350],{"class":1313}," input",[1099,5352,1821],{"class":1317},[1099,5354,3334],{"class":1313},[1099,5356,1745],{"class":1317},[1099,5358,3180],{"class":1323},[1099,5360,5361],{"class":1101,"line":1487},[1099,5362,4380],{"class":1317},[1099,5364,5365],{"class":1101,"line":1493},[1099,5366,1490],{"class":1317},[1099,5368,5369,5371],{"class":1101,"line":1498},[1099,5370,2426],{"class":1317},[1099,5372,1504],{"class":1323},[1099,5374,5375],{"class":1101,"line":2287},[1099,5376,1382],{"emptyLinePlaceholder":21},[1099,5378,5379],{"class":1101,"line":2300},[1099,5380,5381],{"class":1483},"  \u002F\u002F Navigate to the chat page\n",[1099,5383,5384,5387,5389,5391,5394,5397,5399,5401,5403,5406],{"class":1101,"line":2330},[1099,5385,5386],{"class":1122},"  navigateTo",[1099,5388,1314],{"class":1323},[1099,5390,3689],{"class":1317},[1099,5392,5393],{"class":1109},"\u002Fchat\u002F",[1099,5395,5396],{"class":1317},"${",[1099,5398,262],{"class":1313},[1099,5400,1821],{"class":1317},[1099,5402,2030],{"class":1313},[1099,5404,5405],{"class":1317},"}`",[1099,5407,1504],{"class":1323},[1099,5409,5410],{"class":1101,"line":2336},[1099,5411,5412],{"class":1317},"}\n",[1099,5414,5415,5417,5419],{"class":1101,"line":2341},[1099,5416,1648],{"class":1317},[1099,5418,5124],{"class":1323},[1099,5420,1578],{"class":1317},[1099,5422,5423],{"class":1101,"line":2373},[1099,5424,1382],{"emptyLinePlaceholder":21},[1099,5426,5427,5429,5431],{"class":1101,"line":2389},[1099,5428,1572],{"class":1317},[1099,5430,1575],{"class":1323},[1099,5432,1578],{"class":1317},[1099,5434,5435,5437,5440,5443,5445,5447,5450,5452],{"class":1101,"line":2407},[1099,5436,1585],{"class":1317},[1099,5438,5439],{"class":1323},"UDashboardPanel",[1099,5441,5442],{"class":1600}," :ui",[1099,5444,1604],{"class":1317},[1099,5446,1531],{"class":1317},[1099,5448,5449],{"class":1109},"{ body: 'p-0 sm:p-0' }",[1099,5451,1531],{"class":1317},[1099,5453,1578],{"class":1317},[1099,5455,5456,5458,5460,5463,5466],{"class":1101,"line":2423},[1099,5457,1594],{"class":1317},[1099,5459,1575],{"class":1323},[1099,5461,5462],{"class":1317}," #",[1099,5464,5465],{"class":1600},"body",[1099,5467,1578],{"class":1317},[1099,5469,5470,5472,5475,5478,5480,5482,5485,5487],{"class":1101,"line":2431},[1099,5471,1618],{"class":1317},[1099,5473,5474],{"class":1323},"UContainer",[1099,5476,5477],{"class":1600}," class",[1099,5479,1604],{"class":1317},[1099,5481,1531],{"class":1317},[1099,5483,5484],{"class":1109},"min-h-dvh flex flex-col justify-center gap-6 py-8",[1099,5486,1531],{"class":1317},[1099,5488,1578],{"class":1317},[1099,5490,5491,5494,5497,5499,5501,5503,5506,5508],{"class":1101,"line":3426},[1099,5492,5493],{"class":1317},"        \u003C",[1099,5495,5496],{"class":1323},"h1",[1099,5498,5477],{"class":1600},[1099,5500,1604],{"class":1317},[1099,5502,1531],{"class":1317},[1099,5504,5505],{"class":1109},"text-3xl sm:text-4xl text-highlighted font-bold",[1099,5507,1531],{"class":1317},[1099,5509,1578],{"class":1317},[1099,5511,5512],{"class":1101,"line":3439},[1099,5513,5514],{"class":1313},"          How can I help you today?\n",[1099,5516,5517,5520,5522],{"class":1101,"line":3444},[1099,5518,5519],{"class":1317},"        \u003C\u002F",[1099,5521,5496],{"class":1323},[1099,5523,1578],{"class":1317},[1099,5525,5526],{"class":1101,"line":3450},[1099,5527,1382],{"emptyLinePlaceholder":21},[1099,5529,5531,5533],{"class":5530,"line":3481},[1101,1582],[1099,5532,5493],{"class":1317},[1099,5534,5535],{"class":1323},"UChatPrompt\n",[1099,5537,5539,5542,5544,5546,5548],{"class":5538,"line":3525},[1101,1582],[1099,5540,5541],{"class":1600},"          v-model",[1099,5543,1604],{"class":1317},[1099,5545,1531],{"class":1317},[1099,5547,5206],{"class":1109},[1099,5549,5550],{"class":1317},"\"\n",[1099,5552,5554,5557,5559,5561,5564],{"class":5553,"line":3532},[1101,1582],[1099,5555,5556],{"class":1600},"          :status",[1099,5558,1604],{"class":1317},[1099,5560,1531],{"class":1317},[1099,5562,5563],{"class":1109},"loading ? 'streaming' : 'ready'",[1099,5565,5550],{"class":1317},[1099,5567,5569,5572,5574,5576,5579],{"class":5568,"line":3537},[1101,1582],[1099,5570,5571],{"class":1600},"          variant",[1099,5573,1604],{"class":1317},[1099,5575,1531],{"class":1317},[1099,5577,5578],{"class":1109},"subtle",[1099,5580,5550],{"class":1317},[1099,5582,5584,5587,5589,5591,5594],{"class":5583,"line":3555},[1101,1582],[1099,5585,5586],{"class":1600},"          placeholder",[1099,5588,1604],{"class":1317},[1099,5590,1531],{"class":1317},[1099,5592,5593],{"class":1109},"Ask me anything...",[1099,5595,5550],{"class":1317},[1099,5597,5599,5602,5604,5606,5609],{"class":5598,"line":3594},[1101,1582],[1099,5600,5601],{"class":1600},"          @submit",[1099,5603,1604],{"class":1317},[1099,5605,1531],{"class":1317},[1099,5607,5608],{"class":1109},"createChat",[1099,5610,5550],{"class":1317},[1099,5612,5614],{"class":5613,"line":3600},[1101,1582],[1099,5615,5616],{"class":1317},"        >\n",[1099,5618,5620,5623,5626,5629,5631,5633,5636,5638],{"class":5619,"line":3605},[1101,1582],[1099,5621,5622],{"class":1317},"          \u003C",[1099,5624,5625],{"class":1323},"UChatPromptSubmit",[1099,5627,5628],{"class":1600}," color",[1099,5630,1604],{"class":1317},[1099,5632,1531],{"class":1317},[1099,5634,5635],{"class":1109},"neutral",[1099,5637,1531],{"class":1317},[1099,5639,1624],{"class":1317},[1099,5641,5643,5645,5647],{"class":5642,"line":3611},[1101,1582],[1099,5644,5519],{"class":1317},[1099,5646,5089],{"class":1323},[1099,5648,1578],{"class":1317},[1099,5650,5651,5654,5656],{"class":1101,"line":3631},[1099,5652,5653],{"class":1317},"      \u003C\u002F",[1099,5655,5474],{"class":1323},[1099,5657,1578],{"class":1317},[1099,5659,5660,5662,5664],{"class":1101,"line":3659},[1099,5661,1629],{"class":1317},[1099,5663,1575],{"class":1323},[1099,5665,1578],{"class":1317},[1099,5667,5668,5670,5672],{"class":1101,"line":3675},[1099,5669,1639],{"class":1317},[1099,5671,5439],{"class":1323},[1099,5673,1578],{"class":1317},[1099,5675,5676,5678,5680],{"class":1101,"line":3694},[1099,5677,1648],{"class":1317},[1099,5679,1575],{"class":1323},[1099,5681,1578],{"class":1317},[989,5683,4638,5684,5688],{},[1043,5685,5686],{"href":281},[1049,5687,5089],{}," component automatically handles:",[1001,5690,5691,5698,5701,5711],{},[1004,5692,5693,5694],{},"Form submission when pressing ",[5695,5696],"kbd",{"value":5697},"enter",[1004,5699,5700],{},"Auto-resizing as you type",[1004,5702,5703,5704,5707,5708],{},"A loading state when ",[1049,5705,5706],{},"status"," is set to ",[1049,5709,5710],{},"streaming",[1004,5712,5713],{},"Focus management and keyboard shortcuts",[993,5715,5717],{"id":5716},"creating-the-chat-page","Creating the chat page",[989,5719,5720,5721,5727,5728,5735],{},"The chat page is where the actual conversation happens. It integrates the AI SDK's ",[1043,5722,5725],{"href":5723,"rel":5724},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fchat",[1047],[1049,5726,259],{}," class and ",[1043,5729,5732],{"href":5730,"rel":5731},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fdefault-chat-transport",[1047],[1049,5733,5734],{},"DefaultChatTransport"," for real-time streaming.",[1290,5737,5738],{},[1708,5739,5740],{},[1090,5741,5745],{"className":1562,"code":5742,"filename":5743,"highlights":5744,"language":34,"meta":1095,"style":1095},"\u003Cscript setup lang=\"ts\">\nimport { DefaultChatTransport, isReasoningUIPart, isTextUIPart } from 'ai'\nimport { Chat } from '@ai-sdk\u002Fvue'\nimport { isPartStreaming } from '@nuxt\u002Fui\u002Futils\u002Fai'\n\nconst route = useRoute()\nconst toast = useToast()\n\n\u002F\u002F Fetch existing chat data\nconst { data: chatData } = await useFetch(`\u002Fapi\u002Fchats\u002F${route.params.id}`)\n\nif (!chatData.value) {\n  throw createError({ statusCode: 404, statusMessage: 'Chat not found', fatal: true })\n}\n\nconst input = ref('')\n\n\u002F\u002F Initialize the Chat class from AI SDK\nconst chat = new Chat({\n  id: chatData.value.id,\n  messages: chatData.value.messages,\n  transport: new DefaultChatTransport({\n    api: `\u002Fapi\u002Fchats\u002F${chatData.value.id}`\n  }),\n  onData(dataPart) {\n    \u002F\u002F Refresh the chat list when a title is generated\n    if (dataPart.type === 'data-chat-title') {\n      refreshNuxtData('chats')\n    }\n  },\n  onError(error) {\n    toast.add({\n      title: 'Error',\n      description: error.message,\n      color: 'error'\n    })\n  }\n})\n\nfunction handleSubmit(e: Event) {\n  e.preventDefault()\n  if (input.value.trim()) {\n    chat.sendMessage({ text: input.value })\n    input.value = ''\n  }\n}\n\n\u002F\u002F Auto-generate response for first message\nonMounted(() => {\n  if (chatData.value?.messages.length === 1) {\n    chat.regenerate()\n  }\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CUDashboardPanel :ui=\"{ body: 'p-0 sm:p-0' }\">\n    \u003Ctemplate #body>\n      \u003CUContainer class=\"min-h-dvh flex flex-col py-4 sm:py-6\">\n        \u003CUChatMessages\n          :messages=\"chat.messages\"\n          :status=\"chat.status\"\n          should-auto-scroll\n          class=\"flex-1\"\n        >\n          \u003Ctemplate #content=\"{ message }\">\n            \u003Ctemplate v-for=\"(part, index) in message.parts\" :key=\"`${message.id}-${part.type}-${index}`\">\n              \u003CUChatReasoning\n                v-if=\"isReasoningUIPart(part)\"\n                :text=\"part.text\"\n                :streaming=\"isPartStreaming(part)\"\n              >\n                \u003CMDC\n                  :value=\"part.text\"\n                  :cache-key=\"`reasoning-${message.id}-${index}`\"\n                  class=\"*:first:mt-0 *:last:mb-0\"\n                \u002F>\n              \u003C\u002FUChatReasoning>\n\n              \u003Ctemplate v-else-if=\"isTextUIPart(part)\">\n                \u003CMDC\n                  v-if=\"message.role === 'assistant'\"\n                  :value=\"part.text\"\n                  :cache-key=\"`${message.id}-${index}`\"\n                  class=\"*:first:mt-0 *:last:mb-0\"\n                \u002F>\n                \u003Cp v-else-if=\"message.role === 'user'\" class=\"whitespace-pre-wrap\">\n                  {{ part.text }}\n                \u003C\u002Fp>\n              \u003C\u002Ftemplate>\n            \u003C\u002Ftemplate>\n          \u003C\u002Ftemplate>\n        \u003C\u002FUChatMessages>\n\n        \u003CUChatPrompt\n          v-model=\"input\"\n          :error=\"chat.error\"\n          variant=\"subtle\"\n          class=\"sticky bottom-0\"\n          @submit=\"handleSubmit\"\n        >\n          \u003CUChatPromptSubmit\n            :status=\"chat.status\"\n            color=\"neutral\"\n            @stop=\"chat.stop()\"\n            @reload=\"chat.regenerate()\"\n          \u002F>\n        \u003C\u002FUChatPrompt>\n      \u003C\u002FUContainer>\n    \u003C\u002Ftemplate>\n  \u003C\u002FUDashboardPanel>\n\u003C\u002Ftemplate>\n","app\u002Fpages\u002Fchat\u002F[id].vue",[1119,1333,1348,1498,2287,2300,2330,2336,2341,2373,2389,2407,2423,2431,3426,3439,3444,3450,3481,3525,3532,3537,3555],[1049,5746,5747,5767,5797,5818,5839,5843,5857,5871,5875,5880,5928,5932,5951,5993,5997,6001,6017,6021,6026,6044,6064,6083,6099,6126,6135,6150,6156,6183,6199,6204,6209,6224,6239,6255,6272,6286,6293,6298,6305,6309,6331,6343,6363,6391,6405,6409,6413,6417,6422,6435,6463,6474,6478,6484,6492,6496,6504,6522,6534,6553,6560,6574,6587,6592,6606,6610,6635,6713,6721,6735,6749,6763,6768,6776,6789,6803,6817,6822,6832,6836,6859,6865,6879,6891,6904,6916,6920,6950,6955,6964,6972,6981,6990,6998,7002,7008,7020,7034,7046,7059,7072,7076,7083,7096,7109,7123,7137,7142,7150,7158,7166,7174],{"__ignoreMap":1095},[1099,5748,5749,5751,5753,5755,5757,5759,5761,5763,5765],{"class":1101,"line":1102},[1099,5750,1572],{"class":1317},[1099,5752,5124],{"class":1323},[1099,5754,5127],{"class":1600},[1099,5756,5130],{"class":1600},[1099,5758,1604],{"class":1317},[1099,5760,1531],{"class":1317},[1099,5762,1296],{"class":1109},[1099,5764,1531],{"class":1317},[1099,5766,1578],{"class":1317},[1099,5768,5770,5772,5774,5777,5779,5782,5784,5787,5789,5791,5793,5795],{"class":5769,"line":1119},[1101,1582],[1099,5771,1720],{"class":1303},[1099,5773,1723],{"class":1317},[1099,5775,5776],{"class":1313}," DefaultChatTransport",[1099,5778,1729],{"class":1317},[1099,5780,5781],{"class":1313}," isReasoningUIPart",[1099,5783,1729],{"class":1317},[1099,5785,5786],{"class":1313}," isTextUIPart",[1099,5788,1745],{"class":1317},[1099,5790,1748],{"class":1303},[1099,5792,1404],{"class":1317},[1099,5794,2546],{"class":1109},[1099,5796,1368],{"class":1317},[1099,5798,5800,5802,5804,5807,5809,5811,5813,5816],{"class":5799,"line":1333},[1101,1582],[1099,5801,1720],{"class":1303},[1099,5803,1723],{"class":1317},[1099,5805,5806],{"class":1313}," Chat",[1099,5808,1745],{"class":1317},[1099,5810,1748],{"class":1303},[1099,5812,1404],{"class":1317},[1099,5814,5815],{"class":1109},"@ai-sdk\u002Fvue",[1099,5817,1368],{"class":1317},[1099,5819,5821,5823,5825,5828,5830,5832,5834,5837],{"class":5820,"line":1348},[1101,1582],[1099,5822,1720],{"class":1303},[1099,5824,1723],{"class":1317},[1099,5826,5827],{"class":1313}," isPartStreaming",[1099,5829,1745],{"class":1317},[1099,5831,1748],{"class":1303},[1099,5833,1404],{"class":1317},[1099,5835,5836],{"class":1109},"@nuxt\u002Fui\u002Futils\u002Fai",[1099,5838,1368],{"class":1317},[1099,5840,5841],{"class":1101,"line":1360},[1099,5842,1382],{"emptyLinePlaceholder":21},[1099,5844,5845,5847,5850,5852,5855],{"class":1101,"line":1371},[1099,5846,3073],{"class":1600},[1099,5848,5849],{"class":1313}," route ",[1099,5851,1604],{"class":1317},[1099,5853,5854],{"class":1122}," useRoute",[1099,5856,2681],{"class":1313},[1099,5858,5859,5861,5864,5866,5869],{"class":1101,"line":1379},[1099,5860,3073],{"class":1600},[1099,5862,5863],{"class":1313}," toast ",[1099,5865,1604],{"class":1317},[1099,5867,5868],{"class":1122}," useToast",[1099,5870,2681],{"class":1313},[1099,5872,5873],{"class":1101,"line":1385},[1099,5874,1382],{"emptyLinePlaceholder":21},[1099,5876,5877],{"class":1101,"line":1396},[1099,5878,5879],{"class":1483},"\u002F\u002F Fetch existing chat data\n",[1099,5881,5882,5884,5886,5889,5891,5894,5896,5898,5900,5903,5905,5907,5910,5912,5915,5917,5920,5922,5924,5926],{"class":1101,"line":1412},[1099,5883,3073],{"class":1600},[1099,5885,1723],{"class":1317},[1099,5887,5888],{"class":1323}," data",[1099,5890,1327],{"class":1317},[1099,5892,5893],{"class":1313}," chatData ",[1099,5895,1501],{"class":1317},[1099,5897,2635],{"class":1317},[1099,5899,2638],{"class":1303},[1099,5901,5902],{"class":1122}," useFetch",[1099,5904,1314],{"class":1313},[1099,5906,3689],{"class":1317},[1099,5908,5909],{"class":1109},"\u002Fapi\u002Fchats\u002F",[1099,5911,5396],{"class":1317},[1099,5913,5914],{"class":1313},"route",[1099,5916,1821],{"class":1317},[1099,5918,5919],{"class":1313},"params",[1099,5921,1821],{"class":1317},[1099,5923,2030],{"class":1313},[1099,5925,5405],{"class":1317},[1099,5927,1504],{"class":1313},[1099,5929,5930],{"class":1101,"line":1418},[1099,5931,1382],{"emptyLinePlaceholder":21},[1099,5933,5934,5937,5939,5941,5944,5946,5949],{"class":1101,"line":1423},[1099,5935,5936],{"class":1303},"if",[1099,5938,1964],{"class":1313},[1099,5940,3545],{"class":1317},[1099,5942,5943],{"class":1313},"chatData",[1099,5945,1821],{"class":1317},[1099,5947,5948],{"class":1313},"value) ",[1099,5950,1318],{"class":1317},[1099,5952,5953,5956,5958,5960,5962,5964,5966,5968,5970,5972,5974,5976,5978,5980,5982,5985,5987,5989,5991],{"class":1101,"line":1446},[1099,5954,5955],{"class":1303},"  throw",[1099,5957,2911],{"class":1122},[1099,5959,1314],{"class":1323},[1099,5961,1878],{"class":1317},[1099,5963,3567],{"class":1323},[1099,5965,1327],{"class":1317},[1099,5967,3573],{"class":3572},[1099,5969,1729],{"class":1317},[1099,5971,3578],{"class":1323},[1099,5973,1327],{"class":1317},[1099,5975,1404],{"class":1317},[1099,5977,3585],{"class":1109},[1099,5979,1342],{"class":1317},[1099,5981,1729],{"class":1317},[1099,5983,5984],{"class":1323}," fatal",[1099,5986,1327],{"class":1317},[1099,5988,4181],{"class":1479},[1099,5990,1745],{"class":1317},[1099,5992,1504],{"class":1323},[1099,5994,5995],{"class":1101,"line":1451},[1099,5996,5412],{"class":1317},[1099,5998,5999],{"class":1101,"line":1461},[1099,6000,1382],{"emptyLinePlaceholder":21},[1099,6002,6003,6005,6007,6009,6011,6013,6015],{"class":1101,"line":1471},[1099,6004,3073],{"class":1600},[1099,6006,5147],{"class":1313},[1099,6008,1604],{"class":1317},[1099,6010,5152],{"class":1122},[1099,6012,1314],{"class":1313},[1099,6014,5157],{"class":1317},[1099,6016,1504],{"class":1313},[1099,6018,6019],{"class":1101,"line":1487},[1099,6020,1382],{"emptyLinePlaceholder":21},[1099,6022,6023],{"class":1101,"line":1493},[1099,6024,6025],{"class":1483},"\u002F\u002F Initialize the Chat class from AI SDK\n",[1099,6027,6029,6031,6034,6036,6038,6040,6042],{"class":6028,"line":1498},[1101,1582],[1099,6030,3073],{"class":1600},[1099,6032,6033],{"class":1313}," chat ",[1099,6035,1604],{"class":1317},[1099,6037,1915],{"class":1317},[1099,6039,5806],{"class":1122},[1099,6041,1314],{"class":1313},[1099,6043,1318],{"class":1317},[1099,6045,6047,6049,6051,6054,6056,6058,6060,6062],{"class":6046,"line":2287},[1101,1582],[1099,6048,1811],{"class":1323},[1099,6050,1327],{"class":1317},[1099,6052,6053],{"class":1313}," chatData",[1099,6055,1821],{"class":1317},[1099,6057,3334],{"class":1313},[1099,6059,1821],{"class":1317},[1099,6061,2030],{"class":1313},[1099,6063,1345],{"class":1317},[1099,6065,6067,6069,6071,6073,6075,6077,6079,6081],{"class":6066,"line":2300},[1101,1582],[1099,6068,1971],{"class":1323},[1099,6070,1327],{"class":1317},[1099,6072,6053],{"class":1313},[1099,6074,1821],{"class":1317},[1099,6076,3334],{"class":1313},[1099,6078,1821],{"class":1317},[1099,6080,2009],{"class":1313},[1099,6082,1345],{"class":1317},[1099,6084,6086,6089,6091,6093,6095,6097],{"class":6085,"line":2330},[1101,1582],[1099,6087,6088],{"class":1323},"  transport",[1099,6090,1327],{"class":1317},[1099,6092,1915],{"class":1317},[1099,6094,5776],{"class":1122},[1099,6096,1314],{"class":1313},[1099,6098,1318],{"class":1317},[1099,6100,6102,6105,6107,6109,6111,6113,6115,6117,6119,6121,6123],{"class":6101,"line":2336},[1101,1582],[1099,6103,6104],{"class":1323},"    api",[1099,6106,1327],{"class":1317},[1099,6108,3683],{"class":1317},[1099,6110,5909],{"class":1109},[1099,6112,5396],{"class":1317},[1099,6114,5943],{"class":1313},[1099,6116,1821],{"class":1317},[1099,6118,3334],{"class":1313},[1099,6120,1821],{"class":1317},[1099,6122,2030],{"class":1313},[1099,6124,6125],{"class":1317},"}`\n",[1099,6127,6129,6131,6133],{"class":6128,"line":2341},[1101,1582],[1099,6130,2426],{"class":1317},[1099,6132,1895],{"class":1313},[1099,6134,1345],{"class":1317},[1099,6136,6138,6141,6143,6146,6148],{"class":6137,"line":2373},[1101,1582],[1099,6139,6140],{"class":1323},"  onData",[1099,6142,1314],{"class":1317},[1099,6144,6145],{"class":1955},"dataPart",[1099,6147,1895],{"class":1317},[1099,6149,1393],{"class":1317},[1099,6151,6153],{"class":6152,"line":2389},[1101,1582],[1099,6154,6155],{"class":1483},"    \u002F\u002F Refresh the chat list when a title is generated\n",[1099,6157,6159,6162,6164,6166,6168,6171,6173,6175,6177,6179,6181],{"class":6158,"line":2407},[1101,1582],[1099,6160,6161],{"class":1303},"    if",[1099,6163,1964],{"class":1323},[1099,6165,6145],{"class":1313},[1099,6167,1821],{"class":1317},[1099,6169,6170],{"class":1313},"type",[1099,6172,3361],{"class":1317},[1099,6174,1404],{"class":1317},[1099,6176,4328],{"class":1109},[1099,6178,1342],{"class":1317},[1099,6180,3550],{"class":1323},[1099,6182,1318],{"class":1317},[1099,6184,6186,6189,6191,6193,6195,6197],{"class":6185,"line":2423},[1101,1582],[1099,6187,6188],{"class":1122},"      refreshNuxtData",[1099,6190,1314],{"class":1323},[1099,6192,1342],{"class":1317},[1099,6194,1800],{"class":1109},[1099,6196,1342],{"class":1317},[1099,6198,1504],{"class":1323},[1099,6200,6202],{"class":6201,"line":2431},[1101,1582],[1099,6203,1490],{"class":1317},[1099,6205,6207],{"class":6206,"line":3426},[1101,1582],[1099,6208,1415],{"class":1317},[1099,6210,6212,6215,6217,6220,6222],{"class":6211,"line":3439},[1101,1582],[1099,6213,6214],{"class":1323},"  onError",[1099,6216,1314],{"class":1317},[1099,6218,6219],{"class":1955},"error",[1099,6221,1895],{"class":1317},[1099,6223,1393],{"class":1317},[1099,6225,6227,6230,6232,6235,6237],{"class":6226,"line":3444},[1101,1582],[1099,6228,6229],{"class":1313},"    toast",[1099,6231,1821],{"class":1317},[1099,6233,6234],{"class":1122},"add",[1099,6236,1314],{"class":1323},[1099,6238,1318],{"class":1317},[1099,6240,6242,6245,6247,6249,6251,6253],{"class":6241,"line":3450},[1101,1582],[1099,6243,6244],{"class":1323},"      title",[1099,6246,1327],{"class":1317},[1099,6248,1404],{"class":1317},[1099,6250,497],{"class":1109},[1099,6252,1342],{"class":1317},[1099,6254,1345],{"class":1317},[1099,6256,6258,6261,6263,6266,6268,6270],{"class":6257,"line":3481},[1101,1582],[1099,6259,6260],{"class":1323},"      description",[1099,6262,1327],{"class":1317},[1099,6264,6265],{"class":1313}," error",[1099,6267,1821],{"class":1317},[1099,6269,4480],{"class":1313},[1099,6271,1345],{"class":1317},[1099,6273,6275,6278,6280,6282,6284],{"class":6274,"line":3525},[1101,1582],[1099,6276,6277],{"class":1323},"      color",[1099,6279,1327],{"class":1317},[1099,6281,1404],{"class":1317},[1099,6283,6219],{"class":1109},[1099,6285,1368],{"class":1317},[1099,6287,6289,6291],{"class":6288,"line":3532},[1101,1582],[1099,6290,3388],{"class":1317},[1099,6292,1504],{"class":1323},[1099,6294,6296],{"class":6295,"line":3537},[1101,1582],[1099,6297,3597],{"class":1317},[1099,6299,6301,6303],{"class":6300,"line":3555},[1101,1582],[1099,6302,1501],{"class":1317},[1099,6304,1504],{"class":1313},[1099,6306,6307],{"class":1101,"line":3594},[1099,6308,1382],{"emptyLinePlaceholder":21},[1099,6310,6311,6314,6317,6319,6322,6324,6327,6329],{"class":1101,"line":3600},[1099,6312,6313],{"class":1600},"function",[1099,6315,6316],{"class":1122}," handleSubmit",[1099,6318,1314],{"class":1317},[1099,6320,6321],{"class":1955},"e",[1099,6323,1327],{"class":1317},[1099,6325,6326],{"class":1105}," Event",[1099,6328,1895],{"class":1317},[1099,6330,1393],{"class":1317},[1099,6332,6333,6336,6338,6341],{"class":1101,"line":3605},[1099,6334,6335],{"class":1313},"  e",[1099,6337,1821],{"class":1317},[1099,6339,6340],{"class":1122},"preventDefault",[1099,6342,2681],{"class":1323},[1099,6344,6345,6347,6349,6351,6353,6355,6357,6359,6361],{"class":1101,"line":3611},[1099,6346,3540],{"class":1303},[1099,6348,1964],{"class":1323},[1099,6350,5206],{"class":1313},[1099,6352,1821],{"class":1317},[1099,6354,3334],{"class":1313},[1099,6356,1821],{"class":1317},[1099,6358,5215],{"class":1122},[1099,6360,5218],{"class":1323},[1099,6362,1318],{"class":1317},[1099,6364,6365,6368,6370,6373,6375,6377,6379,6381,6383,6385,6387,6389],{"class":1101,"line":3631},[1099,6366,6367],{"class":1313},"    chat",[1099,6369,1821],{"class":1317},[1099,6371,6372],{"class":1122},"sendMessage",[1099,6374,1314],{"class":1323},[1099,6376,1878],{"class":1317},[1099,6378,1732],{"class":1323},[1099,6380,1327],{"class":1317},[1099,6382,5350],{"class":1313},[1099,6384,1821],{"class":1317},[1099,6386,3334],{"class":1313},[1099,6388,1745],{"class":1317},[1099,6390,1504],{"class":1323},[1099,6392,6393,6396,6398,6400,6402],{"class":1101,"line":3659},[1099,6394,6395],{"class":1313},"    input",[1099,6397,1821],{"class":1317},[1099,6399,3334],{"class":1313},[1099,6401,2635],{"class":1317},[1099,6403,6404],{"class":1317}," ''\n",[1099,6406,6407],{"class":1101,"line":3675},[1099,6408,3597],{"class":1317},[1099,6410,6411],{"class":1101,"line":3694},[1099,6412,5412],{"class":1317},[1099,6414,6415],{"class":1101,"line":3722},[1099,6416,1382],{"emptyLinePlaceholder":21},[1099,6418,6419],{"class":1101,"line":3729},[1099,6420,6421],{"class":1483},"\u002F\u002F Auto-generate response for first message\n",[1099,6423,6424,6427,6429,6431,6433],{"class":1101,"line":3734},[1099,6425,6426],{"class":1122},"onMounted",[1099,6428,1314],{"class":1313},[1099,6430,1818],{"class":1317},[1099,6432,1838],{"class":1600},[1099,6434,1393],{"class":1317},[1099,6436,6437,6439,6441,6443,6445,6447,6449,6451,6453,6455,6457,6459,6461],{"class":1101,"line":3800},[1099,6438,3540],{"class":1303},[1099,6440,1964],{"class":1323},[1099,6442,5943],{"class":1313},[1099,6444,1821],{"class":1317},[1099,6446,3334],{"class":1313},[1099,6448,3855],{"class":1317},[1099,6450,2009],{"class":1313},[1099,6452,1821],{"class":1317},[1099,6454,3834],{"class":1313},[1099,6456,3361],{"class":1317},[1099,6458,3840],{"class":3572},[1099,6460,3550],{"class":1323},[1099,6462,1318],{"class":1317},[1099,6464,6465,6467,6469,6472],{"class":1101,"line":3805},[1099,6466,6367],{"class":1313},[1099,6468,1821],{"class":1317},[1099,6470,6471],{"class":1122},"regenerate",[1099,6473,2681],{"class":1323},[1099,6475,6476],{"class":1101,"line":3810},[1099,6477,3597],{"class":1317},[1099,6479,6480,6482],{"class":1101,"line":3816},[1099,6481,1501],{"class":1317},[1099,6483,1504],{"class":1313},[1099,6485,6486,6488,6490],{"class":1101,"line":3845},[1099,6487,1648],{"class":1317},[1099,6489,5124],{"class":1323},[1099,6491,1578],{"class":1317},[1099,6493,6494],{"class":1101,"line":3886},[1099,6495,1382],{"emptyLinePlaceholder":21},[1099,6497,6498,6500,6502],{"class":1101,"line":3915},[1099,6499,1572],{"class":1317},[1099,6501,1575],{"class":1323},[1099,6503,1578],{"class":1317},[1099,6505,6506,6508,6510,6512,6514,6516,6518,6520],{"class":1101,"line":3927},[1099,6507,1585],{"class":1317},[1099,6509,5439],{"class":1323},[1099,6511,5442],{"class":1600},[1099,6513,1604],{"class":1317},[1099,6515,1531],{"class":1317},[1099,6517,5449],{"class":1109},[1099,6519,1531],{"class":1317},[1099,6521,1578],{"class":1317},[1099,6523,6524,6526,6528,6530,6532],{"class":1101,"line":3943},[1099,6525,1594],{"class":1317},[1099,6527,1575],{"class":1323},[1099,6529,5462],{"class":1317},[1099,6531,5465],{"class":1600},[1099,6533,1578],{"class":1317},[1099,6535,6536,6538,6540,6542,6544,6546,6549,6551],{"class":1101,"line":3957},[1099,6537,1618],{"class":1317},[1099,6539,5474],{"class":1323},[1099,6541,5477],{"class":1600},[1099,6543,1604],{"class":1317},[1099,6545,1531],{"class":1317},[1099,6547,6548],{"class":1109},"min-h-dvh flex flex-col py-4 sm:py-6",[1099,6550,1531],{"class":1317},[1099,6552,1578],{"class":1317},[1099,6554,6555,6557],{"class":1101,"line":3964},[1099,6556,5493],{"class":1317},[1099,6558,6559],{"class":1323},"UChatMessages\n",[1099,6561,6562,6565,6567,6569,6572],{"class":1101,"line":3969},[1099,6563,6564],{"class":1600},"          :messages",[1099,6566,1604],{"class":1317},[1099,6568,1531],{"class":1317},[1099,6570,6571],{"class":1109},"chat.messages",[1099,6573,5550],{"class":1317},[1099,6575,6576,6578,6580,6582,6585],{"class":1101,"line":3974},[1099,6577,5556],{"class":1600},[1099,6579,1604],{"class":1317},[1099,6581,1531],{"class":1317},[1099,6583,6584],{"class":1109},"chat.status",[1099,6586,5550],{"class":1317},[1099,6588,6589],{"class":1101,"line":3980},[1099,6590,6591],{"class":1600},"          should-auto-scroll\n",[1099,6593,6594,6597,6599,6601,6604],{"class":1101,"line":3997},[1099,6595,6596],{"class":1600},"          class",[1099,6598,1604],{"class":1317},[1099,6600,1531],{"class":1317},[1099,6602,6603],{"class":1109},"flex-1",[1099,6605,5550],{"class":1317},[1099,6607,6608],{"class":1101,"line":4019},[1099,6609,5616],{"class":1317},[1099,6611,6612,6614,6616,6618,6620,6622,6624,6626,6629,6631,6633],{"class":1101,"line":4037},[1099,6613,5622],{"class":1317},[1099,6615,1575],{"class":1323},[1099,6617,5462],{"class":1317},[1099,6619,371],{"class":1600},[1099,6621,1604],{"class":1317},[1099,6623,1531],{"class":1317},[1099,6625,1878],{"class":1317},[1099,6627,6628],{"class":1313}," message ",[1099,6630,1501],{"class":1317},[1099,6632,1531],{"class":1317},[1099,6634,1578],{"class":1317},[1099,6636,6637,6640,6642,6645,6647,6649,6652,6654,6657,6660,6662,6664,6666,6668,6671,6674,6676,6679,6681,6683,6685,6687,6690,6692,6695,6697,6699,6701,6703,6705,6708,6711],{"class":1101,"line":4045},[1099,6638,6639],{"class":1317},"            \u003C",[1099,6641,1575],{"class":1323},[1099,6643,6644],{"class":1303}," v-for",[1099,6646,1604],{"class":1317},[1099,6648,1531],{"class":1317},[1099,6650,6651],{"class":1313},"(part",[1099,6653,1729],{"class":1317},[1099,6655,6656],{"class":1313}," index) ",[1099,6658,6659],{"class":1317},"in",[1099,6661,2630],{"class":1313},[1099,6663,1821],{"class":1317},[1099,6665,2211],{"class":1313},[1099,6667,1531],{"class":1317},[1099,6669,6670],{"class":1317}," :",[1099,6672,6673],{"class":1600},"key",[1099,6675,1604],{"class":1317},[1099,6677,6678],{"class":1317},"\"`${",[1099,6680,4480],{"class":1313},[1099,6682,1821],{"class":1317},[1099,6684,2030],{"class":1313},[1099,6686,1501],{"class":1317},[1099,6688,6689],{"class":1109},"-",[1099,6691,5396],{"class":1317},[1099,6693,6694],{"class":1313},"part",[1099,6696,1821],{"class":1317},[1099,6698,6170],{"class":1313},[1099,6700,1501],{"class":1317},[1099,6702,6689],{"class":1109},[1099,6704,5396],{"class":1317},[1099,6706,6707],{"class":1313},"index",[1099,6709,6710],{"class":1317},"}`\"",[1099,6712,1578],{"class":1317},[1099,6714,6715,6718],{"class":1101,"line":4062},[1099,6716,6717],{"class":1317},"              \u003C",[1099,6719,6720],{"class":1323},"UChatReasoning\n",[1099,6722,6723,6726,6728,6730,6733],{"class":1101,"line":4083},[1099,6724,6725],{"class":1600},"                v-if",[1099,6727,1604],{"class":1317},[1099,6729,1531],{"class":1317},[1099,6731,6732],{"class":1109},"isReasoningUIPart(part)",[1099,6734,5550],{"class":1317},[1099,6736,6737,6740,6742,6744,6747],{"class":1101,"line":4093},[1099,6738,6739],{"class":1600},"                :text",[1099,6741,1604],{"class":1317},[1099,6743,1531],{"class":1317},[1099,6745,6746],{"class":1109},"part.text",[1099,6748,5550],{"class":1317},[1099,6750,6751,6754,6756,6758,6761],{"class":1101,"line":4103},[1099,6752,6753],{"class":1600},"                :streaming",[1099,6755,1604],{"class":1317},[1099,6757,1531],{"class":1317},[1099,6759,6760],{"class":1109},"isPartStreaming(part)",[1099,6762,5550],{"class":1317},[1099,6764,6765],{"class":1101,"line":4113},[1099,6766,6767],{"class":1317},"              >\n",[1099,6769,6770,6773],{"class":1101,"line":4130},[1099,6771,6772],{"class":1317},"                \u003C",[1099,6774,6775],{"class":1323},"MDC\n",[1099,6777,6778,6781,6783,6785,6787],{"class":1101,"line":4141},[1099,6779,6780],{"class":1600},"                  :value",[1099,6782,1604],{"class":1317},[1099,6784,1531],{"class":1317},[1099,6786,6746],{"class":1109},[1099,6788,5550],{"class":1317},[1099,6790,6791,6794,6796,6798,6801],{"class":1101,"line":4147},[1099,6792,6793],{"class":1600},"                  :cache-key",[1099,6795,1604],{"class":1317},[1099,6797,1531],{"class":1317},[1099,6799,6800],{"class":1109},"`reasoning-${message.id}-${index}`",[1099,6802,5550],{"class":1317},[1099,6804,6805,6808,6810,6812,6815],{"class":1101,"line":4153},[1099,6806,6807],{"class":1600},"                  class",[1099,6809,1604],{"class":1317},[1099,6811,1531],{"class":1317},[1099,6813,6814],{"class":1109},"*:first:mt-0 *:last:mb-0",[1099,6816,5550],{"class":1317},[1099,6818,6819],{"class":1101,"line":4163},[1099,6820,6821],{"class":1317},"                \u002F>\n",[1099,6823,6824,6827,6830],{"class":1101,"line":4173},[1099,6825,6826],{"class":1317},"              \u003C\u002F",[1099,6828,6829],{"class":1323},"UChatReasoning",[1099,6831,1578],{"class":1317},[1099,6833,6834],{"class":1101,"line":4186},[1099,6835,1382],{"emptyLinePlaceholder":21},[1099,6837,6838,6840,6842,6845,6847,6849,6852,6855,6857],{"class":1101,"line":4201},[1099,6839,6717],{"class":1317},[1099,6841,1575],{"class":1323},[1099,6843,6844],{"class":1303}," v-else-if",[1099,6846,1604],{"class":1317},[1099,6848,1531],{"class":1317},[1099,6850,6851],{"class":1122},"isTextUIPart",[1099,6853,6854],{"class":1313},"(part)",[1099,6856,1531],{"class":1317},[1099,6858,1578],{"class":1317},[1099,6860,6861,6863],{"class":1101,"line":4206},[1099,6862,6772],{"class":1317},[1099,6864,6775],{"class":1323},[1099,6866,6867,6870,6872,6874,6877],{"class":1101,"line":4211},[1099,6868,6869],{"class":1600},"                  v-if",[1099,6871,1604],{"class":1317},[1099,6873,1531],{"class":1317},[1099,6875,6876],{"class":1109},"message.role === 'assistant'",[1099,6878,5550],{"class":1317},[1099,6880,6881,6883,6885,6887,6889],{"class":1101,"line":4221},[1099,6882,6780],{"class":1600},[1099,6884,1604],{"class":1317},[1099,6886,1531],{"class":1317},[1099,6888,6746],{"class":1109},[1099,6890,5550],{"class":1317},[1099,6892,6893,6895,6897,6899,6902],{"class":1101,"line":4237},[1099,6894,6793],{"class":1600},[1099,6896,1604],{"class":1317},[1099,6898,1531],{"class":1317},[1099,6900,6901],{"class":1109},"`${message.id}-${index}`",[1099,6903,5550],{"class":1317},[1099,6905,6906,6908,6910,6912,6914],{"class":1101,"line":4252},[1099,6907,6807],{"class":1600},[1099,6909,1604],{"class":1317},[1099,6911,1531],{"class":1317},[1099,6913,6814],{"class":1109},[1099,6915,5550],{"class":1317},[1099,6917,6918],{"class":1101,"line":4258},[1099,6919,6821],{"class":1317},[1099,6921,6922,6924,6926,6928,6930,6932,6935,6937,6939,6941,6943,6946,6948],{"class":1101,"line":4264},[1099,6923,6772],{"class":1317},[1099,6925,989],{"class":1323},[1099,6927,6844],{"class":1600},[1099,6929,1604],{"class":1317},[1099,6931,1531],{"class":1317},[1099,6933,6934],{"class":1109},"message.role === 'user'",[1099,6936,1531],{"class":1317},[1099,6938,5477],{"class":1600},[1099,6940,1604],{"class":1317},[1099,6942,1531],{"class":1317},[1099,6944,6945],{"class":1109},"whitespace-pre-wrap",[1099,6947,1531],{"class":1317},[1099,6949,1578],{"class":1317},[1099,6951,6952],{"class":1101,"line":4272},[1099,6953,6954],{"class":1313},"                  {{ part.text }}\n",[1099,6956,6957,6960,6962],{"class":1101,"line":4277},[1099,6958,6959],{"class":1317},"                \u003C\u002F",[1099,6961,989],{"class":1323},[1099,6963,1578],{"class":1317},[1099,6965,6966,6968,6970],{"class":1101,"line":4283},[1099,6967,6826],{"class":1317},[1099,6969,1575],{"class":1323},[1099,6971,1578],{"class":1317},[1099,6973,6974,6977,6979],{"class":1101,"line":4303},[1099,6975,6976],{"class":1317},"            \u003C\u002F",[1099,6978,1575],{"class":1323},[1099,6980,1578],{"class":1317},[1099,6982,6983,6986,6988],{"class":1101,"line":4318},[1099,6984,6985],{"class":1317},"          \u003C\u002F",[1099,6987,1575],{"class":1323},[1099,6989,1578],{"class":1317},[1099,6991,6992,6994,6996],{"class":1101,"line":4335},[1099,6993,5519],{"class":1317},[1099,6995,5095],{"class":1323},[1099,6997,1578],{"class":1317},[1099,6999,7000],{"class":1101,"line":4358},[1099,7001,1382],{"emptyLinePlaceholder":21},[1099,7003,7004,7006],{"class":1101,"line":4369},[1099,7005,5493],{"class":1317},[1099,7007,5535],{"class":1323},[1099,7009,7010,7012,7014,7016,7018],{"class":1101,"line":4377},[1099,7011,5541],{"class":1600},[1099,7013,1604],{"class":1317},[1099,7015,1531],{"class":1317},[1099,7017,5206],{"class":1109},[1099,7019,5550],{"class":1317},[1099,7021,7022,7025,7027,7029,7032],{"class":1101,"line":4383},[1099,7023,7024],{"class":1600},"          :error",[1099,7026,1604],{"class":1317},[1099,7028,1531],{"class":1317},[1099,7030,7031],{"class":1109},"chat.error",[1099,7033,5550],{"class":1317},[1099,7035,7036,7038,7040,7042,7044],{"class":1101,"line":4388},[1099,7037,5571],{"class":1600},[1099,7039,1604],{"class":1317},[1099,7041,1531],{"class":1317},[1099,7043,5578],{"class":1109},[1099,7045,5550],{"class":1317},[1099,7047,7048,7050,7052,7054,7057],{"class":1101,"line":4411},[1099,7049,6596],{"class":1600},[1099,7051,1604],{"class":1317},[1099,7053,1531],{"class":1317},[1099,7055,7056],{"class":1109},"sticky bottom-0",[1099,7058,5550],{"class":1317},[1099,7060,7061,7063,7065,7067,7070],{"class":1101,"line":4417},[1099,7062,5601],{"class":1600},[1099,7064,1604],{"class":1317},[1099,7066,1531],{"class":1317},[1099,7068,7069],{"class":1109},"handleSubmit",[1099,7071,5550],{"class":1317},[1099,7073,7074],{"class":1101,"line":4437},[1099,7075,5616],{"class":1317},[1099,7077,7078,7080],{"class":1101,"line":4443},[1099,7079,5622],{"class":1317},[1099,7081,7082],{"class":1323},"UChatPromptSubmit\n",[1099,7084,7085,7088,7090,7092,7094],{"class":1101,"line":4489},[1099,7086,7087],{"class":1600},"            :status",[1099,7089,1604],{"class":1317},[1099,7091,1531],{"class":1317},[1099,7093,6584],{"class":1109},[1099,7095,5550],{"class":1317},[1099,7097,7098,7101,7103,7105,7107],{"class":1101,"line":4505},[1099,7099,7100],{"class":1600},"            color",[1099,7102,1604],{"class":1317},[1099,7104,1531],{"class":1317},[1099,7106,5635],{"class":1109},[1099,7108,5550],{"class":1317},[1099,7110,7111,7114,7116,7118,7121],{"class":1101,"line":4538},[1099,7112,7113],{"class":1600},"            @stop",[1099,7115,1604],{"class":1317},[1099,7117,1531],{"class":1317},[1099,7119,7120],{"class":1109},"chat.stop()",[1099,7122,5550],{"class":1317},[1099,7124,7125,7128,7130,7132,7135],{"class":1101,"line":4552},[1099,7126,7127],{"class":1600},"            @reload",[1099,7129,1604],{"class":1317},[1099,7131,1531],{"class":1317},[1099,7133,7134],{"class":1109},"chat.regenerate()",[1099,7136,5550],{"class":1317},[1099,7138,7139],{"class":1101,"line":4560},[1099,7140,7141],{"class":1317},"          \u002F>\n",[1099,7143,7144,7146,7148],{"class":1101,"line":4565},[1099,7145,5519],{"class":1317},[1099,7147,5089],{"class":1323},[1099,7149,1578],{"class":1317},[1099,7151,7152,7154,7156],{"class":1101,"line":4572},[1099,7153,5653],{"class":1317},[1099,7155,5474],{"class":1323},[1099,7157,1578],{"class":1317},[1099,7159,7160,7162,7164],{"class":1101,"line":4577},[1099,7161,1629],{"class":1317},[1099,7163,1575],{"class":1323},[1099,7165,1578],{"class":1317},[1099,7167,7168,7170,7172],{"class":1101,"line":4595},[1099,7169,1639],{"class":1317},[1099,7171,5439],{"class":1323},[1099,7173,1578],{"class":1317},[1099,7175,7177,7179,7181],{"class":1101,"line":7176},112,[1099,7178,1648],{"class":1317},[1099,7180,1575],{"class":1323},[1099,7182,1578],{"class":1317},[989,7184,7185],{},"Here's a breakdown of the key parts:",[989,7187,7188],{},[1007,7189,7190],{},"The Chat Class",[989,7192,4638,7193,7198,7199,7201],{},[1043,7194,7196],{"href":5723,"rel":7195},[1047],[1049,7197,259],{}," class from ",[1049,7200,5815],{}," manages the entire conversation state. It handles:",[1001,7203,7204,7209,7224,7230,7235],{},[1004,7205,7206,7207],{},"Message history with ",[1049,7208,6571],{},[1004,7210,7211,7212,1964,7214,2876,7217,2876,7220,2876,7222,1895],{},"Connection status with ",[1049,7213,6584],{},[1049,7215,7216],{},"ready",[1049,7218,7219],{},"submitted",[1049,7221,5710],{},[1049,7223,6219],{},[1004,7225,7226,7227],{},"Sending messages with ",[1049,7228,7229],{},"chat.sendMessage()",[1004,7231,7232,7233],{},"Stopping generation with ",[1049,7234,7120],{},[1004,7236,7237,7238],{},"Regenerating responses with ",[1049,7239,7134],{},[989,7241,4638,7242,7245,7246,7251,7252,7254],{},[1049,7243,7244],{},"onData"," callback receives ",[1043,7247,7250],{"href":7248,"rel":7249},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-ui\u002Fstreaming-data",[1047],"custom data events"," from the server (like ",[1049,7253,4328],{},"), allowing you to react to server-side events during streaming.",[989,7256,7257],{},[1007,7258,7259],{},"UChatMessages Component",[989,7261,4638,7262,7266],{},[1043,7263,7264],{"href":271},[1049,7265,5095],{}," component is purpose-built for AI chatbots with:",[1001,7268,7269,7272,7275,7278],{},[1004,7270,7271],{},"Auto-scroll to bottom on load",[1004,7273,7274],{},"Continuous scrolling as messages stream in",[1004,7276,7277],{},"A loading indicator while the assistant processes",[1004,7279,7280],{},"An \"Auto scroll\" button when scrolled up",[989,7282,7283],{},[1007,7284,7285],{},"Rendering Markdown with MDC",[989,7287,7288,7289,7291,7292,1052,7294,7297,7298,7305,7306,7312,7313,7317,7318,7321,7322,7324],{},"AI models often respond with Markdown formatting (code blocks, lists, bold text, etc.). We iterate over message ",[1049,7290,2211],{}," using AI SDK helpers like ",[1049,7293,6851],{},[1049,7295,7296],{},"isReasoningUIPart",", rendering text with the ",[1043,7299,7302],{"href":7300,"rel":7301},"https:\u002F\u002Fgithub.com\u002Fnuxt-content\u002Fmdc#mdc",[1047],[1049,7303,7304],{},"MDC"," component from ",[1043,7307,7310],{"href":7308,"rel":7309},"https:\u002F\u002Fgithub.com\u002Fnuxt-content\u002Fmdc",[1047],[1049,7311,1353],{}," and reasoning with ",[1043,7314,7315],{"href":291},[1049,7316,6829],{},". The ",[1049,7319,7320],{},"isPartStreaming"," utility from ",[1049,7323,5836],{}," detects if a part is currently being streamed.",[1678,7326,7327],{"to":859},[989,7328,7329],{},"Nuxt UI provides pre-styled prose components, so your markdown content will be automatically styled to match your theme.",[989,7331,7332],{},[1007,7333,7334],{},"UChatPromptSubmit Component",[989,7336,4638,7337,7341],{},[1043,7338,7339],{"href":286},[1049,7340,5625],{}," component adapts based on the chat status:",[1001,7343,7344,7347,7350],{},[1004,7345,7346],{},"Shows a send button when ready",[1004,7348,7349],{},"Shows a stop button while streaming",[1004,7351,7352],{},"Shows a reload button after an error",[993,7354,7356],{"id":7355},"adding-chat-history","Adding chat history",[989,7358,7359],{},"This section adds a dropdown menu to list previous chats and navigate between them.",[1127,7361,7363],{"id":7362},"listing-chats-api","Listing chats API",[989,7365,7366],{},"First, create an endpoint to fetch all chats:",[1290,7368,7369],{},[1090,7370,7373],{"className":1294,"code":7371,"filename":7372,"language":1296,"meta":1095,"style":1095},"import { defineEventHandler } from 'h3'\nimport { db, schema } from 'hub:db'\nimport { desc } from 'drizzle-orm'\n\nexport default defineEventHandler(async () => {\n  return await db.query.chats.findMany({\n    orderBy: () => desc(schema.chats.createdAt)\n  })\n})\n","server\u002Fapi\u002Fchats.get.ts",[1049,7374,7375,7393,7415,7434,7438,7456,7481,7508,7514],{"__ignoreMap":1095},[1099,7376,7377,7379,7381,7383,7385,7387,7389,7391],{"class":1101,"line":1102},[1099,7378,1720],{"class":1303},[1099,7380,1723],{"class":1317},[1099,7382,2510],{"class":1313},[1099,7384,1745],{"class":1317},[1099,7386,1748],{"class":1303},[1099,7388,1404],{"class":1317},[1099,7390,1127],{"class":1109},[1099,7392,1368],{"class":1317},[1099,7394,7395,7397,7399,7401,7403,7405,7407,7409,7411,7413],{"class":1101,"line":1119},[1099,7396,1720],{"class":1303},[1099,7398,1723],{"class":1317},[1099,7400,2453],{"class":1313},[1099,7402,1729],{"class":1317},[1099,7404,2561],{"class":1313},[1099,7406,1745],{"class":1317},[1099,7408,1748],{"class":1303},[1099,7410,1404],{"class":1317},[1099,7412,2570],{"class":1109},[1099,7414,1368],{"class":1317},[1099,7416,7417,7419,7421,7424,7426,7428,7430,7432],{"class":1101,"line":1333},[1099,7418,1720],{"class":1303},[1099,7420,1723],{"class":1317},[1099,7422,7423],{"class":1313}," desc",[1099,7425,1745],{"class":1317},[1099,7427,1748],{"class":1303},[1099,7429,1404],{"class":1317},[1099,7431,1773],{"class":1109},[1099,7433,1368],{"class":1317},[1099,7435,7436],{"class":1101,"line":1348},[1099,7437,1382],{"emptyLinePlaceholder":21},[1099,7439,7440,7442,7444,7446,7448,7450,7452,7454],{"class":1101,"line":1360},[1099,7441,1304],{"class":1303},[1099,7443,1307],{"class":1303},[1099,7445,2510],{"class":1122},[1099,7447,1314],{"class":1313},[1099,7449,2609],{"class":1600},[1099,7451,4974],{"class":1317},[1099,7453,1838],{"class":1600},[1099,7455,1393],{"class":1317},[1099,7457,7458,7460,7462,7464,7466,7468,7470,7472,7474,7477,7479],{"class":1101,"line":1371},[1099,7459,2852],{"class":1303},[1099,7461,2638],{"class":1303},[1099,7463,2453],{"class":1313},[1099,7465,1821],{"class":1317},[1099,7467,3465],{"class":1313},[1099,7469,1821],{"class":1317},[1099,7471,1800],{"class":1313},[1099,7473,1821],{"class":1317},[1099,7475,7476],{"class":1122},"findMany",[1099,7478,1314],{"class":1323},[1099,7480,1318],{"class":1317},[1099,7482,7483,7486,7488,7490,7492,7494,7496,7498,7500,7502,7504,7506],{"class":1101,"line":1379},[1099,7484,7485],{"class":1122},"    orderBy",[1099,7487,1327],{"class":1317},[1099,7489,4974],{"class":1317},[1099,7491,1838],{"class":1600},[1099,7493,7423],{"class":1122},[1099,7495,1314],{"class":1323},[1099,7497,2729],{"class":1313},[1099,7499,1821],{"class":1317},[1099,7501,1800],{"class":1313},[1099,7503,1821],{"class":1317},[1099,7505,4991],{"class":1313},[1099,7507,1504],{"class":1323},[1099,7509,7510,7512],{"class":1101,"line":1385},[1099,7511,2426],{"class":1317},[1099,7513,1504],{"class":1323},[1099,7515,7516,7518],{"class":1101,"line":1396},[1099,7517,1501],{"class":1317},[1099,7519,1504],{"class":1313},[1127,7521,7523],{"id":7522},"building-the-chats-history-dropdown","Building the chats history dropdown",[989,7525,7526,7527,7532,7533,7538,7539,7532,7546,7548],{},"The component uses ",[1043,7528,7529],{"href":457},[1049,7530,7531],{},"UDropdownMenu"," with a ",[1043,7534,7535],{"href":230},[1049,7536,7537],{},"UButton"," as trigger. Use ",[1043,7540,7543],{"href":7541,"rel":7542},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-fetch",[1047],[1049,7544,7545],{},"useFetch",[1049,7547,6673],{}," to fetch and cache the chat list:",[1290,7550,7551],{},[1090,7552,7555],{"className":1562,"code":7553,"filename":7554,"language":34,"meta":1095,"style":1095},"\u003Cscript setup lang=\"ts\">\nconst route = useRoute()\n\nconst { data: chats } = await useFetch('\u002Fapi\u002Fchats', {\n  key: 'chats',\n  default: () => []\n})\n\nconst items = computed(() => [\n  {\n    label: 'New chat',\n    to: '\u002F',\n    icon: 'i-lucide-plus-square',\n    active: route.name === 'index'\n  },\n  ...chats.value.map(chat => ({\n    label: chat.title || 'Untitled',\n    to: `\u002Fchat\u002F${chat.id}`,\n    active: route.params.id === chat.id\n  }))\n])\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CUDropdownMenu :items=\"items\" class=\"m-2\">\n    \u003CUButton\n      icon=\"i-lucide-messages-square\"\n      variant=\"ghost\"\n      label=\"Chats History\"\n      color=\"neutral\"\n      class=\"w-fit\"\n    \u002F>\n  \u003C\u002FUDropdownMenu>\n\u003C\u002Ftemplate>\n","app\u002Fcomponents\u002FChatsHistory.vue",[1049,7556,7557,7577,7589,7593,7625,7640,7654,7660,7664,7684,7689,7705,7721,7741,7765,7769,7794,7819,7841,7867,7873,7877,7885,7889,7897,7928,7935,7952,7966,7980,7992,8006,8011,8019],{"__ignoreMap":1095},[1099,7558,7559,7561,7563,7565,7567,7569,7571,7573,7575],{"class":1101,"line":1102},[1099,7560,1572],{"class":1317},[1099,7562,5124],{"class":1323},[1099,7564,5127],{"class":1600},[1099,7566,5130],{"class":1600},[1099,7568,1604],{"class":1317},[1099,7570,1531],{"class":1317},[1099,7572,1296],{"class":1109},[1099,7574,1531],{"class":1317},[1099,7576,1578],{"class":1317},[1099,7578,7579,7581,7583,7585,7587],{"class":1101,"line":1119},[1099,7580,3073],{"class":1600},[1099,7582,5849],{"class":1313},[1099,7584,1604],{"class":1317},[1099,7586,5854],{"class":1122},[1099,7588,2681],{"class":1313},[1099,7590,7591],{"class":1101,"line":1333},[1099,7592,1382],{"emptyLinePlaceholder":21},[1099,7594,7595,7597,7599,7601,7603,7605,7607,7609,7611,7613,7615,7617,7619,7621,7623],{"class":1101,"line":1348},[1099,7596,3073],{"class":1600},[1099,7598,1723],{"class":1317},[1099,7600,5888],{"class":1323},[1099,7602,1327],{"class":1317},[1099,7604,1789],{"class":1313},[1099,7606,1501],{"class":1317},[1099,7608,2635],{"class":1317},[1099,7610,2638],{"class":1303},[1099,7612,5902],{"class":1122},[1099,7614,1314],{"class":1313},[1099,7616,1342],{"class":1317},[1099,7618,5267],{"class":1109},[1099,7620,1342],{"class":1317},[1099,7622,1729],{"class":1317},[1099,7624,1393],{"class":1317},[1099,7626,7627,7630,7632,7634,7636,7638],{"class":1101,"line":1360},[1099,7628,7629],{"class":1323},"  key",[1099,7631,1327],{"class":1317},[1099,7633,1404],{"class":1317},[1099,7635,1800],{"class":1109},[1099,7637,1342],{"class":1317},[1099,7639,1345],{"class":1317},[1099,7641,7642,7645,7647,7649,7651],{"class":1101,"line":1371},[1099,7643,7644],{"class":1122},"  default",[1099,7646,1327],{"class":1317},[1099,7648,4974],{"class":1317},[1099,7650,1838],{"class":1600},[1099,7652,7653],{"class":1313}," []\n",[1099,7655,7656,7658],{"class":1101,"line":1379},[1099,7657,1501],{"class":1317},[1099,7659,1504],{"class":1313},[1099,7661,7662],{"class":1101,"line":1385},[1099,7663,1382],{"emptyLinePlaceholder":21},[1099,7665,7666,7668,7671,7673,7676,7678,7680,7682],{"class":1101,"line":1396},[1099,7667,3073],{"class":1600},[1099,7669,7670],{"class":1313}," items ",[1099,7672,1604],{"class":1317},[1099,7674,7675],{"class":1122}," computed",[1099,7677,1314],{"class":1313},[1099,7679,1818],{"class":1317},[1099,7681,1838],{"class":1600},[1099,7683,1330],{"class":1313},[1099,7685,7686],{"class":1101,"line":1412},[1099,7687,7688],{"class":1317},"  {\n",[1099,7690,7691,7694,7696,7698,7701,7703],{"class":1101,"line":1418},[1099,7692,7693],{"class":1323},"    label",[1099,7695,1327],{"class":1317},[1099,7697,1404],{"class":1317},[1099,7699,7700],{"class":1109},"New chat",[1099,7702,1342],{"class":1317},[1099,7704,1345],{"class":1317},[1099,7706,7707,7710,7712,7714,7717,7719],{"class":1101,"line":1423},[1099,7708,7709],{"class":1323},"    to",[1099,7711,1327],{"class":1317},[1099,7713,1404],{"class":1317},[1099,7715,7716],{"class":1109},"\u002F",[1099,7718,1342],{"class":1317},[1099,7720,1345],{"class":1317},[1099,7722,7723,7726,7728,7730,7737,7739],{"class":1101,"line":1446},[1099,7724,7725],{"class":1323},"    icon",[1099,7727,1327],{"class":1317},[1099,7729,1404],{"class":1317},[1099,7731,7732,7736],{"class":1109},[7733,7734],"i",{"class":7735},"shiki-icon-highlight sRy2g","i-lucide-plus-square",[1099,7738,1342],{"class":1317},[1099,7740,1345],{"class":1317},[1099,7742,7743,7746,7748,7751,7753,7756,7759,7761,7763],{"class":1101,"line":1451},[1099,7744,7745],{"class":1323},"    active",[1099,7747,1327],{"class":1317},[1099,7749,7750],{"class":1313}," route",[1099,7752,1821],{"class":1317},[1099,7754,7755],{"class":1313},"name ",[1099,7757,7758],{"class":1317},"===",[1099,7760,1404],{"class":1317},[1099,7762,6707],{"class":1109},[1099,7764,1368],{"class":1317},[1099,7766,7767],{"class":1101,"line":1461},[1099,7768,1415],{"class":1317},[1099,7770,7771,7774,7776,7778,7780,7782,7784,7786,7788,7790,7792],{"class":1101,"line":1471},[1099,7772,7773],{"class":1317},"  ...",[1099,7775,1800],{"class":1313},[1099,7777,1821],{"class":1317},[1099,7779,3334],{"class":1313},[1099,7781,1821],{"class":1317},[1099,7783,4475],{"class":1122},[1099,7785,1314],{"class":1313},[1099,7787,262],{"class":1955},[1099,7789,1838],{"class":1600},[1099,7791,1964],{"class":1313},[1099,7793,1318],{"class":1317},[1099,7795,7796,7798,7800,7802,7804,7807,7810,7812,7815,7817],{"class":1101,"line":1487},[1099,7797,7693],{"class":1323},[1099,7799,1327],{"class":1317},[1099,7801,2802],{"class":1313},[1099,7803,1821],{"class":1317},[1099,7805,7806],{"class":1313},"title ",[1099,7808,7809],{"class":1317},"||",[1099,7811,1404],{"class":1317},[1099,7813,7814],{"class":1109},"Untitled",[1099,7816,1342],{"class":1317},[1099,7818,1345],{"class":1317},[1099,7820,7821,7823,7825,7827,7829,7831,7833,7835,7837,7839],{"class":1101,"line":1493},[1099,7822,7709],{"class":1323},[1099,7824,1327],{"class":1317},[1099,7826,3683],{"class":1317},[1099,7828,5393],{"class":1109},[1099,7830,5396],{"class":1317},[1099,7832,262],{"class":1313},[1099,7834,1821],{"class":1317},[1099,7836,2030],{"class":1313},[1099,7838,5405],{"class":1317},[1099,7840,1345],{"class":1317},[1099,7842,7843,7845,7847,7849,7851,7853,7855,7858,7860,7862,7864],{"class":1101,"line":1498},[1099,7844,7745],{"class":1323},[1099,7846,1327],{"class":1317},[1099,7848,7750],{"class":1313},[1099,7850,1821],{"class":1317},[1099,7852,5919],{"class":1313},[1099,7854,1821],{"class":1317},[1099,7856,7857],{"class":1313},"id ",[1099,7859,7758],{"class":1317},[1099,7861,2802],{"class":1313},[1099,7863,1821],{"class":1317},[1099,7865,7866],{"class":1313},"id\n",[1099,7868,7869,7871],{"class":1101,"line":2287},[1099,7870,2426],{"class":1317},[1099,7872,1985],{"class":1313},[1099,7874,7875],{"class":1101,"line":2300},[1099,7876,2333],{"class":1313},[1099,7878,7879,7881,7883],{"class":1101,"line":2330},[1099,7880,1648],{"class":1317},[1099,7882,5124],{"class":1323},[1099,7884,1578],{"class":1317},[1099,7886,7887],{"class":1101,"line":2336},[1099,7888,1382],{"emptyLinePlaceholder":21},[1099,7890,7891,7893,7895],{"class":1101,"line":2341},[1099,7892,1572],{"class":1317},[1099,7894,1575],{"class":1323},[1099,7896,1578],{"class":1317},[1099,7898,7899,7901,7903,7906,7908,7910,7913,7915,7917,7919,7921,7924,7926],{"class":1101,"line":2373},[1099,7900,1585],{"class":1317},[1099,7902,7531],{"class":1323},[1099,7904,7905],{"class":1600}," :items",[1099,7907,1604],{"class":1317},[1099,7909,1531],{"class":1317},[1099,7911,7912],{"class":1109},"items",[1099,7914,1531],{"class":1317},[1099,7916,5477],{"class":1600},[1099,7918,1604],{"class":1317},[1099,7920,1531],{"class":1317},[1099,7922,7923],{"class":1109},"m-2",[1099,7925,1531],{"class":1317},[1099,7927,1578],{"class":1317},[1099,7929,7930,7932],{"class":1101,"line":2389},[1099,7931,1594],{"class":1317},[1099,7933,7934],{"class":1323},"UButton\n",[1099,7936,7937,7940,7942,7944,7950],{"class":1101,"line":2407},[1099,7938,7939],{"class":1600},"      icon",[1099,7941,1604],{"class":1317},[1099,7943,1531],{"class":1317},[1099,7945,7946,7949],{"class":1109},[7733,7947],{"class":7948},"shiki-icon-highlight sdATh","i-lucide-messages-square",[1099,7951,5550],{"class":1317},[1099,7953,7954,7957,7959,7961,7964],{"class":1101,"line":2423},[1099,7955,7956],{"class":1600},"      variant",[1099,7958,1604],{"class":1317},[1099,7960,1531],{"class":1317},[1099,7962,7963],{"class":1109},"ghost",[1099,7965,5550],{"class":1317},[1099,7967,7968,7971,7973,7975,7978],{"class":1101,"line":2431},[1099,7969,7970],{"class":1600},"      label",[1099,7972,1604],{"class":1317},[1099,7974,1531],{"class":1317},[1099,7976,7977],{"class":1109},"Chats History",[1099,7979,5550],{"class":1317},[1099,7981,7982,7984,7986,7988,7990],{"class":1101,"line":3426},[1099,7983,6277],{"class":1600},[1099,7985,1604],{"class":1317},[1099,7987,1531],{"class":1317},[1099,7989,5635],{"class":1109},[1099,7991,5550],{"class":1317},[1099,7993,7994,7997,7999,8001,8004],{"class":1101,"line":3439},[1099,7995,7996],{"class":1600},"      class",[1099,7998,1604],{"class":1317},[1099,8000,1531],{"class":1317},[1099,8002,8003],{"class":1109},"w-fit",[1099,8005,5550],{"class":1317},[1099,8007,8008],{"class":1101,"line":3444},[1099,8009,8010],{"class":1317},"    \u002F>\n",[1099,8012,8013,8015,8017],{"class":1101,"line":3450},[1099,8014,1639],{"class":1317},[1099,8016,7531],{"class":1323},[1099,8018,1578],{"class":1317},[1099,8020,8021,8023,8025],{"class":1101,"line":3481},[1099,8022,1648],{"class":1317},[1099,8024,1575],{"class":1323},[1099,8026,1578],{"class":1317},[993,8028,8030],{"id":8029},"integrating-history-in-the-home-page","Integrating history in the home page",[1290,8032,8033],{},[1708,8034,8035],{},[1090,8036,8039],{"className":1562,"code":8037,"filename":5114,"highlights":8038,"language":34,"meta":1095,"style":1095},"\u003Cscript setup lang=\"ts\">\nconst input = ref('')\nconst loading = ref(false)\n\nasync function createChat() {\n  if (!input.value.trim()) return\n\n  loading.value = true\n\n  \u002F\u002F Create a new chat on the server\n  const chat = await $fetch('\u002Fapi\u002Fchats', {\n    method: 'POST',\n    body: {\n      message: {\n        role: 'user',\n        parts: [{ type: 'text', text: input.value }]\n      }\n    }\n  })\n\n  \u002F\u002F Navigate to the chat page\n  navigateTo(`\u002Fchat\u002F${chat.id}`)\n}\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CUDashboardPanel :ui=\"{ body: 'p-0 sm:p-0' }\">\n    \u003Ctemplate #header>\n      \u003CChatsHistory \u002F>\n    \u003C\u002Ftemplate>\n    \u003Ctemplate #body>\n      \u003CUContainer class=\"min-h-dvh flex flex-col justify-center gap-6 py-8\">\n        \u003Ch1 class=\"text-3xl sm:text-4xl text-highlighted font-bold\">\n          How can I help you today?\n        \u003C\u002Fh1>\n\n        \u003CUChatPrompt\n          v-model=\"input\"\n          :status=\"loading ? 'streaming' : 'ready'\"\n          variant=\"subtle\"\n          placeholder=\"Ask me anything...\"\n          @submit=\"createChat\"\n        >\n          \u003CUChatPromptSubmit color=\"neutral\" \u002F>\n        \u003C\u002FUChatPrompt>\n      \u003C\u002FUContainer>\n    \u003C\u002Ftemplate>\n  \u003C\u002FUDashboardPanel>\n\u003C\u002Ftemplate>\n",[2423,2431,3426],[1049,8040,8041,8061,8077,8093,8097,8109,8131,8135,8147,8151,8155,8179,8193,8201,8209,8223,8259,8263,8267,8273,8277,8281,8303,8307,8315,8319,8327,8345,8359,8369,8378,8390,8408,8426,8430,8438,8442,8448,8460,8472,8484,8496,8508,8512,8530,8538,8546,8554,8562],{"__ignoreMap":1095},[1099,8042,8043,8045,8047,8049,8051,8053,8055,8057,8059],{"class":1101,"line":1102},[1099,8044,1572],{"class":1317},[1099,8046,5124],{"class":1323},[1099,8048,5127],{"class":1600},[1099,8050,5130],{"class":1600},[1099,8052,1604],{"class":1317},[1099,8054,1531],{"class":1317},[1099,8056,1296],{"class":1109},[1099,8058,1531],{"class":1317},[1099,8060,1578],{"class":1317},[1099,8062,8063,8065,8067,8069,8071,8073,8075],{"class":1101,"line":1119},[1099,8064,3073],{"class":1600},[1099,8066,5147],{"class":1313},[1099,8068,1604],{"class":1317},[1099,8070,5152],{"class":1122},[1099,8072,1314],{"class":1313},[1099,8074,5157],{"class":1317},[1099,8076,1504],{"class":1313},[1099,8078,8079,8081,8083,8085,8087,8089,8091],{"class":1101,"line":1333},[1099,8080,3073],{"class":1600},[1099,8082,5166],{"class":1313},[1099,8084,1604],{"class":1317},[1099,8086,5152],{"class":1122},[1099,8088,1314],{"class":1313},[1099,8090,5175],{"class":1479},[1099,8092,1504],{"class":1313},[1099,8094,8095],{"class":1101,"line":1348},[1099,8096,1382],{"emptyLinePlaceholder":21},[1099,8098,8099,8101,8103,8105,8107],{"class":1101,"line":1360},[1099,8100,2609],{"class":1600},[1099,8102,5188],{"class":1600},[1099,8104,5191],{"class":1122},[1099,8106,1818],{"class":1317},[1099,8108,1393],{"class":1317},[1099,8110,8111,8113,8115,8117,8119,8121,8123,8125,8127,8129],{"class":1101,"line":1371},[1099,8112,3540],{"class":1303},[1099,8114,1964],{"class":1323},[1099,8116,3545],{"class":1317},[1099,8118,5206],{"class":1313},[1099,8120,1821],{"class":1317},[1099,8122,3334],{"class":1313},[1099,8124,1821],{"class":1317},[1099,8126,5215],{"class":1122},[1099,8128,5218],{"class":1323},[1099,8130,5221],{"class":1303},[1099,8132,8133],{"class":1101,"line":1379},[1099,8134,1382],{"emptyLinePlaceholder":21},[1099,8136,8137,8139,8141,8143,8145],{"class":1101,"line":1385},[1099,8138,5230],{"class":1313},[1099,8140,1821],{"class":1317},[1099,8142,3334],{"class":1313},[1099,8144,2635],{"class":1317},[1099,8146,4366],{"class":1479},[1099,8148,8149],{"class":1101,"line":1396},[1099,8150,1382],{"emptyLinePlaceholder":21},[1099,8152,8153],{"class":1101,"line":1412},[1099,8154,5247],{"class":1483},[1099,8156,8157,8159,8161,8163,8165,8167,8169,8171,8173,8175,8177],{"class":1101,"line":1418},[1099,8158,2625],{"class":1600},[1099,8160,2802],{"class":1313},[1099,8162,2635],{"class":1317},[1099,8164,2638],{"class":1303},[1099,8166,5260],{"class":1122},[1099,8168,1314],{"class":1323},[1099,8170,1342],{"class":1317},[1099,8172,5267],{"class":1109},[1099,8174,1342],{"class":1317},[1099,8176,1729],{"class":1317},[1099,8178,1393],{"class":1317},[1099,8180,8181,8183,8185,8187,8189,8191],{"class":1101,"line":1423},[1099,8182,5278],{"class":1323},[1099,8184,1327],{"class":1317},[1099,8186,1404],{"class":1317},[1099,8188,5285],{"class":1109},[1099,8190,1342],{"class":1317},[1099,8192,1345],{"class":1317},[1099,8194,8195,8197,8199],{"class":1101,"line":1446},[1099,8196,5294],{"class":1323},[1099,8198,1327],{"class":1317},[1099,8200,1393],{"class":1317},[1099,8202,8203,8205,8207],{"class":1101,"line":1451},[1099,8204,3374],{"class":1323},[1099,8206,1327],{"class":1317},[1099,8208,1393],{"class":1317},[1099,8210,8211,8213,8215,8217,8219,8221],{"class":1101,"line":1461},[1099,8212,4508],{"class":1323},[1099,8214,1327],{"class":1317},[1099,8216,1404],{"class":1317},[1099,8218,2160],{"class":1109},[1099,8220,1342],{"class":1317},[1099,8222,1345],{"class":1317},[1099,8224,8225,8227,8229,8231,8233,8235,8237,8239,8241,8243,8245,8247,8249,8251,8253,8255,8257],{"class":1101,"line":1471},[1099,8226,4541],{"class":1323},[1099,8228,1327],{"class":1317},[1099,8230,1431],{"class":1323},[1099,8232,1878],{"class":1317},[1099,8234,2532],{"class":1323},[1099,8236,1327],{"class":1317},[1099,8238,1404],{"class":1317},[1099,8240,5339],{"class":1109},[1099,8242,1342],{"class":1317},[1099,8244,1729],{"class":1317},[1099,8246,1732],{"class":1323},[1099,8248,1327],{"class":1317},[1099,8250,5350],{"class":1313},[1099,8252,1821],{"class":1317},[1099,8254,3334],{"class":1313},[1099,8256,1745],{"class":1317},[1099,8258,3180],{"class":1323},[1099,8260,8261],{"class":1101,"line":1487},[1099,8262,4380],{"class":1317},[1099,8264,8265],{"class":1101,"line":1493},[1099,8266,1490],{"class":1317},[1099,8268,8269,8271],{"class":1101,"line":1498},[1099,8270,2426],{"class":1317},[1099,8272,1504],{"class":1323},[1099,8274,8275],{"class":1101,"line":2287},[1099,8276,1382],{"emptyLinePlaceholder":21},[1099,8278,8279],{"class":1101,"line":2300},[1099,8280,5381],{"class":1483},[1099,8282,8283,8285,8287,8289,8291,8293,8295,8297,8299,8301],{"class":1101,"line":2330},[1099,8284,5386],{"class":1122},[1099,8286,1314],{"class":1323},[1099,8288,3689],{"class":1317},[1099,8290,5393],{"class":1109},[1099,8292,5396],{"class":1317},[1099,8294,262],{"class":1313},[1099,8296,1821],{"class":1317},[1099,8298,2030],{"class":1313},[1099,8300,5405],{"class":1317},[1099,8302,1504],{"class":1323},[1099,8304,8305],{"class":1101,"line":2336},[1099,8306,5412],{"class":1317},[1099,8308,8309,8311,8313],{"class":1101,"line":2341},[1099,8310,1648],{"class":1317},[1099,8312,5124],{"class":1323},[1099,8314,1578],{"class":1317},[1099,8316,8317],{"class":1101,"line":2373},[1099,8318,1382],{"emptyLinePlaceholder":21},[1099,8320,8321,8323,8325],{"class":1101,"line":2389},[1099,8322,1572],{"class":1317},[1099,8324,1575],{"class":1323},[1099,8326,1578],{"class":1317},[1099,8328,8329,8331,8333,8335,8337,8339,8341,8343],{"class":1101,"line":2407},[1099,8330,1585],{"class":1317},[1099,8332,5439],{"class":1323},[1099,8334,5442],{"class":1600},[1099,8336,1604],{"class":1317},[1099,8338,1531],{"class":1317},[1099,8340,5449],{"class":1109},[1099,8342,1531],{"class":1317},[1099,8344,1578],{"class":1317},[1099,8346,8348,8350,8352,8354,8357],{"class":8347,"line":2423},[1101,1582],[1099,8349,1594],{"class":1317},[1099,8351,1575],{"class":1323},[1099,8353,5462],{"class":1317},[1099,8355,8356],{"class":1600},"header",[1099,8358,1578],{"class":1317},[1099,8360,8362,8364,8367],{"class":8361,"line":2431},[1101,1582],[1099,8363,1618],{"class":1317},[1099,8365,8366],{"class":1323},"ChatsHistory",[1099,8368,1624],{"class":1317},[1099,8370,8372,8374,8376],{"class":8371,"line":3426},[1101,1582],[1099,8373,1629],{"class":1317},[1099,8375,1575],{"class":1323},[1099,8377,1578],{"class":1317},[1099,8379,8380,8382,8384,8386,8388],{"class":1101,"line":3439},[1099,8381,1594],{"class":1317},[1099,8383,1575],{"class":1323},[1099,8385,5462],{"class":1317},[1099,8387,5465],{"class":1600},[1099,8389,1578],{"class":1317},[1099,8391,8392,8394,8396,8398,8400,8402,8404,8406],{"class":1101,"line":3444},[1099,8393,1618],{"class":1317},[1099,8395,5474],{"class":1323},[1099,8397,5477],{"class":1600},[1099,8399,1604],{"class":1317},[1099,8401,1531],{"class":1317},[1099,8403,5484],{"class":1109},[1099,8405,1531],{"class":1317},[1099,8407,1578],{"class":1317},[1099,8409,8410,8412,8414,8416,8418,8420,8422,8424],{"class":1101,"line":3450},[1099,8411,5493],{"class":1317},[1099,8413,5496],{"class":1323},[1099,8415,5477],{"class":1600},[1099,8417,1604],{"class":1317},[1099,8419,1531],{"class":1317},[1099,8421,5505],{"class":1109},[1099,8423,1531],{"class":1317},[1099,8425,1578],{"class":1317},[1099,8427,8428],{"class":1101,"line":3481},[1099,8429,5514],{"class":1313},[1099,8431,8432,8434,8436],{"class":1101,"line":3525},[1099,8433,5519],{"class":1317},[1099,8435,5496],{"class":1323},[1099,8437,1578],{"class":1317},[1099,8439,8440],{"class":1101,"line":3532},[1099,8441,1382],{"emptyLinePlaceholder":21},[1099,8443,8444,8446],{"class":1101,"line":3537},[1099,8445,5493],{"class":1317},[1099,8447,5535],{"class":1323},[1099,8449,8450,8452,8454,8456,8458],{"class":1101,"line":3555},[1099,8451,5541],{"class":1600},[1099,8453,1604],{"class":1317},[1099,8455,1531],{"class":1317},[1099,8457,5206],{"class":1109},[1099,8459,5550],{"class":1317},[1099,8461,8462,8464,8466,8468,8470],{"class":1101,"line":3594},[1099,8463,5556],{"class":1600},[1099,8465,1604],{"class":1317},[1099,8467,1531],{"class":1317},[1099,8469,5563],{"class":1109},[1099,8471,5550],{"class":1317},[1099,8473,8474,8476,8478,8480,8482],{"class":1101,"line":3600},[1099,8475,5571],{"class":1600},[1099,8477,1604],{"class":1317},[1099,8479,1531],{"class":1317},[1099,8481,5578],{"class":1109},[1099,8483,5550],{"class":1317},[1099,8485,8486,8488,8490,8492,8494],{"class":1101,"line":3605},[1099,8487,5586],{"class":1600},[1099,8489,1604],{"class":1317},[1099,8491,1531],{"class":1317},[1099,8493,5593],{"class":1109},[1099,8495,5550],{"class":1317},[1099,8497,8498,8500,8502,8504,8506],{"class":1101,"line":3611},[1099,8499,5601],{"class":1600},[1099,8501,1604],{"class":1317},[1099,8503,1531],{"class":1317},[1099,8505,5608],{"class":1109},[1099,8507,5550],{"class":1317},[1099,8509,8510],{"class":1101,"line":3631},[1099,8511,5616],{"class":1317},[1099,8513,8514,8516,8518,8520,8522,8524,8526,8528],{"class":1101,"line":3659},[1099,8515,5622],{"class":1317},[1099,8517,5625],{"class":1323},[1099,8519,5628],{"class":1600},[1099,8521,1604],{"class":1317},[1099,8523,1531],{"class":1317},[1099,8525,5635],{"class":1109},[1099,8527,1531],{"class":1317},[1099,8529,1624],{"class":1317},[1099,8531,8532,8534,8536],{"class":1101,"line":3675},[1099,8533,5519],{"class":1317},[1099,8535,5089],{"class":1323},[1099,8537,1578],{"class":1317},[1099,8539,8540,8542,8544],{"class":1101,"line":3694},[1099,8541,5653],{"class":1317},[1099,8543,5474],{"class":1323},[1099,8545,1578],{"class":1317},[1099,8547,8548,8550,8552],{"class":1101,"line":3722},[1099,8549,1629],{"class":1317},[1099,8551,1575],{"class":1323},[1099,8553,1578],{"class":1317},[1099,8555,8556,8558,8560],{"class":1101,"line":3729},[1099,8557,1639],{"class":1317},[1099,8559,5439],{"class":1323},[1099,8561,1578],{"class":1317},[1099,8563,8564,8566,8568],{"class":1101,"line":3734},[1099,8565,1648],{"class":1317},[1099,8567,1575],{"class":1323},[1099,8569,1578],{"class":1317},[993,8571,8573],{"id":8572},"integrating-history-in-the-chat-page","Integrating history in the chat page",[1290,8575,8576],{},[1708,8577,8578],{},[1090,8579,8582],{"className":1562,"code":8580,"filename":5743,"highlights":8581,"language":34,"meta":1095,"style":1095},"\u003Cscript setup lang=\"ts\">\nimport { DefaultChatTransport, isReasoningUIPart, isTextUIPart } from 'ai'\nimport { Chat } from '@ai-sdk\u002Fvue'\nimport { isPartStreaming } from '@nuxt\u002Fui\u002Futils\u002Fai'\n\nconst route = useRoute()\nconst toast = useToast()\n\n\u002F\u002F Fetch existing chat data\nconst { data: chatData } = await useFetch(`\u002Fapi\u002Fchats\u002F${route.params.id}`)\n\nif (!chatData.value) {\n  throw createError({ statusCode: 404, statusMessage: 'Chat not found', fatal: true })\n}\n\nconst input = ref('')\n\n\u002F\u002F Initialize the Chat class from AI SDK\nconst chat = new Chat({\n  id: chatData.value.id,\n  messages: chatData.value.messages,\n  transport: new DefaultChatTransport({\n    api: `\u002Fapi\u002Fchats\u002F${chatData.value.id}`\n  }),\n  onData(dataPart) {\n    \u002F\u002F Refresh the chat list when a title is generated\n    if (dataPart.type === 'data-chat-title') {\n      refreshNuxtData('chats')\n    }\n  },\n  onError(error) {\n    toast.add({\n      title: 'Error',\n      description: error.message,\n      color: 'error'\n    })\n  }\n})\n\nfunction handleSubmit(e: Event) {\n  e.preventDefault()\n  if (input.value.trim()) {\n    chat.sendMessage({ text: input.value })\n    input.value = ''\n  }\n}\n\n\u002F\u002F Auto-generate response for first message\nonMounted(() => {\n  if (chatData.value?.messages.length === 1) {\n    chat.regenerate()\n  }\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CUDashboardPanel :ui=\"{ body: 'p-0 sm:p-0' }\">\n    \u003Ctemplate #header>\n      \u003CChatsHistory \u002F>\n    \u003C\u002Ftemplate>\n    \u003Ctemplate #body>\n      \u003CUContainer class=\"min-h-dvh flex flex-col py-4 sm:py-6\">\n        \u003CUChatMessages\n          :messages=\"chat.messages\"\n          :status=\"chat.status\"\n          should-auto-scroll\n          class=\"flex-1\"\n        >\n          \u003Ctemplate #content=\"{ message }\">\n            \u003Ctemplate v-for=\"(part, index) in message.parts\" :key=\"`${message.id}-${part.type}-${index}`\">\n              \u003CUChatReasoning\n                v-if=\"isReasoningUIPart(part)\"\n                :text=\"part.text\"\n                :streaming=\"isPartStreaming(part)\"\n              >\n                \u003CMDC\n                  :value=\"part.text\"\n                  :cache-key=\"`reasoning-${message.id}-${index}`\"\n                  class=\"*:first:mt-0 *:last:mb-0\"\n                \u002F>\n              \u003C\u002FUChatReasoning>\n\n              \u003Ctemplate v-else-if=\"isTextUIPart(part)\">\n                \u003CMDC\n                  v-if=\"message.role === 'assistant'\"\n                  :value=\"part.text\"\n                  :cache-key=\"`${message.id}-${index}`\"\n                  class=\"*:first:mt-0 *:last:mb-0\"\n                \u002F>\n                \u003Cp v-else-if=\"message.role === 'user'\" class=\"whitespace-pre-wrap\">\n                  {{ part.text }}\n                \u003C\u002Fp>\n              \u003C\u002Ftemplate>\n            \u003C\u002Ftemplate>\n          \u003C\u002Ftemplate>\n        \u003C\u002FUChatMessages>\n\n        \u003CUChatPrompt\n          v-model=\"input\"\n          :error=\"chat.error\"\n          variant=\"subtle\"\n          class=\"sticky bottom-0\"\n          @submit=\"handleSubmit\"\n        >\n          \u003CUChatPromptSubmit\n            :status=\"chat.status\"\n            color=\"neutral\"\n            @stop=\"chat.stop()\"\n            @reload=\"chat.regenerate()\"\n          \u002F>\n        \u003C\u002FUChatPrompt>\n      \u003C\u002FUContainer>\n    \u003C\u002Ftemplate>\n  \u003C\u002FUDashboardPanel>\n\u003C\u002Ftemplate>\n",[3974,3980,3997],[1049,8583,8584,8604,8630,8648,8666,8670,8682,8694,8698,8702,8744,8748,8764,8804,8808,8812,8828,8832,8836,8852,8870,8888,8902,8926,8934,8946,8950,8974,8988,8992,8996,9008,9020,9034,9048,9060,9066,9070,9076,9080,9098,9108,9128,9154,9166,9170,9174,9178,9182,9194,9222,9232,9236,9242,9250,9254,9262,9280,9292,9300,9308,9320,9339,9346,9359,9371,9375,9387,9391,9415,9481,9487,9499,9511,9523,9527,9533,9545,9557,9569,9573,9581,9585,9605,9611,9623,9635,9647,9659,9663,9691,9695,9703,9711,9719,9727,9735,9739,9745,9757,9769,9781,9793,9805,9809,9815,9827,9839,9851,9863,9867,9875,9883,9892,9901],{"__ignoreMap":1095},[1099,8585,8586,8588,8590,8592,8594,8596,8598,8600,8602],{"class":1101,"line":1102},[1099,8587,1572],{"class":1317},[1099,8589,5124],{"class":1323},[1099,8591,5127],{"class":1600},[1099,8593,5130],{"class":1600},[1099,8595,1604],{"class":1317},[1099,8597,1531],{"class":1317},[1099,8599,1296],{"class":1109},[1099,8601,1531],{"class":1317},[1099,8603,1578],{"class":1317},[1099,8605,8606,8608,8610,8612,8614,8616,8618,8620,8622,8624,8626,8628],{"class":1101,"line":1119},[1099,8607,1720],{"class":1303},[1099,8609,1723],{"class":1317},[1099,8611,5776],{"class":1313},[1099,8613,1729],{"class":1317},[1099,8615,5781],{"class":1313},[1099,8617,1729],{"class":1317},[1099,8619,5786],{"class":1313},[1099,8621,1745],{"class":1317},[1099,8623,1748],{"class":1303},[1099,8625,1404],{"class":1317},[1099,8627,2546],{"class":1109},[1099,8629,1368],{"class":1317},[1099,8631,8632,8634,8636,8638,8640,8642,8644,8646],{"class":1101,"line":1333},[1099,8633,1720],{"class":1303},[1099,8635,1723],{"class":1317},[1099,8637,5806],{"class":1313},[1099,8639,1745],{"class":1317},[1099,8641,1748],{"class":1303},[1099,8643,1404],{"class":1317},[1099,8645,5815],{"class":1109},[1099,8647,1368],{"class":1317},[1099,8649,8650,8652,8654,8656,8658,8660,8662,8664],{"class":1101,"line":1348},[1099,8651,1720],{"class":1303},[1099,8653,1723],{"class":1317},[1099,8655,5827],{"class":1313},[1099,8657,1745],{"class":1317},[1099,8659,1748],{"class":1303},[1099,8661,1404],{"class":1317},[1099,8663,5836],{"class":1109},[1099,8665,1368],{"class":1317},[1099,8667,8668],{"class":1101,"line":1360},[1099,8669,1382],{"emptyLinePlaceholder":21},[1099,8671,8672,8674,8676,8678,8680],{"class":1101,"line":1371},[1099,8673,3073],{"class":1600},[1099,8675,5849],{"class":1313},[1099,8677,1604],{"class":1317},[1099,8679,5854],{"class":1122},[1099,8681,2681],{"class":1313},[1099,8683,8684,8686,8688,8690,8692],{"class":1101,"line":1379},[1099,8685,3073],{"class":1600},[1099,8687,5863],{"class":1313},[1099,8689,1604],{"class":1317},[1099,8691,5868],{"class":1122},[1099,8693,2681],{"class":1313},[1099,8695,8696],{"class":1101,"line":1385},[1099,8697,1382],{"emptyLinePlaceholder":21},[1099,8699,8700],{"class":1101,"line":1396},[1099,8701,5879],{"class":1483},[1099,8703,8704,8706,8708,8710,8712,8714,8716,8718,8720,8722,8724,8726,8728,8730,8732,8734,8736,8738,8740,8742],{"class":1101,"line":1412},[1099,8705,3073],{"class":1600},[1099,8707,1723],{"class":1317},[1099,8709,5888],{"class":1323},[1099,8711,1327],{"class":1317},[1099,8713,5893],{"class":1313},[1099,8715,1501],{"class":1317},[1099,8717,2635],{"class":1317},[1099,8719,2638],{"class":1303},[1099,8721,5902],{"class":1122},[1099,8723,1314],{"class":1313},[1099,8725,3689],{"class":1317},[1099,8727,5909],{"class":1109},[1099,8729,5396],{"class":1317},[1099,8731,5914],{"class":1313},[1099,8733,1821],{"class":1317},[1099,8735,5919],{"class":1313},[1099,8737,1821],{"class":1317},[1099,8739,2030],{"class":1313},[1099,8741,5405],{"class":1317},[1099,8743,1504],{"class":1313},[1099,8745,8746],{"class":1101,"line":1418},[1099,8747,1382],{"emptyLinePlaceholder":21},[1099,8749,8750,8752,8754,8756,8758,8760,8762],{"class":1101,"line":1423},[1099,8751,5936],{"class":1303},[1099,8753,1964],{"class":1313},[1099,8755,3545],{"class":1317},[1099,8757,5943],{"class":1313},[1099,8759,1821],{"class":1317},[1099,8761,5948],{"class":1313},[1099,8763,1318],{"class":1317},[1099,8765,8766,8768,8770,8772,8774,8776,8778,8780,8782,8784,8786,8788,8790,8792,8794,8796,8798,8800,8802],{"class":1101,"line":1446},[1099,8767,5955],{"class":1303},[1099,8769,2911],{"class":1122},[1099,8771,1314],{"class":1323},[1099,8773,1878],{"class":1317},[1099,8775,3567],{"class":1323},[1099,8777,1327],{"class":1317},[1099,8779,3573],{"class":3572},[1099,8781,1729],{"class":1317},[1099,8783,3578],{"class":1323},[1099,8785,1327],{"class":1317},[1099,8787,1404],{"class":1317},[1099,8789,3585],{"class":1109},[1099,8791,1342],{"class":1317},[1099,8793,1729],{"class":1317},[1099,8795,5984],{"class":1323},[1099,8797,1327],{"class":1317},[1099,8799,4181],{"class":1479},[1099,8801,1745],{"class":1317},[1099,8803,1504],{"class":1323},[1099,8805,8806],{"class":1101,"line":1451},[1099,8807,5412],{"class":1317},[1099,8809,8810],{"class":1101,"line":1461},[1099,8811,1382],{"emptyLinePlaceholder":21},[1099,8813,8814,8816,8818,8820,8822,8824,8826],{"class":1101,"line":1471},[1099,8815,3073],{"class":1600},[1099,8817,5147],{"class":1313},[1099,8819,1604],{"class":1317},[1099,8821,5152],{"class":1122},[1099,8823,1314],{"class":1313},[1099,8825,5157],{"class":1317},[1099,8827,1504],{"class":1313},[1099,8829,8830],{"class":1101,"line":1487},[1099,8831,1382],{"emptyLinePlaceholder":21},[1099,8833,8834],{"class":1101,"line":1493},[1099,8835,6025],{"class":1483},[1099,8837,8838,8840,8842,8844,8846,8848,8850],{"class":1101,"line":1498},[1099,8839,3073],{"class":1600},[1099,8841,6033],{"class":1313},[1099,8843,1604],{"class":1317},[1099,8845,1915],{"class":1317},[1099,8847,5806],{"class":1122},[1099,8849,1314],{"class":1313},[1099,8851,1318],{"class":1317},[1099,8853,8854,8856,8858,8860,8862,8864,8866,8868],{"class":1101,"line":2287},[1099,8855,1811],{"class":1323},[1099,8857,1327],{"class":1317},[1099,8859,6053],{"class":1313},[1099,8861,1821],{"class":1317},[1099,8863,3334],{"class":1313},[1099,8865,1821],{"class":1317},[1099,8867,2030],{"class":1313},[1099,8869,1345],{"class":1317},[1099,8871,8872,8874,8876,8878,8880,8882,8884,8886],{"class":1101,"line":2300},[1099,8873,1971],{"class":1323},[1099,8875,1327],{"class":1317},[1099,8877,6053],{"class":1313},[1099,8879,1821],{"class":1317},[1099,8881,3334],{"class":1313},[1099,8883,1821],{"class":1317},[1099,8885,2009],{"class":1313},[1099,8887,1345],{"class":1317},[1099,8889,8890,8892,8894,8896,8898,8900],{"class":1101,"line":2330},[1099,8891,6088],{"class":1323},[1099,8893,1327],{"class":1317},[1099,8895,1915],{"class":1317},[1099,8897,5776],{"class":1122},[1099,8899,1314],{"class":1313},[1099,8901,1318],{"class":1317},[1099,8903,8904,8906,8908,8910,8912,8914,8916,8918,8920,8922,8924],{"class":1101,"line":2336},[1099,8905,6104],{"class":1323},[1099,8907,1327],{"class":1317},[1099,8909,3683],{"class":1317},[1099,8911,5909],{"class":1109},[1099,8913,5396],{"class":1317},[1099,8915,5943],{"class":1313},[1099,8917,1821],{"class":1317},[1099,8919,3334],{"class":1313},[1099,8921,1821],{"class":1317},[1099,8923,2030],{"class":1313},[1099,8925,6125],{"class":1317},[1099,8927,8928,8930,8932],{"class":1101,"line":2341},[1099,8929,2426],{"class":1317},[1099,8931,1895],{"class":1313},[1099,8933,1345],{"class":1317},[1099,8935,8936,8938,8940,8942,8944],{"class":1101,"line":2373},[1099,8937,6140],{"class":1323},[1099,8939,1314],{"class":1317},[1099,8941,6145],{"class":1955},[1099,8943,1895],{"class":1317},[1099,8945,1393],{"class":1317},[1099,8947,8948],{"class":1101,"line":2389},[1099,8949,6155],{"class":1483},[1099,8951,8952,8954,8956,8958,8960,8962,8964,8966,8968,8970,8972],{"class":1101,"line":2407},[1099,8953,6161],{"class":1303},[1099,8955,1964],{"class":1323},[1099,8957,6145],{"class":1313},[1099,8959,1821],{"class":1317},[1099,8961,6170],{"class":1313},[1099,8963,3361],{"class":1317},[1099,8965,1404],{"class":1317},[1099,8967,4328],{"class":1109},[1099,8969,1342],{"class":1317},[1099,8971,3550],{"class":1323},[1099,8973,1318],{"class":1317},[1099,8975,8976,8978,8980,8982,8984,8986],{"class":1101,"line":2423},[1099,8977,6188],{"class":1122},[1099,8979,1314],{"class":1323},[1099,8981,1342],{"class":1317},[1099,8983,1800],{"class":1109},[1099,8985,1342],{"class":1317},[1099,8987,1504],{"class":1323},[1099,8989,8990],{"class":1101,"line":2431},[1099,8991,1490],{"class":1317},[1099,8993,8994],{"class":1101,"line":3426},[1099,8995,1415],{"class":1317},[1099,8997,8998,9000,9002,9004,9006],{"class":1101,"line":3439},[1099,8999,6214],{"class":1323},[1099,9001,1314],{"class":1317},[1099,9003,6219],{"class":1955},[1099,9005,1895],{"class":1317},[1099,9007,1393],{"class":1317},[1099,9009,9010,9012,9014,9016,9018],{"class":1101,"line":3444},[1099,9011,6229],{"class":1313},[1099,9013,1821],{"class":1317},[1099,9015,6234],{"class":1122},[1099,9017,1314],{"class":1323},[1099,9019,1318],{"class":1317},[1099,9021,9022,9024,9026,9028,9030,9032],{"class":1101,"line":3450},[1099,9023,6244],{"class":1323},[1099,9025,1327],{"class":1317},[1099,9027,1404],{"class":1317},[1099,9029,497],{"class":1109},[1099,9031,1342],{"class":1317},[1099,9033,1345],{"class":1317},[1099,9035,9036,9038,9040,9042,9044,9046],{"class":1101,"line":3481},[1099,9037,6260],{"class":1323},[1099,9039,1327],{"class":1317},[1099,9041,6265],{"class":1313},[1099,9043,1821],{"class":1317},[1099,9045,4480],{"class":1313},[1099,9047,1345],{"class":1317},[1099,9049,9050,9052,9054,9056,9058],{"class":1101,"line":3525},[1099,9051,6277],{"class":1323},[1099,9053,1327],{"class":1317},[1099,9055,1404],{"class":1317},[1099,9057,6219],{"class":1109},[1099,9059,1368],{"class":1317},[1099,9061,9062,9064],{"class":1101,"line":3532},[1099,9063,3388],{"class":1317},[1099,9065,1504],{"class":1323},[1099,9067,9068],{"class":1101,"line":3537},[1099,9069,3597],{"class":1317},[1099,9071,9072,9074],{"class":1101,"line":3555},[1099,9073,1501],{"class":1317},[1099,9075,1504],{"class":1313},[1099,9077,9078],{"class":1101,"line":3594},[1099,9079,1382],{"emptyLinePlaceholder":21},[1099,9081,9082,9084,9086,9088,9090,9092,9094,9096],{"class":1101,"line":3600},[1099,9083,6313],{"class":1600},[1099,9085,6316],{"class":1122},[1099,9087,1314],{"class":1317},[1099,9089,6321],{"class":1955},[1099,9091,1327],{"class":1317},[1099,9093,6326],{"class":1105},[1099,9095,1895],{"class":1317},[1099,9097,1393],{"class":1317},[1099,9099,9100,9102,9104,9106],{"class":1101,"line":3605},[1099,9101,6335],{"class":1313},[1099,9103,1821],{"class":1317},[1099,9105,6340],{"class":1122},[1099,9107,2681],{"class":1323},[1099,9109,9110,9112,9114,9116,9118,9120,9122,9124,9126],{"class":1101,"line":3611},[1099,9111,3540],{"class":1303},[1099,9113,1964],{"class":1323},[1099,9115,5206],{"class":1313},[1099,9117,1821],{"class":1317},[1099,9119,3334],{"class":1313},[1099,9121,1821],{"class":1317},[1099,9123,5215],{"class":1122},[1099,9125,5218],{"class":1323},[1099,9127,1318],{"class":1317},[1099,9129,9130,9132,9134,9136,9138,9140,9142,9144,9146,9148,9150,9152],{"class":1101,"line":3631},[1099,9131,6367],{"class":1313},[1099,9133,1821],{"class":1317},[1099,9135,6372],{"class":1122},[1099,9137,1314],{"class":1323},[1099,9139,1878],{"class":1317},[1099,9141,1732],{"class":1323},[1099,9143,1327],{"class":1317},[1099,9145,5350],{"class":1313},[1099,9147,1821],{"class":1317},[1099,9149,3334],{"class":1313},[1099,9151,1745],{"class":1317},[1099,9153,1504],{"class":1323},[1099,9155,9156,9158,9160,9162,9164],{"class":1101,"line":3659},[1099,9157,6395],{"class":1313},[1099,9159,1821],{"class":1317},[1099,9161,3334],{"class":1313},[1099,9163,2635],{"class":1317},[1099,9165,6404],{"class":1317},[1099,9167,9168],{"class":1101,"line":3675},[1099,9169,3597],{"class":1317},[1099,9171,9172],{"class":1101,"line":3694},[1099,9173,5412],{"class":1317},[1099,9175,9176],{"class":1101,"line":3722},[1099,9177,1382],{"emptyLinePlaceholder":21},[1099,9179,9180],{"class":1101,"line":3729},[1099,9181,6421],{"class":1483},[1099,9183,9184,9186,9188,9190,9192],{"class":1101,"line":3734},[1099,9185,6426],{"class":1122},[1099,9187,1314],{"class":1313},[1099,9189,1818],{"class":1317},[1099,9191,1838],{"class":1600},[1099,9193,1393],{"class":1317},[1099,9195,9196,9198,9200,9202,9204,9206,9208,9210,9212,9214,9216,9218,9220],{"class":1101,"line":3800},[1099,9197,3540],{"class":1303},[1099,9199,1964],{"class":1323},[1099,9201,5943],{"class":1313},[1099,9203,1821],{"class":1317},[1099,9205,3334],{"class":1313},[1099,9207,3855],{"class":1317},[1099,9209,2009],{"class":1313},[1099,9211,1821],{"class":1317},[1099,9213,3834],{"class":1313},[1099,9215,3361],{"class":1317},[1099,9217,3840],{"class":3572},[1099,9219,3550],{"class":1323},[1099,9221,1318],{"class":1317},[1099,9223,9224,9226,9228,9230],{"class":1101,"line":3805},[1099,9225,6367],{"class":1313},[1099,9227,1821],{"class":1317},[1099,9229,6471],{"class":1122},[1099,9231,2681],{"class":1323},[1099,9233,9234],{"class":1101,"line":3810},[1099,9235,3597],{"class":1317},[1099,9237,9238,9240],{"class":1101,"line":3816},[1099,9239,1501],{"class":1317},[1099,9241,1504],{"class":1313},[1099,9243,9244,9246,9248],{"class":1101,"line":3845},[1099,9245,1648],{"class":1317},[1099,9247,5124],{"class":1323},[1099,9249,1578],{"class":1317},[1099,9251,9252],{"class":1101,"line":3886},[1099,9253,1382],{"emptyLinePlaceholder":21},[1099,9255,9256,9258,9260],{"class":1101,"line":3915},[1099,9257,1572],{"class":1317},[1099,9259,1575],{"class":1323},[1099,9261,1578],{"class":1317},[1099,9263,9264,9266,9268,9270,9272,9274,9276,9278],{"class":1101,"line":3927},[1099,9265,1585],{"class":1317},[1099,9267,5439],{"class":1323},[1099,9269,5442],{"class":1600},[1099,9271,1604],{"class":1317},[1099,9273,1531],{"class":1317},[1099,9275,5449],{"class":1109},[1099,9277,1531],{"class":1317},[1099,9279,1578],{"class":1317},[1099,9281,9282,9284,9286,9288,9290],{"class":1101,"line":3943},[1099,9283,1594],{"class":1317},[1099,9285,1575],{"class":1323},[1099,9287,5462],{"class":1317},[1099,9289,8356],{"class":1600},[1099,9291,1578],{"class":1317},[1099,9293,9294,9296,9298],{"class":1101,"line":3957},[1099,9295,1618],{"class":1317},[1099,9297,8366],{"class":1323},[1099,9299,1624],{"class":1317},[1099,9301,9302,9304,9306],{"class":1101,"line":3964},[1099,9303,1629],{"class":1317},[1099,9305,1575],{"class":1323},[1099,9307,1578],{"class":1317},[1099,9309,9310,9312,9314,9316,9318],{"class":1101,"line":3969},[1099,9311,1594],{"class":1317},[1099,9313,1575],{"class":1323},[1099,9315,5462],{"class":1317},[1099,9317,5465],{"class":1600},[1099,9319,1578],{"class":1317},[1099,9321,9323,9325,9327,9329,9331,9333,9335,9337],{"class":9322,"line":3974},[1101,1582],[1099,9324,1618],{"class":1317},[1099,9326,5474],{"class":1323},[1099,9328,5477],{"class":1600},[1099,9330,1604],{"class":1317},[1099,9332,1531],{"class":1317},[1099,9334,6548],{"class":1109},[1099,9336,1531],{"class":1317},[1099,9338,1578],{"class":1317},[1099,9340,9342,9344],{"class":9341,"line":3980},[1101,1582],[1099,9343,5493],{"class":1317},[1099,9345,6559],{"class":1323},[1099,9347,9349,9351,9353,9355,9357],{"class":9348,"line":3997},[1101,1582],[1099,9350,6564],{"class":1600},[1099,9352,1604],{"class":1317},[1099,9354,1531],{"class":1317},[1099,9356,6571],{"class":1109},[1099,9358,5550],{"class":1317},[1099,9360,9361,9363,9365,9367,9369],{"class":1101,"line":4019},[1099,9362,5556],{"class":1600},[1099,9364,1604],{"class":1317},[1099,9366,1531],{"class":1317},[1099,9368,6584],{"class":1109},[1099,9370,5550],{"class":1317},[1099,9372,9373],{"class":1101,"line":4037},[1099,9374,6591],{"class":1600},[1099,9376,9377,9379,9381,9383,9385],{"class":1101,"line":4045},[1099,9378,6596],{"class":1600},[1099,9380,1604],{"class":1317},[1099,9382,1531],{"class":1317},[1099,9384,6603],{"class":1109},[1099,9386,5550],{"class":1317},[1099,9388,9389],{"class":1101,"line":4062},[1099,9390,5616],{"class":1317},[1099,9392,9393,9395,9397,9399,9401,9403,9405,9407,9409,9411,9413],{"class":1101,"line":4083},[1099,9394,5622],{"class":1317},[1099,9396,1575],{"class":1323},[1099,9398,5462],{"class":1317},[1099,9400,371],{"class":1600},[1099,9402,1604],{"class":1317},[1099,9404,1531],{"class":1317},[1099,9406,1878],{"class":1317},[1099,9408,6628],{"class":1313},[1099,9410,1501],{"class":1317},[1099,9412,1531],{"class":1317},[1099,9414,1578],{"class":1317},[1099,9416,9417,9419,9421,9423,9425,9427,9429,9431,9433,9435,9437,9439,9441,9443,9445,9447,9449,9451,9453,9455,9457,9459,9461,9463,9465,9467,9469,9471,9473,9475,9477,9479],{"class":1101,"line":4093},[1099,9418,6639],{"class":1317},[1099,9420,1575],{"class":1323},[1099,9422,6644],{"class":1303},[1099,9424,1604],{"class":1317},[1099,9426,1531],{"class":1317},[1099,9428,6651],{"class":1313},[1099,9430,1729],{"class":1317},[1099,9432,6656],{"class":1313},[1099,9434,6659],{"class":1317},[1099,9436,2630],{"class":1313},[1099,9438,1821],{"class":1317},[1099,9440,2211],{"class":1313},[1099,9442,1531],{"class":1317},[1099,9444,6670],{"class":1317},[1099,9446,6673],{"class":1600},[1099,9448,1604],{"class":1317},[1099,9450,6678],{"class":1317},[1099,9452,4480],{"class":1313},[1099,9454,1821],{"class":1317},[1099,9456,2030],{"class":1313},[1099,9458,1501],{"class":1317},[1099,9460,6689],{"class":1109},[1099,9462,5396],{"class":1317},[1099,9464,6694],{"class":1313},[1099,9466,1821],{"class":1317},[1099,9468,6170],{"class":1313},[1099,9470,1501],{"class":1317},[1099,9472,6689],{"class":1109},[1099,9474,5396],{"class":1317},[1099,9476,6707],{"class":1313},[1099,9478,6710],{"class":1317},[1099,9480,1578],{"class":1317},[1099,9482,9483,9485],{"class":1101,"line":4103},[1099,9484,6717],{"class":1317},[1099,9486,6720],{"class":1323},[1099,9488,9489,9491,9493,9495,9497],{"class":1101,"line":4113},[1099,9490,6725],{"class":1600},[1099,9492,1604],{"class":1317},[1099,9494,1531],{"class":1317},[1099,9496,6732],{"class":1109},[1099,9498,5550],{"class":1317},[1099,9500,9501,9503,9505,9507,9509],{"class":1101,"line":4130},[1099,9502,6739],{"class":1600},[1099,9504,1604],{"class":1317},[1099,9506,1531],{"class":1317},[1099,9508,6746],{"class":1109},[1099,9510,5550],{"class":1317},[1099,9512,9513,9515,9517,9519,9521],{"class":1101,"line":4141},[1099,9514,6753],{"class":1600},[1099,9516,1604],{"class":1317},[1099,9518,1531],{"class":1317},[1099,9520,6760],{"class":1109},[1099,9522,5550],{"class":1317},[1099,9524,9525],{"class":1101,"line":4147},[1099,9526,6767],{"class":1317},[1099,9528,9529,9531],{"class":1101,"line":4153},[1099,9530,6772],{"class":1317},[1099,9532,6775],{"class":1323},[1099,9534,9535,9537,9539,9541,9543],{"class":1101,"line":4163},[1099,9536,6780],{"class":1600},[1099,9538,1604],{"class":1317},[1099,9540,1531],{"class":1317},[1099,9542,6746],{"class":1109},[1099,9544,5550],{"class":1317},[1099,9546,9547,9549,9551,9553,9555],{"class":1101,"line":4173},[1099,9548,6793],{"class":1600},[1099,9550,1604],{"class":1317},[1099,9552,1531],{"class":1317},[1099,9554,6800],{"class":1109},[1099,9556,5550],{"class":1317},[1099,9558,9559,9561,9563,9565,9567],{"class":1101,"line":4186},[1099,9560,6807],{"class":1600},[1099,9562,1604],{"class":1317},[1099,9564,1531],{"class":1317},[1099,9566,6814],{"class":1109},[1099,9568,5550],{"class":1317},[1099,9570,9571],{"class":1101,"line":4201},[1099,9572,6821],{"class":1317},[1099,9574,9575,9577,9579],{"class":1101,"line":4206},[1099,9576,6826],{"class":1317},[1099,9578,6829],{"class":1323},[1099,9580,1578],{"class":1317},[1099,9582,9583],{"class":1101,"line":4211},[1099,9584,1382],{"emptyLinePlaceholder":21},[1099,9586,9587,9589,9591,9593,9595,9597,9599,9601,9603],{"class":1101,"line":4221},[1099,9588,6717],{"class":1317},[1099,9590,1575],{"class":1323},[1099,9592,6844],{"class":1303},[1099,9594,1604],{"class":1317},[1099,9596,1531],{"class":1317},[1099,9598,6851],{"class":1122},[1099,9600,6854],{"class":1313},[1099,9602,1531],{"class":1317},[1099,9604,1578],{"class":1317},[1099,9606,9607,9609],{"class":1101,"line":4237},[1099,9608,6772],{"class":1317},[1099,9610,6775],{"class":1323},[1099,9612,9613,9615,9617,9619,9621],{"class":1101,"line":4252},[1099,9614,6869],{"class":1600},[1099,9616,1604],{"class":1317},[1099,9618,1531],{"class":1317},[1099,9620,6876],{"class":1109},[1099,9622,5550],{"class":1317},[1099,9624,9625,9627,9629,9631,9633],{"class":1101,"line":4258},[1099,9626,6780],{"class":1600},[1099,9628,1604],{"class":1317},[1099,9630,1531],{"class":1317},[1099,9632,6746],{"class":1109},[1099,9634,5550],{"class":1317},[1099,9636,9637,9639,9641,9643,9645],{"class":1101,"line":4264},[1099,9638,6793],{"class":1600},[1099,9640,1604],{"class":1317},[1099,9642,1531],{"class":1317},[1099,9644,6901],{"class":1109},[1099,9646,5550],{"class":1317},[1099,9648,9649,9651,9653,9655,9657],{"class":1101,"line":4272},[1099,9650,6807],{"class":1600},[1099,9652,1604],{"class":1317},[1099,9654,1531],{"class":1317},[1099,9656,6814],{"class":1109},[1099,9658,5550],{"class":1317},[1099,9660,9661],{"class":1101,"line":4277},[1099,9662,6821],{"class":1317},[1099,9664,9665,9667,9669,9671,9673,9675,9677,9679,9681,9683,9685,9687,9689],{"class":1101,"line":4283},[1099,9666,6772],{"class":1317},[1099,9668,989],{"class":1323},[1099,9670,6844],{"class":1600},[1099,9672,1604],{"class":1317},[1099,9674,1531],{"class":1317},[1099,9676,6934],{"class":1109},[1099,9678,1531],{"class":1317},[1099,9680,5477],{"class":1600},[1099,9682,1604],{"class":1317},[1099,9684,1531],{"class":1317},[1099,9686,6945],{"class":1109},[1099,9688,1531],{"class":1317},[1099,9690,1578],{"class":1317},[1099,9692,9693],{"class":1101,"line":4303},[1099,9694,6954],{"class":1313},[1099,9696,9697,9699,9701],{"class":1101,"line":4318},[1099,9698,6959],{"class":1317},[1099,9700,989],{"class":1323},[1099,9702,1578],{"class":1317},[1099,9704,9705,9707,9709],{"class":1101,"line":4335},[1099,9706,6826],{"class":1317},[1099,9708,1575],{"class":1323},[1099,9710,1578],{"class":1317},[1099,9712,9713,9715,9717],{"class":1101,"line":4358},[1099,9714,6976],{"class":1317},[1099,9716,1575],{"class":1323},[1099,9718,1578],{"class":1317},[1099,9720,9721,9723,9725],{"class":1101,"line":4369},[1099,9722,6985],{"class":1317},[1099,9724,1575],{"class":1323},[1099,9726,1578],{"class":1317},[1099,9728,9729,9731,9733],{"class":1101,"line":4377},[1099,9730,5519],{"class":1317},[1099,9732,5095],{"class":1323},[1099,9734,1578],{"class":1317},[1099,9736,9737],{"class":1101,"line":4383},[1099,9738,1382],{"emptyLinePlaceholder":21},[1099,9740,9741,9743],{"class":1101,"line":4388},[1099,9742,5493],{"class":1317},[1099,9744,5535],{"class":1323},[1099,9746,9747,9749,9751,9753,9755],{"class":1101,"line":4411},[1099,9748,5541],{"class":1600},[1099,9750,1604],{"class":1317},[1099,9752,1531],{"class":1317},[1099,9754,5206],{"class":1109},[1099,9756,5550],{"class":1317},[1099,9758,9759,9761,9763,9765,9767],{"class":1101,"line":4417},[1099,9760,7024],{"class":1600},[1099,9762,1604],{"class":1317},[1099,9764,1531],{"class":1317},[1099,9766,7031],{"class":1109},[1099,9768,5550],{"class":1317},[1099,9770,9771,9773,9775,9777,9779],{"class":1101,"line":4437},[1099,9772,5571],{"class":1600},[1099,9774,1604],{"class":1317},[1099,9776,1531],{"class":1317},[1099,9778,5578],{"class":1109},[1099,9780,5550],{"class":1317},[1099,9782,9783,9785,9787,9789,9791],{"class":1101,"line":4443},[1099,9784,6596],{"class":1600},[1099,9786,1604],{"class":1317},[1099,9788,1531],{"class":1317},[1099,9790,7056],{"class":1109},[1099,9792,5550],{"class":1317},[1099,9794,9795,9797,9799,9801,9803],{"class":1101,"line":4489},[1099,9796,5601],{"class":1600},[1099,9798,1604],{"class":1317},[1099,9800,1531],{"class":1317},[1099,9802,7069],{"class":1109},[1099,9804,5550],{"class":1317},[1099,9806,9807],{"class":1101,"line":4505},[1099,9808,5616],{"class":1317},[1099,9810,9811,9813],{"class":1101,"line":4538},[1099,9812,5622],{"class":1317},[1099,9814,7082],{"class":1323},[1099,9816,9817,9819,9821,9823,9825],{"class":1101,"line":4552},[1099,9818,7087],{"class":1600},[1099,9820,1604],{"class":1317},[1099,9822,1531],{"class":1317},[1099,9824,6584],{"class":1109},[1099,9826,5550],{"class":1317},[1099,9828,9829,9831,9833,9835,9837],{"class":1101,"line":4560},[1099,9830,7100],{"class":1600},[1099,9832,1604],{"class":1317},[1099,9834,1531],{"class":1317},[1099,9836,5635],{"class":1109},[1099,9838,5550],{"class":1317},[1099,9840,9841,9843,9845,9847,9849],{"class":1101,"line":4565},[1099,9842,7113],{"class":1600},[1099,9844,1604],{"class":1317},[1099,9846,1531],{"class":1317},[1099,9848,7120],{"class":1109},[1099,9850,5550],{"class":1317},[1099,9852,9853,9855,9857,9859,9861],{"class":1101,"line":4572},[1099,9854,7127],{"class":1600},[1099,9856,1604],{"class":1317},[1099,9858,1531],{"class":1317},[1099,9860,7134],{"class":1109},[1099,9862,5550],{"class":1317},[1099,9864,9865],{"class":1101,"line":4577},[1099,9866,7141],{"class":1317},[1099,9868,9869,9871,9873],{"class":1101,"line":4595},[1099,9870,5519],{"class":1317},[1099,9872,5089],{"class":1323},[1099,9874,1578],{"class":1317},[1099,9876,9877,9879,9881],{"class":1101,"line":7176},[1099,9878,5653],{"class":1317},[1099,9880,5474],{"class":1323},[1099,9882,1578],{"class":1317},[1099,9884,9886,9888,9890],{"class":1101,"line":9885},113,[1099,9887,1629],{"class":1317},[1099,9889,1575],{"class":1323},[1099,9891,1578],{"class":1317},[1099,9893,9895,9897,9899],{"class":1101,"line":9894},114,[1099,9896,1639],{"class":1317},[1099,9898,5439],{"class":1323},[1099,9900,1578],{"class":1317},[1099,9902,9904,9906,9908],{"class":1101,"line":9903},115,[1099,9905,1648],{"class":1317},[1099,9907,1575],{"class":1323},[1099,9909,1578],{"class":1317},[989,9911,4638,9912,9915,9916,9918],{},[1049,9913,9914],{},"refreshNuxtData('chats')"," call in the chat page's ",[1049,9917,7244],{}," callback (as shown earlier) ensures the chat list updates automatically when a new title is generated.",[993,9920,9922],{"id":9921},"adding-multi-model-support","Adding multi-model support",[989,9924,9925,9926,9929],{},"One of the benefits of using ",[1043,9927,4607],{"href":1078,"rel":9928},[1047]," is the ability to switch between models seamlessly. This section adds a model selector to the chat.",[1127,9931,9933],{"id":9932},"creating-a-models-composable","Creating a models composable",[989,9935,9936,9937,1327],{},"Define the available models and persist the user's selection using ",[1043,9938,9941],{"href":9939,"rel":9940},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-cookie",[1047],[1049,9942,9943],{},"useCookie",[1290,9945,9946],{},[1090,9947,9950],{"className":1294,"code":9948,"filename":9949,"language":1296,"meta":1095,"style":1095},"export function useModels() {\n  const models = [\n    { label: 'GPT-5 Nano', value: 'openai\u002Fgpt-5-nano', icon: 'i-simple-icons-openai' },\n    { label: 'Claude Haiku 4.5', value: 'anthropic\u002Fclaude-haiku-4.5', icon: 'i-simple-icons-anthropic' },\n    { label: 'Gemini 3 Flash', value: 'google\u002Fgemini-3-flash', icon: 'i-simple-icons-google' }\n  ]\n\n  const model = useCookie\u003Cstring>('ai-model', {\n    default: () => 'anthropic\u002Fclaude-haiku-4.5'\n  })\n\n  return {\n    models,\n    model\n  }\n}\n","app\u002Fcomposables\u002FuseModels.ts",[1049,9951,9952,9965,9976,10022,10066,10110,10115,10119,10149,10166,10172,10176,10182,10189,10194,10198],{"__ignoreMap":1095},[1099,9953,9954,9956,9958,9961,9963],{"class":1101,"line":1102},[1099,9955,1304],{"class":1303},[1099,9957,5188],{"class":1600},[1099,9959,9960],{"class":1122}," useModels",[1099,9962,1818],{"class":1317},[1099,9964,1393],{"class":1317},[1099,9966,9967,9969,9972,9974],{"class":1101,"line":1119},[1099,9968,2625],{"class":1600},[1099,9970,9971],{"class":1313}," models",[1099,9973,2635],{"class":1317},[1099,9975,1330],{"class":1323},[1099,9977,9978,9981,9983,9985,9987,9989,9991,9993,9995,9997,9999,10001,10003,10005,10008,10010,10012,10018,10020],{"class":1101,"line":1333},[1099,9979,9980],{"class":1317},"    {",[1099,9982,3102],{"class":1323},[1099,9984,1327],{"class":1317},[1099,9986,1404],{"class":1317},[1099,9988,3109],{"class":1109},[1099,9990,1342],{"class":1317},[1099,9992,1729],{"class":1317},[1099,9994,3088],{"class":1323},[1099,9996,1327],{"class":1317},[1099,9998,1404],{"class":1317},[1099,10000,3095],{"class":1109},[1099,10002,1342],{"class":1317},[1099,10004,1729],{"class":1317},[1099,10006,10007],{"class":1323}," icon",[1099,10009,1327],{"class":1317},[1099,10011,1404],{"class":1317},[1099,10013,10014,10017],{"class":1109},[7733,10015],{"class":10016},"shiki-icon-highlight sh9xi","i-simple-icons-openai",[1099,10019,1342],{"class":1317},[1099,10021,3114],{"class":1317},[1099,10023,10024,10026,10028,10030,10032,10034,10036,10038,10040,10042,10044,10046,10048,10050,10052,10054,10056,10062,10064],{"class":1101,"line":1348},[1099,10025,9980],{"class":1317},[1099,10027,3102],{"class":1323},[1099,10029,1327],{"class":1317},[1099,10031,1404],{"class":1317},[1099,10033,3140],{"class":1109},[1099,10035,1342],{"class":1317},[1099,10037,1729],{"class":1317},[1099,10039,3088],{"class":1323},[1099,10041,1327],{"class":1317},[1099,10043,1404],{"class":1317},[1099,10045,3127],{"class":1109},[1099,10047,1342],{"class":1317},[1099,10049,1729],{"class":1317},[1099,10051,10007],{"class":1323},[1099,10053,1327],{"class":1317},[1099,10055,1404],{"class":1317},[1099,10057,10058,10061],{"class":1109},[7733,10059],{"class":10060},"shiki-icon-highlight sNknm","i-simple-icons-anthropic",[1099,10063,1342],{"class":1317},[1099,10065,3114],{"class":1317},[1099,10067,10068,10070,10072,10074,10076,10078,10080,10082,10084,10086,10088,10090,10092,10094,10096,10098,10100,10106,10108],{"class":1101,"line":1360},[1099,10069,9980],{"class":1317},[1099,10071,3102],{"class":1323},[1099,10073,1327],{"class":1317},[1099,10075,1404],{"class":1317},[1099,10077,3170],{"class":1109},[1099,10079,1342],{"class":1317},[1099,10081,1729],{"class":1317},[1099,10083,3088],{"class":1323},[1099,10085,1327],{"class":1317},[1099,10087,1404],{"class":1317},[1099,10089,3157],{"class":1109},[1099,10091,1342],{"class":1317},[1099,10093,1729],{"class":1317},[1099,10095,10007],{"class":1323},[1099,10097,1327],{"class":1317},[1099,10099,1404],{"class":1317},[1099,10101,10102,10105],{"class":1109},[7733,10103],{"class":10104},"shiki-icon-highlight scZL3","i-simple-icons-google",[1099,10107,1342],{"class":1317},[1099,10109,3175],{"class":1317},[1099,10111,10112],{"class":1101,"line":1371},[1099,10113,10114],{"class":1323},"  ]\n",[1099,10116,10117],{"class":1101,"line":1379},[1099,10118,1382],{"emptyLinePlaceholder":21},[1099,10120,10121,10123,10125,10127,10130,10132,10134,10136,10138,10140,10143,10145,10147],{"class":1101,"line":1385},[1099,10122,2625],{"class":1600},[1099,10124,3280],{"class":1313},[1099,10126,2635],{"class":1317},[1099,10128,10129],{"class":1122}," useCookie",[1099,10131,1572],{"class":1317},[1099,10133,3253],{"class":1105},[1099,10135,2678],{"class":1317},[1099,10137,1314],{"class":1323},[1099,10139,1342],{"class":1317},[1099,10141,10142],{"class":1109},"ai-model",[1099,10144,1342],{"class":1317},[1099,10146,1729],{"class":1317},[1099,10148,1393],{"class":1317},[1099,10150,10151,10154,10156,10158,10160,10162,10164],{"class":1101,"line":1396},[1099,10152,10153],{"class":1122},"    default",[1099,10155,1327],{"class":1317},[1099,10157,4974],{"class":1317},[1099,10159,1838],{"class":1600},[1099,10161,1404],{"class":1317},[1099,10163,3127],{"class":1109},[1099,10165,1368],{"class":1317},[1099,10167,10168,10170],{"class":1101,"line":1412},[1099,10169,2426],{"class":1317},[1099,10171,1504],{"class":1323},[1099,10173,10174],{"class":1101,"line":1418},[1099,10175,1382],{"emptyLinePlaceholder":21},[1099,10177,10178,10180],{"class":1101,"line":1423},[1099,10179,2852],{"class":1303},[1099,10181,1393],{"class":1317},[1099,10183,10184,10187],{"class":1101,"line":1446},[1099,10185,10186],{"class":1313},"    models",[1099,10188,1345],{"class":1317},[1099,10190,10191],{"class":1101,"line":1451},[1099,10192,10193],{"class":1313},"    model\n",[1099,10195,10196],{"class":1101,"line":1461},[1099,10197,3597],{"class":1317},[1099,10199,10200],{"class":1101,"line":1471},[1099,10201,5412],{"class":1317},[1127,10203,10205],{"id":10204},"building-the-model-selector","Building the model selector",[989,10207,1655,10208,10213],{},[1043,10209,10210],{"href":734},[1049,10211,10212],{},"USelectMenu"," component that displays the available models:",[1290,10215,10216],{},[1090,10217,10220],{"className":1562,"code":10218,"filename":10219,"language":34,"meta":1095,"style":1095},"\u003Cscript setup lang=\"ts\">\nconst model = defineModel\u003Cstring>({ required: true })\n\nconst { models } = useModels()\n\nconst selectedModel = computed(() =>\n  models.find(m => m.value === model.value)\n)\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CUSelectMenu\n    v-model=\"model\"\n    :items=\"models\"\n    :icon=\"selectedModel?.icon\"\n    variant=\"ghost\"\n    value-key=\"value\"\n  \u002F>\n\u003C\u002Ftemplate>\n","app\u002Fcomponents\u002FModelSelect.vue",[1049,10221,10222,10242,10275,10279,10296,10300,10318,10350,10354,10362,10366,10374,10381,10394,10408,10422,10435,10448,10453],{"__ignoreMap":1095},[1099,10223,10224,10226,10228,10230,10232,10234,10236,10238,10240],{"class":1101,"line":1102},[1099,10225,1572],{"class":1317},[1099,10227,5124],{"class":1323},[1099,10229,5127],{"class":1600},[1099,10231,5130],{"class":1600},[1099,10233,1604],{"class":1317},[1099,10235,1531],{"class":1317},[1099,10237,1296],{"class":1109},[1099,10239,1531],{"class":1317},[1099,10241,1578],{"class":1317},[1099,10243,10244,10246,10249,10251,10254,10256,10258,10260,10262,10264,10267,10269,10271,10273],{"class":1101,"line":1119},[1099,10245,3073],{"class":1600},[1099,10247,10248],{"class":1313}," model ",[1099,10250,1604],{"class":1317},[1099,10252,10253],{"class":1122}," defineModel",[1099,10255,1572],{"class":1317},[1099,10257,3253],{"class":1105},[1099,10259,2678],{"class":1317},[1099,10261,1314],{"class":1313},[1099,10263,1878],{"class":1317},[1099,10265,10266],{"class":1323}," required",[1099,10268,1327],{"class":1317},[1099,10270,4181],{"class":1479},[1099,10272,1745],{"class":1317},[1099,10274,1504],{"class":1313},[1099,10276,10277],{"class":1101,"line":1333},[1099,10278,1382],{"emptyLinePlaceholder":21},[1099,10280,10281,10283,10285,10288,10290,10292,10294],{"class":1101,"line":1348},[1099,10282,3073],{"class":1600},[1099,10284,1723],{"class":1317},[1099,10286,10287],{"class":1313}," models ",[1099,10289,1501],{"class":1317},[1099,10291,2635],{"class":1317},[1099,10293,9960],{"class":1122},[1099,10295,2681],{"class":1313},[1099,10297,10298],{"class":1101,"line":1360},[1099,10299,1382],{"emptyLinePlaceholder":21},[1099,10301,10302,10304,10307,10309,10311,10313,10315],{"class":1101,"line":1371},[1099,10303,3073],{"class":1600},[1099,10305,10306],{"class":1313}," selectedModel ",[1099,10308,1604],{"class":1317},[1099,10310,7675],{"class":1122},[1099,10312,1314],{"class":1313},[1099,10314,1818],{"class":1317},[1099,10316,10317],{"class":1600}," =>\n",[1099,10319,10320,10323,10325,10328,10330,10332,10334,10336,10338,10341,10343,10345,10347],{"class":1101,"line":1379},[1099,10321,10322],{"class":1313},"  models",[1099,10324,1821],{"class":1317},[1099,10326,10327],{"class":1122},"find",[1099,10329,1314],{"class":1313},[1099,10331,3349],{"class":1955},[1099,10333,1838],{"class":1600},[1099,10335,3354],{"class":1313},[1099,10337,1821],{"class":1317},[1099,10339,10340],{"class":1313},"value ",[1099,10342,7758],{"class":1317},[1099,10344,3280],{"class":1313},[1099,10346,1821],{"class":1317},[1099,10348,10349],{"class":1313},"value)\n",[1099,10351,10352],{"class":1101,"line":1385},[1099,10353,1504],{"class":1313},[1099,10355,10356,10358,10360],{"class":1101,"line":1396},[1099,10357,1648],{"class":1317},[1099,10359,5124],{"class":1323},[1099,10361,1578],{"class":1317},[1099,10363,10364],{"class":1101,"line":1412},[1099,10365,1382],{"emptyLinePlaceholder":21},[1099,10367,10368,10370,10372],{"class":1101,"line":1418},[1099,10369,1572],{"class":1317},[1099,10371,1575],{"class":1323},[1099,10373,1578],{"class":1317},[1099,10375,10376,10378],{"class":1101,"line":1423},[1099,10377,1585],{"class":1317},[1099,10379,10380],{"class":1323},"USelectMenu\n",[1099,10382,10383,10386,10388,10390,10392],{"class":1101,"line":1446},[1099,10384,10385],{"class":1600},"    v-model",[1099,10387,1604],{"class":1317},[1099,10389,1531],{"class":1317},[1099,10391,4651],{"class":1109},[1099,10393,5550],{"class":1317},[1099,10395,10396,10399,10401,10403,10406],{"class":1101,"line":1451},[1099,10397,10398],{"class":1600},"    :items",[1099,10400,1604],{"class":1317},[1099,10402,1531],{"class":1317},[1099,10404,10405],{"class":1109},"models",[1099,10407,5550],{"class":1317},[1099,10409,10410,10413,10415,10417,10420],{"class":1101,"line":1461},[1099,10411,10412],{"class":1600},"    :icon",[1099,10414,1604],{"class":1317},[1099,10416,1531],{"class":1317},[1099,10418,10419],{"class":1109},"selectedModel?.icon",[1099,10421,5550],{"class":1317},[1099,10423,10424,10427,10429,10431,10433],{"class":1101,"line":1471},[1099,10425,10426],{"class":1600},"    variant",[1099,10428,1604],{"class":1317},[1099,10430,1531],{"class":1317},[1099,10432,7963],{"class":1109},[1099,10434,5550],{"class":1317},[1099,10436,10437,10440,10442,10444,10446],{"class":1101,"line":1487},[1099,10438,10439],{"class":1600},"    value-key",[1099,10441,1604],{"class":1317},[1099,10443,1531],{"class":1317},[1099,10445,3334],{"class":1109},[1099,10447,5550],{"class":1317},[1099,10449,10450],{"class":1101,"line":1493},[1099,10451,10452],{"class":1317},"  \u002F>\n",[1099,10454,10455,10457,10459],{"class":1101,"line":1498},[1099,10456,1648],{"class":1317},[1099,10458,1575],{"class":1323},[1099,10460,1578],{"class":1317},[1127,10462,10464],{"id":10463},"integrating-with-the-chat","Integrating with the chat",[989,10466,10467],{},"Update the chat page to include the model selector and pass the selected model to the server:",[1290,10469,10470],{},[1708,10471,10472],{},[1090,10473,10476],{"className":1562,"code":10474,"filename":5743,"highlights":10475,"language":34,"meta":1095,"style":1095},"\u003Cscript setup lang=\"ts\">\nimport { DefaultChatTransport, isReasoningUIPart, isTextUIPart } from 'ai'\nimport { Chat } from '@ai-sdk\u002Fvue'\nimport { isPartStreaming } from '@nuxt\u002Fui\u002Futils\u002Fai'\n\nconst route = useRoute()\nconst toast = useToast()\nconst { model } = useModels()\n\nconst { data: chatData } = await useFetch(`\u002Fapi\u002Fchats\u002F${route.params.id}`)\n\nif (!chatData.value) {\n  throw createError({ statusCode: 404, statusMessage: 'Chat not found', fatal: true })\n}\n\nconst input = ref('')\n\nconst chat = new Chat({\n  id: chatData.value.id,\n  messages: chatData.value.messages,\n  transport: new DefaultChatTransport({\n    api: `\u002Fapi\u002Fchats\u002F${chatData.value.id}`,\n    body: {\n      model: model.value \u002F\u002F Pass the selected model\n    }\n  }),\n  onData(dataPart) {\n    if (dataPart.type === 'data-chat-title') {\n      refreshNuxtData('chats')\n    }\n  },\n  onError(error) {\n    toast.add({\n      title: 'Error',\n      description: error.message,\n      color: 'error'\n    })\n  }\n})\n\nfunction handleSubmit(e: Event) {\n  e.preventDefault()\n  if (input.value.trim()) {\n    chat.sendMessage({ text: input.value })\n    input.value = ''\n  }\n}\n\nonMounted(() => {\n  if (chatData.value?.messages.length === 1) {\n    chat.regenerate()\n  }\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CUDashboardPanel :ui=\"{ body: 'p-0 sm:p-0' }\">\n    \u003Ctemplate #header>\n      \u003CChatsHistory \u002F>\n    \u003C\u002Ftemplate>\n    \u003Ctemplate #body>\n      \u003CUContainer class=\"min-h-dvh flex flex-col py-4 sm:py-6\">\n        \u003CUChatMessages\n          :messages=\"chat.messages\"\n          :status=\"chat.status\"\n          should-auto-scroll\n          class=\"flex-1\"\n        >\n          \u003Ctemplate #content=\"{ message }\">\n            \u003Ctemplate v-for=\"(part, index) in message.parts\" :key=\"`${message.id}-${part.type}-${index}`\">\n              \u003CUChatReasoning\n                v-if=\"isReasoningUIPart(part)\"\n                :text=\"part.text\"\n                :streaming=\"isPartStreaming(part)\"\n              >\n                \u003CMDC\n                  :value=\"part.text\"\n                  :cache-key=\"`reasoning-${message.id}-${index}`\"\n                  class=\"*:first:mt-0 *:last:mb-0\"\n                \u002F>\n              \u003C\u002FUChatReasoning>\n\n              \u003Ctemplate v-else-if=\"isTextUIPart(part)\">\n                \u003CMDC\n                  v-if=\"message.role === 'assistant'\"\n                  :value=\"part.text\"\n                  :cache-key=\"`${message.id}-${index}`\"\n                  class=\"*:first:mt-0 *:last:mb-0\"\n                \u002F>\n                \u003Cp v-else-if=\"message.role === 'user'\" class=\"whitespace-pre-wrap\">\n                  {{ part.text }}\n                \u003C\u002Fp>\n              \u003C\u002Ftemplate>\n            \u003C\u002Ftemplate>\n          \u003C\u002Ftemplate>\n        \u003C\u002FUChatMessages>\n\n        \u003CUChatPrompt\n          v-model=\"input\"\n          :error=\"chat.error\"\n          variant=\"subtle\"\n          class=\"sticky bottom-0\"\n          @submit=\"handleSubmit\"\n        >\n          \u003Ctemplate #footer>\n            \u003CModelSelect v-model=\"model\" \u002F>\n          \u003C\u002Ftemplate>\n\n          \u003CUChatPromptSubmit\n            :status=\"chat.status\"\n            color=\"neutral\"\n            @stop=\"chat.stop()\"\n            @reload=\"chat.regenerate()\"\n          \u002F>\n        \u003C\u002FUChatPrompt>\n      \u003C\u002FUContainer>\n    \u003C\u002Ftemplate>\n  \u003C\u002FUDashboardPanel>\n\u003C\u002Ftemplate>\n",[1385,2341,2373,2389,4358,4369,4377],[1049,10477,10478,10498,10524,10542,10560,10564,10576,10588,10605,10609,10651,10655,10671,10711,10715,10719,10735,10739,10755,10773,10791,10805,10831,10839,10855,10860,10869,10881,10905,10919,10923,10927,10939,10951,10965,10979,10991,10997,11001,11007,11011,11029,11039,11059,11085,11097,11101,11105,11109,11121,11149,11159,11163,11169,11177,11181,11189,11207,11219,11227,11235,11247,11265,11271,11283,11295,11299,11311,11315,11339,11405,11411,11423,11435,11447,11451,11457,11469,11481,11493,11497,11505,11509,11529,11535,11547,11559,11571,11583,11587,11615,11619,11627,11635,11644,11653,11662,11666,11672,11684,11696,11708,11720,11732,11736,11749,11769,11777,11781,11787,11799,11811,11823,11835,11839,11847,11856,11865,11874],{"__ignoreMap":1095},[1099,10479,10480,10482,10484,10486,10488,10490,10492,10494,10496],{"class":1101,"line":1102},[1099,10481,1572],{"class":1317},[1099,10483,5124],{"class":1323},[1099,10485,5127],{"class":1600},[1099,10487,5130],{"class":1600},[1099,10489,1604],{"class":1317},[1099,10491,1531],{"class":1317},[1099,10493,1296],{"class":1109},[1099,10495,1531],{"class":1317},[1099,10497,1578],{"class":1317},[1099,10499,10500,10502,10504,10506,10508,10510,10512,10514,10516,10518,10520,10522],{"class":1101,"line":1119},[1099,10501,1720],{"class":1303},[1099,10503,1723],{"class":1317},[1099,10505,5776],{"class":1313},[1099,10507,1729],{"class":1317},[1099,10509,5781],{"class":1313},[1099,10511,1729],{"class":1317},[1099,10513,5786],{"class":1313},[1099,10515,1745],{"class":1317},[1099,10517,1748],{"class":1303},[1099,10519,1404],{"class":1317},[1099,10521,2546],{"class":1109},[1099,10523,1368],{"class":1317},[1099,10525,10526,10528,10530,10532,10534,10536,10538,10540],{"class":1101,"line":1333},[1099,10527,1720],{"class":1303},[1099,10529,1723],{"class":1317},[1099,10531,5806],{"class":1313},[1099,10533,1745],{"class":1317},[1099,10535,1748],{"class":1303},[1099,10537,1404],{"class":1317},[1099,10539,5815],{"class":1109},[1099,10541,1368],{"class":1317},[1099,10543,10544,10546,10548,10550,10552,10554,10556,10558],{"class":1101,"line":1348},[1099,10545,1720],{"class":1303},[1099,10547,1723],{"class":1317},[1099,10549,5827],{"class":1313},[1099,10551,1745],{"class":1317},[1099,10553,1748],{"class":1303},[1099,10555,1404],{"class":1317},[1099,10557,5836],{"class":1109},[1099,10559,1368],{"class":1317},[1099,10561,10562],{"class":1101,"line":1360},[1099,10563,1382],{"emptyLinePlaceholder":21},[1099,10565,10566,10568,10570,10572,10574],{"class":1101,"line":1371},[1099,10567,3073],{"class":1600},[1099,10569,5849],{"class":1313},[1099,10571,1604],{"class":1317},[1099,10573,5854],{"class":1122},[1099,10575,2681],{"class":1313},[1099,10577,10578,10580,10582,10584,10586],{"class":1101,"line":1379},[1099,10579,3073],{"class":1600},[1099,10581,5863],{"class":1313},[1099,10583,1604],{"class":1317},[1099,10585,5868],{"class":1122},[1099,10587,2681],{"class":1313},[1099,10589,10591,10593,10595,10597,10599,10601,10603],{"class":10590,"line":1385},[1101,1582],[1099,10592,3073],{"class":1600},[1099,10594,1723],{"class":1317},[1099,10596,10248],{"class":1313},[1099,10598,1501],{"class":1317},[1099,10600,2635],{"class":1317},[1099,10602,9960],{"class":1122},[1099,10604,2681],{"class":1313},[1099,10606,10607],{"class":1101,"line":1396},[1099,10608,1382],{"emptyLinePlaceholder":21},[1099,10610,10611,10613,10615,10617,10619,10621,10623,10625,10627,10629,10631,10633,10635,10637,10639,10641,10643,10645,10647,10649],{"class":1101,"line":1412},[1099,10612,3073],{"class":1600},[1099,10614,1723],{"class":1317},[1099,10616,5888],{"class":1323},[1099,10618,1327],{"class":1317},[1099,10620,5893],{"class":1313},[1099,10622,1501],{"class":1317},[1099,10624,2635],{"class":1317},[1099,10626,2638],{"class":1303},[1099,10628,5902],{"class":1122},[1099,10630,1314],{"class":1313},[1099,10632,3689],{"class":1317},[1099,10634,5909],{"class":1109},[1099,10636,5396],{"class":1317},[1099,10638,5914],{"class":1313},[1099,10640,1821],{"class":1317},[1099,10642,5919],{"class":1313},[1099,10644,1821],{"class":1317},[1099,10646,2030],{"class":1313},[1099,10648,5405],{"class":1317},[1099,10650,1504],{"class":1313},[1099,10652,10653],{"class":1101,"line":1418},[1099,10654,1382],{"emptyLinePlaceholder":21},[1099,10656,10657,10659,10661,10663,10665,10667,10669],{"class":1101,"line":1423},[1099,10658,5936],{"class":1303},[1099,10660,1964],{"class":1313},[1099,10662,3545],{"class":1317},[1099,10664,5943],{"class":1313},[1099,10666,1821],{"class":1317},[1099,10668,5948],{"class":1313},[1099,10670,1318],{"class":1317},[1099,10672,10673,10675,10677,10679,10681,10683,10685,10687,10689,10691,10693,10695,10697,10699,10701,10703,10705,10707,10709],{"class":1101,"line":1446},[1099,10674,5955],{"class":1303},[1099,10676,2911],{"class":1122},[1099,10678,1314],{"class":1323},[1099,10680,1878],{"class":1317},[1099,10682,3567],{"class":1323},[1099,10684,1327],{"class":1317},[1099,10686,3573],{"class":3572},[1099,10688,1729],{"class":1317},[1099,10690,3578],{"class":1323},[1099,10692,1327],{"class":1317},[1099,10694,1404],{"class":1317},[1099,10696,3585],{"class":1109},[1099,10698,1342],{"class":1317},[1099,10700,1729],{"class":1317},[1099,10702,5984],{"class":1323},[1099,10704,1327],{"class":1317},[1099,10706,4181],{"class":1479},[1099,10708,1745],{"class":1317},[1099,10710,1504],{"class":1323},[1099,10712,10713],{"class":1101,"line":1451},[1099,10714,5412],{"class":1317},[1099,10716,10717],{"class":1101,"line":1461},[1099,10718,1382],{"emptyLinePlaceholder":21},[1099,10720,10721,10723,10725,10727,10729,10731,10733],{"class":1101,"line":1471},[1099,10722,3073],{"class":1600},[1099,10724,5147],{"class":1313},[1099,10726,1604],{"class":1317},[1099,10728,5152],{"class":1122},[1099,10730,1314],{"class":1313},[1099,10732,5157],{"class":1317},[1099,10734,1504],{"class":1313},[1099,10736,10737],{"class":1101,"line":1487},[1099,10738,1382],{"emptyLinePlaceholder":21},[1099,10740,10741,10743,10745,10747,10749,10751,10753],{"class":1101,"line":1493},[1099,10742,3073],{"class":1600},[1099,10744,6033],{"class":1313},[1099,10746,1604],{"class":1317},[1099,10748,1915],{"class":1317},[1099,10750,5806],{"class":1122},[1099,10752,1314],{"class":1313},[1099,10754,1318],{"class":1317},[1099,10756,10757,10759,10761,10763,10765,10767,10769,10771],{"class":1101,"line":1498},[1099,10758,1811],{"class":1323},[1099,10760,1327],{"class":1317},[1099,10762,6053],{"class":1313},[1099,10764,1821],{"class":1317},[1099,10766,3334],{"class":1313},[1099,10768,1821],{"class":1317},[1099,10770,2030],{"class":1313},[1099,10772,1345],{"class":1317},[1099,10774,10775,10777,10779,10781,10783,10785,10787,10789],{"class":1101,"line":2287},[1099,10776,1971],{"class":1323},[1099,10778,1327],{"class":1317},[1099,10780,6053],{"class":1313},[1099,10782,1821],{"class":1317},[1099,10784,3334],{"class":1313},[1099,10786,1821],{"class":1317},[1099,10788,2009],{"class":1313},[1099,10790,1345],{"class":1317},[1099,10792,10793,10795,10797,10799,10801,10803],{"class":1101,"line":2300},[1099,10794,6088],{"class":1323},[1099,10796,1327],{"class":1317},[1099,10798,1915],{"class":1317},[1099,10800,5776],{"class":1122},[1099,10802,1314],{"class":1313},[1099,10804,1318],{"class":1317},[1099,10806,10807,10809,10811,10813,10815,10817,10819,10821,10823,10825,10827,10829],{"class":1101,"line":2330},[1099,10808,6104],{"class":1323},[1099,10810,1327],{"class":1317},[1099,10812,3683],{"class":1317},[1099,10814,5909],{"class":1109},[1099,10816,5396],{"class":1317},[1099,10818,5943],{"class":1313},[1099,10820,1821],{"class":1317},[1099,10822,3334],{"class":1313},[1099,10824,1821],{"class":1317},[1099,10826,2030],{"class":1313},[1099,10828,5405],{"class":1317},[1099,10830,1345],{"class":1317},[1099,10832,10833,10835,10837],{"class":1101,"line":2336},[1099,10834,5294],{"class":1323},[1099,10836,1327],{"class":1317},[1099,10838,1393],{"class":1317},[1099,10840,10842,10844,10846,10848,10850,10852],{"class":10841,"line":2341},[1101,1582],[1099,10843,3662],{"class":1323},[1099,10845,1327],{"class":1317},[1099,10847,3280],{"class":1313},[1099,10849,1821],{"class":1317},[1099,10851,10340],{"class":1313},[1099,10853,10854],{"class":1483},"\u002F\u002F Pass the selected model\n",[1099,10856,10858],{"class":10857,"line":2373},[1101,1582],[1099,10859,1490],{"class":1317},[1099,10861,10863,10865,10867],{"class":10862,"line":2389},[1101,1582],[1099,10864,2426],{"class":1317},[1099,10866,1895],{"class":1313},[1099,10868,1345],{"class":1317},[1099,10870,10871,10873,10875,10877,10879],{"class":1101,"line":2407},[1099,10872,6140],{"class":1323},[1099,10874,1314],{"class":1317},[1099,10876,6145],{"class":1955},[1099,10878,1895],{"class":1317},[1099,10880,1393],{"class":1317},[1099,10882,10883,10885,10887,10889,10891,10893,10895,10897,10899,10901,10903],{"class":1101,"line":2423},[1099,10884,6161],{"class":1303},[1099,10886,1964],{"class":1323},[1099,10888,6145],{"class":1313},[1099,10890,1821],{"class":1317},[1099,10892,6170],{"class":1313},[1099,10894,3361],{"class":1317},[1099,10896,1404],{"class":1317},[1099,10898,4328],{"class":1109},[1099,10900,1342],{"class":1317},[1099,10902,3550],{"class":1323},[1099,10904,1318],{"class":1317},[1099,10906,10907,10909,10911,10913,10915,10917],{"class":1101,"line":2431},[1099,10908,6188],{"class":1122},[1099,10910,1314],{"class":1323},[1099,10912,1342],{"class":1317},[1099,10914,1800],{"class":1109},[1099,10916,1342],{"class":1317},[1099,10918,1504],{"class":1323},[1099,10920,10921],{"class":1101,"line":3426},[1099,10922,1490],{"class":1317},[1099,10924,10925],{"class":1101,"line":3439},[1099,10926,1415],{"class":1317},[1099,10928,10929,10931,10933,10935,10937],{"class":1101,"line":3444},[1099,10930,6214],{"class":1323},[1099,10932,1314],{"class":1317},[1099,10934,6219],{"class":1955},[1099,10936,1895],{"class":1317},[1099,10938,1393],{"class":1317},[1099,10940,10941,10943,10945,10947,10949],{"class":1101,"line":3450},[1099,10942,6229],{"class":1313},[1099,10944,1821],{"class":1317},[1099,10946,6234],{"class":1122},[1099,10948,1314],{"class":1323},[1099,10950,1318],{"class":1317},[1099,10952,10953,10955,10957,10959,10961,10963],{"class":1101,"line":3481},[1099,10954,6244],{"class":1323},[1099,10956,1327],{"class":1317},[1099,10958,1404],{"class":1317},[1099,10960,497],{"class":1109},[1099,10962,1342],{"class":1317},[1099,10964,1345],{"class":1317},[1099,10966,10967,10969,10971,10973,10975,10977],{"class":1101,"line":3525},[1099,10968,6260],{"class":1323},[1099,10970,1327],{"class":1317},[1099,10972,6265],{"class":1313},[1099,10974,1821],{"class":1317},[1099,10976,4480],{"class":1313},[1099,10978,1345],{"class":1317},[1099,10980,10981,10983,10985,10987,10989],{"class":1101,"line":3532},[1099,10982,6277],{"class":1323},[1099,10984,1327],{"class":1317},[1099,10986,1404],{"class":1317},[1099,10988,6219],{"class":1109},[1099,10990,1368],{"class":1317},[1099,10992,10993,10995],{"class":1101,"line":3537},[1099,10994,3388],{"class":1317},[1099,10996,1504],{"class":1323},[1099,10998,10999],{"class":1101,"line":3555},[1099,11000,3597],{"class":1317},[1099,11002,11003,11005],{"class":1101,"line":3594},[1099,11004,1501],{"class":1317},[1099,11006,1504],{"class":1313},[1099,11008,11009],{"class":1101,"line":3600},[1099,11010,1382],{"emptyLinePlaceholder":21},[1099,11012,11013,11015,11017,11019,11021,11023,11025,11027],{"class":1101,"line":3605},[1099,11014,6313],{"class":1600},[1099,11016,6316],{"class":1122},[1099,11018,1314],{"class":1317},[1099,11020,6321],{"class":1955},[1099,11022,1327],{"class":1317},[1099,11024,6326],{"class":1105},[1099,11026,1895],{"class":1317},[1099,11028,1393],{"class":1317},[1099,11030,11031,11033,11035,11037],{"class":1101,"line":3611},[1099,11032,6335],{"class":1313},[1099,11034,1821],{"class":1317},[1099,11036,6340],{"class":1122},[1099,11038,2681],{"class":1323},[1099,11040,11041,11043,11045,11047,11049,11051,11053,11055,11057],{"class":1101,"line":3631},[1099,11042,3540],{"class":1303},[1099,11044,1964],{"class":1323},[1099,11046,5206],{"class":1313},[1099,11048,1821],{"class":1317},[1099,11050,3334],{"class":1313},[1099,11052,1821],{"class":1317},[1099,11054,5215],{"class":1122},[1099,11056,5218],{"class":1323},[1099,11058,1318],{"class":1317},[1099,11060,11061,11063,11065,11067,11069,11071,11073,11075,11077,11079,11081,11083],{"class":1101,"line":3659},[1099,11062,6367],{"class":1313},[1099,11064,1821],{"class":1317},[1099,11066,6372],{"class":1122},[1099,11068,1314],{"class":1323},[1099,11070,1878],{"class":1317},[1099,11072,1732],{"class":1323},[1099,11074,1327],{"class":1317},[1099,11076,5350],{"class":1313},[1099,11078,1821],{"class":1317},[1099,11080,3334],{"class":1313},[1099,11082,1745],{"class":1317},[1099,11084,1504],{"class":1323},[1099,11086,11087,11089,11091,11093,11095],{"class":1101,"line":3675},[1099,11088,6395],{"class":1313},[1099,11090,1821],{"class":1317},[1099,11092,3334],{"class":1313},[1099,11094,2635],{"class":1317},[1099,11096,6404],{"class":1317},[1099,11098,11099],{"class":1101,"line":3694},[1099,11100,3597],{"class":1317},[1099,11102,11103],{"class":1101,"line":3722},[1099,11104,5412],{"class":1317},[1099,11106,11107],{"class":1101,"line":3729},[1099,11108,1382],{"emptyLinePlaceholder":21},[1099,11110,11111,11113,11115,11117,11119],{"class":1101,"line":3734},[1099,11112,6426],{"class":1122},[1099,11114,1314],{"class":1313},[1099,11116,1818],{"class":1317},[1099,11118,1838],{"class":1600},[1099,11120,1393],{"class":1317},[1099,11122,11123,11125,11127,11129,11131,11133,11135,11137,11139,11141,11143,11145,11147],{"class":1101,"line":3800},[1099,11124,3540],{"class":1303},[1099,11126,1964],{"class":1323},[1099,11128,5943],{"class":1313},[1099,11130,1821],{"class":1317},[1099,11132,3334],{"class":1313},[1099,11134,3855],{"class":1317},[1099,11136,2009],{"class":1313},[1099,11138,1821],{"class":1317},[1099,11140,3834],{"class":1313},[1099,11142,3361],{"class":1317},[1099,11144,3840],{"class":3572},[1099,11146,3550],{"class":1323},[1099,11148,1318],{"class":1317},[1099,11150,11151,11153,11155,11157],{"class":1101,"line":3805},[1099,11152,6367],{"class":1313},[1099,11154,1821],{"class":1317},[1099,11156,6471],{"class":1122},[1099,11158,2681],{"class":1323},[1099,11160,11161],{"class":1101,"line":3810},[1099,11162,3597],{"class":1317},[1099,11164,11165,11167],{"class":1101,"line":3816},[1099,11166,1501],{"class":1317},[1099,11168,1504],{"class":1313},[1099,11170,11171,11173,11175],{"class":1101,"line":3845},[1099,11172,1648],{"class":1317},[1099,11174,5124],{"class":1323},[1099,11176,1578],{"class":1317},[1099,11178,11179],{"class":1101,"line":3886},[1099,11180,1382],{"emptyLinePlaceholder":21},[1099,11182,11183,11185,11187],{"class":1101,"line":3915},[1099,11184,1572],{"class":1317},[1099,11186,1575],{"class":1323},[1099,11188,1578],{"class":1317},[1099,11190,11191,11193,11195,11197,11199,11201,11203,11205],{"class":1101,"line":3927},[1099,11192,1585],{"class":1317},[1099,11194,5439],{"class":1323},[1099,11196,5442],{"class":1600},[1099,11198,1604],{"class":1317},[1099,11200,1531],{"class":1317},[1099,11202,5449],{"class":1109},[1099,11204,1531],{"class":1317},[1099,11206,1578],{"class":1317},[1099,11208,11209,11211,11213,11215,11217],{"class":1101,"line":3943},[1099,11210,1594],{"class":1317},[1099,11212,1575],{"class":1323},[1099,11214,5462],{"class":1317},[1099,11216,8356],{"class":1600},[1099,11218,1578],{"class":1317},[1099,11220,11221,11223,11225],{"class":1101,"line":3957},[1099,11222,1618],{"class":1317},[1099,11224,8366],{"class":1323},[1099,11226,1624],{"class":1317},[1099,11228,11229,11231,11233],{"class":1101,"line":3964},[1099,11230,1629],{"class":1317},[1099,11232,1575],{"class":1323},[1099,11234,1578],{"class":1317},[1099,11236,11237,11239,11241,11243,11245],{"class":1101,"line":3969},[1099,11238,1594],{"class":1317},[1099,11240,1575],{"class":1323},[1099,11242,5462],{"class":1317},[1099,11244,5465],{"class":1600},[1099,11246,1578],{"class":1317},[1099,11248,11249,11251,11253,11255,11257,11259,11261,11263],{"class":1101,"line":3974},[1099,11250,1618],{"class":1317},[1099,11252,5474],{"class":1323},[1099,11254,5477],{"class":1600},[1099,11256,1604],{"class":1317},[1099,11258,1531],{"class":1317},[1099,11260,6548],{"class":1109},[1099,11262,1531],{"class":1317},[1099,11264,1578],{"class":1317},[1099,11266,11267,11269],{"class":1101,"line":3980},[1099,11268,5493],{"class":1317},[1099,11270,6559],{"class":1323},[1099,11272,11273,11275,11277,11279,11281],{"class":1101,"line":3997},[1099,11274,6564],{"class":1600},[1099,11276,1604],{"class":1317},[1099,11278,1531],{"class":1317},[1099,11280,6571],{"class":1109},[1099,11282,5550],{"class":1317},[1099,11284,11285,11287,11289,11291,11293],{"class":1101,"line":4019},[1099,11286,5556],{"class":1600},[1099,11288,1604],{"class":1317},[1099,11290,1531],{"class":1317},[1099,11292,6584],{"class":1109},[1099,11294,5550],{"class":1317},[1099,11296,11297],{"class":1101,"line":4037},[1099,11298,6591],{"class":1600},[1099,11300,11301,11303,11305,11307,11309],{"class":1101,"line":4045},[1099,11302,6596],{"class":1600},[1099,11304,1604],{"class":1317},[1099,11306,1531],{"class":1317},[1099,11308,6603],{"class":1109},[1099,11310,5550],{"class":1317},[1099,11312,11313],{"class":1101,"line":4062},[1099,11314,5616],{"class":1317},[1099,11316,11317,11319,11321,11323,11325,11327,11329,11331,11333,11335,11337],{"class":1101,"line":4083},[1099,11318,5622],{"class":1317},[1099,11320,1575],{"class":1323},[1099,11322,5462],{"class":1317},[1099,11324,371],{"class":1600},[1099,11326,1604],{"class":1317},[1099,11328,1531],{"class":1317},[1099,11330,1878],{"class":1317},[1099,11332,6628],{"class":1313},[1099,11334,1501],{"class":1317},[1099,11336,1531],{"class":1317},[1099,11338,1578],{"class":1317},[1099,11340,11341,11343,11345,11347,11349,11351,11353,11355,11357,11359,11361,11363,11365,11367,11369,11371,11373,11375,11377,11379,11381,11383,11385,11387,11389,11391,11393,11395,11397,11399,11401,11403],{"class":1101,"line":4093},[1099,11342,6639],{"class":1317},[1099,11344,1575],{"class":1323},[1099,11346,6644],{"class":1303},[1099,11348,1604],{"class":1317},[1099,11350,1531],{"class":1317},[1099,11352,6651],{"class":1313},[1099,11354,1729],{"class":1317},[1099,11356,6656],{"class":1313},[1099,11358,6659],{"class":1317},[1099,11360,2630],{"class":1313},[1099,11362,1821],{"class":1317},[1099,11364,2211],{"class":1313},[1099,11366,1531],{"class":1317},[1099,11368,6670],{"class":1317},[1099,11370,6673],{"class":1600},[1099,11372,1604],{"class":1317},[1099,11374,6678],{"class":1317},[1099,11376,4480],{"class":1313},[1099,11378,1821],{"class":1317},[1099,11380,2030],{"class":1313},[1099,11382,1501],{"class":1317},[1099,11384,6689],{"class":1109},[1099,11386,5396],{"class":1317},[1099,11388,6694],{"class":1313},[1099,11390,1821],{"class":1317},[1099,11392,6170],{"class":1313},[1099,11394,1501],{"class":1317},[1099,11396,6689],{"class":1109},[1099,11398,5396],{"class":1317},[1099,11400,6707],{"class":1313},[1099,11402,6710],{"class":1317},[1099,11404,1578],{"class":1317},[1099,11406,11407,11409],{"class":1101,"line":4103},[1099,11408,6717],{"class":1317},[1099,11410,6720],{"class":1323},[1099,11412,11413,11415,11417,11419,11421],{"class":1101,"line":4113},[1099,11414,6725],{"class":1600},[1099,11416,1604],{"class":1317},[1099,11418,1531],{"class":1317},[1099,11420,6732],{"class":1109},[1099,11422,5550],{"class":1317},[1099,11424,11425,11427,11429,11431,11433],{"class":1101,"line":4130},[1099,11426,6739],{"class":1600},[1099,11428,1604],{"class":1317},[1099,11430,1531],{"class":1317},[1099,11432,6746],{"class":1109},[1099,11434,5550],{"class":1317},[1099,11436,11437,11439,11441,11443,11445],{"class":1101,"line":4141},[1099,11438,6753],{"class":1600},[1099,11440,1604],{"class":1317},[1099,11442,1531],{"class":1317},[1099,11444,6760],{"class":1109},[1099,11446,5550],{"class":1317},[1099,11448,11449],{"class":1101,"line":4147},[1099,11450,6767],{"class":1317},[1099,11452,11453,11455],{"class":1101,"line":4153},[1099,11454,6772],{"class":1317},[1099,11456,6775],{"class":1323},[1099,11458,11459,11461,11463,11465,11467],{"class":1101,"line":4163},[1099,11460,6780],{"class":1600},[1099,11462,1604],{"class":1317},[1099,11464,1531],{"class":1317},[1099,11466,6746],{"class":1109},[1099,11468,5550],{"class":1317},[1099,11470,11471,11473,11475,11477,11479],{"class":1101,"line":4173},[1099,11472,6793],{"class":1600},[1099,11474,1604],{"class":1317},[1099,11476,1531],{"class":1317},[1099,11478,6800],{"class":1109},[1099,11480,5550],{"class":1317},[1099,11482,11483,11485,11487,11489,11491],{"class":1101,"line":4186},[1099,11484,6807],{"class":1600},[1099,11486,1604],{"class":1317},[1099,11488,1531],{"class":1317},[1099,11490,6814],{"class":1109},[1099,11492,5550],{"class":1317},[1099,11494,11495],{"class":1101,"line":4201},[1099,11496,6821],{"class":1317},[1099,11498,11499,11501,11503],{"class":1101,"line":4206},[1099,11500,6826],{"class":1317},[1099,11502,6829],{"class":1323},[1099,11504,1578],{"class":1317},[1099,11506,11507],{"class":1101,"line":4211},[1099,11508,1382],{"emptyLinePlaceholder":21},[1099,11510,11511,11513,11515,11517,11519,11521,11523,11525,11527],{"class":1101,"line":4221},[1099,11512,6717],{"class":1317},[1099,11514,1575],{"class":1323},[1099,11516,6844],{"class":1303},[1099,11518,1604],{"class":1317},[1099,11520,1531],{"class":1317},[1099,11522,6851],{"class":1122},[1099,11524,6854],{"class":1313},[1099,11526,1531],{"class":1317},[1099,11528,1578],{"class":1317},[1099,11530,11531,11533],{"class":1101,"line":4237},[1099,11532,6772],{"class":1317},[1099,11534,6775],{"class":1323},[1099,11536,11537,11539,11541,11543,11545],{"class":1101,"line":4252},[1099,11538,6869],{"class":1600},[1099,11540,1604],{"class":1317},[1099,11542,1531],{"class":1317},[1099,11544,6876],{"class":1109},[1099,11546,5550],{"class":1317},[1099,11548,11549,11551,11553,11555,11557],{"class":1101,"line":4258},[1099,11550,6780],{"class":1600},[1099,11552,1604],{"class":1317},[1099,11554,1531],{"class":1317},[1099,11556,6746],{"class":1109},[1099,11558,5550],{"class":1317},[1099,11560,11561,11563,11565,11567,11569],{"class":1101,"line":4264},[1099,11562,6793],{"class":1600},[1099,11564,1604],{"class":1317},[1099,11566,1531],{"class":1317},[1099,11568,6901],{"class":1109},[1099,11570,5550],{"class":1317},[1099,11572,11573,11575,11577,11579,11581],{"class":1101,"line":4272},[1099,11574,6807],{"class":1600},[1099,11576,1604],{"class":1317},[1099,11578,1531],{"class":1317},[1099,11580,6814],{"class":1109},[1099,11582,5550],{"class":1317},[1099,11584,11585],{"class":1101,"line":4277},[1099,11586,6821],{"class":1317},[1099,11588,11589,11591,11593,11595,11597,11599,11601,11603,11605,11607,11609,11611,11613],{"class":1101,"line":4283},[1099,11590,6772],{"class":1317},[1099,11592,989],{"class":1323},[1099,11594,6844],{"class":1600},[1099,11596,1604],{"class":1317},[1099,11598,1531],{"class":1317},[1099,11600,6934],{"class":1109},[1099,11602,1531],{"class":1317},[1099,11604,5477],{"class":1600},[1099,11606,1604],{"class":1317},[1099,11608,1531],{"class":1317},[1099,11610,6945],{"class":1109},[1099,11612,1531],{"class":1317},[1099,11614,1578],{"class":1317},[1099,11616,11617],{"class":1101,"line":4303},[1099,11618,6954],{"class":1313},[1099,11620,11621,11623,11625],{"class":1101,"line":4318},[1099,11622,6959],{"class":1317},[1099,11624,989],{"class":1323},[1099,11626,1578],{"class":1317},[1099,11628,11629,11631,11633],{"class":1101,"line":4335},[1099,11630,6826],{"class":1317},[1099,11632,1575],{"class":1323},[1099,11634,1578],{"class":1317},[1099,11636,11638,11640,11642],{"class":11637,"line":4358},[1101,1582],[1099,11639,6976],{"class":1317},[1099,11641,1575],{"class":1323},[1099,11643,1578],{"class":1317},[1099,11645,11647,11649,11651],{"class":11646,"line":4369},[1101,1582],[1099,11648,6985],{"class":1317},[1099,11650,1575],{"class":1323},[1099,11652,1578],{"class":1317},[1099,11654,11656,11658,11660],{"class":11655,"line":4377},[1101,1582],[1099,11657,5519],{"class":1317},[1099,11659,5095],{"class":1323},[1099,11661,1578],{"class":1317},[1099,11663,11664],{"class":1101,"line":4383},[1099,11665,1382],{"emptyLinePlaceholder":21},[1099,11667,11668,11670],{"class":1101,"line":4388},[1099,11669,5493],{"class":1317},[1099,11671,5535],{"class":1323},[1099,11673,11674,11676,11678,11680,11682],{"class":1101,"line":4411},[1099,11675,5541],{"class":1600},[1099,11677,1604],{"class":1317},[1099,11679,1531],{"class":1317},[1099,11681,5206],{"class":1109},[1099,11683,5550],{"class":1317},[1099,11685,11686,11688,11690,11692,11694],{"class":1101,"line":4417},[1099,11687,7024],{"class":1600},[1099,11689,1604],{"class":1317},[1099,11691,1531],{"class":1317},[1099,11693,7031],{"class":1109},[1099,11695,5550],{"class":1317},[1099,11697,11698,11700,11702,11704,11706],{"class":1101,"line":4437},[1099,11699,5571],{"class":1600},[1099,11701,1604],{"class":1317},[1099,11703,1531],{"class":1317},[1099,11705,5578],{"class":1109},[1099,11707,5550],{"class":1317},[1099,11709,11710,11712,11714,11716,11718],{"class":1101,"line":4443},[1099,11711,6596],{"class":1600},[1099,11713,1604],{"class":1317},[1099,11715,1531],{"class":1317},[1099,11717,7056],{"class":1109},[1099,11719,5550],{"class":1317},[1099,11721,11722,11724,11726,11728,11730],{"class":1101,"line":4489},[1099,11723,5601],{"class":1600},[1099,11725,1604],{"class":1317},[1099,11727,1531],{"class":1317},[1099,11729,7069],{"class":1109},[1099,11731,5550],{"class":1317},[1099,11733,11734],{"class":1101,"line":4505},[1099,11735,5616],{"class":1317},[1099,11737,11738,11740,11742,11744,11747],{"class":1101,"line":4538},[1099,11739,5622],{"class":1317},[1099,11741,1575],{"class":1323},[1099,11743,5462],{"class":1317},[1099,11745,11746],{"class":1600},"footer",[1099,11748,1578],{"class":1317},[1099,11750,11751,11753,11756,11759,11761,11763,11765,11767],{"class":1101,"line":4552},[1099,11752,6639],{"class":1317},[1099,11754,11755],{"class":1323},"ModelSelect",[1099,11757,11758],{"class":1600}," v-model",[1099,11760,1604],{"class":1317},[1099,11762,1531],{"class":1317},[1099,11764,4651],{"class":1109},[1099,11766,1531],{"class":1317},[1099,11768,1624],{"class":1317},[1099,11770,11771,11773,11775],{"class":1101,"line":4560},[1099,11772,6985],{"class":1317},[1099,11774,1575],{"class":1323},[1099,11776,1578],{"class":1317},[1099,11778,11779],{"class":1101,"line":4565},[1099,11780,1382],{"emptyLinePlaceholder":21},[1099,11782,11783,11785],{"class":1101,"line":4572},[1099,11784,5622],{"class":1317},[1099,11786,7082],{"class":1323},[1099,11788,11789,11791,11793,11795,11797],{"class":1101,"line":4577},[1099,11790,7087],{"class":1600},[1099,11792,1604],{"class":1317},[1099,11794,1531],{"class":1317},[1099,11796,6584],{"class":1109},[1099,11798,5550],{"class":1317},[1099,11800,11801,11803,11805,11807,11809],{"class":1101,"line":4595},[1099,11802,7100],{"class":1600},[1099,11804,1604],{"class":1317},[1099,11806,1531],{"class":1317},[1099,11808,5635],{"class":1109},[1099,11810,5550],{"class":1317},[1099,11812,11813,11815,11817,11819,11821],{"class":1101,"line":7176},[1099,11814,7113],{"class":1600},[1099,11816,1604],{"class":1317},[1099,11818,1531],{"class":1317},[1099,11820,7120],{"class":1109},[1099,11822,5550],{"class":1317},[1099,11824,11825,11827,11829,11831,11833],{"class":1101,"line":9885},[1099,11826,7127],{"class":1600},[1099,11828,1604],{"class":1317},[1099,11830,1531],{"class":1317},[1099,11832,7134],{"class":1109},[1099,11834,5550],{"class":1317},[1099,11836,11837],{"class":1101,"line":9894},[1099,11838,7141],{"class":1317},[1099,11840,11841,11843,11845],{"class":1101,"line":9903},[1099,11842,5519],{"class":1317},[1099,11844,5089],{"class":1323},[1099,11846,1578],{"class":1317},[1099,11848,11850,11852,11854],{"class":1101,"line":11849},116,[1099,11851,5653],{"class":1317},[1099,11853,5474],{"class":1323},[1099,11855,1578],{"class":1317},[1099,11857,11859,11861,11863],{"class":1101,"line":11858},117,[1099,11860,1629],{"class":1317},[1099,11862,1575],{"class":1323},[1099,11864,1578],{"class":1317},[1099,11866,11868,11870,11872],{"class":1101,"line":11867},118,[1099,11869,1639],{"class":1317},[1099,11871,5439],{"class":1323},[1099,11873,1578],{"class":1317},[1099,11875,11877,11879,11881],{"class":1101,"line":11876},119,[1099,11878,1648],{"class":1317},[1099,11880,1575],{"class":1323},[1099,11882,1578],{"class":1317},[993,11884,11886],{"id":11885},"going-further","Going further",[989,11888,11889],{},"You now have a working AI chatbot with database persistence! To take it further, consider adding:",[989,11891,11892],{},[1007,11893,11894],{},"User Authentication",[989,11896,11897,11898,11903],{},"Add authentication with ",[1043,11899,11902],{"href":11900,"rel":11901},"https:\u002F\u002Fgithub.com\u002Fatinux\u002Fnuxt-auth-utils",[1047],"nuxt-auth-utils"," to let users access their chat history across devices and keep conversations private.",[989,11905,11906],{},[1007,11907,11908],{},"AI Tools",[989,11910,11911,11912,11917],{},"Extend your chatbot with ",[1043,11913,11916],{"href":11914,"rel":11915},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-core\u002Ftools-and-tool-calling",[1047],"AI SDK tools"," that can fetch real-time data, generate charts, or interact with external APIs:",[1090,11919,11921],{"className":1294,"code":11920,"language":1296,"meta":1095,"style":1095},"import { tool } from 'ai'\nimport { z } from 'zod'\n\nconst weatherTool = tool({\n  description: 'Get the current weather for a location',\n  parameters: z.object({\n    location: z.string().describe('The city name')\n  }),\n  execute: async ({ location }) => {\n    \u002F\u002F Fetch weather data from an API\n    return { location, temperature: 22, condition: 'Sunny' }\n  }\n})\n",[1049,11922,11923,11942,11960,11964,11979,11995,12012,12043,12051,12071,12076,12111,12115],{"__ignoreMap":1095},[1099,11924,11925,11927,11929,11932,11934,11936,11938,11940],{"class":1101,"line":1102},[1099,11926,1720],{"class":1303},[1099,11928,1723],{"class":1317},[1099,11930,11931],{"class":1313}," tool",[1099,11933,1745],{"class":1317},[1099,11935,1748],{"class":1303},[1099,11937,1404],{"class":1317},[1099,11939,2546],{"class":1109},[1099,11941,1368],{"class":1317},[1099,11943,11944,11946,11948,11950,11952,11954,11956,11958],{"class":1101,"line":1119},[1099,11945,1720],{"class":1303},[1099,11947,1723],{"class":1317},[1099,11949,2581],{"class":1313},[1099,11951,1745],{"class":1317},[1099,11953,1748],{"class":1303},[1099,11955,1404],{"class":1317},[1099,11957,2590],{"class":1109},[1099,11959,1368],{"class":1317},[1099,11961,11962],{"class":1101,"line":1333},[1099,11963,1382],{"emptyLinePlaceholder":21},[1099,11965,11966,11968,11971,11973,11975,11977],{"class":1101,"line":1348},[1099,11967,3073],{"class":1600},[1099,11969,11970],{"class":1313}," weatherTool ",[1099,11972,1604],{"class":1317},[1099,11974,11931],{"class":1122},[1099,11976,1314],{"class":1313},[1099,11978,1318],{"class":1317},[1099,11980,11981,11984,11986,11988,11991,11993],{"class":1101,"line":1360},[1099,11982,11983],{"class":1323},"  description",[1099,11985,1327],{"class":1317},[1099,11987,1404],{"class":1317},[1099,11989,11990],{"class":1109},"Get the current weather for a location",[1099,11992,1342],{"class":1317},[1099,11994,1345],{"class":1317},[1099,11996,11997,12000,12002,12004,12006,12008,12010],{"class":1101,"line":1371},[1099,11998,11999],{"class":1323},"  parameters",[1099,12001,1327],{"class":1317},[1099,12003,2581],{"class":1313},[1099,12005,1821],{"class":1317},[1099,12007,2653],{"class":1122},[1099,12009,1314],{"class":1313},[1099,12011,1318],{"class":1317},[1099,12013,12014,12017,12019,12021,12023,12025,12027,12029,12032,12034,12036,12039,12041],{"class":1101,"line":1379},[1099,12015,12016],{"class":1323},"    location",[1099,12018,1327],{"class":1317},[1099,12020,2581],{"class":1313},[1099,12022,1821],{"class":1317},[1099,12024,3253],{"class":1122},[1099,12026,1818],{"class":1313},[1099,12028,1821],{"class":1317},[1099,12030,12031],{"class":1122},"describe",[1099,12033,1314],{"class":1313},[1099,12035,1342],{"class":1317},[1099,12037,12038],{"class":1109},"The city name",[1099,12040,1342],{"class":1317},[1099,12042,1504],{"class":1313},[1099,12044,12045,12047,12049],{"class":1101,"line":1385},[1099,12046,2426],{"class":1317},[1099,12048,1895],{"class":1313},[1099,12050,1345],{"class":1317},[1099,12052,12053,12056,12058,12060,12062,12065,12067,12069],{"class":1101,"line":1396},[1099,12054,12055],{"class":1122},"  execute",[1099,12057,1327],{"class":1317},[1099,12059,4005],{"class":1600},[1099,12061,1952],{"class":1317},[1099,12063,12064],{"class":1955}," location",[1099,12066,1959],{"class":1317},[1099,12068,1838],{"class":1600},[1099,12070,1393],{"class":1317},[1099,12072,12073],{"class":1101,"line":1412},[1099,12074,12075],{"class":1483},"    \u002F\u002F Fetch weather data from an API\n",[1099,12077,12078,12081,12083,12085,12087,12090,12092,12095,12097,12100,12102,12104,12107,12109],{"class":1101,"line":1418},[1099,12079,12080],{"class":1303},"    return",[1099,12082,1723],{"class":1317},[1099,12084,12064],{"class":1313},[1099,12086,1729],{"class":1317},[1099,12088,12089],{"class":1323}," temperature",[1099,12091,1327],{"class":1317},[1099,12093,12094],{"class":3572}," 22",[1099,12096,1729],{"class":1317},[1099,12098,12099],{"class":1323}," condition",[1099,12101,1327],{"class":1317},[1099,12103,1404],{"class":1317},[1099,12105,12106],{"class":1109},"Sunny",[1099,12108,1342],{"class":1317},[1099,12110,3175],{"class":1317},[1099,12112,12113],{"class":1101,"line":1423},[1099,12114,3597],{"class":1317},[1099,12116,12117,12119],{"class":1101,"line":1446},[1099,12118,1501],{"class":1317},[1099,12120,1504],{"class":1313},[993,12122,12124],{"id":12123},"deploying-to-vercel","Deploying to Vercel",[989,12126,12127],{},"Deploy your chatbot to Vercel with zero configuration:",[1090,12129,12131],{"className":1092,"code":12130,"language":1094,"meta":1095,"style":1095},"npx vercel deploy\n",[1049,12132,12133],{"__ignoreMap":1095},[1099,12134,12135,12137,12140],{"class":1101,"line":1102},[1099,12136,1106],{"class":1105},[1099,12138,12139],{"class":1109}," vercel",[1099,12141,12142],{"class":1109}," deploy\n",[989,12144,12145],{},"Then, in the Vercel dashboard:",[1001,12147,12148,12154],{},[1004,12149,12150,12151,12153],{},"Enable ",[1007,12152,4607],{}," and add credits so requests can be processed.",[1004,12155,12156,12157,12160],{},"Add a ",[1007,12158,12159],{},"Turso"," database from the Vercel Marketplace and connect it to your project (it will provision the database and add the required environment variables automatically).",[12162,12163,12164],"blockquote",{},[989,12165,12166,12167,12172,12173,12175],{},"Note: On Vercel, you ",[1007,12168,12169,12170],{},"don’t need to manually add ",[1049,12171,1671],{}," — Vercel handles the gateway configuration for deployments. Keep using ",[1049,12174,1658],{}," locally for development.",[1678,12177,12179],{"to":1078,"target":12178},"_blank",[989,12180,12181,12182,1821],{},"Learn more about setting up AI Gateway in the ",[1007,12183,12184],{},"Vercel AI Gateway documentation",[993,12186,12188],{"id":12187},"conclusion","Conclusion",[989,12190,12191],{},"You've built a complete AI chatbot with:",[1001,12193,12194,12200,12206,12211,12216],{},[1004,12195,12196,12199],{},[1007,12197,12198],{},"A complete chat interface"," using Nuxt UI components",[1004,12201,12202,12205],{},[1007,12203,12204],{},"Real-time streaming responses"," with the AI SDK",[1004,12207,12208,12210],{},[1007,12209,1021],{}," with MDC for rich content display",[1004,12212,12213,12215],{},[1007,12214,1027],{}," via AI Gateway",[1004,12217,12218,12221],{},[1007,12219,12220],{},"Database persistence"," with SQLite (local) \u002F Turso (production) and Drizzle ORM",[989,12223,12224],{},"The combination of Nuxt's full-stack capabilities, Nuxt UI's purpose-built chat components, a local SQLite dev database with a production Turso database, and the AI SDK's streaming infrastructure makes building AI applications straightforward and enjoyable.",[989,12226,12227],{},[1007,12228,12229],{},"Resources:",[1001,12231,12232,12239,12246,12253,12259,12265],{},[1004,12233,12234],{},[1043,12235,12238],{"href":12236,"rel":12237},"https:\u002F\u002Fui.nuxt.com\u002Fcomponents\u002Fchat",[1047],"Nuxt UI Chat Components",[1004,12240,12241],{},[1043,12242,12245],{"href":12243,"rel":12244},"https:\u002F\u002Fhub.nuxt.com\u002Fdocs\u002Ffeatures\u002Fdatabase",[1047],"NuxtHub Database",[1004,12247,12248],{},[1043,12249,12252],{"href":12250,"rel":12251},"https:\u002F\u002Fai-sdk.dev",[1047],"AI SDK Documentation",[1004,12254,12255],{},[1043,12256,12258],{"href":1078,"rel":12257},[1047],"AI Gateway Documentation",[1004,12260,12261],{},[1043,12262,12264],{"href":1045,"rel":12263},[1047],"Nuxt AI Chat Template",[1004,12266,12267],{},[1043,12268,12270],{"href":1055,"rel":12269},[1047],"Vue AI Chat Template",[989,12272,12273],{},"We're excited to see what you'll build!",[12275,12276,12277],"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 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);}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 .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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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 .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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sRy2g, html code.shiki .sRy2g{--shiki-icon-url: url(https:\u002F\u002Fapi.iconify.design\u002Flucide:plus-square.svg?color=%23000)}html pre.shiki code .sdATh, html code.shiki .sdATh{--shiki-icon-url: url(https:\u002F\u002Fapi.iconify.design\u002Flucide:messages-square.svg?color=%23000)}html pre.shiki code .sh9xi, html code.shiki .sh9xi{--shiki-icon-url: url(https:\u002F\u002Fapi.iconify.design\u002Fsimple-icons:openai.svg?color=%23000)}html pre.shiki code .sNknm, html code.shiki .sNknm{--shiki-icon-url: url(https:\u002F\u002Fapi.iconify.design\u002Fsimple-icons:anthropic.svg?color=%23000)}html pre.shiki code .scZL3, html code.shiki .scZL3{--shiki-icon-url: url(https:\u002F\u002Fapi.iconify.design\u002Fsimple-icons:google.svg?color=%23000)}",{"title":1095,"searchDepth":1119,"depth":1119,"links":12279},[12280,12281,12282,12288,12293,12296,12297,12301,12302,12303,12308,12309,12310],{"id":995,"depth":1119,"text":996},{"id":1063,"depth":1119,"text":1064},{"id":1084,"depth":1119,"text":1085,"children":12283},[12284,12285,12286,12287],{"id":1129,"depth":1333,"text":1130},{"id":1280,"depth":1333,"text":1281},{"id":1549,"depth":1333,"text":1550},{"id":1689,"depth":1333,"text":1690},{"id":2469,"depth":1119,"text":2470,"children":12289},[12290,12291,12292],{"id":2481,"depth":1333,"text":2482},{"id":2864,"depth":1333,"text":2865},{"id":4698,"depth":1333,"text":4699},{"id":5080,"depth":1119,"text":5081,"children":12294},[12295],{"id":5099,"depth":1333,"text":5100},{"id":5716,"depth":1119,"text":5717},{"id":7355,"depth":1119,"text":7356,"children":12298},[12299,12300],{"id":7362,"depth":1333,"text":7363},{"id":7522,"depth":1333,"text":7523},{"id":8029,"depth":1119,"text":8030},{"id":8572,"depth":1119,"text":8573},{"id":9921,"depth":1119,"text":9922,"children":12304},[12305,12306,12307],{"id":9932,"depth":1333,"text":9933},{"id":10204,"depth":1333,"text":10205},{"id":10463,"depth":1333,"text":10464},{"id":11885,"depth":1119,"text":11886},{"id":12123,"depth":1119,"text":12124},{"id":12187,"depth":1119,"text":12188},"2025-12-16T10:00:00.000Z","Learn how to build a full-featured AI chatbot with streaming responses, multiple models support, and a beautiful UI using Nuxt, Nuxt UI, and Vercel AI SDK.","md","\u002Fassets\u002Fblog\u002Fbuilding-nuxt-ai-chatbot.png",{"category":12316},"Tutorial","\u002Fblog\u002Fhow-to-build-an-ai-chat",{"title":973,"description":12312},"blog\u002Fhow-to-build-an-ai-chat","vi5RlZer8_2gpffsJqgpNrU4XHLDEFV94JoDNxDQx8s",{"data":12322,"body":12323},{},{"type":12324,"children":12325},"root",[12326],{"type":178,"tag":989,"props":12327,"children":12328},{},[12329,12331,12338],{"type":5339,"value":12330},"Nuxt ",{"type":178,"tag":1099,"props":12332,"children":12335},{"className":12333},[12334],"text-primary",[12336],{"type":5339,"value":12337},"UI",{"type":5339,"value":12339}," Blog",{"data":12341,"body":12342},{},{"type":12324,"children":12343},[12344],{"type":178,"tag":989,"props":12345,"children":12346},{},[12347],{"type":5339,"value":961},1776270096578]