[{"data":1,"prerenderedAt":12332},["ShallowReactive",2],{"navigation":3,"blog":958,"blog-posts":970,"blog-hero-title":12305,"blog-hero-description":12324},[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":12295,"description":12296,"extension":12297,"image":12298,"meta":12299,"navigation":36,"path":12301,"seo":12302,"stem":12303,"__hash__":12304},"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":12262},"minimark",[988,992,997,1000,1035,1062,1066,1069,1083,1087,1090,1127,1132,1135,1279,1283,1290,1506,1509,1548,1552,1559,1654,1661,1678,1688,1692,1706,2437,2440,2458,2468,2472,2480,2484,2495,2863,2867,2894,4601,4604,4609,4616,4621,4632,4637,4646,4664,4669,4684,4697,4701,4704,5079,5083,5098,5102,5110,5683,5690,5715,5719,5737,7184,7187,7192,7203,7241,7256,7261,7268,7282,7287,7326,7331,7336,7343,7354,7358,7361,7365,7368,7521,7525,7550,8021,8025,8564,8568,9904,9913,9917,9924,9928,9938,10187,10191,10199,10446,10450,10453,11868,11872,11875,11880,11889,11894,11903,12106,12110,12113,12128,12131,12146,12161,12169,12173,12176,12206,12209,12214,12255,12258],[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,1053,1054,1061],{},"Check out the ",[1043,1044,1049],"a",{"href":1045,"rel":1046,"target":1048},"https:\u002F\u002Fgithub.com\u002Fnuxt-ui-templates\u002Fchat",[1047],"nofollow","_blank",[1050,1051,1052],"code",{},"Nuxt"," and ",[1043,1055,1058],{"href":1056,"rel":1057,"target":1048},"https:\u002F\u002Fgithub.com\u002Fnuxt-ui-templates\u002Fchat-vue",[1047],[1050,1059,1060],{},"Vue"," AI Chat templates on GitHub for production-ready implementations with authentication, database persistence, and more.",[993,1063,1065],{"id":1064},"prerequisites","Prerequisites",[989,1067,1068],{},"Before we start, make sure you have:",[1001,1070,1071,1074],{},[1004,1072,1073],{},"Node.js 20+ installed",[1004,1075,1076,1077,1082],{},"A ",[1043,1078,1081],{"href":1079,"rel":1080},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fai-gateway",[1047],"Vercel AI Gateway"," API key (provides access to multiple AI providers through a single endpoint)",[993,1084,1086],{"id":1085},"project-setup","Project setup",[989,1088,1089],{},"Start by creating a new Nuxt project:",[1091,1092,1097],"pre",{"className":1093,"code":1094,"language":1095,"meta":1096,"style":1096},"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","",[1050,1098,1099,1118],{"__ignoreMap":1096},[1100,1101,1104,1108,1112,1115],"span",{"class":1102,"line":1103},"line",1,[1100,1105,1107],{"class":1106},"sBMFI","npx",[1100,1109,1111],{"class":1110},"sfazB"," nuxi@latest",[1100,1113,1114],{"class":1110}," init",[1100,1116,1117],{"class":1110}," nuxt-ai-chat\n",[1100,1119,1121,1125],{"class":1102,"line":1120},2,[1100,1122,1124],{"class":1123},"s2Zo4","cd",[1100,1126,1117],{"class":1110},[1128,1129,1131],"h3",{"id":1130},"installing-dependencies","Installing dependencies",[989,1133,1134],{},"Install Nuxt UI and the AI-specific dependencies:",[1136,1137,1139,1182,1214,1247],"code-group",{"sync":1138},"pm",[1091,1140,1143],{"className":1093,"code":1141,"filename":1142,"language":1095,"meta":1096,"style":1096},"pnpm add @nuxt\u002Fui tailwindcss @nuxtjs\u002Fmdc @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","pnpm",[1050,1144,1145],{"__ignoreMap":1096},[1100,1146,1147,1149,1152,1155,1158,1161,1164,1167,1170,1173,1176,1179],{"class":1102,"line":1103},[1100,1148,1142],{"class":1106},[1100,1150,1151],{"class":1110}," add",[1100,1153,1154],{"class":1110}," @nuxt\u002Fui",[1100,1156,1157],{"class":1110}," tailwindcss",[1100,1159,1160],{"class":1110}," @nuxtjs\u002Fmdc",[1100,1162,1163],{"class":1110}," @nuxthub\u002Fcore",[1100,1165,1166],{"class":1110}," drizzle-orm",[1100,1168,1169],{"class":1110}," drizzle-kit",[1100,1171,1172],{"class":1110}," @libsql\u002Fclient",[1100,1174,1175],{"class":1110}," ai",[1100,1177,1178],{"class":1110}," @ai-sdk\u002Fvue",[1100,1180,1181],{"class":1110}," zod\n",[1091,1183,1186],{"className":1093,"code":1184,"filename":1185,"language":1095,"meta":1096,"style":1096},"yarn add @nuxt\u002Fui tailwindcss @nuxtjs\u002Fmdc @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","yarn",[1050,1187,1188],{"__ignoreMap":1096},[1100,1189,1190,1192,1194,1196,1198,1200,1202,1204,1206,1208,1210,1212],{"class":1102,"line":1103},[1100,1191,1185],{"class":1106},[1100,1193,1151],{"class":1110},[1100,1195,1154],{"class":1110},[1100,1197,1157],{"class":1110},[1100,1199,1160],{"class":1110},[1100,1201,1163],{"class":1110},[1100,1203,1166],{"class":1110},[1100,1205,1169],{"class":1110},[1100,1207,1172],{"class":1110},[1100,1209,1175],{"class":1110},[1100,1211,1178],{"class":1110},[1100,1213,1181],{"class":1110},[1091,1215,1218],{"className":1093,"code":1216,"filename":1217,"language":1095,"meta":1096,"style":1096},"npm install @nuxt\u002Fui tailwindcss @nuxtjs\u002Fmdc @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","npm",[1050,1219,1220],{"__ignoreMap":1096},[1100,1221,1222,1224,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245],{"class":1102,"line":1103},[1100,1223,1217],{"class":1106},[1100,1225,1226],{"class":1110}," install",[1100,1228,1154],{"class":1110},[1100,1230,1157],{"class":1110},[1100,1232,1160],{"class":1110},[1100,1234,1163],{"class":1110},[1100,1236,1166],{"class":1110},[1100,1238,1169],{"class":1110},[1100,1240,1172],{"class":1110},[1100,1242,1175],{"class":1110},[1100,1244,1178],{"class":1110},[1100,1246,1181],{"class":1110},[1091,1248,1251],{"className":1093,"code":1249,"filename":1250,"language":1095,"meta":1096,"style":1096},"bun add @nuxt\u002Fui tailwindcss @nuxtjs\u002Fmdc @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","bun",[1050,1252,1253],{"__ignoreMap":1096},[1100,1254,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277],{"class":1102,"line":1103},[1100,1256,1250],{"class":1106},[1100,1258,1151],{"class":1110},[1100,1260,1154],{"class":1110},[1100,1262,1157],{"class":1110},[1100,1264,1160],{"class":1110},[1100,1266,1163],{"class":1110},[1100,1268,1166],{"class":1110},[1100,1270,1169],{"class":1110},[1100,1272,1172],{"class":1110},[1100,1274,1175],{"class":1110},[1100,1276,1178],{"class":1110},[1100,1278,1181],{"class":1110},[1128,1280,1282],{"id":1281},"configuration","Configuration",[989,1284,1285,1286,1289],{},"Update your ",[1050,1287,1288],{},"nuxt.config.ts"," to register the modules:",[1291,1292,1293],"code-tree-intersection",{},[1091,1294,1298],{"className":1295,"code":1296,"filename":1288,"language":1297,"meta":1096,"style":1096},"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",[1050,1299,1300,1320,1332,1347,1359,1370,1378,1384,1395,1411,1417,1422,1445,1450,1460,1470,1486,1492,1497],{"__ignoreMap":1096},[1100,1301,1302,1306,1309,1312,1316],{"class":1102,"line":1103},[1100,1303,1305],{"class":1304},"s7zQu","export",[1100,1307,1308],{"class":1304}," default",[1100,1310,1311],{"class":1123}," defineNuxtConfig",[1100,1313,1315],{"class":1314},"sTEyZ","(",[1100,1317,1319],{"class":1318},"sMK4o","{\n",[1100,1321,1322,1326,1329],{"class":1102,"line":1120},[1100,1323,1325],{"class":1324},"swJcz","  modules",[1100,1327,1328],{"class":1318},":",[1100,1330,1331],{"class":1314}," [\n",[1100,1333,1335,1338,1341,1344],{"class":1102,"line":1334},3,[1100,1336,1337],{"class":1318},"    '",[1100,1339,1340],{"class":1110},"@nuxt\u002Fui",[1100,1342,1343],{"class":1318},"'",[1100,1345,1346],{"class":1318},",\n",[1100,1348,1350,1352,1355,1357],{"class":1102,"line":1349},4,[1100,1351,1337],{"class":1318},[1100,1353,1354],{"class":1110},"@nuxtjs\u002Fmdc",[1100,1356,1343],{"class":1318},[1100,1358,1346],{"class":1318},[1100,1360,1362,1364,1367],{"class":1102,"line":1361},5,[1100,1363,1337],{"class":1318},[1100,1365,1366],{"class":1110},"@nuxthub\u002Fcore",[1100,1368,1369],{"class":1318},"'\n",[1100,1371,1373,1376],{"class":1102,"line":1372},6,[1100,1374,1375],{"class":1314},"  ]",[1100,1377,1346],{"class":1318},[1100,1379,1381],{"class":1102,"line":1380},7,[1100,1382,1383],{"emptyLinePlaceholder":21},"\n",[1100,1385,1387,1390,1392],{"class":1102,"line":1386},8,[1100,1388,1389],{"class":1324},"  hub",[1100,1391,1328],{"class":1318},[1100,1393,1394],{"class":1318}," {\n",[1100,1396,1398,1401,1403,1406,1409],{"class":1102,"line":1397},9,[1100,1399,1400],{"class":1324},"    db",[1100,1402,1328],{"class":1318},[1100,1404,1405],{"class":1318}," '",[1100,1407,1408],{"class":1110},"sqlite",[1100,1410,1369],{"class":1318},[1100,1412,1414],{"class":1102,"line":1413},10,[1100,1415,1416],{"class":1318},"  },\n",[1100,1418,1420],{"class":1102,"line":1419},11,[1100,1421,1383],{"emptyLinePlaceholder":21},[1100,1423,1425,1428,1430,1433,1435,1438,1440,1443],{"class":1102,"line":1424},12,[1100,1426,1427],{"class":1324},"  css",[1100,1429,1328],{"class":1318},[1100,1431,1432],{"class":1314}," [",[1100,1434,1343],{"class":1318},[1100,1436,1437],{"class":1110},"~\u002Fassets\u002Fcss\u002Fmain.css",[1100,1439,1343],{"class":1318},[1100,1441,1442],{"class":1314},"]",[1100,1444,1346],{"class":1318},[1100,1446,1448],{"class":1102,"line":1447},13,[1100,1449,1383],{"emptyLinePlaceholder":21},[1100,1451,1453,1456,1458],{"class":1102,"line":1452},14,[1100,1454,1455],{"class":1324},"  mdc",[1100,1457,1328],{"class":1318},[1100,1459,1394],{"class":1318},[1100,1461,1463,1466,1468],{"class":1102,"line":1462},15,[1100,1464,1465],{"class":1324},"    headings",[1100,1467,1328],{"class":1318},[1100,1469,1394],{"class":1318},[1100,1471,1473,1476,1478,1482],{"class":1102,"line":1472},16,[1100,1474,1475],{"class":1324},"      anchorLinks",[1100,1477,1328],{"class":1318},[1100,1479,1481],{"class":1480},"sfNiH"," false",[1100,1483,1485],{"class":1484},"sHwdD"," \u002F\u002F Disable anchor links in AI responses\n",[1100,1487,1489],{"class":1102,"line":1488},17,[1100,1490,1491],{"class":1318},"    }\n",[1100,1493,1495],{"class":1102,"line":1494},18,[1100,1496,1416],{"class":1318},[1100,1498,1500,1503],{"class":1102,"line":1499},19,[1100,1501,1502],{"class":1318},"}",[1100,1504,1505],{"class":1314},")\n",[989,1507,1508],{},"Create the main CSS file to import Tailwind CSS and Nuxt UI:",[1291,1510,1511],{},[1091,1512,1517],{"className":1513,"code":1514,"filename":1515,"language":1516,"meta":1096,"style":1096},"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",[1050,1518,1519,1536],{"__ignoreMap":1096},[1100,1520,1521,1524,1527,1530,1533],{"class":1102,"line":1103},[1100,1522,1523],{"class":1304},"@import",[1100,1525,1526],{"class":1318}," \"",[1100,1528,1529],{"class":1110},"tailwindcss",[1100,1531,1532],{"class":1318},"\"",[1100,1534,1535],{"class":1318},";\n",[1100,1537,1538,1540,1542,1544,1546],{"class":1102,"line":1120},[1100,1539,1523],{"class":1304},[1100,1541,1526],{"class":1318},[1100,1543,1340],{"class":1110},[1100,1545,1532],{"class":1318},[1100,1547,1535],{"class":1318},[1128,1549,1551],{"id":1550},"setting-up-the-app","Setting up the app",[989,1553,1554,1555,1558],{},"Nuxt UI requires wrapping your app with ",[1050,1556,1557],{},"UApp"," for modals, toasts, and overlays to work properly:",[1291,1560,1561],{},[1091,1562,1567],{"className":1563,"code":1564,"filename":1565,"highlights":1566,"language":34,"meta":1096,"style":1096},"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",[1120,1372],[1050,1568,1569,1580,1591,1615,1626,1635,1645],{"__ignoreMap":1096},[1100,1570,1571,1574,1577],{"class":1102,"line":1103},[1100,1572,1573],{"class":1318},"\u003C",[1100,1575,1576],{"class":1324},"template",[1100,1578,1579],{"class":1318},">\n",[1100,1581,1584,1587,1589],{"class":1582,"line":1120},[1102,1583],"highlight",[1100,1585,1586],{"class":1318},"  \u003C",[1100,1588,1557],{"class":1324},[1100,1590,1579],{"class":1318},[1100,1592,1593,1596,1599,1603,1606,1608,1611,1613],{"class":1102,"line":1334},[1100,1594,1595],{"class":1318},"    \u003C",[1100,1597,1598],{"class":1324},"UDashboardGroup",[1100,1600,1602],{"class":1601},"spNyl"," unit",[1100,1604,1605],{"class":1318},"=",[1100,1607,1532],{"class":1318},[1100,1609,1610],{"class":1110},"rem",[1100,1612,1532],{"class":1318},[1100,1614,1579],{"class":1318},[1100,1616,1617,1620,1623],{"class":1102,"line":1349},[1100,1618,1619],{"class":1318},"      \u003C",[1100,1621,1622],{"class":1324},"NuxtPage",[1100,1624,1625],{"class":1318}," \u002F>\n",[1100,1627,1628,1631,1633],{"class":1102,"line":1361},[1100,1629,1630],{"class":1318},"    \u003C\u002F",[1100,1632,1598],{"class":1324},[1100,1634,1579],{"class":1318},[1100,1636,1638,1641,1643],{"class":1637,"line":1372},[1102,1583],[1100,1639,1640],{"class":1318},"  \u003C\u002F",[1100,1642,1557],{"class":1324},[1100,1644,1579],{"class":1318},[1100,1646,1647,1650,1652],{"class":1102,"line":1380},[1100,1648,1649],{"class":1318},"\u003C\u002F",[1100,1651,1576],{"class":1324},[1100,1653,1579],{"class":1318},[989,1655,1656,1657,1660],{},"Create a ",[1050,1658,1659],{},".env"," file with your AI Gateway API key:",[1291,1662,1663],{},[1091,1664,1666],{"className":1093,"code":1665,"filename":1659,"language":1095,"meta":1096,"style":1096},"AI_GATEWAY_API_KEY=your-api-key-here\n",[1050,1667,1668],{"__ignoreMap":1096},[1100,1669,1670,1673,1675],{"class":1102,"line":1103},[1100,1671,1672],{"class":1314},"AI_GATEWAY_API_KEY",[1100,1674,1605],{"class":1318},[1100,1676,1677],{"class":1110},"your-api-key-here\n",[1679,1680,1681],"note",{},[989,1682,1683,1684,1687],{},"With ",[1043,1685,1081],{"href":1079,"rel":1686},[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.",[1128,1689,1691],{"id":1690},"setting-up-the-database","Setting up the database",[989,1693,1694,1699,1700,1705],{},[1043,1695,1698],{"href":1696,"rel":1697},"https:\u002F\u002Fhub.nuxt.com",[1047],"NuxtHub"," provides a zero-config database powered by ",[1043,1701,1704],{"href":1702,"rel":1703},"https:\u002F\u002Form.drizzle.team",[1047],"Drizzle ORM",". Here is the schema for the chat application:",[1291,1707,1708],{},[1709,1710,1711],"code-collapse",{},[1091,1712,1715],{"className":1295,"code":1713,"filename":1714,"language":1297,"meta":1096,"style":1096},"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",[1050,1716,1717,1757,1777,1781,1808,1853,1866,1923,1929,1933,1968,1980,1987,1991,2017,2062,2128,2197,2236,2286,2299,2329,2335,2340,2372,2388,2406,2422,2430],{"__ignoreMap":1096},[1100,1718,1719,1722,1725,1728,1731,1734,1736,1739,1741,1744,1747,1750,1752,1755],{"class":1102,"line":1103},[1100,1720,1721],{"class":1304},"import",[1100,1723,1724],{"class":1318}," {",[1100,1726,1727],{"class":1314}," sqliteTable",[1100,1729,1730],{"class":1318},",",[1100,1732,1733],{"class":1314}," text",[1100,1735,1730],{"class":1318},[1100,1737,1738],{"class":1314}," integer",[1100,1740,1730],{"class":1318},[1100,1742,1743],{"class":1314}," index",[1100,1745,1746],{"class":1318}," }",[1100,1748,1749],{"class":1304}," from",[1100,1751,1405],{"class":1318},[1100,1753,1754],{"class":1110},"drizzle-orm\u002Fsqlite-core",[1100,1756,1369],{"class":1318},[1100,1758,1759,1761,1763,1766,1768,1770,1772,1775],{"class":1102,"line":1120},[1100,1760,1721],{"class":1304},[1100,1762,1724],{"class":1318},[1100,1764,1765],{"class":1314}," relations",[1100,1767,1746],{"class":1318},[1100,1769,1749],{"class":1304},[1100,1771,1405],{"class":1318},[1100,1773,1774],{"class":1110},"drizzle-orm",[1100,1776,1369],{"class":1318},[1100,1778,1779],{"class":1102,"line":1334},[1100,1780,1383],{"emptyLinePlaceholder":21},[1100,1782,1783,1785,1788,1791,1793,1795,1797,1799,1802,1804,1806],{"class":1102,"line":1349},[1100,1784,1305],{"class":1304},[1100,1786,1787],{"class":1601}," const",[1100,1789,1790],{"class":1314}," chats ",[1100,1792,1605],{"class":1318},[1100,1794,1727],{"class":1123},[1100,1796,1315],{"class":1314},[1100,1798,1343],{"class":1318},[1100,1800,1801],{"class":1110},"chats",[1100,1803,1343],{"class":1318},[1100,1805,1730],{"class":1318},[1100,1807,1394],{"class":1318},[1100,1809,1810,1813,1815,1817,1820,1823,1826,1828,1830,1833,1835,1837,1840,1843,1845,1848,1851],{"class":1102,"line":1361},[1100,1811,1812],{"class":1324},"  id",[1100,1814,1328],{"class":1318},[1100,1816,1733],{"class":1123},[1100,1818,1819],{"class":1314},"()",[1100,1821,1822],{"class":1318},".",[1100,1824,1825],{"class":1123},"primaryKey",[1100,1827,1819],{"class":1314},[1100,1829,1822],{"class":1318},[1100,1831,1832],{"class":1123},"$defaultFn",[1100,1834,1315],{"class":1314},[1100,1836,1819],{"class":1318},[1100,1838,1839],{"class":1601}," =>",[1100,1841,1842],{"class":1314}," crypto",[1100,1844,1822],{"class":1318},[1100,1846,1847],{"class":1123},"randomUUID",[1100,1849,1850],{"class":1314},"())",[1100,1852,1346],{"class":1318},[1100,1854,1855,1858,1860,1862,1864],{"class":1102,"line":1372},[1100,1856,1857],{"class":1324},"  title",[1100,1859,1328],{"class":1318},[1100,1861,1733],{"class":1123},[1100,1863,1819],{"class":1314},[1100,1865,1346],{"class":1318},[1100,1867,1868,1871,1873,1875,1877,1880,1883,1885,1887,1890,1892,1894,1897,1899,1902,1904,1906,1908,1910,1912,1914,1917,1920],{"class":1102,"line":1380},[1100,1869,1870],{"class":1324},"  createdAt",[1100,1872,1328],{"class":1318},[1100,1874,1738],{"class":1123},[1100,1876,1315],{"class":1314},[1100,1878,1879],{"class":1318},"{",[1100,1881,1882],{"class":1324}," mode",[1100,1884,1328],{"class":1318},[1100,1886,1405],{"class":1318},[1100,1888,1889],{"class":1110},"timestamp",[1100,1891,1343],{"class":1318},[1100,1893,1746],{"class":1318},[1100,1895,1896],{"class":1314},")",[1100,1898,1822],{"class":1318},[1100,1900,1901],{"class":1123},"notNull",[1100,1903,1819],{"class":1314},[1100,1905,1822],{"class":1318},[1100,1907,1832],{"class":1123},[1100,1909,1315],{"class":1314},[1100,1911,1819],{"class":1318},[1100,1913,1839],{"class":1601},[1100,1915,1916],{"class":1318}," new",[1100,1918,1919],{"class":1123}," Date",[1100,1921,1922],{"class":1314},"())\n",[1100,1924,1925,1927],{"class":1102,"line":1386},[1100,1926,1502],{"class":1318},[1100,1928,1505],{"class":1314},[1100,1930,1931],{"class":1102,"line":1397},[1100,1932,1383],{"emptyLinePlaceholder":21},[1100,1934,1935,1937,1939,1942,1944,1946,1949,1951,1954,1958,1961,1963,1966],{"class":1102,"line":1413},[1100,1936,1305],{"class":1304},[1100,1938,1787],{"class":1601},[1100,1940,1941],{"class":1314}," chatsRelations ",[1100,1943,1605],{"class":1318},[1100,1945,1765],{"class":1123},[1100,1947,1948],{"class":1314},"(chats",[1100,1950,1730],{"class":1318},[1100,1952,1953],{"class":1318}," ({",[1100,1955,1957],{"class":1956},"sHdIc"," many",[1100,1959,1960],{"class":1318}," })",[1100,1962,1839],{"class":1601},[1100,1964,1965],{"class":1314}," (",[1100,1967,1319],{"class":1318},[1100,1969,1970,1973,1975,1977],{"class":1102,"line":1419},[1100,1971,1972],{"class":1324},"  messages",[1100,1974,1328],{"class":1318},[1100,1976,1957],{"class":1123},[1100,1978,1979],{"class":1314},"(messages)\n",[1100,1981,1982,1984],{"class":1102,"line":1424},[1100,1983,1502],{"class":1318},[1100,1985,1986],{"class":1314},"))\n",[1100,1988,1989],{"class":1102,"line":1447},[1100,1990,1383],{"emptyLinePlaceholder":21},[1100,1992,1993,1995,1997,2000,2002,2004,2006,2008,2011,2013,2015],{"class":1102,"line":1452},[1100,1994,1305],{"class":1304},[1100,1996,1787],{"class":1601},[1100,1998,1999],{"class":1314}," messages ",[1100,2001,1605],{"class":1318},[1100,2003,1727],{"class":1123},[1100,2005,1315],{"class":1314},[1100,2007,1343],{"class":1318},[1100,2009,2010],{"class":1110},"messages",[1100,2012,1343],{"class":1318},[1100,2014,1730],{"class":1318},[1100,2016,1394],{"class":1318},[1100,2018,2019,2021,2023,2025,2027,2029,2032,2034,2036,2038,2040,2042,2044,2046,2048,2050,2052,2054,2056,2058,2060],{"class":1102,"line":1462},[1100,2020,1812],{"class":1324},[1100,2022,1328],{"class":1318},[1100,2024,1733],{"class":1123},[1100,2026,1315],{"class":1314},[1100,2028,1343],{"class":1318},[1100,2030,2031],{"class":1110},"id",[1100,2033,1343],{"class":1318},[1100,2035,1896],{"class":1314},[1100,2037,1822],{"class":1318},[1100,2039,1825],{"class":1123},[1100,2041,1819],{"class":1314},[1100,2043,1822],{"class":1318},[1100,2045,1832],{"class":1123},[1100,2047,1315],{"class":1314},[1100,2049,1819],{"class":1318},[1100,2051,1839],{"class":1601},[1100,2053,1842],{"class":1314},[1100,2055,1822],{"class":1318},[1100,2057,1847],{"class":1123},[1100,2059,1850],{"class":1314},[1100,2061,1346],{"class":1318},[1100,2063,2064,2067,2069,2071,2073,2075,2078,2080,2082,2084,2086,2088,2090,2093,2095,2097,2099,2102,2104,2106,2108,2110,2113,2115,2117,2120,2122,2124,2126],{"class":1102,"line":1472},[1100,2065,2066],{"class":1324},"  chatId",[1100,2068,1328],{"class":1318},[1100,2070,1733],{"class":1123},[1100,2072,1315],{"class":1314},[1100,2074,1343],{"class":1318},[1100,2076,2077],{"class":1110},"chat_id",[1100,2079,1343],{"class":1318},[1100,2081,1896],{"class":1314},[1100,2083,1822],{"class":1318},[1100,2085,1901],{"class":1123},[1100,2087,1819],{"class":1314},[1100,2089,1822],{"class":1318},[1100,2091,2092],{"class":1123},"references",[1100,2094,1315],{"class":1314},[1100,2096,1819],{"class":1318},[1100,2098,1839],{"class":1601},[1100,2100,2101],{"class":1314}," chats",[1100,2103,1822],{"class":1318},[1100,2105,2031],{"class":1314},[1100,2107,1730],{"class":1318},[1100,2109,1724],{"class":1318},[1100,2111,2112],{"class":1324}," onDelete",[1100,2114,1328],{"class":1318},[1100,2116,1405],{"class":1318},[1100,2118,2119],{"class":1110},"cascade",[1100,2121,1343],{"class":1318},[1100,2123,1746],{"class":1318},[1100,2125,1896],{"class":1314},[1100,2127,1346],{"class":1318},[1100,2129,2130,2133,2135,2137,2139,2141,2144,2146,2148,2150,2153,2155,2157,2159,2162,2164,2166,2168,2171,2173,2175,2177,2180,2182,2185,2187,2189,2191,2193,2195],{"class":1102,"line":1488},[1100,2131,2132],{"class":1324},"  role",[1100,2134,1328],{"class":1318},[1100,2136,1733],{"class":1123},[1100,2138,1315],{"class":1314},[1100,2140,1343],{"class":1318},[1100,2142,2143],{"class":1110},"role",[1100,2145,1343],{"class":1318},[1100,2147,1730],{"class":1318},[1100,2149,1724],{"class":1318},[1100,2151,2152],{"class":1324}," enum",[1100,2154,1328],{"class":1318},[1100,2156,1432],{"class":1314},[1100,2158,1343],{"class":1318},[1100,2160,2161],{"class":1110},"user",[1100,2163,1343],{"class":1318},[1100,2165,1730],{"class":1318},[1100,2167,1405],{"class":1318},[1100,2169,2170],{"class":1110},"assistant",[1100,2172,1343],{"class":1318},[1100,2174,1730],{"class":1318},[1100,2176,1405],{"class":1318},[1100,2178,2179],{"class":1110},"system",[1100,2181,1343],{"class":1318},[1100,2183,2184],{"class":1314},"] ",[1100,2186,1502],{"class":1318},[1100,2188,1896],{"class":1314},[1100,2190,1822],{"class":1318},[1100,2192,1901],{"class":1123},[1100,2194,1819],{"class":1314},[1100,2196,1346],{"class":1318},[1100,2198,2199,2202,2204,2206,2208,2210,2213,2215,2217,2219,2221,2223,2225,2228,2230,2232,2234],{"class":1102,"line":1494},[1100,2200,2201],{"class":1324},"  parts",[1100,2203,1328],{"class":1318},[1100,2205,1733],{"class":1123},[1100,2207,1315],{"class":1314},[1100,2209,1343],{"class":1318},[1100,2211,2212],{"class":1110},"parts",[1100,2214,1343],{"class":1318},[1100,2216,1730],{"class":1318},[1100,2218,1724],{"class":1318},[1100,2220,1882],{"class":1324},[1100,2222,1328],{"class":1318},[1100,2224,1405],{"class":1318},[1100,2226,2227],{"class":1110},"json",[1100,2229,1343],{"class":1318},[1100,2231,1746],{"class":1318},[1100,2233,1896],{"class":1314},[1100,2235,1346],{"class":1318},[1100,2237,2238,2240,2242,2244,2246,2248,2250,2252,2254,2256,2258,2260,2262,2264,2266,2268,2270,2272,2274,2276,2278,2280,2282,2284],{"class":1102,"line":1499},[1100,2239,1870],{"class":1324},[1100,2241,1328],{"class":1318},[1100,2243,1738],{"class":1123},[1100,2245,1315],{"class":1314},[1100,2247,1879],{"class":1318},[1100,2249,1882],{"class":1324},[1100,2251,1328],{"class":1318},[1100,2253,1405],{"class":1318},[1100,2255,1889],{"class":1110},[1100,2257,1343],{"class":1318},[1100,2259,1746],{"class":1318},[1100,2261,1896],{"class":1314},[1100,2263,1822],{"class":1318},[1100,2265,1901],{"class":1123},[1100,2267,1819],{"class":1314},[1100,2269,1822],{"class":1318},[1100,2271,1832],{"class":1123},[1100,2273,1315],{"class":1314},[1100,2275,1819],{"class":1318},[1100,2277,1839],{"class":1601},[1100,2279,1916],{"class":1318},[1100,2281,1919],{"class":1123},[1100,2283,1850],{"class":1314},[1100,2285,1346],{"class":1318},[1100,2287,2289,2292,2295,2297],{"class":1102,"line":2288},20,[1100,2290,2291],{"class":1318},"},",[1100,2293,2294],{"class":1956}," table",[1100,2296,1839],{"class":1601},[1100,2298,1331],{"class":1314},[1100,2300,2302,2305,2307,2309,2312,2314,2316,2318,2321,2324,2326],{"class":1102,"line":2301},21,[1100,2303,2304],{"class":1123},"  index",[1100,2306,1315],{"class":1314},[1100,2308,1343],{"class":1318},[1100,2310,2311],{"class":1110},"messages_chat_id_idx",[1100,2313,1343],{"class":1318},[1100,2315,1896],{"class":1314},[1100,2317,1822],{"class":1318},[1100,2319,2320],{"class":1123},"on",[1100,2322,2323],{"class":1314},"(table",[1100,2325,1822],{"class":1318},[1100,2327,2328],{"class":1314},"chatId)\n",[1100,2330,2332],{"class":1102,"line":2331},22,[1100,2333,2334],{"class":1314},"])\n",[1100,2336,2338],{"class":1102,"line":2337},23,[1100,2339,1383],{"emptyLinePlaceholder":21},[1100,2341,2343,2345,2347,2350,2352,2354,2357,2359,2361,2364,2366,2368,2370],{"class":1102,"line":2342},24,[1100,2344,1305],{"class":1304},[1100,2346,1787],{"class":1601},[1100,2348,2349],{"class":1314}," messagesRelations ",[1100,2351,1605],{"class":1318},[1100,2353,1765],{"class":1123},[1100,2355,2356],{"class":1314},"(messages",[1100,2358,1730],{"class":1318},[1100,2360,1953],{"class":1318},[1100,2362,2363],{"class":1956}," one",[1100,2365,1960],{"class":1318},[1100,2367,1839],{"class":1601},[1100,2369,1965],{"class":1314},[1100,2371,1319],{"class":1318},[1100,2373,2375,2378,2380,2382,2384,2386],{"class":1102,"line":2374},25,[1100,2376,2377],{"class":1324},"  chat",[1100,2379,1328],{"class":1318},[1100,2381,2363],{"class":1123},[1100,2383,1948],{"class":1314},[1100,2385,1730],{"class":1318},[1100,2387,1394],{"class":1318},[1100,2389,2391,2394,2396,2399,2401,2404],{"class":1102,"line":2390},26,[1100,2392,2393],{"class":1324},"    fields",[1100,2395,1328],{"class":1318},[1100,2397,2398],{"class":1314}," [messages",[1100,2400,1822],{"class":1318},[1100,2402,2403],{"class":1314},"chatId]",[1100,2405,1346],{"class":1318},[1100,2407,2409,2412,2414,2417,2419],{"class":1102,"line":2408},27,[1100,2410,2411],{"class":1324},"    references",[1100,2413,1328],{"class":1318},[1100,2415,2416],{"class":1314}," [chats",[1100,2418,1822],{"class":1318},[1100,2420,2421],{"class":1314},"id]\n",[1100,2423,2425,2428],{"class":1102,"line":2424},28,[1100,2426,2427],{"class":1318},"  }",[1100,2429,1505],{"class":1314},[1100,2431,2433,2435],{"class":1102,"line":2432},29,[1100,2434,1502],{"class":1318},[1100,2436,1986],{"class":1314},[989,2438,2439],{},"Generate the database migrations from your schema:",[1091,2441,2443],{"className":1093,"code":2442,"language":1095,"meta":1096,"style":1096},"npx nuxt db generate\n",[1050,2444,2445],{"__ignoreMap":1096},[1100,2446,2447,2449,2452,2455],{"class":1102,"line":1103},[1100,2448,1107],{"class":1106},[1100,2450,2451],{"class":1110}," nuxt",[1100,2453,2454],{"class":1110}," db",[1100,2456,2457],{"class":1110}," generate\n",[2459,2460,2461],"tip",{},[989,2462,2463,2464,2467],{},"Migrations are automatically applied when you start the development server with ",[1050,2465,2466],{},"npx nuxt dev",". NuxtHub uses SQLite locally, so no external database is required during development.",[993,2469,2471],{"id":2470},"building-the-backend","Building the backend",[989,2473,2474,2475,1822],{},"This section covers integrating AI on the server. The following API endpoints handle chat creation, AI streaming, and data persistence using ",[1043,2476,2479],{"href":2477,"rel":2478},"https:\u002F\u002Fnitro.build",[1047],"Nitro",[1128,2481,2483],{"id":2482},"creating-a-chat","Creating a chat",[989,2485,2486,2487,2494],{},"First, create the endpoint that initializes a new chat and saves the first message to the database. This uses the ",[1043,2488,2491],{"href":2489,"rel":2490},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fui-message",[1047],[1050,2492,2493],{},"UIMessage"," type from the AI SDK:",[1291,2496,2497],{},[1091,2498,2501],{"className":1295,"code":2499,"filename":2500,"language":1297,"meta":1096,"style":1096},"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",[1050,2502,2503,2527,2550,2574,2594,2598,2622,2659,2683,2696,2700,2705,2756,2760,2765,2794,2810,2825,2839,2845,2849,2857],{"__ignoreMap":1096},[1100,2504,2505,2507,2509,2512,2514,2517,2519,2521,2523,2525],{"class":1102,"line":1103},[1100,2506,1721],{"class":1304},[1100,2508,1724],{"class":1318},[1100,2510,2511],{"class":1314}," defineEventHandler",[1100,2513,1730],{"class":1318},[1100,2515,2516],{"class":1314}," readValidatedBody",[1100,2518,1746],{"class":1318},[1100,2520,1749],{"class":1304},[1100,2522,1405],{"class":1318},[1100,2524,1128],{"class":1110},[1100,2526,1369],{"class":1318},[1100,2528,2529,2531,2534,2536,2539,2541,2543,2545,2548],{"class":1102,"line":1120},[1100,2530,1721],{"class":1304},[1100,2532,2533],{"class":1304}," type",[1100,2535,1724],{"class":1318},[1100,2537,2538],{"class":1314}," UIMessage",[1100,2540,1746],{"class":1318},[1100,2542,1749],{"class":1304},[1100,2544,1405],{"class":1318},[1100,2546,2547],{"class":1110},"ai",[1100,2549,1369],{"class":1318},[1100,2551,2552,2554,2556,2558,2560,2563,2565,2567,2569,2572],{"class":1102,"line":1334},[1100,2553,1721],{"class":1304},[1100,2555,1724],{"class":1318},[1100,2557,2454],{"class":1314},[1100,2559,1730],{"class":1318},[1100,2561,2562],{"class":1314}," schema",[1100,2564,1746],{"class":1318},[1100,2566,1749],{"class":1304},[1100,2568,1405],{"class":1318},[1100,2570,2571],{"class":1110},"hub:db",[1100,2573,1369],{"class":1318},[1100,2575,2576,2578,2580,2583,2585,2587,2589,2592],{"class":1102,"line":1349},[1100,2577,1721],{"class":1304},[1100,2579,1724],{"class":1318},[1100,2581,2582],{"class":1314}," z",[1100,2584,1746],{"class":1318},[1100,2586,1749],{"class":1304},[1100,2588,1405],{"class":1318},[1100,2590,2591],{"class":1110},"zod",[1100,2593,1369],{"class":1318},[1100,2595,2596],{"class":1102,"line":1361},[1100,2597,1383],{"emptyLinePlaceholder":21},[1100,2599,2600,2602,2604,2606,2608,2611,2613,2616,2618,2620],{"class":1102,"line":1372},[1100,2601,1305],{"class":1304},[1100,2603,1308],{"class":1304},[1100,2605,2511],{"class":1123},[1100,2607,1315],{"class":1314},[1100,2609,2610],{"class":1601},"async",[1100,2612,1965],{"class":1318},[1100,2614,2615],{"class":1956},"event",[1100,2617,1896],{"class":1318},[1100,2619,1839],{"class":1601},[1100,2621,1394],{"class":1318},[1100,2623,2624,2627,2629,2632,2634,2637,2640,2642,2644,2646,2648,2650,2652,2655,2657],{"class":1102,"line":1380},[1100,2625,2626],{"class":1601},"  const",[1100,2628,1724],{"class":1318},[1100,2630,2631],{"class":1314}," message",[1100,2633,1746],{"class":1318},[1100,2635,2636],{"class":1318}," =",[1100,2638,2639],{"class":1304}," await",[1100,2641,2516],{"class":1123},[1100,2643,1315],{"class":1324},[1100,2645,2615],{"class":1314},[1100,2647,1730],{"class":1318},[1100,2649,2582],{"class":1314},[1100,2651,1822],{"class":1318},[1100,2653,2654],{"class":1123},"object",[1100,2656,1315],{"class":1324},[1100,2658,1319],{"class":1318},[1100,2660,2661,2664,2666,2668,2670,2673,2675,2677,2680],{"class":1102,"line":1386},[1100,2662,2663],{"class":1324},"    message",[1100,2665,1328],{"class":1318},[1100,2667,2582],{"class":1314},[1100,2669,1822],{"class":1318},[1100,2671,2672],{"class":1123},"custom",[1100,2674,1573],{"class":1318},[1100,2676,2493],{"class":1106},[1100,2678,2679],{"class":1318},">",[1100,2681,2682],{"class":1324},"()\n",[1100,2684,2685,2687,2689,2691,2694],{"class":1102,"line":1397},[1100,2686,2427],{"class":1318},[1100,2688,1896],{"class":1324},[1100,2690,1822],{"class":1318},[1100,2692,2693],{"class":1314},"parse",[1100,2695,1505],{"class":1324},[1100,2697,2698],{"class":1102,"line":1413},[1100,2699,1383],{"emptyLinePlaceholder":21},[1100,2701,2702],{"class":1102,"line":1419},[1100,2703,2704],{"class":1484},"  \u002F\u002F Create a new chat\n",[1100,2706,2707,2709,2711,2713,2715,2717,2719,2721,2723,2726,2728,2731,2733,2735,2737,2739,2742,2744,2747,2749,2751,2754],{"class":1102,"line":1424},[1100,2708,2626],{"class":1601},[1100,2710,1432],{"class":1318},[1100,2712,262],{"class":1314},[1100,2714,1442],{"class":1318},[1100,2716,2636],{"class":1318},[1100,2718,2639],{"class":1304},[1100,2720,2454],{"class":1314},[1100,2722,1822],{"class":1318},[1100,2724,2725],{"class":1123},"insert",[1100,2727,1315],{"class":1324},[1100,2729,2730],{"class":1314},"schema",[1100,2732,1822],{"class":1318},[1100,2734,1801],{"class":1314},[1100,2736,1896],{"class":1324},[1100,2738,1822],{"class":1318},[1100,2740,2741],{"class":1123},"values",[1100,2743,1315],{"class":1324},[1100,2745,2746],{"class":1318},"{}",[1100,2748,1896],{"class":1324},[1100,2750,1822],{"class":1318},[1100,2752,2753],{"class":1123},"returning",[1100,2755,2682],{"class":1324},[1100,2757,2758],{"class":1102,"line":1447},[1100,2759,1383],{"emptyLinePlaceholder":21},[1100,2761,2762],{"class":1102,"line":1452},[1100,2763,2764],{"class":1484},"  \u002F\u002F Save the first user message\n",[1100,2766,2767,2770,2772,2774,2776,2778,2780,2782,2784,2786,2788,2790,2792],{"class":1102,"line":1462},[1100,2768,2769],{"class":1304},"  await",[1100,2771,2454],{"class":1314},[1100,2773,1822],{"class":1318},[1100,2775,2725],{"class":1123},[1100,2777,1315],{"class":1324},[1100,2779,2730],{"class":1314},[1100,2781,1822],{"class":1318},[1100,2783,2010],{"class":1314},[1100,2785,1896],{"class":1324},[1100,2787,1822],{"class":1318},[1100,2789,2741],{"class":1123},[1100,2791,1315],{"class":1324},[1100,2793,1319],{"class":1318},[1100,2795,2796,2799,2801,2804,2806,2808],{"class":1102,"line":1472},[1100,2797,2798],{"class":1324},"    chatId",[1100,2800,1328],{"class":1318},[1100,2802,2803],{"class":1314}," chat",[1100,2805,1822],{"class":1318},[1100,2807,2031],{"class":1314},[1100,2809,1346],{"class":1318},[1100,2811,2812,2815,2817,2819,2821,2823],{"class":1102,"line":1488},[1100,2813,2814],{"class":1324},"    role",[1100,2816,1328],{"class":1318},[1100,2818,1405],{"class":1318},[1100,2820,2161],{"class":1110},[1100,2822,1343],{"class":1318},[1100,2824,1346],{"class":1318},[1100,2826,2827,2830,2832,2834,2836],{"class":1102,"line":1494},[1100,2828,2829],{"class":1324},"    parts",[1100,2831,1328],{"class":1318},[1100,2833,2631],{"class":1314},[1100,2835,1822],{"class":1318},[1100,2837,2838],{"class":1314},"parts\n",[1100,2840,2841,2843],{"class":1102,"line":1499},[1100,2842,2427],{"class":1318},[1100,2844,1505],{"class":1324},[1100,2846,2847],{"class":1102,"line":2288},[1100,2848,1383],{"emptyLinePlaceholder":21},[1100,2850,2851,2854],{"class":1102,"line":2301},[1100,2852,2853],{"class":1304},"  return",[1100,2855,2856],{"class":1314}," chat\n",[1100,2858,2859,2861],{"class":1102,"line":2331},[1100,2860,1502],{"class":1318},[1100,2862,1505],{"class":1314},[1128,2864,2866],{"id":2865},"streaming-ai-responses","Streaming AI responses",[989,2868,2869,2870,2877,2878,2885,2886,2893],{},"Next, create the endpoint that handles the AI conversation. This endpoint uses ",[1043,2871,2874],{"href":2872,"rel":2873},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-core\u002Fstream-text",[1047],[1050,2875,2876],{},"streamText",", ",[1043,2879,2882],{"href":2880,"rel":2881},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream",[1047],[1050,2883,2884],{},"createUIMessageStream",", and ",[1043,2887,2890],{"href":2888,"rel":2889},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream-response",[1047],[1050,2891,2892],{},"createUIMessageStreamResponse"," from the AI SDK:",[1291,2895,2896],{},[1709,2897,2898],{},[1091,2899,2902],{"className":1295,"code":2900,"filename":2901,"language":1297,"meta":1096,"style":1096},"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",[1050,2903,2904,2936,2955,2977,2995,3001,3008,3015,3022,3029,3034,3046,3066,3070,3082,3116,3146,3177,3182,3186,3208,3241,3257,3269,3273,3311,3371,3385,3394,3425,3438,3443,3449,3480,3524,3531,3536,3554,3593,3599,3604,3610,3630,3658,3674,3693,3721,3728,3733,3799,3804,3809,3815,3844,3885,3914,3926,3942,3956,3963,3968,3973,3979,3996,4018,4036,4044,4061,4082,4092,4102,4112,4129,4140,4146,4152,4162,4172,4185,4200,4205,4210,4220,4236,4251,4257,4263,4271,4276,4282,4302,4317,4334,4357,4368,4376,4382,4387,4410,4416,4436,4442,4488,4504,4537,4551,4559,4564,4571,4576,4594],{"__ignoreMap":1096},[1100,2905,2906,2908,2910,2913,2915,2917,2919,2922,2924,2926,2928,2930,2932,2934],{"class":1102,"line":1103},[1100,2907,1721],{"class":1304},[1100,2909,1724],{"class":1318},[1100,2911,2912],{"class":1314}," createError",[1100,2914,1730],{"class":1318},[1100,2916,2511],{"class":1314},[1100,2918,1730],{"class":1318},[1100,2920,2921],{"class":1314}," getValidatedRouterParams",[1100,2923,1730],{"class":1318},[1100,2925,2516],{"class":1314},[1100,2927,1746],{"class":1318},[1100,2929,1749],{"class":1304},[1100,2931,1405],{"class":1318},[1100,2933,1128],{"class":1110},[1100,2935,1369],{"class":1318},[1100,2937,2938,2940,2942,2945,2947,2949,2951,2953],{"class":1102,"line":1120},[1100,2939,1721],{"class":1304},[1100,2941,1724],{"class":1318},[1100,2943,2944],{"class":1314}," eq",[1100,2946,1746],{"class":1318},[1100,2948,1749],{"class":1304},[1100,2950,1405],{"class":1318},[1100,2952,1774],{"class":1110},[1100,2954,1369],{"class":1318},[1100,2956,2957,2959,2961,2963,2965,2967,2969,2971,2973,2975],{"class":1102,"line":1334},[1100,2958,1721],{"class":1304},[1100,2960,1724],{"class":1318},[1100,2962,2454],{"class":1314},[1100,2964,1730],{"class":1318},[1100,2966,2562],{"class":1314},[1100,2968,1746],{"class":1318},[1100,2970,1749],{"class":1304},[1100,2972,1405],{"class":1318},[1100,2974,2571],{"class":1110},[1100,2976,1369],{"class":1318},[1100,2978,2979,2981,2983,2985,2987,2989,2991,2993],{"class":1102,"line":1349},[1100,2980,1721],{"class":1304},[1100,2982,1724],{"class":1318},[1100,2984,2582],{"class":1314},[1100,2986,1746],{"class":1318},[1100,2988,1749],{"class":1304},[1100,2990,1405],{"class":1318},[1100,2992,2591],{"class":1110},[1100,2994,1369],{"class":1318},[1100,2996,2997,2999],{"class":1102,"line":1361},[1100,2998,1721],{"class":1304},[1100,3000,1394],{"class":1318},[1100,3002,3003,3006],{"class":1102,"line":1372},[1100,3004,3005],{"class":1314},"  convertToModelMessages",[1100,3007,1346],{"class":1318},[1100,3009,3010,3013],{"class":1102,"line":1380},[1100,3011,3012],{"class":1314},"  createUIMessageStream",[1100,3014,1346],{"class":1318},[1100,3016,3017,3020],{"class":1102,"line":1386},[1100,3018,3019],{"class":1314},"  createUIMessageStreamResponse",[1100,3021,1346],{"class":1318},[1100,3023,3024,3027],{"class":1102,"line":1397},[1100,3025,3026],{"class":1314},"  generateText",[1100,3028,1346],{"class":1318},[1100,3030,3031],{"class":1102,"line":1413},[1100,3032,3033],{"class":1314},"  streamText\n",[1100,3035,3036,3038,3040,3042,3044],{"class":1102,"line":1419},[1100,3037,1502],{"class":1318},[1100,3039,1749],{"class":1304},[1100,3041,1405],{"class":1318},[1100,3043,2547],{"class":1110},[1100,3045,1369],{"class":1318},[1100,3047,3048,3050,3052,3054,3056,3058,3060,3062,3064],{"class":1102,"line":1424},[1100,3049,1721],{"class":1304},[1100,3051,2533],{"class":1304},[1100,3053,1724],{"class":1318},[1100,3055,2538],{"class":1314},[1100,3057,1746],{"class":1318},[1100,3059,1749],{"class":1304},[1100,3061,1405],{"class":1318},[1100,3063,2547],{"class":1110},[1100,3065,1369],{"class":1318},[1100,3067,3068],{"class":1102,"line":1447},[1100,3069,1383],{"emptyLinePlaceholder":21},[1100,3071,3072,3075,3078,3080],{"class":1102,"line":1452},[1100,3073,3074],{"class":1601},"const",[1100,3076,3077],{"class":1314}," MODELS ",[1100,3079,1605],{"class":1318},[1100,3081,1331],{"class":1314},[1100,3083,3084,3087,3090,3092,3094,3097,3099,3101,3104,3106,3108,3111,3113],{"class":1102,"line":1462},[1100,3085,3086],{"class":1318},"  {",[1100,3088,3089],{"class":1324}," value",[1100,3091,1328],{"class":1318},[1100,3093,1405],{"class":1318},[1100,3095,3096],{"class":1110},"openai\u002Fgpt-5-nano",[1100,3098,1343],{"class":1318},[1100,3100,1730],{"class":1318},[1100,3102,3103],{"class":1324}," label",[1100,3105,1328],{"class":1318},[1100,3107,1405],{"class":1318},[1100,3109,3110],{"class":1110},"GPT-5 Nano",[1100,3112,1343],{"class":1318},[1100,3114,3115],{"class":1318}," },\n",[1100,3117,3118,3120,3122,3124,3126,3129,3131,3133,3135,3137,3139,3142,3144],{"class":1102,"line":1472},[1100,3119,3086],{"class":1318},[1100,3121,3089],{"class":1324},[1100,3123,1328],{"class":1318},[1100,3125,1405],{"class":1318},[1100,3127,3128],{"class":1110},"anthropic\u002Fclaude-haiku-4.5",[1100,3130,1343],{"class":1318},[1100,3132,1730],{"class":1318},[1100,3134,3103],{"class":1324},[1100,3136,1328],{"class":1318},[1100,3138,1405],{"class":1318},[1100,3140,3141],{"class":1110},"Claude Haiku 4.5",[1100,3143,1343],{"class":1318},[1100,3145,3115],{"class":1318},[1100,3147,3148,3150,3152,3154,3156,3159,3161,3163,3165,3167,3169,3172,3174],{"class":1102,"line":1488},[1100,3149,3086],{"class":1318},[1100,3151,3089],{"class":1324},[1100,3153,1328],{"class":1318},[1100,3155,1405],{"class":1318},[1100,3157,3158],{"class":1110},"google\u002Fgemini-3-flash",[1100,3160,1343],{"class":1318},[1100,3162,1730],{"class":1318},[1100,3164,3103],{"class":1324},[1100,3166,1328],{"class":1318},[1100,3168,1405],{"class":1318},[1100,3170,3171],{"class":1110},"Gemini 3 Flash",[1100,3173,1343],{"class":1318},[1100,3175,3176],{"class":1318}," }\n",[1100,3178,3179],{"class":1102,"line":1494},[1100,3180,3181],{"class":1314},"]\n",[1100,3183,3184],{"class":1102,"line":1499},[1100,3185,1383],{"emptyLinePlaceholder":21},[1100,3187,3188,3190,3192,3194,3196,3198,3200,3202,3204,3206],{"class":1102,"line":2288},[1100,3189,1305],{"class":1304},[1100,3191,1308],{"class":1304},[1100,3193,2511],{"class":1123},[1100,3195,1315],{"class":1314},[1100,3197,2610],{"class":1601},[1100,3199,1965],{"class":1318},[1100,3201,2615],{"class":1956},[1100,3203,1896],{"class":1318},[1100,3205,1839],{"class":1601},[1100,3207,1394],{"class":1318},[1100,3209,3210,3212,3214,3217,3219,3221,3223,3225,3227,3229,3231,3233,3235,3237,3239],{"class":1102,"line":2301},[1100,3211,2626],{"class":1601},[1100,3213,1724],{"class":1318},[1100,3215,3216],{"class":1314}," id",[1100,3218,1746],{"class":1318},[1100,3220,2636],{"class":1318},[1100,3222,2639],{"class":1304},[1100,3224,2921],{"class":1123},[1100,3226,1315],{"class":1324},[1100,3228,2615],{"class":1314},[1100,3230,1730],{"class":1318},[1100,3232,2582],{"class":1314},[1100,3234,1822],{"class":1318},[1100,3236,2654],{"class":1123},[1100,3238,1315],{"class":1324},[1100,3240,1319],{"class":1318},[1100,3242,3243,3246,3248,3250,3252,3255],{"class":1102,"line":2331},[1100,3244,3245],{"class":1324},"    id",[1100,3247,1328],{"class":1318},[1100,3249,2582],{"class":1314},[1100,3251,1822],{"class":1318},[1100,3253,3254],{"class":1123},"string",[1100,3256,2682],{"class":1324},[1100,3258,3259,3261,3263,3265,3267],{"class":1102,"line":2337},[1100,3260,2427],{"class":1318},[1100,3262,1896],{"class":1324},[1100,3264,1822],{"class":1318},[1100,3266,2693],{"class":1314},[1100,3268,1505],{"class":1324},[1100,3270,3271],{"class":1102,"line":2342},[1100,3272,1383],{"emptyLinePlaceholder":21},[1100,3274,3275,3277,3279,3282,3284,3287,3289,3291,3293,3295,3297,3299,3301,3303,3305,3307,3309],{"class":1102,"line":2374},[1100,3276,2626],{"class":1601},[1100,3278,1724],{"class":1318},[1100,3280,3281],{"class":1314}," model",[1100,3283,1730],{"class":1318},[1100,3285,3286],{"class":1314}," messages",[1100,3288,1746],{"class":1318},[1100,3290,2636],{"class":1318},[1100,3292,2639],{"class":1304},[1100,3294,2516],{"class":1123},[1100,3296,1315],{"class":1324},[1100,3298,2615],{"class":1314},[1100,3300,1730],{"class":1318},[1100,3302,2582],{"class":1314},[1100,3304,1822],{"class":1318},[1100,3306,2654],{"class":1123},[1100,3308,1315],{"class":1324},[1100,3310,1319],{"class":1318},[1100,3312,3313,3316,3318,3320,3322,3324,3326,3328,3331,3333,3336,3338,3341,3343,3346,3348,3351,3353,3356,3358,3360,3363,3365,3367,3369],{"class":1102,"line":2390},[1100,3314,3315],{"class":1324},"    model",[1100,3317,1328],{"class":1318},[1100,3319,2582],{"class":1314},[1100,3321,1822],{"class":1318},[1100,3323,3254],{"class":1123},[1100,3325,1819],{"class":1324},[1100,3327,1822],{"class":1318},[1100,3329,3330],{"class":1123},"refine",[1100,3332,1315],{"class":1324},[1100,3334,3335],{"class":1956},"value",[1100,3337,1839],{"class":1601},[1100,3339,3340],{"class":1314}," MODELS",[1100,3342,1822],{"class":1318},[1100,3344,3345],{"class":1123},"some",[1100,3347,1315],{"class":1324},[1100,3349,3350],{"class":1956},"m",[1100,3352,1839],{"class":1601},[1100,3354,3355],{"class":1314}," m",[1100,3357,1822],{"class":1318},[1100,3359,3335],{"class":1314},[1100,3361,3362],{"class":1318}," ===",[1100,3364,3089],{"class":1314},[1100,3366,1896],{"class":1324},[1100,3368,1730],{"class":1318},[1100,3370,1394],{"class":1318},[1100,3372,3373,3376,3378,3380,3383],{"class":1102,"line":2408},[1100,3374,3375],{"class":1324},"      message",[1100,3377,1328],{"class":1318},[1100,3379,1405],{"class":1318},[1100,3381,3382],{"class":1110},"Invalid model",[1100,3384,1369],{"class":1318},[1100,3386,3387,3390,3392],{"class":1102,"line":2424},[1100,3388,3389],{"class":1318},"    }",[1100,3391,1896],{"class":1324},[1100,3393,1346],{"class":1318},[1100,3395,3396,3399,3401,3403,3405,3408,3410,3413,3415,3417,3419,3421,3423],{"class":1102,"line":2432},[1100,3397,3398],{"class":1324},"    messages",[1100,3400,1328],{"class":1318},[1100,3402,2582],{"class":1314},[1100,3404,1822],{"class":1318},[1100,3406,3407],{"class":1123},"array",[1100,3409,1315],{"class":1324},[1100,3411,3412],{"class":1314},"z",[1100,3414,1822],{"class":1318},[1100,3416,2672],{"class":1123},[1100,3418,1573],{"class":1318},[1100,3420,2493],{"class":1106},[1100,3422,2679],{"class":1318},[1100,3424,1922],{"class":1324},[1100,3426,3428,3430,3432,3434,3436],{"class":1102,"line":3427},30,[1100,3429,2427],{"class":1318},[1100,3431,1896],{"class":1324},[1100,3433,1822],{"class":1318},[1100,3435,2693],{"class":1314},[1100,3437,1505],{"class":1324},[1100,3439,3441],{"class":1102,"line":3440},31,[1100,3442,1383],{"emptyLinePlaceholder":21},[1100,3444,3446],{"class":1102,"line":3445},32,[1100,3447,3448],{"class":1484},"  \u002F\u002F Fetch the chat from the database\n",[1100,3450,3452,3454,3456,3458,3460,3462,3464,3467,3469,3471,3473,3476,3478],{"class":1102,"line":3451},33,[1100,3453,2626],{"class":1601},[1100,3455,2803],{"class":1314},[1100,3457,2636],{"class":1318},[1100,3459,2639],{"class":1304},[1100,3461,2454],{"class":1314},[1100,3463,1822],{"class":1318},[1100,3465,3466],{"class":1314},"query",[1100,3468,1822],{"class":1318},[1100,3470,1801],{"class":1314},[1100,3472,1822],{"class":1318},[1100,3474,3475],{"class":1123},"findFirst",[1100,3477,1315],{"class":1324},[1100,3479,1319],{"class":1318},[1100,3481,3483,3486,3488,3490,3492,3494,3496,3498,3500,3502,3504,3506,3508,3510,3512,3514,3516,3519,3522],{"class":1102,"line":3482},34,[1100,3484,3485],{"class":1123},"    where",[1100,3487,1328],{"class":1318},[1100,3489,1965],{"class":1318},[1100,3491,262],{"class":1956},[1100,3493,1730],{"class":1318},[1100,3495,1724],{"class":1318},[1100,3497,2944],{"class":1956},[1100,3499,1960],{"class":1318},[1100,3501,1839],{"class":1601},[1100,3503,2944],{"class":1123},[1100,3505,1315],{"class":1324},[1100,3507,262],{"class":1314},[1100,3509,1822],{"class":1318},[1100,3511,2031],{"class":1314},[1100,3513,1730],{"class":1318},[1100,3515,3216],{"class":1314},[1100,3517,3518],{"class":1304}," as",[1100,3520,3521],{"class":1106}," string",[1100,3523,1505],{"class":1324},[1100,3525,3527,3529],{"class":1102,"line":3526},35,[1100,3528,2427],{"class":1318},[1100,3530,1505],{"class":1324},[1100,3532,3534],{"class":1102,"line":3533},36,[1100,3535,1383],{"emptyLinePlaceholder":21},[1100,3537,3539,3542,3544,3547,3549,3552],{"class":1102,"line":3538},37,[1100,3540,3541],{"class":1304},"  if",[1100,3543,1965],{"class":1324},[1100,3545,3546],{"class":1318},"!",[1100,3548,262],{"class":1314},[1100,3550,3551],{"class":1324},") ",[1100,3553,1319],{"class":1318},[1100,3555,3557,3560,3562,3564,3566,3569,3571,3575,3577,3580,3582,3584,3587,3589,3591],{"class":1102,"line":3556},38,[1100,3558,3559],{"class":1304},"    throw",[1100,3561,2912],{"class":1123},[1100,3563,1315],{"class":1324},[1100,3565,1879],{"class":1318},[1100,3567,3568],{"class":1324}," statusCode",[1100,3570,1328],{"class":1318},[1100,3572,3574],{"class":3573},"sbssI"," 404",[1100,3576,1730],{"class":1318},[1100,3578,3579],{"class":1324}," statusMessage",[1100,3581,1328],{"class":1318},[1100,3583,1405],{"class":1318},[1100,3585,3586],{"class":1110},"Chat not found",[1100,3588,1343],{"class":1318},[1100,3590,1746],{"class":1318},[1100,3592,1505],{"class":1324},[1100,3594,3596],{"class":1102,"line":3595},39,[1100,3597,3598],{"class":1318},"  }\n",[1100,3600,3602],{"class":1102,"line":3601},40,[1100,3603,1383],{"emptyLinePlaceholder":21},[1100,3605,3607],{"class":1102,"line":3606},41,[1100,3608,3609],{"class":1484},"  \u002F\u002F Generate a title for the chat if it doesn't have one\n",[1100,3611,3613,3615,3617,3619,3621,3623,3626,3628],{"class":1102,"line":3612},42,[1100,3614,3541],{"class":1304},[1100,3616,1965],{"class":1324},[1100,3618,3546],{"class":1318},[1100,3620,262],{"class":1314},[1100,3622,1822],{"class":1318},[1100,3624,3625],{"class":1314},"title",[1100,3627,3551],{"class":1324},[1100,3629,1319],{"class":1318},[1100,3631,3633,3636,3638,3640,3642,3645,3647,3649,3651,3654,3656],{"class":1102,"line":3632},43,[1100,3634,3635],{"class":1601},"    const",[1100,3637,1724],{"class":1318},[1100,3639,1733],{"class":1324},[1100,3641,1328],{"class":1318},[1100,3643,3644],{"class":1314}," title",[1100,3646,1746],{"class":1318},[1100,3648,2636],{"class":1318},[1100,3650,2639],{"class":1304},[1100,3652,3653],{"class":1123}," generateText",[1100,3655,1315],{"class":1324},[1100,3657,1319],{"class":1318},[1100,3659,3661,3664,3666,3668,3670,3672],{"class":1102,"line":3660},44,[1100,3662,3663],{"class":1324},"      model",[1100,3665,1328],{"class":1318},[1100,3667,1405],{"class":1318},[1100,3669,3128],{"class":1110},[1100,3671,1343],{"class":1318},[1100,3673,1346],{"class":1318},[1100,3675,3677,3680,3682,3685,3688,3691],{"class":1102,"line":3676},45,[1100,3678,3679],{"class":1324},"      system",[1100,3681,1328],{"class":1318},[1100,3683,3684],{"class":1318}," `",[1100,3686,3687],{"class":1110},"Generate a short title (max 30 characters) based on the user's message. No quotes or punctuation.",[1100,3689,3690],{"class":1318},"`",[1100,3692,1346],{"class":1318},[1100,3694,3696,3699,3701,3704,3706,3709,3711,3713,3716,3719],{"class":1102,"line":3695},46,[1100,3697,3698],{"class":1324},"      prompt",[1100,3700,1328],{"class":1318},[1100,3702,3703],{"class":1314}," JSON",[1100,3705,1822],{"class":1318},[1100,3707,3708],{"class":1123},"stringify",[1100,3710,1315],{"class":1324},[1100,3712,2010],{"class":1314},[1100,3714,3715],{"class":1324},"[",[1100,3717,3718],{"class":3573},"0",[1100,3720,2334],{"class":1324},[1100,3722,3724,3726],{"class":1102,"line":3723},47,[1100,3725,3389],{"class":1318},[1100,3727,1505],{"class":1324},[1100,3729,3731],{"class":1102,"line":3730},48,[1100,3732,1383],{"emptyLinePlaceholder":21},[1100,3734,3736,3739,3741,3743,3746,3748,3750,3752,3754,3756,3758,3761,3763,3765,3767,3769,3771,3773,3776,3778,3781,3783,3785,3787,3789,3791,3793,3795,3797],{"class":1102,"line":3735},49,[1100,3737,3738],{"class":1304},"    await",[1100,3740,2454],{"class":1314},[1100,3742,1822],{"class":1318},[1100,3744,3745],{"class":1123},"update",[1100,3747,1315],{"class":1324},[1100,3749,2730],{"class":1314},[1100,3751,1822],{"class":1318},[1100,3753,1801],{"class":1314},[1100,3755,1896],{"class":1324},[1100,3757,1822],{"class":1318},[1100,3759,3760],{"class":1123},"set",[1100,3762,1315],{"class":1324},[1100,3764,1879],{"class":1318},[1100,3766,3644],{"class":1314},[1100,3768,1746],{"class":1318},[1100,3770,1896],{"class":1324},[1100,3772,1822],{"class":1318},[1100,3774,3775],{"class":1123},"where",[1100,3777,1315],{"class":1324},[1100,3779,3780],{"class":1123},"eq",[1100,3782,1315],{"class":1324},[1100,3784,2730],{"class":1314},[1100,3786,1822],{"class":1318},[1100,3788,1801],{"class":1314},[1100,3790,1822],{"class":1318},[1100,3792,2031],{"class":1314},[1100,3794,1730],{"class":1318},[1100,3796,3216],{"class":1314},[1100,3798,1986],{"class":1324},[1100,3800,3802],{"class":1102,"line":3801},50,[1100,3803,3598],{"class":1318},[1100,3805,3807],{"class":1102,"line":3806},51,[1100,3808,1383],{"emptyLinePlaceholder":21},[1100,3810,3812],{"class":1102,"line":3811},52,[1100,3813,3814],{"class":1484},"  \u002F\u002F Save the user message if it's a follow-up\n",[1100,3816,3818,3820,3823,3825,3827,3829,3831,3833,3836,3839,3842],{"class":1102,"line":3817},53,[1100,3819,2626],{"class":1601},[1100,3821,3822],{"class":1314}," lastMessage",[1100,3824,2636],{"class":1318},[1100,3826,3286],{"class":1314},[1100,3828,3715],{"class":1324},[1100,3830,2010],{"class":1314},[1100,3832,1822],{"class":1318},[1100,3834,3835],{"class":1314},"length",[1100,3837,3838],{"class":1318}," -",[1100,3840,3841],{"class":3573}," 1",[1100,3843,3181],{"class":1324},[1100,3845,3847,3849,3851,3854,3857,3859,3861,3863,3865,3867,3870,3872,3874,3876,3879,3881,3883],{"class":1102,"line":3846},54,[1100,3848,3541],{"class":1304},[1100,3850,1965],{"class":1324},[1100,3852,3853],{"class":1314},"lastMessage",[1100,3855,3856],{"class":1318},"?.",[1100,3858,2143],{"class":1314},[1100,3860,3362],{"class":1318},[1100,3862,1405],{"class":1318},[1100,3864,2161],{"class":1110},[1100,3866,1343],{"class":1318},[1100,3868,3869],{"class":1318}," &&",[1100,3871,3286],{"class":1314},[1100,3873,1822],{"class":1318},[1100,3875,3835],{"class":1314},[1100,3877,3878],{"class":1318}," >",[1100,3880,3841],{"class":3573},[1100,3882,3551],{"class":1324},[1100,3884,1319],{"class":1318},[1100,3886,3888,3890,3892,3894,3896,3898,3900,3902,3904,3906,3908,3910,3912],{"class":1102,"line":3887},55,[1100,3889,3738],{"class":1304},[1100,3891,2454],{"class":1314},[1100,3893,1822],{"class":1318},[1100,3895,2725],{"class":1123},[1100,3897,1315],{"class":1324},[1100,3899,2730],{"class":1314},[1100,3901,1822],{"class":1318},[1100,3903,2010],{"class":1314},[1100,3905,1896],{"class":1324},[1100,3907,1822],{"class":1318},[1100,3909,2741],{"class":1123},[1100,3911,1315],{"class":1324},[1100,3913,1319],{"class":1318},[1100,3915,3917,3920,3922,3924],{"class":1102,"line":3916},56,[1100,3918,3919],{"class":1324},"      chatId",[1100,3921,1328],{"class":1318},[1100,3923,3216],{"class":1314},[1100,3925,1346],{"class":1318},[1100,3927,3929,3932,3934,3936,3938,3940],{"class":1102,"line":3928},57,[1100,3930,3931],{"class":1324},"      role",[1100,3933,1328],{"class":1318},[1100,3935,1405],{"class":1318},[1100,3937,2161],{"class":1110},[1100,3939,1343],{"class":1318},[1100,3941,1346],{"class":1318},[1100,3943,3945,3948,3950,3952,3954],{"class":1102,"line":3944},58,[1100,3946,3947],{"class":1324},"      parts",[1100,3949,1328],{"class":1318},[1100,3951,3822],{"class":1314},[1100,3953,1822],{"class":1318},[1100,3955,2838],{"class":1314},[1100,3957,3959,3961],{"class":1102,"line":3958},59,[1100,3960,3389],{"class":1318},[1100,3962,1505],{"class":1324},[1100,3964,3966],{"class":1102,"line":3965},60,[1100,3967,3598],{"class":1318},[1100,3969,3971],{"class":1102,"line":3970},61,[1100,3972,1383],{"emptyLinePlaceholder":21},[1100,3974,3976],{"class":1102,"line":3975},62,[1100,3977,3978],{"class":1484},"  \u002F\u002F Create the streaming response\n",[1100,3980,3982,3984,3987,3989,3992,3994],{"class":1102,"line":3981},63,[1100,3983,2626],{"class":1601},[1100,3985,3986],{"class":1314}," stream",[1100,3988,2636],{"class":1318},[1100,3990,3991],{"class":1123}," createUIMessageStream",[1100,3993,1315],{"class":1324},[1100,3995,1319],{"class":1318},[1100,3997,3999,4002,4004,4007,4009,4012,4014,4016],{"class":1102,"line":3998},64,[1100,4000,4001],{"class":1123},"    execute",[1100,4003,1328],{"class":1318},[1100,4005,4006],{"class":1601}," async",[1100,4008,1953],{"class":1318},[1100,4010,4011],{"class":1956}," writer",[1100,4013,1960],{"class":1318},[1100,4015,1839],{"class":1601},[1100,4017,1394],{"class":1318},[1100,4019,4021,4024,4027,4029,4032,4034],{"class":1102,"line":4020},65,[1100,4022,4023],{"class":1601},"      const",[1100,4025,4026],{"class":1314}," result",[1100,4028,2636],{"class":1318},[1100,4030,4031],{"class":1123}," streamText",[1100,4033,1315],{"class":1324},[1100,4035,1319],{"class":1318},[1100,4037,4039,4042],{"class":1102,"line":4038},66,[1100,4040,4041],{"class":1314},"        model",[1100,4043,1346],{"class":1318},[1100,4045,4047,4050,4052,4054,4057,4059],{"class":1102,"line":4046},67,[1100,4048,4049],{"class":1324},"        system",[1100,4051,1328],{"class":1318},[1100,4053,3684],{"class":1318},[1100,4055,4056],{"class":1110},"You are a helpful AI assistant. Be concise and friendly.",[1100,4058,3690],{"class":1318},[1100,4060,1346],{"class":1318},[1100,4062,4064,4067,4069,4071,4074,4076,4078,4080],{"class":1102,"line":4063},68,[1100,4065,4066],{"class":1324},"        messages",[1100,4068,1328],{"class":1318},[1100,4070,2639],{"class":1304},[1100,4072,4073],{"class":1123}," convertToModelMessages",[1100,4075,1315],{"class":1324},[1100,4077,2010],{"class":1314},[1100,4079,1896],{"class":1324},[1100,4081,1346],{"class":1318},[1100,4083,4085,4088,4090],{"class":1102,"line":4084},69,[1100,4086,4087],{"class":1324},"        providerOptions",[1100,4089,1328],{"class":1318},[1100,4091,1394],{"class":1318},[1100,4093,4095,4098,4100],{"class":1102,"line":4094},70,[1100,4096,4097],{"class":1324},"          anthropic",[1100,4099,1328],{"class":1318},[1100,4101,1394],{"class":1318},[1100,4103,4105,4108,4110],{"class":1102,"line":4104},71,[1100,4106,4107],{"class":1324},"            thinking",[1100,4109,1328],{"class":1318},[1100,4111,1394],{"class":1318},[1100,4113,4115,4118,4120,4122,4125,4127],{"class":1102,"line":4114},72,[1100,4116,4117],{"class":1324},"              type",[1100,4119,1328],{"class":1318},[1100,4121,1405],{"class":1318},[1100,4123,4124],{"class":1110},"enabled",[1100,4126,1343],{"class":1318},[1100,4128,1346],{"class":1318},[1100,4130,4132,4135,4137],{"class":1102,"line":4131},73,[1100,4133,4134],{"class":1324},"              budgetTokens",[1100,4136,1328],{"class":1318},[1100,4138,4139],{"class":3573}," 2048\n",[1100,4141,4143],{"class":1102,"line":4142},74,[1100,4144,4145],{"class":1318},"            }\n",[1100,4147,4149],{"class":1102,"line":4148},75,[1100,4150,4151],{"class":1318},"          },\n",[1100,4153,4155,4158,4160],{"class":1102,"line":4154},76,[1100,4156,4157],{"class":1324},"          google",[1100,4159,1328],{"class":1318},[1100,4161,1394],{"class":1318},[1100,4163,4165,4168,4170],{"class":1102,"line":4164},77,[1100,4166,4167],{"class":1324},"            thinkingConfig",[1100,4169,1328],{"class":1318},[1100,4171,1394],{"class":1318},[1100,4173,4175,4178,4180,4183],{"class":1102,"line":4174},78,[1100,4176,4177],{"class":1324},"              includeThoughts",[1100,4179,1328],{"class":1318},[1100,4181,4182],{"class":1480}," true",[1100,4184,1346],{"class":1318},[1100,4186,4188,4191,4193,4195,4198],{"class":1102,"line":4187},79,[1100,4189,4190],{"class":1324},"              thinkingLevel",[1100,4192,1328],{"class":1318},[1100,4194,1405],{"class":1318},[1100,4196,4197],{"class":1110},"low",[1100,4199,1369],{"class":1318},[1100,4201,4203],{"class":1102,"line":4202},80,[1100,4204,4145],{"class":1318},[1100,4206,4208],{"class":1102,"line":4207},81,[1100,4209,4151],{"class":1318},[1100,4211,4213,4216,4218],{"class":1102,"line":4212},82,[1100,4214,4215],{"class":1324},"          openai",[1100,4217,1328],{"class":1318},[1100,4219,1394],{"class":1318},[1100,4221,4223,4226,4228,4230,4232,4234],{"class":1102,"line":4222},83,[1100,4224,4225],{"class":1324},"            reasoningEffort",[1100,4227,1328],{"class":1318},[1100,4229,1405],{"class":1318},[1100,4231,4197],{"class":1110},[1100,4233,1343],{"class":1318},[1100,4235,1346],{"class":1318},[1100,4237,4239,4242,4244,4246,4249],{"class":1102,"line":4238},84,[1100,4240,4241],{"class":1324},"            reasoningSummary",[1100,4243,1328],{"class":1318},[1100,4245,1405],{"class":1318},[1100,4247,4248],{"class":1110},"detailed",[1100,4250,1369],{"class":1318},[1100,4252,4254],{"class":1102,"line":4253},85,[1100,4255,4256],{"class":1318},"          }\n",[1100,4258,4260],{"class":1102,"line":4259},86,[1100,4261,4262],{"class":1318},"        }\n",[1100,4264,4266,4269],{"class":1102,"line":4265},87,[1100,4267,4268],{"class":1318},"      }",[1100,4270,1505],{"class":1324},[1100,4272,4274],{"class":1102,"line":4273},88,[1100,4275,1383],{"emptyLinePlaceholder":21},[1100,4277,4279],{"class":1102,"line":4278},89,[1100,4280,4281],{"class":1484},"      \u002F\u002F Notify the client that a title was generated\n",[1100,4283,4285,4288,4290,4292,4294,4296,4298,4300],{"class":1102,"line":4284},90,[1100,4286,4287],{"class":1304},"      if",[1100,4289,1965],{"class":1324},[1100,4291,3546],{"class":1318},[1100,4293,262],{"class":1314},[1100,4295,1822],{"class":1318},[1100,4297,3625],{"class":1314},[1100,4299,3551],{"class":1324},[1100,4301,1319],{"class":1318},[1100,4303,4305,4308,4310,4313,4315],{"class":1102,"line":4304},91,[1100,4306,4307],{"class":1314},"        writer",[1100,4309,1822],{"class":1318},[1100,4311,4312],{"class":1123},"write",[1100,4314,1315],{"class":1324},[1100,4316,1319],{"class":1318},[1100,4318,4320,4323,4325,4327,4330,4332],{"class":1102,"line":4319},92,[1100,4321,4322],{"class":1324},"          type",[1100,4324,1328],{"class":1318},[1100,4326,1405],{"class":1318},[1100,4328,4329],{"class":1110},"data-chat-title",[1100,4331,1343],{"class":1318},[1100,4333,1346],{"class":1318},[1100,4335,4337,4340,4342,4344,4346,4348,4350,4353,4355],{"class":1102,"line":4336},93,[1100,4338,4339],{"class":1324},"          data",[1100,4341,1328],{"class":1318},[1100,4343,1724],{"class":1318},[1100,4345,2631],{"class":1324},[1100,4347,1328],{"class":1318},[1100,4349,1405],{"class":1318},[1100,4351,4352],{"class":1110},"Title generated",[1100,4354,1343],{"class":1318},[1100,4356,3115],{"class":1318},[1100,4358,4360,4363,4365],{"class":1102,"line":4359},94,[1100,4361,4362],{"class":1324},"          transient",[1100,4364,1328],{"class":1318},[1100,4366,4367],{"class":1480}," true\n",[1100,4369,4371,4374],{"class":1102,"line":4370},95,[1100,4372,4373],{"class":1318},"        }",[1100,4375,1505],{"class":1324},[1100,4377,4379],{"class":1102,"line":4378},96,[1100,4380,4381],{"class":1318},"      }\n",[1100,4383,4385],{"class":1102,"line":4384},97,[1100,4386,1383],{"emptyLinePlaceholder":21},[1100,4388,4390,4393,4395,4398,4400,4403,4405,4408],{"class":1102,"line":4389},98,[1100,4391,4392],{"class":1314},"      writer",[1100,4394,1822],{"class":1318},[1100,4396,4397],{"class":1123},"merge",[1100,4399,1315],{"class":1324},[1100,4401,4402],{"class":1314},"result",[1100,4404,1822],{"class":1318},[1100,4406,4407],{"class":1123},"toUIMessageStream",[1100,4409,1922],{"class":1324},[1100,4411,4413],{"class":1102,"line":4412},99,[1100,4414,4415],{"class":1318},"    },\n",[1100,4417,4419,4422,4424,4426,4428,4430,4432,4434],{"class":1102,"line":4418},100,[1100,4420,4421],{"class":1123},"    onFinish",[1100,4423,1328],{"class":1318},[1100,4425,4006],{"class":1601},[1100,4427,1953],{"class":1318},[1100,4429,3286],{"class":1956},[1100,4431,1960],{"class":1318},[1100,4433,1839],{"class":1601},[1100,4435,1394],{"class":1318},[1100,4437,4439],{"class":1102,"line":4438},101,[1100,4440,4441],{"class":1484},"      \u002F\u002F Save the assistant's response to the database\n",[1100,4443,4445,4448,4450,4452,4454,4456,4458,4460,4462,4464,4466,4468,4470,4472,4474,4477,4479,4482,4484,4486],{"class":1102,"line":4444},102,[1100,4446,4447],{"class":1304},"      await",[1100,4449,2454],{"class":1314},[1100,4451,1822],{"class":1318},[1100,4453,2725],{"class":1123},[1100,4455,1315],{"class":1324},[1100,4457,2730],{"class":1314},[1100,4459,1822],{"class":1318},[1100,4461,2010],{"class":1314},[1100,4463,1896],{"class":1324},[1100,4465,1822],{"class":1318},[1100,4467,2741],{"class":1123},[1100,4469,1315],{"class":1324},[1100,4471,2010],{"class":1314},[1100,4473,1822],{"class":1318},[1100,4475,4476],{"class":1123},"map",[1100,4478,1315],{"class":1324},[1100,4480,4481],{"class":1956},"message",[1100,4483,1839],{"class":1601},[1100,4485,1965],{"class":1324},[1100,4487,1319],{"class":1318},[1100,4489,4491,4494,4496,4498,4500,4502],{"class":1102,"line":4490},103,[1100,4492,4493],{"class":1324},"        chatId",[1100,4495,1328],{"class":1318},[1100,4497,2803],{"class":1314},[1100,4499,1822],{"class":1318},[1100,4501,2031],{"class":1314},[1100,4503,1346],{"class":1318},[1100,4505,4507,4510,4512,4514,4516,4518,4520,4522,4524,4526,4529,4531,4533,4535],{"class":1102,"line":4506},104,[1100,4508,4509],{"class":1324},"        role",[1100,4511,1328],{"class":1318},[1100,4513,2631],{"class":1314},[1100,4515,1822],{"class":1318},[1100,4517,2143],{"class":1314},[1100,4519,3518],{"class":1304},[1100,4521,1405],{"class":1318},[1100,4523,2161],{"class":1110},[1100,4525,1343],{"class":1318},[1100,4527,4528],{"class":1318}," |",[1100,4530,1405],{"class":1318},[1100,4532,2170],{"class":1110},[1100,4534,1343],{"class":1318},[1100,4536,1346],{"class":1318},[1100,4538,4540,4543,4545,4547,4549],{"class":1102,"line":4539},105,[1100,4541,4542],{"class":1324},"        parts",[1100,4544,1328],{"class":1318},[1100,4546,2631],{"class":1314},[1100,4548,1822],{"class":1318},[1100,4550,2838],{"class":1314},[1100,4552,4554,4556],{"class":1102,"line":4553},106,[1100,4555,4268],{"class":1318},[1100,4557,4558],{"class":1324},")))\n",[1100,4560,4562],{"class":1102,"line":4561},107,[1100,4563,1491],{"class":1318},[1100,4565,4567,4569],{"class":1102,"line":4566},108,[1100,4568,2427],{"class":1318},[1100,4570,1505],{"class":1324},[1100,4572,4574],{"class":1102,"line":4573},109,[1100,4575,1383],{"emptyLinePlaceholder":21},[1100,4577,4579,4581,4584,4586,4588,4590,4592],{"class":1102,"line":4578},110,[1100,4580,2853],{"class":1304},[1100,4582,4583],{"class":1123}," createUIMessageStreamResponse",[1100,4585,1315],{"class":1324},[1100,4587,1879],{"class":1318},[1100,4589,3986],{"class":1314},[1100,4591,1746],{"class":1318},[1100,4593,1505],{"class":1324},[1100,4595,4597,4599],{"class":1102,"line":4596},111,[1100,4598,1502],{"class":1318},[1100,4600,1505],{"class":1314},[989,4602,4603],{},"Here's what each part does:",[989,4605,4606],{},[1007,4607,4608],{},"AI Gateway",[989,4610,4611,4612,4615],{},"Thanks to ",[1043,4613,1081],{"href":1079,"rel":4614},[1047],", we can use any AI model supported by the gateway just by specifying the model name.",[989,4617,4618],{},[1007,4619,4620],{},"Automatic Title Generation",[989,4622,4623,4624,4631],{},"When a chat doesn't have a title yet, we use ",[1043,4625,4628],{"href":4626,"rel":4627},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-core\u002Fgenerate-text#generatetext",[1047],[1050,4629,4630],{},"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,4633,4634],{},[1007,4635,4636],{},"Streaming with streamText",[989,4638,4639,4640,4645],{},"The ",[1043,4641,4643],{"href":2872,"rel":4642},[1047],[1050,4644,2876],{}," function generates a streaming response from the AI model. Key options include:",[1001,4647,4648,4654,4659],{},[1004,4649,4650,4653],{},[1050,4651,4652],{},"model",": The AI model to use",[1004,4655,4656,4658],{},[1050,4657,2179],{},": Instructions that guide the AI's behavior",[1004,4660,4661,4663],{},[1050,4662,2010],{},": The conversation history",[989,4665,4666],{},[1007,4667,4668],{},"UIMessageStream",[989,4670,4639,4671,1053,4677,4683],{},[1043,4672,4675],{"href":4673,"rel":4674},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream#createuimessagestream",[1047],[1050,4676,2884],{},[1043,4678,4681],{"href":4679,"rel":4680},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream-response#createuimessagestreamresponse",[1047],[1050,4682,2892],{}," 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,4685,4639,4686,4689,4690,4692,4693,4696],{},[1050,4687,4688],{},"writer.write()"," method allows sending custom data events to the client (like ",[1050,4691,4329],{},"), while ",[1050,4694,4695],{},"onFinish"," is called when streaming completes, perfect for persisting the assistant's response.",[1128,4698,4700],{"id":4699},"fetching-a-chat","Fetching a chat",[989,4702,4703],{},"Add an endpoint to fetch existing chat data from your database:",[1291,4705,4706],{},[1091,4707,4710],{"className":1295,"code":4708,"filename":4709,"language":1297,"meta":1096,"style":1096},"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",[1050,4711,4712,4738,4761,4783,4801,4805,4827,4859,4873,4885,4889,4917,4948,4957,4966,4995,4999,5003,5009,5013,5027,5059,5063,5067,5073],{"__ignoreMap":1096},[1100,4713,4714,4716,4718,4720,4722,4724,4726,4728,4730,4732,4734,4736],{"class":1102,"line":1103},[1100,4715,1721],{"class":1304},[1100,4717,1724],{"class":1318},[1100,4719,2912],{"class":1314},[1100,4721,1730],{"class":1318},[1100,4723,2511],{"class":1314},[1100,4725,1730],{"class":1318},[1100,4727,2921],{"class":1314},[1100,4729,1746],{"class":1318},[1100,4731,1749],{"class":1304},[1100,4733,1405],{"class":1318},[1100,4735,1128],{"class":1110},[1100,4737,1369],{"class":1318},[1100,4739,4740,4742,4744,4747,4749,4751,4753,4755,4757,4759],{"class":1102,"line":1120},[1100,4741,1721],{"class":1304},[1100,4743,1724],{"class":1318},[1100,4745,4746],{"class":1314}," asc",[1100,4748,1730],{"class":1318},[1100,4750,2944],{"class":1314},[1100,4752,1746],{"class":1318},[1100,4754,1749],{"class":1304},[1100,4756,1405],{"class":1318},[1100,4758,1774],{"class":1110},[1100,4760,1369],{"class":1318},[1100,4762,4763,4765,4767,4769,4771,4773,4775,4777,4779,4781],{"class":1102,"line":1334},[1100,4764,1721],{"class":1304},[1100,4766,1724],{"class":1318},[1100,4768,2454],{"class":1314},[1100,4770,1730],{"class":1318},[1100,4772,2562],{"class":1314},[1100,4774,1746],{"class":1318},[1100,4776,1749],{"class":1304},[1100,4778,1405],{"class":1318},[1100,4780,2571],{"class":1110},[1100,4782,1369],{"class":1318},[1100,4784,4785,4787,4789,4791,4793,4795,4797,4799],{"class":1102,"line":1349},[1100,4786,1721],{"class":1304},[1100,4788,1724],{"class":1318},[1100,4790,2582],{"class":1314},[1100,4792,1746],{"class":1318},[1100,4794,1749],{"class":1304},[1100,4796,1405],{"class":1318},[1100,4798,2591],{"class":1110},[1100,4800,1369],{"class":1318},[1100,4802,4803],{"class":1102,"line":1361},[1100,4804,1383],{"emptyLinePlaceholder":21},[1100,4806,4807,4809,4811,4813,4815,4817,4819,4821,4823,4825],{"class":1102,"line":1372},[1100,4808,1305],{"class":1304},[1100,4810,1308],{"class":1304},[1100,4812,2511],{"class":1123},[1100,4814,1315],{"class":1314},[1100,4816,2610],{"class":1601},[1100,4818,1965],{"class":1318},[1100,4820,2615],{"class":1956},[1100,4822,1896],{"class":1318},[1100,4824,1839],{"class":1601},[1100,4826,1394],{"class":1318},[1100,4828,4829,4831,4833,4835,4837,4839,4841,4843,4845,4847,4849,4851,4853,4855,4857],{"class":1102,"line":1380},[1100,4830,2626],{"class":1601},[1100,4832,1724],{"class":1318},[1100,4834,3216],{"class":1314},[1100,4836,1746],{"class":1318},[1100,4838,2636],{"class":1318},[1100,4840,2639],{"class":1304},[1100,4842,2921],{"class":1123},[1100,4844,1315],{"class":1324},[1100,4846,2615],{"class":1314},[1100,4848,1730],{"class":1318},[1100,4850,2582],{"class":1314},[1100,4852,1822],{"class":1318},[1100,4854,2654],{"class":1123},[1100,4856,1315],{"class":1324},[1100,4858,1319],{"class":1318},[1100,4860,4861,4863,4865,4867,4869,4871],{"class":1102,"line":1386},[1100,4862,3245],{"class":1324},[1100,4864,1328],{"class":1318},[1100,4866,2582],{"class":1314},[1100,4868,1822],{"class":1318},[1100,4870,3254],{"class":1123},[1100,4872,2682],{"class":1324},[1100,4874,4875,4877,4879,4881,4883],{"class":1102,"line":1397},[1100,4876,2427],{"class":1318},[1100,4878,1896],{"class":1324},[1100,4880,1822],{"class":1318},[1100,4882,2693],{"class":1314},[1100,4884,1505],{"class":1324},[1100,4886,4887],{"class":1102,"line":1413},[1100,4888,1383],{"emptyLinePlaceholder":21},[1100,4890,4891,4893,4895,4897,4899,4901,4903,4905,4907,4909,4911,4913,4915],{"class":1102,"line":1419},[1100,4892,2626],{"class":1601},[1100,4894,2803],{"class":1314},[1100,4896,2636],{"class":1318},[1100,4898,2639],{"class":1304},[1100,4900,2454],{"class":1314},[1100,4902,1822],{"class":1318},[1100,4904,3466],{"class":1314},[1100,4906,1822],{"class":1318},[1100,4908,1801],{"class":1314},[1100,4910,1822],{"class":1318},[1100,4912,3475],{"class":1123},[1100,4914,1315],{"class":1324},[1100,4916,1319],{"class":1318},[1100,4918,4919,4921,4923,4925,4927,4929,4931,4933,4935,4937,4939,4941,4943,4946],{"class":1102,"line":1424},[1100,4920,3485],{"class":1324},[1100,4922,1328],{"class":1318},[1100,4924,1965],{"class":1324},[1100,4926,3780],{"class":1123},[1100,4928,1315],{"class":1324},[1100,4930,2730],{"class":1314},[1100,4932,1822],{"class":1318},[1100,4934,1801],{"class":1314},[1100,4936,1822],{"class":1318},[1100,4938,2031],{"class":1314},[1100,4940,1730],{"class":1318},[1100,4942,3216],{"class":1314},[1100,4944,4945],{"class":1324},"))",[1100,4947,1346],{"class":1318},[1100,4949,4950,4953,4955],{"class":1102,"line":1447},[1100,4951,4952],{"class":1324},"    with",[1100,4954,1328],{"class":1318},[1100,4956,1394],{"class":1318},[1100,4958,4959,4962,4964],{"class":1102,"line":1452},[1100,4960,4961],{"class":1324},"      messages",[1100,4963,1328],{"class":1318},[1100,4965,1394],{"class":1318},[1100,4967,4968,4971,4973,4976,4978,4980,4982,4984,4986,4988,4990,4993],{"class":1102,"line":1462},[1100,4969,4970],{"class":1123},"        orderBy",[1100,4972,1328],{"class":1318},[1100,4974,4975],{"class":1318}," ()",[1100,4977,1839],{"class":1601},[1100,4979,4746],{"class":1123},[1100,4981,1315],{"class":1324},[1100,4983,2730],{"class":1314},[1100,4985,1822],{"class":1318},[1100,4987,2010],{"class":1314},[1100,4989,1822],{"class":1318},[1100,4991,4992],{"class":1314},"createdAt",[1100,4994,1505],{"class":1324},[1100,4996,4997],{"class":1102,"line":1472},[1100,4998,4381],{"class":1318},[1100,5000,5001],{"class":1102,"line":1488},[1100,5002,1491],{"class":1318},[1100,5004,5005,5007],{"class":1102,"line":1494},[1100,5006,2427],{"class":1318},[1100,5008,1505],{"class":1324},[1100,5010,5011],{"class":1102,"line":1499},[1100,5012,1383],{"emptyLinePlaceholder":21},[1100,5014,5015,5017,5019,5021,5023,5025],{"class":1102,"line":2288},[1100,5016,3541],{"class":1304},[1100,5018,1965],{"class":1324},[1100,5020,3546],{"class":1318},[1100,5022,262],{"class":1314},[1100,5024,3551],{"class":1324},[1100,5026,1319],{"class":1318},[1100,5028,5029,5031,5033,5035,5037,5039,5041,5043,5045,5047,5049,5051,5053,5055,5057],{"class":1102,"line":2301},[1100,5030,3559],{"class":1304},[1100,5032,2912],{"class":1123},[1100,5034,1315],{"class":1324},[1100,5036,1879],{"class":1318},[1100,5038,3568],{"class":1324},[1100,5040,1328],{"class":1318},[1100,5042,3574],{"class":3573},[1100,5044,1730],{"class":1318},[1100,5046,3579],{"class":1324},[1100,5048,1328],{"class":1318},[1100,5050,1405],{"class":1318},[1100,5052,3586],{"class":1110},[1100,5054,1343],{"class":1318},[1100,5056,1746],{"class":1318},[1100,5058,1505],{"class":1324},[1100,5060,5061],{"class":1102,"line":2331},[1100,5062,3598],{"class":1318},[1100,5064,5065],{"class":1102,"line":2337},[1100,5066,1383],{"emptyLinePlaceholder":21},[1100,5068,5069,5071],{"class":1102,"line":2342},[1100,5070,2853],{"class":1304},[1100,5072,2856],{"class":1314},[1100,5074,5075,5077],{"class":1102,"line":2374},[1100,5076,1502],{"class":1318},[1100,5078,1505],{"class":1314},[993,5080,5082],{"id":5081},"wire-up-the-ui","Wire up the UI",[989,5084,5085,5086,5091,5092,5097],{},"Nuxt UI provides purpose-built components for AI chat interfaces: ",[1043,5087,5088],{"href":281},[1050,5089,5090],{},"UChatPrompt"," for the input area and ",[1043,5093,5094],{"href":271},[1050,5095,5096],{},"UChatMessages"," for displaying the conversation.",[1128,5099,5101],{"id":5100},"creating-the-home-page","Creating the home page",[989,5103,5104,5105,5109],{},"The home page is where users start a new conversation. The ",[1043,5106,5107],{"href":281},[1050,5108,5090],{}," component provides a textarea with auto-resize, keyboard shortcuts, and a submit button:",[1291,5111,5112],{},[1091,5113,5117],{"className":1563,"code":5114,"filename":5115,"highlights":5116,"language":34,"meta":1096,"style":1096},"\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",[3482,3526,3533,3538,3556,3595,3601,3606,3612],[1050,5118,5119,5142,5161,5179,5183,5197,5223,5227,5240,5244,5249,5275,5291,5300,5308,5322,5360,5364,5368,5374,5378,5383,5409,5414,5422,5426,5434,5455,5469,5490,5511,5516,5525,5529,5537,5552,5567,5582,5597,5612,5618,5641,5650,5659,5667,5675],{"__ignoreMap":1096},[1100,5120,5121,5123,5126,5129,5132,5134,5136,5138,5140],{"class":1102,"line":1103},[1100,5122,1573],{"class":1318},[1100,5124,5125],{"class":1324},"script",[1100,5127,5128],{"class":1601}," setup",[1100,5130,5131],{"class":1601}," lang",[1100,5133,1605],{"class":1318},[1100,5135,1532],{"class":1318},[1100,5137,1297],{"class":1110},[1100,5139,1532],{"class":1318},[1100,5141,1579],{"class":1318},[1100,5143,5144,5146,5149,5151,5154,5156,5159],{"class":1102,"line":1120},[1100,5145,3074],{"class":1601},[1100,5147,5148],{"class":1314}," input ",[1100,5150,1605],{"class":1318},[1100,5152,5153],{"class":1123}," ref",[1100,5155,1315],{"class":1314},[1100,5157,5158],{"class":1318},"''",[1100,5160,1505],{"class":1314},[1100,5162,5163,5165,5168,5170,5172,5174,5177],{"class":1102,"line":1334},[1100,5164,3074],{"class":1601},[1100,5166,5167],{"class":1314}," loading ",[1100,5169,1605],{"class":1318},[1100,5171,5153],{"class":1123},[1100,5173,1315],{"class":1314},[1100,5175,5176],{"class":1480},"false",[1100,5178,1505],{"class":1314},[1100,5180,5181],{"class":1102,"line":1349},[1100,5182,1383],{"emptyLinePlaceholder":21},[1100,5184,5185,5187,5190,5193,5195],{"class":1102,"line":1361},[1100,5186,2610],{"class":1601},[1100,5188,5189],{"class":1601}," function",[1100,5191,5192],{"class":1123}," createChat",[1100,5194,1819],{"class":1318},[1100,5196,1394],{"class":1318},[1100,5198,5199,5201,5203,5205,5208,5210,5212,5214,5217,5220],{"class":1102,"line":1372},[1100,5200,3541],{"class":1304},[1100,5202,1965],{"class":1324},[1100,5204,3546],{"class":1318},[1100,5206,5207],{"class":1314},"input",[1100,5209,1822],{"class":1318},[1100,5211,3335],{"class":1314},[1100,5213,1822],{"class":1318},[1100,5215,5216],{"class":1123},"trim",[1100,5218,5219],{"class":1324},"()) ",[1100,5221,5222],{"class":1304},"return\n",[1100,5224,5225],{"class":1102,"line":1380},[1100,5226,1383],{"emptyLinePlaceholder":21},[1100,5228,5229,5232,5234,5236,5238],{"class":1102,"line":1386},[1100,5230,5231],{"class":1314},"  loading",[1100,5233,1822],{"class":1318},[1100,5235,3335],{"class":1314},[1100,5237,2636],{"class":1318},[1100,5239,4367],{"class":1480},[1100,5241,5242],{"class":1102,"line":1397},[1100,5243,1383],{"emptyLinePlaceholder":21},[1100,5245,5246],{"class":1102,"line":1413},[1100,5247,5248],{"class":1484},"  \u002F\u002F Create a new chat on the server\n",[1100,5250,5251,5253,5255,5257,5259,5262,5264,5266,5269,5271,5273],{"class":1102,"line":1419},[1100,5252,2626],{"class":1601},[1100,5254,2803],{"class":1314},[1100,5256,2636],{"class":1318},[1100,5258,2639],{"class":1304},[1100,5260,5261],{"class":1123}," $fetch",[1100,5263,1315],{"class":1324},[1100,5265,1343],{"class":1318},[1100,5267,5268],{"class":1110},"\u002Fapi\u002Fchats",[1100,5270,1343],{"class":1318},[1100,5272,1730],{"class":1318},[1100,5274,1394],{"class":1318},[1100,5276,5277,5280,5282,5284,5287,5289],{"class":1102,"line":1424},[1100,5278,5279],{"class":1324},"    method",[1100,5281,1328],{"class":1318},[1100,5283,1405],{"class":1318},[1100,5285,5286],{"class":1110},"POST",[1100,5288,1343],{"class":1318},[1100,5290,1346],{"class":1318},[1100,5292,5293,5296,5298],{"class":1102,"line":1447},[1100,5294,5295],{"class":1324},"    body",[1100,5297,1328],{"class":1318},[1100,5299,1394],{"class":1318},[1100,5301,5302,5304,5306],{"class":1102,"line":1452},[1100,5303,3375],{"class":1324},[1100,5305,1328],{"class":1318},[1100,5307,1394],{"class":1318},[1100,5309,5310,5312,5314,5316,5318,5320],{"class":1102,"line":1462},[1100,5311,4509],{"class":1324},[1100,5313,1328],{"class":1318},[1100,5315,1405],{"class":1318},[1100,5317,2161],{"class":1110},[1100,5319,1343],{"class":1318},[1100,5321,1346],{"class":1318},[1100,5323,5324,5326,5328,5330,5332,5334,5336,5338,5341,5343,5345,5347,5349,5352,5354,5356,5358],{"class":1102,"line":1472},[1100,5325,4542],{"class":1324},[1100,5327,1328],{"class":1318},[1100,5329,1432],{"class":1324},[1100,5331,1879],{"class":1318},[1100,5333,2533],{"class":1324},[1100,5335,1328],{"class":1318},[1100,5337,1405],{"class":1318},[1100,5339,5340],{"class":1110},"text",[1100,5342,1343],{"class":1318},[1100,5344,1730],{"class":1318},[1100,5346,1733],{"class":1324},[1100,5348,1328],{"class":1318},[1100,5350,5351],{"class":1314}," input",[1100,5353,1822],{"class":1318},[1100,5355,3335],{"class":1314},[1100,5357,1746],{"class":1318},[1100,5359,3181],{"class":1324},[1100,5361,5362],{"class":1102,"line":1488},[1100,5363,4381],{"class":1318},[1100,5365,5366],{"class":1102,"line":1494},[1100,5367,1491],{"class":1318},[1100,5369,5370,5372],{"class":1102,"line":1499},[1100,5371,2427],{"class":1318},[1100,5373,1505],{"class":1324},[1100,5375,5376],{"class":1102,"line":2288},[1100,5377,1383],{"emptyLinePlaceholder":21},[1100,5379,5380],{"class":1102,"line":2301},[1100,5381,5382],{"class":1484},"  \u002F\u002F Navigate to the chat page\n",[1100,5384,5385,5388,5390,5392,5395,5398,5400,5402,5404,5407],{"class":1102,"line":2331},[1100,5386,5387],{"class":1123},"  navigateTo",[1100,5389,1315],{"class":1324},[1100,5391,3690],{"class":1318},[1100,5393,5394],{"class":1110},"\u002Fchat\u002F",[1100,5396,5397],{"class":1318},"${",[1100,5399,262],{"class":1314},[1100,5401,1822],{"class":1318},[1100,5403,2031],{"class":1314},[1100,5405,5406],{"class":1318},"}`",[1100,5408,1505],{"class":1324},[1100,5410,5411],{"class":1102,"line":2337},[1100,5412,5413],{"class":1318},"}\n",[1100,5415,5416,5418,5420],{"class":1102,"line":2342},[1100,5417,1649],{"class":1318},[1100,5419,5125],{"class":1324},[1100,5421,1579],{"class":1318},[1100,5423,5424],{"class":1102,"line":2374},[1100,5425,1383],{"emptyLinePlaceholder":21},[1100,5427,5428,5430,5432],{"class":1102,"line":2390},[1100,5429,1573],{"class":1318},[1100,5431,1576],{"class":1324},[1100,5433,1579],{"class":1318},[1100,5435,5436,5438,5441,5444,5446,5448,5451,5453],{"class":1102,"line":2408},[1100,5437,1586],{"class":1318},[1100,5439,5440],{"class":1324},"UDashboardPanel",[1100,5442,5443],{"class":1601}," :ui",[1100,5445,1605],{"class":1318},[1100,5447,1532],{"class":1318},[1100,5449,5450],{"class":1110},"{ body: 'p-0 sm:p-0' }",[1100,5452,1532],{"class":1318},[1100,5454,1579],{"class":1318},[1100,5456,5457,5459,5461,5464,5467],{"class":1102,"line":2424},[1100,5458,1595],{"class":1318},[1100,5460,1576],{"class":1324},[1100,5462,5463],{"class":1318}," #",[1100,5465,5466],{"class":1601},"body",[1100,5468,1579],{"class":1318},[1100,5470,5471,5473,5476,5479,5481,5483,5486,5488],{"class":1102,"line":2432},[1100,5472,1619],{"class":1318},[1100,5474,5475],{"class":1324},"UContainer",[1100,5477,5478],{"class":1601}," class",[1100,5480,1605],{"class":1318},[1100,5482,1532],{"class":1318},[1100,5484,5485],{"class":1110},"min-h-dvh flex flex-col justify-center gap-6 py-8",[1100,5487,1532],{"class":1318},[1100,5489,1579],{"class":1318},[1100,5491,5492,5495,5498,5500,5502,5504,5507,5509],{"class":1102,"line":3427},[1100,5493,5494],{"class":1318},"        \u003C",[1100,5496,5497],{"class":1324},"h1",[1100,5499,5478],{"class":1601},[1100,5501,1605],{"class":1318},[1100,5503,1532],{"class":1318},[1100,5505,5506],{"class":1110},"text-3xl sm:text-4xl text-highlighted font-bold",[1100,5508,1532],{"class":1318},[1100,5510,1579],{"class":1318},[1100,5512,5513],{"class":1102,"line":3440},[1100,5514,5515],{"class":1314},"          How can I help you today?\n",[1100,5517,5518,5521,5523],{"class":1102,"line":3445},[1100,5519,5520],{"class":1318},"        \u003C\u002F",[1100,5522,5497],{"class":1324},[1100,5524,1579],{"class":1318},[1100,5526,5527],{"class":1102,"line":3451},[1100,5528,1383],{"emptyLinePlaceholder":21},[1100,5530,5532,5534],{"class":5531,"line":3482},[1102,1583],[1100,5533,5494],{"class":1318},[1100,5535,5536],{"class":1324},"UChatPrompt\n",[1100,5538,5540,5543,5545,5547,5549],{"class":5539,"line":3526},[1102,1583],[1100,5541,5542],{"class":1601},"          v-model",[1100,5544,1605],{"class":1318},[1100,5546,1532],{"class":1318},[1100,5548,5207],{"class":1110},[1100,5550,5551],{"class":1318},"\"\n",[1100,5553,5555,5558,5560,5562,5565],{"class":5554,"line":3533},[1102,1583],[1100,5556,5557],{"class":1601},"          :status",[1100,5559,1605],{"class":1318},[1100,5561,1532],{"class":1318},[1100,5563,5564],{"class":1110},"loading ? 'streaming' : 'ready'",[1100,5566,5551],{"class":1318},[1100,5568,5570,5573,5575,5577,5580],{"class":5569,"line":3538},[1102,1583],[1100,5571,5572],{"class":1601},"          variant",[1100,5574,1605],{"class":1318},[1100,5576,1532],{"class":1318},[1100,5578,5579],{"class":1110},"subtle",[1100,5581,5551],{"class":1318},[1100,5583,5585,5588,5590,5592,5595],{"class":5584,"line":3556},[1102,1583],[1100,5586,5587],{"class":1601},"          placeholder",[1100,5589,1605],{"class":1318},[1100,5591,1532],{"class":1318},[1100,5593,5594],{"class":1110},"Ask me anything...",[1100,5596,5551],{"class":1318},[1100,5598,5600,5603,5605,5607,5610],{"class":5599,"line":3595},[1102,1583],[1100,5601,5602],{"class":1601},"          @submit",[1100,5604,1605],{"class":1318},[1100,5606,1532],{"class":1318},[1100,5608,5609],{"class":1110},"createChat",[1100,5611,5551],{"class":1318},[1100,5613,5615],{"class":5614,"line":3601},[1102,1583],[1100,5616,5617],{"class":1318},"        >\n",[1100,5619,5621,5624,5627,5630,5632,5634,5637,5639],{"class":5620,"line":3606},[1102,1583],[1100,5622,5623],{"class":1318},"          \u003C",[1100,5625,5626],{"class":1324},"UChatPromptSubmit",[1100,5628,5629],{"class":1601}," color",[1100,5631,1605],{"class":1318},[1100,5633,1532],{"class":1318},[1100,5635,5636],{"class":1110},"neutral",[1100,5638,1532],{"class":1318},[1100,5640,1625],{"class":1318},[1100,5642,5644,5646,5648],{"class":5643,"line":3612},[1102,1583],[1100,5645,5520],{"class":1318},[1100,5647,5090],{"class":1324},[1100,5649,1579],{"class":1318},[1100,5651,5652,5655,5657],{"class":1102,"line":3632},[1100,5653,5654],{"class":1318},"      \u003C\u002F",[1100,5656,5475],{"class":1324},[1100,5658,1579],{"class":1318},[1100,5660,5661,5663,5665],{"class":1102,"line":3660},[1100,5662,1630],{"class":1318},[1100,5664,1576],{"class":1324},[1100,5666,1579],{"class":1318},[1100,5668,5669,5671,5673],{"class":1102,"line":3676},[1100,5670,1640],{"class":1318},[1100,5672,5440],{"class":1324},[1100,5674,1579],{"class":1318},[1100,5676,5677,5679,5681],{"class":1102,"line":3695},[1100,5678,1649],{"class":1318},[1100,5680,1576],{"class":1324},[1100,5682,1579],{"class":1318},[989,5684,4639,5685,5689],{},[1043,5686,5687],{"href":281},[1050,5688,5090],{}," component automatically handles:",[1001,5691,5692,5699,5702,5712],{},[1004,5693,5694,5695],{},"Form submission when pressing ",[5696,5697],"kbd",{"value":5698},"enter",[1004,5700,5701],{},"Auto-resizing as you type",[1004,5703,5704,5705,5708,5709],{},"A loading state when ",[1050,5706,5707],{},"status"," is set to ",[1050,5710,5711],{},"streaming",[1004,5713,5714],{},"Focus management and keyboard shortcuts",[993,5716,5718],{"id":5717},"creating-the-chat-page","Creating the chat page",[989,5720,5721,5722,5728,5729,5736],{},"The chat page is where the actual conversation happens. It integrates the AI SDK's ",[1043,5723,5726],{"href":5724,"rel":5725},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fchat",[1047],[1050,5727,259],{}," class and ",[1043,5730,5733],{"href":5731,"rel":5732},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fdefault-chat-transport",[1047],[1050,5734,5735],{},"DefaultChatTransport"," for real-time streaming.",[1291,5738,5739],{},[1709,5740,5741],{},[1091,5742,5746],{"className":1563,"code":5743,"filename":5744,"highlights":5745,"language":34,"meta":1096,"style":1096},"\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",[1120,1334,1349,1499,2288,2301,2331,2337,2342,2374,2390,2408,2424,2432,3427,3440,3445,3451,3482,3526,3533,3538,3556],[1050,5747,5748,5768,5798,5819,5840,5844,5858,5872,5876,5881,5929,5933,5952,5994,5998,6002,6018,6022,6027,6045,6065,6084,6100,6127,6136,6151,6157,6184,6200,6205,6210,6225,6240,6256,6273,6287,6294,6299,6306,6310,6332,6344,6364,6392,6406,6410,6414,6418,6423,6436,6464,6475,6479,6485,6493,6497,6505,6523,6535,6554,6561,6575,6588,6593,6607,6611,6636,6714,6722,6736,6750,6764,6769,6777,6790,6804,6818,6823,6833,6837,6860,6866,6880,6892,6905,6917,6921,6951,6956,6965,6973,6982,6991,6999,7003,7009,7021,7035,7047,7060,7073,7077,7084,7097,7110,7124,7138,7143,7151,7159,7167,7175],{"__ignoreMap":1096},[1100,5749,5750,5752,5754,5756,5758,5760,5762,5764,5766],{"class":1102,"line":1103},[1100,5751,1573],{"class":1318},[1100,5753,5125],{"class":1324},[1100,5755,5128],{"class":1601},[1100,5757,5131],{"class":1601},[1100,5759,1605],{"class":1318},[1100,5761,1532],{"class":1318},[1100,5763,1297],{"class":1110},[1100,5765,1532],{"class":1318},[1100,5767,1579],{"class":1318},[1100,5769,5771,5773,5775,5778,5780,5783,5785,5788,5790,5792,5794,5796],{"class":5770,"line":1120},[1102,1583],[1100,5772,1721],{"class":1304},[1100,5774,1724],{"class":1318},[1100,5776,5777],{"class":1314}," DefaultChatTransport",[1100,5779,1730],{"class":1318},[1100,5781,5782],{"class":1314}," isReasoningUIPart",[1100,5784,1730],{"class":1318},[1100,5786,5787],{"class":1314}," isTextUIPart",[1100,5789,1746],{"class":1318},[1100,5791,1749],{"class":1304},[1100,5793,1405],{"class":1318},[1100,5795,2547],{"class":1110},[1100,5797,1369],{"class":1318},[1100,5799,5801,5803,5805,5808,5810,5812,5814,5817],{"class":5800,"line":1334},[1102,1583],[1100,5802,1721],{"class":1304},[1100,5804,1724],{"class":1318},[1100,5806,5807],{"class":1314}," Chat",[1100,5809,1746],{"class":1318},[1100,5811,1749],{"class":1304},[1100,5813,1405],{"class":1318},[1100,5815,5816],{"class":1110},"@ai-sdk\u002Fvue",[1100,5818,1369],{"class":1318},[1100,5820,5822,5824,5826,5829,5831,5833,5835,5838],{"class":5821,"line":1349},[1102,1583],[1100,5823,1721],{"class":1304},[1100,5825,1724],{"class":1318},[1100,5827,5828],{"class":1314}," isPartStreaming",[1100,5830,1746],{"class":1318},[1100,5832,1749],{"class":1304},[1100,5834,1405],{"class":1318},[1100,5836,5837],{"class":1110},"@nuxt\u002Fui\u002Futils\u002Fai",[1100,5839,1369],{"class":1318},[1100,5841,5842],{"class":1102,"line":1361},[1100,5843,1383],{"emptyLinePlaceholder":21},[1100,5845,5846,5848,5851,5853,5856],{"class":1102,"line":1372},[1100,5847,3074],{"class":1601},[1100,5849,5850],{"class":1314}," route ",[1100,5852,1605],{"class":1318},[1100,5854,5855],{"class":1123}," useRoute",[1100,5857,2682],{"class":1314},[1100,5859,5860,5862,5865,5867,5870],{"class":1102,"line":1380},[1100,5861,3074],{"class":1601},[1100,5863,5864],{"class":1314}," toast ",[1100,5866,1605],{"class":1318},[1100,5868,5869],{"class":1123}," useToast",[1100,5871,2682],{"class":1314},[1100,5873,5874],{"class":1102,"line":1386},[1100,5875,1383],{"emptyLinePlaceholder":21},[1100,5877,5878],{"class":1102,"line":1397},[1100,5879,5880],{"class":1484},"\u002F\u002F Fetch existing chat data\n",[1100,5882,5883,5885,5887,5890,5892,5895,5897,5899,5901,5904,5906,5908,5911,5913,5916,5918,5921,5923,5925,5927],{"class":1102,"line":1413},[1100,5884,3074],{"class":1601},[1100,5886,1724],{"class":1318},[1100,5888,5889],{"class":1324}," data",[1100,5891,1328],{"class":1318},[1100,5893,5894],{"class":1314}," chatData ",[1100,5896,1502],{"class":1318},[1100,5898,2636],{"class":1318},[1100,5900,2639],{"class":1304},[1100,5902,5903],{"class":1123}," useFetch",[1100,5905,1315],{"class":1314},[1100,5907,3690],{"class":1318},[1100,5909,5910],{"class":1110},"\u002Fapi\u002Fchats\u002F",[1100,5912,5397],{"class":1318},[1100,5914,5915],{"class":1314},"route",[1100,5917,1822],{"class":1318},[1100,5919,5920],{"class":1314},"params",[1100,5922,1822],{"class":1318},[1100,5924,2031],{"class":1314},[1100,5926,5406],{"class":1318},[1100,5928,1505],{"class":1314},[1100,5930,5931],{"class":1102,"line":1419},[1100,5932,1383],{"emptyLinePlaceholder":21},[1100,5934,5935,5938,5940,5942,5945,5947,5950],{"class":1102,"line":1424},[1100,5936,5937],{"class":1304},"if",[1100,5939,1965],{"class":1314},[1100,5941,3546],{"class":1318},[1100,5943,5944],{"class":1314},"chatData",[1100,5946,1822],{"class":1318},[1100,5948,5949],{"class":1314},"value) ",[1100,5951,1319],{"class":1318},[1100,5953,5954,5957,5959,5961,5963,5965,5967,5969,5971,5973,5975,5977,5979,5981,5983,5986,5988,5990,5992],{"class":1102,"line":1447},[1100,5955,5956],{"class":1304},"  throw",[1100,5958,2912],{"class":1123},[1100,5960,1315],{"class":1324},[1100,5962,1879],{"class":1318},[1100,5964,3568],{"class":1324},[1100,5966,1328],{"class":1318},[1100,5968,3574],{"class":3573},[1100,5970,1730],{"class":1318},[1100,5972,3579],{"class":1324},[1100,5974,1328],{"class":1318},[1100,5976,1405],{"class":1318},[1100,5978,3586],{"class":1110},[1100,5980,1343],{"class":1318},[1100,5982,1730],{"class":1318},[1100,5984,5985],{"class":1324}," fatal",[1100,5987,1328],{"class":1318},[1100,5989,4182],{"class":1480},[1100,5991,1746],{"class":1318},[1100,5993,1505],{"class":1324},[1100,5995,5996],{"class":1102,"line":1452},[1100,5997,5413],{"class":1318},[1100,5999,6000],{"class":1102,"line":1462},[1100,6001,1383],{"emptyLinePlaceholder":21},[1100,6003,6004,6006,6008,6010,6012,6014,6016],{"class":1102,"line":1472},[1100,6005,3074],{"class":1601},[1100,6007,5148],{"class":1314},[1100,6009,1605],{"class":1318},[1100,6011,5153],{"class":1123},[1100,6013,1315],{"class":1314},[1100,6015,5158],{"class":1318},[1100,6017,1505],{"class":1314},[1100,6019,6020],{"class":1102,"line":1488},[1100,6021,1383],{"emptyLinePlaceholder":21},[1100,6023,6024],{"class":1102,"line":1494},[1100,6025,6026],{"class":1484},"\u002F\u002F Initialize the Chat class from AI SDK\n",[1100,6028,6030,6032,6035,6037,6039,6041,6043],{"class":6029,"line":1499},[1102,1583],[1100,6031,3074],{"class":1601},[1100,6033,6034],{"class":1314}," chat ",[1100,6036,1605],{"class":1318},[1100,6038,1916],{"class":1318},[1100,6040,5807],{"class":1123},[1100,6042,1315],{"class":1314},[1100,6044,1319],{"class":1318},[1100,6046,6048,6050,6052,6055,6057,6059,6061,6063],{"class":6047,"line":2288},[1102,1583],[1100,6049,1812],{"class":1324},[1100,6051,1328],{"class":1318},[1100,6053,6054],{"class":1314}," chatData",[1100,6056,1822],{"class":1318},[1100,6058,3335],{"class":1314},[1100,6060,1822],{"class":1318},[1100,6062,2031],{"class":1314},[1100,6064,1346],{"class":1318},[1100,6066,6068,6070,6072,6074,6076,6078,6080,6082],{"class":6067,"line":2301},[1102,1583],[1100,6069,1972],{"class":1324},[1100,6071,1328],{"class":1318},[1100,6073,6054],{"class":1314},[1100,6075,1822],{"class":1318},[1100,6077,3335],{"class":1314},[1100,6079,1822],{"class":1318},[1100,6081,2010],{"class":1314},[1100,6083,1346],{"class":1318},[1100,6085,6087,6090,6092,6094,6096,6098],{"class":6086,"line":2331},[1102,1583],[1100,6088,6089],{"class":1324},"  transport",[1100,6091,1328],{"class":1318},[1100,6093,1916],{"class":1318},[1100,6095,5777],{"class":1123},[1100,6097,1315],{"class":1314},[1100,6099,1319],{"class":1318},[1100,6101,6103,6106,6108,6110,6112,6114,6116,6118,6120,6122,6124],{"class":6102,"line":2337},[1102,1583],[1100,6104,6105],{"class":1324},"    api",[1100,6107,1328],{"class":1318},[1100,6109,3684],{"class":1318},[1100,6111,5910],{"class":1110},[1100,6113,5397],{"class":1318},[1100,6115,5944],{"class":1314},[1100,6117,1822],{"class":1318},[1100,6119,3335],{"class":1314},[1100,6121,1822],{"class":1318},[1100,6123,2031],{"class":1314},[1100,6125,6126],{"class":1318},"}`\n",[1100,6128,6130,6132,6134],{"class":6129,"line":2342},[1102,1583],[1100,6131,2427],{"class":1318},[1100,6133,1896],{"class":1314},[1100,6135,1346],{"class":1318},[1100,6137,6139,6142,6144,6147,6149],{"class":6138,"line":2374},[1102,1583],[1100,6140,6141],{"class":1324},"  onData",[1100,6143,1315],{"class":1318},[1100,6145,6146],{"class":1956},"dataPart",[1100,6148,1896],{"class":1318},[1100,6150,1394],{"class":1318},[1100,6152,6154],{"class":6153,"line":2390},[1102,1583],[1100,6155,6156],{"class":1484},"    \u002F\u002F Refresh the chat list when a title is generated\n",[1100,6158,6160,6163,6165,6167,6169,6172,6174,6176,6178,6180,6182],{"class":6159,"line":2408},[1102,1583],[1100,6161,6162],{"class":1304},"    if",[1100,6164,1965],{"class":1324},[1100,6166,6146],{"class":1314},[1100,6168,1822],{"class":1318},[1100,6170,6171],{"class":1314},"type",[1100,6173,3362],{"class":1318},[1100,6175,1405],{"class":1318},[1100,6177,4329],{"class":1110},[1100,6179,1343],{"class":1318},[1100,6181,3551],{"class":1324},[1100,6183,1319],{"class":1318},[1100,6185,6187,6190,6192,6194,6196,6198],{"class":6186,"line":2424},[1102,1583],[1100,6188,6189],{"class":1123},"      refreshNuxtData",[1100,6191,1315],{"class":1324},[1100,6193,1343],{"class":1318},[1100,6195,1801],{"class":1110},[1100,6197,1343],{"class":1318},[1100,6199,1505],{"class":1324},[1100,6201,6203],{"class":6202,"line":2432},[1102,1583],[1100,6204,1491],{"class":1318},[1100,6206,6208],{"class":6207,"line":3427},[1102,1583],[1100,6209,1416],{"class":1318},[1100,6211,6213,6216,6218,6221,6223],{"class":6212,"line":3440},[1102,1583],[1100,6214,6215],{"class":1324},"  onError",[1100,6217,1315],{"class":1318},[1100,6219,6220],{"class":1956},"error",[1100,6222,1896],{"class":1318},[1100,6224,1394],{"class":1318},[1100,6226,6228,6231,6233,6236,6238],{"class":6227,"line":3445},[1102,1583],[1100,6229,6230],{"class":1314},"    toast",[1100,6232,1822],{"class":1318},[1100,6234,6235],{"class":1123},"add",[1100,6237,1315],{"class":1324},[1100,6239,1319],{"class":1318},[1100,6241,6243,6246,6248,6250,6252,6254],{"class":6242,"line":3451},[1102,1583],[1100,6244,6245],{"class":1324},"      title",[1100,6247,1328],{"class":1318},[1100,6249,1405],{"class":1318},[1100,6251,497],{"class":1110},[1100,6253,1343],{"class":1318},[1100,6255,1346],{"class":1318},[1100,6257,6259,6262,6264,6267,6269,6271],{"class":6258,"line":3482},[1102,1583],[1100,6260,6261],{"class":1324},"      description",[1100,6263,1328],{"class":1318},[1100,6265,6266],{"class":1314}," error",[1100,6268,1822],{"class":1318},[1100,6270,4481],{"class":1314},[1100,6272,1346],{"class":1318},[1100,6274,6276,6279,6281,6283,6285],{"class":6275,"line":3526},[1102,1583],[1100,6277,6278],{"class":1324},"      color",[1100,6280,1328],{"class":1318},[1100,6282,1405],{"class":1318},[1100,6284,6220],{"class":1110},[1100,6286,1369],{"class":1318},[1100,6288,6290,6292],{"class":6289,"line":3533},[1102,1583],[1100,6291,3389],{"class":1318},[1100,6293,1505],{"class":1324},[1100,6295,6297],{"class":6296,"line":3538},[1102,1583],[1100,6298,3598],{"class":1318},[1100,6300,6302,6304],{"class":6301,"line":3556},[1102,1583],[1100,6303,1502],{"class":1318},[1100,6305,1505],{"class":1314},[1100,6307,6308],{"class":1102,"line":3595},[1100,6309,1383],{"emptyLinePlaceholder":21},[1100,6311,6312,6315,6318,6320,6323,6325,6328,6330],{"class":1102,"line":3601},[1100,6313,6314],{"class":1601},"function",[1100,6316,6317],{"class":1123}," handleSubmit",[1100,6319,1315],{"class":1318},[1100,6321,6322],{"class":1956},"e",[1100,6324,1328],{"class":1318},[1100,6326,6327],{"class":1106}," Event",[1100,6329,1896],{"class":1318},[1100,6331,1394],{"class":1318},[1100,6333,6334,6337,6339,6342],{"class":1102,"line":3606},[1100,6335,6336],{"class":1314},"  e",[1100,6338,1822],{"class":1318},[1100,6340,6341],{"class":1123},"preventDefault",[1100,6343,2682],{"class":1324},[1100,6345,6346,6348,6350,6352,6354,6356,6358,6360,6362],{"class":1102,"line":3612},[1100,6347,3541],{"class":1304},[1100,6349,1965],{"class":1324},[1100,6351,5207],{"class":1314},[1100,6353,1822],{"class":1318},[1100,6355,3335],{"class":1314},[1100,6357,1822],{"class":1318},[1100,6359,5216],{"class":1123},[1100,6361,5219],{"class":1324},[1100,6363,1319],{"class":1318},[1100,6365,6366,6369,6371,6374,6376,6378,6380,6382,6384,6386,6388,6390],{"class":1102,"line":3632},[1100,6367,6368],{"class":1314},"    chat",[1100,6370,1822],{"class":1318},[1100,6372,6373],{"class":1123},"sendMessage",[1100,6375,1315],{"class":1324},[1100,6377,1879],{"class":1318},[1100,6379,1733],{"class":1324},[1100,6381,1328],{"class":1318},[1100,6383,5351],{"class":1314},[1100,6385,1822],{"class":1318},[1100,6387,3335],{"class":1314},[1100,6389,1746],{"class":1318},[1100,6391,1505],{"class":1324},[1100,6393,6394,6397,6399,6401,6403],{"class":1102,"line":3660},[1100,6395,6396],{"class":1314},"    input",[1100,6398,1822],{"class":1318},[1100,6400,3335],{"class":1314},[1100,6402,2636],{"class":1318},[1100,6404,6405],{"class":1318}," ''\n",[1100,6407,6408],{"class":1102,"line":3676},[1100,6409,3598],{"class":1318},[1100,6411,6412],{"class":1102,"line":3695},[1100,6413,5413],{"class":1318},[1100,6415,6416],{"class":1102,"line":3723},[1100,6417,1383],{"emptyLinePlaceholder":21},[1100,6419,6420],{"class":1102,"line":3730},[1100,6421,6422],{"class":1484},"\u002F\u002F Auto-generate response for first message\n",[1100,6424,6425,6428,6430,6432,6434],{"class":1102,"line":3735},[1100,6426,6427],{"class":1123},"onMounted",[1100,6429,1315],{"class":1314},[1100,6431,1819],{"class":1318},[1100,6433,1839],{"class":1601},[1100,6435,1394],{"class":1318},[1100,6437,6438,6440,6442,6444,6446,6448,6450,6452,6454,6456,6458,6460,6462],{"class":1102,"line":3801},[1100,6439,3541],{"class":1304},[1100,6441,1965],{"class":1324},[1100,6443,5944],{"class":1314},[1100,6445,1822],{"class":1318},[1100,6447,3335],{"class":1314},[1100,6449,3856],{"class":1318},[1100,6451,2010],{"class":1314},[1100,6453,1822],{"class":1318},[1100,6455,3835],{"class":1314},[1100,6457,3362],{"class":1318},[1100,6459,3841],{"class":3573},[1100,6461,3551],{"class":1324},[1100,6463,1319],{"class":1318},[1100,6465,6466,6468,6470,6473],{"class":1102,"line":3806},[1100,6467,6368],{"class":1314},[1100,6469,1822],{"class":1318},[1100,6471,6472],{"class":1123},"regenerate",[1100,6474,2682],{"class":1324},[1100,6476,6477],{"class":1102,"line":3811},[1100,6478,3598],{"class":1318},[1100,6480,6481,6483],{"class":1102,"line":3817},[1100,6482,1502],{"class":1318},[1100,6484,1505],{"class":1314},[1100,6486,6487,6489,6491],{"class":1102,"line":3846},[1100,6488,1649],{"class":1318},[1100,6490,5125],{"class":1324},[1100,6492,1579],{"class":1318},[1100,6494,6495],{"class":1102,"line":3887},[1100,6496,1383],{"emptyLinePlaceholder":21},[1100,6498,6499,6501,6503],{"class":1102,"line":3916},[1100,6500,1573],{"class":1318},[1100,6502,1576],{"class":1324},[1100,6504,1579],{"class":1318},[1100,6506,6507,6509,6511,6513,6515,6517,6519,6521],{"class":1102,"line":3928},[1100,6508,1586],{"class":1318},[1100,6510,5440],{"class":1324},[1100,6512,5443],{"class":1601},[1100,6514,1605],{"class":1318},[1100,6516,1532],{"class":1318},[1100,6518,5450],{"class":1110},[1100,6520,1532],{"class":1318},[1100,6522,1579],{"class":1318},[1100,6524,6525,6527,6529,6531,6533],{"class":1102,"line":3944},[1100,6526,1595],{"class":1318},[1100,6528,1576],{"class":1324},[1100,6530,5463],{"class":1318},[1100,6532,5466],{"class":1601},[1100,6534,1579],{"class":1318},[1100,6536,6537,6539,6541,6543,6545,6547,6550,6552],{"class":1102,"line":3958},[1100,6538,1619],{"class":1318},[1100,6540,5475],{"class":1324},[1100,6542,5478],{"class":1601},[1100,6544,1605],{"class":1318},[1100,6546,1532],{"class":1318},[1100,6548,6549],{"class":1110},"min-h-dvh flex flex-col py-4 sm:py-6",[1100,6551,1532],{"class":1318},[1100,6553,1579],{"class":1318},[1100,6555,6556,6558],{"class":1102,"line":3965},[1100,6557,5494],{"class":1318},[1100,6559,6560],{"class":1324},"UChatMessages\n",[1100,6562,6563,6566,6568,6570,6573],{"class":1102,"line":3970},[1100,6564,6565],{"class":1601},"          :messages",[1100,6567,1605],{"class":1318},[1100,6569,1532],{"class":1318},[1100,6571,6572],{"class":1110},"chat.messages",[1100,6574,5551],{"class":1318},[1100,6576,6577,6579,6581,6583,6586],{"class":1102,"line":3975},[1100,6578,5557],{"class":1601},[1100,6580,1605],{"class":1318},[1100,6582,1532],{"class":1318},[1100,6584,6585],{"class":1110},"chat.status",[1100,6587,5551],{"class":1318},[1100,6589,6590],{"class":1102,"line":3981},[1100,6591,6592],{"class":1601},"          should-auto-scroll\n",[1100,6594,6595,6598,6600,6602,6605],{"class":1102,"line":3998},[1100,6596,6597],{"class":1601},"          class",[1100,6599,1605],{"class":1318},[1100,6601,1532],{"class":1318},[1100,6603,6604],{"class":1110},"flex-1",[1100,6606,5551],{"class":1318},[1100,6608,6609],{"class":1102,"line":4020},[1100,6610,5617],{"class":1318},[1100,6612,6613,6615,6617,6619,6621,6623,6625,6627,6630,6632,6634],{"class":1102,"line":4038},[1100,6614,5623],{"class":1318},[1100,6616,1576],{"class":1324},[1100,6618,5463],{"class":1318},[1100,6620,371],{"class":1601},[1100,6622,1605],{"class":1318},[1100,6624,1532],{"class":1318},[1100,6626,1879],{"class":1318},[1100,6628,6629],{"class":1314}," message ",[1100,6631,1502],{"class":1318},[1100,6633,1532],{"class":1318},[1100,6635,1579],{"class":1318},[1100,6637,6638,6641,6643,6646,6648,6650,6653,6655,6658,6661,6663,6665,6667,6669,6672,6675,6677,6680,6682,6684,6686,6688,6691,6693,6696,6698,6700,6702,6704,6706,6709,6712],{"class":1102,"line":4046},[1100,6639,6640],{"class":1318},"            \u003C",[1100,6642,1576],{"class":1324},[1100,6644,6645],{"class":1304}," v-for",[1100,6647,1605],{"class":1318},[1100,6649,1532],{"class":1318},[1100,6651,6652],{"class":1314},"(part",[1100,6654,1730],{"class":1318},[1100,6656,6657],{"class":1314}," index) ",[1100,6659,6660],{"class":1318},"in",[1100,6662,2631],{"class":1314},[1100,6664,1822],{"class":1318},[1100,6666,2212],{"class":1314},[1100,6668,1532],{"class":1318},[1100,6670,6671],{"class":1318}," :",[1100,6673,6674],{"class":1601},"key",[1100,6676,1605],{"class":1318},[1100,6678,6679],{"class":1318},"\"`${",[1100,6681,4481],{"class":1314},[1100,6683,1822],{"class":1318},[1100,6685,2031],{"class":1314},[1100,6687,1502],{"class":1318},[1100,6689,6690],{"class":1110},"-",[1100,6692,5397],{"class":1318},[1100,6694,6695],{"class":1314},"part",[1100,6697,1822],{"class":1318},[1100,6699,6171],{"class":1314},[1100,6701,1502],{"class":1318},[1100,6703,6690],{"class":1110},[1100,6705,5397],{"class":1318},[1100,6707,6708],{"class":1314},"index",[1100,6710,6711],{"class":1318},"}`\"",[1100,6713,1579],{"class":1318},[1100,6715,6716,6719],{"class":1102,"line":4063},[1100,6717,6718],{"class":1318},"              \u003C",[1100,6720,6721],{"class":1324},"UChatReasoning\n",[1100,6723,6724,6727,6729,6731,6734],{"class":1102,"line":4084},[1100,6725,6726],{"class":1601},"                v-if",[1100,6728,1605],{"class":1318},[1100,6730,1532],{"class":1318},[1100,6732,6733],{"class":1110},"isReasoningUIPart(part)",[1100,6735,5551],{"class":1318},[1100,6737,6738,6741,6743,6745,6748],{"class":1102,"line":4094},[1100,6739,6740],{"class":1601},"                :text",[1100,6742,1605],{"class":1318},[1100,6744,1532],{"class":1318},[1100,6746,6747],{"class":1110},"part.text",[1100,6749,5551],{"class":1318},[1100,6751,6752,6755,6757,6759,6762],{"class":1102,"line":4104},[1100,6753,6754],{"class":1601},"                :streaming",[1100,6756,1605],{"class":1318},[1100,6758,1532],{"class":1318},[1100,6760,6761],{"class":1110},"isPartStreaming(part)",[1100,6763,5551],{"class":1318},[1100,6765,6766],{"class":1102,"line":4114},[1100,6767,6768],{"class":1318},"              >\n",[1100,6770,6771,6774],{"class":1102,"line":4131},[1100,6772,6773],{"class":1318},"                \u003C",[1100,6775,6776],{"class":1324},"MDC\n",[1100,6778,6779,6782,6784,6786,6788],{"class":1102,"line":4142},[1100,6780,6781],{"class":1601},"                  :value",[1100,6783,1605],{"class":1318},[1100,6785,1532],{"class":1318},[1100,6787,6747],{"class":1110},[1100,6789,5551],{"class":1318},[1100,6791,6792,6795,6797,6799,6802],{"class":1102,"line":4148},[1100,6793,6794],{"class":1601},"                  :cache-key",[1100,6796,1605],{"class":1318},[1100,6798,1532],{"class":1318},[1100,6800,6801],{"class":1110},"`reasoning-${message.id}-${index}`",[1100,6803,5551],{"class":1318},[1100,6805,6806,6809,6811,6813,6816],{"class":1102,"line":4154},[1100,6807,6808],{"class":1601},"                  class",[1100,6810,1605],{"class":1318},[1100,6812,1532],{"class":1318},[1100,6814,6815],{"class":1110},"*:first:mt-0 *:last:mb-0",[1100,6817,5551],{"class":1318},[1100,6819,6820],{"class":1102,"line":4164},[1100,6821,6822],{"class":1318},"                \u002F>\n",[1100,6824,6825,6828,6831],{"class":1102,"line":4174},[1100,6826,6827],{"class":1318},"              \u003C\u002F",[1100,6829,6830],{"class":1324},"UChatReasoning",[1100,6832,1579],{"class":1318},[1100,6834,6835],{"class":1102,"line":4187},[1100,6836,1383],{"emptyLinePlaceholder":21},[1100,6838,6839,6841,6843,6846,6848,6850,6853,6856,6858],{"class":1102,"line":4202},[1100,6840,6718],{"class":1318},[1100,6842,1576],{"class":1324},[1100,6844,6845],{"class":1304}," v-else-if",[1100,6847,1605],{"class":1318},[1100,6849,1532],{"class":1318},[1100,6851,6852],{"class":1123},"isTextUIPart",[1100,6854,6855],{"class":1314},"(part)",[1100,6857,1532],{"class":1318},[1100,6859,1579],{"class":1318},[1100,6861,6862,6864],{"class":1102,"line":4207},[1100,6863,6773],{"class":1318},[1100,6865,6776],{"class":1324},[1100,6867,6868,6871,6873,6875,6878],{"class":1102,"line":4212},[1100,6869,6870],{"class":1601},"                  v-if",[1100,6872,1605],{"class":1318},[1100,6874,1532],{"class":1318},[1100,6876,6877],{"class":1110},"message.role === 'assistant'",[1100,6879,5551],{"class":1318},[1100,6881,6882,6884,6886,6888,6890],{"class":1102,"line":4222},[1100,6883,6781],{"class":1601},[1100,6885,1605],{"class":1318},[1100,6887,1532],{"class":1318},[1100,6889,6747],{"class":1110},[1100,6891,5551],{"class":1318},[1100,6893,6894,6896,6898,6900,6903],{"class":1102,"line":4238},[1100,6895,6794],{"class":1601},[1100,6897,1605],{"class":1318},[1100,6899,1532],{"class":1318},[1100,6901,6902],{"class":1110},"`${message.id}-${index}`",[1100,6904,5551],{"class":1318},[1100,6906,6907,6909,6911,6913,6915],{"class":1102,"line":4253},[1100,6908,6808],{"class":1601},[1100,6910,1605],{"class":1318},[1100,6912,1532],{"class":1318},[1100,6914,6815],{"class":1110},[1100,6916,5551],{"class":1318},[1100,6918,6919],{"class":1102,"line":4259},[1100,6920,6822],{"class":1318},[1100,6922,6923,6925,6927,6929,6931,6933,6936,6938,6940,6942,6944,6947,6949],{"class":1102,"line":4265},[1100,6924,6773],{"class":1318},[1100,6926,989],{"class":1324},[1100,6928,6845],{"class":1601},[1100,6930,1605],{"class":1318},[1100,6932,1532],{"class":1318},[1100,6934,6935],{"class":1110},"message.role === 'user'",[1100,6937,1532],{"class":1318},[1100,6939,5478],{"class":1601},[1100,6941,1605],{"class":1318},[1100,6943,1532],{"class":1318},[1100,6945,6946],{"class":1110},"whitespace-pre-wrap",[1100,6948,1532],{"class":1318},[1100,6950,1579],{"class":1318},[1100,6952,6953],{"class":1102,"line":4273},[1100,6954,6955],{"class":1314},"                  {{ part.text }}\n",[1100,6957,6958,6961,6963],{"class":1102,"line":4278},[1100,6959,6960],{"class":1318},"                \u003C\u002F",[1100,6962,989],{"class":1324},[1100,6964,1579],{"class":1318},[1100,6966,6967,6969,6971],{"class":1102,"line":4284},[1100,6968,6827],{"class":1318},[1100,6970,1576],{"class":1324},[1100,6972,1579],{"class":1318},[1100,6974,6975,6978,6980],{"class":1102,"line":4304},[1100,6976,6977],{"class":1318},"            \u003C\u002F",[1100,6979,1576],{"class":1324},[1100,6981,1579],{"class":1318},[1100,6983,6984,6987,6989],{"class":1102,"line":4319},[1100,6985,6986],{"class":1318},"          \u003C\u002F",[1100,6988,1576],{"class":1324},[1100,6990,1579],{"class":1318},[1100,6992,6993,6995,6997],{"class":1102,"line":4336},[1100,6994,5520],{"class":1318},[1100,6996,5096],{"class":1324},[1100,6998,1579],{"class":1318},[1100,7000,7001],{"class":1102,"line":4359},[1100,7002,1383],{"emptyLinePlaceholder":21},[1100,7004,7005,7007],{"class":1102,"line":4370},[1100,7006,5494],{"class":1318},[1100,7008,5536],{"class":1324},[1100,7010,7011,7013,7015,7017,7019],{"class":1102,"line":4378},[1100,7012,5542],{"class":1601},[1100,7014,1605],{"class":1318},[1100,7016,1532],{"class":1318},[1100,7018,5207],{"class":1110},[1100,7020,5551],{"class":1318},[1100,7022,7023,7026,7028,7030,7033],{"class":1102,"line":4384},[1100,7024,7025],{"class":1601},"          :error",[1100,7027,1605],{"class":1318},[1100,7029,1532],{"class":1318},[1100,7031,7032],{"class":1110},"chat.error",[1100,7034,5551],{"class":1318},[1100,7036,7037,7039,7041,7043,7045],{"class":1102,"line":4389},[1100,7038,5572],{"class":1601},[1100,7040,1605],{"class":1318},[1100,7042,1532],{"class":1318},[1100,7044,5579],{"class":1110},[1100,7046,5551],{"class":1318},[1100,7048,7049,7051,7053,7055,7058],{"class":1102,"line":4412},[1100,7050,6597],{"class":1601},[1100,7052,1605],{"class":1318},[1100,7054,1532],{"class":1318},[1100,7056,7057],{"class":1110},"sticky bottom-0",[1100,7059,5551],{"class":1318},[1100,7061,7062,7064,7066,7068,7071],{"class":1102,"line":4418},[1100,7063,5602],{"class":1601},[1100,7065,1605],{"class":1318},[1100,7067,1532],{"class":1318},[1100,7069,7070],{"class":1110},"handleSubmit",[1100,7072,5551],{"class":1318},[1100,7074,7075],{"class":1102,"line":4438},[1100,7076,5617],{"class":1318},[1100,7078,7079,7081],{"class":1102,"line":4444},[1100,7080,5623],{"class":1318},[1100,7082,7083],{"class":1324},"UChatPromptSubmit\n",[1100,7085,7086,7089,7091,7093,7095],{"class":1102,"line":4490},[1100,7087,7088],{"class":1601},"            :status",[1100,7090,1605],{"class":1318},[1100,7092,1532],{"class":1318},[1100,7094,6585],{"class":1110},[1100,7096,5551],{"class":1318},[1100,7098,7099,7102,7104,7106,7108],{"class":1102,"line":4506},[1100,7100,7101],{"class":1601},"            color",[1100,7103,1605],{"class":1318},[1100,7105,1532],{"class":1318},[1100,7107,5636],{"class":1110},[1100,7109,5551],{"class":1318},[1100,7111,7112,7115,7117,7119,7122],{"class":1102,"line":4539},[1100,7113,7114],{"class":1601},"            @stop",[1100,7116,1605],{"class":1318},[1100,7118,1532],{"class":1318},[1100,7120,7121],{"class":1110},"chat.stop()",[1100,7123,5551],{"class":1318},[1100,7125,7126,7129,7131,7133,7136],{"class":1102,"line":4553},[1100,7127,7128],{"class":1601},"            @reload",[1100,7130,1605],{"class":1318},[1100,7132,1532],{"class":1318},[1100,7134,7135],{"class":1110},"chat.regenerate()",[1100,7137,5551],{"class":1318},[1100,7139,7140],{"class":1102,"line":4561},[1100,7141,7142],{"class":1318},"          \u002F>\n",[1100,7144,7145,7147,7149],{"class":1102,"line":4566},[1100,7146,5520],{"class":1318},[1100,7148,5090],{"class":1324},[1100,7150,1579],{"class":1318},[1100,7152,7153,7155,7157],{"class":1102,"line":4573},[1100,7154,5654],{"class":1318},[1100,7156,5475],{"class":1324},[1100,7158,1579],{"class":1318},[1100,7160,7161,7163,7165],{"class":1102,"line":4578},[1100,7162,1630],{"class":1318},[1100,7164,1576],{"class":1324},[1100,7166,1579],{"class":1318},[1100,7168,7169,7171,7173],{"class":1102,"line":4596},[1100,7170,1640],{"class":1318},[1100,7172,5440],{"class":1324},[1100,7174,1579],{"class":1318},[1100,7176,7178,7180,7182],{"class":1102,"line":7177},112,[1100,7179,1649],{"class":1318},[1100,7181,1576],{"class":1324},[1100,7183,1579],{"class":1318},[989,7185,7186],{},"Here's a breakdown of the key parts:",[989,7188,7189],{},[1007,7190,7191],{},"The Chat Class",[989,7193,4639,7194,7199,7200,7202],{},[1043,7195,7197],{"href":5724,"rel":7196},[1047],[1050,7198,259],{}," class from ",[1050,7201,5816],{}," manages the entire conversation state. It handles:",[1001,7204,7205,7210,7225,7231,7236],{},[1004,7206,7207,7208],{},"Message history with ",[1050,7209,6572],{},[1004,7211,7212,7213,1965,7215,2877,7218,2877,7221,2877,7223,1896],{},"Connection status with ",[1050,7214,6585],{},[1050,7216,7217],{},"ready",[1050,7219,7220],{},"submitted",[1050,7222,5711],{},[1050,7224,6220],{},[1004,7226,7227,7228],{},"Sending messages with ",[1050,7229,7230],{},"chat.sendMessage()",[1004,7232,7233,7234],{},"Stopping generation with ",[1050,7235,7121],{},[1004,7237,7238,7239],{},"Regenerating responses with ",[1050,7240,7135],{},[989,7242,4639,7243,7246,7247,7252,7253,7255],{},[1050,7244,7245],{},"onData"," callback receives ",[1043,7248,7251],{"href":7249,"rel":7250},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-ui\u002Fstreaming-data",[1047],"custom data events"," from the server (like ",[1050,7254,4329],{},"), allowing you to react to server-side events during streaming.",[989,7257,7258],{},[1007,7259,7260],{},"UChatMessages Component",[989,7262,4639,7263,7267],{},[1043,7264,7265],{"href":271},[1050,7266,5096],{}," component is purpose-built for AI chatbots with:",[1001,7269,7270,7273,7276,7279],{},[1004,7271,7272],{},"Auto-scroll to bottom on load",[1004,7274,7275],{},"Continuous scrolling as messages stream in",[1004,7277,7278],{},"A loading indicator while the assistant processes",[1004,7280,7281],{},"An \"Auto scroll\" button when scrolled up",[989,7283,7284],{},[1007,7285,7286],{},"Rendering Markdown with MDC",[989,7288,7289,7290,7292,7293,1053,7295,7298,7299,7306,7307,7313,7314,7318,7319,7322,7323,7325],{},"AI models often respond with Markdown formatting (code blocks, lists, bold text, etc.). We iterate over message ",[1050,7291,2212],{}," using AI SDK helpers like ",[1050,7294,6852],{},[1050,7296,7297],{},"isReasoningUIPart",", rendering text with the ",[1043,7300,7303],{"href":7301,"rel":7302},"https:\u002F\u002Fgithub.com\u002Fnuxt-content\u002Fmdc#mdc",[1047],[1050,7304,7305],{},"MDC"," component from ",[1043,7308,7311],{"href":7309,"rel":7310},"https:\u002F\u002Fgithub.com\u002Fnuxt-content\u002Fmdc",[1047],[1050,7312,1354],{}," and reasoning with ",[1043,7315,7316],{"href":291},[1050,7317,6830],{},". The ",[1050,7320,7321],{},"isPartStreaming"," utility from ",[1050,7324,5837],{}," detects if a part is currently being streamed.",[1679,7327,7328],{"to":859},[989,7329,7330],{},"Nuxt UI provides pre-styled prose components, so your markdown content will be automatically styled to match your theme.",[989,7332,7333],{},[1007,7334,7335],{},"UChatPromptSubmit Component",[989,7337,4639,7338,7342],{},[1043,7339,7340],{"href":286},[1050,7341,5626],{}," component adapts based on the chat status:",[1001,7344,7345,7348,7351],{},[1004,7346,7347],{},"Shows a send button when ready",[1004,7349,7350],{},"Shows a stop button while streaming",[1004,7352,7353],{},"Shows a reload button after an error",[993,7355,7357],{"id":7356},"adding-chat-history","Adding chat history",[989,7359,7360],{},"This section adds a dropdown menu to list previous chats and navigate between them.",[1128,7362,7364],{"id":7363},"listing-chats-api","Listing chats API",[989,7366,7367],{},"First, create an endpoint to fetch all chats:",[1291,7369,7370],{},[1091,7371,7374],{"className":1295,"code":7372,"filename":7373,"language":1297,"meta":1096,"style":1096},"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",[1050,7375,7376,7394,7416,7435,7439,7457,7482,7509,7515],{"__ignoreMap":1096},[1100,7377,7378,7380,7382,7384,7386,7388,7390,7392],{"class":1102,"line":1103},[1100,7379,1721],{"class":1304},[1100,7381,1724],{"class":1318},[1100,7383,2511],{"class":1314},[1100,7385,1746],{"class":1318},[1100,7387,1749],{"class":1304},[1100,7389,1405],{"class":1318},[1100,7391,1128],{"class":1110},[1100,7393,1369],{"class":1318},[1100,7395,7396,7398,7400,7402,7404,7406,7408,7410,7412,7414],{"class":1102,"line":1120},[1100,7397,1721],{"class":1304},[1100,7399,1724],{"class":1318},[1100,7401,2454],{"class":1314},[1100,7403,1730],{"class":1318},[1100,7405,2562],{"class":1314},[1100,7407,1746],{"class":1318},[1100,7409,1749],{"class":1304},[1100,7411,1405],{"class":1318},[1100,7413,2571],{"class":1110},[1100,7415,1369],{"class":1318},[1100,7417,7418,7420,7422,7425,7427,7429,7431,7433],{"class":1102,"line":1334},[1100,7419,1721],{"class":1304},[1100,7421,1724],{"class":1318},[1100,7423,7424],{"class":1314}," desc",[1100,7426,1746],{"class":1318},[1100,7428,1749],{"class":1304},[1100,7430,1405],{"class":1318},[1100,7432,1774],{"class":1110},[1100,7434,1369],{"class":1318},[1100,7436,7437],{"class":1102,"line":1349},[1100,7438,1383],{"emptyLinePlaceholder":21},[1100,7440,7441,7443,7445,7447,7449,7451,7453,7455],{"class":1102,"line":1361},[1100,7442,1305],{"class":1304},[1100,7444,1308],{"class":1304},[1100,7446,2511],{"class":1123},[1100,7448,1315],{"class":1314},[1100,7450,2610],{"class":1601},[1100,7452,4975],{"class":1318},[1100,7454,1839],{"class":1601},[1100,7456,1394],{"class":1318},[1100,7458,7459,7461,7463,7465,7467,7469,7471,7473,7475,7478,7480],{"class":1102,"line":1372},[1100,7460,2853],{"class":1304},[1100,7462,2639],{"class":1304},[1100,7464,2454],{"class":1314},[1100,7466,1822],{"class":1318},[1100,7468,3466],{"class":1314},[1100,7470,1822],{"class":1318},[1100,7472,1801],{"class":1314},[1100,7474,1822],{"class":1318},[1100,7476,7477],{"class":1123},"findMany",[1100,7479,1315],{"class":1324},[1100,7481,1319],{"class":1318},[1100,7483,7484,7487,7489,7491,7493,7495,7497,7499,7501,7503,7505,7507],{"class":1102,"line":1380},[1100,7485,7486],{"class":1123},"    orderBy",[1100,7488,1328],{"class":1318},[1100,7490,4975],{"class":1318},[1100,7492,1839],{"class":1601},[1100,7494,7424],{"class":1123},[1100,7496,1315],{"class":1324},[1100,7498,2730],{"class":1314},[1100,7500,1822],{"class":1318},[1100,7502,1801],{"class":1314},[1100,7504,1822],{"class":1318},[1100,7506,4992],{"class":1314},[1100,7508,1505],{"class":1324},[1100,7510,7511,7513],{"class":1102,"line":1386},[1100,7512,2427],{"class":1318},[1100,7514,1505],{"class":1324},[1100,7516,7517,7519],{"class":1102,"line":1397},[1100,7518,1502],{"class":1318},[1100,7520,1505],{"class":1314},[1128,7522,7524],{"id":7523},"building-the-chats-history-dropdown","Building the chats history dropdown",[989,7526,7527,7528,7533,7534,7539,7540,7533,7547,7549],{},"The component uses ",[1043,7529,7530],{"href":457},[1050,7531,7532],{},"UDropdownMenu"," with a ",[1043,7535,7536],{"href":230},[1050,7537,7538],{},"UButton"," as trigger. Use ",[1043,7541,7544],{"href":7542,"rel":7543},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-fetch",[1047],[1050,7545,7546],{},"useFetch",[1050,7548,6674],{}," to fetch and cache the chat list:",[1291,7551,7552],{},[1091,7553,7556],{"className":1563,"code":7554,"filename":7555,"language":34,"meta":1096,"style":1096},"\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",[1050,7557,7558,7578,7590,7594,7626,7641,7655,7661,7665,7685,7690,7706,7722,7738,7762,7766,7791,7816,7838,7864,7870,7874,7882,7886,7894,7925,7932,7946,7960,7974,7986,8000,8005,8013],{"__ignoreMap":1096},[1100,7559,7560,7562,7564,7566,7568,7570,7572,7574,7576],{"class":1102,"line":1103},[1100,7561,1573],{"class":1318},[1100,7563,5125],{"class":1324},[1100,7565,5128],{"class":1601},[1100,7567,5131],{"class":1601},[1100,7569,1605],{"class":1318},[1100,7571,1532],{"class":1318},[1100,7573,1297],{"class":1110},[1100,7575,1532],{"class":1318},[1100,7577,1579],{"class":1318},[1100,7579,7580,7582,7584,7586,7588],{"class":1102,"line":1120},[1100,7581,3074],{"class":1601},[1100,7583,5850],{"class":1314},[1100,7585,1605],{"class":1318},[1100,7587,5855],{"class":1123},[1100,7589,2682],{"class":1314},[1100,7591,7592],{"class":1102,"line":1334},[1100,7593,1383],{"emptyLinePlaceholder":21},[1100,7595,7596,7598,7600,7602,7604,7606,7608,7610,7612,7614,7616,7618,7620,7622,7624],{"class":1102,"line":1349},[1100,7597,3074],{"class":1601},[1100,7599,1724],{"class":1318},[1100,7601,5889],{"class":1324},[1100,7603,1328],{"class":1318},[1100,7605,1790],{"class":1314},[1100,7607,1502],{"class":1318},[1100,7609,2636],{"class":1318},[1100,7611,2639],{"class":1304},[1100,7613,5903],{"class":1123},[1100,7615,1315],{"class":1314},[1100,7617,1343],{"class":1318},[1100,7619,5268],{"class":1110},[1100,7621,1343],{"class":1318},[1100,7623,1730],{"class":1318},[1100,7625,1394],{"class":1318},[1100,7627,7628,7631,7633,7635,7637,7639],{"class":1102,"line":1361},[1100,7629,7630],{"class":1324},"  key",[1100,7632,1328],{"class":1318},[1100,7634,1405],{"class":1318},[1100,7636,1801],{"class":1110},[1100,7638,1343],{"class":1318},[1100,7640,1346],{"class":1318},[1100,7642,7643,7646,7648,7650,7652],{"class":1102,"line":1372},[1100,7644,7645],{"class":1123},"  default",[1100,7647,1328],{"class":1318},[1100,7649,4975],{"class":1318},[1100,7651,1839],{"class":1601},[1100,7653,7654],{"class":1314}," []\n",[1100,7656,7657,7659],{"class":1102,"line":1380},[1100,7658,1502],{"class":1318},[1100,7660,1505],{"class":1314},[1100,7662,7663],{"class":1102,"line":1386},[1100,7664,1383],{"emptyLinePlaceholder":21},[1100,7666,7667,7669,7672,7674,7677,7679,7681,7683],{"class":1102,"line":1397},[1100,7668,3074],{"class":1601},[1100,7670,7671],{"class":1314}," items ",[1100,7673,1605],{"class":1318},[1100,7675,7676],{"class":1123}," computed",[1100,7678,1315],{"class":1314},[1100,7680,1819],{"class":1318},[1100,7682,1839],{"class":1601},[1100,7684,1331],{"class":1314},[1100,7686,7687],{"class":1102,"line":1413},[1100,7688,7689],{"class":1318},"  {\n",[1100,7691,7692,7695,7697,7699,7702,7704],{"class":1102,"line":1419},[1100,7693,7694],{"class":1324},"    label",[1100,7696,1328],{"class":1318},[1100,7698,1405],{"class":1318},[1100,7700,7701],{"class":1110},"New chat",[1100,7703,1343],{"class":1318},[1100,7705,1346],{"class":1318},[1100,7707,7708,7711,7713,7715,7718,7720],{"class":1102,"line":1424},[1100,7709,7710],{"class":1324},"    to",[1100,7712,1328],{"class":1318},[1100,7714,1405],{"class":1318},[1100,7716,7717],{"class":1110},"\u002F",[1100,7719,1343],{"class":1318},[1100,7721,1346],{"class":1318},[1100,7723,7724,7727,7729,7731,7734,7736],{"class":1102,"line":1447},[1100,7725,7726],{"class":1324},"    icon",[1100,7728,1328],{"class":1318},[1100,7730,1405],{"class":1318},[1100,7732,7733],{"class":1110},"i-lucide-plus-square",[1100,7735,1343],{"class":1318},[1100,7737,1346],{"class":1318},[1100,7739,7740,7743,7745,7748,7750,7753,7756,7758,7760],{"class":1102,"line":1452},[1100,7741,7742],{"class":1324},"    active",[1100,7744,1328],{"class":1318},[1100,7746,7747],{"class":1314}," route",[1100,7749,1822],{"class":1318},[1100,7751,7752],{"class":1314},"name ",[1100,7754,7755],{"class":1318},"===",[1100,7757,1405],{"class":1318},[1100,7759,6708],{"class":1110},[1100,7761,1369],{"class":1318},[1100,7763,7764],{"class":1102,"line":1462},[1100,7765,1416],{"class":1318},[1100,7767,7768,7771,7773,7775,7777,7779,7781,7783,7785,7787,7789],{"class":1102,"line":1472},[1100,7769,7770],{"class":1318},"  ...",[1100,7772,1801],{"class":1314},[1100,7774,1822],{"class":1318},[1100,7776,3335],{"class":1314},[1100,7778,1822],{"class":1318},[1100,7780,4476],{"class":1123},[1100,7782,1315],{"class":1314},[1100,7784,262],{"class":1956},[1100,7786,1839],{"class":1601},[1100,7788,1965],{"class":1314},[1100,7790,1319],{"class":1318},[1100,7792,7793,7795,7797,7799,7801,7804,7807,7809,7812,7814],{"class":1102,"line":1488},[1100,7794,7694],{"class":1324},[1100,7796,1328],{"class":1318},[1100,7798,2803],{"class":1314},[1100,7800,1822],{"class":1318},[1100,7802,7803],{"class":1314},"title ",[1100,7805,7806],{"class":1318},"||",[1100,7808,1405],{"class":1318},[1100,7810,7811],{"class":1110},"Untitled",[1100,7813,1343],{"class":1318},[1100,7815,1346],{"class":1318},[1100,7817,7818,7820,7822,7824,7826,7828,7830,7832,7834,7836],{"class":1102,"line":1494},[1100,7819,7710],{"class":1324},[1100,7821,1328],{"class":1318},[1100,7823,3684],{"class":1318},[1100,7825,5394],{"class":1110},[1100,7827,5397],{"class":1318},[1100,7829,262],{"class":1314},[1100,7831,1822],{"class":1318},[1100,7833,2031],{"class":1314},[1100,7835,5406],{"class":1318},[1100,7837,1346],{"class":1318},[1100,7839,7840,7842,7844,7846,7848,7850,7852,7855,7857,7859,7861],{"class":1102,"line":1499},[1100,7841,7742],{"class":1324},[1100,7843,1328],{"class":1318},[1100,7845,7747],{"class":1314},[1100,7847,1822],{"class":1318},[1100,7849,5920],{"class":1314},[1100,7851,1822],{"class":1318},[1100,7853,7854],{"class":1314},"id ",[1100,7856,7755],{"class":1318},[1100,7858,2803],{"class":1314},[1100,7860,1822],{"class":1318},[1100,7862,7863],{"class":1314},"id\n",[1100,7865,7866,7868],{"class":1102,"line":2288},[1100,7867,2427],{"class":1318},[1100,7869,1986],{"class":1314},[1100,7871,7872],{"class":1102,"line":2301},[1100,7873,2334],{"class":1314},[1100,7875,7876,7878,7880],{"class":1102,"line":2331},[1100,7877,1649],{"class":1318},[1100,7879,5125],{"class":1324},[1100,7881,1579],{"class":1318},[1100,7883,7884],{"class":1102,"line":2337},[1100,7885,1383],{"emptyLinePlaceholder":21},[1100,7887,7888,7890,7892],{"class":1102,"line":2342},[1100,7889,1573],{"class":1318},[1100,7891,1576],{"class":1324},[1100,7893,1579],{"class":1318},[1100,7895,7896,7898,7900,7903,7905,7907,7910,7912,7914,7916,7918,7921,7923],{"class":1102,"line":2374},[1100,7897,1586],{"class":1318},[1100,7899,7532],{"class":1324},[1100,7901,7902],{"class":1601}," :items",[1100,7904,1605],{"class":1318},[1100,7906,1532],{"class":1318},[1100,7908,7909],{"class":1110},"items",[1100,7911,1532],{"class":1318},[1100,7913,5478],{"class":1601},[1100,7915,1605],{"class":1318},[1100,7917,1532],{"class":1318},[1100,7919,7920],{"class":1110},"m-2",[1100,7922,1532],{"class":1318},[1100,7924,1579],{"class":1318},[1100,7926,7927,7929],{"class":1102,"line":2390},[1100,7928,1595],{"class":1318},[1100,7930,7931],{"class":1324},"UButton\n",[1100,7933,7934,7937,7939,7941,7944],{"class":1102,"line":2408},[1100,7935,7936],{"class":1601},"      icon",[1100,7938,1605],{"class":1318},[1100,7940,1532],{"class":1318},[1100,7942,7943],{"class":1110},"i-lucide-messages-square",[1100,7945,5551],{"class":1318},[1100,7947,7948,7951,7953,7955,7958],{"class":1102,"line":2424},[1100,7949,7950],{"class":1601},"      variant",[1100,7952,1605],{"class":1318},[1100,7954,1532],{"class":1318},[1100,7956,7957],{"class":1110},"ghost",[1100,7959,5551],{"class":1318},[1100,7961,7962,7965,7967,7969,7972],{"class":1102,"line":2432},[1100,7963,7964],{"class":1601},"      label",[1100,7966,1605],{"class":1318},[1100,7968,1532],{"class":1318},[1100,7970,7971],{"class":1110},"Chats History",[1100,7973,5551],{"class":1318},[1100,7975,7976,7978,7980,7982,7984],{"class":1102,"line":3427},[1100,7977,6278],{"class":1601},[1100,7979,1605],{"class":1318},[1100,7981,1532],{"class":1318},[1100,7983,5636],{"class":1110},[1100,7985,5551],{"class":1318},[1100,7987,7988,7991,7993,7995,7998],{"class":1102,"line":3440},[1100,7989,7990],{"class":1601},"      class",[1100,7992,1605],{"class":1318},[1100,7994,1532],{"class":1318},[1100,7996,7997],{"class":1110},"w-fit",[1100,7999,5551],{"class":1318},[1100,8001,8002],{"class":1102,"line":3445},[1100,8003,8004],{"class":1318},"    \u002F>\n",[1100,8006,8007,8009,8011],{"class":1102,"line":3451},[1100,8008,1640],{"class":1318},[1100,8010,7532],{"class":1324},[1100,8012,1579],{"class":1318},[1100,8014,8015,8017,8019],{"class":1102,"line":3482},[1100,8016,1649],{"class":1318},[1100,8018,1576],{"class":1324},[1100,8020,1579],{"class":1318},[993,8022,8024],{"id":8023},"integrating-history-in-the-home-page","Integrating history in the home page",[1291,8026,8027],{},[1709,8028,8029],{},[1091,8030,8033],{"className":1563,"code":8031,"filename":5115,"highlights":8032,"language":34,"meta":1096,"style":1096},"\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",[2424,2432,3427],[1050,8034,8035,8055,8071,8087,8091,8103,8125,8129,8141,8145,8149,8173,8187,8195,8203,8217,8253,8257,8261,8267,8271,8275,8297,8301,8309,8313,8321,8339,8353,8363,8372,8384,8402,8420,8424,8432,8436,8442,8454,8466,8478,8490,8502,8506,8524,8532,8540,8548,8556],{"__ignoreMap":1096},[1100,8036,8037,8039,8041,8043,8045,8047,8049,8051,8053],{"class":1102,"line":1103},[1100,8038,1573],{"class":1318},[1100,8040,5125],{"class":1324},[1100,8042,5128],{"class":1601},[1100,8044,5131],{"class":1601},[1100,8046,1605],{"class":1318},[1100,8048,1532],{"class":1318},[1100,8050,1297],{"class":1110},[1100,8052,1532],{"class":1318},[1100,8054,1579],{"class":1318},[1100,8056,8057,8059,8061,8063,8065,8067,8069],{"class":1102,"line":1120},[1100,8058,3074],{"class":1601},[1100,8060,5148],{"class":1314},[1100,8062,1605],{"class":1318},[1100,8064,5153],{"class":1123},[1100,8066,1315],{"class":1314},[1100,8068,5158],{"class":1318},[1100,8070,1505],{"class":1314},[1100,8072,8073,8075,8077,8079,8081,8083,8085],{"class":1102,"line":1334},[1100,8074,3074],{"class":1601},[1100,8076,5167],{"class":1314},[1100,8078,1605],{"class":1318},[1100,8080,5153],{"class":1123},[1100,8082,1315],{"class":1314},[1100,8084,5176],{"class":1480},[1100,8086,1505],{"class":1314},[1100,8088,8089],{"class":1102,"line":1349},[1100,8090,1383],{"emptyLinePlaceholder":21},[1100,8092,8093,8095,8097,8099,8101],{"class":1102,"line":1361},[1100,8094,2610],{"class":1601},[1100,8096,5189],{"class":1601},[1100,8098,5192],{"class":1123},[1100,8100,1819],{"class":1318},[1100,8102,1394],{"class":1318},[1100,8104,8105,8107,8109,8111,8113,8115,8117,8119,8121,8123],{"class":1102,"line":1372},[1100,8106,3541],{"class":1304},[1100,8108,1965],{"class":1324},[1100,8110,3546],{"class":1318},[1100,8112,5207],{"class":1314},[1100,8114,1822],{"class":1318},[1100,8116,3335],{"class":1314},[1100,8118,1822],{"class":1318},[1100,8120,5216],{"class":1123},[1100,8122,5219],{"class":1324},[1100,8124,5222],{"class":1304},[1100,8126,8127],{"class":1102,"line":1380},[1100,8128,1383],{"emptyLinePlaceholder":21},[1100,8130,8131,8133,8135,8137,8139],{"class":1102,"line":1386},[1100,8132,5231],{"class":1314},[1100,8134,1822],{"class":1318},[1100,8136,3335],{"class":1314},[1100,8138,2636],{"class":1318},[1100,8140,4367],{"class":1480},[1100,8142,8143],{"class":1102,"line":1397},[1100,8144,1383],{"emptyLinePlaceholder":21},[1100,8146,8147],{"class":1102,"line":1413},[1100,8148,5248],{"class":1484},[1100,8150,8151,8153,8155,8157,8159,8161,8163,8165,8167,8169,8171],{"class":1102,"line":1419},[1100,8152,2626],{"class":1601},[1100,8154,2803],{"class":1314},[1100,8156,2636],{"class":1318},[1100,8158,2639],{"class":1304},[1100,8160,5261],{"class":1123},[1100,8162,1315],{"class":1324},[1100,8164,1343],{"class":1318},[1100,8166,5268],{"class":1110},[1100,8168,1343],{"class":1318},[1100,8170,1730],{"class":1318},[1100,8172,1394],{"class":1318},[1100,8174,8175,8177,8179,8181,8183,8185],{"class":1102,"line":1424},[1100,8176,5279],{"class":1324},[1100,8178,1328],{"class":1318},[1100,8180,1405],{"class":1318},[1100,8182,5286],{"class":1110},[1100,8184,1343],{"class":1318},[1100,8186,1346],{"class":1318},[1100,8188,8189,8191,8193],{"class":1102,"line":1447},[1100,8190,5295],{"class":1324},[1100,8192,1328],{"class":1318},[1100,8194,1394],{"class":1318},[1100,8196,8197,8199,8201],{"class":1102,"line":1452},[1100,8198,3375],{"class":1324},[1100,8200,1328],{"class":1318},[1100,8202,1394],{"class":1318},[1100,8204,8205,8207,8209,8211,8213,8215],{"class":1102,"line":1462},[1100,8206,4509],{"class":1324},[1100,8208,1328],{"class":1318},[1100,8210,1405],{"class":1318},[1100,8212,2161],{"class":1110},[1100,8214,1343],{"class":1318},[1100,8216,1346],{"class":1318},[1100,8218,8219,8221,8223,8225,8227,8229,8231,8233,8235,8237,8239,8241,8243,8245,8247,8249,8251],{"class":1102,"line":1472},[1100,8220,4542],{"class":1324},[1100,8222,1328],{"class":1318},[1100,8224,1432],{"class":1324},[1100,8226,1879],{"class":1318},[1100,8228,2533],{"class":1324},[1100,8230,1328],{"class":1318},[1100,8232,1405],{"class":1318},[1100,8234,5340],{"class":1110},[1100,8236,1343],{"class":1318},[1100,8238,1730],{"class":1318},[1100,8240,1733],{"class":1324},[1100,8242,1328],{"class":1318},[1100,8244,5351],{"class":1314},[1100,8246,1822],{"class":1318},[1100,8248,3335],{"class":1314},[1100,8250,1746],{"class":1318},[1100,8252,3181],{"class":1324},[1100,8254,8255],{"class":1102,"line":1488},[1100,8256,4381],{"class":1318},[1100,8258,8259],{"class":1102,"line":1494},[1100,8260,1491],{"class":1318},[1100,8262,8263,8265],{"class":1102,"line":1499},[1100,8264,2427],{"class":1318},[1100,8266,1505],{"class":1324},[1100,8268,8269],{"class":1102,"line":2288},[1100,8270,1383],{"emptyLinePlaceholder":21},[1100,8272,8273],{"class":1102,"line":2301},[1100,8274,5382],{"class":1484},[1100,8276,8277,8279,8281,8283,8285,8287,8289,8291,8293,8295],{"class":1102,"line":2331},[1100,8278,5387],{"class":1123},[1100,8280,1315],{"class":1324},[1100,8282,3690],{"class":1318},[1100,8284,5394],{"class":1110},[1100,8286,5397],{"class":1318},[1100,8288,262],{"class":1314},[1100,8290,1822],{"class":1318},[1100,8292,2031],{"class":1314},[1100,8294,5406],{"class":1318},[1100,8296,1505],{"class":1324},[1100,8298,8299],{"class":1102,"line":2337},[1100,8300,5413],{"class":1318},[1100,8302,8303,8305,8307],{"class":1102,"line":2342},[1100,8304,1649],{"class":1318},[1100,8306,5125],{"class":1324},[1100,8308,1579],{"class":1318},[1100,8310,8311],{"class":1102,"line":2374},[1100,8312,1383],{"emptyLinePlaceholder":21},[1100,8314,8315,8317,8319],{"class":1102,"line":2390},[1100,8316,1573],{"class":1318},[1100,8318,1576],{"class":1324},[1100,8320,1579],{"class":1318},[1100,8322,8323,8325,8327,8329,8331,8333,8335,8337],{"class":1102,"line":2408},[1100,8324,1586],{"class":1318},[1100,8326,5440],{"class":1324},[1100,8328,5443],{"class":1601},[1100,8330,1605],{"class":1318},[1100,8332,1532],{"class":1318},[1100,8334,5450],{"class":1110},[1100,8336,1532],{"class":1318},[1100,8338,1579],{"class":1318},[1100,8340,8342,8344,8346,8348,8351],{"class":8341,"line":2424},[1102,1583],[1100,8343,1595],{"class":1318},[1100,8345,1576],{"class":1324},[1100,8347,5463],{"class":1318},[1100,8349,8350],{"class":1601},"header",[1100,8352,1579],{"class":1318},[1100,8354,8356,8358,8361],{"class":8355,"line":2432},[1102,1583],[1100,8357,1619],{"class":1318},[1100,8359,8360],{"class":1324},"ChatsHistory",[1100,8362,1625],{"class":1318},[1100,8364,8366,8368,8370],{"class":8365,"line":3427},[1102,1583],[1100,8367,1630],{"class":1318},[1100,8369,1576],{"class":1324},[1100,8371,1579],{"class":1318},[1100,8373,8374,8376,8378,8380,8382],{"class":1102,"line":3440},[1100,8375,1595],{"class":1318},[1100,8377,1576],{"class":1324},[1100,8379,5463],{"class":1318},[1100,8381,5466],{"class":1601},[1100,8383,1579],{"class":1318},[1100,8385,8386,8388,8390,8392,8394,8396,8398,8400],{"class":1102,"line":3445},[1100,8387,1619],{"class":1318},[1100,8389,5475],{"class":1324},[1100,8391,5478],{"class":1601},[1100,8393,1605],{"class":1318},[1100,8395,1532],{"class":1318},[1100,8397,5485],{"class":1110},[1100,8399,1532],{"class":1318},[1100,8401,1579],{"class":1318},[1100,8403,8404,8406,8408,8410,8412,8414,8416,8418],{"class":1102,"line":3451},[1100,8405,5494],{"class":1318},[1100,8407,5497],{"class":1324},[1100,8409,5478],{"class":1601},[1100,8411,1605],{"class":1318},[1100,8413,1532],{"class":1318},[1100,8415,5506],{"class":1110},[1100,8417,1532],{"class":1318},[1100,8419,1579],{"class":1318},[1100,8421,8422],{"class":1102,"line":3482},[1100,8423,5515],{"class":1314},[1100,8425,8426,8428,8430],{"class":1102,"line":3526},[1100,8427,5520],{"class":1318},[1100,8429,5497],{"class":1324},[1100,8431,1579],{"class":1318},[1100,8433,8434],{"class":1102,"line":3533},[1100,8435,1383],{"emptyLinePlaceholder":21},[1100,8437,8438,8440],{"class":1102,"line":3538},[1100,8439,5494],{"class":1318},[1100,8441,5536],{"class":1324},[1100,8443,8444,8446,8448,8450,8452],{"class":1102,"line":3556},[1100,8445,5542],{"class":1601},[1100,8447,1605],{"class":1318},[1100,8449,1532],{"class":1318},[1100,8451,5207],{"class":1110},[1100,8453,5551],{"class":1318},[1100,8455,8456,8458,8460,8462,8464],{"class":1102,"line":3595},[1100,8457,5557],{"class":1601},[1100,8459,1605],{"class":1318},[1100,8461,1532],{"class":1318},[1100,8463,5564],{"class":1110},[1100,8465,5551],{"class":1318},[1100,8467,8468,8470,8472,8474,8476],{"class":1102,"line":3601},[1100,8469,5572],{"class":1601},[1100,8471,1605],{"class":1318},[1100,8473,1532],{"class":1318},[1100,8475,5579],{"class":1110},[1100,8477,5551],{"class":1318},[1100,8479,8480,8482,8484,8486,8488],{"class":1102,"line":3606},[1100,8481,5587],{"class":1601},[1100,8483,1605],{"class":1318},[1100,8485,1532],{"class":1318},[1100,8487,5594],{"class":1110},[1100,8489,5551],{"class":1318},[1100,8491,8492,8494,8496,8498,8500],{"class":1102,"line":3612},[1100,8493,5602],{"class":1601},[1100,8495,1605],{"class":1318},[1100,8497,1532],{"class":1318},[1100,8499,5609],{"class":1110},[1100,8501,5551],{"class":1318},[1100,8503,8504],{"class":1102,"line":3632},[1100,8505,5617],{"class":1318},[1100,8507,8508,8510,8512,8514,8516,8518,8520,8522],{"class":1102,"line":3660},[1100,8509,5623],{"class":1318},[1100,8511,5626],{"class":1324},[1100,8513,5629],{"class":1601},[1100,8515,1605],{"class":1318},[1100,8517,1532],{"class":1318},[1100,8519,5636],{"class":1110},[1100,8521,1532],{"class":1318},[1100,8523,1625],{"class":1318},[1100,8525,8526,8528,8530],{"class":1102,"line":3676},[1100,8527,5520],{"class":1318},[1100,8529,5090],{"class":1324},[1100,8531,1579],{"class":1318},[1100,8533,8534,8536,8538],{"class":1102,"line":3695},[1100,8535,5654],{"class":1318},[1100,8537,5475],{"class":1324},[1100,8539,1579],{"class":1318},[1100,8541,8542,8544,8546],{"class":1102,"line":3723},[1100,8543,1630],{"class":1318},[1100,8545,1576],{"class":1324},[1100,8547,1579],{"class":1318},[1100,8549,8550,8552,8554],{"class":1102,"line":3730},[1100,8551,1640],{"class":1318},[1100,8553,5440],{"class":1324},[1100,8555,1579],{"class":1318},[1100,8557,8558,8560,8562],{"class":1102,"line":3735},[1100,8559,1649],{"class":1318},[1100,8561,1576],{"class":1324},[1100,8563,1579],{"class":1318},[993,8565,8567],{"id":8566},"integrating-history-in-the-chat-page","Integrating history in the chat page",[1291,8569,8570],{},[1709,8571,8572],{},[1091,8573,8576],{"className":1563,"code":8574,"filename":5744,"highlights":8575,"language":34,"meta":1096,"style":1096},"\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",[3975,3981,3998],[1050,8577,8578,8598,8624,8642,8660,8664,8676,8688,8692,8696,8738,8742,8758,8798,8802,8806,8822,8826,8830,8846,8864,8882,8896,8920,8928,8940,8944,8968,8982,8986,8990,9002,9014,9028,9042,9054,9060,9064,9070,9074,9092,9102,9122,9148,9160,9164,9168,9172,9176,9188,9216,9226,9230,9236,9244,9248,9256,9274,9286,9294,9302,9314,9333,9340,9353,9365,9369,9381,9385,9409,9475,9481,9493,9505,9517,9521,9527,9539,9551,9563,9567,9575,9579,9599,9605,9617,9629,9641,9653,9657,9685,9689,9697,9705,9713,9721,9729,9733,9739,9751,9763,9775,9787,9799,9803,9809,9821,9833,9845,9857,9861,9869,9877,9886,9895],{"__ignoreMap":1096},[1100,8579,8580,8582,8584,8586,8588,8590,8592,8594,8596],{"class":1102,"line":1103},[1100,8581,1573],{"class":1318},[1100,8583,5125],{"class":1324},[1100,8585,5128],{"class":1601},[1100,8587,5131],{"class":1601},[1100,8589,1605],{"class":1318},[1100,8591,1532],{"class":1318},[1100,8593,1297],{"class":1110},[1100,8595,1532],{"class":1318},[1100,8597,1579],{"class":1318},[1100,8599,8600,8602,8604,8606,8608,8610,8612,8614,8616,8618,8620,8622],{"class":1102,"line":1120},[1100,8601,1721],{"class":1304},[1100,8603,1724],{"class":1318},[1100,8605,5777],{"class":1314},[1100,8607,1730],{"class":1318},[1100,8609,5782],{"class":1314},[1100,8611,1730],{"class":1318},[1100,8613,5787],{"class":1314},[1100,8615,1746],{"class":1318},[1100,8617,1749],{"class":1304},[1100,8619,1405],{"class":1318},[1100,8621,2547],{"class":1110},[1100,8623,1369],{"class":1318},[1100,8625,8626,8628,8630,8632,8634,8636,8638,8640],{"class":1102,"line":1334},[1100,8627,1721],{"class":1304},[1100,8629,1724],{"class":1318},[1100,8631,5807],{"class":1314},[1100,8633,1746],{"class":1318},[1100,8635,1749],{"class":1304},[1100,8637,1405],{"class":1318},[1100,8639,5816],{"class":1110},[1100,8641,1369],{"class":1318},[1100,8643,8644,8646,8648,8650,8652,8654,8656,8658],{"class":1102,"line":1349},[1100,8645,1721],{"class":1304},[1100,8647,1724],{"class":1318},[1100,8649,5828],{"class":1314},[1100,8651,1746],{"class":1318},[1100,8653,1749],{"class":1304},[1100,8655,1405],{"class":1318},[1100,8657,5837],{"class":1110},[1100,8659,1369],{"class":1318},[1100,8661,8662],{"class":1102,"line":1361},[1100,8663,1383],{"emptyLinePlaceholder":21},[1100,8665,8666,8668,8670,8672,8674],{"class":1102,"line":1372},[1100,8667,3074],{"class":1601},[1100,8669,5850],{"class":1314},[1100,8671,1605],{"class":1318},[1100,8673,5855],{"class":1123},[1100,8675,2682],{"class":1314},[1100,8677,8678,8680,8682,8684,8686],{"class":1102,"line":1380},[1100,8679,3074],{"class":1601},[1100,8681,5864],{"class":1314},[1100,8683,1605],{"class":1318},[1100,8685,5869],{"class":1123},[1100,8687,2682],{"class":1314},[1100,8689,8690],{"class":1102,"line":1386},[1100,8691,1383],{"emptyLinePlaceholder":21},[1100,8693,8694],{"class":1102,"line":1397},[1100,8695,5880],{"class":1484},[1100,8697,8698,8700,8702,8704,8706,8708,8710,8712,8714,8716,8718,8720,8722,8724,8726,8728,8730,8732,8734,8736],{"class":1102,"line":1413},[1100,8699,3074],{"class":1601},[1100,8701,1724],{"class":1318},[1100,8703,5889],{"class":1324},[1100,8705,1328],{"class":1318},[1100,8707,5894],{"class":1314},[1100,8709,1502],{"class":1318},[1100,8711,2636],{"class":1318},[1100,8713,2639],{"class":1304},[1100,8715,5903],{"class":1123},[1100,8717,1315],{"class":1314},[1100,8719,3690],{"class":1318},[1100,8721,5910],{"class":1110},[1100,8723,5397],{"class":1318},[1100,8725,5915],{"class":1314},[1100,8727,1822],{"class":1318},[1100,8729,5920],{"class":1314},[1100,8731,1822],{"class":1318},[1100,8733,2031],{"class":1314},[1100,8735,5406],{"class":1318},[1100,8737,1505],{"class":1314},[1100,8739,8740],{"class":1102,"line":1419},[1100,8741,1383],{"emptyLinePlaceholder":21},[1100,8743,8744,8746,8748,8750,8752,8754,8756],{"class":1102,"line":1424},[1100,8745,5937],{"class":1304},[1100,8747,1965],{"class":1314},[1100,8749,3546],{"class":1318},[1100,8751,5944],{"class":1314},[1100,8753,1822],{"class":1318},[1100,8755,5949],{"class":1314},[1100,8757,1319],{"class":1318},[1100,8759,8760,8762,8764,8766,8768,8770,8772,8774,8776,8778,8780,8782,8784,8786,8788,8790,8792,8794,8796],{"class":1102,"line":1447},[1100,8761,5956],{"class":1304},[1100,8763,2912],{"class":1123},[1100,8765,1315],{"class":1324},[1100,8767,1879],{"class":1318},[1100,8769,3568],{"class":1324},[1100,8771,1328],{"class":1318},[1100,8773,3574],{"class":3573},[1100,8775,1730],{"class":1318},[1100,8777,3579],{"class":1324},[1100,8779,1328],{"class":1318},[1100,8781,1405],{"class":1318},[1100,8783,3586],{"class":1110},[1100,8785,1343],{"class":1318},[1100,8787,1730],{"class":1318},[1100,8789,5985],{"class":1324},[1100,8791,1328],{"class":1318},[1100,8793,4182],{"class":1480},[1100,8795,1746],{"class":1318},[1100,8797,1505],{"class":1324},[1100,8799,8800],{"class":1102,"line":1452},[1100,8801,5413],{"class":1318},[1100,8803,8804],{"class":1102,"line":1462},[1100,8805,1383],{"emptyLinePlaceholder":21},[1100,8807,8808,8810,8812,8814,8816,8818,8820],{"class":1102,"line":1472},[1100,8809,3074],{"class":1601},[1100,8811,5148],{"class":1314},[1100,8813,1605],{"class":1318},[1100,8815,5153],{"class":1123},[1100,8817,1315],{"class":1314},[1100,8819,5158],{"class":1318},[1100,8821,1505],{"class":1314},[1100,8823,8824],{"class":1102,"line":1488},[1100,8825,1383],{"emptyLinePlaceholder":21},[1100,8827,8828],{"class":1102,"line":1494},[1100,8829,6026],{"class":1484},[1100,8831,8832,8834,8836,8838,8840,8842,8844],{"class":1102,"line":1499},[1100,8833,3074],{"class":1601},[1100,8835,6034],{"class":1314},[1100,8837,1605],{"class":1318},[1100,8839,1916],{"class":1318},[1100,8841,5807],{"class":1123},[1100,8843,1315],{"class":1314},[1100,8845,1319],{"class":1318},[1100,8847,8848,8850,8852,8854,8856,8858,8860,8862],{"class":1102,"line":2288},[1100,8849,1812],{"class":1324},[1100,8851,1328],{"class":1318},[1100,8853,6054],{"class":1314},[1100,8855,1822],{"class":1318},[1100,8857,3335],{"class":1314},[1100,8859,1822],{"class":1318},[1100,8861,2031],{"class":1314},[1100,8863,1346],{"class":1318},[1100,8865,8866,8868,8870,8872,8874,8876,8878,8880],{"class":1102,"line":2301},[1100,8867,1972],{"class":1324},[1100,8869,1328],{"class":1318},[1100,8871,6054],{"class":1314},[1100,8873,1822],{"class":1318},[1100,8875,3335],{"class":1314},[1100,8877,1822],{"class":1318},[1100,8879,2010],{"class":1314},[1100,8881,1346],{"class":1318},[1100,8883,8884,8886,8888,8890,8892,8894],{"class":1102,"line":2331},[1100,8885,6089],{"class":1324},[1100,8887,1328],{"class":1318},[1100,8889,1916],{"class":1318},[1100,8891,5777],{"class":1123},[1100,8893,1315],{"class":1314},[1100,8895,1319],{"class":1318},[1100,8897,8898,8900,8902,8904,8906,8908,8910,8912,8914,8916,8918],{"class":1102,"line":2337},[1100,8899,6105],{"class":1324},[1100,8901,1328],{"class":1318},[1100,8903,3684],{"class":1318},[1100,8905,5910],{"class":1110},[1100,8907,5397],{"class":1318},[1100,8909,5944],{"class":1314},[1100,8911,1822],{"class":1318},[1100,8913,3335],{"class":1314},[1100,8915,1822],{"class":1318},[1100,8917,2031],{"class":1314},[1100,8919,6126],{"class":1318},[1100,8921,8922,8924,8926],{"class":1102,"line":2342},[1100,8923,2427],{"class":1318},[1100,8925,1896],{"class":1314},[1100,8927,1346],{"class":1318},[1100,8929,8930,8932,8934,8936,8938],{"class":1102,"line":2374},[1100,8931,6141],{"class":1324},[1100,8933,1315],{"class":1318},[1100,8935,6146],{"class":1956},[1100,8937,1896],{"class":1318},[1100,8939,1394],{"class":1318},[1100,8941,8942],{"class":1102,"line":2390},[1100,8943,6156],{"class":1484},[1100,8945,8946,8948,8950,8952,8954,8956,8958,8960,8962,8964,8966],{"class":1102,"line":2408},[1100,8947,6162],{"class":1304},[1100,8949,1965],{"class":1324},[1100,8951,6146],{"class":1314},[1100,8953,1822],{"class":1318},[1100,8955,6171],{"class":1314},[1100,8957,3362],{"class":1318},[1100,8959,1405],{"class":1318},[1100,8961,4329],{"class":1110},[1100,8963,1343],{"class":1318},[1100,8965,3551],{"class":1324},[1100,8967,1319],{"class":1318},[1100,8969,8970,8972,8974,8976,8978,8980],{"class":1102,"line":2424},[1100,8971,6189],{"class":1123},[1100,8973,1315],{"class":1324},[1100,8975,1343],{"class":1318},[1100,8977,1801],{"class":1110},[1100,8979,1343],{"class":1318},[1100,8981,1505],{"class":1324},[1100,8983,8984],{"class":1102,"line":2432},[1100,8985,1491],{"class":1318},[1100,8987,8988],{"class":1102,"line":3427},[1100,8989,1416],{"class":1318},[1100,8991,8992,8994,8996,8998,9000],{"class":1102,"line":3440},[1100,8993,6215],{"class":1324},[1100,8995,1315],{"class":1318},[1100,8997,6220],{"class":1956},[1100,8999,1896],{"class":1318},[1100,9001,1394],{"class":1318},[1100,9003,9004,9006,9008,9010,9012],{"class":1102,"line":3445},[1100,9005,6230],{"class":1314},[1100,9007,1822],{"class":1318},[1100,9009,6235],{"class":1123},[1100,9011,1315],{"class":1324},[1100,9013,1319],{"class":1318},[1100,9015,9016,9018,9020,9022,9024,9026],{"class":1102,"line":3451},[1100,9017,6245],{"class":1324},[1100,9019,1328],{"class":1318},[1100,9021,1405],{"class":1318},[1100,9023,497],{"class":1110},[1100,9025,1343],{"class":1318},[1100,9027,1346],{"class":1318},[1100,9029,9030,9032,9034,9036,9038,9040],{"class":1102,"line":3482},[1100,9031,6261],{"class":1324},[1100,9033,1328],{"class":1318},[1100,9035,6266],{"class":1314},[1100,9037,1822],{"class":1318},[1100,9039,4481],{"class":1314},[1100,9041,1346],{"class":1318},[1100,9043,9044,9046,9048,9050,9052],{"class":1102,"line":3526},[1100,9045,6278],{"class":1324},[1100,9047,1328],{"class":1318},[1100,9049,1405],{"class":1318},[1100,9051,6220],{"class":1110},[1100,9053,1369],{"class":1318},[1100,9055,9056,9058],{"class":1102,"line":3533},[1100,9057,3389],{"class":1318},[1100,9059,1505],{"class":1324},[1100,9061,9062],{"class":1102,"line":3538},[1100,9063,3598],{"class":1318},[1100,9065,9066,9068],{"class":1102,"line":3556},[1100,9067,1502],{"class":1318},[1100,9069,1505],{"class":1314},[1100,9071,9072],{"class":1102,"line":3595},[1100,9073,1383],{"emptyLinePlaceholder":21},[1100,9075,9076,9078,9080,9082,9084,9086,9088,9090],{"class":1102,"line":3601},[1100,9077,6314],{"class":1601},[1100,9079,6317],{"class":1123},[1100,9081,1315],{"class":1318},[1100,9083,6322],{"class":1956},[1100,9085,1328],{"class":1318},[1100,9087,6327],{"class":1106},[1100,9089,1896],{"class":1318},[1100,9091,1394],{"class":1318},[1100,9093,9094,9096,9098,9100],{"class":1102,"line":3606},[1100,9095,6336],{"class":1314},[1100,9097,1822],{"class":1318},[1100,9099,6341],{"class":1123},[1100,9101,2682],{"class":1324},[1100,9103,9104,9106,9108,9110,9112,9114,9116,9118,9120],{"class":1102,"line":3612},[1100,9105,3541],{"class":1304},[1100,9107,1965],{"class":1324},[1100,9109,5207],{"class":1314},[1100,9111,1822],{"class":1318},[1100,9113,3335],{"class":1314},[1100,9115,1822],{"class":1318},[1100,9117,5216],{"class":1123},[1100,9119,5219],{"class":1324},[1100,9121,1319],{"class":1318},[1100,9123,9124,9126,9128,9130,9132,9134,9136,9138,9140,9142,9144,9146],{"class":1102,"line":3632},[1100,9125,6368],{"class":1314},[1100,9127,1822],{"class":1318},[1100,9129,6373],{"class":1123},[1100,9131,1315],{"class":1324},[1100,9133,1879],{"class":1318},[1100,9135,1733],{"class":1324},[1100,9137,1328],{"class":1318},[1100,9139,5351],{"class":1314},[1100,9141,1822],{"class":1318},[1100,9143,3335],{"class":1314},[1100,9145,1746],{"class":1318},[1100,9147,1505],{"class":1324},[1100,9149,9150,9152,9154,9156,9158],{"class":1102,"line":3660},[1100,9151,6396],{"class":1314},[1100,9153,1822],{"class":1318},[1100,9155,3335],{"class":1314},[1100,9157,2636],{"class":1318},[1100,9159,6405],{"class":1318},[1100,9161,9162],{"class":1102,"line":3676},[1100,9163,3598],{"class":1318},[1100,9165,9166],{"class":1102,"line":3695},[1100,9167,5413],{"class":1318},[1100,9169,9170],{"class":1102,"line":3723},[1100,9171,1383],{"emptyLinePlaceholder":21},[1100,9173,9174],{"class":1102,"line":3730},[1100,9175,6422],{"class":1484},[1100,9177,9178,9180,9182,9184,9186],{"class":1102,"line":3735},[1100,9179,6427],{"class":1123},[1100,9181,1315],{"class":1314},[1100,9183,1819],{"class":1318},[1100,9185,1839],{"class":1601},[1100,9187,1394],{"class":1318},[1100,9189,9190,9192,9194,9196,9198,9200,9202,9204,9206,9208,9210,9212,9214],{"class":1102,"line":3801},[1100,9191,3541],{"class":1304},[1100,9193,1965],{"class":1324},[1100,9195,5944],{"class":1314},[1100,9197,1822],{"class":1318},[1100,9199,3335],{"class":1314},[1100,9201,3856],{"class":1318},[1100,9203,2010],{"class":1314},[1100,9205,1822],{"class":1318},[1100,9207,3835],{"class":1314},[1100,9209,3362],{"class":1318},[1100,9211,3841],{"class":3573},[1100,9213,3551],{"class":1324},[1100,9215,1319],{"class":1318},[1100,9217,9218,9220,9222,9224],{"class":1102,"line":3806},[1100,9219,6368],{"class":1314},[1100,9221,1822],{"class":1318},[1100,9223,6472],{"class":1123},[1100,9225,2682],{"class":1324},[1100,9227,9228],{"class":1102,"line":3811},[1100,9229,3598],{"class":1318},[1100,9231,9232,9234],{"class":1102,"line":3817},[1100,9233,1502],{"class":1318},[1100,9235,1505],{"class":1314},[1100,9237,9238,9240,9242],{"class":1102,"line":3846},[1100,9239,1649],{"class":1318},[1100,9241,5125],{"class":1324},[1100,9243,1579],{"class":1318},[1100,9245,9246],{"class":1102,"line":3887},[1100,9247,1383],{"emptyLinePlaceholder":21},[1100,9249,9250,9252,9254],{"class":1102,"line":3916},[1100,9251,1573],{"class":1318},[1100,9253,1576],{"class":1324},[1100,9255,1579],{"class":1318},[1100,9257,9258,9260,9262,9264,9266,9268,9270,9272],{"class":1102,"line":3928},[1100,9259,1586],{"class":1318},[1100,9261,5440],{"class":1324},[1100,9263,5443],{"class":1601},[1100,9265,1605],{"class":1318},[1100,9267,1532],{"class":1318},[1100,9269,5450],{"class":1110},[1100,9271,1532],{"class":1318},[1100,9273,1579],{"class":1318},[1100,9275,9276,9278,9280,9282,9284],{"class":1102,"line":3944},[1100,9277,1595],{"class":1318},[1100,9279,1576],{"class":1324},[1100,9281,5463],{"class":1318},[1100,9283,8350],{"class":1601},[1100,9285,1579],{"class":1318},[1100,9287,9288,9290,9292],{"class":1102,"line":3958},[1100,9289,1619],{"class":1318},[1100,9291,8360],{"class":1324},[1100,9293,1625],{"class":1318},[1100,9295,9296,9298,9300],{"class":1102,"line":3965},[1100,9297,1630],{"class":1318},[1100,9299,1576],{"class":1324},[1100,9301,1579],{"class":1318},[1100,9303,9304,9306,9308,9310,9312],{"class":1102,"line":3970},[1100,9305,1595],{"class":1318},[1100,9307,1576],{"class":1324},[1100,9309,5463],{"class":1318},[1100,9311,5466],{"class":1601},[1100,9313,1579],{"class":1318},[1100,9315,9317,9319,9321,9323,9325,9327,9329,9331],{"class":9316,"line":3975},[1102,1583],[1100,9318,1619],{"class":1318},[1100,9320,5475],{"class":1324},[1100,9322,5478],{"class":1601},[1100,9324,1605],{"class":1318},[1100,9326,1532],{"class":1318},[1100,9328,6549],{"class":1110},[1100,9330,1532],{"class":1318},[1100,9332,1579],{"class":1318},[1100,9334,9336,9338],{"class":9335,"line":3981},[1102,1583],[1100,9337,5494],{"class":1318},[1100,9339,6560],{"class":1324},[1100,9341,9343,9345,9347,9349,9351],{"class":9342,"line":3998},[1102,1583],[1100,9344,6565],{"class":1601},[1100,9346,1605],{"class":1318},[1100,9348,1532],{"class":1318},[1100,9350,6572],{"class":1110},[1100,9352,5551],{"class":1318},[1100,9354,9355,9357,9359,9361,9363],{"class":1102,"line":4020},[1100,9356,5557],{"class":1601},[1100,9358,1605],{"class":1318},[1100,9360,1532],{"class":1318},[1100,9362,6585],{"class":1110},[1100,9364,5551],{"class":1318},[1100,9366,9367],{"class":1102,"line":4038},[1100,9368,6592],{"class":1601},[1100,9370,9371,9373,9375,9377,9379],{"class":1102,"line":4046},[1100,9372,6597],{"class":1601},[1100,9374,1605],{"class":1318},[1100,9376,1532],{"class":1318},[1100,9378,6604],{"class":1110},[1100,9380,5551],{"class":1318},[1100,9382,9383],{"class":1102,"line":4063},[1100,9384,5617],{"class":1318},[1100,9386,9387,9389,9391,9393,9395,9397,9399,9401,9403,9405,9407],{"class":1102,"line":4084},[1100,9388,5623],{"class":1318},[1100,9390,1576],{"class":1324},[1100,9392,5463],{"class":1318},[1100,9394,371],{"class":1601},[1100,9396,1605],{"class":1318},[1100,9398,1532],{"class":1318},[1100,9400,1879],{"class":1318},[1100,9402,6629],{"class":1314},[1100,9404,1502],{"class":1318},[1100,9406,1532],{"class":1318},[1100,9408,1579],{"class":1318},[1100,9410,9411,9413,9415,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],{"class":1102,"line":4094},[1100,9412,6640],{"class":1318},[1100,9414,1576],{"class":1324},[1100,9416,6645],{"class":1304},[1100,9418,1605],{"class":1318},[1100,9420,1532],{"class":1318},[1100,9422,6652],{"class":1314},[1100,9424,1730],{"class":1318},[1100,9426,6657],{"class":1314},[1100,9428,6660],{"class":1318},[1100,9430,2631],{"class":1314},[1100,9432,1822],{"class":1318},[1100,9434,2212],{"class":1314},[1100,9436,1532],{"class":1318},[1100,9438,6671],{"class":1318},[1100,9440,6674],{"class":1601},[1100,9442,1605],{"class":1318},[1100,9444,6679],{"class":1318},[1100,9446,4481],{"class":1314},[1100,9448,1822],{"class":1318},[1100,9450,2031],{"class":1314},[1100,9452,1502],{"class":1318},[1100,9454,6690],{"class":1110},[1100,9456,5397],{"class":1318},[1100,9458,6695],{"class":1314},[1100,9460,1822],{"class":1318},[1100,9462,6171],{"class":1314},[1100,9464,1502],{"class":1318},[1100,9466,6690],{"class":1110},[1100,9468,5397],{"class":1318},[1100,9470,6708],{"class":1314},[1100,9472,6711],{"class":1318},[1100,9474,1579],{"class":1318},[1100,9476,9477,9479],{"class":1102,"line":4104},[1100,9478,6718],{"class":1318},[1100,9480,6721],{"class":1324},[1100,9482,9483,9485,9487,9489,9491],{"class":1102,"line":4114},[1100,9484,6726],{"class":1601},[1100,9486,1605],{"class":1318},[1100,9488,1532],{"class":1318},[1100,9490,6733],{"class":1110},[1100,9492,5551],{"class":1318},[1100,9494,9495,9497,9499,9501,9503],{"class":1102,"line":4131},[1100,9496,6740],{"class":1601},[1100,9498,1605],{"class":1318},[1100,9500,1532],{"class":1318},[1100,9502,6747],{"class":1110},[1100,9504,5551],{"class":1318},[1100,9506,9507,9509,9511,9513,9515],{"class":1102,"line":4142},[1100,9508,6754],{"class":1601},[1100,9510,1605],{"class":1318},[1100,9512,1532],{"class":1318},[1100,9514,6761],{"class":1110},[1100,9516,5551],{"class":1318},[1100,9518,9519],{"class":1102,"line":4148},[1100,9520,6768],{"class":1318},[1100,9522,9523,9525],{"class":1102,"line":4154},[1100,9524,6773],{"class":1318},[1100,9526,6776],{"class":1324},[1100,9528,9529,9531,9533,9535,9537],{"class":1102,"line":4164},[1100,9530,6781],{"class":1601},[1100,9532,1605],{"class":1318},[1100,9534,1532],{"class":1318},[1100,9536,6747],{"class":1110},[1100,9538,5551],{"class":1318},[1100,9540,9541,9543,9545,9547,9549],{"class":1102,"line":4174},[1100,9542,6794],{"class":1601},[1100,9544,1605],{"class":1318},[1100,9546,1532],{"class":1318},[1100,9548,6801],{"class":1110},[1100,9550,5551],{"class":1318},[1100,9552,9553,9555,9557,9559,9561],{"class":1102,"line":4187},[1100,9554,6808],{"class":1601},[1100,9556,1605],{"class":1318},[1100,9558,1532],{"class":1318},[1100,9560,6815],{"class":1110},[1100,9562,5551],{"class":1318},[1100,9564,9565],{"class":1102,"line":4202},[1100,9566,6822],{"class":1318},[1100,9568,9569,9571,9573],{"class":1102,"line":4207},[1100,9570,6827],{"class":1318},[1100,9572,6830],{"class":1324},[1100,9574,1579],{"class":1318},[1100,9576,9577],{"class":1102,"line":4212},[1100,9578,1383],{"emptyLinePlaceholder":21},[1100,9580,9581,9583,9585,9587,9589,9591,9593,9595,9597],{"class":1102,"line":4222},[1100,9582,6718],{"class":1318},[1100,9584,1576],{"class":1324},[1100,9586,6845],{"class":1304},[1100,9588,1605],{"class":1318},[1100,9590,1532],{"class":1318},[1100,9592,6852],{"class":1123},[1100,9594,6855],{"class":1314},[1100,9596,1532],{"class":1318},[1100,9598,1579],{"class":1318},[1100,9600,9601,9603],{"class":1102,"line":4238},[1100,9602,6773],{"class":1318},[1100,9604,6776],{"class":1324},[1100,9606,9607,9609,9611,9613,9615],{"class":1102,"line":4253},[1100,9608,6870],{"class":1601},[1100,9610,1605],{"class":1318},[1100,9612,1532],{"class":1318},[1100,9614,6877],{"class":1110},[1100,9616,5551],{"class":1318},[1100,9618,9619,9621,9623,9625,9627],{"class":1102,"line":4259},[1100,9620,6781],{"class":1601},[1100,9622,1605],{"class":1318},[1100,9624,1532],{"class":1318},[1100,9626,6747],{"class":1110},[1100,9628,5551],{"class":1318},[1100,9630,9631,9633,9635,9637,9639],{"class":1102,"line":4265},[1100,9632,6794],{"class":1601},[1100,9634,1605],{"class":1318},[1100,9636,1532],{"class":1318},[1100,9638,6902],{"class":1110},[1100,9640,5551],{"class":1318},[1100,9642,9643,9645,9647,9649,9651],{"class":1102,"line":4273},[1100,9644,6808],{"class":1601},[1100,9646,1605],{"class":1318},[1100,9648,1532],{"class":1318},[1100,9650,6815],{"class":1110},[1100,9652,5551],{"class":1318},[1100,9654,9655],{"class":1102,"line":4278},[1100,9656,6822],{"class":1318},[1100,9658,9659,9661,9663,9665,9667,9669,9671,9673,9675,9677,9679,9681,9683],{"class":1102,"line":4284},[1100,9660,6773],{"class":1318},[1100,9662,989],{"class":1324},[1100,9664,6845],{"class":1601},[1100,9666,1605],{"class":1318},[1100,9668,1532],{"class":1318},[1100,9670,6935],{"class":1110},[1100,9672,1532],{"class":1318},[1100,9674,5478],{"class":1601},[1100,9676,1605],{"class":1318},[1100,9678,1532],{"class":1318},[1100,9680,6946],{"class":1110},[1100,9682,1532],{"class":1318},[1100,9684,1579],{"class":1318},[1100,9686,9687],{"class":1102,"line":4304},[1100,9688,6955],{"class":1314},[1100,9690,9691,9693,9695],{"class":1102,"line":4319},[1100,9692,6960],{"class":1318},[1100,9694,989],{"class":1324},[1100,9696,1579],{"class":1318},[1100,9698,9699,9701,9703],{"class":1102,"line":4336},[1100,9700,6827],{"class":1318},[1100,9702,1576],{"class":1324},[1100,9704,1579],{"class":1318},[1100,9706,9707,9709,9711],{"class":1102,"line":4359},[1100,9708,6977],{"class":1318},[1100,9710,1576],{"class":1324},[1100,9712,1579],{"class":1318},[1100,9714,9715,9717,9719],{"class":1102,"line":4370},[1100,9716,6986],{"class":1318},[1100,9718,1576],{"class":1324},[1100,9720,1579],{"class":1318},[1100,9722,9723,9725,9727],{"class":1102,"line":4378},[1100,9724,5520],{"class":1318},[1100,9726,5096],{"class":1324},[1100,9728,1579],{"class":1318},[1100,9730,9731],{"class":1102,"line":4384},[1100,9732,1383],{"emptyLinePlaceholder":21},[1100,9734,9735,9737],{"class":1102,"line":4389},[1100,9736,5494],{"class":1318},[1100,9738,5536],{"class":1324},[1100,9740,9741,9743,9745,9747,9749],{"class":1102,"line":4412},[1100,9742,5542],{"class":1601},[1100,9744,1605],{"class":1318},[1100,9746,1532],{"class":1318},[1100,9748,5207],{"class":1110},[1100,9750,5551],{"class":1318},[1100,9752,9753,9755,9757,9759,9761],{"class":1102,"line":4418},[1100,9754,7025],{"class":1601},[1100,9756,1605],{"class":1318},[1100,9758,1532],{"class":1318},[1100,9760,7032],{"class":1110},[1100,9762,5551],{"class":1318},[1100,9764,9765,9767,9769,9771,9773],{"class":1102,"line":4438},[1100,9766,5572],{"class":1601},[1100,9768,1605],{"class":1318},[1100,9770,1532],{"class":1318},[1100,9772,5579],{"class":1110},[1100,9774,5551],{"class":1318},[1100,9776,9777,9779,9781,9783,9785],{"class":1102,"line":4444},[1100,9778,6597],{"class":1601},[1100,9780,1605],{"class":1318},[1100,9782,1532],{"class":1318},[1100,9784,7057],{"class":1110},[1100,9786,5551],{"class":1318},[1100,9788,9789,9791,9793,9795,9797],{"class":1102,"line":4490},[1100,9790,5602],{"class":1601},[1100,9792,1605],{"class":1318},[1100,9794,1532],{"class":1318},[1100,9796,7070],{"class":1110},[1100,9798,5551],{"class":1318},[1100,9800,9801],{"class":1102,"line":4506},[1100,9802,5617],{"class":1318},[1100,9804,9805,9807],{"class":1102,"line":4539},[1100,9806,5623],{"class":1318},[1100,9808,7083],{"class":1324},[1100,9810,9811,9813,9815,9817,9819],{"class":1102,"line":4553},[1100,9812,7088],{"class":1601},[1100,9814,1605],{"class":1318},[1100,9816,1532],{"class":1318},[1100,9818,6585],{"class":1110},[1100,9820,5551],{"class":1318},[1100,9822,9823,9825,9827,9829,9831],{"class":1102,"line":4561},[1100,9824,7101],{"class":1601},[1100,9826,1605],{"class":1318},[1100,9828,1532],{"class":1318},[1100,9830,5636],{"class":1110},[1100,9832,5551],{"class":1318},[1100,9834,9835,9837,9839,9841,9843],{"class":1102,"line":4566},[1100,9836,7114],{"class":1601},[1100,9838,1605],{"class":1318},[1100,9840,1532],{"class":1318},[1100,9842,7121],{"class":1110},[1100,9844,5551],{"class":1318},[1100,9846,9847,9849,9851,9853,9855],{"class":1102,"line":4573},[1100,9848,7128],{"class":1601},[1100,9850,1605],{"class":1318},[1100,9852,1532],{"class":1318},[1100,9854,7135],{"class":1110},[1100,9856,5551],{"class":1318},[1100,9858,9859],{"class":1102,"line":4578},[1100,9860,7142],{"class":1318},[1100,9862,9863,9865,9867],{"class":1102,"line":4596},[1100,9864,5520],{"class":1318},[1100,9866,5090],{"class":1324},[1100,9868,1579],{"class":1318},[1100,9870,9871,9873,9875],{"class":1102,"line":7177},[1100,9872,5654],{"class":1318},[1100,9874,5475],{"class":1324},[1100,9876,1579],{"class":1318},[1100,9878,9880,9882,9884],{"class":1102,"line":9879},113,[1100,9881,1630],{"class":1318},[1100,9883,1576],{"class":1324},[1100,9885,1579],{"class":1318},[1100,9887,9889,9891,9893],{"class":1102,"line":9888},114,[1100,9890,1640],{"class":1318},[1100,9892,5440],{"class":1324},[1100,9894,1579],{"class":1318},[1100,9896,9898,9900,9902],{"class":1102,"line":9897},115,[1100,9899,1649],{"class":1318},[1100,9901,1576],{"class":1324},[1100,9903,1579],{"class":1318},[989,9905,4639,9906,9909,9910,9912],{},[1050,9907,9908],{},"refreshNuxtData('chats')"," call in the chat page's ",[1050,9911,7245],{}," callback (as shown earlier) ensures the chat list updates automatically when a new title is generated.",[993,9914,9916],{"id":9915},"adding-multi-model-support","Adding multi-model support",[989,9918,9919,9920,9923],{},"One of the benefits of using ",[1043,9921,4608],{"href":1079,"rel":9922},[1047]," is the ability to switch between models seamlessly. This section adds a model selector to the chat.",[1128,9925,9927],{"id":9926},"creating-a-models-composable","Creating a models composable",[989,9929,9930,9931,1328],{},"Define the available models and persist the user's selection using ",[1043,9932,9935],{"href":9933,"rel":9934},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-cookie",[1047],[1050,9936,9937],{},"useCookie",[1291,9939,9940],{},[1091,9941,9944],{"className":1295,"code":9942,"filename":9943,"language":1297,"meta":1096,"style":1096},"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",[1050,9945,9946,9959,9970,10013,10054,10095,10100,10104,10134,10151,10157,10161,10167,10174,10179,10183],{"__ignoreMap":1096},[1100,9947,9948,9950,9952,9955,9957],{"class":1102,"line":1103},[1100,9949,1305],{"class":1304},[1100,9951,5189],{"class":1601},[1100,9953,9954],{"class":1123}," useModels",[1100,9956,1819],{"class":1318},[1100,9958,1394],{"class":1318},[1100,9960,9961,9963,9966,9968],{"class":1102,"line":1120},[1100,9962,2626],{"class":1601},[1100,9964,9965],{"class":1314}," models",[1100,9967,2636],{"class":1318},[1100,9969,1331],{"class":1324},[1100,9971,9972,9975,9977,9979,9981,9983,9985,9987,9989,9991,9993,9995,9997,9999,10002,10004,10006,10009,10011],{"class":1102,"line":1334},[1100,9973,9974],{"class":1318},"    {",[1100,9976,3103],{"class":1324},[1100,9978,1328],{"class":1318},[1100,9980,1405],{"class":1318},[1100,9982,3110],{"class":1110},[1100,9984,1343],{"class":1318},[1100,9986,1730],{"class":1318},[1100,9988,3089],{"class":1324},[1100,9990,1328],{"class":1318},[1100,9992,1405],{"class":1318},[1100,9994,3096],{"class":1110},[1100,9996,1343],{"class":1318},[1100,9998,1730],{"class":1318},[1100,10000,10001],{"class":1324}," icon",[1100,10003,1328],{"class":1318},[1100,10005,1405],{"class":1318},[1100,10007,10008],{"class":1110},"i-simple-icons-openai",[1100,10010,1343],{"class":1318},[1100,10012,3115],{"class":1318},[1100,10014,10015,10017,10019,10021,10023,10025,10027,10029,10031,10033,10035,10037,10039,10041,10043,10045,10047,10050,10052],{"class":1102,"line":1349},[1100,10016,9974],{"class":1318},[1100,10018,3103],{"class":1324},[1100,10020,1328],{"class":1318},[1100,10022,1405],{"class":1318},[1100,10024,3141],{"class":1110},[1100,10026,1343],{"class":1318},[1100,10028,1730],{"class":1318},[1100,10030,3089],{"class":1324},[1100,10032,1328],{"class":1318},[1100,10034,1405],{"class":1318},[1100,10036,3128],{"class":1110},[1100,10038,1343],{"class":1318},[1100,10040,1730],{"class":1318},[1100,10042,10001],{"class":1324},[1100,10044,1328],{"class":1318},[1100,10046,1405],{"class":1318},[1100,10048,10049],{"class":1110},"i-simple-icons-anthropic",[1100,10051,1343],{"class":1318},[1100,10053,3115],{"class":1318},[1100,10055,10056,10058,10060,10062,10064,10066,10068,10070,10072,10074,10076,10078,10080,10082,10084,10086,10088,10091,10093],{"class":1102,"line":1361},[1100,10057,9974],{"class":1318},[1100,10059,3103],{"class":1324},[1100,10061,1328],{"class":1318},[1100,10063,1405],{"class":1318},[1100,10065,3171],{"class":1110},[1100,10067,1343],{"class":1318},[1100,10069,1730],{"class":1318},[1100,10071,3089],{"class":1324},[1100,10073,1328],{"class":1318},[1100,10075,1405],{"class":1318},[1100,10077,3158],{"class":1110},[1100,10079,1343],{"class":1318},[1100,10081,1730],{"class":1318},[1100,10083,10001],{"class":1324},[1100,10085,1328],{"class":1318},[1100,10087,1405],{"class":1318},[1100,10089,10090],{"class":1110},"i-simple-icons-google",[1100,10092,1343],{"class":1318},[1100,10094,3176],{"class":1318},[1100,10096,10097],{"class":1102,"line":1372},[1100,10098,10099],{"class":1324},"  ]\n",[1100,10101,10102],{"class":1102,"line":1380},[1100,10103,1383],{"emptyLinePlaceholder":21},[1100,10105,10106,10108,10110,10112,10115,10117,10119,10121,10123,10125,10128,10130,10132],{"class":1102,"line":1386},[1100,10107,2626],{"class":1601},[1100,10109,3281],{"class":1314},[1100,10111,2636],{"class":1318},[1100,10113,10114],{"class":1123}," useCookie",[1100,10116,1573],{"class":1318},[1100,10118,3254],{"class":1106},[1100,10120,2679],{"class":1318},[1100,10122,1315],{"class":1324},[1100,10124,1343],{"class":1318},[1100,10126,10127],{"class":1110},"ai-model",[1100,10129,1343],{"class":1318},[1100,10131,1730],{"class":1318},[1100,10133,1394],{"class":1318},[1100,10135,10136,10139,10141,10143,10145,10147,10149],{"class":1102,"line":1397},[1100,10137,10138],{"class":1123},"    default",[1100,10140,1328],{"class":1318},[1100,10142,4975],{"class":1318},[1100,10144,1839],{"class":1601},[1100,10146,1405],{"class":1318},[1100,10148,3128],{"class":1110},[1100,10150,1369],{"class":1318},[1100,10152,10153,10155],{"class":1102,"line":1413},[1100,10154,2427],{"class":1318},[1100,10156,1505],{"class":1324},[1100,10158,10159],{"class":1102,"line":1419},[1100,10160,1383],{"emptyLinePlaceholder":21},[1100,10162,10163,10165],{"class":1102,"line":1424},[1100,10164,2853],{"class":1304},[1100,10166,1394],{"class":1318},[1100,10168,10169,10172],{"class":1102,"line":1447},[1100,10170,10171],{"class":1314},"    models",[1100,10173,1346],{"class":1318},[1100,10175,10176],{"class":1102,"line":1452},[1100,10177,10178],{"class":1314},"    model\n",[1100,10180,10181],{"class":1102,"line":1462},[1100,10182,3598],{"class":1318},[1100,10184,10185],{"class":1102,"line":1472},[1100,10186,5413],{"class":1318},[1128,10188,10190],{"id":10189},"building-the-model-selector","Building the model selector",[989,10192,1656,10193,10198],{},[1043,10194,10195],{"href":734},[1050,10196,10197],{},"USelectMenu"," component that displays the available models:",[1291,10200,10201],{},[1091,10202,10205],{"className":1563,"code":10203,"filename":10204,"language":34,"meta":1096,"style":1096},"\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",[1050,10206,10207,10227,10260,10264,10281,10285,10303,10335,10339,10347,10351,10359,10366,10379,10393,10407,10420,10433,10438],{"__ignoreMap":1096},[1100,10208,10209,10211,10213,10215,10217,10219,10221,10223,10225],{"class":1102,"line":1103},[1100,10210,1573],{"class":1318},[1100,10212,5125],{"class":1324},[1100,10214,5128],{"class":1601},[1100,10216,5131],{"class":1601},[1100,10218,1605],{"class":1318},[1100,10220,1532],{"class":1318},[1100,10222,1297],{"class":1110},[1100,10224,1532],{"class":1318},[1100,10226,1579],{"class":1318},[1100,10228,10229,10231,10234,10236,10239,10241,10243,10245,10247,10249,10252,10254,10256,10258],{"class":1102,"line":1120},[1100,10230,3074],{"class":1601},[1100,10232,10233],{"class":1314}," model ",[1100,10235,1605],{"class":1318},[1100,10237,10238],{"class":1123}," defineModel",[1100,10240,1573],{"class":1318},[1100,10242,3254],{"class":1106},[1100,10244,2679],{"class":1318},[1100,10246,1315],{"class":1314},[1100,10248,1879],{"class":1318},[1100,10250,10251],{"class":1324}," required",[1100,10253,1328],{"class":1318},[1100,10255,4182],{"class":1480},[1100,10257,1746],{"class":1318},[1100,10259,1505],{"class":1314},[1100,10261,10262],{"class":1102,"line":1334},[1100,10263,1383],{"emptyLinePlaceholder":21},[1100,10265,10266,10268,10270,10273,10275,10277,10279],{"class":1102,"line":1349},[1100,10267,3074],{"class":1601},[1100,10269,1724],{"class":1318},[1100,10271,10272],{"class":1314}," models ",[1100,10274,1502],{"class":1318},[1100,10276,2636],{"class":1318},[1100,10278,9954],{"class":1123},[1100,10280,2682],{"class":1314},[1100,10282,10283],{"class":1102,"line":1361},[1100,10284,1383],{"emptyLinePlaceholder":21},[1100,10286,10287,10289,10292,10294,10296,10298,10300],{"class":1102,"line":1372},[1100,10288,3074],{"class":1601},[1100,10290,10291],{"class":1314}," selectedModel ",[1100,10293,1605],{"class":1318},[1100,10295,7676],{"class":1123},[1100,10297,1315],{"class":1314},[1100,10299,1819],{"class":1318},[1100,10301,10302],{"class":1601}," =>\n",[1100,10304,10305,10308,10310,10313,10315,10317,10319,10321,10323,10326,10328,10330,10332],{"class":1102,"line":1380},[1100,10306,10307],{"class":1314},"  models",[1100,10309,1822],{"class":1318},[1100,10311,10312],{"class":1123},"find",[1100,10314,1315],{"class":1314},[1100,10316,3350],{"class":1956},[1100,10318,1839],{"class":1601},[1100,10320,3355],{"class":1314},[1100,10322,1822],{"class":1318},[1100,10324,10325],{"class":1314},"value ",[1100,10327,7755],{"class":1318},[1100,10329,3281],{"class":1314},[1100,10331,1822],{"class":1318},[1100,10333,10334],{"class":1314},"value)\n",[1100,10336,10337],{"class":1102,"line":1386},[1100,10338,1505],{"class":1314},[1100,10340,10341,10343,10345],{"class":1102,"line":1397},[1100,10342,1649],{"class":1318},[1100,10344,5125],{"class":1324},[1100,10346,1579],{"class":1318},[1100,10348,10349],{"class":1102,"line":1413},[1100,10350,1383],{"emptyLinePlaceholder":21},[1100,10352,10353,10355,10357],{"class":1102,"line":1419},[1100,10354,1573],{"class":1318},[1100,10356,1576],{"class":1324},[1100,10358,1579],{"class":1318},[1100,10360,10361,10363],{"class":1102,"line":1424},[1100,10362,1586],{"class":1318},[1100,10364,10365],{"class":1324},"USelectMenu\n",[1100,10367,10368,10371,10373,10375,10377],{"class":1102,"line":1447},[1100,10369,10370],{"class":1601},"    v-model",[1100,10372,1605],{"class":1318},[1100,10374,1532],{"class":1318},[1100,10376,4652],{"class":1110},[1100,10378,5551],{"class":1318},[1100,10380,10381,10384,10386,10388,10391],{"class":1102,"line":1452},[1100,10382,10383],{"class":1601},"    :items",[1100,10385,1605],{"class":1318},[1100,10387,1532],{"class":1318},[1100,10389,10390],{"class":1110},"models",[1100,10392,5551],{"class":1318},[1100,10394,10395,10398,10400,10402,10405],{"class":1102,"line":1462},[1100,10396,10397],{"class":1601},"    :icon",[1100,10399,1605],{"class":1318},[1100,10401,1532],{"class":1318},[1100,10403,10404],{"class":1110},"selectedModel?.icon",[1100,10406,5551],{"class":1318},[1100,10408,10409,10412,10414,10416,10418],{"class":1102,"line":1472},[1100,10410,10411],{"class":1601},"    variant",[1100,10413,1605],{"class":1318},[1100,10415,1532],{"class":1318},[1100,10417,7957],{"class":1110},[1100,10419,5551],{"class":1318},[1100,10421,10422,10425,10427,10429,10431],{"class":1102,"line":1488},[1100,10423,10424],{"class":1601},"    value-key",[1100,10426,1605],{"class":1318},[1100,10428,1532],{"class":1318},[1100,10430,3335],{"class":1110},[1100,10432,5551],{"class":1318},[1100,10434,10435],{"class":1102,"line":1494},[1100,10436,10437],{"class":1318},"  \u002F>\n",[1100,10439,10440,10442,10444],{"class":1102,"line":1499},[1100,10441,1649],{"class":1318},[1100,10443,1576],{"class":1324},[1100,10445,1579],{"class":1318},[1128,10447,10449],{"id":10448},"integrating-with-the-chat","Integrating with the chat",[989,10451,10452],{},"Update the chat page to include the model selector and pass the selected model to the server:",[1291,10454,10455],{},[1709,10456,10457],{},[1091,10458,10461],{"className":1563,"code":10459,"filename":5744,"highlights":10460,"language":34,"meta":1096,"style":1096},"\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",[1386,2342,2374,2390,4359,4370,4378],[1050,10462,10463,10483,10509,10527,10545,10549,10561,10573,10590,10594,10636,10640,10656,10696,10700,10704,10720,10724,10740,10758,10776,10790,10816,10824,10840,10845,10854,10866,10890,10904,10908,10912,10924,10936,10950,10964,10976,10982,10986,10992,10996,11014,11024,11044,11070,11082,11086,11090,11094,11106,11134,11144,11148,11154,11162,11166,11174,11192,11204,11212,11220,11232,11250,11256,11268,11280,11284,11296,11300,11324,11390,11396,11408,11420,11432,11436,11442,11454,11466,11478,11482,11490,11494,11514,11520,11532,11544,11556,11568,11572,11600,11604,11612,11620,11629,11638,11647,11651,11657,11669,11681,11693,11705,11717,11721,11734,11754,11762,11766,11772,11784,11796,11808,11820,11824,11832,11841,11850,11859],{"__ignoreMap":1096},[1100,10464,10465,10467,10469,10471,10473,10475,10477,10479,10481],{"class":1102,"line":1103},[1100,10466,1573],{"class":1318},[1100,10468,5125],{"class":1324},[1100,10470,5128],{"class":1601},[1100,10472,5131],{"class":1601},[1100,10474,1605],{"class":1318},[1100,10476,1532],{"class":1318},[1100,10478,1297],{"class":1110},[1100,10480,1532],{"class":1318},[1100,10482,1579],{"class":1318},[1100,10484,10485,10487,10489,10491,10493,10495,10497,10499,10501,10503,10505,10507],{"class":1102,"line":1120},[1100,10486,1721],{"class":1304},[1100,10488,1724],{"class":1318},[1100,10490,5777],{"class":1314},[1100,10492,1730],{"class":1318},[1100,10494,5782],{"class":1314},[1100,10496,1730],{"class":1318},[1100,10498,5787],{"class":1314},[1100,10500,1746],{"class":1318},[1100,10502,1749],{"class":1304},[1100,10504,1405],{"class":1318},[1100,10506,2547],{"class":1110},[1100,10508,1369],{"class":1318},[1100,10510,10511,10513,10515,10517,10519,10521,10523,10525],{"class":1102,"line":1334},[1100,10512,1721],{"class":1304},[1100,10514,1724],{"class":1318},[1100,10516,5807],{"class":1314},[1100,10518,1746],{"class":1318},[1100,10520,1749],{"class":1304},[1100,10522,1405],{"class":1318},[1100,10524,5816],{"class":1110},[1100,10526,1369],{"class":1318},[1100,10528,10529,10531,10533,10535,10537,10539,10541,10543],{"class":1102,"line":1349},[1100,10530,1721],{"class":1304},[1100,10532,1724],{"class":1318},[1100,10534,5828],{"class":1314},[1100,10536,1746],{"class":1318},[1100,10538,1749],{"class":1304},[1100,10540,1405],{"class":1318},[1100,10542,5837],{"class":1110},[1100,10544,1369],{"class":1318},[1100,10546,10547],{"class":1102,"line":1361},[1100,10548,1383],{"emptyLinePlaceholder":21},[1100,10550,10551,10553,10555,10557,10559],{"class":1102,"line":1372},[1100,10552,3074],{"class":1601},[1100,10554,5850],{"class":1314},[1100,10556,1605],{"class":1318},[1100,10558,5855],{"class":1123},[1100,10560,2682],{"class":1314},[1100,10562,10563,10565,10567,10569,10571],{"class":1102,"line":1380},[1100,10564,3074],{"class":1601},[1100,10566,5864],{"class":1314},[1100,10568,1605],{"class":1318},[1100,10570,5869],{"class":1123},[1100,10572,2682],{"class":1314},[1100,10574,10576,10578,10580,10582,10584,10586,10588],{"class":10575,"line":1386},[1102,1583],[1100,10577,3074],{"class":1601},[1100,10579,1724],{"class":1318},[1100,10581,10233],{"class":1314},[1100,10583,1502],{"class":1318},[1100,10585,2636],{"class":1318},[1100,10587,9954],{"class":1123},[1100,10589,2682],{"class":1314},[1100,10591,10592],{"class":1102,"line":1397},[1100,10593,1383],{"emptyLinePlaceholder":21},[1100,10595,10596,10598,10600,10602,10604,10606,10608,10610,10612,10614,10616,10618,10620,10622,10624,10626,10628,10630,10632,10634],{"class":1102,"line":1413},[1100,10597,3074],{"class":1601},[1100,10599,1724],{"class":1318},[1100,10601,5889],{"class":1324},[1100,10603,1328],{"class":1318},[1100,10605,5894],{"class":1314},[1100,10607,1502],{"class":1318},[1100,10609,2636],{"class":1318},[1100,10611,2639],{"class":1304},[1100,10613,5903],{"class":1123},[1100,10615,1315],{"class":1314},[1100,10617,3690],{"class":1318},[1100,10619,5910],{"class":1110},[1100,10621,5397],{"class":1318},[1100,10623,5915],{"class":1314},[1100,10625,1822],{"class":1318},[1100,10627,5920],{"class":1314},[1100,10629,1822],{"class":1318},[1100,10631,2031],{"class":1314},[1100,10633,5406],{"class":1318},[1100,10635,1505],{"class":1314},[1100,10637,10638],{"class":1102,"line":1419},[1100,10639,1383],{"emptyLinePlaceholder":21},[1100,10641,10642,10644,10646,10648,10650,10652,10654],{"class":1102,"line":1424},[1100,10643,5937],{"class":1304},[1100,10645,1965],{"class":1314},[1100,10647,3546],{"class":1318},[1100,10649,5944],{"class":1314},[1100,10651,1822],{"class":1318},[1100,10653,5949],{"class":1314},[1100,10655,1319],{"class":1318},[1100,10657,10658,10660,10662,10664,10666,10668,10670,10672,10674,10676,10678,10680,10682,10684,10686,10688,10690,10692,10694],{"class":1102,"line":1447},[1100,10659,5956],{"class":1304},[1100,10661,2912],{"class":1123},[1100,10663,1315],{"class":1324},[1100,10665,1879],{"class":1318},[1100,10667,3568],{"class":1324},[1100,10669,1328],{"class":1318},[1100,10671,3574],{"class":3573},[1100,10673,1730],{"class":1318},[1100,10675,3579],{"class":1324},[1100,10677,1328],{"class":1318},[1100,10679,1405],{"class":1318},[1100,10681,3586],{"class":1110},[1100,10683,1343],{"class":1318},[1100,10685,1730],{"class":1318},[1100,10687,5985],{"class":1324},[1100,10689,1328],{"class":1318},[1100,10691,4182],{"class":1480},[1100,10693,1746],{"class":1318},[1100,10695,1505],{"class":1324},[1100,10697,10698],{"class":1102,"line":1452},[1100,10699,5413],{"class":1318},[1100,10701,10702],{"class":1102,"line":1462},[1100,10703,1383],{"emptyLinePlaceholder":21},[1100,10705,10706,10708,10710,10712,10714,10716,10718],{"class":1102,"line":1472},[1100,10707,3074],{"class":1601},[1100,10709,5148],{"class":1314},[1100,10711,1605],{"class":1318},[1100,10713,5153],{"class":1123},[1100,10715,1315],{"class":1314},[1100,10717,5158],{"class":1318},[1100,10719,1505],{"class":1314},[1100,10721,10722],{"class":1102,"line":1488},[1100,10723,1383],{"emptyLinePlaceholder":21},[1100,10725,10726,10728,10730,10732,10734,10736,10738],{"class":1102,"line":1494},[1100,10727,3074],{"class":1601},[1100,10729,6034],{"class":1314},[1100,10731,1605],{"class":1318},[1100,10733,1916],{"class":1318},[1100,10735,5807],{"class":1123},[1100,10737,1315],{"class":1314},[1100,10739,1319],{"class":1318},[1100,10741,10742,10744,10746,10748,10750,10752,10754,10756],{"class":1102,"line":1499},[1100,10743,1812],{"class":1324},[1100,10745,1328],{"class":1318},[1100,10747,6054],{"class":1314},[1100,10749,1822],{"class":1318},[1100,10751,3335],{"class":1314},[1100,10753,1822],{"class":1318},[1100,10755,2031],{"class":1314},[1100,10757,1346],{"class":1318},[1100,10759,10760,10762,10764,10766,10768,10770,10772,10774],{"class":1102,"line":2288},[1100,10761,1972],{"class":1324},[1100,10763,1328],{"class":1318},[1100,10765,6054],{"class":1314},[1100,10767,1822],{"class":1318},[1100,10769,3335],{"class":1314},[1100,10771,1822],{"class":1318},[1100,10773,2010],{"class":1314},[1100,10775,1346],{"class":1318},[1100,10777,10778,10780,10782,10784,10786,10788],{"class":1102,"line":2301},[1100,10779,6089],{"class":1324},[1100,10781,1328],{"class":1318},[1100,10783,1916],{"class":1318},[1100,10785,5777],{"class":1123},[1100,10787,1315],{"class":1314},[1100,10789,1319],{"class":1318},[1100,10791,10792,10794,10796,10798,10800,10802,10804,10806,10808,10810,10812,10814],{"class":1102,"line":2331},[1100,10793,6105],{"class":1324},[1100,10795,1328],{"class":1318},[1100,10797,3684],{"class":1318},[1100,10799,5910],{"class":1110},[1100,10801,5397],{"class":1318},[1100,10803,5944],{"class":1314},[1100,10805,1822],{"class":1318},[1100,10807,3335],{"class":1314},[1100,10809,1822],{"class":1318},[1100,10811,2031],{"class":1314},[1100,10813,5406],{"class":1318},[1100,10815,1346],{"class":1318},[1100,10817,10818,10820,10822],{"class":1102,"line":2337},[1100,10819,5295],{"class":1324},[1100,10821,1328],{"class":1318},[1100,10823,1394],{"class":1318},[1100,10825,10827,10829,10831,10833,10835,10837],{"class":10826,"line":2342},[1102,1583],[1100,10828,3663],{"class":1324},[1100,10830,1328],{"class":1318},[1100,10832,3281],{"class":1314},[1100,10834,1822],{"class":1318},[1100,10836,10325],{"class":1314},[1100,10838,10839],{"class":1484},"\u002F\u002F Pass the selected model\n",[1100,10841,10843],{"class":10842,"line":2374},[1102,1583],[1100,10844,1491],{"class":1318},[1100,10846,10848,10850,10852],{"class":10847,"line":2390},[1102,1583],[1100,10849,2427],{"class":1318},[1100,10851,1896],{"class":1314},[1100,10853,1346],{"class":1318},[1100,10855,10856,10858,10860,10862,10864],{"class":1102,"line":2408},[1100,10857,6141],{"class":1324},[1100,10859,1315],{"class":1318},[1100,10861,6146],{"class":1956},[1100,10863,1896],{"class":1318},[1100,10865,1394],{"class":1318},[1100,10867,10868,10870,10872,10874,10876,10878,10880,10882,10884,10886,10888],{"class":1102,"line":2424},[1100,10869,6162],{"class":1304},[1100,10871,1965],{"class":1324},[1100,10873,6146],{"class":1314},[1100,10875,1822],{"class":1318},[1100,10877,6171],{"class":1314},[1100,10879,3362],{"class":1318},[1100,10881,1405],{"class":1318},[1100,10883,4329],{"class":1110},[1100,10885,1343],{"class":1318},[1100,10887,3551],{"class":1324},[1100,10889,1319],{"class":1318},[1100,10891,10892,10894,10896,10898,10900,10902],{"class":1102,"line":2432},[1100,10893,6189],{"class":1123},[1100,10895,1315],{"class":1324},[1100,10897,1343],{"class":1318},[1100,10899,1801],{"class":1110},[1100,10901,1343],{"class":1318},[1100,10903,1505],{"class":1324},[1100,10905,10906],{"class":1102,"line":3427},[1100,10907,1491],{"class":1318},[1100,10909,10910],{"class":1102,"line":3440},[1100,10911,1416],{"class":1318},[1100,10913,10914,10916,10918,10920,10922],{"class":1102,"line":3445},[1100,10915,6215],{"class":1324},[1100,10917,1315],{"class":1318},[1100,10919,6220],{"class":1956},[1100,10921,1896],{"class":1318},[1100,10923,1394],{"class":1318},[1100,10925,10926,10928,10930,10932,10934],{"class":1102,"line":3451},[1100,10927,6230],{"class":1314},[1100,10929,1822],{"class":1318},[1100,10931,6235],{"class":1123},[1100,10933,1315],{"class":1324},[1100,10935,1319],{"class":1318},[1100,10937,10938,10940,10942,10944,10946,10948],{"class":1102,"line":3482},[1100,10939,6245],{"class":1324},[1100,10941,1328],{"class":1318},[1100,10943,1405],{"class":1318},[1100,10945,497],{"class":1110},[1100,10947,1343],{"class":1318},[1100,10949,1346],{"class":1318},[1100,10951,10952,10954,10956,10958,10960,10962],{"class":1102,"line":3526},[1100,10953,6261],{"class":1324},[1100,10955,1328],{"class":1318},[1100,10957,6266],{"class":1314},[1100,10959,1822],{"class":1318},[1100,10961,4481],{"class":1314},[1100,10963,1346],{"class":1318},[1100,10965,10966,10968,10970,10972,10974],{"class":1102,"line":3533},[1100,10967,6278],{"class":1324},[1100,10969,1328],{"class":1318},[1100,10971,1405],{"class":1318},[1100,10973,6220],{"class":1110},[1100,10975,1369],{"class":1318},[1100,10977,10978,10980],{"class":1102,"line":3538},[1100,10979,3389],{"class":1318},[1100,10981,1505],{"class":1324},[1100,10983,10984],{"class":1102,"line":3556},[1100,10985,3598],{"class":1318},[1100,10987,10988,10990],{"class":1102,"line":3595},[1100,10989,1502],{"class":1318},[1100,10991,1505],{"class":1314},[1100,10993,10994],{"class":1102,"line":3601},[1100,10995,1383],{"emptyLinePlaceholder":21},[1100,10997,10998,11000,11002,11004,11006,11008,11010,11012],{"class":1102,"line":3606},[1100,10999,6314],{"class":1601},[1100,11001,6317],{"class":1123},[1100,11003,1315],{"class":1318},[1100,11005,6322],{"class":1956},[1100,11007,1328],{"class":1318},[1100,11009,6327],{"class":1106},[1100,11011,1896],{"class":1318},[1100,11013,1394],{"class":1318},[1100,11015,11016,11018,11020,11022],{"class":1102,"line":3612},[1100,11017,6336],{"class":1314},[1100,11019,1822],{"class":1318},[1100,11021,6341],{"class":1123},[1100,11023,2682],{"class":1324},[1100,11025,11026,11028,11030,11032,11034,11036,11038,11040,11042],{"class":1102,"line":3632},[1100,11027,3541],{"class":1304},[1100,11029,1965],{"class":1324},[1100,11031,5207],{"class":1314},[1100,11033,1822],{"class":1318},[1100,11035,3335],{"class":1314},[1100,11037,1822],{"class":1318},[1100,11039,5216],{"class":1123},[1100,11041,5219],{"class":1324},[1100,11043,1319],{"class":1318},[1100,11045,11046,11048,11050,11052,11054,11056,11058,11060,11062,11064,11066,11068],{"class":1102,"line":3660},[1100,11047,6368],{"class":1314},[1100,11049,1822],{"class":1318},[1100,11051,6373],{"class":1123},[1100,11053,1315],{"class":1324},[1100,11055,1879],{"class":1318},[1100,11057,1733],{"class":1324},[1100,11059,1328],{"class":1318},[1100,11061,5351],{"class":1314},[1100,11063,1822],{"class":1318},[1100,11065,3335],{"class":1314},[1100,11067,1746],{"class":1318},[1100,11069,1505],{"class":1324},[1100,11071,11072,11074,11076,11078,11080],{"class":1102,"line":3676},[1100,11073,6396],{"class":1314},[1100,11075,1822],{"class":1318},[1100,11077,3335],{"class":1314},[1100,11079,2636],{"class":1318},[1100,11081,6405],{"class":1318},[1100,11083,11084],{"class":1102,"line":3695},[1100,11085,3598],{"class":1318},[1100,11087,11088],{"class":1102,"line":3723},[1100,11089,5413],{"class":1318},[1100,11091,11092],{"class":1102,"line":3730},[1100,11093,1383],{"emptyLinePlaceholder":21},[1100,11095,11096,11098,11100,11102,11104],{"class":1102,"line":3735},[1100,11097,6427],{"class":1123},[1100,11099,1315],{"class":1314},[1100,11101,1819],{"class":1318},[1100,11103,1839],{"class":1601},[1100,11105,1394],{"class":1318},[1100,11107,11108,11110,11112,11114,11116,11118,11120,11122,11124,11126,11128,11130,11132],{"class":1102,"line":3801},[1100,11109,3541],{"class":1304},[1100,11111,1965],{"class":1324},[1100,11113,5944],{"class":1314},[1100,11115,1822],{"class":1318},[1100,11117,3335],{"class":1314},[1100,11119,3856],{"class":1318},[1100,11121,2010],{"class":1314},[1100,11123,1822],{"class":1318},[1100,11125,3835],{"class":1314},[1100,11127,3362],{"class":1318},[1100,11129,3841],{"class":3573},[1100,11131,3551],{"class":1324},[1100,11133,1319],{"class":1318},[1100,11135,11136,11138,11140,11142],{"class":1102,"line":3806},[1100,11137,6368],{"class":1314},[1100,11139,1822],{"class":1318},[1100,11141,6472],{"class":1123},[1100,11143,2682],{"class":1324},[1100,11145,11146],{"class":1102,"line":3811},[1100,11147,3598],{"class":1318},[1100,11149,11150,11152],{"class":1102,"line":3817},[1100,11151,1502],{"class":1318},[1100,11153,1505],{"class":1314},[1100,11155,11156,11158,11160],{"class":1102,"line":3846},[1100,11157,1649],{"class":1318},[1100,11159,5125],{"class":1324},[1100,11161,1579],{"class":1318},[1100,11163,11164],{"class":1102,"line":3887},[1100,11165,1383],{"emptyLinePlaceholder":21},[1100,11167,11168,11170,11172],{"class":1102,"line":3916},[1100,11169,1573],{"class":1318},[1100,11171,1576],{"class":1324},[1100,11173,1579],{"class":1318},[1100,11175,11176,11178,11180,11182,11184,11186,11188,11190],{"class":1102,"line":3928},[1100,11177,1586],{"class":1318},[1100,11179,5440],{"class":1324},[1100,11181,5443],{"class":1601},[1100,11183,1605],{"class":1318},[1100,11185,1532],{"class":1318},[1100,11187,5450],{"class":1110},[1100,11189,1532],{"class":1318},[1100,11191,1579],{"class":1318},[1100,11193,11194,11196,11198,11200,11202],{"class":1102,"line":3944},[1100,11195,1595],{"class":1318},[1100,11197,1576],{"class":1324},[1100,11199,5463],{"class":1318},[1100,11201,8350],{"class":1601},[1100,11203,1579],{"class":1318},[1100,11205,11206,11208,11210],{"class":1102,"line":3958},[1100,11207,1619],{"class":1318},[1100,11209,8360],{"class":1324},[1100,11211,1625],{"class":1318},[1100,11213,11214,11216,11218],{"class":1102,"line":3965},[1100,11215,1630],{"class":1318},[1100,11217,1576],{"class":1324},[1100,11219,1579],{"class":1318},[1100,11221,11222,11224,11226,11228,11230],{"class":1102,"line":3970},[1100,11223,1595],{"class":1318},[1100,11225,1576],{"class":1324},[1100,11227,5463],{"class":1318},[1100,11229,5466],{"class":1601},[1100,11231,1579],{"class":1318},[1100,11233,11234,11236,11238,11240,11242,11244,11246,11248],{"class":1102,"line":3975},[1100,11235,1619],{"class":1318},[1100,11237,5475],{"class":1324},[1100,11239,5478],{"class":1601},[1100,11241,1605],{"class":1318},[1100,11243,1532],{"class":1318},[1100,11245,6549],{"class":1110},[1100,11247,1532],{"class":1318},[1100,11249,1579],{"class":1318},[1100,11251,11252,11254],{"class":1102,"line":3981},[1100,11253,5494],{"class":1318},[1100,11255,6560],{"class":1324},[1100,11257,11258,11260,11262,11264,11266],{"class":1102,"line":3998},[1100,11259,6565],{"class":1601},[1100,11261,1605],{"class":1318},[1100,11263,1532],{"class":1318},[1100,11265,6572],{"class":1110},[1100,11267,5551],{"class":1318},[1100,11269,11270,11272,11274,11276,11278],{"class":1102,"line":4020},[1100,11271,5557],{"class":1601},[1100,11273,1605],{"class":1318},[1100,11275,1532],{"class":1318},[1100,11277,6585],{"class":1110},[1100,11279,5551],{"class":1318},[1100,11281,11282],{"class":1102,"line":4038},[1100,11283,6592],{"class":1601},[1100,11285,11286,11288,11290,11292,11294],{"class":1102,"line":4046},[1100,11287,6597],{"class":1601},[1100,11289,1605],{"class":1318},[1100,11291,1532],{"class":1318},[1100,11293,6604],{"class":1110},[1100,11295,5551],{"class":1318},[1100,11297,11298],{"class":1102,"line":4063},[1100,11299,5617],{"class":1318},[1100,11301,11302,11304,11306,11308,11310,11312,11314,11316,11318,11320,11322],{"class":1102,"line":4084},[1100,11303,5623],{"class":1318},[1100,11305,1576],{"class":1324},[1100,11307,5463],{"class":1318},[1100,11309,371],{"class":1601},[1100,11311,1605],{"class":1318},[1100,11313,1532],{"class":1318},[1100,11315,1879],{"class":1318},[1100,11317,6629],{"class":1314},[1100,11319,1502],{"class":1318},[1100,11321,1532],{"class":1318},[1100,11323,1579],{"class":1318},[1100,11325,11326,11328,11330,11332,11334,11336,11338,11340,11342,11344,11346,11348,11350,11352,11354,11356,11358,11360,11362,11364,11366,11368,11370,11372,11374,11376,11378,11380,11382,11384,11386,11388],{"class":1102,"line":4094},[1100,11327,6640],{"class":1318},[1100,11329,1576],{"class":1324},[1100,11331,6645],{"class":1304},[1100,11333,1605],{"class":1318},[1100,11335,1532],{"class":1318},[1100,11337,6652],{"class":1314},[1100,11339,1730],{"class":1318},[1100,11341,6657],{"class":1314},[1100,11343,6660],{"class":1318},[1100,11345,2631],{"class":1314},[1100,11347,1822],{"class":1318},[1100,11349,2212],{"class":1314},[1100,11351,1532],{"class":1318},[1100,11353,6671],{"class":1318},[1100,11355,6674],{"class":1601},[1100,11357,1605],{"class":1318},[1100,11359,6679],{"class":1318},[1100,11361,4481],{"class":1314},[1100,11363,1822],{"class":1318},[1100,11365,2031],{"class":1314},[1100,11367,1502],{"class":1318},[1100,11369,6690],{"class":1110},[1100,11371,5397],{"class":1318},[1100,11373,6695],{"class":1314},[1100,11375,1822],{"class":1318},[1100,11377,6171],{"class":1314},[1100,11379,1502],{"class":1318},[1100,11381,6690],{"class":1110},[1100,11383,5397],{"class":1318},[1100,11385,6708],{"class":1314},[1100,11387,6711],{"class":1318},[1100,11389,1579],{"class":1318},[1100,11391,11392,11394],{"class":1102,"line":4104},[1100,11393,6718],{"class":1318},[1100,11395,6721],{"class":1324},[1100,11397,11398,11400,11402,11404,11406],{"class":1102,"line":4114},[1100,11399,6726],{"class":1601},[1100,11401,1605],{"class":1318},[1100,11403,1532],{"class":1318},[1100,11405,6733],{"class":1110},[1100,11407,5551],{"class":1318},[1100,11409,11410,11412,11414,11416,11418],{"class":1102,"line":4131},[1100,11411,6740],{"class":1601},[1100,11413,1605],{"class":1318},[1100,11415,1532],{"class":1318},[1100,11417,6747],{"class":1110},[1100,11419,5551],{"class":1318},[1100,11421,11422,11424,11426,11428,11430],{"class":1102,"line":4142},[1100,11423,6754],{"class":1601},[1100,11425,1605],{"class":1318},[1100,11427,1532],{"class":1318},[1100,11429,6761],{"class":1110},[1100,11431,5551],{"class":1318},[1100,11433,11434],{"class":1102,"line":4148},[1100,11435,6768],{"class":1318},[1100,11437,11438,11440],{"class":1102,"line":4154},[1100,11439,6773],{"class":1318},[1100,11441,6776],{"class":1324},[1100,11443,11444,11446,11448,11450,11452],{"class":1102,"line":4164},[1100,11445,6781],{"class":1601},[1100,11447,1605],{"class":1318},[1100,11449,1532],{"class":1318},[1100,11451,6747],{"class":1110},[1100,11453,5551],{"class":1318},[1100,11455,11456,11458,11460,11462,11464],{"class":1102,"line":4174},[1100,11457,6794],{"class":1601},[1100,11459,1605],{"class":1318},[1100,11461,1532],{"class":1318},[1100,11463,6801],{"class":1110},[1100,11465,5551],{"class":1318},[1100,11467,11468,11470,11472,11474,11476],{"class":1102,"line":4187},[1100,11469,6808],{"class":1601},[1100,11471,1605],{"class":1318},[1100,11473,1532],{"class":1318},[1100,11475,6815],{"class":1110},[1100,11477,5551],{"class":1318},[1100,11479,11480],{"class":1102,"line":4202},[1100,11481,6822],{"class":1318},[1100,11483,11484,11486,11488],{"class":1102,"line":4207},[1100,11485,6827],{"class":1318},[1100,11487,6830],{"class":1324},[1100,11489,1579],{"class":1318},[1100,11491,11492],{"class":1102,"line":4212},[1100,11493,1383],{"emptyLinePlaceholder":21},[1100,11495,11496,11498,11500,11502,11504,11506,11508,11510,11512],{"class":1102,"line":4222},[1100,11497,6718],{"class":1318},[1100,11499,1576],{"class":1324},[1100,11501,6845],{"class":1304},[1100,11503,1605],{"class":1318},[1100,11505,1532],{"class":1318},[1100,11507,6852],{"class":1123},[1100,11509,6855],{"class":1314},[1100,11511,1532],{"class":1318},[1100,11513,1579],{"class":1318},[1100,11515,11516,11518],{"class":1102,"line":4238},[1100,11517,6773],{"class":1318},[1100,11519,6776],{"class":1324},[1100,11521,11522,11524,11526,11528,11530],{"class":1102,"line":4253},[1100,11523,6870],{"class":1601},[1100,11525,1605],{"class":1318},[1100,11527,1532],{"class":1318},[1100,11529,6877],{"class":1110},[1100,11531,5551],{"class":1318},[1100,11533,11534,11536,11538,11540,11542],{"class":1102,"line":4259},[1100,11535,6781],{"class":1601},[1100,11537,1605],{"class":1318},[1100,11539,1532],{"class":1318},[1100,11541,6747],{"class":1110},[1100,11543,5551],{"class":1318},[1100,11545,11546,11548,11550,11552,11554],{"class":1102,"line":4265},[1100,11547,6794],{"class":1601},[1100,11549,1605],{"class":1318},[1100,11551,1532],{"class":1318},[1100,11553,6902],{"class":1110},[1100,11555,5551],{"class":1318},[1100,11557,11558,11560,11562,11564,11566],{"class":1102,"line":4273},[1100,11559,6808],{"class":1601},[1100,11561,1605],{"class":1318},[1100,11563,1532],{"class":1318},[1100,11565,6815],{"class":1110},[1100,11567,5551],{"class":1318},[1100,11569,11570],{"class":1102,"line":4278},[1100,11571,6822],{"class":1318},[1100,11573,11574,11576,11578,11580,11582,11584,11586,11588,11590,11592,11594,11596,11598],{"class":1102,"line":4284},[1100,11575,6773],{"class":1318},[1100,11577,989],{"class":1324},[1100,11579,6845],{"class":1601},[1100,11581,1605],{"class":1318},[1100,11583,1532],{"class":1318},[1100,11585,6935],{"class":1110},[1100,11587,1532],{"class":1318},[1100,11589,5478],{"class":1601},[1100,11591,1605],{"class":1318},[1100,11593,1532],{"class":1318},[1100,11595,6946],{"class":1110},[1100,11597,1532],{"class":1318},[1100,11599,1579],{"class":1318},[1100,11601,11602],{"class":1102,"line":4304},[1100,11603,6955],{"class":1314},[1100,11605,11606,11608,11610],{"class":1102,"line":4319},[1100,11607,6960],{"class":1318},[1100,11609,989],{"class":1324},[1100,11611,1579],{"class":1318},[1100,11613,11614,11616,11618],{"class":1102,"line":4336},[1100,11615,6827],{"class":1318},[1100,11617,1576],{"class":1324},[1100,11619,1579],{"class":1318},[1100,11621,11623,11625,11627],{"class":11622,"line":4359},[1102,1583],[1100,11624,6977],{"class":1318},[1100,11626,1576],{"class":1324},[1100,11628,1579],{"class":1318},[1100,11630,11632,11634,11636],{"class":11631,"line":4370},[1102,1583],[1100,11633,6986],{"class":1318},[1100,11635,1576],{"class":1324},[1100,11637,1579],{"class":1318},[1100,11639,11641,11643,11645],{"class":11640,"line":4378},[1102,1583],[1100,11642,5520],{"class":1318},[1100,11644,5096],{"class":1324},[1100,11646,1579],{"class":1318},[1100,11648,11649],{"class":1102,"line":4384},[1100,11650,1383],{"emptyLinePlaceholder":21},[1100,11652,11653,11655],{"class":1102,"line":4389},[1100,11654,5494],{"class":1318},[1100,11656,5536],{"class":1324},[1100,11658,11659,11661,11663,11665,11667],{"class":1102,"line":4412},[1100,11660,5542],{"class":1601},[1100,11662,1605],{"class":1318},[1100,11664,1532],{"class":1318},[1100,11666,5207],{"class":1110},[1100,11668,5551],{"class":1318},[1100,11670,11671,11673,11675,11677,11679],{"class":1102,"line":4418},[1100,11672,7025],{"class":1601},[1100,11674,1605],{"class":1318},[1100,11676,1532],{"class":1318},[1100,11678,7032],{"class":1110},[1100,11680,5551],{"class":1318},[1100,11682,11683,11685,11687,11689,11691],{"class":1102,"line":4438},[1100,11684,5572],{"class":1601},[1100,11686,1605],{"class":1318},[1100,11688,1532],{"class":1318},[1100,11690,5579],{"class":1110},[1100,11692,5551],{"class":1318},[1100,11694,11695,11697,11699,11701,11703],{"class":1102,"line":4444},[1100,11696,6597],{"class":1601},[1100,11698,1605],{"class":1318},[1100,11700,1532],{"class":1318},[1100,11702,7057],{"class":1110},[1100,11704,5551],{"class":1318},[1100,11706,11707,11709,11711,11713,11715],{"class":1102,"line":4490},[1100,11708,5602],{"class":1601},[1100,11710,1605],{"class":1318},[1100,11712,1532],{"class":1318},[1100,11714,7070],{"class":1110},[1100,11716,5551],{"class":1318},[1100,11718,11719],{"class":1102,"line":4506},[1100,11720,5617],{"class":1318},[1100,11722,11723,11725,11727,11729,11732],{"class":1102,"line":4539},[1100,11724,5623],{"class":1318},[1100,11726,1576],{"class":1324},[1100,11728,5463],{"class":1318},[1100,11730,11731],{"class":1601},"footer",[1100,11733,1579],{"class":1318},[1100,11735,11736,11738,11741,11744,11746,11748,11750,11752],{"class":1102,"line":4553},[1100,11737,6640],{"class":1318},[1100,11739,11740],{"class":1324},"ModelSelect",[1100,11742,11743],{"class":1601}," v-model",[1100,11745,1605],{"class":1318},[1100,11747,1532],{"class":1318},[1100,11749,4652],{"class":1110},[1100,11751,1532],{"class":1318},[1100,11753,1625],{"class":1318},[1100,11755,11756,11758,11760],{"class":1102,"line":4561},[1100,11757,6986],{"class":1318},[1100,11759,1576],{"class":1324},[1100,11761,1579],{"class":1318},[1100,11763,11764],{"class":1102,"line":4566},[1100,11765,1383],{"emptyLinePlaceholder":21},[1100,11767,11768,11770],{"class":1102,"line":4573},[1100,11769,5623],{"class":1318},[1100,11771,7083],{"class":1324},[1100,11773,11774,11776,11778,11780,11782],{"class":1102,"line":4578},[1100,11775,7088],{"class":1601},[1100,11777,1605],{"class":1318},[1100,11779,1532],{"class":1318},[1100,11781,6585],{"class":1110},[1100,11783,5551],{"class":1318},[1100,11785,11786,11788,11790,11792,11794],{"class":1102,"line":4596},[1100,11787,7101],{"class":1601},[1100,11789,1605],{"class":1318},[1100,11791,1532],{"class":1318},[1100,11793,5636],{"class":1110},[1100,11795,5551],{"class":1318},[1100,11797,11798,11800,11802,11804,11806],{"class":1102,"line":7177},[1100,11799,7114],{"class":1601},[1100,11801,1605],{"class":1318},[1100,11803,1532],{"class":1318},[1100,11805,7121],{"class":1110},[1100,11807,5551],{"class":1318},[1100,11809,11810,11812,11814,11816,11818],{"class":1102,"line":9879},[1100,11811,7128],{"class":1601},[1100,11813,1605],{"class":1318},[1100,11815,1532],{"class":1318},[1100,11817,7135],{"class":1110},[1100,11819,5551],{"class":1318},[1100,11821,11822],{"class":1102,"line":9888},[1100,11823,7142],{"class":1318},[1100,11825,11826,11828,11830],{"class":1102,"line":9897},[1100,11827,5520],{"class":1318},[1100,11829,5090],{"class":1324},[1100,11831,1579],{"class":1318},[1100,11833,11835,11837,11839],{"class":1102,"line":11834},116,[1100,11836,5654],{"class":1318},[1100,11838,5475],{"class":1324},[1100,11840,1579],{"class":1318},[1100,11842,11844,11846,11848],{"class":1102,"line":11843},117,[1100,11845,1630],{"class":1318},[1100,11847,1576],{"class":1324},[1100,11849,1579],{"class":1318},[1100,11851,11853,11855,11857],{"class":1102,"line":11852},118,[1100,11854,1640],{"class":1318},[1100,11856,5440],{"class":1324},[1100,11858,1579],{"class":1318},[1100,11860,11862,11864,11866],{"class":1102,"line":11861},119,[1100,11863,1649],{"class":1318},[1100,11865,1576],{"class":1324},[1100,11867,1579],{"class":1318},[993,11869,11871],{"id":11870},"going-further","Going further",[989,11873,11874],{},"You now have a working AI chatbot with database persistence! To take it further, consider adding:",[989,11876,11877],{},[1007,11878,11879],{},"User Authentication",[989,11881,11882,11883,11888],{},"Add authentication with ",[1043,11884,11887],{"href":11885,"rel":11886},"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,11890,11891],{},[1007,11892,11893],{},"AI Tools",[989,11895,11896,11897,11902],{},"Extend your chatbot with ",[1043,11898,11901],{"href":11899,"rel":11900},"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:",[1091,11904,11906],{"className":1295,"code":11905,"language":1297,"meta":1096,"style":1096},"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",[1050,11907,11908,11927,11945,11949,11964,11980,11997,12028,12036,12056,12061,12096,12100],{"__ignoreMap":1096},[1100,11909,11910,11912,11914,11917,11919,11921,11923,11925],{"class":1102,"line":1103},[1100,11911,1721],{"class":1304},[1100,11913,1724],{"class":1318},[1100,11915,11916],{"class":1314}," tool",[1100,11918,1746],{"class":1318},[1100,11920,1749],{"class":1304},[1100,11922,1405],{"class":1318},[1100,11924,2547],{"class":1110},[1100,11926,1369],{"class":1318},[1100,11928,11929,11931,11933,11935,11937,11939,11941,11943],{"class":1102,"line":1120},[1100,11930,1721],{"class":1304},[1100,11932,1724],{"class":1318},[1100,11934,2582],{"class":1314},[1100,11936,1746],{"class":1318},[1100,11938,1749],{"class":1304},[1100,11940,1405],{"class":1318},[1100,11942,2591],{"class":1110},[1100,11944,1369],{"class":1318},[1100,11946,11947],{"class":1102,"line":1334},[1100,11948,1383],{"emptyLinePlaceholder":21},[1100,11950,11951,11953,11956,11958,11960,11962],{"class":1102,"line":1349},[1100,11952,3074],{"class":1601},[1100,11954,11955],{"class":1314}," weatherTool ",[1100,11957,1605],{"class":1318},[1100,11959,11916],{"class":1123},[1100,11961,1315],{"class":1314},[1100,11963,1319],{"class":1318},[1100,11965,11966,11969,11971,11973,11976,11978],{"class":1102,"line":1361},[1100,11967,11968],{"class":1324},"  description",[1100,11970,1328],{"class":1318},[1100,11972,1405],{"class":1318},[1100,11974,11975],{"class":1110},"Get the current weather for a location",[1100,11977,1343],{"class":1318},[1100,11979,1346],{"class":1318},[1100,11981,11982,11985,11987,11989,11991,11993,11995],{"class":1102,"line":1372},[1100,11983,11984],{"class":1324},"  parameters",[1100,11986,1328],{"class":1318},[1100,11988,2582],{"class":1314},[1100,11990,1822],{"class":1318},[1100,11992,2654],{"class":1123},[1100,11994,1315],{"class":1314},[1100,11996,1319],{"class":1318},[1100,11998,11999,12002,12004,12006,12008,12010,12012,12014,12017,12019,12021,12024,12026],{"class":1102,"line":1380},[1100,12000,12001],{"class":1324},"    location",[1100,12003,1328],{"class":1318},[1100,12005,2582],{"class":1314},[1100,12007,1822],{"class":1318},[1100,12009,3254],{"class":1123},[1100,12011,1819],{"class":1314},[1100,12013,1822],{"class":1318},[1100,12015,12016],{"class":1123},"describe",[1100,12018,1315],{"class":1314},[1100,12020,1343],{"class":1318},[1100,12022,12023],{"class":1110},"The city name",[1100,12025,1343],{"class":1318},[1100,12027,1505],{"class":1314},[1100,12029,12030,12032,12034],{"class":1102,"line":1386},[1100,12031,2427],{"class":1318},[1100,12033,1896],{"class":1314},[1100,12035,1346],{"class":1318},[1100,12037,12038,12041,12043,12045,12047,12050,12052,12054],{"class":1102,"line":1397},[1100,12039,12040],{"class":1123},"  execute",[1100,12042,1328],{"class":1318},[1100,12044,4006],{"class":1601},[1100,12046,1953],{"class":1318},[1100,12048,12049],{"class":1956}," location",[1100,12051,1960],{"class":1318},[1100,12053,1839],{"class":1601},[1100,12055,1394],{"class":1318},[1100,12057,12058],{"class":1102,"line":1413},[1100,12059,12060],{"class":1484},"    \u002F\u002F Fetch weather data from an API\n",[1100,12062,12063,12066,12068,12070,12072,12075,12077,12080,12082,12085,12087,12089,12092,12094],{"class":1102,"line":1419},[1100,12064,12065],{"class":1304},"    return",[1100,12067,1724],{"class":1318},[1100,12069,12049],{"class":1314},[1100,12071,1730],{"class":1318},[1100,12073,12074],{"class":1324}," temperature",[1100,12076,1328],{"class":1318},[1100,12078,12079],{"class":3573}," 22",[1100,12081,1730],{"class":1318},[1100,12083,12084],{"class":1324}," condition",[1100,12086,1328],{"class":1318},[1100,12088,1405],{"class":1318},[1100,12090,12091],{"class":1110},"Sunny",[1100,12093,1343],{"class":1318},[1100,12095,3176],{"class":1318},[1100,12097,12098],{"class":1102,"line":1424},[1100,12099,3598],{"class":1318},[1100,12101,12102,12104],{"class":1102,"line":1447},[1100,12103,1502],{"class":1318},[1100,12105,1505],{"class":1314},[993,12107,12109],{"id":12108},"deploying-to-vercel","Deploying to Vercel",[989,12111,12112],{},"Deploy your chatbot to Vercel with zero configuration:",[1091,12114,12116],{"className":1093,"code":12115,"language":1095,"meta":1096,"style":1096},"npx vercel deploy\n",[1050,12117,12118],{"__ignoreMap":1096},[1100,12119,12120,12122,12125],{"class":1102,"line":1103},[1100,12121,1107],{"class":1106},[1100,12123,12124],{"class":1110}," vercel",[1100,12126,12127],{"class":1110}," deploy\n",[989,12129,12130],{},"Then, in the Vercel dashboard:",[1001,12132,12133,12139],{},[1004,12134,12135,12136,12138],{},"Enable ",[1007,12137,4608],{}," and add credits so requests can be processed.",[1004,12140,12141,12142,12145],{},"Add a ",[1007,12143,12144],{},"Turso"," database from the Vercel Marketplace and connect it to your project (it will provision the database and add the required environment variables automatically).",[12147,12148,12149],"blockquote",{},[989,12150,12151,12152,12157,12158,12160],{},"Note: On Vercel, you ",[1007,12153,12154,12155],{},"don’t need to manually add ",[1050,12156,1672],{}," — Vercel handles the gateway configuration for deployments. Keep using ",[1050,12159,1659],{}," locally for development.",[1679,12162,12163],{"to":1079,"target":1048},[989,12164,12165,12166,1822],{},"Learn more about setting up AI Gateway in the ",[1007,12167,12168],{},"Vercel AI Gateway documentation",[993,12170,12172],{"id":12171},"conclusion","Conclusion",[989,12174,12175],{},"You've built a complete AI chatbot with:",[1001,12177,12178,12184,12190,12195,12200],{},[1004,12179,12180,12183],{},[1007,12181,12182],{},"A complete chat interface"," using Nuxt UI components",[1004,12185,12186,12189],{},[1007,12187,12188],{},"Real-time streaming responses"," with the AI SDK",[1004,12191,12192,12194],{},[1007,12193,1021],{}," with MDC for rich content display",[1004,12196,12197,12199],{},[1007,12198,1027],{}," via AI Gateway",[1004,12201,12202,12205],{},[1007,12203,12204],{},"Database persistence"," with SQLite (local) \u002F Turso (production) and Drizzle ORM",[989,12207,12208],{},"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,12210,12211],{},[1007,12212,12213],{},"Resources:",[1001,12215,12216,12223,12230,12237,12243,12249],{},[1004,12217,12218],{},[1043,12219,12222],{"href":12220,"rel":12221},"https:\u002F\u002Fui.nuxt.com\u002Fcomponents\u002Fchat",[1047],"Nuxt UI Chat Components",[1004,12224,12225],{},[1043,12226,12229],{"href":12227,"rel":12228},"https:\u002F\u002Fhub.nuxt.com\u002Fdocs\u002Ffeatures\u002Fdatabase",[1047],"NuxtHub Database",[1004,12231,12232],{},[1043,12233,12236],{"href":12234,"rel":12235},"https:\u002F\u002Fai-sdk.dev",[1047],"AI SDK Documentation",[1004,12238,12239],{},[1043,12240,12242],{"href":1079,"rel":12241},[1047],"AI Gateway Documentation",[1004,12244,12245],{},[1043,12246,12248],{"href":1045,"rel":12247},[1047],"Nuxt AI Chat Template",[1004,12250,12251],{},[1043,12252,12254],{"href":1056,"rel":12253},[1047],"Vue AI Chat Template",[989,12256,12257],{},"We're excited to see what you'll build!",[12259,12260,12261],"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}",{"title":1096,"searchDepth":1120,"depth":1120,"links":12263},[12264,12265,12266,12272,12277,12280,12281,12285,12286,12287,12292,12293,12294],{"id":995,"depth":1120,"text":996},{"id":1064,"depth":1120,"text":1065},{"id":1085,"depth":1120,"text":1086,"children":12267},[12268,12269,12270,12271],{"id":1130,"depth":1334,"text":1131},{"id":1281,"depth":1334,"text":1282},{"id":1550,"depth":1334,"text":1551},{"id":1690,"depth":1334,"text":1691},{"id":2470,"depth":1120,"text":2471,"children":12273},[12274,12275,12276],{"id":2482,"depth":1334,"text":2483},{"id":2865,"depth":1334,"text":2866},{"id":4699,"depth":1334,"text":4700},{"id":5081,"depth":1120,"text":5082,"children":12278},[12279],{"id":5100,"depth":1334,"text":5101},{"id":5717,"depth":1120,"text":5718},{"id":7356,"depth":1120,"text":7357,"children":12282},[12283,12284],{"id":7363,"depth":1334,"text":7364},{"id":7523,"depth":1334,"text":7524},{"id":8023,"depth":1120,"text":8024},{"id":8566,"depth":1120,"text":8567},{"id":9915,"depth":1120,"text":9916,"children":12288},[12289,12290,12291],{"id":9926,"depth":1334,"text":9927},{"id":10189,"depth":1334,"text":10190},{"id":10448,"depth":1334,"text":10449},{"id":11870,"depth":1120,"text":11871},{"id":12108,"depth":1120,"text":12109},{"id":12171,"depth":1120,"text":12172},"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":12300},"Tutorial","\u002Fblog\u002Fhow-to-build-an-ai-chat",{"title":973,"description":12296},"blog\u002Fhow-to-build-an-ai-chat","Eo-DKOJ8Ibs0otIlFIm2ukPhDbdPOcq8jUlcEDGNhis",{"data":12306,"body":12307},{},{"type":12308,"children":12309},"root",[12310],{"type":178,"tag":989,"props":12311,"children":12312},{},[12313,12315,12322],{"type":5340,"value":12314},"Nuxt ",{"type":178,"tag":1100,"props":12316,"children":12319},{"className":12317},[12318],"text-primary",[12320],{"type":5340,"value":12321},"UI",{"type":5340,"value":12323}," Blog",{"data":12325,"body":12326},{},{"type":12308,"children":12327},[12328],{"type":178,"tag":989,"props":12329,"children":12330},{},[12331],{"type":5340,"value":961},1775058880610]