[{"data":1,"prerenderedAt":13064},["ShallowReactive",2],{"$f3e2g6nnllgvga":3,"module":1000,"blog":1009,"blog-posts":1026},[4],{"title":5,"path":6,"stem":7,"children":8,"page":36},"Docs","\u002Fdocs","docs",[9,167,840,886,992],{"title":10,"path":11,"stem":12,"children":13,"framework":16,"category":16,"description":16,"to":16,"target":16,"icon":30},"Get Started","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started\u002F1.index",[14,19,37,43,49,72,137,159],{"title":15,"path":11,"stem":12,"framework":16,"category":16,"description":17,"to":16,"target":16,"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,"to":16,"target":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,"to":16,"target":16,"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,"to":16,"target":16,"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,"path":39,"stem":40,"framework":16,"category":16,"description":41,"to":16,"target":16,"icon":42},"Migration","\u002Fdocs\u002Fgetting-started\u002Fmigration","docs\u002F1.getting-started\u002F3.migration","A comprehensive guide to migrate your application from Nuxt UI v3 to Nuxt UI v4.","i-lucide-arrow-right-left",{"title":44,"path":45,"stem":46,"framework":16,"category":16,"description":47,"to":16,"target":16,"icon":48},"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":50,"path":51,"stem":52,"children":53,"page":36},"Theme","\u002Fdocs\u002Fgetting-started\u002Ftheme","docs\u002F1.getting-started\u002F5.theme",[54,60,66],{"title":55,"path":56,"stem":57,"framework":16,"category":16,"description":58,"to":16,"target":16,"icon":59},"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":61,"path":62,"stem":63,"framework":16,"category":16,"description":64,"to":16,"target":16,"icon":65},"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":67,"path":68,"stem":69,"framework":16,"category":16,"description":70,"to":16,"target":16,"icon":71},"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":73,"framework":16,"category":16,"description":16,"to":16,"target":16,"path":74,"stem":75,"children":76,"page":36},"Integrations","\u002Fdocs\u002Fgetting-started\u002Fintegrations","docs\u002F1.getting-started\u002F6.integrations",[77,91,97,111,125,131],{"title":78,"framework":16,"category":16,"description":16,"to":16,"target":16,"shadow":21,"path":79,"stem":80,"children":81,"page":36},"Icons","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ficons","docs\u002F1.getting-started\u002F6.integrations\u002F1.icons",[82,87],{"title":78,"path":83,"stem":84,"framework":28,"category":16,"description":85,"to":16,"target":16,"icon":86},"\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":78,"path":88,"stem":89,"framework":34,"category":16,"description":90,"to":16,"target":16,"icon":86},"\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":92,"path":93,"stem":94,"framework":28,"category":16,"description":95,"to":16,"target":16,"icon":96},"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":98,"framework":16,"category":16,"description":16,"to":16,"target":16,"shadow":21,"path":99,"stem":100,"children":101,"page":36},"Color Mode","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcolor-mode","docs\u002F1.getting-started\u002F6.integrations\u002F3.color-mode",[102,107],{"title":98,"path":103,"stem":104,"framework":28,"category":16,"description":105,"to":16,"target":16,"icon":106},"\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":98,"path":108,"stem":109,"framework":34,"category":16,"description":110,"to":16,"target":16,"icon":106},"\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":112,"framework":16,"category":16,"description":16,"to":16,"target":16,"shadow":21,"path":113,"stem":114,"children":115,"page":36},"I18n","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fi18n","docs\u002F1.getting-started\u002F6.integrations\u002F4.i18n",[116,122],{"title":117,"path":118,"stem":119,"framework":28,"category":16,"description":120,"to":16,"target":16,"icon":121},"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":117,"path":123,"stem":124,"framework":34,"category":16,"description":120,"to":16,"target":16,"icon":121},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fi18n\u002Fvue","docs\u002F1.getting-started\u002F6.integrations\u002F4.i18n\u002F2.vue",{"title":126,"path":127,"stem":128,"framework":28,"category":16,"description":129,"to":16,"target":16,"icon":130},"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":132,"path":133,"stem":134,"framework":34,"category":16,"description":135,"to":16,"target":16,"icon":136},"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":138,"framework":16,"category":16,"description":16,"to":16,"target":16,"path":139,"stem":140,"children":141,"page":36},"Agents","\u002Fdocs\u002Fgetting-started\u002Fai","docs\u002F1.getting-started\u002F7.ai",[142,147,153],{"title":143,"path":144,"stem":145,"framework":16,"category":16,"description":146,"to":16,"target":16,"icon":136},"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":148,"path":149,"stem":150,"framework":16,"category":16,"description":151,"to":16,"target":16,"icon":152},"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":154,"path":155,"stem":156,"framework":16,"category":16,"description":157,"to":16,"target":16,"icon":158},"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":160,"path":161,"stem":162,"framework":16,"category":16,"description":163,"to":164,"target":165,"icon":166},"Figma","\u002Fdocs\u002Fgetting-started\u002Ffigma","docs\u002F1.getting-started\u002Ffigma","How to use Nuxt UI in Figma.","https:\u002F\u002Fgo.nuxt.com\u002Ffigma-ui","_blank","i-simple-icons-figma",{"title":67,"framework":16,"category":16,"description":16,"to":16,"target":16,"icon":168,"path":169,"stem":170,"children":171,"page":36},"i-lucide-square-code","\u002Fdocs\u002Fcomponents","docs\u002F2.components",[172,178,184,190,196,201,206,211,216,221,226,232,237,242,247,252,257,262,268,273,278,283,288,293,298,303,308,314,319,324,329,335,340,345,350,355,360,365,370,376,381,386,391,396,402,408,413,418,423,428,433,438,443,448,453,458,463,469,474,479,484,489,494,499,504,509,514,519,524,529,534,539,544,549,554,559,564,569,574,579,584,589,594,600,605,610,615,620,625,630,635,640,645,650,655,660,665,670,675,680,685,690,695,700,705,710,715,720,725,730,736,741,746,751,756,761,766,771,776,781,786,791,796,801,806,811,815,820,825,830,835],{"title":173,"path":174,"stem":175,"framework":16,"category":176,"description":177,"to":16,"target":16},"Accordion","\u002Fdocs\u002Fcomponents\u002Faccordion","docs\u002F2.components\u002Faccordion","data","A stacked set of collapsible panels.",{"title":179,"path":180,"stem":181,"framework":16,"category":182,"description":183,"to":16,"target":16},"Alert","\u002Fdocs\u002Fcomponents\u002Falert","docs\u002F2.components\u002Falert","element","A callout to draw the user's attention.",{"title":185,"path":186,"stem":187,"framework":16,"category":188,"description":189,"to":16,"target":16},"App","\u002Fdocs\u002Fcomponents\u002Fapp","docs\u002F2.components\u002Fapp","layout","A wrapper to provide global configuration, toasts and tooltips to your app.",{"title":191,"path":192,"stem":193,"framework":16,"category":194,"description":195,"to":16,"target":16},"AuthForm","\u002Fdocs\u002Fcomponents\u002Fauth-form","docs\u002F2.components\u002Fauth-form","page","A customizable Form to create login, register or password reset forms.",{"title":197,"path":198,"stem":199,"framework":16,"category":182,"description":200,"to":16,"target":16},"Avatar","\u002Fdocs\u002Fcomponents\u002Favatar","docs\u002F2.components\u002Favatar","An img element with fallback and Nuxt Image support.",{"title":202,"path":203,"stem":204,"framework":16,"category":182,"description":205,"to":16,"target":16},"AvatarGroup","\u002Fdocs\u002Fcomponents\u002Favatar-group","docs\u002F2.components\u002Favatar-group","Stack multiple avatars in a group.",{"title":207,"path":208,"stem":209,"framework":16,"category":182,"description":210,"to":16,"target":16},"Badge","\u002Fdocs\u002Fcomponents\u002Fbadge","docs\u002F2.components\u002Fbadge","A short text to represent a status or a category.",{"title":212,"path":213,"stem":214,"framework":16,"category":182,"description":215,"to":16,"target":16},"Banner","\u002Fdocs\u002Fcomponents\u002Fbanner","docs\u002F2.components\u002Fbanner","Display a banner at the top of your website to inform users about important information.",{"title":217,"path":218,"stem":219,"framework":16,"category":194,"description":220,"to":16,"target":16},"BlogPost","\u002Fdocs\u002Fcomponents\u002Fblog-post","docs\u002F2.components\u002Fblog-post","A customizable article to display in a blog page.",{"title":222,"path":223,"stem":224,"framework":16,"category":194,"description":225,"to":16,"target":16},"BlogPosts","\u002Fdocs\u002Fcomponents\u002Fblog-posts","docs\u002F2.components\u002Fblog-posts","Display a list of blog posts in a responsive grid layout.",{"title":227,"path":228,"stem":229,"framework":16,"category":230,"description":231,"to":16,"target":16},"Breadcrumb","\u002Fdocs\u002Fcomponents\u002Fbreadcrumb","docs\u002F2.components\u002Fbreadcrumb","navigation","A hierarchy of links to navigate through a website.",{"title":233,"path":234,"stem":235,"framework":16,"category":182,"description":236,"to":16,"target":16},"Button","\u002Fdocs\u002Fcomponents\u002Fbutton","docs\u002F2.components\u002Fbutton","A button element that can act as a link or trigger an action.",{"title":238,"path":239,"stem":240,"framework":16,"category":182,"description":241,"to":16,"target":16},"Calendar","\u002Fdocs\u002Fcomponents\u002Fcalendar","docs\u002F2.components\u002Fcalendar","A calendar component for selecting single dates, multiple dates or date ranges.",{"title":243,"path":244,"stem":245,"framework":16,"category":182,"description":246,"to":16,"target":16},"Card","\u002Fdocs\u002Fcomponents\u002Fcard","docs\u002F2.components\u002Fcard","Display content in a card with a header, body and footer.",{"title":248,"path":249,"stem":250,"framework":16,"category":176,"description":251,"to":16,"target":16},"Carousel","\u002Fdocs\u002Fcomponents\u002Fcarousel","docs\u002F2.components\u002Fcarousel","A carousel with motion and swipe built using Embla.",{"title":253,"path":254,"stem":255,"framework":16,"category":194,"description":256,"to":16,"target":16},"ChangelogVersion","\u002Fdocs\u002Fcomponents\u002Fchangelog-version","docs\u002F2.components\u002Fchangelog-version","A customizable article to display in a changelog.",{"title":258,"path":259,"stem":260,"framework":16,"category":194,"description":261,"to":16,"target":16},"ChangelogVersions","\u002Fdocs\u002Fcomponents\u002Fchangelog-versions","docs\u002F2.components\u002Fchangelog-versions","Display a list of changelog versions in a timeline.",{"title":263,"path":264,"stem":265,"framework":16,"category":266,"description":267,"to":16,"target":16},"Chat","\u002Fdocs\u002Fcomponents\u002Fchat","docs\u002F2.components\u002Fchat","chat","Build AI chat interfaces with streaming, reasoning, and tool calling.",{"title":269,"path":270,"stem":271,"framework":16,"category":266,"description":272,"to":16,"target":16},"ChatMessage","\u002Fdocs\u002Fcomponents\u002Fchat-message","docs\u002F2.components\u002Fchat-message","Display a chat message with icon, avatar, and actions.",{"title":274,"path":275,"stem":276,"framework":16,"category":266,"description":277,"to":16,"target":16},"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":279,"path":280,"stem":281,"framework":16,"category":266,"description":282,"to":16,"target":16},"ChatPalette","\u002Fdocs\u002Fcomponents\u002Fchat-palette","docs\u002F2.components\u002Fchat-palette","A chat palette to create a chatbot interface inside an overlay.",{"title":284,"path":285,"stem":286,"framework":16,"category":266,"description":287,"to":16,"target":16},"ChatPrompt","\u002Fdocs\u002Fcomponents\u002Fchat-prompt","docs\u002F2.components\u002Fchat-prompt","An enhanced Textarea for submitting prompts in AI chat interfaces.",{"title":289,"path":290,"stem":291,"framework":16,"category":266,"description":292,"to":16,"target":16},"ChatPromptSubmit","\u002Fdocs\u002Fcomponents\u002Fchat-prompt-submit","docs\u002F2.components\u002Fchat-prompt-submit","A Button for submitting chat prompts with automatic status handling.",{"title":294,"path":295,"stem":296,"framework":16,"category":266,"description":297,"to":16,"target":16},"ChatReasoning","\u002Fdocs\u002Fcomponents\u002Fchat-reasoning","docs\u002F2.components\u002Fchat-reasoning","Display a collapsible AI reasoning or thinking process.",{"title":299,"path":300,"stem":301,"framework":16,"category":266,"description":302,"to":16,"target":16},"ChatShimmer","\u002Fdocs\u002Fcomponents\u002Fchat-shimmer","docs\u002F2.components\u002Fchat-shimmer","Display a text shimmer animation effect.",{"title":304,"path":305,"stem":306,"framework":16,"category":266,"description":307,"to":16,"target":16},"ChatTool","\u002Fdocs\u002Fcomponents\u002Fchat-tool","docs\u002F2.components\u002Fchat-tool","Display a collapsible AI tool invocation status.",{"title":309,"path":310,"stem":311,"framework":16,"category":312,"description":313,"to":16,"target":16},"Checkbox","\u002Fdocs\u002Fcomponents\u002Fcheckbox","docs\u002F2.components\u002Fcheckbox","form","An input element to toggle between checked and unchecked states.",{"title":315,"path":316,"stem":317,"framework":16,"category":312,"description":318,"to":16,"target":16},"CheckboxGroup","\u002Fdocs\u002Fcomponents\u002Fcheckbox-group","docs\u002F2.components\u002Fcheckbox-group","A set of checkboxes to select multiple options from a list.",{"title":320,"path":321,"stem":322,"framework":16,"category":182,"description":323,"to":16,"target":16},"Chip","\u002Fdocs\u002Fcomponents\u002Fchip","docs\u002F2.components\u002Fchip","An indicator of a numeric value or a state.",{"title":325,"path":326,"stem":327,"framework":16,"category":182,"description":328,"to":16,"target":16},"Collapsible","\u002Fdocs\u002Fcomponents\u002Fcollapsible","docs\u002F2.components\u002Fcollapsible","A collapsible element to toggle visibility of its content.",{"title":330,"path":331,"stem":332,"framework":16,"category":333,"description":334,"to":16,"target":16},"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":336,"path":337,"stem":338,"framework":16,"category":333,"description":339,"to":16,"target":16},"ColorModeButton","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-button","docs\u002F2.components\u002Fcolor-mode-button","A Button to switch between light and dark mode.",{"title":341,"path":342,"stem":343,"framework":16,"category":333,"description":344,"to":16,"target":16},"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":346,"path":347,"stem":348,"framework":16,"category":333,"description":349,"to":16,"target":16},"ColorModeSelect","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-select","docs\u002F2.components\u002Fcolor-mode-select","A Select to switch between system, dark and light mode.",{"title":351,"path":352,"stem":353,"framework":16,"category":333,"description":354,"to":16,"target":16},"ColorModeSwitch","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-switch","docs\u002F2.components\u002Fcolor-mode-switch","A Switch to toggle between light and dark mode.",{"title":356,"path":357,"stem":358,"framework":16,"category":312,"description":359,"to":16,"target":16},"ColorPicker","\u002Fdocs\u002Fcomponents\u002Fcolor-picker","docs\u002F2.components\u002Fcolor-picker","A component to select a color.",{"title":361,"path":362,"stem":363,"framework":16,"category":230,"description":364,"to":16,"target":16},"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":366,"path":367,"stem":368,"framework":16,"category":188,"description":369,"to":16,"target":16},"Container","\u002Fdocs\u002Fcomponents\u002Fcontainer","docs\u002F2.components\u002Fcontainer","A layout element to center and constrain the width of your content.",{"title":371,"path":372,"stem":373,"framework":28,"category":374,"description":375,"to":16,"target":16},"ContentNavigation","\u002Fdocs\u002Fcomponents\u002Fcontent-navigation","docs\u002F2.components\u002Fcontent-navigation","content","An accordion-style navigation component for organizing page links.",{"title":377,"path":378,"stem":379,"framework":28,"category":374,"description":380,"to":16,"target":16},"ContentSearch","\u002Fdocs\u002Fcomponents\u002Fcontent-search","docs\u002F2.components\u002Fcontent-search","A ready-to-use CommandPalette to add to your documentation.",{"title":382,"path":383,"stem":384,"framework":28,"category":374,"description":385,"to":16,"target":16},"ContentSearchButton","\u002Fdocs\u002Fcomponents\u002Fcontent-search-button","docs\u002F2.components\u002Fcontent-search-button","A pre-styled Button to open the ContentSearch modal.",{"title":387,"path":388,"stem":389,"framework":28,"category":374,"description":390,"to":16,"target":16},"ContentSurround","\u002Fdocs\u002Fcomponents\u002Fcontent-surround","docs\u002F2.components\u002Fcontent-surround","A pair of prev and next links to navigate between pages.",{"title":392,"path":393,"stem":394,"framework":28,"category":374,"description":395,"to":16,"target":16},"ContentToc","\u002Fdocs\u002Fcomponents\u002Fcontent-toc","docs\u002F2.components\u002Fcontent-toc","A sticky Table of Contents with automatic active anchor link highlighting.",{"title":397,"path":398,"stem":399,"framework":16,"category":400,"description":401,"to":16,"target":16},"ContextMenu","\u002Fdocs\u002Fcomponents\u002Fcontext-menu","docs\u002F2.components\u002Fcontext-menu","overlay","A menu to display actions when right-clicking on an element.",{"title":403,"path":404,"stem":405,"framework":16,"category":406,"description":407,"to":16,"target":16},"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":409,"path":410,"stem":411,"framework":16,"category":406,"description":412,"to":16,"target":16},"DashboardNavbar","\u002Fdocs\u002Fcomponents\u002Fdashboard-navbar","docs\u002F2.components\u002Fdashboard-navbar","A responsive navbar to display in a dashboard.",{"title":414,"path":415,"stem":416,"framework":16,"category":406,"description":417,"to":16,"target":16},"DashboardPanel","\u002Fdocs\u002Fcomponents\u002Fdashboard-panel","docs\u002F2.components\u002Fdashboard-panel","A resizable panel to display in a dashboard.",{"title":419,"path":420,"stem":421,"framework":16,"category":406,"description":422,"to":16,"target":16},"DashboardResizeHandle","\u002Fdocs\u002Fcomponents\u002Fdashboard-resize-handle","docs\u002F2.components\u002Fdashboard-resize-handle","A handle to resize a sidebar or panel.",{"title":424,"path":425,"stem":426,"framework":16,"category":406,"description":427,"to":16,"target":16},"DashboardSearch","\u002Fdocs\u002Fcomponents\u002Fdashboard-search","docs\u002F2.components\u002Fdashboard-search","A ready-to-use CommandPalette to add to your dashboard.",{"title":429,"path":430,"stem":431,"framework":16,"category":406,"description":432,"to":16,"target":16},"DashboardSearchButton","\u002Fdocs\u002Fcomponents\u002Fdashboard-search-button","docs\u002F2.components\u002Fdashboard-search-button","A pre-styled Button to open the DashboardSearch modal.",{"title":434,"path":435,"stem":436,"framework":16,"category":406,"description":437,"to":16,"target":16},"DashboardSidebar","\u002Fdocs\u002Fcomponents\u002Fdashboard-sidebar","docs\u002F2.components\u002Fdashboard-sidebar","A resizable and collapsible sidebar to display in a dashboard.",{"title":439,"path":440,"stem":441,"framework":16,"category":406,"description":442,"to":16,"target":16},"DashboardSidebarCollapse","\u002Fdocs\u002Fcomponents\u002Fdashboard-sidebar-collapse","docs\u002F2.components\u002Fdashboard-sidebar-collapse","A Button to collapse the sidebar on desktop.",{"title":444,"path":445,"stem":446,"framework":16,"category":406,"description":447,"to":16,"target":16},"DashboardSidebarToggle","\u002Fdocs\u002Fcomponents\u002Fdashboard-sidebar-toggle","docs\u002F2.components\u002Fdashboard-sidebar-toggle","A Button to toggle the sidebar on mobile.",{"title":449,"path":450,"stem":451,"framework":16,"category":406,"description":452,"to":16,"target":16},"DashboardToolbar","\u002Fdocs\u002Fcomponents\u002Fdashboard-toolbar","docs\u002F2.components\u002Fdashboard-toolbar","A toolbar to display under the navbar in a dashboard.",{"title":454,"path":455,"stem":456,"framework":16,"category":400,"description":457,"to":16,"target":16},"Drawer","\u002Fdocs\u002Fcomponents\u002Fdrawer","docs\u002F2.components\u002Fdrawer","A drawer that smoothly slides in and out of the screen.",{"title":459,"path":460,"stem":461,"framework":16,"category":400,"description":462,"to":16,"target":16},"DropdownMenu","\u002Fdocs\u002Fcomponents\u002Fdropdown-menu","docs\u002F2.components\u002Fdropdown-menu","A menu to display actions when clicking on an element.",{"title":464,"path":465,"stem":466,"framework":16,"category":467,"description":468,"to":16,"target":16},"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":470,"path":471,"stem":472,"framework":16,"category":467,"description":473,"to":16,"target":16},"EditorDragHandle","\u002Fdocs\u002Fcomponents\u002Feditor-drag-handle","docs\u002F2.components\u002Feditor-drag-handle","A draggable handle for reordering and selecting blocks in the editor.",{"title":475,"path":476,"stem":477,"framework":16,"category":467,"description":478,"to":16,"target":16},"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":480,"path":481,"stem":482,"framework":16,"category":467,"description":483,"to":16,"target":16},"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":485,"path":486,"stem":487,"framework":16,"category":467,"description":488,"to":16,"target":16},"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":490,"path":491,"stem":492,"framework":16,"category":467,"description":493,"to":16,"target":16},"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":495,"path":496,"stem":497,"framework":16,"category":176,"description":498,"to":16,"target":16},"Empty","\u002Fdocs\u002Fcomponents\u002Fempty","docs\u002F2.components\u002Fempty","A component to display an empty state.",{"title":500,"path":501,"stem":502,"framework":16,"category":188,"description":503,"to":16,"target":16},"Error","\u002Fdocs\u002Fcomponents\u002Ferror","docs\u002F2.components\u002Ferror","A pre-built error component with NuxtError support.",{"title":505,"path":506,"stem":507,"framework":16,"category":182,"description":508,"to":16,"target":16},"FieldGroup","\u002Fdocs\u002Fcomponents\u002Ffield-group","docs\u002F2.components\u002Ffield-group","Group multiple button-like elements together.",{"title":510,"path":511,"stem":512,"framework":16,"category":312,"description":513,"to":16,"target":16},"FileUpload","\u002Fdocs\u002Fcomponents\u002Ffile-upload","docs\u002F2.components\u002Ffile-upload","An input element to upload files.",{"title":515,"path":516,"stem":517,"framework":16,"category":188,"description":518,"to":16,"target":16},"Footer","\u002Fdocs\u002Fcomponents\u002Ffooter","docs\u002F2.components\u002Ffooter","A responsive footer for your site links and legal notices.",{"title":520,"path":521,"stem":522,"framework":16,"category":230,"description":523,"to":16,"target":16},"FooterColumns","\u002Fdocs\u002Fcomponents\u002Ffooter-columns","docs\u002F2.components\u002Ffooter-columns","A list of links as columns to display in your Footer.",{"title":525,"path":526,"stem":527,"framework":16,"category":312,"description":528,"to":16,"target":16},"Form","\u002Fdocs\u002Fcomponents\u002Fform","docs\u002F2.components\u002Fform","A form component with built-in validation and submission handling.",{"title":530,"path":531,"stem":532,"framework":16,"category":312,"description":533,"to":16,"target":16},"FormField","\u002Fdocs\u002Fcomponents\u002Fform-field","docs\u002F2.components\u002Fform-field","A wrapper for form elements that provides validation and error handling.",{"title":535,"path":536,"stem":537,"framework":16,"category":188,"description":538,"to":16,"target":16},"Header","\u002Fdocs\u002Fcomponents\u002Fheader","docs\u002F2.components\u002Fheader","A responsive header for your site navigation.",{"title":540,"path":541,"stem":542,"framework":16,"category":182,"description":543,"to":16,"target":16},"Icon","\u002Fdocs\u002Fcomponents\u002Ficon","docs\u002F2.components\u002Ficon","A component to display any icon from Iconify or another component.",{"title":545,"path":546,"stem":547,"framework":16,"category":312,"description":548,"to":16,"target":16},"Input","\u002Fdocs\u002Fcomponents\u002Finput","docs\u002F2.components\u002Finput","An input element to enter text.",{"title":550,"path":551,"stem":552,"framework":16,"category":312,"description":553,"to":16,"target":16},"InputDate","\u002Fdocs\u002Fcomponents\u002Finput-date","docs\u002F2.components\u002Finput-date","An input component for date selection.",{"title":555,"path":556,"stem":557,"framework":16,"category":312,"description":558,"to":16,"target":16},"InputMenu","\u002Fdocs\u002Fcomponents\u002Finput-menu","docs\u002F2.components\u002Finput-menu","An autocomplete input with real-time suggestions.",{"title":560,"path":561,"stem":562,"framework":16,"category":312,"description":563,"to":16,"target":16},"InputNumber","\u002Fdocs\u002Fcomponents\u002Finput-number","docs\u002F2.components\u002Finput-number","An input for numerical values with a customizable range.",{"title":565,"path":566,"stem":567,"framework":16,"category":312,"description":568,"to":16,"target":16},"InputRating","\u002Fdocs\u002Fcomponents\u002Finput-rating","docs\u002F2.components\u002Finput-rating","A component to display and collect ratings from users.",{"title":570,"path":571,"stem":572,"framework":16,"category":312,"description":573,"to":16,"target":16},"InputTags","\u002Fdocs\u002Fcomponents\u002Finput-tags","docs\u002F2.components\u002Finput-tags","An input element that displays interactive tags.",{"title":575,"path":576,"stem":577,"framework":16,"category":312,"description":578,"to":16,"target":16},"InputTime","\u002Fdocs\u002Fcomponents\u002Finput-time","docs\u002F2.components\u002Finput-time","An input for selecting a time.",{"title":580,"path":581,"stem":582,"framework":16,"category":182,"description":583,"to":16,"target":16},"Kbd","\u002Fdocs\u002Fcomponents\u002Fkbd","docs\u002F2.components\u002Fkbd","A kbd element to display a keyboard key.",{"title":585,"path":586,"stem":587,"framework":16,"category":230,"description":588,"to":16,"target":16},"Link","\u002Fdocs\u002Fcomponents\u002Flink","docs\u002F2.components\u002Flink","A wrapper around NuxtLink with extra props.",{"title":590,"path":591,"stem":592,"framework":16,"category":312,"description":593,"to":16,"target":16},"Listbox","\u002Fdocs\u002Fcomponents\u002Flistbox","docs\u002F2.components\u002Flistbox","A selectable list of items with search, virtualization and rich item rendering.",{"title":595,"path":596,"stem":597,"framework":16,"category":598,"description":599,"to":16,"target":16},"LocaleSelect","\u002Fdocs\u002Fcomponents\u002Flocale-select","docs\u002F2.components\u002Flocale-select","i18n","A Select to switch between locales.",{"title":601,"path":602,"stem":603,"framework":16,"category":188,"description":604,"to":16,"target":16},"Main","\u002Fdocs\u002Fcomponents\u002Fmain","docs\u002F2.components\u002Fmain","A main element that fills the available viewport height.",{"title":606,"path":607,"stem":608,"framework":16,"category":176,"description":609,"to":16,"target":16},"Marquee","\u002Fdocs\u002Fcomponents\u002Fmarquee","docs\u002F2.components\u002Fmarquee","A component to create infinite scrolling content.",{"title":611,"path":612,"stem":613,"framework":16,"category":400,"description":614,"to":16,"target":16},"Modal","\u002Fdocs\u002Fcomponents\u002Fmodal","docs\u002F2.components\u002Fmodal","A dialog window that can be used to display a message or request user input.",{"title":616,"path":617,"stem":618,"framework":16,"category":230,"description":619,"to":16,"target":16},"NavigationMenu","\u002Fdocs\u002Fcomponents\u002Fnavigation-menu","docs\u002F2.components\u002Fnavigation-menu","A list of links that can be displayed horizontally or vertically.",{"title":621,"path":622,"stem":623,"framework":16,"category":194,"description":624,"to":16,"target":16},"Page","\u002Fdocs\u002Fcomponents\u002Fpage","docs\u002F2.components\u002Fpage","A grid layout for your pages with left and right columns.",{"title":626,"path":627,"stem":628,"framework":16,"category":194,"description":629,"to":16,"target":16},"PageAnchors","\u002Fdocs\u002Fcomponents\u002Fpage-anchors","docs\u002F2.components\u002Fpage-anchors","A list of anchors to be displayed in the page.",{"title":631,"path":632,"stem":633,"framework":16,"category":194,"description":634,"to":16,"target":16},"PageAside","\u002Fdocs\u002Fcomponents\u002Fpage-aside","docs\u002F2.components\u002Fpage-aside","A sticky aside to display your page navigation.",{"title":636,"path":637,"stem":638,"framework":16,"category":194,"description":639,"to":16,"target":16},"PageBody","\u002Fdocs\u002Fcomponents\u002Fpage-body","docs\u002F2.components\u002Fpage-body","The main content of your page.",{"title":641,"path":642,"stem":643,"framework":16,"category":194,"description":644,"to":16,"target":16},"PageCard","\u002Fdocs\u002Fcomponents\u002Fpage-card","docs\u002F2.components\u002Fpage-card","A pre-styled card component that displays a title, description and optional link.",{"title":646,"path":647,"stem":648,"framework":16,"category":194,"description":649,"to":16,"target":16},"PageColumns","\u002Fdocs\u002Fcomponents\u002Fpage-columns","docs\u002F2.components\u002Fpage-columns","A responsive multi-column layout system for organizing content side-by-side.",{"title":651,"path":652,"stem":653,"framework":16,"category":194,"description":654,"to":16,"target":16},"PageCTA","\u002Fdocs\u002Fcomponents\u002Fpage-cta","docs\u002F2.components\u002Fpage-cta","A call to action section to display in your pages.",{"title":656,"path":657,"stem":658,"framework":16,"category":194,"description":659,"to":16,"target":16},"PageFeature","\u002Fdocs\u002Fcomponents\u002Fpage-feature","docs\u002F2.components\u002Fpage-feature","A component to showcase key features of your application.",{"title":661,"path":662,"stem":663,"framework":16,"category":194,"description":664,"to":16,"target":16},"PageGrid","\u002Fdocs\u002Fcomponents\u002Fpage-grid","docs\u002F2.components\u002Fpage-grid","A responsive grid system for displaying content in a flexible layout.",{"title":666,"path":667,"stem":668,"framework":16,"category":194,"description":669,"to":16,"target":16},"PageHeader","\u002Fdocs\u002Fcomponents\u002Fpage-header","docs\u002F2.components\u002Fpage-header","A responsive header for your pages.",{"title":671,"path":672,"stem":673,"framework":16,"category":194,"description":674,"to":16,"target":16},"PageHero","\u002Fdocs\u002Fcomponents\u002Fpage-hero","docs\u002F2.components\u002Fpage-hero","A responsive hero for your pages.",{"title":676,"path":677,"stem":678,"framework":16,"category":194,"description":679,"to":16,"target":16},"PageLinks","\u002Fdocs\u002Fcomponents\u002Fpage-links","docs\u002F2.components\u002Fpage-links","A list of links to be displayed in the page.",{"title":681,"path":682,"stem":683,"framework":16,"category":194,"description":684,"to":16,"target":16},"PageList","\u002Fdocs\u002Fcomponents\u002Fpage-list","docs\u002F2.components\u002Fpage-list","A vertical list layout for displaying content in a stacked format.",{"title":686,"path":687,"stem":688,"framework":16,"category":194,"description":689,"to":16,"target":16},"PageLogos","\u002Fdocs\u002Fcomponents\u002Fpage-logos","docs\u002F2.components\u002Fpage-logos","A list of logos or images to display on your pages.",{"title":691,"path":692,"stem":693,"framework":16,"category":194,"description":694,"to":16,"target":16},"PageSection","\u002Fdocs\u002Fcomponents\u002Fpage-section","docs\u002F2.components\u002Fpage-section","A responsive section for your pages.",{"title":696,"path":697,"stem":698,"framework":16,"category":230,"description":699,"to":16,"target":16},"Pagination","\u002Fdocs\u002Fcomponents\u002Fpagination","docs\u002F2.components\u002Fpagination","A list of buttons or links to navigate through pages.",{"title":701,"path":702,"stem":703,"framework":16,"category":312,"description":704,"to":16,"target":16},"PinInput","\u002Fdocs\u002Fcomponents\u002Fpin-input","docs\u002F2.components\u002Fpin-input","An input element to enter a pin.",{"title":706,"path":707,"stem":708,"framework":16,"category":400,"description":709,"to":16,"target":16},"Popover","\u002Fdocs\u002Fcomponents\u002Fpopover","docs\u002F2.components\u002Fpopover","A non-modal dialog that floats around a trigger element.",{"title":711,"path":712,"stem":713,"framework":16,"category":194,"description":714,"to":16,"target":16},"PricingPlan","\u002Fdocs\u002Fcomponents\u002Fpricing-plan","docs\u002F2.components\u002Fpricing-plan","A customizable pricing plan to display in a pricing page.",{"title":716,"path":717,"stem":718,"framework":16,"category":194,"description":719,"to":16,"target":16},"PricingPlans","\u002Fdocs\u002Fcomponents\u002Fpricing-plans","docs\u002F2.components\u002Fpricing-plans","Display a list of pricing plans in a responsive grid layout.",{"title":721,"path":722,"stem":723,"framework":16,"category":194,"description":724,"to":16,"target":16},"PricingTable","\u002Fdocs\u002Fcomponents\u002Fpricing-table","docs\u002F2.components\u002Fpricing-table","A responsive pricing table component that displays tiered pricing plans with feature comparisons.",{"title":726,"path":727,"stem":728,"framework":16,"category":182,"description":729,"to":16,"target":16},"Progress","\u002Fdocs\u002Fcomponents\u002Fprogress","docs\u002F2.components\u002Fprogress","An indicator showing the progress of a task.",{"title":731,"path":732,"stem":733,"framework":16,"category":182,"description":734,"to":16,"target":16,"badge":735},"ProgressGroup","\u002Fdocs\u002Fcomponents\u002Fprogress-group","docs\u002F2.components\u002Fprogress-group","A progress bar split into multiple segments that add up to a total.","New",{"title":737,"path":738,"stem":739,"framework":16,"category":312,"description":740,"to":16,"target":16},"RadioGroup","\u002Fdocs\u002Fcomponents\u002Fradio-group","docs\u002F2.components\u002Fradio-group","A set of radio buttons to select a single option from a list.",{"title":742,"path":743,"stem":744,"framework":16,"category":176,"description":745,"to":16,"target":16},"ScrollArea","\u002Fdocs\u002Fcomponents\u002Fscroll-area","docs\u002F2.components\u002Fscroll-area","A flexible scroll container with virtualization support.",{"title":747,"path":748,"stem":749,"framework":16,"category":312,"description":750,"to":16,"target":16},"Select","\u002Fdocs\u002Fcomponents\u002Fselect","docs\u002F2.components\u002Fselect","A select element to choose from a list of options.",{"title":752,"path":753,"stem":754,"framework":16,"category":312,"description":755,"to":16,"target":16},"SelectMenu","\u002Fdocs\u002Fcomponents\u002Fselect-menu","docs\u002F2.components\u002Fselect-menu","An advanced searchable select element.",{"title":757,"path":758,"stem":759,"framework":16,"category":182,"description":760,"to":16,"target":16},"Separator","\u002Fdocs\u002Fcomponents\u002Fseparator","docs\u002F2.components\u002Fseparator","Separates content horizontally or vertically.",{"title":762,"path":763,"stem":764,"framework":16,"category":188,"description":765,"to":16,"target":16},"Sidebar","\u002Fdocs\u002Fcomponents\u002Fsidebar","docs\u002F2.components\u002Fsidebar","A collapsible sidebar with multiple visual variants.",{"title":767,"path":768,"stem":769,"framework":16,"category":182,"description":770,"to":16,"target":16},"Skeleton","\u002Fdocs\u002Fcomponents\u002Fskeleton","docs\u002F2.components\u002Fskeleton","A placeholder to show while content is loading.",{"title":772,"path":773,"stem":774,"framework":16,"category":400,"description":775,"to":16,"target":16},"Slideover","\u002Fdocs\u002Fcomponents\u002Fslideover","docs\u002F2.components\u002Fslideover","A dialog that slides in from any side of the screen.",{"title":777,"path":778,"stem":779,"framework":16,"category":312,"description":780,"to":16,"target":16},"Slider","\u002Fdocs\u002Fcomponents\u002Fslider","docs\u002F2.components\u002Fslider","An input to select a numeric value within a range.",{"title":782,"path":783,"stem":784,"framework":16,"category":188,"description":785,"to":16,"target":16,"badge":735},"Splitter","\u002Fdocs\u002Fcomponents\u002Fsplitter","docs\u002F2.components\u002Fsplitter","A set of resizable panels separated by draggable handles.",{"title":787,"path":788,"stem":789,"framework":16,"category":230,"description":790,"to":16,"target":16},"Stepper","\u002Fdocs\u002Fcomponents\u002Fstepper","docs\u002F2.components\u002Fstepper","A set of steps that are used to indicate progress through a multi-step process.",{"title":792,"path":793,"stem":794,"framework":16,"category":312,"description":795,"to":16,"target":16},"Switch","\u002Fdocs\u002Fcomponents\u002Fswitch","docs\u002F2.components\u002Fswitch","A control that toggles between two states.",{"title":797,"path":798,"stem":799,"framework":16,"category":176,"description":800,"to":16,"target":16},"Table","\u002Fdocs\u002Fcomponents\u002Ftable","docs\u002F2.components\u002Ftable","A responsive table element to display data in rows and columns.",{"title":802,"path":803,"stem":804,"framework":16,"category":230,"description":805,"to":16,"target":16},"Tabs","\u002Fdocs\u002Fcomponents\u002Ftabs","docs\u002F2.components\u002Ftabs","A set of tab panels that are displayed one at a time.",{"title":807,"path":808,"stem":809,"framework":16,"category":312,"description":810,"to":16,"target":16},"Textarea","\u002Fdocs\u002Fcomponents\u002Ftextarea","docs\u002F2.components\u002Ftextarea","A textarea element to input multi-line text.",{"title":50,"path":812,"stem":813,"framework":16,"category":188,"description":814,"to":16,"target":16},"\u002Fdocs\u002Fcomponents\u002Ftheme","docs\u002F2.components\u002Ftheme","A headless component to theme child components.",{"title":816,"path":817,"stem":818,"framework":16,"category":176,"description":819,"to":16,"target":16},"Timeline","\u002Fdocs\u002Fcomponents\u002Ftimeline","docs\u002F2.components\u002Ftimeline","A component that displays a sequence of events with dates, titles, icons or avatars.",{"title":821,"path":822,"stem":823,"framework":16,"category":400,"description":824,"to":16,"target":16},"Toast","\u002Fdocs\u002Fcomponents\u002Ftoast","docs\u002F2.components\u002Ftoast","A succinct message to provide information or feedback to the user.",{"title":826,"path":827,"stem":828,"framework":16,"category":400,"description":829,"to":16,"target":16},"Tooltip","\u002Fdocs\u002Fcomponents\u002Ftooltip","docs\u002F2.components\u002Ftooltip","A popup that reveals information when hovering over an element.",{"title":831,"path":832,"stem":833,"framework":16,"category":176,"description":834,"to":16,"target":16},"Tree","\u002Fdocs\u002Fcomponents\u002Ftree","docs\u002F2.components\u002Ftree","A tree view component to display and interact with hierarchical data structures.",{"title":836,"path":837,"stem":838,"framework":16,"category":176,"description":839,"to":16,"target":16},"User","\u002Fdocs\u002Fcomponents\u002Fuser","docs\u002F2.components\u002Fuser","Display user information with name, description and avatar.",{"title":841,"framework":16,"category":16,"description":16,"to":16,"target":16,"icon":842,"path":843,"stem":844,"children":845,"page":36},"Composables","i-lucide-square-function","\u002Fdocs\u002Fcomposables","docs\u002F3.composables",[846,851,856,861,866,871,876,881],{"title":847,"path":848,"stem":849,"framework":16,"category":16,"description":850,"to":16,"target":16},"defineLocale","\u002Fdocs\u002Fcomposables\u002Fdefine-locale","docs\u002F3.composables\u002Fdefine-locale","A utility to create a custom locale for your app.",{"title":852,"path":853,"stem":854,"framework":16,"category":16,"description":855,"to":16,"target":16},"defineShortcuts","\u002Fdocs\u002Fcomposables\u002Fdefine-shortcuts","docs\u002F3.composables\u002Fdefine-shortcuts","A composable to define keyboard shortcuts in your app.",{"title":857,"path":858,"stem":859,"framework":16,"category":16,"description":860,"to":16,"target":16},"extendLocale","\u002Fdocs\u002Fcomposables\u002Fextend-locale","docs\u002F3.composables\u002Fextend-locale","A utility to extend an existing locale with custom translations.",{"title":862,"path":863,"stem":864,"framework":16,"category":16,"description":865,"to":16,"target":16},"extractShortcuts","\u002Fdocs\u002Fcomposables\u002Fextract-shortcuts","docs\u002F3.composables\u002Fextract-shortcuts","A utility to extract keyboard shortcuts from menu items.",{"title":867,"path":868,"stem":869,"framework":16,"category":16,"description":870,"to":16,"target":16},"useOverlay","\u002Fdocs\u002Fcomposables\u002Fuse-overlay","docs\u002F3.composables\u002Fuse-overlay","A composable to programmatically control overlays.",{"title":872,"path":873,"stem":874,"framework":16,"category":16,"description":875,"to":16,"target":16},"useScrollShadow","\u002Fdocs\u002Fcomposables\u002Fuse-scroll-shadow","docs\u002F3.composables\u002Fuse-scroll-shadow","A composable to apply scroll shadow effects on any scrollable element.",{"title":877,"path":878,"stem":879,"framework":16,"category":16,"description":880,"to":16,"target":16},"useToast","\u002Fdocs\u002Fcomposables\u002Fuse-toast","docs\u002F3.composables\u002Fuse-toast","A composable to display toast notifications in your app.",{"title":882,"path":883,"stem":884,"framework":16,"category":16,"description":885,"to":16,"target":16},"useTour","\u002Fdocs\u002Fcomposables\u002Fuse-tour","docs\u002F3.composables\u002Fuse-tour","A composable to build guided tours by re-anchoring a single Popover across steps.",{"title":887,"path":888,"stem":889,"children":890,"framework":16,"category":16,"description":16,"to":16,"target":16,"icon":991},"Typography","\u002Fdocs\u002Ftypography","docs\u002F4.typography\u002F1.index",[891,893,898,903,908,913,918,922,927,931,936,941,946,951,956,960,965,969,973,977,982,987],{"title":15,"path":888,"stem":889,"framework":16,"category":16,"description":892,"to":16,"target":16},"Beautiful typography components and utilities to style your content with Nuxt UI.",{"title":894,"path":895,"stem":896,"framework":16,"category":16,"description":897,"to":16,"target":16},"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":899,"path":900,"stem":901,"framework":16,"category":16,"description":902,"to":16,"target":16},"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":904,"path":905,"stem":906,"framework":16,"category":16,"description":907,"to":16,"target":16},"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":909,"path":910,"stem":911,"framework":16,"category":16,"description":912,"to":16,"target":16},"Code","\u002Fdocs\u002Ftypography\u002Fcode","docs\u002F4.typography\u002F5.code","Display inline code and syntax-highlighted code blocks with copy-to-clipboard support.",{"title":173,"path":914,"stem":915,"framework":16,"category":916,"description":917,"to":16,"target":16},"\u002Fdocs\u002Ftypography\u002Faccordion","docs\u002F4.typography\u002Faccordion","components","Create expandable content sections for better information organization.",{"title":207,"path":919,"stem":920,"framework":16,"category":916,"description":921,"to":16,"target":16},"\u002Fdocs\u002Ftypography\u002Fbadge","docs\u002F4.typography\u002Fbadge","Display version numbers, status labels, and tags within your content.",{"title":923,"path":924,"stem":925,"framework":16,"category":916,"description":926,"to":16,"target":16},"Callout","\u002Fdocs\u002Ftypography\u002Fcallout","docs\u002F4.typography\u002Fcallout","Highlight important information with eye-catching colored boxes and icons.",{"title":243,"path":928,"stem":929,"framework":16,"category":916,"description":930,"to":16,"target":16},"\u002Fdocs\u002Ftypography\u002Fcard","docs\u002F4.typography\u002Fcard","Create highlighted content blocks with optional links and navigation.",{"title":932,"path":933,"stem":934,"framework":16,"category":916,"description":935,"to":16,"target":16},"CardGroup","\u002Fdocs\u002Ftypography\u002Fcard-group","docs\u002F4.typography\u002Fcard-group","Organize multiple cards in responsive grid layouts for better content presentation.",{"title":937,"path":938,"stem":939,"framework":16,"category":916,"description":940,"to":16,"target":16},"CodeCollapse","\u002Fdocs\u002Ftypography\u002Fcode-collapse","docs\u002F4.typography\u002Fcode-collapse","Make long code blocks collapsible to save space and improve readability.",{"title":942,"path":943,"stem":944,"framework":16,"category":916,"description":945,"to":16,"target":16},"CodeGroup","\u002Fdocs\u002Ftypography\u002Fcode-group","docs\u002F4.typography\u002Fcode-group","Group multiple code examples in tabbed interfaces for easy comparison.",{"title":947,"path":948,"stem":949,"framework":16,"category":916,"description":950,"to":16,"target":16},"CodePreview","\u002Fdocs\u002Ftypography\u002Fcode-preview","docs\u002F4.typography\u002Fcode-preview","Display code examples with a preview and their source for clearer documentation.",{"title":952,"path":953,"stem":954,"framework":16,"category":916,"description":955,"to":16,"target":16},"CodeTree","\u002Fdocs\u002Ftypography\u002Fcode-tree","docs\u002F4.typography\u002Fcode-tree","Visualize file and folder structures with syntax-highlighted code.",{"title":325,"path":957,"stem":958,"framework":16,"category":916,"description":959,"to":16,"target":16},"\u002Fdocs\u002Ftypography\u002Fcollapsible","docs\u002F4.typography\u002Fcollapsible","Toggle content visibility with smooth expand and collapse animations.",{"title":961,"path":962,"stem":963,"framework":16,"category":916,"description":964,"to":16,"target":16},"Field","\u002Fdocs\u002Ftypography\u002Ffield","docs\u002F4.typography\u002Ffield","Document API parameters, props, and configuration options clearly.",{"title":505,"path":966,"stem":967,"framework":16,"category":916,"description":968,"to":16,"target":16},"\u002Fdocs\u002Ftypography\u002Ffield-group","docs\u002F4.typography\u002Ffield-group","Group related fields together for comprehensive API documentation.",{"title":540,"path":970,"stem":971,"framework":16,"category":916,"description":972,"to":16,"target":16},"\u002Fdocs\u002Ftypography\u002Ficon","docs\u002F4.typography\u002Ficon","Display icons from popular icon libraries to enhance your content.",{"title":580,"path":974,"stem":975,"framework":16,"category":916,"description":976,"to":16,"target":16},"\u002Fdocs\u002Ftypography\u002Fkbd","docs\u002F4.typography\u002Fkbd","Display keyboard shortcuts and key combinations with proper styling.",{"title":978,"path":979,"stem":980,"framework":16,"category":916,"description":981,"to":16,"target":16},"Prompt","\u002Fdocs\u002Ftypography\u002Fprompt","docs\u002F4.typography\u002Fprompt","Display pre-built AI prompts with one-click copy and IDE integration.",{"title":983,"path":984,"stem":985,"framework":16,"category":916,"description":986,"to":16,"target":16},"Steps","\u002Fdocs\u002Ftypography\u002Fsteps","docs\u002F4.typography\u002Fsteps","Transform headings into numbered step-by-step guides and tutorials.",{"title":802,"path":988,"stem":989,"framework":16,"category":916,"description":990,"to":16,"target":16},"\u002Fdocs\u002Ftypography\u002Ftabs","docs\u002F4.typography\u002Ftabs","Organize related content in interactive tabbed interfaces.","i-lucide-square-pilcrow",{"title":993,"path":994,"stem":995,"children":996,"framework":16,"category":16,"description":16,"to":16,"target":16,"icon":999},"Releases","\u002Fdocs\u002Freleases","docs\u002F5.releases\u002F1.index",[997],{"title":993,"path":994,"stem":995,"framework":16,"category":16,"description":998,"to":16,"target":16},"Stay up to date with the newest features, enhancements, and fixes for Nuxt UI.","i-lucide-rocket",{"stats":1001},{"version":1002,"downloads":1003,"stars":1004,"watchers":1004,"forks":1005,"defaultBranch":1006,"publishedAt":1007,"createdAt":1008},"4.11.3",2820263,6995,1138,"v4",1790861861108,1639059438669,{"id":1010,"title":1011,"body":16,"description":1012,"extension":1013,"hero":1014,"meta":1019,"navigation":36,"path":1020,"seo":1021,"sitemap":1023,"stem":1024,"__hash__":1025},"blog\u002Fblog.yml","Blog","Tutorials, guides, and insights to help you build beautiful applications with Nuxt UI.","yml",{"badge":1015,"lead":1018,"accent":1011,"description":1012},{"label":1016,"icon":1017},"Tutorials and release notes","i-lucide-book-open","Nuxt UI",{},"\u002Fblog",{"title":1011,"description":1022},"Tutorials and guides on building with Nuxt UI, written by the team and the people who use it, with the story behind each release.",{"loc":1020},"blog","b0uH0lpTACCJmKTS90jxr9RWZNtgs8xQSKr98IBm96Y",[1027],{"id":1028,"title":1029,"authors":1030,"body":1041,"category":13053,"date":13054,"description":13055,"extension":13056,"image":13057,"meta":13058,"navigation":36,"path":13059,"seo":13060,"sitemap":13061,"stem":13062,"__hash__":13063},"posts\u002Fblog\u002Fhow-to-build-an-ai-chat.md","Build an AI Chatbot with Nuxt, Nuxt UI, and AI SDK",[1031,1036],{"name":1032,"avatar":1033,"to":1035},"Hugo Richard",{"src":1034},"https:\u002F\u002Fgithub.com\u002Fhugorcd.png","https:\u002F\u002Fx.com\u002Fhugorcd",{"name":1037,"avatar":1038,"to":1040},"Benjamin Canac",{"src":1039},"https:\u002F\u002Fgithub.com\u002Fbenjamincanac.png","https:\u002F\u002Fx.com\u002Fbenjamincanac",{"type":1042,"value":1043,"toc":13019},"minimark",[1044,1048,1053,1056,1091,1117,1121,1124,1138,1142,1145,1182,1187,1190,1343,1347,1354,1518,1530,1533,1572,1576,1583,1678,1685,1702,1711,1715,1729,2466,2469,2487,2497,2501,2509,2513,2524,2893,2897,2924,4682,4685,4690,4697,4702,4713,4718,4727,4746,4751,4766,4779,4783,4786,5161,5165,5180,5184,5192,5807,5814,5837,5841,5870,6067,6074,6077,6209,6213,6232,7747,7750,7757,7768,7807,7822,7827,7834,7848,7853,7878,7883,7890,7901,7905,7908,7912,7915,8068,8072,8097,8576,8580,9151,9155,10568,10577,10581,10588,10592,10602,10860,10864,10872,11127,11131,11134,12628,12632,12635,12640,12649,12654,12663,12866,12870,12873,12888,12891,12906,12917,12925,12929,12932,12963,12966,12971,13012,13015],[1045,1046,1047],"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.",[1049,1050,1052],"h2",{"id":1051},"what-were-building","What we're building",[1045,1054,1055],{},"By the end of this tutorial, you'll have a fully functional AI chatbot with:",[1057,1058,1059,1067,1073,1079,1085],"ul",{},[1060,1061,1062,1066],"li",{},[1063,1064,1065],"strong",{},"Streaming responses"," that appear in real-time as the AI generates them",[1060,1068,1069,1072],{},[1063,1070,1071],{},"A beautiful chat interface"," built with Nuxt UI's purpose-built chat components",[1060,1074,1075,1078],{},[1063,1076,1077],{},"Markdown rendering"," for rich AI responses with code highlighting",[1060,1080,1081,1084],{},[1063,1082,1083],{},"Multi-model support"," allowing users to switch between OpenAI, Anthropic, and Google models",[1060,1086,1087,1090],{},[1063,1088,1089],{},"Server-side AI integration"," using Nitro API routes and the AI SDK",[1092,1093,1095],"callout",{"icon":1094},"i-simple-icons-github",[1045,1096,1097,1098,1108,1109,1116],{},"Check out the ",[1099,1100,1104],"a",{"href":1101,"rel":1102},"https:\u002F\u002Fgithub.com\u002Fnuxt-ui-templates\u002Fchat",[1103],"nofollow",[1105,1106,1107],"code",{},"Nuxt"," and ",[1099,1110,1113],{"href":1111,"rel":1112},"https:\u002F\u002Fgithub.com\u002Fnuxt-ui-templates\u002Fchat-vue",[1103],[1105,1114,1115],{},"Vue"," AI Chat templates on GitHub for production-ready implementations with authentication, database persistence, and more.",[1049,1118,1120],{"id":1119},"prerequisites","Prerequisites",[1045,1122,1123],{},"Before we start, make sure you have:",[1057,1125,1126,1129],{},[1060,1127,1128],{},"Node.js 22.19+ or 24.11+ installed",[1060,1130,1131,1132,1137],{},"A ",[1099,1133,1136],{"href":1134,"rel":1135},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fai-gateway",[1103],"Vercel AI Gateway"," API key (provides access to multiple AI providers through a single endpoint)",[1049,1139,1141],{"id":1140},"project-setup","Project setup",[1045,1143,1144],{},"Start by creating a new Nuxt project:",[1146,1147,1152],"pre",{"className":1148,"code":1149,"language":1150,"meta":1151,"style":1151},"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","",[1105,1153,1154,1173],{"__ignoreMap":1151},[1155,1156,1159,1163,1167,1170],"span",{"class":1157,"line":1158},"line",1,[1155,1160,1162],{"class":1161},"sBMFI","npx",[1155,1164,1166],{"class":1165},"sfazB"," nuxi@latest",[1155,1168,1169],{"class":1165}," init",[1155,1171,1172],{"class":1165}," nuxt-ai-chat\n",[1155,1174,1176,1180],{"class":1157,"line":1175},2,[1155,1177,1179],{"class":1178},"s2Zo4","cd",[1155,1181,1172],{"class":1165},[1183,1184,1186],"h3",{"id":1185},"installing-dependencies","Installing dependencies",[1045,1188,1189],{},"Install Nuxt UI and the AI-specific dependencies:",[1191,1192,1194,1240,1274,1309],"code-group",{"sync":1193},"pm",[1146,1195,1198],{"className":1148,"code":1196,"filename":1197,"language":1150,"meta":1151,"style":1151},"pnpm add @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","pnpm",[1105,1199,1200],{"__ignoreMap":1151},[1155,1201,1202,1204,1207,1210,1213,1216,1219,1222,1225,1228,1231,1234,1237],{"class":1157,"line":1158},[1155,1203,1197],{"class":1161},[1155,1205,1206],{"class":1165}," add",[1155,1208,1209],{"class":1165}," @nuxt\u002Fui",[1155,1211,1212],{"class":1165}," tailwindcss",[1155,1214,1215],{"class":1165}," @comark\u002Fnuxt",[1155,1217,1218],{"class":1165}," @shikijs\u002Flangs",[1155,1220,1221],{"class":1165}," @nuxthub\u002Fcore",[1155,1223,1224],{"class":1165}," drizzle-orm",[1155,1226,1227],{"class":1165}," drizzle-kit",[1155,1229,1230],{"class":1165}," @libsql\u002Fclient",[1155,1232,1233],{"class":1165}," ai",[1155,1235,1236],{"class":1165}," @ai-sdk\u002Fvue",[1155,1238,1239],{"class":1165}," zod\n",[1146,1241,1244],{"className":1148,"code":1242,"filename":1243,"language":1150,"meta":1151,"style":1151},"yarn add @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","yarn",[1105,1245,1246],{"__ignoreMap":1151},[1155,1247,1248,1250,1252,1254,1256,1258,1260,1262,1264,1266,1268,1270,1272],{"class":1157,"line":1158},[1155,1249,1243],{"class":1161},[1155,1251,1206],{"class":1165},[1155,1253,1209],{"class":1165},[1155,1255,1212],{"class":1165},[1155,1257,1215],{"class":1165},[1155,1259,1218],{"class":1165},[1155,1261,1221],{"class":1165},[1155,1263,1224],{"class":1165},[1155,1265,1227],{"class":1165},[1155,1267,1230],{"class":1165},[1155,1269,1233],{"class":1165},[1155,1271,1236],{"class":1165},[1155,1273,1239],{"class":1165},[1146,1275,1278],{"className":1148,"code":1276,"filename":1277,"language":1150,"meta":1151,"style":1151},"npm install @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","npm",[1105,1279,1280],{"__ignoreMap":1151},[1155,1281,1282,1284,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307],{"class":1157,"line":1158},[1155,1283,1277],{"class":1161},[1155,1285,1286],{"class":1165}," install",[1155,1288,1209],{"class":1165},[1155,1290,1212],{"class":1165},[1155,1292,1215],{"class":1165},[1155,1294,1218],{"class":1165},[1155,1296,1221],{"class":1165},[1155,1298,1224],{"class":1165},[1155,1300,1227],{"class":1165},[1155,1302,1230],{"class":1165},[1155,1304,1233],{"class":1165},[1155,1306,1236],{"class":1165},[1155,1308,1239],{"class":1165},[1146,1310,1313],{"className":1148,"code":1311,"filename":1312,"language":1150,"meta":1151,"style":1151},"bun add @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","bun",[1105,1314,1315],{"__ignoreMap":1151},[1155,1316,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341],{"class":1157,"line":1158},[1155,1318,1312],{"class":1161},[1155,1320,1206],{"class":1165},[1155,1322,1209],{"class":1165},[1155,1324,1212],{"class":1165},[1155,1326,1215],{"class":1165},[1155,1328,1218],{"class":1165},[1155,1330,1221],{"class":1165},[1155,1332,1224],{"class":1165},[1155,1334,1227],{"class":1165},[1155,1336,1230],{"class":1165},[1155,1338,1233],{"class":1165},[1155,1340,1236],{"class":1165},[1155,1342,1239],{"class":1165},[1183,1344,1346],{"id":1345},"configuration","Configuration",[1045,1348,1349,1350,1353],{},"Update your ",[1105,1351,1352],{},"nuxt.config.ts"," to register the modules:",[1355,1356,1357],"code-tree-intersection",{},[1146,1358,1362],{"className":1359,"code":1360,"filename":1352,"language":1361,"meta":1151,"style":1151},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  modules: [\n    '@nuxt\u002Fui',\n    '@comark\u002Fnuxt',\n    '@nuxthub\u002Fcore'\n  ],\n\n  hub: {\n    db: 'sqlite'\n  },\n\n  css: ['~\u002Fassets\u002Fcss\u002Fmain.css'],\n})\n","ts",[1105,1363,1364,1384,1396,1411,1423,1434,1442,1448,1459,1475,1481,1486,1509],{"__ignoreMap":1151},[1155,1365,1366,1370,1373,1376,1380],{"class":1157,"line":1158},[1155,1367,1369],{"class":1368},"s7zQu","export",[1155,1371,1372],{"class":1368}," default",[1155,1374,1375],{"class":1178}," defineNuxtConfig",[1155,1377,1379],{"class":1378},"sTEyZ","(",[1155,1381,1383],{"class":1382},"sMK4o","{\n",[1155,1385,1386,1390,1393],{"class":1157,"line":1175},[1155,1387,1389],{"class":1388},"swJcz","  modules",[1155,1391,1392],{"class":1382},":",[1155,1394,1395],{"class":1378}," [\n",[1155,1397,1399,1402,1405,1408],{"class":1157,"line":1398},3,[1155,1400,1401],{"class":1382},"    '",[1155,1403,1404],{"class":1165},"@nuxt\u002Fui",[1155,1406,1407],{"class":1382},"'",[1155,1409,1410],{"class":1382},",\n",[1155,1412,1414,1416,1419,1421],{"class":1157,"line":1413},4,[1155,1415,1401],{"class":1382},[1155,1417,1418],{"class":1165},"@comark\u002Fnuxt",[1155,1420,1407],{"class":1382},[1155,1422,1410],{"class":1382},[1155,1424,1426,1428,1431],{"class":1157,"line":1425},5,[1155,1427,1401],{"class":1382},[1155,1429,1430],{"class":1165},"@nuxthub\u002Fcore",[1155,1432,1433],{"class":1382},"'\n",[1155,1435,1437,1440],{"class":1157,"line":1436},6,[1155,1438,1439],{"class":1378},"  ]",[1155,1441,1410],{"class":1382},[1155,1443,1445],{"class":1157,"line":1444},7,[1155,1446,1447],{"emptyLinePlaceholder":21},"\n",[1155,1449,1451,1454,1456],{"class":1157,"line":1450},8,[1155,1452,1453],{"class":1388},"  hub",[1155,1455,1392],{"class":1382},[1155,1457,1458],{"class":1382}," {\n",[1155,1460,1462,1465,1467,1470,1473],{"class":1157,"line":1461},9,[1155,1463,1464],{"class":1388},"    db",[1155,1466,1392],{"class":1382},[1155,1468,1469],{"class":1382}," '",[1155,1471,1472],{"class":1165},"sqlite",[1155,1474,1433],{"class":1382},[1155,1476,1478],{"class":1157,"line":1477},10,[1155,1479,1480],{"class":1382},"  },\n",[1155,1482,1484],{"class":1157,"line":1483},11,[1155,1485,1447],{"emptyLinePlaceholder":21},[1155,1487,1489,1492,1494,1497,1499,1502,1504,1507],{"class":1157,"line":1488},12,[1155,1490,1491],{"class":1388},"  css",[1155,1493,1392],{"class":1382},[1155,1495,1496],{"class":1378}," [",[1155,1498,1407],{"class":1382},[1155,1500,1501],{"class":1165},"~\u002Fassets\u002Fcss\u002Fmain.css",[1155,1503,1407],{"class":1382},[1155,1505,1506],{"class":1378},"]",[1155,1508,1410],{"class":1382},[1155,1510,1512,1515],{"class":1157,"line":1511},13,[1155,1513,1514],{"class":1382},"}",[1155,1516,1517],{"class":1378},")\n",[1519,1520,1521],"note",{"to":888},[1045,1522,1523,1525,1526,1529],{},[1105,1524,1418],{}," automatically enables Nuxt UI's ",[1099,1527,1528],{"href":888},"prose components",", so Markdown rendered by Comark is styled to match your theme.",[1045,1531,1532],{},"Create the main CSS file to import Tailwind CSS and Nuxt UI:",[1355,1534,1535],{},[1146,1536,1541],{"className":1537,"code":1538,"filename":1539,"language":1540,"meta":1151,"style":1151},"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",[1105,1542,1543,1560],{"__ignoreMap":1151},[1155,1544,1545,1548,1551,1554,1557],{"class":1157,"line":1158},[1155,1546,1547],{"class":1368},"@import",[1155,1549,1550],{"class":1382}," \"",[1155,1552,1553],{"class":1165},"tailwindcss",[1155,1555,1556],{"class":1382},"\"",[1155,1558,1559],{"class":1382},";\n",[1155,1561,1562,1564,1566,1568,1570],{"class":1157,"line":1175},[1155,1563,1547],{"class":1368},[1155,1565,1550],{"class":1382},[1155,1567,1404],{"class":1165},[1155,1569,1556],{"class":1382},[1155,1571,1559],{"class":1382},[1183,1573,1575],{"id":1574},"setting-up-the-app","Setting up the app",[1045,1577,1578,1579,1582],{},"Nuxt UI requires wrapping your app with ",[1105,1580,1581],{},"UApp"," for modals, toasts, and overlays to work properly:",[1355,1584,1585],{},[1146,1586,1591],{"className":1587,"code":1588,"filename":1589,"highlights":1590,"language":34,"meta":1151,"style":1151},"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",[1175,1436],[1105,1592,1593,1604,1615,1639,1650,1659,1669],{"__ignoreMap":1151},[1155,1594,1595,1598,1601],{"class":1157,"line":1158},[1155,1596,1597],{"class":1382},"\u003C",[1155,1599,1600],{"class":1388},"template",[1155,1602,1603],{"class":1382},">\n",[1155,1605,1608,1611,1613],{"class":1606,"line":1175},[1157,1607],"highlight",[1155,1609,1610],{"class":1382},"  \u003C",[1155,1612,1581],{"class":1388},[1155,1614,1603],{"class":1382},[1155,1616,1617,1620,1623,1627,1630,1632,1635,1637],{"class":1157,"line":1398},[1155,1618,1619],{"class":1382},"    \u003C",[1155,1621,1622],{"class":1388},"UDashboardGroup",[1155,1624,1626],{"class":1625},"spNyl"," unit",[1155,1628,1629],{"class":1382},"=",[1155,1631,1556],{"class":1382},[1155,1633,1634],{"class":1165},"rem",[1155,1636,1556],{"class":1382},[1155,1638,1603],{"class":1382},[1155,1640,1641,1644,1647],{"class":1157,"line":1413},[1155,1642,1643],{"class":1382},"      \u003C",[1155,1645,1646],{"class":1388},"NuxtPage",[1155,1648,1649],{"class":1382}," \u002F>\n",[1155,1651,1652,1655,1657],{"class":1157,"line":1425},[1155,1653,1654],{"class":1382},"    \u003C\u002F",[1155,1656,1622],{"class":1388},[1155,1658,1603],{"class":1382},[1155,1660,1662,1665,1667],{"class":1661,"line":1436},[1157,1607],[1155,1663,1664],{"class":1382},"  \u003C\u002F",[1155,1666,1581],{"class":1388},[1155,1668,1603],{"class":1382},[1155,1670,1671,1674,1676],{"class":1157,"line":1444},[1155,1672,1673],{"class":1382},"\u003C\u002F",[1155,1675,1600],{"class":1388},[1155,1677,1603],{"class":1382},[1045,1679,1680,1681,1684],{},"Create a ",[1105,1682,1683],{},".env"," file with your AI Gateway API key:",[1355,1686,1687],{},[1146,1688,1690],{"className":1148,"code":1689,"filename":1683,"language":1150,"meta":1151,"style":1151},"AI_GATEWAY_API_KEY=your-api-key-here\n",[1105,1691,1692],{"__ignoreMap":1151},[1155,1693,1694,1697,1699],{"class":1157,"line":1158},[1155,1695,1696],{"class":1378},"AI_GATEWAY_API_KEY",[1155,1698,1629],{"class":1382},[1155,1700,1701],{"class":1165},"your-api-key-here\n",[1519,1703,1704],{},[1045,1705,1706,1707,1710],{},"With ",[1099,1708,1136],{"href":1134,"rel":1709},[1103],", 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.",[1183,1712,1714],{"id":1713},"setting-up-the-database","Setting up the database",[1045,1716,1717,1722,1723,1728],{},[1099,1718,1721],{"href":1719,"rel":1720},"https:\u002F\u002Fhub.nuxt.com",[1103],"NuxtHub"," provides a zero-config database powered by ",[1099,1724,1727],{"href":1725,"rel":1726},"https:\u002F\u002Form.drizzle.team",[1103],"Drizzle ORM",". Here is the schema for the chat application:",[1355,1730,1731],{},[1732,1733,1734],"code-collapse",{},[1146,1735,1738],{"className":1359,"code":1736,"filename":1737,"language":1361,"meta":1151,"style":1151},"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",[1105,1739,1740,1780,1800,1804,1831,1876,1889,1946,1952,1956,1991,2003,2010,2014,2041,2087,2154,2224,2264,2315,2328,2358,2364,2369,2401,2417,2435,2451,2459],{"__ignoreMap":1151},[1155,1741,1742,1745,1748,1751,1754,1757,1759,1762,1764,1767,1770,1773,1775,1778],{"class":1157,"line":1158},[1155,1743,1744],{"class":1368},"import",[1155,1746,1747],{"class":1382}," {",[1155,1749,1750],{"class":1378}," sqliteTable",[1155,1752,1753],{"class":1382},",",[1155,1755,1756],{"class":1378}," text",[1155,1758,1753],{"class":1382},[1155,1760,1761],{"class":1378}," integer",[1155,1763,1753],{"class":1382},[1155,1765,1766],{"class":1378}," index",[1155,1768,1769],{"class":1382}," }",[1155,1771,1772],{"class":1368}," from",[1155,1774,1469],{"class":1382},[1155,1776,1777],{"class":1165},"drizzle-orm\u002Fsqlite-core",[1155,1779,1433],{"class":1382},[1155,1781,1782,1784,1786,1789,1791,1793,1795,1798],{"class":1157,"line":1175},[1155,1783,1744],{"class":1368},[1155,1785,1747],{"class":1382},[1155,1787,1788],{"class":1378}," relations",[1155,1790,1769],{"class":1382},[1155,1792,1772],{"class":1368},[1155,1794,1469],{"class":1382},[1155,1796,1797],{"class":1165},"drizzle-orm",[1155,1799,1433],{"class":1382},[1155,1801,1802],{"class":1157,"line":1398},[1155,1803,1447],{"emptyLinePlaceholder":21},[1155,1805,1806,1808,1811,1814,1816,1818,1820,1822,1825,1827,1829],{"class":1157,"line":1413},[1155,1807,1369],{"class":1368},[1155,1809,1810],{"class":1625}," const",[1155,1812,1813],{"class":1378}," chats ",[1155,1815,1629],{"class":1382},[1155,1817,1750],{"class":1178},[1155,1819,1379],{"class":1378},[1155,1821,1407],{"class":1382},[1155,1823,1824],{"class":1165},"chats",[1155,1826,1407],{"class":1382},[1155,1828,1753],{"class":1382},[1155,1830,1458],{"class":1382},[1155,1832,1833,1836,1838,1840,1843,1846,1849,1851,1853,1856,1858,1860,1863,1866,1868,1871,1874],{"class":1157,"line":1425},[1155,1834,1835],{"class":1388},"  id",[1155,1837,1392],{"class":1382},[1155,1839,1756],{"class":1178},[1155,1841,1842],{"class":1378},"()",[1155,1844,1845],{"class":1382},".",[1155,1847,1848],{"class":1178},"primaryKey",[1155,1850,1842],{"class":1378},[1155,1852,1845],{"class":1382},[1155,1854,1855],{"class":1178},"$defaultFn",[1155,1857,1379],{"class":1378},[1155,1859,1842],{"class":1382},[1155,1861,1862],{"class":1625}," =>",[1155,1864,1865],{"class":1378}," crypto",[1155,1867,1845],{"class":1382},[1155,1869,1870],{"class":1178},"randomUUID",[1155,1872,1873],{"class":1378},"())",[1155,1875,1410],{"class":1382},[1155,1877,1878,1881,1883,1885,1887],{"class":1157,"line":1436},[1155,1879,1880],{"class":1388},"  title",[1155,1882,1392],{"class":1382},[1155,1884,1756],{"class":1178},[1155,1886,1842],{"class":1378},[1155,1888,1410],{"class":1382},[1155,1890,1891,1894,1896,1898,1900,1903,1906,1908,1910,1913,1915,1917,1920,1922,1925,1927,1929,1931,1933,1935,1937,1940,1943],{"class":1157,"line":1444},[1155,1892,1893],{"class":1388},"  createdAt",[1155,1895,1392],{"class":1382},[1155,1897,1761],{"class":1178},[1155,1899,1379],{"class":1378},[1155,1901,1902],{"class":1382},"{",[1155,1904,1905],{"class":1388}," mode",[1155,1907,1392],{"class":1382},[1155,1909,1469],{"class":1382},[1155,1911,1912],{"class":1165},"timestamp",[1155,1914,1407],{"class":1382},[1155,1916,1769],{"class":1382},[1155,1918,1919],{"class":1378},")",[1155,1921,1845],{"class":1382},[1155,1923,1924],{"class":1178},"notNull",[1155,1926,1842],{"class":1378},[1155,1928,1845],{"class":1382},[1155,1930,1855],{"class":1178},[1155,1932,1379],{"class":1378},[1155,1934,1842],{"class":1382},[1155,1936,1862],{"class":1625},[1155,1938,1939],{"class":1382}," new",[1155,1941,1942],{"class":1178}," Date",[1155,1944,1945],{"class":1378},"())\n",[1155,1947,1948,1950],{"class":1157,"line":1450},[1155,1949,1514],{"class":1382},[1155,1951,1517],{"class":1378},[1155,1953,1954],{"class":1157,"line":1461},[1155,1955,1447],{"emptyLinePlaceholder":21},[1155,1957,1958,1960,1962,1965,1967,1969,1972,1974,1977,1981,1984,1986,1989],{"class":1157,"line":1477},[1155,1959,1369],{"class":1368},[1155,1961,1810],{"class":1625},[1155,1963,1964],{"class":1378}," chatsRelations ",[1155,1966,1629],{"class":1382},[1155,1968,1788],{"class":1178},[1155,1970,1971],{"class":1378},"(chats",[1155,1973,1753],{"class":1382},[1155,1975,1976],{"class":1382}," ({",[1155,1978,1980],{"class":1979},"sHdIc"," many",[1155,1982,1983],{"class":1382}," })",[1155,1985,1862],{"class":1625},[1155,1987,1988],{"class":1378}," (",[1155,1990,1383],{"class":1382},[1155,1992,1993,1996,1998,2000],{"class":1157,"line":1483},[1155,1994,1995],{"class":1388},"  messages",[1155,1997,1392],{"class":1382},[1155,1999,1980],{"class":1178},[1155,2001,2002],{"class":1378},"(messages)\n",[1155,2004,2005,2007],{"class":1157,"line":1488},[1155,2006,1514],{"class":1382},[1155,2008,2009],{"class":1378},"))\n",[1155,2011,2012],{"class":1157,"line":1511},[1155,2013,1447],{"emptyLinePlaceholder":21},[1155,2015,2017,2019,2021,2024,2026,2028,2030,2032,2035,2037,2039],{"class":1157,"line":2016},14,[1155,2018,1369],{"class":1368},[1155,2020,1810],{"class":1625},[1155,2022,2023],{"class":1378}," messages ",[1155,2025,1629],{"class":1382},[1155,2027,1750],{"class":1178},[1155,2029,1379],{"class":1378},[1155,2031,1407],{"class":1382},[1155,2033,2034],{"class":1165},"messages",[1155,2036,1407],{"class":1382},[1155,2038,1753],{"class":1382},[1155,2040,1458],{"class":1382},[1155,2042,2044,2046,2048,2050,2052,2054,2057,2059,2061,2063,2065,2067,2069,2071,2073,2075,2077,2079,2081,2083,2085],{"class":1157,"line":2043},15,[1155,2045,1835],{"class":1388},[1155,2047,1392],{"class":1382},[1155,2049,1756],{"class":1178},[1155,2051,1379],{"class":1378},[1155,2053,1407],{"class":1382},[1155,2055,2056],{"class":1165},"id",[1155,2058,1407],{"class":1382},[1155,2060,1919],{"class":1378},[1155,2062,1845],{"class":1382},[1155,2064,1848],{"class":1178},[1155,2066,1842],{"class":1378},[1155,2068,1845],{"class":1382},[1155,2070,1855],{"class":1178},[1155,2072,1379],{"class":1378},[1155,2074,1842],{"class":1382},[1155,2076,1862],{"class":1625},[1155,2078,1865],{"class":1378},[1155,2080,1845],{"class":1382},[1155,2082,1870],{"class":1178},[1155,2084,1873],{"class":1378},[1155,2086,1410],{"class":1382},[1155,2088,2090,2093,2095,2097,2099,2101,2104,2106,2108,2110,2112,2114,2116,2119,2121,2123,2125,2128,2130,2132,2134,2136,2139,2141,2143,2146,2148,2150,2152],{"class":1157,"line":2089},16,[1155,2091,2092],{"class":1388},"  chatId",[1155,2094,1392],{"class":1382},[1155,2096,1756],{"class":1178},[1155,2098,1379],{"class":1378},[1155,2100,1407],{"class":1382},[1155,2102,2103],{"class":1165},"chat_id",[1155,2105,1407],{"class":1382},[1155,2107,1919],{"class":1378},[1155,2109,1845],{"class":1382},[1155,2111,1924],{"class":1178},[1155,2113,1842],{"class":1378},[1155,2115,1845],{"class":1382},[1155,2117,2118],{"class":1178},"references",[1155,2120,1379],{"class":1378},[1155,2122,1842],{"class":1382},[1155,2124,1862],{"class":1625},[1155,2126,2127],{"class":1378}," chats",[1155,2129,1845],{"class":1382},[1155,2131,2056],{"class":1378},[1155,2133,1753],{"class":1382},[1155,2135,1747],{"class":1382},[1155,2137,2138],{"class":1388}," onDelete",[1155,2140,1392],{"class":1382},[1155,2142,1469],{"class":1382},[1155,2144,2145],{"class":1165},"cascade",[1155,2147,1407],{"class":1382},[1155,2149,1769],{"class":1382},[1155,2151,1919],{"class":1378},[1155,2153,1410],{"class":1382},[1155,2155,2157,2160,2162,2164,2166,2168,2171,2173,2175,2177,2180,2182,2184,2186,2189,2191,2193,2195,2198,2200,2202,2204,2207,2209,2212,2214,2216,2218,2220,2222],{"class":1157,"line":2156},17,[1155,2158,2159],{"class":1388},"  role",[1155,2161,1392],{"class":1382},[1155,2163,1756],{"class":1178},[1155,2165,1379],{"class":1378},[1155,2167,1407],{"class":1382},[1155,2169,2170],{"class":1165},"role",[1155,2172,1407],{"class":1382},[1155,2174,1753],{"class":1382},[1155,2176,1747],{"class":1382},[1155,2178,2179],{"class":1388}," enum",[1155,2181,1392],{"class":1382},[1155,2183,1496],{"class":1378},[1155,2185,1407],{"class":1382},[1155,2187,2188],{"class":1165},"user",[1155,2190,1407],{"class":1382},[1155,2192,1753],{"class":1382},[1155,2194,1469],{"class":1382},[1155,2196,2197],{"class":1165},"assistant",[1155,2199,1407],{"class":1382},[1155,2201,1753],{"class":1382},[1155,2203,1469],{"class":1382},[1155,2205,2206],{"class":1165},"system",[1155,2208,1407],{"class":1382},[1155,2210,2211],{"class":1378},"] ",[1155,2213,1514],{"class":1382},[1155,2215,1919],{"class":1378},[1155,2217,1845],{"class":1382},[1155,2219,1924],{"class":1178},[1155,2221,1842],{"class":1378},[1155,2223,1410],{"class":1382},[1155,2225,2227,2230,2232,2234,2236,2238,2241,2243,2245,2247,2249,2251,2253,2256,2258,2260,2262],{"class":1157,"line":2226},18,[1155,2228,2229],{"class":1388},"  parts",[1155,2231,1392],{"class":1382},[1155,2233,1756],{"class":1178},[1155,2235,1379],{"class":1378},[1155,2237,1407],{"class":1382},[1155,2239,2240],{"class":1165},"parts",[1155,2242,1407],{"class":1382},[1155,2244,1753],{"class":1382},[1155,2246,1747],{"class":1382},[1155,2248,1905],{"class":1388},[1155,2250,1392],{"class":1382},[1155,2252,1469],{"class":1382},[1155,2254,2255],{"class":1165},"json",[1155,2257,1407],{"class":1382},[1155,2259,1769],{"class":1382},[1155,2261,1919],{"class":1378},[1155,2263,1410],{"class":1382},[1155,2265,2267,2269,2271,2273,2275,2277,2279,2281,2283,2285,2287,2289,2291,2293,2295,2297,2299,2301,2303,2305,2307,2309,2311,2313],{"class":1157,"line":2266},19,[1155,2268,1893],{"class":1388},[1155,2270,1392],{"class":1382},[1155,2272,1761],{"class":1178},[1155,2274,1379],{"class":1378},[1155,2276,1902],{"class":1382},[1155,2278,1905],{"class":1388},[1155,2280,1392],{"class":1382},[1155,2282,1469],{"class":1382},[1155,2284,1912],{"class":1165},[1155,2286,1407],{"class":1382},[1155,2288,1769],{"class":1382},[1155,2290,1919],{"class":1378},[1155,2292,1845],{"class":1382},[1155,2294,1924],{"class":1178},[1155,2296,1842],{"class":1378},[1155,2298,1845],{"class":1382},[1155,2300,1855],{"class":1178},[1155,2302,1379],{"class":1378},[1155,2304,1842],{"class":1382},[1155,2306,1862],{"class":1625},[1155,2308,1939],{"class":1382},[1155,2310,1942],{"class":1178},[1155,2312,1873],{"class":1378},[1155,2314,1410],{"class":1382},[1155,2316,2318,2321,2324,2326],{"class":1157,"line":2317},20,[1155,2319,2320],{"class":1382},"},",[1155,2322,2323],{"class":1979}," table",[1155,2325,1862],{"class":1625},[1155,2327,1395],{"class":1378},[1155,2329,2331,2334,2336,2338,2341,2343,2345,2347,2350,2353,2355],{"class":1157,"line":2330},21,[1155,2332,2333],{"class":1178},"  index",[1155,2335,1379],{"class":1378},[1155,2337,1407],{"class":1382},[1155,2339,2340],{"class":1165},"messages_chat_id_idx",[1155,2342,1407],{"class":1382},[1155,2344,1919],{"class":1378},[1155,2346,1845],{"class":1382},[1155,2348,2349],{"class":1178},"on",[1155,2351,2352],{"class":1378},"(table",[1155,2354,1845],{"class":1382},[1155,2356,2357],{"class":1378},"chatId)\n",[1155,2359,2361],{"class":1157,"line":2360},22,[1155,2362,2363],{"class":1378},"])\n",[1155,2365,2367],{"class":1157,"line":2366},23,[1155,2368,1447],{"emptyLinePlaceholder":21},[1155,2370,2372,2374,2376,2379,2381,2383,2386,2388,2390,2393,2395,2397,2399],{"class":1157,"line":2371},24,[1155,2373,1369],{"class":1368},[1155,2375,1810],{"class":1625},[1155,2377,2378],{"class":1378}," messagesRelations ",[1155,2380,1629],{"class":1382},[1155,2382,1788],{"class":1178},[1155,2384,2385],{"class":1378},"(messages",[1155,2387,1753],{"class":1382},[1155,2389,1976],{"class":1382},[1155,2391,2392],{"class":1979}," one",[1155,2394,1983],{"class":1382},[1155,2396,1862],{"class":1625},[1155,2398,1988],{"class":1378},[1155,2400,1383],{"class":1382},[1155,2402,2404,2407,2409,2411,2413,2415],{"class":1157,"line":2403},25,[1155,2405,2406],{"class":1388},"  chat",[1155,2408,1392],{"class":1382},[1155,2410,2392],{"class":1178},[1155,2412,1971],{"class":1378},[1155,2414,1753],{"class":1382},[1155,2416,1458],{"class":1382},[1155,2418,2420,2423,2425,2428,2430,2433],{"class":1157,"line":2419},26,[1155,2421,2422],{"class":1388},"    fields",[1155,2424,1392],{"class":1382},[1155,2426,2427],{"class":1378}," [messages",[1155,2429,1845],{"class":1382},[1155,2431,2432],{"class":1378},"chatId]",[1155,2434,1410],{"class":1382},[1155,2436,2438,2441,2443,2446,2448],{"class":1157,"line":2437},27,[1155,2439,2440],{"class":1388},"    references",[1155,2442,1392],{"class":1382},[1155,2444,2445],{"class":1378}," [chats",[1155,2447,1845],{"class":1382},[1155,2449,2450],{"class":1378},"id]\n",[1155,2452,2454,2457],{"class":1157,"line":2453},28,[1155,2455,2456],{"class":1382},"  }",[1155,2458,1517],{"class":1378},[1155,2460,2462,2464],{"class":1157,"line":2461},29,[1155,2463,1514],{"class":1382},[1155,2465,2009],{"class":1378},[1045,2467,2468],{},"Generate the database migrations from your schema:",[1146,2470,2472],{"className":1148,"code":2471,"language":1150,"meta":1151,"style":1151},"npx nuxt db generate\n",[1105,2473,2474],{"__ignoreMap":1151},[1155,2475,2476,2478,2481,2484],{"class":1157,"line":1158},[1155,2477,1162],{"class":1161},[1155,2479,2480],{"class":1165}," nuxt",[1155,2482,2483],{"class":1165}," db",[1155,2485,2486],{"class":1165}," generate\n",[2488,2489,2490],"tip",{},[1045,2491,2492,2493,2496],{},"Migrations are automatically applied when you start the development server with ",[1105,2494,2495],{},"npx nuxt dev",". NuxtHub uses SQLite locally, so no external database is required during development.",[1049,2498,2500],{"id":2499},"building-the-backend","Building the backend",[1045,2502,2503,2504,1845],{},"This section covers integrating AI on the server. The following API endpoints handle chat creation, AI streaming, and data persistence using ",[1099,2505,2508],{"href":2506,"rel":2507},"https:\u002F\u002Fnitro.build",[1103],"Nitro",[1183,2510,2512],{"id":2511},"creating-a-chat","Creating a chat",[1045,2514,2515,2516,2523],{},"First, create the endpoint that initializes a new chat and saves the first message to the database. This uses the ",[1099,2517,2520],{"href":2518,"rel":2519},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-core\u002Fui-message",[1103],[1105,2521,2522],{},"UIMessage"," type from the AI SDK:",[1355,2525,2526],{},[1146,2527,2530],{"className":1359,"code":2528,"filename":2529,"language":1361,"meta":1151,"style":1151},"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",[1105,2531,2532,2556,2579,2603,2623,2627,2651,2688,2712,2725,2729,2735,2786,2790,2795,2824,2840,2855,2869,2875,2879,2887],{"__ignoreMap":1151},[1155,2533,2534,2536,2538,2541,2543,2546,2548,2550,2552,2554],{"class":1157,"line":1158},[1155,2535,1744],{"class":1368},[1155,2537,1747],{"class":1382},[1155,2539,2540],{"class":1378}," defineEventHandler",[1155,2542,1753],{"class":1382},[1155,2544,2545],{"class":1378}," readValidatedBody",[1155,2547,1769],{"class":1382},[1155,2549,1772],{"class":1368},[1155,2551,1469],{"class":1382},[1155,2553,1183],{"class":1165},[1155,2555,1433],{"class":1382},[1155,2557,2558,2560,2563,2565,2568,2570,2572,2574,2577],{"class":1157,"line":1175},[1155,2559,1744],{"class":1368},[1155,2561,2562],{"class":1368}," type",[1155,2564,1747],{"class":1382},[1155,2566,2567],{"class":1378}," UIMessage",[1155,2569,1769],{"class":1382},[1155,2571,1772],{"class":1368},[1155,2573,1469],{"class":1382},[1155,2575,2576],{"class":1165},"ai",[1155,2578,1433],{"class":1382},[1155,2580,2581,2583,2585,2587,2589,2592,2594,2596,2598,2601],{"class":1157,"line":1398},[1155,2582,1744],{"class":1368},[1155,2584,1747],{"class":1382},[1155,2586,2483],{"class":1378},[1155,2588,1753],{"class":1382},[1155,2590,2591],{"class":1378}," schema",[1155,2593,1769],{"class":1382},[1155,2595,1772],{"class":1368},[1155,2597,1469],{"class":1382},[1155,2599,2600],{"class":1165},"hub:db",[1155,2602,1433],{"class":1382},[1155,2604,2605,2607,2609,2612,2614,2616,2618,2621],{"class":1157,"line":1413},[1155,2606,1744],{"class":1368},[1155,2608,1747],{"class":1382},[1155,2610,2611],{"class":1378}," z",[1155,2613,1769],{"class":1382},[1155,2615,1772],{"class":1368},[1155,2617,1469],{"class":1382},[1155,2619,2620],{"class":1165},"zod",[1155,2622,1433],{"class":1382},[1155,2624,2625],{"class":1157,"line":1425},[1155,2626,1447],{"emptyLinePlaceholder":21},[1155,2628,2629,2631,2633,2635,2637,2640,2642,2645,2647,2649],{"class":1157,"line":1436},[1155,2630,1369],{"class":1368},[1155,2632,1372],{"class":1368},[1155,2634,2540],{"class":1178},[1155,2636,1379],{"class":1378},[1155,2638,2639],{"class":1625},"async",[1155,2641,1988],{"class":1382},[1155,2643,2644],{"class":1979},"event",[1155,2646,1919],{"class":1382},[1155,2648,1862],{"class":1625},[1155,2650,1458],{"class":1382},[1155,2652,2653,2656,2658,2661,2663,2666,2669,2671,2673,2675,2677,2679,2681,2684,2686],{"class":1157,"line":1444},[1155,2654,2655],{"class":1625},"  const",[1155,2657,1747],{"class":1382},[1155,2659,2660],{"class":1378}," message",[1155,2662,1769],{"class":1382},[1155,2664,2665],{"class":1382}," =",[1155,2667,2668],{"class":1368}," await",[1155,2670,2545],{"class":1178},[1155,2672,1379],{"class":1388},[1155,2674,2644],{"class":1378},[1155,2676,1753],{"class":1382},[1155,2678,2611],{"class":1378},[1155,2680,1845],{"class":1382},[1155,2682,2683],{"class":1178},"object",[1155,2685,1379],{"class":1388},[1155,2687,1383],{"class":1382},[1155,2689,2690,2693,2695,2697,2699,2702,2704,2706,2709],{"class":1157,"line":1450},[1155,2691,2692],{"class":1388},"    message",[1155,2694,1392],{"class":1382},[1155,2696,2611],{"class":1378},[1155,2698,1845],{"class":1382},[1155,2700,2701],{"class":1178},"custom",[1155,2703,1597],{"class":1382},[1155,2705,2522],{"class":1161},[1155,2707,2708],{"class":1382},">",[1155,2710,2711],{"class":1388},"()\n",[1155,2713,2714,2716,2718,2720,2723],{"class":1157,"line":1461},[1155,2715,2456],{"class":1382},[1155,2717,1919],{"class":1388},[1155,2719,1845],{"class":1382},[1155,2721,2722],{"class":1378},"parse",[1155,2724,1517],{"class":1388},[1155,2726,2727],{"class":1157,"line":1477},[1155,2728,1447],{"emptyLinePlaceholder":21},[1155,2730,2731],{"class":1157,"line":1483},[1155,2732,2734],{"class":2733},"sHwdD","  \u002F\u002F Create a new chat\n",[1155,2736,2737,2739,2741,2743,2745,2747,2749,2751,2753,2756,2758,2761,2763,2765,2767,2769,2772,2774,2777,2779,2781,2784],{"class":1157,"line":1488},[1155,2738,2655],{"class":1625},[1155,2740,1496],{"class":1382},[1155,2742,266],{"class":1378},[1155,2744,1506],{"class":1382},[1155,2746,2665],{"class":1382},[1155,2748,2668],{"class":1368},[1155,2750,2483],{"class":1378},[1155,2752,1845],{"class":1382},[1155,2754,2755],{"class":1178},"insert",[1155,2757,1379],{"class":1388},[1155,2759,2760],{"class":1378},"schema",[1155,2762,1845],{"class":1382},[1155,2764,1824],{"class":1378},[1155,2766,1919],{"class":1388},[1155,2768,1845],{"class":1382},[1155,2770,2771],{"class":1178},"values",[1155,2773,1379],{"class":1388},[1155,2775,2776],{"class":1382},"{}",[1155,2778,1919],{"class":1388},[1155,2780,1845],{"class":1382},[1155,2782,2783],{"class":1178},"returning",[1155,2785,2711],{"class":1388},[1155,2787,2788],{"class":1157,"line":1511},[1155,2789,1447],{"emptyLinePlaceholder":21},[1155,2791,2792],{"class":1157,"line":2016},[1155,2793,2794],{"class":2733},"  \u002F\u002F Save the first user message\n",[1155,2796,2797,2800,2802,2804,2806,2808,2810,2812,2814,2816,2818,2820,2822],{"class":1157,"line":2043},[1155,2798,2799],{"class":1368},"  await",[1155,2801,2483],{"class":1378},[1155,2803,1845],{"class":1382},[1155,2805,2755],{"class":1178},[1155,2807,1379],{"class":1388},[1155,2809,2760],{"class":1378},[1155,2811,1845],{"class":1382},[1155,2813,2034],{"class":1378},[1155,2815,1919],{"class":1388},[1155,2817,1845],{"class":1382},[1155,2819,2771],{"class":1178},[1155,2821,1379],{"class":1388},[1155,2823,1383],{"class":1382},[1155,2825,2826,2829,2831,2834,2836,2838],{"class":1157,"line":2089},[1155,2827,2828],{"class":1388},"    chatId",[1155,2830,1392],{"class":1382},[1155,2832,2833],{"class":1378}," chat",[1155,2835,1845],{"class":1382},[1155,2837,2056],{"class":1378},[1155,2839,1410],{"class":1382},[1155,2841,2842,2845,2847,2849,2851,2853],{"class":1157,"line":2156},[1155,2843,2844],{"class":1388},"    role",[1155,2846,1392],{"class":1382},[1155,2848,1469],{"class":1382},[1155,2850,2188],{"class":1165},[1155,2852,1407],{"class":1382},[1155,2854,1410],{"class":1382},[1155,2856,2857,2860,2862,2864,2866],{"class":1157,"line":2226},[1155,2858,2859],{"class":1388},"    parts",[1155,2861,1392],{"class":1382},[1155,2863,2660],{"class":1378},[1155,2865,1845],{"class":1382},[1155,2867,2868],{"class":1378},"parts\n",[1155,2870,2871,2873],{"class":1157,"line":2266},[1155,2872,2456],{"class":1382},[1155,2874,1517],{"class":1388},[1155,2876,2877],{"class":1157,"line":2317},[1155,2878,1447],{"emptyLinePlaceholder":21},[1155,2880,2881,2884],{"class":1157,"line":2330},[1155,2882,2883],{"class":1368},"  return",[1155,2885,2886],{"class":1378}," chat\n",[1155,2888,2889,2891],{"class":1157,"line":2360},[1155,2890,1514],{"class":1382},[1155,2892,1517],{"class":1378},[1183,2894,2896],{"id":2895},"streaming-ai-responses","Streaming AI responses",[1045,2898,2899,2900,2907,2908,2915,2916,2923],{},"Next, create the endpoint that handles the AI conversation. This endpoint uses ",[1099,2901,2904],{"href":2902,"rel":2903},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-core\u002Fstream-text",[1103],[1105,2905,2906],{},"streamText",", ",[1099,2909,2912],{"href":2910,"rel":2911},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream",[1103],[1105,2913,2914],{},"createUIMessageStream",", and ",[1099,2917,2920],{"href":2918,"rel":2919},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream-response",[1103],[1105,2921,2922],{},"createUIMessageStreamResponse"," from the AI SDK:",[1355,2925,2926],{},[1732,2927,2928],{},[1146,2929,2932],{"className":1359,"code":2930,"filename":2931,"language":1361,"meta":1151,"style":1151},"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  toUIMessageStream\n} from 'ai'\nimport type { UIMessage } from 'ai'\n\nconst DEFAULT_MODEL = 'anthropic\u002Fclaude-haiku-4.5'\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 = DEFAULT_MODEL, messages } = await readValidatedBody(event, z.object({\n    model: z.string().refine(value => MODELS.some(m => m.value === value), {\n      message: 'Invalid model'\n    }).optional(),\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: DEFAULT_MODEL,\n      instructions: `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        instructions: `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(toUIMessageStream({ stream: result.stream }))\n    },\n    onEnd: 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",[1105,2933,2934,2966,2985,3007,3025,3031,3038,3045,3052,3059,3066,3071,3083,3103,3107,3124,3128,3139,3173,3202,3233,3238,3242,3264,3297,3313,3325,3329,3372,3432,3447,3464,3496,3509,3514,3520,3551,3595,3602,3607,3625,3664,3670,3675,3681,3701,3729,3741,3760,3788,3795,3800,3866,3871,3876,3882,3911,3952,3981,3993,4009,4023,4030,4035,4040,4046,4063,4085,4103,4111,4128,4149,4159,4169,4179,4196,4207,4213,4219,4229,4239,4253,4268,4273,4278,4288,4304,4319,4325,4331,4339,4344,4350,4370,4385,4402,4425,4436,4444,4450,4455,4490,4496,4516,4522,4568,4584,4617,4631,4639,4645,4652,4657,4675],{"__ignoreMap":1151},[1155,2935,2936,2938,2940,2943,2945,2947,2949,2952,2954,2956,2958,2960,2962,2964],{"class":1157,"line":1158},[1155,2937,1744],{"class":1368},[1155,2939,1747],{"class":1382},[1155,2941,2942],{"class":1378}," createError",[1155,2944,1753],{"class":1382},[1155,2946,2540],{"class":1378},[1155,2948,1753],{"class":1382},[1155,2950,2951],{"class":1378}," getValidatedRouterParams",[1155,2953,1753],{"class":1382},[1155,2955,2545],{"class":1378},[1155,2957,1769],{"class":1382},[1155,2959,1772],{"class":1368},[1155,2961,1469],{"class":1382},[1155,2963,1183],{"class":1165},[1155,2965,1433],{"class":1382},[1155,2967,2968,2970,2972,2975,2977,2979,2981,2983],{"class":1157,"line":1175},[1155,2969,1744],{"class":1368},[1155,2971,1747],{"class":1382},[1155,2973,2974],{"class":1378}," eq",[1155,2976,1769],{"class":1382},[1155,2978,1772],{"class":1368},[1155,2980,1469],{"class":1382},[1155,2982,1797],{"class":1165},[1155,2984,1433],{"class":1382},[1155,2986,2987,2989,2991,2993,2995,2997,2999,3001,3003,3005],{"class":1157,"line":1398},[1155,2988,1744],{"class":1368},[1155,2990,1747],{"class":1382},[1155,2992,2483],{"class":1378},[1155,2994,1753],{"class":1382},[1155,2996,2591],{"class":1378},[1155,2998,1769],{"class":1382},[1155,3000,1772],{"class":1368},[1155,3002,1469],{"class":1382},[1155,3004,2600],{"class":1165},[1155,3006,1433],{"class":1382},[1155,3008,3009,3011,3013,3015,3017,3019,3021,3023],{"class":1157,"line":1413},[1155,3010,1744],{"class":1368},[1155,3012,1747],{"class":1382},[1155,3014,2611],{"class":1378},[1155,3016,1769],{"class":1382},[1155,3018,1772],{"class":1368},[1155,3020,1469],{"class":1382},[1155,3022,2620],{"class":1165},[1155,3024,1433],{"class":1382},[1155,3026,3027,3029],{"class":1157,"line":1425},[1155,3028,1744],{"class":1368},[1155,3030,1458],{"class":1382},[1155,3032,3033,3036],{"class":1157,"line":1436},[1155,3034,3035],{"class":1378},"  convertToModelMessages",[1155,3037,1410],{"class":1382},[1155,3039,3040,3043],{"class":1157,"line":1444},[1155,3041,3042],{"class":1378},"  createUIMessageStream",[1155,3044,1410],{"class":1382},[1155,3046,3047,3050],{"class":1157,"line":1450},[1155,3048,3049],{"class":1378},"  createUIMessageStreamResponse",[1155,3051,1410],{"class":1382},[1155,3053,3054,3057],{"class":1157,"line":1461},[1155,3055,3056],{"class":1378},"  generateText",[1155,3058,1410],{"class":1382},[1155,3060,3061,3064],{"class":1157,"line":1477},[1155,3062,3063],{"class":1378},"  streamText",[1155,3065,1410],{"class":1382},[1155,3067,3068],{"class":1157,"line":1483},[1155,3069,3070],{"class":1378},"  toUIMessageStream\n",[1155,3072,3073,3075,3077,3079,3081],{"class":1157,"line":1488},[1155,3074,1514],{"class":1382},[1155,3076,1772],{"class":1368},[1155,3078,1469],{"class":1382},[1155,3080,2576],{"class":1165},[1155,3082,1433],{"class":1382},[1155,3084,3085,3087,3089,3091,3093,3095,3097,3099,3101],{"class":1157,"line":1511},[1155,3086,1744],{"class":1368},[1155,3088,2562],{"class":1368},[1155,3090,1747],{"class":1382},[1155,3092,2567],{"class":1378},[1155,3094,1769],{"class":1382},[1155,3096,1772],{"class":1368},[1155,3098,1469],{"class":1382},[1155,3100,2576],{"class":1165},[1155,3102,1433],{"class":1382},[1155,3104,3105],{"class":1157,"line":2016},[1155,3106,1447],{"emptyLinePlaceholder":21},[1155,3108,3109,3112,3115,3117,3119,3122],{"class":1157,"line":2043},[1155,3110,3111],{"class":1625},"const",[1155,3113,3114],{"class":1378}," DEFAULT_MODEL ",[1155,3116,1629],{"class":1382},[1155,3118,1469],{"class":1382},[1155,3120,3121],{"class":1165},"anthropic\u002Fclaude-haiku-4.5",[1155,3123,1433],{"class":1382},[1155,3125,3126],{"class":1157,"line":2089},[1155,3127,1447],{"emptyLinePlaceholder":21},[1155,3129,3130,3132,3135,3137],{"class":1157,"line":2156},[1155,3131,3111],{"class":1625},[1155,3133,3134],{"class":1378}," MODELS ",[1155,3136,1629],{"class":1382},[1155,3138,1395],{"class":1378},[1155,3140,3141,3144,3147,3149,3151,3154,3156,3158,3161,3163,3165,3168,3170],{"class":1157,"line":2226},[1155,3142,3143],{"class":1382},"  {",[1155,3145,3146],{"class":1388}," value",[1155,3148,1392],{"class":1382},[1155,3150,1469],{"class":1382},[1155,3152,3153],{"class":1165},"openai\u002Fgpt-5-nano",[1155,3155,1407],{"class":1382},[1155,3157,1753],{"class":1382},[1155,3159,3160],{"class":1388}," label",[1155,3162,1392],{"class":1382},[1155,3164,1469],{"class":1382},[1155,3166,3167],{"class":1165},"GPT-5 Nano",[1155,3169,1407],{"class":1382},[1155,3171,3172],{"class":1382}," },\n",[1155,3174,3175,3177,3179,3181,3183,3185,3187,3189,3191,3193,3195,3198,3200],{"class":1157,"line":2266},[1155,3176,3143],{"class":1382},[1155,3178,3146],{"class":1388},[1155,3180,1392],{"class":1382},[1155,3182,1469],{"class":1382},[1155,3184,3121],{"class":1165},[1155,3186,1407],{"class":1382},[1155,3188,1753],{"class":1382},[1155,3190,3160],{"class":1388},[1155,3192,1392],{"class":1382},[1155,3194,1469],{"class":1382},[1155,3196,3197],{"class":1165},"Claude Haiku 4.5",[1155,3199,1407],{"class":1382},[1155,3201,3172],{"class":1382},[1155,3203,3204,3206,3208,3210,3212,3215,3217,3219,3221,3223,3225,3228,3230],{"class":1157,"line":2317},[1155,3205,3143],{"class":1382},[1155,3207,3146],{"class":1388},[1155,3209,1392],{"class":1382},[1155,3211,1469],{"class":1382},[1155,3213,3214],{"class":1165},"google\u002Fgemini-3-flash",[1155,3216,1407],{"class":1382},[1155,3218,1753],{"class":1382},[1155,3220,3160],{"class":1388},[1155,3222,1392],{"class":1382},[1155,3224,1469],{"class":1382},[1155,3226,3227],{"class":1165},"Gemini 3 Flash",[1155,3229,1407],{"class":1382},[1155,3231,3232],{"class":1382}," }\n",[1155,3234,3235],{"class":1157,"line":2330},[1155,3236,3237],{"class":1378},"]\n",[1155,3239,3240],{"class":1157,"line":2360},[1155,3241,1447],{"emptyLinePlaceholder":21},[1155,3243,3244,3246,3248,3250,3252,3254,3256,3258,3260,3262],{"class":1157,"line":2366},[1155,3245,1369],{"class":1368},[1155,3247,1372],{"class":1368},[1155,3249,2540],{"class":1178},[1155,3251,1379],{"class":1378},[1155,3253,2639],{"class":1625},[1155,3255,1988],{"class":1382},[1155,3257,2644],{"class":1979},[1155,3259,1919],{"class":1382},[1155,3261,1862],{"class":1625},[1155,3263,1458],{"class":1382},[1155,3265,3266,3268,3270,3273,3275,3277,3279,3281,3283,3285,3287,3289,3291,3293,3295],{"class":1157,"line":2371},[1155,3267,2655],{"class":1625},[1155,3269,1747],{"class":1382},[1155,3271,3272],{"class":1378}," id",[1155,3274,1769],{"class":1382},[1155,3276,2665],{"class":1382},[1155,3278,2668],{"class":1368},[1155,3280,2951],{"class":1178},[1155,3282,1379],{"class":1388},[1155,3284,2644],{"class":1378},[1155,3286,1753],{"class":1382},[1155,3288,2611],{"class":1378},[1155,3290,1845],{"class":1382},[1155,3292,2683],{"class":1178},[1155,3294,1379],{"class":1388},[1155,3296,1383],{"class":1382},[1155,3298,3299,3302,3304,3306,3308,3311],{"class":1157,"line":2403},[1155,3300,3301],{"class":1388},"    id",[1155,3303,1392],{"class":1382},[1155,3305,2611],{"class":1378},[1155,3307,1845],{"class":1382},[1155,3309,3310],{"class":1178},"string",[1155,3312,2711],{"class":1388},[1155,3314,3315,3317,3319,3321,3323],{"class":1157,"line":2419},[1155,3316,2456],{"class":1382},[1155,3318,1919],{"class":1388},[1155,3320,1845],{"class":1382},[1155,3322,2722],{"class":1378},[1155,3324,1517],{"class":1388},[1155,3326,3327],{"class":1157,"line":2437},[1155,3328,1447],{"emptyLinePlaceholder":21},[1155,3330,3331,3333,3335,3338,3340,3343,3345,3348,3350,3352,3354,3356,3358,3360,3362,3364,3366,3368,3370],{"class":1157,"line":2453},[1155,3332,2655],{"class":1625},[1155,3334,1747],{"class":1382},[1155,3336,3337],{"class":1378}," model",[1155,3339,2665],{"class":1382},[1155,3341,3342],{"class":1378}," DEFAULT_MODEL",[1155,3344,1753],{"class":1382},[1155,3346,3347],{"class":1378}," messages",[1155,3349,1769],{"class":1382},[1155,3351,2665],{"class":1382},[1155,3353,2668],{"class":1368},[1155,3355,2545],{"class":1178},[1155,3357,1379],{"class":1388},[1155,3359,2644],{"class":1378},[1155,3361,1753],{"class":1382},[1155,3363,2611],{"class":1378},[1155,3365,1845],{"class":1382},[1155,3367,2683],{"class":1178},[1155,3369,1379],{"class":1388},[1155,3371,1383],{"class":1382},[1155,3373,3374,3377,3379,3381,3383,3385,3387,3389,3392,3394,3397,3399,3402,3404,3407,3409,3412,3414,3417,3419,3421,3424,3426,3428,3430],{"class":1157,"line":2461},[1155,3375,3376],{"class":1388},"    model",[1155,3378,1392],{"class":1382},[1155,3380,2611],{"class":1378},[1155,3382,1845],{"class":1382},[1155,3384,3310],{"class":1178},[1155,3386,1842],{"class":1388},[1155,3388,1845],{"class":1382},[1155,3390,3391],{"class":1178},"refine",[1155,3393,1379],{"class":1388},[1155,3395,3396],{"class":1979},"value",[1155,3398,1862],{"class":1625},[1155,3400,3401],{"class":1378}," MODELS",[1155,3403,1845],{"class":1382},[1155,3405,3406],{"class":1178},"some",[1155,3408,1379],{"class":1388},[1155,3410,3411],{"class":1979},"m",[1155,3413,1862],{"class":1625},[1155,3415,3416],{"class":1378}," m",[1155,3418,1845],{"class":1382},[1155,3420,3396],{"class":1378},[1155,3422,3423],{"class":1382}," ===",[1155,3425,3146],{"class":1378},[1155,3427,1919],{"class":1388},[1155,3429,1753],{"class":1382},[1155,3431,1458],{"class":1382},[1155,3433,3435,3438,3440,3442,3445],{"class":1157,"line":3434},30,[1155,3436,3437],{"class":1388},"      message",[1155,3439,1392],{"class":1382},[1155,3441,1469],{"class":1382},[1155,3443,3444],{"class":1165},"Invalid model",[1155,3446,1433],{"class":1382},[1155,3448,3450,3453,3455,3457,3460,3462],{"class":1157,"line":3449},31,[1155,3451,3452],{"class":1382},"    }",[1155,3454,1919],{"class":1388},[1155,3456,1845],{"class":1382},[1155,3458,3459],{"class":1178},"optional",[1155,3461,1842],{"class":1388},[1155,3463,1410],{"class":1382},[1155,3465,3467,3470,3472,3474,3476,3479,3481,3484,3486,3488,3490,3492,3494],{"class":1157,"line":3466},32,[1155,3468,3469],{"class":1388},"    messages",[1155,3471,1392],{"class":1382},[1155,3473,2611],{"class":1378},[1155,3475,1845],{"class":1382},[1155,3477,3478],{"class":1178},"array",[1155,3480,1379],{"class":1388},[1155,3482,3483],{"class":1378},"z",[1155,3485,1845],{"class":1382},[1155,3487,2701],{"class":1178},[1155,3489,1597],{"class":1382},[1155,3491,2522],{"class":1161},[1155,3493,2708],{"class":1382},[1155,3495,1945],{"class":1388},[1155,3497,3499,3501,3503,3505,3507],{"class":1157,"line":3498},33,[1155,3500,2456],{"class":1382},[1155,3502,1919],{"class":1388},[1155,3504,1845],{"class":1382},[1155,3506,2722],{"class":1378},[1155,3508,1517],{"class":1388},[1155,3510,3512],{"class":1157,"line":3511},34,[1155,3513,1447],{"emptyLinePlaceholder":21},[1155,3515,3517],{"class":1157,"line":3516},35,[1155,3518,3519],{"class":2733},"  \u002F\u002F Fetch the chat from the database\n",[1155,3521,3523,3525,3527,3529,3531,3533,3535,3538,3540,3542,3544,3547,3549],{"class":1157,"line":3522},36,[1155,3524,2655],{"class":1625},[1155,3526,2833],{"class":1378},[1155,3528,2665],{"class":1382},[1155,3530,2668],{"class":1368},[1155,3532,2483],{"class":1378},[1155,3534,1845],{"class":1382},[1155,3536,3537],{"class":1378},"query",[1155,3539,1845],{"class":1382},[1155,3541,1824],{"class":1378},[1155,3543,1845],{"class":1382},[1155,3545,3546],{"class":1178},"findFirst",[1155,3548,1379],{"class":1388},[1155,3550,1383],{"class":1382},[1155,3552,3554,3557,3559,3561,3563,3565,3567,3569,3571,3573,3575,3577,3579,3581,3583,3585,3587,3590,3593],{"class":1157,"line":3553},37,[1155,3555,3556],{"class":1178},"    where",[1155,3558,1392],{"class":1382},[1155,3560,1988],{"class":1382},[1155,3562,266],{"class":1979},[1155,3564,1753],{"class":1382},[1155,3566,1747],{"class":1382},[1155,3568,2974],{"class":1979},[1155,3570,1983],{"class":1382},[1155,3572,1862],{"class":1625},[1155,3574,2974],{"class":1178},[1155,3576,1379],{"class":1388},[1155,3578,266],{"class":1378},[1155,3580,1845],{"class":1382},[1155,3582,2056],{"class":1378},[1155,3584,1753],{"class":1382},[1155,3586,3272],{"class":1378},[1155,3588,3589],{"class":1368}," as",[1155,3591,3592],{"class":1161}," string",[1155,3594,1517],{"class":1388},[1155,3596,3598,3600],{"class":1157,"line":3597},38,[1155,3599,2456],{"class":1382},[1155,3601,1517],{"class":1388},[1155,3603,3605],{"class":1157,"line":3604},39,[1155,3606,1447],{"emptyLinePlaceholder":21},[1155,3608,3610,3613,3615,3618,3620,3623],{"class":1157,"line":3609},40,[1155,3611,3612],{"class":1368},"  if",[1155,3614,1988],{"class":1388},[1155,3616,3617],{"class":1382},"!",[1155,3619,266],{"class":1378},[1155,3621,3622],{"class":1388},") ",[1155,3624,1383],{"class":1382},[1155,3626,3628,3631,3633,3635,3637,3640,3642,3646,3648,3651,3653,3655,3658,3660,3662],{"class":1157,"line":3627},41,[1155,3629,3630],{"class":1368},"    throw",[1155,3632,2942],{"class":1178},[1155,3634,1379],{"class":1388},[1155,3636,1902],{"class":1382},[1155,3638,3639],{"class":1388}," statusCode",[1155,3641,1392],{"class":1382},[1155,3643,3645],{"class":3644},"sbssI"," 404",[1155,3647,1753],{"class":1382},[1155,3649,3650],{"class":1388}," statusMessage",[1155,3652,1392],{"class":1382},[1155,3654,1469],{"class":1382},[1155,3656,3657],{"class":1165},"Chat not found",[1155,3659,1407],{"class":1382},[1155,3661,1769],{"class":1382},[1155,3663,1517],{"class":1388},[1155,3665,3667],{"class":1157,"line":3666},42,[1155,3668,3669],{"class":1382},"  }\n",[1155,3671,3673],{"class":1157,"line":3672},43,[1155,3674,1447],{"emptyLinePlaceholder":21},[1155,3676,3678],{"class":1157,"line":3677},44,[1155,3679,3680],{"class":2733},"  \u002F\u002F Generate a title for the chat if it doesn't have one\n",[1155,3682,3684,3686,3688,3690,3692,3694,3697,3699],{"class":1157,"line":3683},45,[1155,3685,3612],{"class":1368},[1155,3687,1988],{"class":1388},[1155,3689,3617],{"class":1382},[1155,3691,266],{"class":1378},[1155,3693,1845],{"class":1382},[1155,3695,3696],{"class":1378},"title",[1155,3698,3622],{"class":1388},[1155,3700,1383],{"class":1382},[1155,3702,3704,3707,3709,3711,3713,3716,3718,3720,3722,3725,3727],{"class":1157,"line":3703},46,[1155,3705,3706],{"class":1625},"    const",[1155,3708,1747],{"class":1382},[1155,3710,1756],{"class":1388},[1155,3712,1392],{"class":1382},[1155,3714,3715],{"class":1378}," title",[1155,3717,1769],{"class":1382},[1155,3719,2665],{"class":1382},[1155,3721,2668],{"class":1368},[1155,3723,3724],{"class":1178}," generateText",[1155,3726,1379],{"class":1388},[1155,3728,1383],{"class":1382},[1155,3730,3732,3735,3737,3739],{"class":1157,"line":3731},47,[1155,3733,3734],{"class":1388},"      model",[1155,3736,1392],{"class":1382},[1155,3738,3342],{"class":1378},[1155,3740,1410],{"class":1382},[1155,3742,3744,3747,3749,3752,3755,3758],{"class":1157,"line":3743},48,[1155,3745,3746],{"class":1388},"      instructions",[1155,3748,1392],{"class":1382},[1155,3750,3751],{"class":1382}," `",[1155,3753,3754],{"class":1165},"Generate a short title (max 30 characters) based on the user's message. No quotes or punctuation.",[1155,3756,3757],{"class":1382},"`",[1155,3759,1410],{"class":1382},[1155,3761,3763,3766,3768,3771,3773,3776,3778,3780,3783,3786],{"class":1157,"line":3762},49,[1155,3764,3765],{"class":1388},"      prompt",[1155,3767,1392],{"class":1382},[1155,3769,3770],{"class":1378}," JSON",[1155,3772,1845],{"class":1382},[1155,3774,3775],{"class":1178},"stringify",[1155,3777,1379],{"class":1388},[1155,3779,2034],{"class":1378},[1155,3781,3782],{"class":1388},"[",[1155,3784,3785],{"class":3644},"0",[1155,3787,2363],{"class":1388},[1155,3789,3791,3793],{"class":1157,"line":3790},50,[1155,3792,3452],{"class":1382},[1155,3794,1517],{"class":1388},[1155,3796,3798],{"class":1157,"line":3797},51,[1155,3799,1447],{"emptyLinePlaceholder":21},[1155,3801,3803,3806,3808,3810,3813,3815,3817,3819,3821,3823,3825,3828,3830,3832,3834,3836,3838,3840,3843,3845,3848,3850,3852,3854,3856,3858,3860,3862,3864],{"class":1157,"line":3802},52,[1155,3804,3805],{"class":1368},"    await",[1155,3807,2483],{"class":1378},[1155,3809,1845],{"class":1382},[1155,3811,3812],{"class":1178},"update",[1155,3814,1379],{"class":1388},[1155,3816,2760],{"class":1378},[1155,3818,1845],{"class":1382},[1155,3820,1824],{"class":1378},[1155,3822,1919],{"class":1388},[1155,3824,1845],{"class":1382},[1155,3826,3827],{"class":1178},"set",[1155,3829,1379],{"class":1388},[1155,3831,1902],{"class":1382},[1155,3833,3715],{"class":1378},[1155,3835,1769],{"class":1382},[1155,3837,1919],{"class":1388},[1155,3839,1845],{"class":1382},[1155,3841,3842],{"class":1178},"where",[1155,3844,1379],{"class":1388},[1155,3846,3847],{"class":1178},"eq",[1155,3849,1379],{"class":1388},[1155,3851,2760],{"class":1378},[1155,3853,1845],{"class":1382},[1155,3855,1824],{"class":1378},[1155,3857,1845],{"class":1382},[1155,3859,2056],{"class":1378},[1155,3861,1753],{"class":1382},[1155,3863,3272],{"class":1378},[1155,3865,2009],{"class":1388},[1155,3867,3869],{"class":1157,"line":3868},53,[1155,3870,3669],{"class":1382},[1155,3872,3874],{"class":1157,"line":3873},54,[1155,3875,1447],{"emptyLinePlaceholder":21},[1155,3877,3879],{"class":1157,"line":3878},55,[1155,3880,3881],{"class":2733},"  \u002F\u002F Save the user message if it's a follow-up\n",[1155,3883,3885,3887,3890,3892,3894,3896,3898,3900,3903,3906,3909],{"class":1157,"line":3884},56,[1155,3886,2655],{"class":1625},[1155,3888,3889],{"class":1378}," lastMessage",[1155,3891,2665],{"class":1382},[1155,3893,3347],{"class":1378},[1155,3895,3782],{"class":1388},[1155,3897,2034],{"class":1378},[1155,3899,1845],{"class":1382},[1155,3901,3902],{"class":1378},"length",[1155,3904,3905],{"class":1382}," -",[1155,3907,3908],{"class":3644}," 1",[1155,3910,3237],{"class":1388},[1155,3912,3914,3916,3918,3921,3924,3926,3928,3930,3932,3934,3937,3939,3941,3943,3946,3948,3950],{"class":1157,"line":3913},57,[1155,3915,3612],{"class":1368},[1155,3917,1988],{"class":1388},[1155,3919,3920],{"class":1378},"lastMessage",[1155,3922,3923],{"class":1382},"?.",[1155,3925,2170],{"class":1378},[1155,3927,3423],{"class":1382},[1155,3929,1469],{"class":1382},[1155,3931,2188],{"class":1165},[1155,3933,1407],{"class":1382},[1155,3935,3936],{"class":1382}," &&",[1155,3938,3347],{"class":1378},[1155,3940,1845],{"class":1382},[1155,3942,3902],{"class":1378},[1155,3944,3945],{"class":1382}," >",[1155,3947,3908],{"class":3644},[1155,3949,3622],{"class":1388},[1155,3951,1383],{"class":1382},[1155,3953,3955,3957,3959,3961,3963,3965,3967,3969,3971,3973,3975,3977,3979],{"class":1157,"line":3954},58,[1155,3956,3805],{"class":1368},[1155,3958,2483],{"class":1378},[1155,3960,1845],{"class":1382},[1155,3962,2755],{"class":1178},[1155,3964,1379],{"class":1388},[1155,3966,2760],{"class":1378},[1155,3968,1845],{"class":1382},[1155,3970,2034],{"class":1378},[1155,3972,1919],{"class":1388},[1155,3974,1845],{"class":1382},[1155,3976,2771],{"class":1178},[1155,3978,1379],{"class":1388},[1155,3980,1383],{"class":1382},[1155,3982,3984,3987,3989,3991],{"class":1157,"line":3983},59,[1155,3985,3986],{"class":1388},"      chatId",[1155,3988,1392],{"class":1382},[1155,3990,3272],{"class":1378},[1155,3992,1410],{"class":1382},[1155,3994,3996,3999,4001,4003,4005,4007],{"class":1157,"line":3995},60,[1155,3997,3998],{"class":1388},"      role",[1155,4000,1392],{"class":1382},[1155,4002,1469],{"class":1382},[1155,4004,2188],{"class":1165},[1155,4006,1407],{"class":1382},[1155,4008,1410],{"class":1382},[1155,4010,4012,4015,4017,4019,4021],{"class":1157,"line":4011},61,[1155,4013,4014],{"class":1388},"      parts",[1155,4016,1392],{"class":1382},[1155,4018,3889],{"class":1378},[1155,4020,1845],{"class":1382},[1155,4022,2868],{"class":1378},[1155,4024,4026,4028],{"class":1157,"line":4025},62,[1155,4027,3452],{"class":1382},[1155,4029,1517],{"class":1388},[1155,4031,4033],{"class":1157,"line":4032},63,[1155,4034,3669],{"class":1382},[1155,4036,4038],{"class":1157,"line":4037},64,[1155,4039,1447],{"emptyLinePlaceholder":21},[1155,4041,4043],{"class":1157,"line":4042},65,[1155,4044,4045],{"class":2733},"  \u002F\u002F Create the streaming response\n",[1155,4047,4049,4051,4054,4056,4059,4061],{"class":1157,"line":4048},66,[1155,4050,2655],{"class":1625},[1155,4052,4053],{"class":1378}," stream",[1155,4055,2665],{"class":1382},[1155,4057,4058],{"class":1178}," createUIMessageStream",[1155,4060,1379],{"class":1388},[1155,4062,1383],{"class":1382},[1155,4064,4066,4069,4071,4074,4076,4079,4081,4083],{"class":1157,"line":4065},67,[1155,4067,4068],{"class":1178},"    execute",[1155,4070,1392],{"class":1382},[1155,4072,4073],{"class":1625}," async",[1155,4075,1976],{"class":1382},[1155,4077,4078],{"class":1979}," writer",[1155,4080,1983],{"class":1382},[1155,4082,1862],{"class":1625},[1155,4084,1458],{"class":1382},[1155,4086,4088,4091,4094,4096,4099,4101],{"class":1157,"line":4087},68,[1155,4089,4090],{"class":1625},"      const",[1155,4092,4093],{"class":1378}," result",[1155,4095,2665],{"class":1382},[1155,4097,4098],{"class":1178}," streamText",[1155,4100,1379],{"class":1388},[1155,4102,1383],{"class":1382},[1155,4104,4106,4109],{"class":1157,"line":4105},69,[1155,4107,4108],{"class":1378},"        model",[1155,4110,1410],{"class":1382},[1155,4112,4114,4117,4119,4121,4124,4126],{"class":1157,"line":4113},70,[1155,4115,4116],{"class":1388},"        instructions",[1155,4118,1392],{"class":1382},[1155,4120,3751],{"class":1382},[1155,4122,4123],{"class":1165},"You are a helpful AI assistant. Be concise and friendly.",[1155,4125,3757],{"class":1382},[1155,4127,1410],{"class":1382},[1155,4129,4131,4134,4136,4138,4141,4143,4145,4147],{"class":1157,"line":4130},71,[1155,4132,4133],{"class":1388},"        messages",[1155,4135,1392],{"class":1382},[1155,4137,2668],{"class":1368},[1155,4139,4140],{"class":1178}," convertToModelMessages",[1155,4142,1379],{"class":1388},[1155,4144,2034],{"class":1378},[1155,4146,1919],{"class":1388},[1155,4148,1410],{"class":1382},[1155,4150,4152,4155,4157],{"class":1157,"line":4151},72,[1155,4153,4154],{"class":1388},"        providerOptions",[1155,4156,1392],{"class":1382},[1155,4158,1458],{"class":1382},[1155,4160,4162,4165,4167],{"class":1157,"line":4161},73,[1155,4163,4164],{"class":1388},"          anthropic",[1155,4166,1392],{"class":1382},[1155,4168,1458],{"class":1382},[1155,4170,4172,4175,4177],{"class":1157,"line":4171},74,[1155,4173,4174],{"class":1388},"            thinking",[1155,4176,1392],{"class":1382},[1155,4178,1458],{"class":1382},[1155,4180,4182,4185,4187,4189,4192,4194],{"class":1157,"line":4181},75,[1155,4183,4184],{"class":1388},"              type",[1155,4186,1392],{"class":1382},[1155,4188,1469],{"class":1382},[1155,4190,4191],{"class":1165},"enabled",[1155,4193,1407],{"class":1382},[1155,4195,1410],{"class":1382},[1155,4197,4199,4202,4204],{"class":1157,"line":4198},76,[1155,4200,4201],{"class":1388},"              budgetTokens",[1155,4203,1392],{"class":1382},[1155,4205,4206],{"class":3644}," 2048\n",[1155,4208,4210],{"class":1157,"line":4209},77,[1155,4211,4212],{"class":1382},"            }\n",[1155,4214,4216],{"class":1157,"line":4215},78,[1155,4217,4218],{"class":1382},"          },\n",[1155,4220,4222,4225,4227],{"class":1157,"line":4221},79,[1155,4223,4224],{"class":1388},"          google",[1155,4226,1392],{"class":1382},[1155,4228,1458],{"class":1382},[1155,4230,4232,4235,4237],{"class":1157,"line":4231},80,[1155,4233,4234],{"class":1388},"            thinkingConfig",[1155,4236,1392],{"class":1382},[1155,4238,1458],{"class":1382},[1155,4240,4242,4245,4247,4251],{"class":1157,"line":4241},81,[1155,4243,4244],{"class":1388},"              includeThoughts",[1155,4246,1392],{"class":1382},[1155,4248,4250],{"class":4249},"sfNiH"," true",[1155,4252,1410],{"class":1382},[1155,4254,4256,4259,4261,4263,4266],{"class":1157,"line":4255},82,[1155,4257,4258],{"class":1388},"              thinkingLevel",[1155,4260,1392],{"class":1382},[1155,4262,1469],{"class":1382},[1155,4264,4265],{"class":1165},"low",[1155,4267,1433],{"class":1382},[1155,4269,4271],{"class":1157,"line":4270},83,[1155,4272,4212],{"class":1382},[1155,4274,4276],{"class":1157,"line":4275},84,[1155,4277,4218],{"class":1382},[1155,4279,4281,4284,4286],{"class":1157,"line":4280},85,[1155,4282,4283],{"class":1388},"          openai",[1155,4285,1392],{"class":1382},[1155,4287,1458],{"class":1382},[1155,4289,4291,4294,4296,4298,4300,4302],{"class":1157,"line":4290},86,[1155,4292,4293],{"class":1388},"            reasoningEffort",[1155,4295,1392],{"class":1382},[1155,4297,1469],{"class":1382},[1155,4299,4265],{"class":1165},[1155,4301,1407],{"class":1382},[1155,4303,1410],{"class":1382},[1155,4305,4307,4310,4312,4314,4317],{"class":1157,"line":4306},87,[1155,4308,4309],{"class":1388},"            reasoningSummary",[1155,4311,1392],{"class":1382},[1155,4313,1469],{"class":1382},[1155,4315,4316],{"class":1165},"detailed",[1155,4318,1433],{"class":1382},[1155,4320,4322],{"class":1157,"line":4321},88,[1155,4323,4324],{"class":1382},"          }\n",[1155,4326,4328],{"class":1157,"line":4327},89,[1155,4329,4330],{"class":1382},"        }\n",[1155,4332,4334,4337],{"class":1157,"line":4333},90,[1155,4335,4336],{"class":1382},"      }",[1155,4338,1517],{"class":1388},[1155,4340,4342],{"class":1157,"line":4341},91,[1155,4343,1447],{"emptyLinePlaceholder":21},[1155,4345,4347],{"class":1157,"line":4346},92,[1155,4348,4349],{"class":2733},"      \u002F\u002F Notify the client that a title was generated\n",[1155,4351,4353,4356,4358,4360,4362,4364,4366,4368],{"class":1157,"line":4352},93,[1155,4354,4355],{"class":1368},"      if",[1155,4357,1988],{"class":1388},[1155,4359,3617],{"class":1382},[1155,4361,266],{"class":1378},[1155,4363,1845],{"class":1382},[1155,4365,3696],{"class":1378},[1155,4367,3622],{"class":1388},[1155,4369,1383],{"class":1382},[1155,4371,4373,4376,4378,4381,4383],{"class":1157,"line":4372},94,[1155,4374,4375],{"class":1378},"        writer",[1155,4377,1845],{"class":1382},[1155,4379,4380],{"class":1178},"write",[1155,4382,1379],{"class":1388},[1155,4384,1383],{"class":1382},[1155,4386,4388,4391,4393,4395,4398,4400],{"class":1157,"line":4387},95,[1155,4389,4390],{"class":1388},"          type",[1155,4392,1392],{"class":1382},[1155,4394,1469],{"class":1382},[1155,4396,4397],{"class":1165},"data-chat-title",[1155,4399,1407],{"class":1382},[1155,4401,1410],{"class":1382},[1155,4403,4405,4408,4410,4412,4414,4416,4418,4421,4423],{"class":1157,"line":4404},96,[1155,4406,4407],{"class":1388},"          data",[1155,4409,1392],{"class":1382},[1155,4411,1747],{"class":1382},[1155,4413,2660],{"class":1388},[1155,4415,1392],{"class":1382},[1155,4417,1469],{"class":1382},[1155,4419,4420],{"class":1165},"Title generated",[1155,4422,1407],{"class":1382},[1155,4424,3172],{"class":1382},[1155,4426,4428,4431,4433],{"class":1157,"line":4427},97,[1155,4429,4430],{"class":1388},"          transient",[1155,4432,1392],{"class":1382},[1155,4434,4435],{"class":4249}," true\n",[1155,4437,4439,4442],{"class":1157,"line":4438},98,[1155,4440,4441],{"class":1382},"        }",[1155,4443,1517],{"class":1388},[1155,4445,4447],{"class":1157,"line":4446},99,[1155,4448,4449],{"class":1382},"      }\n",[1155,4451,4453],{"class":1157,"line":4452},100,[1155,4454,1447],{"emptyLinePlaceholder":21},[1155,4456,4458,4461,4463,4466,4468,4471,4473,4475,4477,4479,4481,4483,4486,4488],{"class":1157,"line":4457},101,[1155,4459,4460],{"class":1378},"      writer",[1155,4462,1845],{"class":1382},[1155,4464,4465],{"class":1178},"merge",[1155,4467,1379],{"class":1388},[1155,4469,4470],{"class":1178},"toUIMessageStream",[1155,4472,1379],{"class":1388},[1155,4474,1902],{"class":1382},[1155,4476,4053],{"class":1388},[1155,4478,1392],{"class":1382},[1155,4480,4093],{"class":1378},[1155,4482,1845],{"class":1382},[1155,4484,4485],{"class":1378},"stream",[1155,4487,1769],{"class":1382},[1155,4489,2009],{"class":1388},[1155,4491,4493],{"class":1157,"line":4492},102,[1155,4494,4495],{"class":1382},"    },\n",[1155,4497,4499,4502,4504,4506,4508,4510,4512,4514],{"class":1157,"line":4498},103,[1155,4500,4501],{"class":1178},"    onEnd",[1155,4503,1392],{"class":1382},[1155,4505,4073],{"class":1625},[1155,4507,1976],{"class":1382},[1155,4509,3347],{"class":1979},[1155,4511,1983],{"class":1382},[1155,4513,1862],{"class":1625},[1155,4515,1458],{"class":1382},[1155,4517,4519],{"class":1157,"line":4518},104,[1155,4520,4521],{"class":2733},"      \u002F\u002F Save the assistant's response to the database\n",[1155,4523,4525,4528,4530,4532,4534,4536,4538,4540,4542,4544,4546,4548,4550,4552,4554,4557,4559,4562,4564,4566],{"class":1157,"line":4524},105,[1155,4526,4527],{"class":1368},"      await",[1155,4529,2483],{"class":1378},[1155,4531,1845],{"class":1382},[1155,4533,2755],{"class":1178},[1155,4535,1379],{"class":1388},[1155,4537,2760],{"class":1378},[1155,4539,1845],{"class":1382},[1155,4541,2034],{"class":1378},[1155,4543,1919],{"class":1388},[1155,4545,1845],{"class":1382},[1155,4547,2771],{"class":1178},[1155,4549,1379],{"class":1388},[1155,4551,2034],{"class":1378},[1155,4553,1845],{"class":1382},[1155,4555,4556],{"class":1178},"map",[1155,4558,1379],{"class":1388},[1155,4560,4561],{"class":1979},"message",[1155,4563,1862],{"class":1625},[1155,4565,1988],{"class":1388},[1155,4567,1383],{"class":1382},[1155,4569,4571,4574,4576,4578,4580,4582],{"class":1157,"line":4570},106,[1155,4572,4573],{"class":1388},"        chatId",[1155,4575,1392],{"class":1382},[1155,4577,2833],{"class":1378},[1155,4579,1845],{"class":1382},[1155,4581,2056],{"class":1378},[1155,4583,1410],{"class":1382},[1155,4585,4587,4590,4592,4594,4596,4598,4600,4602,4604,4606,4609,4611,4613,4615],{"class":1157,"line":4586},107,[1155,4588,4589],{"class":1388},"        role",[1155,4591,1392],{"class":1382},[1155,4593,2660],{"class":1378},[1155,4595,1845],{"class":1382},[1155,4597,2170],{"class":1378},[1155,4599,3589],{"class":1368},[1155,4601,1469],{"class":1382},[1155,4603,2188],{"class":1165},[1155,4605,1407],{"class":1382},[1155,4607,4608],{"class":1382}," |",[1155,4610,1469],{"class":1382},[1155,4612,2197],{"class":1165},[1155,4614,1407],{"class":1382},[1155,4616,1410],{"class":1382},[1155,4618,4620,4623,4625,4627,4629],{"class":1157,"line":4619},108,[1155,4621,4622],{"class":1388},"        parts",[1155,4624,1392],{"class":1382},[1155,4626,2660],{"class":1378},[1155,4628,1845],{"class":1382},[1155,4630,2868],{"class":1378},[1155,4632,4634,4636],{"class":1157,"line":4633},109,[1155,4635,4336],{"class":1382},[1155,4637,4638],{"class":1388},")))\n",[1155,4640,4642],{"class":1157,"line":4641},110,[1155,4643,4644],{"class":1382},"    }\n",[1155,4646,4648,4650],{"class":1157,"line":4647},111,[1155,4649,2456],{"class":1382},[1155,4651,1517],{"class":1388},[1155,4653,4655],{"class":1157,"line":4654},112,[1155,4656,1447],{"emptyLinePlaceholder":21},[1155,4658,4660,4662,4665,4667,4669,4671,4673],{"class":1157,"line":4659},113,[1155,4661,2883],{"class":1368},[1155,4663,4664],{"class":1178}," createUIMessageStreamResponse",[1155,4666,1379],{"class":1388},[1155,4668,1902],{"class":1382},[1155,4670,4053],{"class":1378},[1155,4672,1769],{"class":1382},[1155,4674,1517],{"class":1388},[1155,4676,4678,4680],{"class":1157,"line":4677},114,[1155,4679,1514],{"class":1382},[1155,4681,1517],{"class":1378},[1045,4683,4684],{},"Here's what each part does:",[1045,4686,4687],{},[1063,4688,4689],{},"AI Gateway",[1045,4691,4692,4693,4696],{},"Thanks to ",[1099,4694,1136],{"href":1134,"rel":4695},[1103],", we can use any AI model supported by the gateway just by specifying the model name.",[1045,4698,4699],{},[1063,4700,4701],{},"Automatic Title Generation",[1045,4703,4704,4705,4712],{},"When a chat doesn't have a title yet, we use ",[1099,4706,4709],{"href":4707,"rel":4708},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-core\u002Fgenerate-text#generatetext",[1103],[1105,4710,4711],{},"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\".",[1045,4714,4715],{},[1063,4716,4717],{},"Streaming with streamText",[1045,4719,4720,4721,4726],{},"The ",[1099,4722,4724],{"href":2902,"rel":4723},[1103],[1105,4725,2906],{}," function generates a streaming response from the AI model. Key options include:",[1057,4728,4729,4735,4741],{},[1060,4730,4731,4734],{},[1105,4732,4733],{},"model",": The AI model to use",[1060,4736,4737,4740],{},[1105,4738,4739],{},"instructions",": Guidance that shapes the AI's behavior",[1060,4742,4743,4745],{},[1105,4744,2034],{},": The conversation history",[1045,4747,4748],{},[1063,4749,4750],{},"UIMessageStream",[1045,4752,4720,4753,1108,4759,4765],{},[1099,4754,4757],{"href":4755,"rel":4756},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream#createuimessagestream",[1103],[1105,4758,2914],{},[1099,4760,4763],{"href":4761,"rel":4762},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream-response#createuimessagestreamresponse",[1103],[1105,4764,2922],{}," 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.",[1045,4767,4720,4768,4771,4772,4774,4775,4778],{},[1105,4769,4770],{},"writer.write()"," method allows sending custom data events to the client (like ",[1105,4773,4397],{},"), while ",[1105,4776,4777],{},"onEnd"," is called when streaming completes, perfect for persisting the assistant's response.",[1183,4780,4782],{"id":4781},"fetching-a-chat","Fetching a chat",[1045,4784,4785],{},"Add an endpoint to fetch existing chat data from your database:",[1355,4787,4788],{},[1146,4789,4792],{"className":1359,"code":4790,"filename":4791,"language":1361,"meta":1151,"style":1151},"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",[1105,4793,4794,4820,4843,4865,4883,4887,4909,4941,4955,4967,4971,4999,5030,5039,5048,5077,5081,5085,5091,5095,5109,5141,5145,5149,5155],{"__ignoreMap":1151},[1155,4795,4796,4798,4800,4802,4804,4806,4808,4810,4812,4814,4816,4818],{"class":1157,"line":1158},[1155,4797,1744],{"class":1368},[1155,4799,1747],{"class":1382},[1155,4801,2942],{"class":1378},[1155,4803,1753],{"class":1382},[1155,4805,2540],{"class":1378},[1155,4807,1753],{"class":1382},[1155,4809,2951],{"class":1378},[1155,4811,1769],{"class":1382},[1155,4813,1772],{"class":1368},[1155,4815,1469],{"class":1382},[1155,4817,1183],{"class":1165},[1155,4819,1433],{"class":1382},[1155,4821,4822,4824,4826,4829,4831,4833,4835,4837,4839,4841],{"class":1157,"line":1175},[1155,4823,1744],{"class":1368},[1155,4825,1747],{"class":1382},[1155,4827,4828],{"class":1378}," asc",[1155,4830,1753],{"class":1382},[1155,4832,2974],{"class":1378},[1155,4834,1769],{"class":1382},[1155,4836,1772],{"class":1368},[1155,4838,1469],{"class":1382},[1155,4840,1797],{"class":1165},[1155,4842,1433],{"class":1382},[1155,4844,4845,4847,4849,4851,4853,4855,4857,4859,4861,4863],{"class":1157,"line":1398},[1155,4846,1744],{"class":1368},[1155,4848,1747],{"class":1382},[1155,4850,2483],{"class":1378},[1155,4852,1753],{"class":1382},[1155,4854,2591],{"class":1378},[1155,4856,1769],{"class":1382},[1155,4858,1772],{"class":1368},[1155,4860,1469],{"class":1382},[1155,4862,2600],{"class":1165},[1155,4864,1433],{"class":1382},[1155,4866,4867,4869,4871,4873,4875,4877,4879,4881],{"class":1157,"line":1413},[1155,4868,1744],{"class":1368},[1155,4870,1747],{"class":1382},[1155,4872,2611],{"class":1378},[1155,4874,1769],{"class":1382},[1155,4876,1772],{"class":1368},[1155,4878,1469],{"class":1382},[1155,4880,2620],{"class":1165},[1155,4882,1433],{"class":1382},[1155,4884,4885],{"class":1157,"line":1425},[1155,4886,1447],{"emptyLinePlaceholder":21},[1155,4888,4889,4891,4893,4895,4897,4899,4901,4903,4905,4907],{"class":1157,"line":1436},[1155,4890,1369],{"class":1368},[1155,4892,1372],{"class":1368},[1155,4894,2540],{"class":1178},[1155,4896,1379],{"class":1378},[1155,4898,2639],{"class":1625},[1155,4900,1988],{"class":1382},[1155,4902,2644],{"class":1979},[1155,4904,1919],{"class":1382},[1155,4906,1862],{"class":1625},[1155,4908,1458],{"class":1382},[1155,4910,4911,4913,4915,4917,4919,4921,4923,4925,4927,4929,4931,4933,4935,4937,4939],{"class":1157,"line":1444},[1155,4912,2655],{"class":1625},[1155,4914,1747],{"class":1382},[1155,4916,3272],{"class":1378},[1155,4918,1769],{"class":1382},[1155,4920,2665],{"class":1382},[1155,4922,2668],{"class":1368},[1155,4924,2951],{"class":1178},[1155,4926,1379],{"class":1388},[1155,4928,2644],{"class":1378},[1155,4930,1753],{"class":1382},[1155,4932,2611],{"class":1378},[1155,4934,1845],{"class":1382},[1155,4936,2683],{"class":1178},[1155,4938,1379],{"class":1388},[1155,4940,1383],{"class":1382},[1155,4942,4943,4945,4947,4949,4951,4953],{"class":1157,"line":1450},[1155,4944,3301],{"class":1388},[1155,4946,1392],{"class":1382},[1155,4948,2611],{"class":1378},[1155,4950,1845],{"class":1382},[1155,4952,3310],{"class":1178},[1155,4954,2711],{"class":1388},[1155,4956,4957,4959,4961,4963,4965],{"class":1157,"line":1461},[1155,4958,2456],{"class":1382},[1155,4960,1919],{"class":1388},[1155,4962,1845],{"class":1382},[1155,4964,2722],{"class":1378},[1155,4966,1517],{"class":1388},[1155,4968,4969],{"class":1157,"line":1477},[1155,4970,1447],{"emptyLinePlaceholder":21},[1155,4972,4973,4975,4977,4979,4981,4983,4985,4987,4989,4991,4993,4995,4997],{"class":1157,"line":1483},[1155,4974,2655],{"class":1625},[1155,4976,2833],{"class":1378},[1155,4978,2665],{"class":1382},[1155,4980,2668],{"class":1368},[1155,4982,2483],{"class":1378},[1155,4984,1845],{"class":1382},[1155,4986,3537],{"class":1378},[1155,4988,1845],{"class":1382},[1155,4990,1824],{"class":1378},[1155,4992,1845],{"class":1382},[1155,4994,3546],{"class":1178},[1155,4996,1379],{"class":1388},[1155,4998,1383],{"class":1382},[1155,5000,5001,5003,5005,5007,5009,5011,5013,5015,5017,5019,5021,5023,5025,5028],{"class":1157,"line":1488},[1155,5002,3556],{"class":1388},[1155,5004,1392],{"class":1382},[1155,5006,1988],{"class":1388},[1155,5008,3847],{"class":1178},[1155,5010,1379],{"class":1388},[1155,5012,2760],{"class":1378},[1155,5014,1845],{"class":1382},[1155,5016,1824],{"class":1378},[1155,5018,1845],{"class":1382},[1155,5020,2056],{"class":1378},[1155,5022,1753],{"class":1382},[1155,5024,3272],{"class":1378},[1155,5026,5027],{"class":1388},"))",[1155,5029,1410],{"class":1382},[1155,5031,5032,5035,5037],{"class":1157,"line":1511},[1155,5033,5034],{"class":1388},"    with",[1155,5036,1392],{"class":1382},[1155,5038,1458],{"class":1382},[1155,5040,5041,5044,5046],{"class":1157,"line":2016},[1155,5042,5043],{"class":1388},"      messages",[1155,5045,1392],{"class":1382},[1155,5047,1458],{"class":1382},[1155,5049,5050,5053,5055,5058,5060,5062,5064,5066,5068,5070,5072,5075],{"class":1157,"line":2043},[1155,5051,5052],{"class":1178},"        orderBy",[1155,5054,1392],{"class":1382},[1155,5056,5057],{"class":1382}," ()",[1155,5059,1862],{"class":1625},[1155,5061,4828],{"class":1178},[1155,5063,1379],{"class":1388},[1155,5065,2760],{"class":1378},[1155,5067,1845],{"class":1382},[1155,5069,2034],{"class":1378},[1155,5071,1845],{"class":1382},[1155,5073,5074],{"class":1378},"createdAt",[1155,5076,1517],{"class":1388},[1155,5078,5079],{"class":1157,"line":2089},[1155,5080,4449],{"class":1382},[1155,5082,5083],{"class":1157,"line":2156},[1155,5084,4644],{"class":1382},[1155,5086,5087,5089],{"class":1157,"line":2226},[1155,5088,2456],{"class":1382},[1155,5090,1517],{"class":1388},[1155,5092,5093],{"class":1157,"line":2266},[1155,5094,1447],{"emptyLinePlaceholder":21},[1155,5096,5097,5099,5101,5103,5105,5107],{"class":1157,"line":2317},[1155,5098,3612],{"class":1368},[1155,5100,1988],{"class":1388},[1155,5102,3617],{"class":1382},[1155,5104,266],{"class":1378},[1155,5106,3622],{"class":1388},[1155,5108,1383],{"class":1382},[1155,5110,5111,5113,5115,5117,5119,5121,5123,5125,5127,5129,5131,5133,5135,5137,5139],{"class":1157,"line":2330},[1155,5112,3630],{"class":1368},[1155,5114,2942],{"class":1178},[1155,5116,1379],{"class":1388},[1155,5118,1902],{"class":1382},[1155,5120,3639],{"class":1388},[1155,5122,1392],{"class":1382},[1155,5124,3645],{"class":3644},[1155,5126,1753],{"class":1382},[1155,5128,3650],{"class":1388},[1155,5130,1392],{"class":1382},[1155,5132,1469],{"class":1382},[1155,5134,3657],{"class":1165},[1155,5136,1407],{"class":1382},[1155,5138,1769],{"class":1382},[1155,5140,1517],{"class":1388},[1155,5142,5143],{"class":1157,"line":2360},[1155,5144,3669],{"class":1382},[1155,5146,5147],{"class":1157,"line":2366},[1155,5148,1447],{"emptyLinePlaceholder":21},[1155,5150,5151,5153],{"class":1157,"line":2371},[1155,5152,2883],{"class":1368},[1155,5154,2886],{"class":1378},[1155,5156,5157,5159],{"class":1157,"line":2403},[1155,5158,1514],{"class":1382},[1155,5160,1517],{"class":1378},[1049,5162,5164],{"id":5163},"wiring-up-the-ui","Wiring up the UI",[1045,5166,5167,5168,5173,5174,5179],{},"Nuxt UI provides purpose-built components for AI chat interfaces: ",[1099,5169,5170],{"href":285},[1105,5171,5172],{},"UChatPrompt"," for the input area and ",[1099,5175,5176],{"href":275},[1105,5177,5178],{},"UChatMessages"," for displaying the conversation.",[1183,5181,5183],{"id":5182},"creating-the-home-page","Creating the home page",[1045,5185,5186,5187,5191],{},"The home page is where users start a new conversation. The ",[1099,5188,5189],{"href":285},[1105,5190,5172],{}," component provides a textarea with auto-resize, keyboard shortcuts, and a submit button:",[1355,5193,5194],{},[1146,5195,5199],{"className":1587,"code":5196,"filename":5197,"highlights":5198,"language":34,"meta":1151,"style":1151},"\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",[3511,3516,3522,3553,3597,3604,3609,3627,3666],[1105,5200,5201,5224,5243,5261,5265,5279,5305,5309,5322,5326,5331,5357,5373,5382,5390,5404,5442,5446,5450,5456,5460,5465,5491,5496,5504,5508,5516,5555,5568,5589,5610,5615,5624,5628,5636,5651,5688,5703,5718,5736,5742,5765,5774,5783,5791,5799],{"__ignoreMap":1151},[1155,5202,5203,5205,5208,5211,5214,5216,5218,5220,5222],{"class":1157,"line":1158},[1155,5204,1597],{"class":1382},[1155,5206,5207],{"class":1388},"script",[1155,5209,5210],{"class":1625}," setup",[1155,5212,5213],{"class":1625}," lang",[1155,5215,1629],{"class":1382},[1155,5217,1556],{"class":1382},[1155,5219,1361],{"class":1165},[1155,5221,1556],{"class":1382},[1155,5223,1603],{"class":1382},[1155,5225,5226,5228,5231,5233,5236,5238,5241],{"class":1157,"line":1175},[1155,5227,3111],{"class":1625},[1155,5229,5230],{"class":1378}," input ",[1155,5232,1629],{"class":1382},[1155,5234,5235],{"class":1178}," ref",[1155,5237,1379],{"class":1378},[1155,5239,5240],{"class":1382},"''",[1155,5242,1517],{"class":1378},[1155,5244,5245,5247,5250,5252,5254,5256,5259],{"class":1157,"line":1398},[1155,5246,3111],{"class":1625},[1155,5248,5249],{"class":1378}," loading ",[1155,5251,1629],{"class":1382},[1155,5253,5235],{"class":1178},[1155,5255,1379],{"class":1378},[1155,5257,5258],{"class":4249},"false",[1155,5260,1517],{"class":1378},[1155,5262,5263],{"class":1157,"line":1413},[1155,5264,1447],{"emptyLinePlaceholder":21},[1155,5266,5267,5269,5272,5275,5277],{"class":1157,"line":1425},[1155,5268,2639],{"class":1625},[1155,5270,5271],{"class":1625}," function",[1155,5273,5274],{"class":1178}," createChat",[1155,5276,1842],{"class":1382},[1155,5278,1458],{"class":1382},[1155,5280,5281,5283,5285,5287,5290,5292,5294,5296,5299,5302],{"class":1157,"line":1436},[1155,5282,3612],{"class":1368},[1155,5284,1988],{"class":1388},[1155,5286,3617],{"class":1382},[1155,5288,5289],{"class":1378},"input",[1155,5291,1845],{"class":1382},[1155,5293,3396],{"class":1378},[1155,5295,1845],{"class":1382},[1155,5297,5298],{"class":1178},"trim",[1155,5300,5301],{"class":1388},"()) ",[1155,5303,5304],{"class":1368},"return\n",[1155,5306,5307],{"class":1157,"line":1444},[1155,5308,1447],{"emptyLinePlaceholder":21},[1155,5310,5311,5314,5316,5318,5320],{"class":1157,"line":1450},[1155,5312,5313],{"class":1378},"  loading",[1155,5315,1845],{"class":1382},[1155,5317,3396],{"class":1378},[1155,5319,2665],{"class":1382},[1155,5321,4435],{"class":4249},[1155,5323,5324],{"class":1157,"line":1461},[1155,5325,1447],{"emptyLinePlaceholder":21},[1155,5327,5328],{"class":1157,"line":1477},[1155,5329,5330],{"class":2733},"  \u002F\u002F Create a new chat on the server\n",[1155,5332,5333,5335,5337,5339,5341,5344,5346,5348,5351,5353,5355],{"class":1157,"line":1483},[1155,5334,2655],{"class":1625},[1155,5336,2833],{"class":1378},[1155,5338,2665],{"class":1382},[1155,5340,2668],{"class":1368},[1155,5342,5343],{"class":1178}," $fetch",[1155,5345,1379],{"class":1388},[1155,5347,1407],{"class":1382},[1155,5349,5350],{"class":1165},"\u002Fapi\u002Fchats",[1155,5352,1407],{"class":1382},[1155,5354,1753],{"class":1382},[1155,5356,1458],{"class":1382},[1155,5358,5359,5362,5364,5366,5369,5371],{"class":1157,"line":1488},[1155,5360,5361],{"class":1388},"    method",[1155,5363,1392],{"class":1382},[1155,5365,1469],{"class":1382},[1155,5367,5368],{"class":1165},"POST",[1155,5370,1407],{"class":1382},[1155,5372,1410],{"class":1382},[1155,5374,5375,5378,5380],{"class":1157,"line":1511},[1155,5376,5377],{"class":1388},"    body",[1155,5379,1392],{"class":1382},[1155,5381,1458],{"class":1382},[1155,5383,5384,5386,5388],{"class":1157,"line":2016},[1155,5385,3437],{"class":1388},[1155,5387,1392],{"class":1382},[1155,5389,1458],{"class":1382},[1155,5391,5392,5394,5396,5398,5400,5402],{"class":1157,"line":2043},[1155,5393,4589],{"class":1388},[1155,5395,1392],{"class":1382},[1155,5397,1469],{"class":1382},[1155,5399,2188],{"class":1165},[1155,5401,1407],{"class":1382},[1155,5403,1410],{"class":1382},[1155,5405,5406,5408,5410,5412,5414,5416,5418,5420,5423,5425,5427,5429,5431,5434,5436,5438,5440],{"class":1157,"line":2089},[1155,5407,4622],{"class":1388},[1155,5409,1392],{"class":1382},[1155,5411,1496],{"class":1388},[1155,5413,1902],{"class":1382},[1155,5415,2562],{"class":1388},[1155,5417,1392],{"class":1382},[1155,5419,1469],{"class":1382},[1155,5421,5422],{"class":1165},"text",[1155,5424,1407],{"class":1382},[1155,5426,1753],{"class":1382},[1155,5428,1756],{"class":1388},[1155,5430,1392],{"class":1382},[1155,5432,5433],{"class":1378}," input",[1155,5435,1845],{"class":1382},[1155,5437,3396],{"class":1378},[1155,5439,1769],{"class":1382},[1155,5441,3237],{"class":1388},[1155,5443,5444],{"class":1157,"line":2156},[1155,5445,4449],{"class":1382},[1155,5447,5448],{"class":1157,"line":2226},[1155,5449,4644],{"class":1382},[1155,5451,5452,5454],{"class":1157,"line":2266},[1155,5453,2456],{"class":1382},[1155,5455,1517],{"class":1388},[1155,5457,5458],{"class":1157,"line":2317},[1155,5459,1447],{"emptyLinePlaceholder":21},[1155,5461,5462],{"class":1157,"line":2330},[1155,5463,5464],{"class":2733},"  \u002F\u002F Navigate to the chat page\n",[1155,5466,5467,5470,5472,5474,5477,5480,5482,5484,5486,5489],{"class":1157,"line":2360},[1155,5468,5469],{"class":1178},"  navigateTo",[1155,5471,1379],{"class":1388},[1155,5473,3757],{"class":1382},[1155,5475,5476],{"class":1165},"\u002Fchat\u002F",[1155,5478,5479],{"class":1382},"${",[1155,5481,266],{"class":1378},[1155,5483,1845],{"class":1382},[1155,5485,2056],{"class":1378},[1155,5487,5488],{"class":1382},"}`",[1155,5490,1517],{"class":1388},[1155,5492,5493],{"class":1157,"line":2366},[1155,5494,5495],{"class":1382},"}\n",[1155,5497,5498,5500,5502],{"class":1157,"line":2371},[1155,5499,1673],{"class":1382},[1155,5501,5207],{"class":1388},[1155,5503,1603],{"class":1382},[1155,5505,5506],{"class":1157,"line":2403},[1155,5507,1447],{"emptyLinePlaceholder":21},[1155,5509,5510,5512,5514],{"class":1157,"line":2419},[1155,5511,1597],{"class":1382},[1155,5513,1600],{"class":1388},[1155,5515,1603],{"class":1382},[1155,5517,5518,5520,5523,5526,5529,5531,5533,5536,5539,5542,5544,5547,5549,5551,5553],{"class":1157,"line":2437},[1155,5519,1610],{"class":1382},[1155,5521,5522],{"class":1388},"UDashboardPanel",[1155,5524,5525],{"class":1382}," :",[1155,5527,5528],{"class":1625},"ui",[1155,5530,1629],{"class":1382},[1155,5532,1556],{"class":1382},[1155,5534,5535],{"class":1382},"{ ",[1155,5537,5538],{"class":1388},"body",[1155,5540,5541],{"class":1382},": ",[1155,5543,1407],{"class":1382},[1155,5545,5546],{"class":1165},"p-0 sm:p-0",[1155,5548,1407],{"class":1382},[1155,5550,1769],{"class":1382},[1155,5552,1556],{"class":1382},[1155,5554,1603],{"class":1382},[1155,5556,5557,5559,5561,5564,5566],{"class":1157,"line":2453},[1155,5558,1619],{"class":1382},[1155,5560,1600],{"class":1388},[1155,5562,5563],{"class":1382}," #",[1155,5565,5538],{"class":1625},[1155,5567,1603],{"class":1382},[1155,5569,5570,5572,5575,5578,5580,5582,5585,5587],{"class":1157,"line":2461},[1155,5571,1643],{"class":1382},[1155,5573,5574],{"class":1388},"UContainer",[1155,5576,5577],{"class":1625}," class",[1155,5579,1629],{"class":1382},[1155,5581,1556],{"class":1382},[1155,5583,5584],{"class":1165},"min-h-dvh flex flex-col justify-center gap-6 py-8",[1155,5586,1556],{"class":1382},[1155,5588,1603],{"class":1382},[1155,5590,5591,5594,5597,5599,5601,5603,5606,5608],{"class":1157,"line":3434},[1155,5592,5593],{"class":1382},"        \u003C",[1155,5595,5596],{"class":1388},"h1",[1155,5598,5577],{"class":1625},[1155,5600,1629],{"class":1382},[1155,5602,1556],{"class":1382},[1155,5604,5605],{"class":1165},"text-3xl sm:text-4xl text-highlighted font-bold",[1155,5607,1556],{"class":1382},[1155,5609,1603],{"class":1382},[1155,5611,5612],{"class":1157,"line":3449},[1155,5613,5614],{"class":1378},"          How can I help you today?\n",[1155,5616,5617,5620,5622],{"class":1157,"line":3466},[1155,5618,5619],{"class":1382},"        \u003C\u002F",[1155,5621,5596],{"class":1388},[1155,5623,1603],{"class":1382},[1155,5625,5626],{"class":1157,"line":3498},[1155,5627,1447],{"emptyLinePlaceholder":21},[1155,5629,5631,5633],{"class":5630,"line":3511},[1157,1607],[1155,5632,5593],{"class":1382},[1155,5634,5635],{"class":1388},"UChatPrompt\n",[1155,5637,5639,5642,5644,5646,5648],{"class":5638,"line":3516},[1157,1607],[1155,5640,5641],{"class":1625},"          v-model",[1155,5643,1629],{"class":1382},[1155,5645,1556],{"class":1382},[1155,5647,5289],{"class":1378},[1155,5649,5650],{"class":1382},"\"\n",[1155,5652,5654,5657,5660,5662,5664,5667,5670,5672,5675,5677,5680,5682,5685],{"class":5653,"line":3522},[1157,1607],[1155,5655,5656],{"class":1382},"          :",[1155,5658,5659],{"class":1625},"status",[1155,5661,1629],{"class":1382},[1155,5663,1556],{"class":1382},[1155,5665,5666],{"class":1378},"loading",[1155,5668,5669],{"class":1382}," ? ",[1155,5671,1407],{"class":1382},[1155,5673,5674],{"class":1165},"streaming",[1155,5676,1407],{"class":1382},[1155,5678,5679],{"class":1382}," : ",[1155,5681,1407],{"class":1382},[1155,5683,5684],{"class":1165},"ready",[1155,5686,5687],{"class":1382},"'\"\n",[1155,5689,5691,5694,5696,5698,5701],{"class":5690,"line":3553},[1157,1607],[1155,5692,5693],{"class":1625},"          variant",[1155,5695,1629],{"class":1382},[1155,5697,1556],{"class":1382},[1155,5699,5700],{"class":1165},"subtle",[1155,5702,5650],{"class":1382},[1155,5704,5706,5709,5711,5713,5716],{"class":5705,"line":3597},[1157,1607],[1155,5707,5708],{"class":1625},"          placeholder",[1155,5710,1629],{"class":1382},[1155,5712,1556],{"class":1382},[1155,5714,5715],{"class":1165},"Ask me anything...",[1155,5717,5650],{"class":1382},[1155,5719,5721,5724,5727,5729,5731,5734],{"class":5720,"line":3604},[1157,1607],[1155,5722,5723],{"class":1382},"          @",[1155,5725,5726],{"class":1625},"submit",[1155,5728,1629],{"class":1382},[1155,5730,1556],{"class":1382},[1155,5732,5733],{"class":1378},"createChat",[1155,5735,5650],{"class":1382},[1155,5737,5739],{"class":5738,"line":3609},[1157,1607],[1155,5740,5741],{"class":1382},"        >\n",[1155,5743,5745,5748,5751,5754,5756,5758,5761,5763],{"class":5744,"line":3627},[1157,1607],[1155,5746,5747],{"class":1382},"          \u003C",[1155,5749,5750],{"class":1388},"UChatPromptSubmit",[1155,5752,5753],{"class":1625}," color",[1155,5755,1629],{"class":1382},[1155,5757,1556],{"class":1382},[1155,5759,5760],{"class":1165},"neutral",[1155,5762,1556],{"class":1382},[1155,5764,1649],{"class":1382},[1155,5766,5768,5770,5772],{"class":5767,"line":3666},[1157,1607],[1155,5769,5619],{"class":1382},[1155,5771,5172],{"class":1388},[1155,5773,1603],{"class":1382},[1155,5775,5776,5779,5781],{"class":1157,"line":3672},[1155,5777,5778],{"class":1382},"      \u003C\u002F",[1155,5780,5574],{"class":1388},[1155,5782,1603],{"class":1382},[1155,5784,5785,5787,5789],{"class":1157,"line":3677},[1155,5786,1654],{"class":1382},[1155,5788,1600],{"class":1388},[1155,5790,1603],{"class":1382},[1155,5792,5793,5795,5797],{"class":1157,"line":3683},[1155,5794,1664],{"class":1382},[1155,5796,5522],{"class":1388},[1155,5798,1603],{"class":1382},[1155,5800,5801,5803,5805],{"class":1157,"line":3703},[1155,5802,1673],{"class":1382},[1155,5804,1600],{"class":1388},[1155,5806,1603],{"class":1382},[1045,5808,4720,5809,5813],{},[1099,5810,5811],{"href":285},[1105,5812,5172],{}," component automatically handles:",[1057,5815,5816,5823,5826,5834],{},[1060,5817,5818,5819],{},"Form submission when pressing ",[5820,5821],"kbd",{"value":5822},"enter",[1060,5824,5825],{},"Auto-resizing as you type",[1060,5827,5828,5829,5831,5832],{},"A loading state when ",[1105,5830,5659],{}," is set to ",[1105,5833,5674],{},[1060,5835,5836],{},"Focus management and keyboard shortcuts",[1183,5838,5840],{"id":5839},"setting-up-markdown-rendering","Setting up Markdown rendering",[1045,5842,5843,5844,5851,5852,5859,5860,5863,5864,5869],{},"AI models often respond with Markdown formatting (code blocks, lists, bold text, etc.). Before building the chat page, create a custom ",[1099,5845,5848],{"href":5846,"rel":5847},"https:\u002F\u002Fcomark.dev",[1103],[1105,5849,5850],{},"Comark"," component that will handle streaming Markdown rendering. Using ",[1099,5853,5856],{"href":5854,"rel":5855},"https:\u002F\u002Fcomark.dev\u002Frendering\u002Fvue#code-markdown-code-definemarkdowncomponent-code",[1103],[1105,5857,5858],{},"defineMarkdownComponent",", you can enable the ",[1105,5861,5862],{},"shiki"," plugin for syntax highlighting in code blocks and register additional ",[1099,5865,5868],{"href":5866,"rel":5867},"https:\u002F\u002Fshiki.style",[1103],"Shiki"," languages beyond the defaults (TypeScript, JavaScript, Vue, Shell, JSON, YAML, Markdown):",[1355,5871,5872],{},[1146,5873,5876],{"className":1359,"code":5874,"filename":5875,"language":1361,"meta":1151,"style":1151},"import shiki from '@comark\u002Fnuxt\u002Fplugins\u002Fshiki'\nimport python from '@shikijs\u002Flangs\u002Fpython'\nimport sql from '@shikijs\u002Flangs\u002Fsql'\nimport go from '@shikijs\u002Flangs\u002Fgo'\nimport rust from '@shikijs\u002Flangs\u002Frust'\n\nexport default defineMarkdownComponent({\n  name: 'ChatMarkdown',\n  plugins: [\n    shiki({\n      languages: [python, sql, go, rust]\n    })\n  ],\n  class: '*:first:mt-0 *:last:mb-0'\n})\n","app\u002Fcomponents\u002Fchat\u002FMarkdown.ts",[1105,5877,5878,5895,5911,5927,5943,5959,5963,5976,5992,6001,6010,6035,6041,6047,6061],{"__ignoreMap":1151},[1155,5879,5880,5882,5885,5888,5890,5893],{"class":1157,"line":1158},[1155,5881,1744],{"class":1368},[1155,5883,5884],{"class":1378}," shiki ",[1155,5886,5887],{"class":1368},"from",[1155,5889,1469],{"class":1382},[1155,5891,5892],{"class":1165},"@comark\u002Fnuxt\u002Fplugins\u002Fshiki",[1155,5894,1433],{"class":1382},[1155,5896,5897,5899,5902,5904,5906,5909],{"class":1157,"line":1175},[1155,5898,1744],{"class":1368},[1155,5900,5901],{"class":1378}," python ",[1155,5903,5887],{"class":1368},[1155,5905,1469],{"class":1382},[1155,5907,5908],{"class":1165},"@shikijs\u002Flangs\u002Fpython",[1155,5910,1433],{"class":1382},[1155,5912,5913,5915,5918,5920,5922,5925],{"class":1157,"line":1398},[1155,5914,1744],{"class":1368},[1155,5916,5917],{"class":1378}," sql ",[1155,5919,5887],{"class":1368},[1155,5921,1469],{"class":1382},[1155,5923,5924],{"class":1165},"@shikijs\u002Flangs\u002Fsql",[1155,5926,1433],{"class":1382},[1155,5928,5929,5931,5934,5936,5938,5941],{"class":1157,"line":1413},[1155,5930,1744],{"class":1368},[1155,5932,5933],{"class":1378}," go ",[1155,5935,5887],{"class":1368},[1155,5937,1469],{"class":1382},[1155,5939,5940],{"class":1165},"@shikijs\u002Flangs\u002Fgo",[1155,5942,1433],{"class":1382},[1155,5944,5945,5947,5950,5952,5954,5957],{"class":1157,"line":1425},[1155,5946,1744],{"class":1368},[1155,5948,5949],{"class":1378}," rust ",[1155,5951,5887],{"class":1368},[1155,5953,1469],{"class":1382},[1155,5955,5956],{"class":1165},"@shikijs\u002Flangs\u002Frust",[1155,5958,1433],{"class":1382},[1155,5960,5961],{"class":1157,"line":1436},[1155,5962,1447],{"emptyLinePlaceholder":21},[1155,5964,5965,5967,5969,5972,5974],{"class":1157,"line":1444},[1155,5966,1369],{"class":1368},[1155,5968,1372],{"class":1368},[1155,5970,5971],{"class":1178}," defineMarkdownComponent",[1155,5973,1379],{"class":1378},[1155,5975,1383],{"class":1382},[1155,5977,5978,5981,5983,5985,5988,5990],{"class":1157,"line":1450},[1155,5979,5980],{"class":1388},"  name",[1155,5982,1392],{"class":1382},[1155,5984,1469],{"class":1382},[1155,5986,5987],{"class":1165},"ChatMarkdown",[1155,5989,1407],{"class":1382},[1155,5991,1410],{"class":1382},[1155,5993,5994,5997,5999],{"class":1157,"line":1461},[1155,5995,5996],{"class":1388},"  plugins",[1155,5998,1392],{"class":1382},[1155,6000,1395],{"class":1378},[1155,6002,6003,6006,6008],{"class":1157,"line":1477},[1155,6004,6005],{"class":1178},"    shiki",[1155,6007,1379],{"class":1378},[1155,6009,1383],{"class":1382},[1155,6011,6012,6015,6017,6020,6022,6025,6027,6030,6032],{"class":1157,"line":1483},[1155,6013,6014],{"class":1388},"      languages",[1155,6016,1392],{"class":1382},[1155,6018,6019],{"class":1378}," [python",[1155,6021,1753],{"class":1382},[1155,6023,6024],{"class":1378}," sql",[1155,6026,1753],{"class":1382},[1155,6028,6029],{"class":1378}," go",[1155,6031,1753],{"class":1382},[1155,6033,6034],{"class":1378}," rust]\n",[1155,6036,6037,6039],{"class":1157,"line":1488},[1155,6038,3452],{"class":1382},[1155,6040,1517],{"class":1378},[1155,6042,6043,6045],{"class":1157,"line":1511},[1155,6044,1439],{"class":1378},[1155,6046,1410],{"class":1382},[1155,6048,6049,6052,6054,6056,6059],{"class":1157,"line":2016},[1155,6050,6051],{"class":1388},"  class",[1155,6053,1392],{"class":1382},[1155,6055,1469],{"class":1382},[1155,6057,6058],{"class":1165},"*:first:mt-0 *:last:mb-0",[1155,6060,1433],{"class":1382},[1155,6062,6063,6065],{"class":1157,"line":2043},[1155,6064,1514],{"class":1382},[1155,6066,1517],{"class":1378},[1045,6068,6069,6070,6073],{},"This creates a ",[1105,6071,6072],{},"\u003CChatMarkdown>"," component we'll use in the chat page to render assistant messages and reasoning content.",[1045,6075,6076],{},"Since Comark uses Shiki with dual themes, you need to add the following CSS to your stylesheet for dark mode support:",[1146,6078,6080],{"className":1537,"code":6079,"filename":1539,"language":1540,"meta":1151,"style":1151},"html.dark .shiki span {\n  color: var(--shiki-dark) !important;\n  background-color: var(--shiki-dark-bg) !important;\n  font-style: var(--shiki-dark-font-style) !important;\n  font-weight: var(--shiki-dark-font-weight) !important;\n  text-decoration: var(--shiki-dark-text-decoration) !important;\n}\n",[1105,6081,6082,6102,6125,6145,6165,6185,6205],{"__ignoreMap":1151},[1155,6083,6084,6087,6089,6092,6095,6097,6100],{"class":1157,"line":1158},[1155,6085,6086],{"class":1161},"html",[1155,6088,1845],{"class":1382},[1155,6090,6091],{"class":1161},"dark",[1155,6093,6094],{"class":1382}," .",[1155,6096,5862],{"class":1161},[1155,6098,6099],{"class":1161}," span",[1155,6101,1458],{"class":1382},[1155,6103,6104,6108,6110,6113,6115,6118,6120,6123],{"class":1157,"line":1175},[1155,6105,6107],{"class":6106},"sqsOY","  color",[1155,6109,1392],{"class":1382},[1155,6111,6112],{"class":1178}," var",[1155,6114,1379],{"class":1382},[1155,6116,6117],{"class":1378},"--shiki-dark",[1155,6119,1919],{"class":1382},[1155,6121,6122],{"class":3644}," !important",[1155,6124,1559],{"class":1382},[1155,6126,6127,6130,6132,6134,6136,6139,6141,6143],{"class":1157,"line":1398},[1155,6128,6129],{"class":6106},"  background-color",[1155,6131,1392],{"class":1382},[1155,6133,6112],{"class":1178},[1155,6135,1379],{"class":1382},[1155,6137,6138],{"class":1378},"--shiki-dark-bg",[1155,6140,1919],{"class":1382},[1155,6142,6122],{"class":3644},[1155,6144,1559],{"class":1382},[1155,6146,6147,6150,6152,6154,6156,6159,6161,6163],{"class":1157,"line":1413},[1155,6148,6149],{"class":6106},"  font-style",[1155,6151,1392],{"class":1382},[1155,6153,6112],{"class":1178},[1155,6155,1379],{"class":1382},[1155,6157,6158],{"class":1378},"--shiki-dark-font-style",[1155,6160,1919],{"class":1382},[1155,6162,6122],{"class":3644},[1155,6164,1559],{"class":1382},[1155,6166,6167,6170,6172,6174,6176,6179,6181,6183],{"class":1157,"line":1425},[1155,6168,6169],{"class":6106},"  font-weight",[1155,6171,1392],{"class":1382},[1155,6173,6112],{"class":1178},[1155,6175,1379],{"class":1382},[1155,6177,6178],{"class":1378},"--shiki-dark-font-weight",[1155,6180,1919],{"class":1382},[1155,6182,6122],{"class":3644},[1155,6184,1559],{"class":1382},[1155,6186,6187,6190,6192,6194,6196,6199,6201,6203],{"class":1157,"line":1436},[1155,6188,6189],{"class":6106},"  text-decoration",[1155,6191,1392],{"class":1382},[1155,6193,6112],{"class":1178},[1155,6195,1379],{"class":1382},[1155,6197,6198],{"class":1378},"--shiki-dark-text-decoration",[1155,6200,1919],{"class":1382},[1155,6202,6122],{"class":3644},[1155,6204,1559],{"class":1382},[1155,6206,6207],{"class":1157,"line":1444},[1155,6208,5495],{"class":1382},[1049,6210,6212],{"id":6211},"creating-the-chat-page","Creating the chat page",[1045,6214,6215,6216,6223,6224,6231],{},"The chat page is where the actual conversation happens. It integrates the AI SDK's ",[1099,6217,6220],{"href":6218,"rel":6219},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fuse-chat",[1103],[1105,6221,6222],{},"useChat"," composable and ",[1099,6225,6228],{"href":6226,"rel":6227},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-ui\u002Ftransport#default-transport",[1103],[1105,6229,6230],{},"DefaultChatTransport"," for real-time streaming.",[1355,6233,6234],{},[1732,6235,6236],{},[1146,6237,6241],{"className":1587,"code":6238,"filename":6239,"highlights":6240,"language":34,"meta":1151,"style":1151},"\u003Cscript setup lang=\"ts\">\nimport { DefaultChatTransport, isReasoningUIPart, isTextUIPart } from 'ai'\nimport { useChat } 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 useChat composable from AI SDK\nconst { messages, status, error, sendMessage, regenerate, stop } = useChat({\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    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    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=\"messages\"\n          :status=\"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                \u003CChatMarkdown\n                  :value=\"part.text\"\n                  :streaming=\"isPartStreaming(part)\"\n                \u002F>\n              \u003C\u002FUChatReasoning>\n\n              \u003Ctemplate v-else-if=\"isTextUIPart(part)\">\n                \u003CChatMarkdown\n                  v-if=\"message.role === 'assistant'\"\n                  :value=\"part.text\"\n                  :streaming=\"isPartStreaming(part)\"\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=\"error\"\n          variant=\"subtle\"\n          class=\"sticky bottom-0\"\n          @submit=\"handleSubmit\"\n        >\n          \u003CUChatPromptSubmit\n            :status=\"status\"\n            color=\"neutral\"\n            @stop=\"stop()\"\n            @reload=\"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",[1175,1398,1413,2266,2317,2330,2360,2366,2371,2403,2419,2437,2453,2461,3434,3449,3466,3498,3511,3516,3522,3553,3597],[1105,6242,6243,6263,6293,6314,6335,6339,6353,6367,6371,6376,6424,6428,6447,6489,6493,6497,6513,6517,6522,6566,6586,6605,6621,6648,6657,6672,6678,6705,6721,6726,6731,6746,6761,6777,6793,6807,6814,6819,6826,6830,6852,6864,6884,6907,6921,6925,6929,6933,6938,6951,6979,6986,6990,6996,7004,7008,7016,7048,7060,7079,7086,7100,7114,7119,7133,7137,7162,7239,7247,7267,7286,7307,7312,7320,7339,7359,7364,7374,7378,7401,7407,7431,7449,7469,7473,7503,7508,7517,7525,7534,7543,7551,7555,7561,7573,7587,7599,7612,7627,7631,7638,7653,7666,7684,7702,7707,7715,7723,7731,7739],{"__ignoreMap":1151},[1155,6244,6245,6247,6249,6251,6253,6255,6257,6259,6261],{"class":1157,"line":1158},[1155,6246,1597],{"class":1382},[1155,6248,5207],{"class":1388},[1155,6250,5210],{"class":1625},[1155,6252,5213],{"class":1625},[1155,6254,1629],{"class":1382},[1155,6256,1556],{"class":1382},[1155,6258,1361],{"class":1165},[1155,6260,1556],{"class":1382},[1155,6262,1603],{"class":1382},[1155,6264,6266,6268,6270,6273,6275,6278,6280,6283,6285,6287,6289,6291],{"class":6265,"line":1175},[1157,1607],[1155,6267,1744],{"class":1368},[1155,6269,1747],{"class":1382},[1155,6271,6272],{"class":1378}," DefaultChatTransport",[1155,6274,1753],{"class":1382},[1155,6276,6277],{"class":1378}," isReasoningUIPart",[1155,6279,1753],{"class":1382},[1155,6281,6282],{"class":1378}," isTextUIPart",[1155,6284,1769],{"class":1382},[1155,6286,1772],{"class":1368},[1155,6288,1469],{"class":1382},[1155,6290,2576],{"class":1165},[1155,6292,1433],{"class":1382},[1155,6294,6296,6298,6300,6303,6305,6307,6309,6312],{"class":6295,"line":1398},[1157,1607],[1155,6297,1744],{"class":1368},[1155,6299,1747],{"class":1382},[1155,6301,6302],{"class":1378}," useChat",[1155,6304,1769],{"class":1382},[1155,6306,1772],{"class":1368},[1155,6308,1469],{"class":1382},[1155,6310,6311],{"class":1165},"@ai-sdk\u002Fvue",[1155,6313,1433],{"class":1382},[1155,6315,6317,6319,6321,6324,6326,6328,6330,6333],{"class":6316,"line":1413},[1157,1607],[1155,6318,1744],{"class":1368},[1155,6320,1747],{"class":1382},[1155,6322,6323],{"class":1378}," isPartStreaming",[1155,6325,1769],{"class":1382},[1155,6327,1772],{"class":1368},[1155,6329,1469],{"class":1382},[1155,6331,6332],{"class":1165},"@nuxt\u002Fui\u002Futils\u002Fai",[1155,6334,1433],{"class":1382},[1155,6336,6337],{"class":1157,"line":1425},[1155,6338,1447],{"emptyLinePlaceholder":21},[1155,6340,6341,6343,6346,6348,6351],{"class":1157,"line":1436},[1155,6342,3111],{"class":1625},[1155,6344,6345],{"class":1378}," route ",[1155,6347,1629],{"class":1382},[1155,6349,6350],{"class":1178}," useRoute",[1155,6352,2711],{"class":1378},[1155,6354,6355,6357,6360,6362,6365],{"class":1157,"line":1444},[1155,6356,3111],{"class":1625},[1155,6358,6359],{"class":1378}," toast ",[1155,6361,1629],{"class":1382},[1155,6363,6364],{"class":1178}," useToast",[1155,6366,2711],{"class":1378},[1155,6368,6369],{"class":1157,"line":1450},[1155,6370,1447],{"emptyLinePlaceholder":21},[1155,6372,6373],{"class":1157,"line":1461},[1155,6374,6375],{"class":2733},"\u002F\u002F Fetch existing chat data\n",[1155,6377,6378,6380,6382,6385,6387,6390,6392,6394,6396,6399,6401,6403,6406,6408,6411,6413,6416,6418,6420,6422],{"class":1157,"line":1477},[1155,6379,3111],{"class":1625},[1155,6381,1747],{"class":1382},[1155,6383,6384],{"class":1388}," data",[1155,6386,1392],{"class":1382},[1155,6388,6389],{"class":1378}," chatData ",[1155,6391,1514],{"class":1382},[1155,6393,2665],{"class":1382},[1155,6395,2668],{"class":1368},[1155,6397,6398],{"class":1178}," useFetch",[1155,6400,1379],{"class":1378},[1155,6402,3757],{"class":1382},[1155,6404,6405],{"class":1165},"\u002Fapi\u002Fchats\u002F",[1155,6407,5479],{"class":1382},[1155,6409,6410],{"class":1378},"route",[1155,6412,1845],{"class":1382},[1155,6414,6415],{"class":1378},"params",[1155,6417,1845],{"class":1382},[1155,6419,2056],{"class":1378},[1155,6421,5488],{"class":1382},[1155,6423,1517],{"class":1378},[1155,6425,6426],{"class":1157,"line":1483},[1155,6427,1447],{"emptyLinePlaceholder":21},[1155,6429,6430,6433,6435,6437,6440,6442,6445],{"class":1157,"line":1488},[1155,6431,6432],{"class":1368},"if",[1155,6434,1988],{"class":1378},[1155,6436,3617],{"class":1382},[1155,6438,6439],{"class":1378},"chatData",[1155,6441,1845],{"class":1382},[1155,6443,6444],{"class":1378},"value) ",[1155,6446,1383],{"class":1382},[1155,6448,6449,6452,6454,6456,6458,6460,6462,6464,6466,6468,6470,6472,6474,6476,6478,6481,6483,6485,6487],{"class":1157,"line":1511},[1155,6450,6451],{"class":1368},"  throw",[1155,6453,2942],{"class":1178},[1155,6455,1379],{"class":1388},[1155,6457,1902],{"class":1382},[1155,6459,3639],{"class":1388},[1155,6461,1392],{"class":1382},[1155,6463,3645],{"class":3644},[1155,6465,1753],{"class":1382},[1155,6467,3650],{"class":1388},[1155,6469,1392],{"class":1382},[1155,6471,1469],{"class":1382},[1155,6473,3657],{"class":1165},[1155,6475,1407],{"class":1382},[1155,6477,1753],{"class":1382},[1155,6479,6480],{"class":1388}," fatal",[1155,6482,1392],{"class":1382},[1155,6484,4250],{"class":4249},[1155,6486,1769],{"class":1382},[1155,6488,1517],{"class":1388},[1155,6490,6491],{"class":1157,"line":2016},[1155,6492,5495],{"class":1382},[1155,6494,6495],{"class":1157,"line":2043},[1155,6496,1447],{"emptyLinePlaceholder":21},[1155,6498,6499,6501,6503,6505,6507,6509,6511],{"class":1157,"line":2089},[1155,6500,3111],{"class":1625},[1155,6502,5230],{"class":1378},[1155,6504,1629],{"class":1382},[1155,6506,5235],{"class":1178},[1155,6508,1379],{"class":1378},[1155,6510,5240],{"class":1382},[1155,6512,1517],{"class":1378},[1155,6514,6515],{"class":1157,"line":2156},[1155,6516,1447],{"emptyLinePlaceholder":21},[1155,6518,6519],{"class":1157,"line":2226},[1155,6520,6521],{"class":2733},"\u002F\u002F Initialize the useChat composable from AI SDK\n",[1155,6523,6525,6527,6529,6531,6533,6536,6538,6541,6543,6546,6548,6551,6553,6556,6558,6560,6562,6564],{"class":6524,"line":2266},[1157,1607],[1155,6526,3111],{"class":1625},[1155,6528,1747],{"class":1382},[1155,6530,3347],{"class":1378},[1155,6532,1753],{"class":1382},[1155,6534,6535],{"class":1378}," status",[1155,6537,1753],{"class":1382},[1155,6539,6540],{"class":1378}," error",[1155,6542,1753],{"class":1382},[1155,6544,6545],{"class":1378}," sendMessage",[1155,6547,1753],{"class":1382},[1155,6549,6550],{"class":1378}," regenerate",[1155,6552,1753],{"class":1382},[1155,6554,6555],{"class":1378}," stop ",[1155,6557,1514],{"class":1382},[1155,6559,2665],{"class":1382},[1155,6561,6302],{"class":1178},[1155,6563,1379],{"class":1378},[1155,6565,1383],{"class":1382},[1155,6567,6569,6571,6573,6576,6578,6580,6582,6584],{"class":6568,"line":2317},[1157,1607],[1155,6570,1835],{"class":1388},[1155,6572,1392],{"class":1382},[1155,6574,6575],{"class":1378}," chatData",[1155,6577,1845],{"class":1382},[1155,6579,3396],{"class":1378},[1155,6581,1845],{"class":1382},[1155,6583,2056],{"class":1378},[1155,6585,1410],{"class":1382},[1155,6587,6589,6591,6593,6595,6597,6599,6601,6603],{"class":6588,"line":2330},[1157,1607],[1155,6590,1995],{"class":1388},[1155,6592,1392],{"class":1382},[1155,6594,6575],{"class":1378},[1155,6596,1845],{"class":1382},[1155,6598,3396],{"class":1378},[1155,6600,1845],{"class":1382},[1155,6602,2034],{"class":1378},[1155,6604,1410],{"class":1382},[1155,6606,6608,6611,6613,6615,6617,6619],{"class":6607,"line":2360},[1157,1607],[1155,6609,6610],{"class":1388},"  transport",[1155,6612,1392],{"class":1382},[1155,6614,1939],{"class":1382},[1155,6616,6272],{"class":1178},[1155,6618,1379],{"class":1378},[1155,6620,1383],{"class":1382},[1155,6622,6624,6627,6629,6631,6633,6635,6637,6639,6641,6643,6645],{"class":6623,"line":2366},[1157,1607],[1155,6625,6626],{"class":1388},"    api",[1155,6628,1392],{"class":1382},[1155,6630,3751],{"class":1382},[1155,6632,6405],{"class":1165},[1155,6634,5479],{"class":1382},[1155,6636,6439],{"class":1378},[1155,6638,1845],{"class":1382},[1155,6640,3396],{"class":1378},[1155,6642,1845],{"class":1382},[1155,6644,2056],{"class":1378},[1155,6646,6647],{"class":1382},"}`\n",[1155,6649,6651,6653,6655],{"class":6650,"line":2371},[1157,1607],[1155,6652,2456],{"class":1382},[1155,6654,1919],{"class":1378},[1155,6656,1410],{"class":1382},[1155,6658,6660,6663,6665,6668,6670],{"class":6659,"line":2403},[1157,1607],[1155,6661,6662],{"class":1388},"  onData",[1155,6664,1379],{"class":1382},[1155,6666,6667],{"class":1979},"dataPart",[1155,6669,1919],{"class":1382},[1155,6671,1458],{"class":1382},[1155,6673,6675],{"class":6674,"line":2419},[1157,1607],[1155,6676,6677],{"class":2733},"    \u002F\u002F Refresh the chat list when a title is generated\n",[1155,6679,6681,6684,6686,6688,6690,6693,6695,6697,6699,6701,6703],{"class":6680,"line":2437},[1157,1607],[1155,6682,6683],{"class":1368},"    if",[1155,6685,1988],{"class":1388},[1155,6687,6667],{"class":1378},[1155,6689,1845],{"class":1382},[1155,6691,6692],{"class":1378},"type",[1155,6694,3423],{"class":1382},[1155,6696,1469],{"class":1382},[1155,6698,4397],{"class":1165},[1155,6700,1407],{"class":1382},[1155,6702,3622],{"class":1388},[1155,6704,1383],{"class":1382},[1155,6706,6708,6711,6713,6715,6717,6719],{"class":6707,"line":2453},[1157,1607],[1155,6709,6710],{"class":1178},"      refreshNuxtData",[1155,6712,1379],{"class":1388},[1155,6714,1407],{"class":1382},[1155,6716,1824],{"class":1165},[1155,6718,1407],{"class":1382},[1155,6720,1517],{"class":1388},[1155,6722,6724],{"class":6723,"line":2461},[1157,1607],[1155,6725,4644],{"class":1382},[1155,6727,6729],{"class":6728,"line":3434},[1157,1607],[1155,6730,1480],{"class":1382},[1155,6732,6734,6737,6739,6742,6744],{"class":6733,"line":3449},[1157,1607],[1155,6735,6736],{"class":1388},"  onError",[1155,6738,1379],{"class":1382},[1155,6740,6741],{"class":1979},"error",[1155,6743,1919],{"class":1382},[1155,6745,1458],{"class":1382},[1155,6747,6749,6752,6754,6757,6759],{"class":6748,"line":3466},[1157,1607],[1155,6750,6751],{"class":1378},"    toast",[1155,6753,1845],{"class":1382},[1155,6755,6756],{"class":1178},"add",[1155,6758,1379],{"class":1388},[1155,6760,1383],{"class":1382},[1155,6762,6764,6767,6769,6771,6773,6775],{"class":6763,"line":3498},[1157,1607],[1155,6765,6766],{"class":1388},"      title",[1155,6768,1392],{"class":1382},[1155,6770,1469],{"class":1382},[1155,6772,500],{"class":1165},[1155,6774,1407],{"class":1382},[1155,6776,1410],{"class":1382},[1155,6778,6780,6783,6785,6787,6789,6791],{"class":6779,"line":3511},[1157,1607],[1155,6781,6782],{"class":1388},"      description",[1155,6784,1392],{"class":1382},[1155,6786,6540],{"class":1378},[1155,6788,1845],{"class":1382},[1155,6790,4561],{"class":1378},[1155,6792,1410],{"class":1382},[1155,6794,6796,6799,6801,6803,6805],{"class":6795,"line":3516},[1157,1607],[1155,6797,6798],{"class":1388},"      color",[1155,6800,1392],{"class":1382},[1155,6802,1469],{"class":1382},[1155,6804,6741],{"class":1165},[1155,6806,1433],{"class":1382},[1155,6808,6810,6812],{"class":6809,"line":3522},[1157,1607],[1155,6811,3452],{"class":1382},[1155,6813,1517],{"class":1388},[1155,6815,6817],{"class":6816,"line":3553},[1157,1607],[1155,6818,3669],{"class":1382},[1155,6820,6822,6824],{"class":6821,"line":3597},[1157,1607],[1155,6823,1514],{"class":1382},[1155,6825,1517],{"class":1378},[1155,6827,6828],{"class":1157,"line":3604},[1155,6829,1447],{"emptyLinePlaceholder":21},[1155,6831,6832,6835,6838,6840,6843,6845,6848,6850],{"class":1157,"line":3609},[1155,6833,6834],{"class":1625},"function",[1155,6836,6837],{"class":1178}," handleSubmit",[1155,6839,1379],{"class":1382},[1155,6841,6842],{"class":1979},"e",[1155,6844,1392],{"class":1382},[1155,6846,6847],{"class":1161}," Event",[1155,6849,1919],{"class":1382},[1155,6851,1458],{"class":1382},[1155,6853,6854,6857,6859,6862],{"class":1157,"line":3627},[1155,6855,6856],{"class":1378},"  e",[1155,6858,1845],{"class":1382},[1155,6860,6861],{"class":1178},"preventDefault",[1155,6863,2711],{"class":1388},[1155,6865,6866,6868,6870,6872,6874,6876,6878,6880,6882],{"class":1157,"line":3666},[1155,6867,3612],{"class":1368},[1155,6869,1988],{"class":1388},[1155,6871,5289],{"class":1378},[1155,6873,1845],{"class":1382},[1155,6875,3396],{"class":1378},[1155,6877,1845],{"class":1382},[1155,6879,5298],{"class":1178},[1155,6881,5301],{"class":1388},[1155,6883,1383],{"class":1382},[1155,6885,6886,6889,6891,6893,6895,6897,6899,6901,6903,6905],{"class":1157,"line":3672},[1155,6887,6888],{"class":1178},"    sendMessage",[1155,6890,1379],{"class":1388},[1155,6892,1902],{"class":1382},[1155,6894,1756],{"class":1388},[1155,6896,1392],{"class":1382},[1155,6898,5433],{"class":1378},[1155,6900,1845],{"class":1382},[1155,6902,3396],{"class":1378},[1155,6904,1769],{"class":1382},[1155,6906,1517],{"class":1388},[1155,6908,6909,6912,6914,6916,6918],{"class":1157,"line":3677},[1155,6910,6911],{"class":1378},"    input",[1155,6913,1845],{"class":1382},[1155,6915,3396],{"class":1378},[1155,6917,2665],{"class":1382},[1155,6919,6920],{"class":1382}," ''\n",[1155,6922,6923],{"class":1157,"line":3683},[1155,6924,3669],{"class":1382},[1155,6926,6927],{"class":1157,"line":3703},[1155,6928,5495],{"class":1382},[1155,6930,6931],{"class":1157,"line":3731},[1155,6932,1447],{"emptyLinePlaceholder":21},[1155,6934,6935],{"class":1157,"line":3743},[1155,6936,6937],{"class":2733},"\u002F\u002F Auto-generate response for first message\n",[1155,6939,6940,6943,6945,6947,6949],{"class":1157,"line":3762},[1155,6941,6942],{"class":1178},"onMounted",[1155,6944,1379],{"class":1378},[1155,6946,1842],{"class":1382},[1155,6948,1862],{"class":1625},[1155,6950,1458],{"class":1382},[1155,6952,6953,6955,6957,6959,6961,6963,6965,6967,6969,6971,6973,6975,6977],{"class":1157,"line":3790},[1155,6954,3612],{"class":1368},[1155,6956,1988],{"class":1388},[1155,6958,6439],{"class":1378},[1155,6960,1845],{"class":1382},[1155,6962,3396],{"class":1378},[1155,6964,3923],{"class":1382},[1155,6966,2034],{"class":1378},[1155,6968,1845],{"class":1382},[1155,6970,3902],{"class":1378},[1155,6972,3423],{"class":1382},[1155,6974,3908],{"class":3644},[1155,6976,3622],{"class":1388},[1155,6978,1383],{"class":1382},[1155,6980,6981,6984],{"class":1157,"line":3797},[1155,6982,6983],{"class":1178},"    regenerate",[1155,6985,2711],{"class":1388},[1155,6987,6988],{"class":1157,"line":3802},[1155,6989,3669],{"class":1382},[1155,6991,6992,6994],{"class":1157,"line":3868},[1155,6993,1514],{"class":1382},[1155,6995,1517],{"class":1378},[1155,6997,6998,7000,7002],{"class":1157,"line":3873},[1155,6999,1673],{"class":1382},[1155,7001,5207],{"class":1388},[1155,7003,1603],{"class":1382},[1155,7005,7006],{"class":1157,"line":3878},[1155,7007,1447],{"emptyLinePlaceholder":21},[1155,7009,7010,7012,7014],{"class":1157,"line":3884},[1155,7011,1597],{"class":1382},[1155,7013,1600],{"class":1388},[1155,7015,1603],{"class":1382},[1155,7017,7018,7020,7022,7024,7026,7028,7030,7032,7034,7036,7038,7040,7042,7044,7046],{"class":1157,"line":3913},[1155,7019,1610],{"class":1382},[1155,7021,5522],{"class":1388},[1155,7023,5525],{"class":1382},[1155,7025,5528],{"class":1625},[1155,7027,1629],{"class":1382},[1155,7029,1556],{"class":1382},[1155,7031,5535],{"class":1382},[1155,7033,5538],{"class":1388},[1155,7035,5541],{"class":1382},[1155,7037,1407],{"class":1382},[1155,7039,5546],{"class":1165},[1155,7041,1407],{"class":1382},[1155,7043,1769],{"class":1382},[1155,7045,1556],{"class":1382},[1155,7047,1603],{"class":1382},[1155,7049,7050,7052,7054,7056,7058],{"class":1157,"line":3954},[1155,7051,1619],{"class":1382},[1155,7053,1600],{"class":1388},[1155,7055,5563],{"class":1382},[1155,7057,5538],{"class":1625},[1155,7059,1603],{"class":1382},[1155,7061,7062,7064,7066,7068,7070,7072,7075,7077],{"class":1157,"line":3983},[1155,7063,1643],{"class":1382},[1155,7065,5574],{"class":1388},[1155,7067,5577],{"class":1625},[1155,7069,1629],{"class":1382},[1155,7071,1556],{"class":1382},[1155,7073,7074],{"class":1165},"min-h-dvh flex flex-col py-4 sm:py-6",[1155,7076,1556],{"class":1382},[1155,7078,1603],{"class":1382},[1155,7080,7081,7083],{"class":1157,"line":3995},[1155,7082,5593],{"class":1382},[1155,7084,7085],{"class":1388},"UChatMessages\n",[1155,7087,7088,7090,7092,7094,7096,7098],{"class":1157,"line":4011},[1155,7089,5656],{"class":1382},[1155,7091,2034],{"class":1625},[1155,7093,1629],{"class":1382},[1155,7095,1556],{"class":1382},[1155,7097,2034],{"class":1378},[1155,7099,5650],{"class":1382},[1155,7101,7102,7104,7106,7108,7110,7112],{"class":1157,"line":4025},[1155,7103,5656],{"class":1382},[1155,7105,5659],{"class":1625},[1155,7107,1629],{"class":1382},[1155,7109,1556],{"class":1382},[1155,7111,5659],{"class":1378},[1155,7113,5650],{"class":1382},[1155,7115,7116],{"class":1157,"line":4032},[1155,7117,7118],{"class":1625},"          should-auto-scroll\n",[1155,7120,7121,7124,7126,7128,7131],{"class":1157,"line":4037},[1155,7122,7123],{"class":1625},"          class",[1155,7125,1629],{"class":1382},[1155,7127,1556],{"class":1382},[1155,7129,7130],{"class":1165},"flex-1",[1155,7132,5650],{"class":1382},[1155,7134,7135],{"class":1157,"line":4042},[1155,7136,5741],{"class":1382},[1155,7138,7139,7141,7143,7145,7147,7149,7151,7153,7156,7158,7160],{"class":1157,"line":4048},[1155,7140,5747],{"class":1382},[1155,7142,1600],{"class":1388},[1155,7144,5563],{"class":1382},[1155,7146,374],{"class":1625},[1155,7148,1629],{"class":1382},[1155,7150,1556],{"class":1382},[1155,7152,1902],{"class":1382},[1155,7154,7155],{"class":1378}," message ",[1155,7157,1514],{"class":1382},[1155,7159,1556],{"class":1382},[1155,7161,1603],{"class":1382},[1155,7163,7164,7167,7169,7172,7174,7176,7179,7181,7184,7187,7189,7191,7193,7195,7197,7200,7202,7205,7207,7209,7211,7213,7216,7218,7221,7223,7225,7227,7229,7231,7234,7237],{"class":1157,"line":4065},[1155,7165,7166],{"class":1382},"            \u003C",[1155,7168,1600],{"class":1388},[1155,7170,7171],{"class":1368}," v-for",[1155,7173,1629],{"class":1382},[1155,7175,1556],{"class":1382},[1155,7177,7178],{"class":1378},"(part",[1155,7180,1753],{"class":1382},[1155,7182,7183],{"class":1378}," index) ",[1155,7185,7186],{"class":1382},"in",[1155,7188,2660],{"class":1378},[1155,7190,1845],{"class":1382},[1155,7192,2240],{"class":1378},[1155,7194,1556],{"class":1382},[1155,7196,5525],{"class":1382},[1155,7198,7199],{"class":1625},"key",[1155,7201,1629],{"class":1382},[1155,7203,7204],{"class":1382},"\"`${",[1155,7206,4561],{"class":1378},[1155,7208,1845],{"class":1382},[1155,7210,2056],{"class":1378},[1155,7212,1514],{"class":1382},[1155,7214,7215],{"class":1165},"-",[1155,7217,5479],{"class":1382},[1155,7219,7220],{"class":1378},"part",[1155,7222,1845],{"class":1382},[1155,7224,6692],{"class":1378},[1155,7226,1514],{"class":1382},[1155,7228,7215],{"class":1165},[1155,7230,5479],{"class":1382},[1155,7232,7233],{"class":1378},"index",[1155,7235,7236],{"class":1382},"}`\"",[1155,7238,1603],{"class":1382},[1155,7240,7241,7244],{"class":1157,"line":4087},[1155,7242,7243],{"class":1382},"              \u003C",[1155,7245,7246],{"class":1388},"UChatReasoning\n",[1155,7248,7249,7252,7254,7256,7259,7261,7263,7265],{"class":1157,"line":4105},[1155,7250,7251],{"class":1368},"                v-if",[1155,7253,1629],{"class":1382},[1155,7255,1556],{"class":1382},[1155,7257,7258],{"class":1178},"isReasoningUIPart",[1155,7260,1379],{"class":1382},[1155,7262,7220],{"class":1378},[1155,7264,1919],{"class":1382},[1155,7266,5650],{"class":1382},[1155,7268,7269,7272,7274,7276,7278,7280,7282,7284],{"class":1157,"line":4113},[1155,7270,7271],{"class":1382},"                :",[1155,7273,5422],{"class":1625},[1155,7275,1629],{"class":1382},[1155,7277,1556],{"class":1382},[1155,7279,7220],{"class":1378},[1155,7281,1845],{"class":1382},[1155,7283,5422],{"class":1378},[1155,7285,5650],{"class":1382},[1155,7287,7288,7290,7292,7294,7296,7299,7301,7303,7305],{"class":1157,"line":4130},[1155,7289,7271],{"class":1382},[1155,7291,5674],{"class":1625},[1155,7293,1629],{"class":1382},[1155,7295,1556],{"class":1382},[1155,7297,7298],{"class":1178},"isPartStreaming",[1155,7300,1379],{"class":1382},[1155,7302,7220],{"class":1378},[1155,7304,1919],{"class":1382},[1155,7306,5650],{"class":1382},[1155,7308,7309],{"class":1157,"line":4151},[1155,7310,7311],{"class":1382},"              >\n",[1155,7313,7314,7317],{"class":1157,"line":4161},[1155,7315,7316],{"class":1382},"                \u003C",[1155,7318,7319],{"class":1388},"ChatMarkdown\n",[1155,7321,7322,7325,7327,7329,7331,7333,7335,7337],{"class":1157,"line":4171},[1155,7323,7324],{"class":1382},"                  :",[1155,7326,3396],{"class":1625},[1155,7328,1629],{"class":1382},[1155,7330,1556],{"class":1382},[1155,7332,7220],{"class":1378},[1155,7334,1845],{"class":1382},[1155,7336,5422],{"class":1378},[1155,7338,5650],{"class":1382},[1155,7340,7341,7343,7345,7347,7349,7351,7353,7355,7357],{"class":1157,"line":4181},[1155,7342,7324],{"class":1382},[1155,7344,5674],{"class":1625},[1155,7346,1629],{"class":1382},[1155,7348,1556],{"class":1382},[1155,7350,7298],{"class":1178},[1155,7352,1379],{"class":1382},[1155,7354,7220],{"class":1378},[1155,7356,1919],{"class":1382},[1155,7358,5650],{"class":1382},[1155,7360,7361],{"class":1157,"line":4198},[1155,7362,7363],{"class":1382},"                \u002F>\n",[1155,7365,7366,7369,7372],{"class":1157,"line":4209},[1155,7367,7368],{"class":1382},"              \u003C\u002F",[1155,7370,7371],{"class":1388},"UChatReasoning",[1155,7373,1603],{"class":1382},[1155,7375,7376],{"class":1157,"line":4215},[1155,7377,1447],{"emptyLinePlaceholder":21},[1155,7379,7380,7382,7384,7387,7389,7391,7394,7397,7399],{"class":1157,"line":4221},[1155,7381,7243],{"class":1382},[1155,7383,1600],{"class":1388},[1155,7385,7386],{"class":1368}," v-else-if",[1155,7388,1629],{"class":1382},[1155,7390,1556],{"class":1382},[1155,7392,7393],{"class":1178},"isTextUIPart",[1155,7395,7396],{"class":1378},"(part)",[1155,7398,1556],{"class":1382},[1155,7400,1603],{"class":1382},[1155,7402,7403,7405],{"class":1157,"line":4231},[1155,7404,7316],{"class":1382},[1155,7406,7319],{"class":1388},[1155,7408,7409,7412,7414,7416,7418,7420,7422,7425,7427,7429],{"class":1157,"line":4241},[1155,7410,7411],{"class":1368},"                  v-if",[1155,7413,1629],{"class":1382},[1155,7415,1556],{"class":1382},[1155,7417,4561],{"class":1378},[1155,7419,1845],{"class":1382},[1155,7421,2170],{"class":1378},[1155,7423,7424],{"class":1382}," === ",[1155,7426,1407],{"class":1382},[1155,7428,2197],{"class":1165},[1155,7430,5687],{"class":1382},[1155,7432,7433,7435,7437,7439,7441,7443,7445,7447],{"class":1157,"line":4255},[1155,7434,7324],{"class":1382},[1155,7436,3396],{"class":1625},[1155,7438,1629],{"class":1382},[1155,7440,1556],{"class":1382},[1155,7442,7220],{"class":1378},[1155,7444,1845],{"class":1382},[1155,7446,5422],{"class":1378},[1155,7448,5650],{"class":1382},[1155,7450,7451,7453,7455,7457,7459,7461,7463,7465,7467],{"class":1157,"line":4270},[1155,7452,7324],{"class":1382},[1155,7454,5674],{"class":1625},[1155,7456,1629],{"class":1382},[1155,7458,1556],{"class":1382},[1155,7460,7298],{"class":1178},[1155,7462,1379],{"class":1382},[1155,7464,7220],{"class":1378},[1155,7466,1919],{"class":1382},[1155,7468,5650],{"class":1382},[1155,7470,7471],{"class":1157,"line":4275},[1155,7472,7363],{"class":1382},[1155,7474,7475,7477,7479,7481,7483,7485,7488,7490,7492,7494,7496,7499,7501],{"class":1157,"line":4280},[1155,7476,7316],{"class":1382},[1155,7478,1045],{"class":1388},[1155,7480,7386],{"class":1625},[1155,7482,1629],{"class":1382},[1155,7484,1556],{"class":1382},[1155,7486,7487],{"class":1165},"message.role === 'user'",[1155,7489,1556],{"class":1382},[1155,7491,5577],{"class":1625},[1155,7493,1629],{"class":1382},[1155,7495,1556],{"class":1382},[1155,7497,7498],{"class":1165},"whitespace-pre-wrap",[1155,7500,1556],{"class":1382},[1155,7502,1603],{"class":1382},[1155,7504,7505],{"class":1157,"line":4290},[1155,7506,7507],{"class":1378},"                  {{ part.text }}\n",[1155,7509,7510,7513,7515],{"class":1157,"line":4306},[1155,7511,7512],{"class":1382},"                \u003C\u002F",[1155,7514,1045],{"class":1388},[1155,7516,1603],{"class":1382},[1155,7518,7519,7521,7523],{"class":1157,"line":4321},[1155,7520,7368],{"class":1382},[1155,7522,1600],{"class":1388},[1155,7524,1603],{"class":1382},[1155,7526,7527,7530,7532],{"class":1157,"line":4327},[1155,7528,7529],{"class":1382},"            \u003C\u002F",[1155,7531,1600],{"class":1388},[1155,7533,1603],{"class":1382},[1155,7535,7536,7539,7541],{"class":1157,"line":4333},[1155,7537,7538],{"class":1382},"          \u003C\u002F",[1155,7540,1600],{"class":1388},[1155,7542,1603],{"class":1382},[1155,7544,7545,7547,7549],{"class":1157,"line":4341},[1155,7546,5619],{"class":1382},[1155,7548,5178],{"class":1388},[1155,7550,1603],{"class":1382},[1155,7552,7553],{"class":1157,"line":4346},[1155,7554,1447],{"emptyLinePlaceholder":21},[1155,7556,7557,7559],{"class":1157,"line":4352},[1155,7558,5593],{"class":1382},[1155,7560,5635],{"class":1388},[1155,7562,7563,7565,7567,7569,7571],{"class":1157,"line":4372},[1155,7564,5641],{"class":1625},[1155,7566,1629],{"class":1382},[1155,7568,1556],{"class":1382},[1155,7570,5289],{"class":1378},[1155,7572,5650],{"class":1382},[1155,7574,7575,7577,7579,7581,7583,7585],{"class":1157,"line":4387},[1155,7576,5656],{"class":1382},[1155,7578,6741],{"class":1625},[1155,7580,1629],{"class":1382},[1155,7582,1556],{"class":1382},[1155,7584,6741],{"class":1378},[1155,7586,5650],{"class":1382},[1155,7588,7589,7591,7593,7595,7597],{"class":1157,"line":4404},[1155,7590,5693],{"class":1625},[1155,7592,1629],{"class":1382},[1155,7594,1556],{"class":1382},[1155,7596,5700],{"class":1165},[1155,7598,5650],{"class":1382},[1155,7600,7601,7603,7605,7607,7610],{"class":1157,"line":4427},[1155,7602,7123],{"class":1625},[1155,7604,1629],{"class":1382},[1155,7606,1556],{"class":1382},[1155,7608,7609],{"class":1165},"sticky bottom-0",[1155,7611,5650],{"class":1382},[1155,7613,7614,7616,7618,7620,7622,7625],{"class":1157,"line":4438},[1155,7615,5723],{"class":1382},[1155,7617,5726],{"class":1625},[1155,7619,1629],{"class":1382},[1155,7621,1556],{"class":1382},[1155,7623,7624],{"class":1378},"handleSubmit",[1155,7626,5650],{"class":1382},[1155,7628,7629],{"class":1157,"line":4446},[1155,7630,5741],{"class":1382},[1155,7632,7633,7635],{"class":1157,"line":4452},[1155,7634,5747],{"class":1382},[1155,7636,7637],{"class":1388},"UChatPromptSubmit\n",[1155,7639,7640,7643,7645,7647,7649,7651],{"class":1157,"line":4457},[1155,7641,7642],{"class":1382},"            :",[1155,7644,5659],{"class":1625},[1155,7646,1629],{"class":1382},[1155,7648,1556],{"class":1382},[1155,7650,5659],{"class":1378},[1155,7652,5650],{"class":1382},[1155,7654,7655,7658,7660,7662,7664],{"class":1157,"line":4492},[1155,7656,7657],{"class":1625},"            color",[1155,7659,1629],{"class":1382},[1155,7661,1556],{"class":1382},[1155,7663,5760],{"class":1165},[1155,7665,5650],{"class":1382},[1155,7667,7668,7671,7674,7676,7678,7680,7682],{"class":1157,"line":4498},[1155,7669,7670],{"class":1382},"            @",[1155,7672,7673],{"class":1625},"stop",[1155,7675,1629],{"class":1382},[1155,7677,1556],{"class":1382},[1155,7679,7673],{"class":1178},[1155,7681,1842],{"class":1382},[1155,7683,5650],{"class":1382},[1155,7685,7686,7688,7691,7693,7695,7698,7700],{"class":1157,"line":4518},[1155,7687,7670],{"class":1382},[1155,7689,7690],{"class":1625},"reload",[1155,7692,1629],{"class":1382},[1155,7694,1556],{"class":1382},[1155,7696,7697],{"class":1178},"regenerate",[1155,7699,1842],{"class":1382},[1155,7701,5650],{"class":1382},[1155,7703,7704],{"class":1157,"line":4524},[1155,7705,7706],{"class":1382},"          \u002F>\n",[1155,7708,7709,7711,7713],{"class":1157,"line":4570},[1155,7710,5619],{"class":1382},[1155,7712,5172],{"class":1388},[1155,7714,1603],{"class":1382},[1155,7716,7717,7719,7721],{"class":1157,"line":4586},[1155,7718,5778],{"class":1382},[1155,7720,5574],{"class":1388},[1155,7722,1603],{"class":1382},[1155,7724,7725,7727,7729],{"class":1157,"line":4619},[1155,7726,1654],{"class":1382},[1155,7728,1600],{"class":1388},[1155,7730,1603],{"class":1382},[1155,7732,7733,7735,7737],{"class":1157,"line":4633},[1155,7734,1664],{"class":1382},[1155,7736,5522],{"class":1388},[1155,7738,1603],{"class":1382},[1155,7740,7741,7743,7745],{"class":1157,"line":4641},[1155,7742,1673],{"class":1382},[1155,7744,1600],{"class":1388},[1155,7746,1603],{"class":1382},[1045,7748,7749],{},"Here's a breakdown of the key parts:",[1045,7751,7752],{},[1063,7753,4720,7754,7756],{},[1105,7755,6222],{}," composable",[1045,7758,4720,7759,7764,7765,7767],{},[1099,7760,7762],{"href":6218,"rel":7761},[1103],[1105,7763,6222],{}," composable from ",[1105,7766,6311],{}," manages the entire conversation state. It handles:",[1057,7769,7770,7775,7789,7795,7801],{},[1060,7771,7772,7773],{},"Message history with ",[1105,7774,2034],{},[1060,7776,7777,7778,1988,7780,2907,7782,2907,7785,2907,7787,1919],{},"Connection status with ",[1105,7779,5659],{},[1105,7781,5684],{},[1105,7783,7784],{},"submitted",[1105,7786,5674],{},[1105,7788,6741],{},[1060,7790,7791,7792],{},"Sending messages with ",[1105,7793,7794],{},"sendMessage()",[1060,7796,7797,7798],{},"Stopping generation with ",[1105,7799,7800],{},"stop()",[1060,7802,7803,7804],{},"Regenerating responses with ",[1105,7805,7806],{},"regenerate()",[1045,7808,4720,7809,7812,7813,7818,7819,7821],{},[1105,7810,7811],{},"onData"," callback receives ",[1099,7814,7817],{"href":7815,"rel":7816},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-ui\u002Fstreaming-data",[1103],"custom data events"," from the server (like ",[1105,7820,4397],{},"), so you can react to server-side events during streaming.",[1045,7823,7824],{},[1063,7825,7826],{},"UChatMessages Component",[1045,7828,4720,7829,7833],{},[1099,7830,7831],{"href":275},[1105,7832,5178],{}," component is purpose-built for AI chatbots with:",[1057,7835,7836,7839,7842,7845],{},[1060,7837,7838],{},"Auto-scroll to bottom on load",[1060,7840,7841],{},"Continuous scrolling as messages stream in",[1060,7843,7844],{},"A loading indicator while the assistant processes",[1060,7846,7847],{},"An \"Auto scroll\" button when scrolled up",[1045,7849,7850],{},[1063,7851,7852],{},"Rendering Message Parts",[1045,7854,7855,7856,7858,7859,1108,7861,7863,7864,7866,7867,7871,7872,7874,7875,7877],{},"We iterate over message ",[1105,7857,2240],{}," using AI SDK helpers like ",[1105,7860,7393],{},[1105,7862,7258],{},", rendering assistant text with the ",[1105,7865,6072],{}," component we created earlier and reasoning content with ",[1099,7868,7869],{"href":295},[1105,7870,7371],{},". The ",[1105,7873,7298],{}," utility from ",[1105,7876,6332],{}," detects if a part is currently being streamed.",[1045,7879,7880],{},[1063,7881,7882],{},"UChatPromptSubmit Component",[1045,7884,4720,7885,7889],{},[1099,7886,7887],{"href":290},[1105,7888,5750],{}," component adapts based on the chat status:",[1057,7891,7892,7895,7898],{},[1060,7893,7894],{},"Shows a send button when ready",[1060,7896,7897],{},"Shows a stop button while streaming",[1060,7899,7900],{},"Shows a reload button after an error",[1049,7902,7904],{"id":7903},"adding-chat-history","Adding chat history",[1045,7906,7907],{},"This section adds a dropdown menu to list previous chats and navigate between them.",[1183,7909,7911],{"id":7910},"listing-chats-api","Listing chats API",[1045,7913,7914],{},"First, create an endpoint to fetch all chats:",[1355,7916,7917],{},[1146,7918,7921],{"className":1359,"code":7919,"filename":7920,"language":1361,"meta":1151,"style":1151},"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",[1105,7922,7923,7941,7963,7982,7986,8004,8029,8056,8062],{"__ignoreMap":1151},[1155,7924,7925,7927,7929,7931,7933,7935,7937,7939],{"class":1157,"line":1158},[1155,7926,1744],{"class":1368},[1155,7928,1747],{"class":1382},[1155,7930,2540],{"class":1378},[1155,7932,1769],{"class":1382},[1155,7934,1772],{"class":1368},[1155,7936,1469],{"class":1382},[1155,7938,1183],{"class":1165},[1155,7940,1433],{"class":1382},[1155,7942,7943,7945,7947,7949,7951,7953,7955,7957,7959,7961],{"class":1157,"line":1175},[1155,7944,1744],{"class":1368},[1155,7946,1747],{"class":1382},[1155,7948,2483],{"class":1378},[1155,7950,1753],{"class":1382},[1155,7952,2591],{"class":1378},[1155,7954,1769],{"class":1382},[1155,7956,1772],{"class":1368},[1155,7958,1469],{"class":1382},[1155,7960,2600],{"class":1165},[1155,7962,1433],{"class":1382},[1155,7964,7965,7967,7969,7972,7974,7976,7978,7980],{"class":1157,"line":1398},[1155,7966,1744],{"class":1368},[1155,7968,1747],{"class":1382},[1155,7970,7971],{"class":1378}," desc",[1155,7973,1769],{"class":1382},[1155,7975,1772],{"class":1368},[1155,7977,1469],{"class":1382},[1155,7979,1797],{"class":1165},[1155,7981,1433],{"class":1382},[1155,7983,7984],{"class":1157,"line":1413},[1155,7985,1447],{"emptyLinePlaceholder":21},[1155,7987,7988,7990,7992,7994,7996,7998,8000,8002],{"class":1157,"line":1425},[1155,7989,1369],{"class":1368},[1155,7991,1372],{"class":1368},[1155,7993,2540],{"class":1178},[1155,7995,1379],{"class":1378},[1155,7997,2639],{"class":1625},[1155,7999,5057],{"class":1382},[1155,8001,1862],{"class":1625},[1155,8003,1458],{"class":1382},[1155,8005,8006,8008,8010,8012,8014,8016,8018,8020,8022,8025,8027],{"class":1157,"line":1436},[1155,8007,2883],{"class":1368},[1155,8009,2668],{"class":1368},[1155,8011,2483],{"class":1378},[1155,8013,1845],{"class":1382},[1155,8015,3537],{"class":1378},[1155,8017,1845],{"class":1382},[1155,8019,1824],{"class":1378},[1155,8021,1845],{"class":1382},[1155,8023,8024],{"class":1178},"findMany",[1155,8026,1379],{"class":1388},[1155,8028,1383],{"class":1382},[1155,8030,8031,8034,8036,8038,8040,8042,8044,8046,8048,8050,8052,8054],{"class":1157,"line":1444},[1155,8032,8033],{"class":1178},"    orderBy",[1155,8035,1392],{"class":1382},[1155,8037,5057],{"class":1382},[1155,8039,1862],{"class":1625},[1155,8041,7971],{"class":1178},[1155,8043,1379],{"class":1388},[1155,8045,2760],{"class":1378},[1155,8047,1845],{"class":1382},[1155,8049,1824],{"class":1378},[1155,8051,1845],{"class":1382},[1155,8053,5074],{"class":1378},[1155,8055,1517],{"class":1388},[1155,8057,8058,8060],{"class":1157,"line":1450},[1155,8059,2456],{"class":1382},[1155,8061,1517],{"class":1388},[1155,8063,8064,8066],{"class":1157,"line":1461},[1155,8065,1514],{"class":1382},[1155,8067,1517],{"class":1378},[1183,8069,8071],{"id":8070},"building-the-chats-history-dropdown","Building the chats history dropdown",[1045,8073,8074,8075,8080,8081,8086,8087,8080,8094,8096],{},"The component uses ",[1099,8076,8077],{"href":460},[1105,8078,8079],{},"UDropdownMenu"," with a ",[1099,8082,8083],{"href":234},[1105,8084,8085],{},"UButton"," as trigger. Use ",[1099,8088,8091],{"href":8089,"rel":8090},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-fetch",[1103],[1105,8092,8093],{},"useFetch",[1105,8095,7199],{}," to fetch and cache the chat list:",[1355,8098,8099],{},[1146,8100,8103],{"className":1587,"code":8101,"filename":8102,"language":34,"meta":1151,"style":1151},"\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",[1105,8104,8105,8125,8137,8141,8173,8188,8202,8208,8212,8232,8237,8253,8269,8289,8313,8317,8342,8367,8389,8415,8421,8425,8433,8437,8445,8477,8484,8501,8515,8529,8541,8555,8560,8568],{"__ignoreMap":1151},[1155,8106,8107,8109,8111,8113,8115,8117,8119,8121,8123],{"class":1157,"line":1158},[1155,8108,1597],{"class":1382},[1155,8110,5207],{"class":1388},[1155,8112,5210],{"class":1625},[1155,8114,5213],{"class":1625},[1155,8116,1629],{"class":1382},[1155,8118,1556],{"class":1382},[1155,8120,1361],{"class":1165},[1155,8122,1556],{"class":1382},[1155,8124,1603],{"class":1382},[1155,8126,8127,8129,8131,8133,8135],{"class":1157,"line":1175},[1155,8128,3111],{"class":1625},[1155,8130,6345],{"class":1378},[1155,8132,1629],{"class":1382},[1155,8134,6350],{"class":1178},[1155,8136,2711],{"class":1378},[1155,8138,8139],{"class":1157,"line":1398},[1155,8140,1447],{"emptyLinePlaceholder":21},[1155,8142,8143,8145,8147,8149,8151,8153,8155,8157,8159,8161,8163,8165,8167,8169,8171],{"class":1157,"line":1413},[1155,8144,3111],{"class":1625},[1155,8146,1747],{"class":1382},[1155,8148,6384],{"class":1388},[1155,8150,1392],{"class":1382},[1155,8152,1813],{"class":1378},[1155,8154,1514],{"class":1382},[1155,8156,2665],{"class":1382},[1155,8158,2668],{"class":1368},[1155,8160,6398],{"class":1178},[1155,8162,1379],{"class":1378},[1155,8164,1407],{"class":1382},[1155,8166,5350],{"class":1165},[1155,8168,1407],{"class":1382},[1155,8170,1753],{"class":1382},[1155,8172,1458],{"class":1382},[1155,8174,8175,8178,8180,8182,8184,8186],{"class":1157,"line":1425},[1155,8176,8177],{"class":1388},"  key",[1155,8179,1392],{"class":1382},[1155,8181,1469],{"class":1382},[1155,8183,1824],{"class":1165},[1155,8185,1407],{"class":1382},[1155,8187,1410],{"class":1382},[1155,8189,8190,8193,8195,8197,8199],{"class":1157,"line":1436},[1155,8191,8192],{"class":1178},"  default",[1155,8194,1392],{"class":1382},[1155,8196,5057],{"class":1382},[1155,8198,1862],{"class":1625},[1155,8200,8201],{"class":1378}," []\n",[1155,8203,8204,8206],{"class":1157,"line":1444},[1155,8205,1514],{"class":1382},[1155,8207,1517],{"class":1378},[1155,8209,8210],{"class":1157,"line":1450},[1155,8211,1447],{"emptyLinePlaceholder":21},[1155,8213,8214,8216,8219,8221,8224,8226,8228,8230],{"class":1157,"line":1461},[1155,8215,3111],{"class":1625},[1155,8217,8218],{"class":1378}," items ",[1155,8220,1629],{"class":1382},[1155,8222,8223],{"class":1178}," computed",[1155,8225,1379],{"class":1378},[1155,8227,1842],{"class":1382},[1155,8229,1862],{"class":1625},[1155,8231,1395],{"class":1378},[1155,8233,8234],{"class":1157,"line":1477},[1155,8235,8236],{"class":1382},"  {\n",[1155,8238,8239,8242,8244,8246,8249,8251],{"class":1157,"line":1483},[1155,8240,8241],{"class":1388},"    label",[1155,8243,1392],{"class":1382},[1155,8245,1469],{"class":1382},[1155,8247,8248],{"class":1165},"New chat",[1155,8250,1407],{"class":1382},[1155,8252,1410],{"class":1382},[1155,8254,8255,8258,8260,8262,8265,8267],{"class":1157,"line":1488},[1155,8256,8257],{"class":1388},"    to",[1155,8259,1392],{"class":1382},[1155,8261,1469],{"class":1382},[1155,8263,8264],{"class":1165},"\u002F",[1155,8266,1407],{"class":1382},[1155,8268,1410],{"class":1382},[1155,8270,8271,8274,8276,8278,8285,8287],{"class":1157,"line":1511},[1155,8272,8273],{"class":1388},"    icon",[1155,8275,1392],{"class":1382},[1155,8277,1469],{"class":1382},[1155,8279,8280,8284],{"class":1165},[8281,8282],"i",{"class":8283},"shiki-icon-highlight s5r3L","i-lucide-plus-square",[1155,8286,1407],{"class":1382},[1155,8288,1410],{"class":1382},[1155,8290,8291,8294,8296,8299,8301,8304,8307,8309,8311],{"class":1157,"line":2016},[1155,8292,8293],{"class":1388},"    active",[1155,8295,1392],{"class":1382},[1155,8297,8298],{"class":1378}," route",[1155,8300,1845],{"class":1382},[1155,8302,8303],{"class":1378},"name ",[1155,8305,8306],{"class":1382},"===",[1155,8308,1469],{"class":1382},[1155,8310,7233],{"class":1165},[1155,8312,1433],{"class":1382},[1155,8314,8315],{"class":1157,"line":2043},[1155,8316,1480],{"class":1382},[1155,8318,8319,8322,8324,8326,8328,8330,8332,8334,8336,8338,8340],{"class":1157,"line":2089},[1155,8320,8321],{"class":1382},"  ...",[1155,8323,1824],{"class":1378},[1155,8325,1845],{"class":1382},[1155,8327,3396],{"class":1378},[1155,8329,1845],{"class":1382},[1155,8331,4556],{"class":1178},[1155,8333,1379],{"class":1378},[1155,8335,266],{"class":1979},[1155,8337,1862],{"class":1625},[1155,8339,1988],{"class":1378},[1155,8341,1383],{"class":1382},[1155,8343,8344,8346,8348,8350,8352,8355,8358,8360,8363,8365],{"class":1157,"line":2156},[1155,8345,8241],{"class":1388},[1155,8347,1392],{"class":1382},[1155,8349,2833],{"class":1378},[1155,8351,1845],{"class":1382},[1155,8353,8354],{"class":1378},"title ",[1155,8356,8357],{"class":1382},"||",[1155,8359,1469],{"class":1382},[1155,8361,8362],{"class":1165},"Untitled",[1155,8364,1407],{"class":1382},[1155,8366,1410],{"class":1382},[1155,8368,8369,8371,8373,8375,8377,8379,8381,8383,8385,8387],{"class":1157,"line":2226},[1155,8370,8257],{"class":1388},[1155,8372,1392],{"class":1382},[1155,8374,3751],{"class":1382},[1155,8376,5476],{"class":1165},[1155,8378,5479],{"class":1382},[1155,8380,266],{"class":1378},[1155,8382,1845],{"class":1382},[1155,8384,2056],{"class":1378},[1155,8386,5488],{"class":1382},[1155,8388,1410],{"class":1382},[1155,8390,8391,8393,8395,8397,8399,8401,8403,8406,8408,8410,8412],{"class":1157,"line":2266},[1155,8392,8293],{"class":1388},[1155,8394,1392],{"class":1382},[1155,8396,8298],{"class":1378},[1155,8398,1845],{"class":1382},[1155,8400,6415],{"class":1378},[1155,8402,1845],{"class":1382},[1155,8404,8405],{"class":1378},"id ",[1155,8407,8306],{"class":1382},[1155,8409,2833],{"class":1378},[1155,8411,1845],{"class":1382},[1155,8413,8414],{"class":1378},"id\n",[1155,8416,8417,8419],{"class":1157,"line":2317},[1155,8418,2456],{"class":1382},[1155,8420,2009],{"class":1378},[1155,8422,8423],{"class":1157,"line":2330},[1155,8424,2363],{"class":1378},[1155,8426,8427,8429,8431],{"class":1157,"line":2360},[1155,8428,1673],{"class":1382},[1155,8430,5207],{"class":1388},[1155,8432,1603],{"class":1382},[1155,8434,8435],{"class":1157,"line":2366},[1155,8436,1447],{"emptyLinePlaceholder":21},[1155,8438,8439,8441,8443],{"class":1157,"line":2371},[1155,8440,1597],{"class":1382},[1155,8442,1600],{"class":1388},[1155,8444,1603],{"class":1382},[1155,8446,8447,8449,8451,8453,8456,8458,8460,8462,8464,8466,8468,8470,8473,8475],{"class":1157,"line":2403},[1155,8448,1610],{"class":1382},[1155,8450,8079],{"class":1388},[1155,8452,5525],{"class":1382},[1155,8454,8455],{"class":1625},"items",[1155,8457,1629],{"class":1382},[1155,8459,1556],{"class":1382},[1155,8461,8455],{"class":1378},[1155,8463,1556],{"class":1382},[1155,8465,5577],{"class":1625},[1155,8467,1629],{"class":1382},[1155,8469,1556],{"class":1382},[1155,8471,8472],{"class":1165},"m-2",[1155,8474,1556],{"class":1382},[1155,8476,1603],{"class":1382},[1155,8478,8479,8481],{"class":1157,"line":2419},[1155,8480,1619],{"class":1382},[1155,8482,8483],{"class":1388},"UButton\n",[1155,8485,8486,8489,8491,8493,8499],{"class":1157,"line":2437},[1155,8487,8488],{"class":1625},"      icon",[1155,8490,1629],{"class":1382},[1155,8492,1556],{"class":1382},[1155,8494,8495,8498],{"class":1165},[8281,8496],{"class":8497},"shiki-icon-highlight sS-BN","i-lucide-messages-square",[1155,8500,5650],{"class":1382},[1155,8502,8503,8506,8508,8510,8513],{"class":1157,"line":2453},[1155,8504,8505],{"class":1625},"      variant",[1155,8507,1629],{"class":1382},[1155,8509,1556],{"class":1382},[1155,8511,8512],{"class":1165},"ghost",[1155,8514,5650],{"class":1382},[1155,8516,8517,8520,8522,8524,8527],{"class":1157,"line":2461},[1155,8518,8519],{"class":1625},"      label",[1155,8521,1629],{"class":1382},[1155,8523,1556],{"class":1382},[1155,8525,8526],{"class":1165},"Chats History",[1155,8528,5650],{"class":1382},[1155,8530,8531,8533,8535,8537,8539],{"class":1157,"line":3434},[1155,8532,6798],{"class":1625},[1155,8534,1629],{"class":1382},[1155,8536,1556],{"class":1382},[1155,8538,5760],{"class":1165},[1155,8540,5650],{"class":1382},[1155,8542,8543,8546,8548,8550,8553],{"class":1157,"line":3449},[1155,8544,8545],{"class":1625},"      class",[1155,8547,1629],{"class":1382},[1155,8549,1556],{"class":1382},[1155,8551,8552],{"class":1165},"w-fit",[1155,8554,5650],{"class":1382},[1155,8556,8557],{"class":1157,"line":3466},[1155,8558,8559],{"class":1382},"    \u002F>\n",[1155,8561,8562,8564,8566],{"class":1157,"line":3498},[1155,8563,1664],{"class":1382},[1155,8565,8079],{"class":1388},[1155,8567,1603],{"class":1382},[1155,8569,8570,8572,8574],{"class":1157,"line":3511},[1155,8571,1673],{"class":1382},[1155,8573,1600],{"class":1388},[1155,8575,1603],{"class":1382},[1049,8577,8579],{"id":8578},"integrating-history-in-the-home-page","Integrating history in the home page",[1355,8581,8582],{},[1732,8583,8584],{},[1146,8585,8588],{"className":1587,"code":8586,"filename":5197,"highlights":8587,"language":34,"meta":1151,"style":1151},"\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",[2453,2461,3434],[1105,8589,8590,8610,8626,8642,8646,8658,8680,8684,8696,8700,8704,8728,8742,8750,8758,8772,8808,8812,8816,8822,8826,8830,8852,8856,8864,8868,8876,8908,8922,8932,8941,8953,8971,8989,8993,9001,9005,9011,9023,9051,9063,9075,9089,9093,9111,9119,9127,9135,9143],{"__ignoreMap":1151},[1155,8591,8592,8594,8596,8598,8600,8602,8604,8606,8608],{"class":1157,"line":1158},[1155,8593,1597],{"class":1382},[1155,8595,5207],{"class":1388},[1155,8597,5210],{"class":1625},[1155,8599,5213],{"class":1625},[1155,8601,1629],{"class":1382},[1155,8603,1556],{"class":1382},[1155,8605,1361],{"class":1165},[1155,8607,1556],{"class":1382},[1155,8609,1603],{"class":1382},[1155,8611,8612,8614,8616,8618,8620,8622,8624],{"class":1157,"line":1175},[1155,8613,3111],{"class":1625},[1155,8615,5230],{"class":1378},[1155,8617,1629],{"class":1382},[1155,8619,5235],{"class":1178},[1155,8621,1379],{"class":1378},[1155,8623,5240],{"class":1382},[1155,8625,1517],{"class":1378},[1155,8627,8628,8630,8632,8634,8636,8638,8640],{"class":1157,"line":1398},[1155,8629,3111],{"class":1625},[1155,8631,5249],{"class":1378},[1155,8633,1629],{"class":1382},[1155,8635,5235],{"class":1178},[1155,8637,1379],{"class":1378},[1155,8639,5258],{"class":4249},[1155,8641,1517],{"class":1378},[1155,8643,8644],{"class":1157,"line":1413},[1155,8645,1447],{"emptyLinePlaceholder":21},[1155,8647,8648,8650,8652,8654,8656],{"class":1157,"line":1425},[1155,8649,2639],{"class":1625},[1155,8651,5271],{"class":1625},[1155,8653,5274],{"class":1178},[1155,8655,1842],{"class":1382},[1155,8657,1458],{"class":1382},[1155,8659,8660,8662,8664,8666,8668,8670,8672,8674,8676,8678],{"class":1157,"line":1436},[1155,8661,3612],{"class":1368},[1155,8663,1988],{"class":1388},[1155,8665,3617],{"class":1382},[1155,8667,5289],{"class":1378},[1155,8669,1845],{"class":1382},[1155,8671,3396],{"class":1378},[1155,8673,1845],{"class":1382},[1155,8675,5298],{"class":1178},[1155,8677,5301],{"class":1388},[1155,8679,5304],{"class":1368},[1155,8681,8682],{"class":1157,"line":1444},[1155,8683,1447],{"emptyLinePlaceholder":21},[1155,8685,8686,8688,8690,8692,8694],{"class":1157,"line":1450},[1155,8687,5313],{"class":1378},[1155,8689,1845],{"class":1382},[1155,8691,3396],{"class":1378},[1155,8693,2665],{"class":1382},[1155,8695,4435],{"class":4249},[1155,8697,8698],{"class":1157,"line":1461},[1155,8699,1447],{"emptyLinePlaceholder":21},[1155,8701,8702],{"class":1157,"line":1477},[1155,8703,5330],{"class":2733},[1155,8705,8706,8708,8710,8712,8714,8716,8718,8720,8722,8724,8726],{"class":1157,"line":1483},[1155,8707,2655],{"class":1625},[1155,8709,2833],{"class":1378},[1155,8711,2665],{"class":1382},[1155,8713,2668],{"class":1368},[1155,8715,5343],{"class":1178},[1155,8717,1379],{"class":1388},[1155,8719,1407],{"class":1382},[1155,8721,5350],{"class":1165},[1155,8723,1407],{"class":1382},[1155,8725,1753],{"class":1382},[1155,8727,1458],{"class":1382},[1155,8729,8730,8732,8734,8736,8738,8740],{"class":1157,"line":1488},[1155,8731,5361],{"class":1388},[1155,8733,1392],{"class":1382},[1155,8735,1469],{"class":1382},[1155,8737,5368],{"class":1165},[1155,8739,1407],{"class":1382},[1155,8741,1410],{"class":1382},[1155,8743,8744,8746,8748],{"class":1157,"line":1511},[1155,8745,5377],{"class":1388},[1155,8747,1392],{"class":1382},[1155,8749,1458],{"class":1382},[1155,8751,8752,8754,8756],{"class":1157,"line":2016},[1155,8753,3437],{"class":1388},[1155,8755,1392],{"class":1382},[1155,8757,1458],{"class":1382},[1155,8759,8760,8762,8764,8766,8768,8770],{"class":1157,"line":2043},[1155,8761,4589],{"class":1388},[1155,8763,1392],{"class":1382},[1155,8765,1469],{"class":1382},[1155,8767,2188],{"class":1165},[1155,8769,1407],{"class":1382},[1155,8771,1410],{"class":1382},[1155,8773,8774,8776,8778,8780,8782,8784,8786,8788,8790,8792,8794,8796,8798,8800,8802,8804,8806],{"class":1157,"line":2089},[1155,8775,4622],{"class":1388},[1155,8777,1392],{"class":1382},[1155,8779,1496],{"class":1388},[1155,8781,1902],{"class":1382},[1155,8783,2562],{"class":1388},[1155,8785,1392],{"class":1382},[1155,8787,1469],{"class":1382},[1155,8789,5422],{"class":1165},[1155,8791,1407],{"class":1382},[1155,8793,1753],{"class":1382},[1155,8795,1756],{"class":1388},[1155,8797,1392],{"class":1382},[1155,8799,5433],{"class":1378},[1155,8801,1845],{"class":1382},[1155,8803,3396],{"class":1378},[1155,8805,1769],{"class":1382},[1155,8807,3237],{"class":1388},[1155,8809,8810],{"class":1157,"line":2156},[1155,8811,4449],{"class":1382},[1155,8813,8814],{"class":1157,"line":2226},[1155,8815,4644],{"class":1382},[1155,8817,8818,8820],{"class":1157,"line":2266},[1155,8819,2456],{"class":1382},[1155,8821,1517],{"class":1388},[1155,8823,8824],{"class":1157,"line":2317},[1155,8825,1447],{"emptyLinePlaceholder":21},[1155,8827,8828],{"class":1157,"line":2330},[1155,8829,5464],{"class":2733},[1155,8831,8832,8834,8836,8838,8840,8842,8844,8846,8848,8850],{"class":1157,"line":2360},[1155,8833,5469],{"class":1178},[1155,8835,1379],{"class":1388},[1155,8837,3757],{"class":1382},[1155,8839,5476],{"class":1165},[1155,8841,5479],{"class":1382},[1155,8843,266],{"class":1378},[1155,8845,1845],{"class":1382},[1155,8847,2056],{"class":1378},[1155,8849,5488],{"class":1382},[1155,8851,1517],{"class":1388},[1155,8853,8854],{"class":1157,"line":2366},[1155,8855,5495],{"class":1382},[1155,8857,8858,8860,8862],{"class":1157,"line":2371},[1155,8859,1673],{"class":1382},[1155,8861,5207],{"class":1388},[1155,8863,1603],{"class":1382},[1155,8865,8866],{"class":1157,"line":2403},[1155,8867,1447],{"emptyLinePlaceholder":21},[1155,8869,8870,8872,8874],{"class":1157,"line":2419},[1155,8871,1597],{"class":1382},[1155,8873,1600],{"class":1388},[1155,8875,1603],{"class":1382},[1155,8877,8878,8880,8882,8884,8886,8888,8890,8892,8894,8896,8898,8900,8902,8904,8906],{"class":1157,"line":2437},[1155,8879,1610],{"class":1382},[1155,8881,5522],{"class":1388},[1155,8883,5525],{"class":1382},[1155,8885,5528],{"class":1625},[1155,8887,1629],{"class":1382},[1155,8889,1556],{"class":1382},[1155,8891,5535],{"class":1382},[1155,8893,5538],{"class":1388},[1155,8895,5541],{"class":1382},[1155,8897,1407],{"class":1382},[1155,8899,5546],{"class":1165},[1155,8901,1407],{"class":1382},[1155,8903,1769],{"class":1382},[1155,8905,1556],{"class":1382},[1155,8907,1603],{"class":1382},[1155,8909,8911,8913,8915,8917,8920],{"class":8910,"line":2453},[1157,1607],[1155,8912,1619],{"class":1382},[1155,8914,1600],{"class":1388},[1155,8916,5563],{"class":1382},[1155,8918,8919],{"class":1625},"header",[1155,8921,1603],{"class":1382},[1155,8923,8925,8927,8930],{"class":8924,"line":2461},[1157,1607],[1155,8926,1643],{"class":1382},[1155,8928,8929],{"class":1388},"ChatsHistory",[1155,8931,1649],{"class":1382},[1155,8933,8935,8937,8939],{"class":8934,"line":3434},[1157,1607],[1155,8936,1654],{"class":1382},[1155,8938,1600],{"class":1388},[1155,8940,1603],{"class":1382},[1155,8942,8943,8945,8947,8949,8951],{"class":1157,"line":3449},[1155,8944,1619],{"class":1382},[1155,8946,1600],{"class":1388},[1155,8948,5563],{"class":1382},[1155,8950,5538],{"class":1625},[1155,8952,1603],{"class":1382},[1155,8954,8955,8957,8959,8961,8963,8965,8967,8969],{"class":1157,"line":3466},[1155,8956,1643],{"class":1382},[1155,8958,5574],{"class":1388},[1155,8960,5577],{"class":1625},[1155,8962,1629],{"class":1382},[1155,8964,1556],{"class":1382},[1155,8966,5584],{"class":1165},[1155,8968,1556],{"class":1382},[1155,8970,1603],{"class":1382},[1155,8972,8973,8975,8977,8979,8981,8983,8985,8987],{"class":1157,"line":3498},[1155,8974,5593],{"class":1382},[1155,8976,5596],{"class":1388},[1155,8978,5577],{"class":1625},[1155,8980,1629],{"class":1382},[1155,8982,1556],{"class":1382},[1155,8984,5605],{"class":1165},[1155,8986,1556],{"class":1382},[1155,8988,1603],{"class":1382},[1155,8990,8991],{"class":1157,"line":3511},[1155,8992,5614],{"class":1378},[1155,8994,8995,8997,8999],{"class":1157,"line":3516},[1155,8996,5619],{"class":1382},[1155,8998,5596],{"class":1388},[1155,9000,1603],{"class":1382},[1155,9002,9003],{"class":1157,"line":3522},[1155,9004,1447],{"emptyLinePlaceholder":21},[1155,9006,9007,9009],{"class":1157,"line":3553},[1155,9008,5593],{"class":1382},[1155,9010,5635],{"class":1388},[1155,9012,9013,9015,9017,9019,9021],{"class":1157,"line":3597},[1155,9014,5641],{"class":1625},[1155,9016,1629],{"class":1382},[1155,9018,1556],{"class":1382},[1155,9020,5289],{"class":1378},[1155,9022,5650],{"class":1382},[1155,9024,9025,9027,9029,9031,9033,9035,9037,9039,9041,9043,9045,9047,9049],{"class":1157,"line":3604},[1155,9026,5656],{"class":1382},[1155,9028,5659],{"class":1625},[1155,9030,1629],{"class":1382},[1155,9032,1556],{"class":1382},[1155,9034,5666],{"class":1378},[1155,9036,5669],{"class":1382},[1155,9038,1407],{"class":1382},[1155,9040,5674],{"class":1165},[1155,9042,1407],{"class":1382},[1155,9044,5679],{"class":1382},[1155,9046,1407],{"class":1382},[1155,9048,5684],{"class":1165},[1155,9050,5687],{"class":1382},[1155,9052,9053,9055,9057,9059,9061],{"class":1157,"line":3609},[1155,9054,5693],{"class":1625},[1155,9056,1629],{"class":1382},[1155,9058,1556],{"class":1382},[1155,9060,5700],{"class":1165},[1155,9062,5650],{"class":1382},[1155,9064,9065,9067,9069,9071,9073],{"class":1157,"line":3627},[1155,9066,5708],{"class":1625},[1155,9068,1629],{"class":1382},[1155,9070,1556],{"class":1382},[1155,9072,5715],{"class":1165},[1155,9074,5650],{"class":1382},[1155,9076,9077,9079,9081,9083,9085,9087],{"class":1157,"line":3666},[1155,9078,5723],{"class":1382},[1155,9080,5726],{"class":1625},[1155,9082,1629],{"class":1382},[1155,9084,1556],{"class":1382},[1155,9086,5733],{"class":1378},[1155,9088,5650],{"class":1382},[1155,9090,9091],{"class":1157,"line":3672},[1155,9092,5741],{"class":1382},[1155,9094,9095,9097,9099,9101,9103,9105,9107,9109],{"class":1157,"line":3677},[1155,9096,5747],{"class":1382},[1155,9098,5750],{"class":1388},[1155,9100,5753],{"class":1625},[1155,9102,1629],{"class":1382},[1155,9104,1556],{"class":1382},[1155,9106,5760],{"class":1165},[1155,9108,1556],{"class":1382},[1155,9110,1649],{"class":1382},[1155,9112,9113,9115,9117],{"class":1157,"line":3683},[1155,9114,5619],{"class":1382},[1155,9116,5172],{"class":1388},[1155,9118,1603],{"class":1382},[1155,9120,9121,9123,9125],{"class":1157,"line":3703},[1155,9122,5778],{"class":1382},[1155,9124,5574],{"class":1388},[1155,9126,1603],{"class":1382},[1155,9128,9129,9131,9133],{"class":1157,"line":3731},[1155,9130,1654],{"class":1382},[1155,9132,1600],{"class":1388},[1155,9134,1603],{"class":1382},[1155,9136,9137,9139,9141],{"class":1157,"line":3743},[1155,9138,1664],{"class":1382},[1155,9140,5522],{"class":1388},[1155,9142,1603],{"class":1382},[1155,9144,9145,9147,9149],{"class":1157,"line":3762},[1155,9146,1673],{"class":1382},[1155,9148,1600],{"class":1388},[1155,9150,1603],{"class":1382},[1049,9152,9154],{"id":9153},"integrating-history-in-the-chat-page","Integrating history in the chat page",[1355,9156,9157],{},[1732,9158,9159],{},[1146,9160,9163],{"className":1587,"code":9161,"filename":6239,"highlights":9162,"language":34,"meta":1151,"style":1151},"\u003Cscript setup lang=\"ts\">\nimport { DefaultChatTransport, isReasoningUIPart, isTextUIPart } from 'ai'\nimport { useChat } 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 useChat composable from AI SDK\nconst { messages, status, error, sendMessage, regenerate, stop } = useChat({\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    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    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=\"messages\"\n          :status=\"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                \u003CChatMarkdown\n                  :value=\"part.text\"\n                  :streaming=\"isPartStreaming(part)\"\n                \u002F>\n              \u003C\u002FUChatReasoning>\n\n              \u003Ctemplate v-else-if=\"isTextUIPart(part)\">\n                \u003CChatMarkdown\n                  v-if=\"message.role === 'assistant'\"\n                  :value=\"part.text\"\n                  :streaming=\"isPartStreaming(part)\"\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=\"error\"\n          variant=\"subtle\"\n          class=\"sticky bottom-0\"\n          @submit=\"handleSubmit\"\n        >\n          \u003CUChatPromptSubmit\n            :status=\"status\"\n            color=\"neutral\"\n            @stop=\"stop()\"\n            @reload=\"regenerate()\"\n          \u002F>\n        \u003C\u002FUChatPrompt>\n      \u003C\u002FUContainer>\n    \u003C\u002Ftemplate>\n  \u003C\u002FUDashboardPanel>\n\u003C\u002Ftemplate>\n",[4025,4032,4037],[1105,9164,9165,9185,9211,9229,9247,9251,9263,9275,9279,9283,9325,9329,9345,9385,9389,9393,9409,9413,9417,9455,9473,9491,9505,9529,9537,9549,9553,9577,9591,9595,9599,9611,9623,9637,9651,9663,9669,9673,9679,9683,9701,9711,9731,9753,9765,9769,9773,9777,9781,9793,9821,9827,9831,9837,9845,9849,9857,9889,9901,9909,9917,9929,9948,9955,9970,9984,9988,10000,10004,10028,10094,10100,10118,10136,10156,10160,10166,10184,10204,10208,10216,10220,10240,10246,10268,10286,10306,10310,10338,10342,10350,10358,10366,10374,10382,10386,10392,10404,10418,10430,10442,10456,10460,10466,10480,10492,10508,10524,10528,10536,10544,10552,10560],{"__ignoreMap":1151},[1155,9166,9167,9169,9171,9173,9175,9177,9179,9181,9183],{"class":1157,"line":1158},[1155,9168,1597],{"class":1382},[1155,9170,5207],{"class":1388},[1155,9172,5210],{"class":1625},[1155,9174,5213],{"class":1625},[1155,9176,1629],{"class":1382},[1155,9178,1556],{"class":1382},[1155,9180,1361],{"class":1165},[1155,9182,1556],{"class":1382},[1155,9184,1603],{"class":1382},[1155,9186,9187,9189,9191,9193,9195,9197,9199,9201,9203,9205,9207,9209],{"class":1157,"line":1175},[1155,9188,1744],{"class":1368},[1155,9190,1747],{"class":1382},[1155,9192,6272],{"class":1378},[1155,9194,1753],{"class":1382},[1155,9196,6277],{"class":1378},[1155,9198,1753],{"class":1382},[1155,9200,6282],{"class":1378},[1155,9202,1769],{"class":1382},[1155,9204,1772],{"class":1368},[1155,9206,1469],{"class":1382},[1155,9208,2576],{"class":1165},[1155,9210,1433],{"class":1382},[1155,9212,9213,9215,9217,9219,9221,9223,9225,9227],{"class":1157,"line":1398},[1155,9214,1744],{"class":1368},[1155,9216,1747],{"class":1382},[1155,9218,6302],{"class":1378},[1155,9220,1769],{"class":1382},[1155,9222,1772],{"class":1368},[1155,9224,1469],{"class":1382},[1155,9226,6311],{"class":1165},[1155,9228,1433],{"class":1382},[1155,9230,9231,9233,9235,9237,9239,9241,9243,9245],{"class":1157,"line":1413},[1155,9232,1744],{"class":1368},[1155,9234,1747],{"class":1382},[1155,9236,6323],{"class":1378},[1155,9238,1769],{"class":1382},[1155,9240,1772],{"class":1368},[1155,9242,1469],{"class":1382},[1155,9244,6332],{"class":1165},[1155,9246,1433],{"class":1382},[1155,9248,9249],{"class":1157,"line":1425},[1155,9250,1447],{"emptyLinePlaceholder":21},[1155,9252,9253,9255,9257,9259,9261],{"class":1157,"line":1436},[1155,9254,3111],{"class":1625},[1155,9256,6345],{"class":1378},[1155,9258,1629],{"class":1382},[1155,9260,6350],{"class":1178},[1155,9262,2711],{"class":1378},[1155,9264,9265,9267,9269,9271,9273],{"class":1157,"line":1444},[1155,9266,3111],{"class":1625},[1155,9268,6359],{"class":1378},[1155,9270,1629],{"class":1382},[1155,9272,6364],{"class":1178},[1155,9274,2711],{"class":1378},[1155,9276,9277],{"class":1157,"line":1450},[1155,9278,1447],{"emptyLinePlaceholder":21},[1155,9280,9281],{"class":1157,"line":1461},[1155,9282,6375],{"class":2733},[1155,9284,9285,9287,9289,9291,9293,9295,9297,9299,9301,9303,9305,9307,9309,9311,9313,9315,9317,9319,9321,9323],{"class":1157,"line":1477},[1155,9286,3111],{"class":1625},[1155,9288,1747],{"class":1382},[1155,9290,6384],{"class":1388},[1155,9292,1392],{"class":1382},[1155,9294,6389],{"class":1378},[1155,9296,1514],{"class":1382},[1155,9298,2665],{"class":1382},[1155,9300,2668],{"class":1368},[1155,9302,6398],{"class":1178},[1155,9304,1379],{"class":1378},[1155,9306,3757],{"class":1382},[1155,9308,6405],{"class":1165},[1155,9310,5479],{"class":1382},[1155,9312,6410],{"class":1378},[1155,9314,1845],{"class":1382},[1155,9316,6415],{"class":1378},[1155,9318,1845],{"class":1382},[1155,9320,2056],{"class":1378},[1155,9322,5488],{"class":1382},[1155,9324,1517],{"class":1378},[1155,9326,9327],{"class":1157,"line":1483},[1155,9328,1447],{"emptyLinePlaceholder":21},[1155,9330,9331,9333,9335,9337,9339,9341,9343],{"class":1157,"line":1488},[1155,9332,6432],{"class":1368},[1155,9334,1988],{"class":1378},[1155,9336,3617],{"class":1382},[1155,9338,6439],{"class":1378},[1155,9340,1845],{"class":1382},[1155,9342,6444],{"class":1378},[1155,9344,1383],{"class":1382},[1155,9346,9347,9349,9351,9353,9355,9357,9359,9361,9363,9365,9367,9369,9371,9373,9375,9377,9379,9381,9383],{"class":1157,"line":1511},[1155,9348,6451],{"class":1368},[1155,9350,2942],{"class":1178},[1155,9352,1379],{"class":1388},[1155,9354,1902],{"class":1382},[1155,9356,3639],{"class":1388},[1155,9358,1392],{"class":1382},[1155,9360,3645],{"class":3644},[1155,9362,1753],{"class":1382},[1155,9364,3650],{"class":1388},[1155,9366,1392],{"class":1382},[1155,9368,1469],{"class":1382},[1155,9370,3657],{"class":1165},[1155,9372,1407],{"class":1382},[1155,9374,1753],{"class":1382},[1155,9376,6480],{"class":1388},[1155,9378,1392],{"class":1382},[1155,9380,4250],{"class":4249},[1155,9382,1769],{"class":1382},[1155,9384,1517],{"class":1388},[1155,9386,9387],{"class":1157,"line":2016},[1155,9388,5495],{"class":1382},[1155,9390,9391],{"class":1157,"line":2043},[1155,9392,1447],{"emptyLinePlaceholder":21},[1155,9394,9395,9397,9399,9401,9403,9405,9407],{"class":1157,"line":2089},[1155,9396,3111],{"class":1625},[1155,9398,5230],{"class":1378},[1155,9400,1629],{"class":1382},[1155,9402,5235],{"class":1178},[1155,9404,1379],{"class":1378},[1155,9406,5240],{"class":1382},[1155,9408,1517],{"class":1378},[1155,9410,9411],{"class":1157,"line":2156},[1155,9412,1447],{"emptyLinePlaceholder":21},[1155,9414,9415],{"class":1157,"line":2226},[1155,9416,6521],{"class":2733},[1155,9418,9419,9421,9423,9425,9427,9429,9431,9433,9435,9437,9439,9441,9443,9445,9447,9449,9451,9453],{"class":1157,"line":2266},[1155,9420,3111],{"class":1625},[1155,9422,1747],{"class":1382},[1155,9424,3347],{"class":1378},[1155,9426,1753],{"class":1382},[1155,9428,6535],{"class":1378},[1155,9430,1753],{"class":1382},[1155,9432,6540],{"class":1378},[1155,9434,1753],{"class":1382},[1155,9436,6545],{"class":1378},[1155,9438,1753],{"class":1382},[1155,9440,6550],{"class":1378},[1155,9442,1753],{"class":1382},[1155,9444,6555],{"class":1378},[1155,9446,1514],{"class":1382},[1155,9448,2665],{"class":1382},[1155,9450,6302],{"class":1178},[1155,9452,1379],{"class":1378},[1155,9454,1383],{"class":1382},[1155,9456,9457,9459,9461,9463,9465,9467,9469,9471],{"class":1157,"line":2317},[1155,9458,1835],{"class":1388},[1155,9460,1392],{"class":1382},[1155,9462,6575],{"class":1378},[1155,9464,1845],{"class":1382},[1155,9466,3396],{"class":1378},[1155,9468,1845],{"class":1382},[1155,9470,2056],{"class":1378},[1155,9472,1410],{"class":1382},[1155,9474,9475,9477,9479,9481,9483,9485,9487,9489],{"class":1157,"line":2330},[1155,9476,1995],{"class":1388},[1155,9478,1392],{"class":1382},[1155,9480,6575],{"class":1378},[1155,9482,1845],{"class":1382},[1155,9484,3396],{"class":1378},[1155,9486,1845],{"class":1382},[1155,9488,2034],{"class":1378},[1155,9490,1410],{"class":1382},[1155,9492,9493,9495,9497,9499,9501,9503],{"class":1157,"line":2360},[1155,9494,6610],{"class":1388},[1155,9496,1392],{"class":1382},[1155,9498,1939],{"class":1382},[1155,9500,6272],{"class":1178},[1155,9502,1379],{"class":1378},[1155,9504,1383],{"class":1382},[1155,9506,9507,9509,9511,9513,9515,9517,9519,9521,9523,9525,9527],{"class":1157,"line":2366},[1155,9508,6626],{"class":1388},[1155,9510,1392],{"class":1382},[1155,9512,3751],{"class":1382},[1155,9514,6405],{"class":1165},[1155,9516,5479],{"class":1382},[1155,9518,6439],{"class":1378},[1155,9520,1845],{"class":1382},[1155,9522,3396],{"class":1378},[1155,9524,1845],{"class":1382},[1155,9526,2056],{"class":1378},[1155,9528,6647],{"class":1382},[1155,9530,9531,9533,9535],{"class":1157,"line":2371},[1155,9532,2456],{"class":1382},[1155,9534,1919],{"class":1378},[1155,9536,1410],{"class":1382},[1155,9538,9539,9541,9543,9545,9547],{"class":1157,"line":2403},[1155,9540,6662],{"class":1388},[1155,9542,1379],{"class":1382},[1155,9544,6667],{"class":1979},[1155,9546,1919],{"class":1382},[1155,9548,1458],{"class":1382},[1155,9550,9551],{"class":1157,"line":2419},[1155,9552,6677],{"class":2733},[1155,9554,9555,9557,9559,9561,9563,9565,9567,9569,9571,9573,9575],{"class":1157,"line":2437},[1155,9556,6683],{"class":1368},[1155,9558,1988],{"class":1388},[1155,9560,6667],{"class":1378},[1155,9562,1845],{"class":1382},[1155,9564,6692],{"class":1378},[1155,9566,3423],{"class":1382},[1155,9568,1469],{"class":1382},[1155,9570,4397],{"class":1165},[1155,9572,1407],{"class":1382},[1155,9574,3622],{"class":1388},[1155,9576,1383],{"class":1382},[1155,9578,9579,9581,9583,9585,9587,9589],{"class":1157,"line":2453},[1155,9580,6710],{"class":1178},[1155,9582,1379],{"class":1388},[1155,9584,1407],{"class":1382},[1155,9586,1824],{"class":1165},[1155,9588,1407],{"class":1382},[1155,9590,1517],{"class":1388},[1155,9592,9593],{"class":1157,"line":2461},[1155,9594,4644],{"class":1382},[1155,9596,9597],{"class":1157,"line":3434},[1155,9598,1480],{"class":1382},[1155,9600,9601,9603,9605,9607,9609],{"class":1157,"line":3449},[1155,9602,6736],{"class":1388},[1155,9604,1379],{"class":1382},[1155,9606,6741],{"class":1979},[1155,9608,1919],{"class":1382},[1155,9610,1458],{"class":1382},[1155,9612,9613,9615,9617,9619,9621],{"class":1157,"line":3466},[1155,9614,6751],{"class":1378},[1155,9616,1845],{"class":1382},[1155,9618,6756],{"class":1178},[1155,9620,1379],{"class":1388},[1155,9622,1383],{"class":1382},[1155,9624,9625,9627,9629,9631,9633,9635],{"class":1157,"line":3498},[1155,9626,6766],{"class":1388},[1155,9628,1392],{"class":1382},[1155,9630,1469],{"class":1382},[1155,9632,500],{"class":1165},[1155,9634,1407],{"class":1382},[1155,9636,1410],{"class":1382},[1155,9638,9639,9641,9643,9645,9647,9649],{"class":1157,"line":3511},[1155,9640,6782],{"class":1388},[1155,9642,1392],{"class":1382},[1155,9644,6540],{"class":1378},[1155,9646,1845],{"class":1382},[1155,9648,4561],{"class":1378},[1155,9650,1410],{"class":1382},[1155,9652,9653,9655,9657,9659,9661],{"class":1157,"line":3516},[1155,9654,6798],{"class":1388},[1155,9656,1392],{"class":1382},[1155,9658,1469],{"class":1382},[1155,9660,6741],{"class":1165},[1155,9662,1433],{"class":1382},[1155,9664,9665,9667],{"class":1157,"line":3522},[1155,9666,3452],{"class":1382},[1155,9668,1517],{"class":1388},[1155,9670,9671],{"class":1157,"line":3553},[1155,9672,3669],{"class":1382},[1155,9674,9675,9677],{"class":1157,"line":3597},[1155,9676,1514],{"class":1382},[1155,9678,1517],{"class":1378},[1155,9680,9681],{"class":1157,"line":3604},[1155,9682,1447],{"emptyLinePlaceholder":21},[1155,9684,9685,9687,9689,9691,9693,9695,9697,9699],{"class":1157,"line":3609},[1155,9686,6834],{"class":1625},[1155,9688,6837],{"class":1178},[1155,9690,1379],{"class":1382},[1155,9692,6842],{"class":1979},[1155,9694,1392],{"class":1382},[1155,9696,6847],{"class":1161},[1155,9698,1919],{"class":1382},[1155,9700,1458],{"class":1382},[1155,9702,9703,9705,9707,9709],{"class":1157,"line":3627},[1155,9704,6856],{"class":1378},[1155,9706,1845],{"class":1382},[1155,9708,6861],{"class":1178},[1155,9710,2711],{"class":1388},[1155,9712,9713,9715,9717,9719,9721,9723,9725,9727,9729],{"class":1157,"line":3666},[1155,9714,3612],{"class":1368},[1155,9716,1988],{"class":1388},[1155,9718,5289],{"class":1378},[1155,9720,1845],{"class":1382},[1155,9722,3396],{"class":1378},[1155,9724,1845],{"class":1382},[1155,9726,5298],{"class":1178},[1155,9728,5301],{"class":1388},[1155,9730,1383],{"class":1382},[1155,9732,9733,9735,9737,9739,9741,9743,9745,9747,9749,9751],{"class":1157,"line":3672},[1155,9734,6888],{"class":1178},[1155,9736,1379],{"class":1388},[1155,9738,1902],{"class":1382},[1155,9740,1756],{"class":1388},[1155,9742,1392],{"class":1382},[1155,9744,5433],{"class":1378},[1155,9746,1845],{"class":1382},[1155,9748,3396],{"class":1378},[1155,9750,1769],{"class":1382},[1155,9752,1517],{"class":1388},[1155,9754,9755,9757,9759,9761,9763],{"class":1157,"line":3677},[1155,9756,6911],{"class":1378},[1155,9758,1845],{"class":1382},[1155,9760,3396],{"class":1378},[1155,9762,2665],{"class":1382},[1155,9764,6920],{"class":1382},[1155,9766,9767],{"class":1157,"line":3683},[1155,9768,3669],{"class":1382},[1155,9770,9771],{"class":1157,"line":3703},[1155,9772,5495],{"class":1382},[1155,9774,9775],{"class":1157,"line":3731},[1155,9776,1447],{"emptyLinePlaceholder":21},[1155,9778,9779],{"class":1157,"line":3743},[1155,9780,6937],{"class":2733},[1155,9782,9783,9785,9787,9789,9791],{"class":1157,"line":3762},[1155,9784,6942],{"class":1178},[1155,9786,1379],{"class":1378},[1155,9788,1842],{"class":1382},[1155,9790,1862],{"class":1625},[1155,9792,1458],{"class":1382},[1155,9794,9795,9797,9799,9801,9803,9805,9807,9809,9811,9813,9815,9817,9819],{"class":1157,"line":3790},[1155,9796,3612],{"class":1368},[1155,9798,1988],{"class":1388},[1155,9800,6439],{"class":1378},[1155,9802,1845],{"class":1382},[1155,9804,3396],{"class":1378},[1155,9806,3923],{"class":1382},[1155,9808,2034],{"class":1378},[1155,9810,1845],{"class":1382},[1155,9812,3902],{"class":1378},[1155,9814,3423],{"class":1382},[1155,9816,3908],{"class":3644},[1155,9818,3622],{"class":1388},[1155,9820,1383],{"class":1382},[1155,9822,9823,9825],{"class":1157,"line":3797},[1155,9824,6983],{"class":1178},[1155,9826,2711],{"class":1388},[1155,9828,9829],{"class":1157,"line":3802},[1155,9830,3669],{"class":1382},[1155,9832,9833,9835],{"class":1157,"line":3868},[1155,9834,1514],{"class":1382},[1155,9836,1517],{"class":1378},[1155,9838,9839,9841,9843],{"class":1157,"line":3873},[1155,9840,1673],{"class":1382},[1155,9842,5207],{"class":1388},[1155,9844,1603],{"class":1382},[1155,9846,9847],{"class":1157,"line":3878},[1155,9848,1447],{"emptyLinePlaceholder":21},[1155,9850,9851,9853,9855],{"class":1157,"line":3884},[1155,9852,1597],{"class":1382},[1155,9854,1600],{"class":1388},[1155,9856,1603],{"class":1382},[1155,9858,9859,9861,9863,9865,9867,9869,9871,9873,9875,9877,9879,9881,9883,9885,9887],{"class":1157,"line":3913},[1155,9860,1610],{"class":1382},[1155,9862,5522],{"class":1388},[1155,9864,5525],{"class":1382},[1155,9866,5528],{"class":1625},[1155,9868,1629],{"class":1382},[1155,9870,1556],{"class":1382},[1155,9872,5535],{"class":1382},[1155,9874,5538],{"class":1388},[1155,9876,5541],{"class":1382},[1155,9878,1407],{"class":1382},[1155,9880,5546],{"class":1165},[1155,9882,1407],{"class":1382},[1155,9884,1769],{"class":1382},[1155,9886,1556],{"class":1382},[1155,9888,1603],{"class":1382},[1155,9890,9891,9893,9895,9897,9899],{"class":1157,"line":3954},[1155,9892,1619],{"class":1382},[1155,9894,1600],{"class":1388},[1155,9896,5563],{"class":1382},[1155,9898,8919],{"class":1625},[1155,9900,1603],{"class":1382},[1155,9902,9903,9905,9907],{"class":1157,"line":3983},[1155,9904,1643],{"class":1382},[1155,9906,8929],{"class":1388},[1155,9908,1649],{"class":1382},[1155,9910,9911,9913,9915],{"class":1157,"line":3995},[1155,9912,1654],{"class":1382},[1155,9914,1600],{"class":1388},[1155,9916,1603],{"class":1382},[1155,9918,9919,9921,9923,9925,9927],{"class":1157,"line":4011},[1155,9920,1619],{"class":1382},[1155,9922,1600],{"class":1388},[1155,9924,5563],{"class":1382},[1155,9926,5538],{"class":1625},[1155,9928,1603],{"class":1382},[1155,9930,9932,9934,9936,9938,9940,9942,9944,9946],{"class":9931,"line":4025},[1157,1607],[1155,9933,1643],{"class":1382},[1155,9935,5574],{"class":1388},[1155,9937,5577],{"class":1625},[1155,9939,1629],{"class":1382},[1155,9941,1556],{"class":1382},[1155,9943,7074],{"class":1165},[1155,9945,1556],{"class":1382},[1155,9947,1603],{"class":1382},[1155,9949,9951,9953],{"class":9950,"line":4032},[1157,1607],[1155,9952,5593],{"class":1382},[1155,9954,7085],{"class":1388},[1155,9956,9958,9960,9962,9964,9966,9968],{"class":9957,"line":4037},[1157,1607],[1155,9959,5656],{"class":1382},[1155,9961,2034],{"class":1625},[1155,9963,1629],{"class":1382},[1155,9965,1556],{"class":1382},[1155,9967,2034],{"class":1378},[1155,9969,5650],{"class":1382},[1155,9971,9972,9974,9976,9978,9980,9982],{"class":1157,"line":4042},[1155,9973,5656],{"class":1382},[1155,9975,5659],{"class":1625},[1155,9977,1629],{"class":1382},[1155,9979,1556],{"class":1382},[1155,9981,5659],{"class":1378},[1155,9983,5650],{"class":1382},[1155,9985,9986],{"class":1157,"line":4048},[1155,9987,7118],{"class":1625},[1155,9989,9990,9992,9994,9996,9998],{"class":1157,"line":4065},[1155,9991,7123],{"class":1625},[1155,9993,1629],{"class":1382},[1155,9995,1556],{"class":1382},[1155,9997,7130],{"class":1165},[1155,9999,5650],{"class":1382},[1155,10001,10002],{"class":1157,"line":4087},[1155,10003,5741],{"class":1382},[1155,10005,10006,10008,10010,10012,10014,10016,10018,10020,10022,10024,10026],{"class":1157,"line":4105},[1155,10007,5747],{"class":1382},[1155,10009,1600],{"class":1388},[1155,10011,5563],{"class":1382},[1155,10013,374],{"class":1625},[1155,10015,1629],{"class":1382},[1155,10017,1556],{"class":1382},[1155,10019,1902],{"class":1382},[1155,10021,7155],{"class":1378},[1155,10023,1514],{"class":1382},[1155,10025,1556],{"class":1382},[1155,10027,1603],{"class":1382},[1155,10029,10030,10032,10034,10036,10038,10040,10042,10044,10046,10048,10050,10052,10054,10056,10058,10060,10062,10064,10066,10068,10070,10072,10074,10076,10078,10080,10082,10084,10086,10088,10090,10092],{"class":1157,"line":4113},[1155,10031,7166],{"class":1382},[1155,10033,1600],{"class":1388},[1155,10035,7171],{"class":1368},[1155,10037,1629],{"class":1382},[1155,10039,1556],{"class":1382},[1155,10041,7178],{"class":1378},[1155,10043,1753],{"class":1382},[1155,10045,7183],{"class":1378},[1155,10047,7186],{"class":1382},[1155,10049,2660],{"class":1378},[1155,10051,1845],{"class":1382},[1155,10053,2240],{"class":1378},[1155,10055,1556],{"class":1382},[1155,10057,5525],{"class":1382},[1155,10059,7199],{"class":1625},[1155,10061,1629],{"class":1382},[1155,10063,7204],{"class":1382},[1155,10065,4561],{"class":1378},[1155,10067,1845],{"class":1382},[1155,10069,2056],{"class":1378},[1155,10071,1514],{"class":1382},[1155,10073,7215],{"class":1165},[1155,10075,5479],{"class":1382},[1155,10077,7220],{"class":1378},[1155,10079,1845],{"class":1382},[1155,10081,6692],{"class":1378},[1155,10083,1514],{"class":1382},[1155,10085,7215],{"class":1165},[1155,10087,5479],{"class":1382},[1155,10089,7233],{"class":1378},[1155,10091,7236],{"class":1382},[1155,10093,1603],{"class":1382},[1155,10095,10096,10098],{"class":1157,"line":4130},[1155,10097,7243],{"class":1382},[1155,10099,7246],{"class":1388},[1155,10101,10102,10104,10106,10108,10110,10112,10114,10116],{"class":1157,"line":4151},[1155,10103,7251],{"class":1368},[1155,10105,1629],{"class":1382},[1155,10107,1556],{"class":1382},[1155,10109,7258],{"class":1178},[1155,10111,1379],{"class":1382},[1155,10113,7220],{"class":1378},[1155,10115,1919],{"class":1382},[1155,10117,5650],{"class":1382},[1155,10119,10120,10122,10124,10126,10128,10130,10132,10134],{"class":1157,"line":4161},[1155,10121,7271],{"class":1382},[1155,10123,5422],{"class":1625},[1155,10125,1629],{"class":1382},[1155,10127,1556],{"class":1382},[1155,10129,7220],{"class":1378},[1155,10131,1845],{"class":1382},[1155,10133,5422],{"class":1378},[1155,10135,5650],{"class":1382},[1155,10137,10138,10140,10142,10144,10146,10148,10150,10152,10154],{"class":1157,"line":4171},[1155,10139,7271],{"class":1382},[1155,10141,5674],{"class":1625},[1155,10143,1629],{"class":1382},[1155,10145,1556],{"class":1382},[1155,10147,7298],{"class":1178},[1155,10149,1379],{"class":1382},[1155,10151,7220],{"class":1378},[1155,10153,1919],{"class":1382},[1155,10155,5650],{"class":1382},[1155,10157,10158],{"class":1157,"line":4181},[1155,10159,7311],{"class":1382},[1155,10161,10162,10164],{"class":1157,"line":4198},[1155,10163,7316],{"class":1382},[1155,10165,7319],{"class":1388},[1155,10167,10168,10170,10172,10174,10176,10178,10180,10182],{"class":1157,"line":4209},[1155,10169,7324],{"class":1382},[1155,10171,3396],{"class":1625},[1155,10173,1629],{"class":1382},[1155,10175,1556],{"class":1382},[1155,10177,7220],{"class":1378},[1155,10179,1845],{"class":1382},[1155,10181,5422],{"class":1378},[1155,10183,5650],{"class":1382},[1155,10185,10186,10188,10190,10192,10194,10196,10198,10200,10202],{"class":1157,"line":4215},[1155,10187,7324],{"class":1382},[1155,10189,5674],{"class":1625},[1155,10191,1629],{"class":1382},[1155,10193,1556],{"class":1382},[1155,10195,7298],{"class":1178},[1155,10197,1379],{"class":1382},[1155,10199,7220],{"class":1378},[1155,10201,1919],{"class":1382},[1155,10203,5650],{"class":1382},[1155,10205,10206],{"class":1157,"line":4221},[1155,10207,7363],{"class":1382},[1155,10209,10210,10212,10214],{"class":1157,"line":4231},[1155,10211,7368],{"class":1382},[1155,10213,7371],{"class":1388},[1155,10215,1603],{"class":1382},[1155,10217,10218],{"class":1157,"line":4241},[1155,10219,1447],{"emptyLinePlaceholder":21},[1155,10221,10222,10224,10226,10228,10230,10232,10234,10236,10238],{"class":1157,"line":4255},[1155,10223,7243],{"class":1382},[1155,10225,1600],{"class":1388},[1155,10227,7386],{"class":1368},[1155,10229,1629],{"class":1382},[1155,10231,1556],{"class":1382},[1155,10233,7393],{"class":1178},[1155,10235,7396],{"class":1378},[1155,10237,1556],{"class":1382},[1155,10239,1603],{"class":1382},[1155,10241,10242,10244],{"class":1157,"line":4270},[1155,10243,7316],{"class":1382},[1155,10245,7319],{"class":1388},[1155,10247,10248,10250,10252,10254,10256,10258,10260,10262,10264,10266],{"class":1157,"line":4275},[1155,10249,7411],{"class":1368},[1155,10251,1629],{"class":1382},[1155,10253,1556],{"class":1382},[1155,10255,4561],{"class":1378},[1155,10257,1845],{"class":1382},[1155,10259,2170],{"class":1378},[1155,10261,7424],{"class":1382},[1155,10263,1407],{"class":1382},[1155,10265,2197],{"class":1165},[1155,10267,5687],{"class":1382},[1155,10269,10270,10272,10274,10276,10278,10280,10282,10284],{"class":1157,"line":4280},[1155,10271,7324],{"class":1382},[1155,10273,3396],{"class":1625},[1155,10275,1629],{"class":1382},[1155,10277,1556],{"class":1382},[1155,10279,7220],{"class":1378},[1155,10281,1845],{"class":1382},[1155,10283,5422],{"class":1378},[1155,10285,5650],{"class":1382},[1155,10287,10288,10290,10292,10294,10296,10298,10300,10302,10304],{"class":1157,"line":4290},[1155,10289,7324],{"class":1382},[1155,10291,5674],{"class":1625},[1155,10293,1629],{"class":1382},[1155,10295,1556],{"class":1382},[1155,10297,7298],{"class":1178},[1155,10299,1379],{"class":1382},[1155,10301,7220],{"class":1378},[1155,10303,1919],{"class":1382},[1155,10305,5650],{"class":1382},[1155,10307,10308],{"class":1157,"line":4306},[1155,10309,7363],{"class":1382},[1155,10311,10312,10314,10316,10318,10320,10322,10324,10326,10328,10330,10332,10334,10336],{"class":1157,"line":4321},[1155,10313,7316],{"class":1382},[1155,10315,1045],{"class":1388},[1155,10317,7386],{"class":1625},[1155,10319,1629],{"class":1382},[1155,10321,1556],{"class":1382},[1155,10323,7487],{"class":1165},[1155,10325,1556],{"class":1382},[1155,10327,5577],{"class":1625},[1155,10329,1629],{"class":1382},[1155,10331,1556],{"class":1382},[1155,10333,7498],{"class":1165},[1155,10335,1556],{"class":1382},[1155,10337,1603],{"class":1382},[1155,10339,10340],{"class":1157,"line":4327},[1155,10341,7507],{"class":1378},[1155,10343,10344,10346,10348],{"class":1157,"line":4333},[1155,10345,7512],{"class":1382},[1155,10347,1045],{"class":1388},[1155,10349,1603],{"class":1382},[1155,10351,10352,10354,10356],{"class":1157,"line":4341},[1155,10353,7368],{"class":1382},[1155,10355,1600],{"class":1388},[1155,10357,1603],{"class":1382},[1155,10359,10360,10362,10364],{"class":1157,"line":4346},[1155,10361,7529],{"class":1382},[1155,10363,1600],{"class":1388},[1155,10365,1603],{"class":1382},[1155,10367,10368,10370,10372],{"class":1157,"line":4352},[1155,10369,7538],{"class":1382},[1155,10371,1600],{"class":1388},[1155,10373,1603],{"class":1382},[1155,10375,10376,10378,10380],{"class":1157,"line":4372},[1155,10377,5619],{"class":1382},[1155,10379,5178],{"class":1388},[1155,10381,1603],{"class":1382},[1155,10383,10384],{"class":1157,"line":4387},[1155,10385,1447],{"emptyLinePlaceholder":21},[1155,10387,10388,10390],{"class":1157,"line":4404},[1155,10389,5593],{"class":1382},[1155,10391,5635],{"class":1388},[1155,10393,10394,10396,10398,10400,10402],{"class":1157,"line":4427},[1155,10395,5641],{"class":1625},[1155,10397,1629],{"class":1382},[1155,10399,1556],{"class":1382},[1155,10401,5289],{"class":1378},[1155,10403,5650],{"class":1382},[1155,10405,10406,10408,10410,10412,10414,10416],{"class":1157,"line":4438},[1155,10407,5656],{"class":1382},[1155,10409,6741],{"class":1625},[1155,10411,1629],{"class":1382},[1155,10413,1556],{"class":1382},[1155,10415,6741],{"class":1378},[1155,10417,5650],{"class":1382},[1155,10419,10420,10422,10424,10426,10428],{"class":1157,"line":4446},[1155,10421,5693],{"class":1625},[1155,10423,1629],{"class":1382},[1155,10425,1556],{"class":1382},[1155,10427,5700],{"class":1165},[1155,10429,5650],{"class":1382},[1155,10431,10432,10434,10436,10438,10440],{"class":1157,"line":4452},[1155,10433,7123],{"class":1625},[1155,10435,1629],{"class":1382},[1155,10437,1556],{"class":1382},[1155,10439,7609],{"class":1165},[1155,10441,5650],{"class":1382},[1155,10443,10444,10446,10448,10450,10452,10454],{"class":1157,"line":4457},[1155,10445,5723],{"class":1382},[1155,10447,5726],{"class":1625},[1155,10449,1629],{"class":1382},[1155,10451,1556],{"class":1382},[1155,10453,7624],{"class":1378},[1155,10455,5650],{"class":1382},[1155,10457,10458],{"class":1157,"line":4492},[1155,10459,5741],{"class":1382},[1155,10461,10462,10464],{"class":1157,"line":4498},[1155,10463,5747],{"class":1382},[1155,10465,7637],{"class":1388},[1155,10467,10468,10470,10472,10474,10476,10478],{"class":1157,"line":4518},[1155,10469,7642],{"class":1382},[1155,10471,5659],{"class":1625},[1155,10473,1629],{"class":1382},[1155,10475,1556],{"class":1382},[1155,10477,5659],{"class":1378},[1155,10479,5650],{"class":1382},[1155,10481,10482,10484,10486,10488,10490],{"class":1157,"line":4524},[1155,10483,7657],{"class":1625},[1155,10485,1629],{"class":1382},[1155,10487,1556],{"class":1382},[1155,10489,5760],{"class":1165},[1155,10491,5650],{"class":1382},[1155,10493,10494,10496,10498,10500,10502,10504,10506],{"class":1157,"line":4570},[1155,10495,7670],{"class":1382},[1155,10497,7673],{"class":1625},[1155,10499,1629],{"class":1382},[1155,10501,1556],{"class":1382},[1155,10503,7673],{"class":1178},[1155,10505,1842],{"class":1382},[1155,10507,5650],{"class":1382},[1155,10509,10510,10512,10514,10516,10518,10520,10522],{"class":1157,"line":4586},[1155,10511,7670],{"class":1382},[1155,10513,7690],{"class":1625},[1155,10515,1629],{"class":1382},[1155,10517,1556],{"class":1382},[1155,10519,7697],{"class":1178},[1155,10521,1842],{"class":1382},[1155,10523,5650],{"class":1382},[1155,10525,10526],{"class":1157,"line":4619},[1155,10527,7706],{"class":1382},[1155,10529,10530,10532,10534],{"class":1157,"line":4633},[1155,10531,5619],{"class":1382},[1155,10533,5172],{"class":1388},[1155,10535,1603],{"class":1382},[1155,10537,10538,10540,10542],{"class":1157,"line":4641},[1155,10539,5778],{"class":1382},[1155,10541,5574],{"class":1388},[1155,10543,1603],{"class":1382},[1155,10545,10546,10548,10550],{"class":1157,"line":4647},[1155,10547,1654],{"class":1382},[1155,10549,1600],{"class":1388},[1155,10551,1603],{"class":1382},[1155,10553,10554,10556,10558],{"class":1157,"line":4654},[1155,10555,1664],{"class":1382},[1155,10557,5522],{"class":1388},[1155,10559,1603],{"class":1382},[1155,10561,10562,10564,10566],{"class":1157,"line":4659},[1155,10563,1673],{"class":1382},[1155,10565,1600],{"class":1388},[1155,10567,1603],{"class":1382},[1045,10569,4720,10570,10573,10574,10576],{},[1105,10571,10572],{},"refreshNuxtData('chats')"," call in the chat page's ",[1105,10575,7811],{}," callback (as shown earlier) ensures the chat list updates automatically when a new title is generated.",[1049,10578,10580],{"id":10579},"adding-multi-model-support","Adding multi-model support",[1045,10582,10583,10584,10587],{},"One of the benefits of using ",[1099,10585,4689],{"href":1134,"rel":10586},[1103]," is the ability to switch between models seamlessly. This section adds a model selector to the chat.",[1183,10589,10591],{"id":10590},"creating-a-models-composable","Creating a models composable",[1045,10593,10594,10595,1392],{},"Define the available models and persist the user's selection using ",[1099,10596,10599],{"href":10597,"rel":10598},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-cookie",[1103],[1105,10600,10601],{},"useCookie",[1355,10603,10604],{},[1146,10605,10608],{"className":1359,"code":10606,"filename":10607,"language":1361,"meta":1151,"style":1151},"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",[1105,10609,10610,10623,10634,10680,10724,10768,10773,10777,10807,10824,10830,10834,10840,10847,10852,10856],{"__ignoreMap":1151},[1155,10611,10612,10614,10616,10619,10621],{"class":1157,"line":1158},[1155,10613,1369],{"class":1368},[1155,10615,5271],{"class":1625},[1155,10617,10618],{"class":1178}," useModels",[1155,10620,1842],{"class":1382},[1155,10622,1458],{"class":1382},[1155,10624,10625,10627,10630,10632],{"class":1157,"line":1175},[1155,10626,2655],{"class":1625},[1155,10628,10629],{"class":1378}," models",[1155,10631,2665],{"class":1382},[1155,10633,1395],{"class":1388},[1155,10635,10636,10639,10641,10643,10645,10647,10649,10651,10653,10655,10657,10659,10661,10663,10666,10668,10670,10676,10678],{"class":1157,"line":1398},[1155,10637,10638],{"class":1382},"    {",[1155,10640,3160],{"class":1388},[1155,10642,1392],{"class":1382},[1155,10644,1469],{"class":1382},[1155,10646,3167],{"class":1165},[1155,10648,1407],{"class":1382},[1155,10650,1753],{"class":1382},[1155,10652,3146],{"class":1388},[1155,10654,1392],{"class":1382},[1155,10656,1469],{"class":1382},[1155,10658,3153],{"class":1165},[1155,10660,1407],{"class":1382},[1155,10662,1753],{"class":1382},[1155,10664,10665],{"class":1388}," icon",[1155,10667,1392],{"class":1382},[1155,10669,1469],{"class":1382},[1155,10671,10672,10675],{"class":1165},[8281,10673],{"class":10674},"shiki-icon-highlight spZLw","i-simple-icons-openai",[1155,10677,1407],{"class":1382},[1155,10679,3172],{"class":1382},[1155,10681,10682,10684,10686,10688,10690,10692,10694,10696,10698,10700,10702,10704,10706,10708,10710,10712,10714,10720,10722],{"class":1157,"line":1413},[1155,10683,10638],{"class":1382},[1155,10685,3160],{"class":1388},[1155,10687,1392],{"class":1382},[1155,10689,1469],{"class":1382},[1155,10691,3197],{"class":1165},[1155,10693,1407],{"class":1382},[1155,10695,1753],{"class":1382},[1155,10697,3146],{"class":1388},[1155,10699,1392],{"class":1382},[1155,10701,1469],{"class":1382},[1155,10703,3121],{"class":1165},[1155,10705,1407],{"class":1382},[1155,10707,1753],{"class":1382},[1155,10709,10665],{"class":1388},[1155,10711,1392],{"class":1382},[1155,10713,1469],{"class":1382},[1155,10715,10716,10719],{"class":1165},[8281,10717],{"class":10718},"shiki-icon-highlight sVmEp","i-simple-icons-anthropic",[1155,10721,1407],{"class":1382},[1155,10723,3172],{"class":1382},[1155,10725,10726,10728,10730,10732,10734,10736,10738,10740,10742,10744,10746,10748,10750,10752,10754,10756,10758,10764,10766],{"class":1157,"line":1425},[1155,10727,10638],{"class":1382},[1155,10729,3160],{"class":1388},[1155,10731,1392],{"class":1382},[1155,10733,1469],{"class":1382},[1155,10735,3227],{"class":1165},[1155,10737,1407],{"class":1382},[1155,10739,1753],{"class":1382},[1155,10741,3146],{"class":1388},[1155,10743,1392],{"class":1382},[1155,10745,1469],{"class":1382},[1155,10747,3214],{"class":1165},[1155,10749,1407],{"class":1382},[1155,10751,1753],{"class":1382},[1155,10753,10665],{"class":1388},[1155,10755,1392],{"class":1382},[1155,10757,1469],{"class":1382},[1155,10759,10760,10763],{"class":1165},[8281,10761],{"class":10762},"shiki-icon-highlight st_gQ","i-simple-icons-google",[1155,10765,1407],{"class":1382},[1155,10767,3232],{"class":1382},[1155,10769,10770],{"class":1157,"line":1436},[1155,10771,10772],{"class":1388},"  ]\n",[1155,10774,10775],{"class":1157,"line":1444},[1155,10776,1447],{"emptyLinePlaceholder":21},[1155,10778,10779,10781,10783,10785,10788,10790,10792,10794,10796,10798,10801,10803,10805],{"class":1157,"line":1450},[1155,10780,2655],{"class":1625},[1155,10782,3337],{"class":1378},[1155,10784,2665],{"class":1382},[1155,10786,10787],{"class":1178}," useCookie",[1155,10789,1597],{"class":1382},[1155,10791,3310],{"class":1161},[1155,10793,2708],{"class":1382},[1155,10795,1379],{"class":1388},[1155,10797,1407],{"class":1382},[1155,10799,10800],{"class":1165},"ai-model",[1155,10802,1407],{"class":1382},[1155,10804,1753],{"class":1382},[1155,10806,1458],{"class":1382},[1155,10808,10809,10812,10814,10816,10818,10820,10822],{"class":1157,"line":1461},[1155,10810,10811],{"class":1178},"    default",[1155,10813,1392],{"class":1382},[1155,10815,5057],{"class":1382},[1155,10817,1862],{"class":1625},[1155,10819,1469],{"class":1382},[1155,10821,3121],{"class":1165},[1155,10823,1433],{"class":1382},[1155,10825,10826,10828],{"class":1157,"line":1477},[1155,10827,2456],{"class":1382},[1155,10829,1517],{"class":1388},[1155,10831,10832],{"class":1157,"line":1483},[1155,10833,1447],{"emptyLinePlaceholder":21},[1155,10835,10836,10838],{"class":1157,"line":1488},[1155,10837,2883],{"class":1368},[1155,10839,1458],{"class":1382},[1155,10841,10842,10845],{"class":1157,"line":1511},[1155,10843,10844],{"class":1378},"    models",[1155,10846,1410],{"class":1382},[1155,10848,10849],{"class":1157,"line":2016},[1155,10850,10851],{"class":1378},"    model\n",[1155,10853,10854],{"class":1157,"line":2043},[1155,10855,3669],{"class":1382},[1155,10857,10858],{"class":1157,"line":2089},[1155,10859,5495],{"class":1382},[1183,10861,10863],{"id":10862},"building-the-model-selector","Building the model selector",[1045,10865,1680,10866,10871],{},[1099,10867,10868],{"href":753},[1105,10869,10870],{},"USelectMenu"," component that displays the available models:",[1355,10873,10874],{},[1146,10875,10878],{"className":1587,"code":10876,"filename":10877,"language":34,"meta":1151,"style":1151},"\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",[1105,10879,10880,10900,10933,10937,10954,10958,10976,11008,11012,11020,11024,11032,11039,11052,11068,11088,11101,11114,11119],{"__ignoreMap":1151},[1155,10881,10882,10884,10886,10888,10890,10892,10894,10896,10898],{"class":1157,"line":1158},[1155,10883,1597],{"class":1382},[1155,10885,5207],{"class":1388},[1155,10887,5210],{"class":1625},[1155,10889,5213],{"class":1625},[1155,10891,1629],{"class":1382},[1155,10893,1556],{"class":1382},[1155,10895,1361],{"class":1165},[1155,10897,1556],{"class":1382},[1155,10899,1603],{"class":1382},[1155,10901,10902,10904,10907,10909,10912,10914,10916,10918,10920,10922,10925,10927,10929,10931],{"class":1157,"line":1175},[1155,10903,3111],{"class":1625},[1155,10905,10906],{"class":1378}," model ",[1155,10908,1629],{"class":1382},[1155,10910,10911],{"class":1178}," defineModel",[1155,10913,1597],{"class":1382},[1155,10915,3310],{"class":1161},[1155,10917,2708],{"class":1382},[1155,10919,1379],{"class":1378},[1155,10921,1902],{"class":1382},[1155,10923,10924],{"class":1388}," required",[1155,10926,1392],{"class":1382},[1155,10928,4250],{"class":4249},[1155,10930,1769],{"class":1382},[1155,10932,1517],{"class":1378},[1155,10934,10935],{"class":1157,"line":1398},[1155,10936,1447],{"emptyLinePlaceholder":21},[1155,10938,10939,10941,10943,10946,10948,10950,10952],{"class":1157,"line":1413},[1155,10940,3111],{"class":1625},[1155,10942,1747],{"class":1382},[1155,10944,10945],{"class":1378}," models ",[1155,10947,1514],{"class":1382},[1155,10949,2665],{"class":1382},[1155,10951,10618],{"class":1178},[1155,10953,2711],{"class":1378},[1155,10955,10956],{"class":1157,"line":1425},[1155,10957,1447],{"emptyLinePlaceholder":21},[1155,10959,10960,10962,10965,10967,10969,10971,10973],{"class":1157,"line":1436},[1155,10961,3111],{"class":1625},[1155,10963,10964],{"class":1378}," selectedModel ",[1155,10966,1629],{"class":1382},[1155,10968,8223],{"class":1178},[1155,10970,1379],{"class":1378},[1155,10972,1842],{"class":1382},[1155,10974,10975],{"class":1625}," =>\n",[1155,10977,10978,10981,10983,10986,10988,10990,10992,10994,10996,10999,11001,11003,11005],{"class":1157,"line":1444},[1155,10979,10980],{"class":1378},"  models",[1155,10982,1845],{"class":1382},[1155,10984,10985],{"class":1178},"find",[1155,10987,1379],{"class":1378},[1155,10989,3411],{"class":1979},[1155,10991,1862],{"class":1625},[1155,10993,3416],{"class":1378},[1155,10995,1845],{"class":1382},[1155,10997,10998],{"class":1378},"value ",[1155,11000,8306],{"class":1382},[1155,11002,3337],{"class":1378},[1155,11004,1845],{"class":1382},[1155,11006,11007],{"class":1378},"value)\n",[1155,11009,11010],{"class":1157,"line":1450},[1155,11011,1517],{"class":1378},[1155,11013,11014,11016,11018],{"class":1157,"line":1461},[1155,11015,1673],{"class":1382},[1155,11017,5207],{"class":1388},[1155,11019,1603],{"class":1382},[1155,11021,11022],{"class":1157,"line":1477},[1155,11023,1447],{"emptyLinePlaceholder":21},[1155,11025,11026,11028,11030],{"class":1157,"line":1483},[1155,11027,1597],{"class":1382},[1155,11029,1600],{"class":1388},[1155,11031,1603],{"class":1382},[1155,11033,11034,11036],{"class":1157,"line":1488},[1155,11035,1610],{"class":1382},[1155,11037,11038],{"class":1388},"USelectMenu\n",[1155,11040,11041,11044,11046,11048,11050],{"class":1157,"line":1511},[1155,11042,11043],{"class":1625},"    v-model",[1155,11045,1629],{"class":1382},[1155,11047,1556],{"class":1382},[1155,11049,4733],{"class":1378},[1155,11051,5650],{"class":1382},[1155,11053,11054,11057,11059,11061,11063,11066],{"class":1157,"line":2016},[1155,11055,11056],{"class":1382},"    :",[1155,11058,8455],{"class":1625},[1155,11060,1629],{"class":1382},[1155,11062,1556],{"class":1382},[1155,11064,11065],{"class":1378},"models",[1155,11067,5650],{"class":1382},[1155,11069,11070,11072,11075,11077,11079,11082,11084,11086],{"class":1157,"line":2043},[1155,11071,11056],{"class":1382},[1155,11073,11074],{"class":1625},"icon",[1155,11076,1629],{"class":1382},[1155,11078,1556],{"class":1382},[1155,11080,11081],{"class":1378},"selectedModel",[1155,11083,3923],{"class":1382},[1155,11085,11074],{"class":1378},[1155,11087,5650],{"class":1382},[1155,11089,11090,11093,11095,11097,11099],{"class":1157,"line":2089},[1155,11091,11092],{"class":1625},"    variant",[1155,11094,1629],{"class":1382},[1155,11096,1556],{"class":1382},[1155,11098,8512],{"class":1165},[1155,11100,5650],{"class":1382},[1155,11102,11103,11106,11108,11110,11112],{"class":1157,"line":2156},[1155,11104,11105],{"class":1625},"    value-key",[1155,11107,1629],{"class":1382},[1155,11109,1556],{"class":1382},[1155,11111,3396],{"class":1165},[1155,11113,5650],{"class":1382},[1155,11115,11116],{"class":1157,"line":2226},[1155,11117,11118],{"class":1382},"  \u002F>\n",[1155,11120,11121,11123,11125],{"class":1157,"line":2266},[1155,11122,1673],{"class":1382},[1155,11124,1600],{"class":1388},[1155,11126,1603],{"class":1382},[1183,11128,11130],{"id":11129},"integrating-with-the-chat","Integrating with the chat",[1045,11132,11133],{},"Update the chat page to include the model selector and pass the selected model to the server:",[1355,11135,11136],{},[1732,11137,11138],{},[1146,11139,11142],{"className":1587,"code":11140,"filename":6239,"highlights":11141,"language":34,"meta":1151,"style":1151},"\u003Cscript setup lang=\"ts\">\nimport { DefaultChatTransport, isReasoningUIPart, isTextUIPart } from 'ai'\nimport { useChat } 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 { messages, status, error, sendMessage, regenerate, stop } = useChat({\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    sendMessage({ text: input.value })\n    input.value = ''\n  }\n}\n\nonMounted(() => {\n  if (chatData.value?.messages.length === 1) {\n    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=\"messages\"\n          :status=\"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                \u003CChatMarkdown\n                  :value=\"part.text\"\n                  :streaming=\"isPartStreaming(part)\"\n                \u002F>\n              \u003C\u002FUChatReasoning>\n\n              \u003Ctemplate v-else-if=\"isTextUIPart(part)\">\n                \u003CChatMarkdown\n                  v-if=\"message.role === 'assistant'\"\n                  :value=\"part.text\"\n                  :streaming=\"isPartStreaming(part)\"\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=\"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=\"status\"\n            color=\"neutral\"\n            @stop=\"stop()\"\n            @reload=\"regenerate()\"\n          \u002F>\n        \u003C\u002FUChatPrompt>\n      \u003C\u002FUContainer>\n    \u003C\u002Ftemplate>\n  \u003C\u002FUDashboardPanel>\n\u003C\u002Ftemplate>\n",[1450,2371,2403,2419,4372,4387,4404],[1105,11143,11144,11164,11190,11208,11226,11230,11242,11254,11271,11275,11317,11321,11337,11377,11381,11385,11401,11405,11443,11461,11479,11493,11519,11527,11543,11548,11557,11569,11593,11607,11611,11615,11627,11639,11653,11667,11679,11685,11689,11695,11699,11717,11727,11747,11769,11781,11785,11789,11793,11805,11833,11839,11843,11849,11857,11861,11869,11901,11913,11921,11929,11941,11959,11965,11979,11993,11997,12009,12013,12037,12103,12109,12127,12145,12165,12169,12175,12193,12213,12217,12225,12229,12249,12255,12277,12295,12315,12319,12347,12351,12359,12367,12375,12383,12392,12397,12404,12416,12430,12442,12454,12468,12472,12485,12505,12513,12517,12523,12537,12549,12565,12581,12585,12593,12601,12610,12619],{"__ignoreMap":1151},[1155,11145,11146,11148,11150,11152,11154,11156,11158,11160,11162],{"class":1157,"line":1158},[1155,11147,1597],{"class":1382},[1155,11149,5207],{"class":1388},[1155,11151,5210],{"class":1625},[1155,11153,5213],{"class":1625},[1155,11155,1629],{"class":1382},[1155,11157,1556],{"class":1382},[1155,11159,1361],{"class":1165},[1155,11161,1556],{"class":1382},[1155,11163,1603],{"class":1382},[1155,11165,11166,11168,11170,11172,11174,11176,11178,11180,11182,11184,11186,11188],{"class":1157,"line":1175},[1155,11167,1744],{"class":1368},[1155,11169,1747],{"class":1382},[1155,11171,6272],{"class":1378},[1155,11173,1753],{"class":1382},[1155,11175,6277],{"class":1378},[1155,11177,1753],{"class":1382},[1155,11179,6282],{"class":1378},[1155,11181,1769],{"class":1382},[1155,11183,1772],{"class":1368},[1155,11185,1469],{"class":1382},[1155,11187,2576],{"class":1165},[1155,11189,1433],{"class":1382},[1155,11191,11192,11194,11196,11198,11200,11202,11204,11206],{"class":1157,"line":1398},[1155,11193,1744],{"class":1368},[1155,11195,1747],{"class":1382},[1155,11197,6302],{"class":1378},[1155,11199,1769],{"class":1382},[1155,11201,1772],{"class":1368},[1155,11203,1469],{"class":1382},[1155,11205,6311],{"class":1165},[1155,11207,1433],{"class":1382},[1155,11209,11210,11212,11214,11216,11218,11220,11222,11224],{"class":1157,"line":1413},[1155,11211,1744],{"class":1368},[1155,11213,1747],{"class":1382},[1155,11215,6323],{"class":1378},[1155,11217,1769],{"class":1382},[1155,11219,1772],{"class":1368},[1155,11221,1469],{"class":1382},[1155,11223,6332],{"class":1165},[1155,11225,1433],{"class":1382},[1155,11227,11228],{"class":1157,"line":1425},[1155,11229,1447],{"emptyLinePlaceholder":21},[1155,11231,11232,11234,11236,11238,11240],{"class":1157,"line":1436},[1155,11233,3111],{"class":1625},[1155,11235,6345],{"class":1378},[1155,11237,1629],{"class":1382},[1155,11239,6350],{"class":1178},[1155,11241,2711],{"class":1378},[1155,11243,11244,11246,11248,11250,11252],{"class":1157,"line":1444},[1155,11245,3111],{"class":1625},[1155,11247,6359],{"class":1378},[1155,11249,1629],{"class":1382},[1155,11251,6364],{"class":1178},[1155,11253,2711],{"class":1378},[1155,11255,11257,11259,11261,11263,11265,11267,11269],{"class":11256,"line":1450},[1157,1607],[1155,11258,3111],{"class":1625},[1155,11260,1747],{"class":1382},[1155,11262,10906],{"class":1378},[1155,11264,1514],{"class":1382},[1155,11266,2665],{"class":1382},[1155,11268,10618],{"class":1178},[1155,11270,2711],{"class":1378},[1155,11272,11273],{"class":1157,"line":1461},[1155,11274,1447],{"emptyLinePlaceholder":21},[1155,11276,11277,11279,11281,11283,11285,11287,11289,11291,11293,11295,11297,11299,11301,11303,11305,11307,11309,11311,11313,11315],{"class":1157,"line":1477},[1155,11278,3111],{"class":1625},[1155,11280,1747],{"class":1382},[1155,11282,6384],{"class":1388},[1155,11284,1392],{"class":1382},[1155,11286,6389],{"class":1378},[1155,11288,1514],{"class":1382},[1155,11290,2665],{"class":1382},[1155,11292,2668],{"class":1368},[1155,11294,6398],{"class":1178},[1155,11296,1379],{"class":1378},[1155,11298,3757],{"class":1382},[1155,11300,6405],{"class":1165},[1155,11302,5479],{"class":1382},[1155,11304,6410],{"class":1378},[1155,11306,1845],{"class":1382},[1155,11308,6415],{"class":1378},[1155,11310,1845],{"class":1382},[1155,11312,2056],{"class":1378},[1155,11314,5488],{"class":1382},[1155,11316,1517],{"class":1378},[1155,11318,11319],{"class":1157,"line":1483},[1155,11320,1447],{"emptyLinePlaceholder":21},[1155,11322,11323,11325,11327,11329,11331,11333,11335],{"class":1157,"line":1488},[1155,11324,6432],{"class":1368},[1155,11326,1988],{"class":1378},[1155,11328,3617],{"class":1382},[1155,11330,6439],{"class":1378},[1155,11332,1845],{"class":1382},[1155,11334,6444],{"class":1378},[1155,11336,1383],{"class":1382},[1155,11338,11339,11341,11343,11345,11347,11349,11351,11353,11355,11357,11359,11361,11363,11365,11367,11369,11371,11373,11375],{"class":1157,"line":1511},[1155,11340,6451],{"class":1368},[1155,11342,2942],{"class":1178},[1155,11344,1379],{"class":1388},[1155,11346,1902],{"class":1382},[1155,11348,3639],{"class":1388},[1155,11350,1392],{"class":1382},[1155,11352,3645],{"class":3644},[1155,11354,1753],{"class":1382},[1155,11356,3650],{"class":1388},[1155,11358,1392],{"class":1382},[1155,11360,1469],{"class":1382},[1155,11362,3657],{"class":1165},[1155,11364,1407],{"class":1382},[1155,11366,1753],{"class":1382},[1155,11368,6480],{"class":1388},[1155,11370,1392],{"class":1382},[1155,11372,4250],{"class":4249},[1155,11374,1769],{"class":1382},[1155,11376,1517],{"class":1388},[1155,11378,11379],{"class":1157,"line":2016},[1155,11380,5495],{"class":1382},[1155,11382,11383],{"class":1157,"line":2043},[1155,11384,1447],{"emptyLinePlaceholder":21},[1155,11386,11387,11389,11391,11393,11395,11397,11399],{"class":1157,"line":2089},[1155,11388,3111],{"class":1625},[1155,11390,5230],{"class":1378},[1155,11392,1629],{"class":1382},[1155,11394,5235],{"class":1178},[1155,11396,1379],{"class":1378},[1155,11398,5240],{"class":1382},[1155,11400,1517],{"class":1378},[1155,11402,11403],{"class":1157,"line":2156},[1155,11404,1447],{"emptyLinePlaceholder":21},[1155,11406,11407,11409,11411,11413,11415,11417,11419,11421,11423,11425,11427,11429,11431,11433,11435,11437,11439,11441],{"class":1157,"line":2226},[1155,11408,3111],{"class":1625},[1155,11410,1747],{"class":1382},[1155,11412,3347],{"class":1378},[1155,11414,1753],{"class":1382},[1155,11416,6535],{"class":1378},[1155,11418,1753],{"class":1382},[1155,11420,6540],{"class":1378},[1155,11422,1753],{"class":1382},[1155,11424,6545],{"class":1378},[1155,11426,1753],{"class":1382},[1155,11428,6550],{"class":1378},[1155,11430,1753],{"class":1382},[1155,11432,6555],{"class":1378},[1155,11434,1514],{"class":1382},[1155,11436,2665],{"class":1382},[1155,11438,6302],{"class":1178},[1155,11440,1379],{"class":1378},[1155,11442,1383],{"class":1382},[1155,11444,11445,11447,11449,11451,11453,11455,11457,11459],{"class":1157,"line":2266},[1155,11446,1835],{"class":1388},[1155,11448,1392],{"class":1382},[1155,11450,6575],{"class":1378},[1155,11452,1845],{"class":1382},[1155,11454,3396],{"class":1378},[1155,11456,1845],{"class":1382},[1155,11458,2056],{"class":1378},[1155,11460,1410],{"class":1382},[1155,11462,11463,11465,11467,11469,11471,11473,11475,11477],{"class":1157,"line":2317},[1155,11464,1995],{"class":1388},[1155,11466,1392],{"class":1382},[1155,11468,6575],{"class":1378},[1155,11470,1845],{"class":1382},[1155,11472,3396],{"class":1378},[1155,11474,1845],{"class":1382},[1155,11476,2034],{"class":1378},[1155,11478,1410],{"class":1382},[1155,11480,11481,11483,11485,11487,11489,11491],{"class":1157,"line":2330},[1155,11482,6610],{"class":1388},[1155,11484,1392],{"class":1382},[1155,11486,1939],{"class":1382},[1155,11488,6272],{"class":1178},[1155,11490,1379],{"class":1378},[1155,11492,1383],{"class":1382},[1155,11494,11495,11497,11499,11501,11503,11505,11507,11509,11511,11513,11515,11517],{"class":1157,"line":2360},[1155,11496,6626],{"class":1388},[1155,11498,1392],{"class":1382},[1155,11500,3751],{"class":1382},[1155,11502,6405],{"class":1165},[1155,11504,5479],{"class":1382},[1155,11506,6439],{"class":1378},[1155,11508,1845],{"class":1382},[1155,11510,3396],{"class":1378},[1155,11512,1845],{"class":1382},[1155,11514,2056],{"class":1378},[1155,11516,5488],{"class":1382},[1155,11518,1410],{"class":1382},[1155,11520,11521,11523,11525],{"class":1157,"line":2366},[1155,11522,5377],{"class":1388},[1155,11524,1392],{"class":1382},[1155,11526,1458],{"class":1382},[1155,11528,11530,11532,11534,11536,11538,11540],{"class":11529,"line":2371},[1157,1607],[1155,11531,3734],{"class":1388},[1155,11533,1392],{"class":1382},[1155,11535,3337],{"class":1378},[1155,11537,1845],{"class":1382},[1155,11539,10998],{"class":1378},[1155,11541,11542],{"class":2733},"\u002F\u002F Pass the selected model\n",[1155,11544,11546],{"class":11545,"line":2403},[1157,1607],[1155,11547,4644],{"class":1382},[1155,11549,11551,11553,11555],{"class":11550,"line":2419},[1157,1607],[1155,11552,2456],{"class":1382},[1155,11554,1919],{"class":1378},[1155,11556,1410],{"class":1382},[1155,11558,11559,11561,11563,11565,11567],{"class":1157,"line":2437},[1155,11560,6662],{"class":1388},[1155,11562,1379],{"class":1382},[1155,11564,6667],{"class":1979},[1155,11566,1919],{"class":1382},[1155,11568,1458],{"class":1382},[1155,11570,11571,11573,11575,11577,11579,11581,11583,11585,11587,11589,11591],{"class":1157,"line":2453},[1155,11572,6683],{"class":1368},[1155,11574,1988],{"class":1388},[1155,11576,6667],{"class":1378},[1155,11578,1845],{"class":1382},[1155,11580,6692],{"class":1378},[1155,11582,3423],{"class":1382},[1155,11584,1469],{"class":1382},[1155,11586,4397],{"class":1165},[1155,11588,1407],{"class":1382},[1155,11590,3622],{"class":1388},[1155,11592,1383],{"class":1382},[1155,11594,11595,11597,11599,11601,11603,11605],{"class":1157,"line":2461},[1155,11596,6710],{"class":1178},[1155,11598,1379],{"class":1388},[1155,11600,1407],{"class":1382},[1155,11602,1824],{"class":1165},[1155,11604,1407],{"class":1382},[1155,11606,1517],{"class":1388},[1155,11608,11609],{"class":1157,"line":3434},[1155,11610,4644],{"class":1382},[1155,11612,11613],{"class":1157,"line":3449},[1155,11614,1480],{"class":1382},[1155,11616,11617,11619,11621,11623,11625],{"class":1157,"line":3466},[1155,11618,6736],{"class":1388},[1155,11620,1379],{"class":1382},[1155,11622,6741],{"class":1979},[1155,11624,1919],{"class":1382},[1155,11626,1458],{"class":1382},[1155,11628,11629,11631,11633,11635,11637],{"class":1157,"line":3498},[1155,11630,6751],{"class":1378},[1155,11632,1845],{"class":1382},[1155,11634,6756],{"class":1178},[1155,11636,1379],{"class":1388},[1155,11638,1383],{"class":1382},[1155,11640,11641,11643,11645,11647,11649,11651],{"class":1157,"line":3511},[1155,11642,6766],{"class":1388},[1155,11644,1392],{"class":1382},[1155,11646,1469],{"class":1382},[1155,11648,500],{"class":1165},[1155,11650,1407],{"class":1382},[1155,11652,1410],{"class":1382},[1155,11654,11655,11657,11659,11661,11663,11665],{"class":1157,"line":3516},[1155,11656,6782],{"class":1388},[1155,11658,1392],{"class":1382},[1155,11660,6540],{"class":1378},[1155,11662,1845],{"class":1382},[1155,11664,4561],{"class":1378},[1155,11666,1410],{"class":1382},[1155,11668,11669,11671,11673,11675,11677],{"class":1157,"line":3522},[1155,11670,6798],{"class":1388},[1155,11672,1392],{"class":1382},[1155,11674,1469],{"class":1382},[1155,11676,6741],{"class":1165},[1155,11678,1433],{"class":1382},[1155,11680,11681,11683],{"class":1157,"line":3553},[1155,11682,3452],{"class":1382},[1155,11684,1517],{"class":1388},[1155,11686,11687],{"class":1157,"line":3597},[1155,11688,3669],{"class":1382},[1155,11690,11691,11693],{"class":1157,"line":3604},[1155,11692,1514],{"class":1382},[1155,11694,1517],{"class":1378},[1155,11696,11697],{"class":1157,"line":3609},[1155,11698,1447],{"emptyLinePlaceholder":21},[1155,11700,11701,11703,11705,11707,11709,11711,11713,11715],{"class":1157,"line":3627},[1155,11702,6834],{"class":1625},[1155,11704,6837],{"class":1178},[1155,11706,1379],{"class":1382},[1155,11708,6842],{"class":1979},[1155,11710,1392],{"class":1382},[1155,11712,6847],{"class":1161},[1155,11714,1919],{"class":1382},[1155,11716,1458],{"class":1382},[1155,11718,11719,11721,11723,11725],{"class":1157,"line":3666},[1155,11720,6856],{"class":1378},[1155,11722,1845],{"class":1382},[1155,11724,6861],{"class":1178},[1155,11726,2711],{"class":1388},[1155,11728,11729,11731,11733,11735,11737,11739,11741,11743,11745],{"class":1157,"line":3672},[1155,11730,3612],{"class":1368},[1155,11732,1988],{"class":1388},[1155,11734,5289],{"class":1378},[1155,11736,1845],{"class":1382},[1155,11738,3396],{"class":1378},[1155,11740,1845],{"class":1382},[1155,11742,5298],{"class":1178},[1155,11744,5301],{"class":1388},[1155,11746,1383],{"class":1382},[1155,11748,11749,11751,11753,11755,11757,11759,11761,11763,11765,11767],{"class":1157,"line":3677},[1155,11750,6888],{"class":1178},[1155,11752,1379],{"class":1388},[1155,11754,1902],{"class":1382},[1155,11756,1756],{"class":1388},[1155,11758,1392],{"class":1382},[1155,11760,5433],{"class":1378},[1155,11762,1845],{"class":1382},[1155,11764,3396],{"class":1378},[1155,11766,1769],{"class":1382},[1155,11768,1517],{"class":1388},[1155,11770,11771,11773,11775,11777,11779],{"class":1157,"line":3683},[1155,11772,6911],{"class":1378},[1155,11774,1845],{"class":1382},[1155,11776,3396],{"class":1378},[1155,11778,2665],{"class":1382},[1155,11780,6920],{"class":1382},[1155,11782,11783],{"class":1157,"line":3703},[1155,11784,3669],{"class":1382},[1155,11786,11787],{"class":1157,"line":3731},[1155,11788,5495],{"class":1382},[1155,11790,11791],{"class":1157,"line":3743},[1155,11792,1447],{"emptyLinePlaceholder":21},[1155,11794,11795,11797,11799,11801,11803],{"class":1157,"line":3762},[1155,11796,6942],{"class":1178},[1155,11798,1379],{"class":1378},[1155,11800,1842],{"class":1382},[1155,11802,1862],{"class":1625},[1155,11804,1458],{"class":1382},[1155,11806,11807,11809,11811,11813,11815,11817,11819,11821,11823,11825,11827,11829,11831],{"class":1157,"line":3790},[1155,11808,3612],{"class":1368},[1155,11810,1988],{"class":1388},[1155,11812,6439],{"class":1378},[1155,11814,1845],{"class":1382},[1155,11816,3396],{"class":1378},[1155,11818,3923],{"class":1382},[1155,11820,2034],{"class":1378},[1155,11822,1845],{"class":1382},[1155,11824,3902],{"class":1378},[1155,11826,3423],{"class":1382},[1155,11828,3908],{"class":3644},[1155,11830,3622],{"class":1388},[1155,11832,1383],{"class":1382},[1155,11834,11835,11837],{"class":1157,"line":3797},[1155,11836,6983],{"class":1178},[1155,11838,2711],{"class":1388},[1155,11840,11841],{"class":1157,"line":3802},[1155,11842,3669],{"class":1382},[1155,11844,11845,11847],{"class":1157,"line":3868},[1155,11846,1514],{"class":1382},[1155,11848,1517],{"class":1378},[1155,11850,11851,11853,11855],{"class":1157,"line":3873},[1155,11852,1673],{"class":1382},[1155,11854,5207],{"class":1388},[1155,11856,1603],{"class":1382},[1155,11858,11859],{"class":1157,"line":3878},[1155,11860,1447],{"emptyLinePlaceholder":21},[1155,11862,11863,11865,11867],{"class":1157,"line":3884},[1155,11864,1597],{"class":1382},[1155,11866,1600],{"class":1388},[1155,11868,1603],{"class":1382},[1155,11870,11871,11873,11875,11877,11879,11881,11883,11885,11887,11889,11891,11893,11895,11897,11899],{"class":1157,"line":3913},[1155,11872,1610],{"class":1382},[1155,11874,5522],{"class":1388},[1155,11876,5525],{"class":1382},[1155,11878,5528],{"class":1625},[1155,11880,1629],{"class":1382},[1155,11882,1556],{"class":1382},[1155,11884,5535],{"class":1382},[1155,11886,5538],{"class":1388},[1155,11888,5541],{"class":1382},[1155,11890,1407],{"class":1382},[1155,11892,5546],{"class":1165},[1155,11894,1407],{"class":1382},[1155,11896,1769],{"class":1382},[1155,11898,1556],{"class":1382},[1155,11900,1603],{"class":1382},[1155,11902,11903,11905,11907,11909,11911],{"class":1157,"line":3954},[1155,11904,1619],{"class":1382},[1155,11906,1600],{"class":1388},[1155,11908,5563],{"class":1382},[1155,11910,8919],{"class":1625},[1155,11912,1603],{"class":1382},[1155,11914,11915,11917,11919],{"class":1157,"line":3983},[1155,11916,1643],{"class":1382},[1155,11918,8929],{"class":1388},[1155,11920,1649],{"class":1382},[1155,11922,11923,11925,11927],{"class":1157,"line":3995},[1155,11924,1654],{"class":1382},[1155,11926,1600],{"class":1388},[1155,11928,1603],{"class":1382},[1155,11930,11931,11933,11935,11937,11939],{"class":1157,"line":4011},[1155,11932,1619],{"class":1382},[1155,11934,1600],{"class":1388},[1155,11936,5563],{"class":1382},[1155,11938,5538],{"class":1625},[1155,11940,1603],{"class":1382},[1155,11942,11943,11945,11947,11949,11951,11953,11955,11957],{"class":1157,"line":4025},[1155,11944,1643],{"class":1382},[1155,11946,5574],{"class":1388},[1155,11948,5577],{"class":1625},[1155,11950,1629],{"class":1382},[1155,11952,1556],{"class":1382},[1155,11954,7074],{"class":1165},[1155,11956,1556],{"class":1382},[1155,11958,1603],{"class":1382},[1155,11960,11961,11963],{"class":1157,"line":4032},[1155,11962,5593],{"class":1382},[1155,11964,7085],{"class":1388},[1155,11966,11967,11969,11971,11973,11975,11977],{"class":1157,"line":4037},[1155,11968,5656],{"class":1382},[1155,11970,2034],{"class":1625},[1155,11972,1629],{"class":1382},[1155,11974,1556],{"class":1382},[1155,11976,2034],{"class":1378},[1155,11978,5650],{"class":1382},[1155,11980,11981,11983,11985,11987,11989,11991],{"class":1157,"line":4042},[1155,11982,5656],{"class":1382},[1155,11984,5659],{"class":1625},[1155,11986,1629],{"class":1382},[1155,11988,1556],{"class":1382},[1155,11990,5659],{"class":1378},[1155,11992,5650],{"class":1382},[1155,11994,11995],{"class":1157,"line":4048},[1155,11996,7118],{"class":1625},[1155,11998,11999,12001,12003,12005,12007],{"class":1157,"line":4065},[1155,12000,7123],{"class":1625},[1155,12002,1629],{"class":1382},[1155,12004,1556],{"class":1382},[1155,12006,7130],{"class":1165},[1155,12008,5650],{"class":1382},[1155,12010,12011],{"class":1157,"line":4087},[1155,12012,5741],{"class":1382},[1155,12014,12015,12017,12019,12021,12023,12025,12027,12029,12031,12033,12035],{"class":1157,"line":4105},[1155,12016,5747],{"class":1382},[1155,12018,1600],{"class":1388},[1155,12020,5563],{"class":1382},[1155,12022,374],{"class":1625},[1155,12024,1629],{"class":1382},[1155,12026,1556],{"class":1382},[1155,12028,1902],{"class":1382},[1155,12030,7155],{"class":1378},[1155,12032,1514],{"class":1382},[1155,12034,1556],{"class":1382},[1155,12036,1603],{"class":1382},[1155,12038,12039,12041,12043,12045,12047,12049,12051,12053,12055,12057,12059,12061,12063,12065,12067,12069,12071,12073,12075,12077,12079,12081,12083,12085,12087,12089,12091,12093,12095,12097,12099,12101],{"class":1157,"line":4113},[1155,12040,7166],{"class":1382},[1155,12042,1600],{"class":1388},[1155,12044,7171],{"class":1368},[1155,12046,1629],{"class":1382},[1155,12048,1556],{"class":1382},[1155,12050,7178],{"class":1378},[1155,12052,1753],{"class":1382},[1155,12054,7183],{"class":1378},[1155,12056,7186],{"class":1382},[1155,12058,2660],{"class":1378},[1155,12060,1845],{"class":1382},[1155,12062,2240],{"class":1378},[1155,12064,1556],{"class":1382},[1155,12066,5525],{"class":1382},[1155,12068,7199],{"class":1625},[1155,12070,1629],{"class":1382},[1155,12072,7204],{"class":1382},[1155,12074,4561],{"class":1378},[1155,12076,1845],{"class":1382},[1155,12078,2056],{"class":1378},[1155,12080,1514],{"class":1382},[1155,12082,7215],{"class":1165},[1155,12084,5479],{"class":1382},[1155,12086,7220],{"class":1378},[1155,12088,1845],{"class":1382},[1155,12090,6692],{"class":1378},[1155,12092,1514],{"class":1382},[1155,12094,7215],{"class":1165},[1155,12096,5479],{"class":1382},[1155,12098,7233],{"class":1378},[1155,12100,7236],{"class":1382},[1155,12102,1603],{"class":1382},[1155,12104,12105,12107],{"class":1157,"line":4130},[1155,12106,7243],{"class":1382},[1155,12108,7246],{"class":1388},[1155,12110,12111,12113,12115,12117,12119,12121,12123,12125],{"class":1157,"line":4151},[1155,12112,7251],{"class":1368},[1155,12114,1629],{"class":1382},[1155,12116,1556],{"class":1382},[1155,12118,7258],{"class":1178},[1155,12120,1379],{"class":1382},[1155,12122,7220],{"class":1378},[1155,12124,1919],{"class":1382},[1155,12126,5650],{"class":1382},[1155,12128,12129,12131,12133,12135,12137,12139,12141,12143],{"class":1157,"line":4161},[1155,12130,7271],{"class":1382},[1155,12132,5422],{"class":1625},[1155,12134,1629],{"class":1382},[1155,12136,1556],{"class":1382},[1155,12138,7220],{"class":1378},[1155,12140,1845],{"class":1382},[1155,12142,5422],{"class":1378},[1155,12144,5650],{"class":1382},[1155,12146,12147,12149,12151,12153,12155,12157,12159,12161,12163],{"class":1157,"line":4171},[1155,12148,7271],{"class":1382},[1155,12150,5674],{"class":1625},[1155,12152,1629],{"class":1382},[1155,12154,1556],{"class":1382},[1155,12156,7298],{"class":1178},[1155,12158,1379],{"class":1382},[1155,12160,7220],{"class":1378},[1155,12162,1919],{"class":1382},[1155,12164,5650],{"class":1382},[1155,12166,12167],{"class":1157,"line":4181},[1155,12168,7311],{"class":1382},[1155,12170,12171,12173],{"class":1157,"line":4198},[1155,12172,7316],{"class":1382},[1155,12174,7319],{"class":1388},[1155,12176,12177,12179,12181,12183,12185,12187,12189,12191],{"class":1157,"line":4209},[1155,12178,7324],{"class":1382},[1155,12180,3396],{"class":1625},[1155,12182,1629],{"class":1382},[1155,12184,1556],{"class":1382},[1155,12186,7220],{"class":1378},[1155,12188,1845],{"class":1382},[1155,12190,5422],{"class":1378},[1155,12192,5650],{"class":1382},[1155,12194,12195,12197,12199,12201,12203,12205,12207,12209,12211],{"class":1157,"line":4215},[1155,12196,7324],{"class":1382},[1155,12198,5674],{"class":1625},[1155,12200,1629],{"class":1382},[1155,12202,1556],{"class":1382},[1155,12204,7298],{"class":1178},[1155,12206,1379],{"class":1382},[1155,12208,7220],{"class":1378},[1155,12210,1919],{"class":1382},[1155,12212,5650],{"class":1382},[1155,12214,12215],{"class":1157,"line":4221},[1155,12216,7363],{"class":1382},[1155,12218,12219,12221,12223],{"class":1157,"line":4231},[1155,12220,7368],{"class":1382},[1155,12222,7371],{"class":1388},[1155,12224,1603],{"class":1382},[1155,12226,12227],{"class":1157,"line":4241},[1155,12228,1447],{"emptyLinePlaceholder":21},[1155,12230,12231,12233,12235,12237,12239,12241,12243,12245,12247],{"class":1157,"line":4255},[1155,12232,7243],{"class":1382},[1155,12234,1600],{"class":1388},[1155,12236,7386],{"class":1368},[1155,12238,1629],{"class":1382},[1155,12240,1556],{"class":1382},[1155,12242,7393],{"class":1178},[1155,12244,7396],{"class":1378},[1155,12246,1556],{"class":1382},[1155,12248,1603],{"class":1382},[1155,12250,12251,12253],{"class":1157,"line":4270},[1155,12252,7316],{"class":1382},[1155,12254,7319],{"class":1388},[1155,12256,12257,12259,12261,12263,12265,12267,12269,12271,12273,12275],{"class":1157,"line":4275},[1155,12258,7411],{"class":1368},[1155,12260,1629],{"class":1382},[1155,12262,1556],{"class":1382},[1155,12264,4561],{"class":1378},[1155,12266,1845],{"class":1382},[1155,12268,2170],{"class":1378},[1155,12270,7424],{"class":1382},[1155,12272,1407],{"class":1382},[1155,12274,2197],{"class":1165},[1155,12276,5687],{"class":1382},[1155,12278,12279,12281,12283,12285,12287,12289,12291,12293],{"class":1157,"line":4280},[1155,12280,7324],{"class":1382},[1155,12282,3396],{"class":1625},[1155,12284,1629],{"class":1382},[1155,12286,1556],{"class":1382},[1155,12288,7220],{"class":1378},[1155,12290,1845],{"class":1382},[1155,12292,5422],{"class":1378},[1155,12294,5650],{"class":1382},[1155,12296,12297,12299,12301,12303,12305,12307,12309,12311,12313],{"class":1157,"line":4290},[1155,12298,7324],{"class":1382},[1155,12300,5674],{"class":1625},[1155,12302,1629],{"class":1382},[1155,12304,1556],{"class":1382},[1155,12306,7298],{"class":1178},[1155,12308,1379],{"class":1382},[1155,12310,7220],{"class":1378},[1155,12312,1919],{"class":1382},[1155,12314,5650],{"class":1382},[1155,12316,12317],{"class":1157,"line":4306},[1155,12318,7363],{"class":1382},[1155,12320,12321,12323,12325,12327,12329,12331,12333,12335,12337,12339,12341,12343,12345],{"class":1157,"line":4321},[1155,12322,7316],{"class":1382},[1155,12324,1045],{"class":1388},[1155,12326,7386],{"class":1625},[1155,12328,1629],{"class":1382},[1155,12330,1556],{"class":1382},[1155,12332,7487],{"class":1165},[1155,12334,1556],{"class":1382},[1155,12336,5577],{"class":1625},[1155,12338,1629],{"class":1382},[1155,12340,1556],{"class":1382},[1155,12342,7498],{"class":1165},[1155,12344,1556],{"class":1382},[1155,12346,1603],{"class":1382},[1155,12348,12349],{"class":1157,"line":4327},[1155,12350,7507],{"class":1378},[1155,12352,12353,12355,12357],{"class":1157,"line":4333},[1155,12354,7512],{"class":1382},[1155,12356,1045],{"class":1388},[1155,12358,1603],{"class":1382},[1155,12360,12361,12363,12365],{"class":1157,"line":4341},[1155,12362,7368],{"class":1382},[1155,12364,1600],{"class":1388},[1155,12366,1603],{"class":1382},[1155,12368,12369,12371,12373],{"class":1157,"line":4346},[1155,12370,7529],{"class":1382},[1155,12372,1600],{"class":1388},[1155,12374,1603],{"class":1382},[1155,12376,12377,12379,12381],{"class":1157,"line":4352},[1155,12378,7538],{"class":1382},[1155,12380,1600],{"class":1388},[1155,12382,1603],{"class":1382},[1155,12384,12386,12388,12390],{"class":12385,"line":4372},[1157,1607],[1155,12387,5619],{"class":1382},[1155,12389,5178],{"class":1388},[1155,12391,1603],{"class":1382},[1155,12393,12395],{"class":12394,"line":4387},[1157,1607],[1155,12396,1447],{"emptyLinePlaceholder":21},[1155,12398,12400,12402],{"class":12399,"line":4404},[1157,1607],[1155,12401,5593],{"class":1382},[1155,12403,5635],{"class":1388},[1155,12405,12406,12408,12410,12412,12414],{"class":1157,"line":4427},[1155,12407,5641],{"class":1625},[1155,12409,1629],{"class":1382},[1155,12411,1556],{"class":1382},[1155,12413,5289],{"class":1378},[1155,12415,5650],{"class":1382},[1155,12417,12418,12420,12422,12424,12426,12428],{"class":1157,"line":4438},[1155,12419,5656],{"class":1382},[1155,12421,6741],{"class":1625},[1155,12423,1629],{"class":1382},[1155,12425,1556],{"class":1382},[1155,12427,6741],{"class":1378},[1155,12429,5650],{"class":1382},[1155,12431,12432,12434,12436,12438,12440],{"class":1157,"line":4446},[1155,12433,5693],{"class":1625},[1155,12435,1629],{"class":1382},[1155,12437,1556],{"class":1382},[1155,12439,5700],{"class":1165},[1155,12441,5650],{"class":1382},[1155,12443,12444,12446,12448,12450,12452],{"class":1157,"line":4452},[1155,12445,7123],{"class":1625},[1155,12447,1629],{"class":1382},[1155,12449,1556],{"class":1382},[1155,12451,7609],{"class":1165},[1155,12453,5650],{"class":1382},[1155,12455,12456,12458,12460,12462,12464,12466],{"class":1157,"line":4457},[1155,12457,5723],{"class":1382},[1155,12459,5726],{"class":1625},[1155,12461,1629],{"class":1382},[1155,12463,1556],{"class":1382},[1155,12465,7624],{"class":1378},[1155,12467,5650],{"class":1382},[1155,12469,12470],{"class":1157,"line":4492},[1155,12471,5741],{"class":1382},[1155,12473,12474,12476,12478,12480,12483],{"class":1157,"line":4498},[1155,12475,5747],{"class":1382},[1155,12477,1600],{"class":1388},[1155,12479,5563],{"class":1382},[1155,12481,12482],{"class":1625},"footer",[1155,12484,1603],{"class":1382},[1155,12486,12487,12489,12492,12495,12497,12499,12501,12503],{"class":1157,"line":4518},[1155,12488,7166],{"class":1382},[1155,12490,12491],{"class":1388},"ModelSelect",[1155,12493,12494],{"class":1625}," v-model",[1155,12496,1629],{"class":1382},[1155,12498,1556],{"class":1382},[1155,12500,4733],{"class":1378},[1155,12502,1556],{"class":1382},[1155,12504,1649],{"class":1382},[1155,12506,12507,12509,12511],{"class":1157,"line":4524},[1155,12508,7538],{"class":1382},[1155,12510,1600],{"class":1388},[1155,12512,1603],{"class":1382},[1155,12514,12515],{"class":1157,"line":4570},[1155,12516,1447],{"emptyLinePlaceholder":21},[1155,12518,12519,12521],{"class":1157,"line":4586},[1155,12520,5747],{"class":1382},[1155,12522,7637],{"class":1388},[1155,12524,12525,12527,12529,12531,12533,12535],{"class":1157,"line":4619},[1155,12526,7642],{"class":1382},[1155,12528,5659],{"class":1625},[1155,12530,1629],{"class":1382},[1155,12532,1556],{"class":1382},[1155,12534,5659],{"class":1378},[1155,12536,5650],{"class":1382},[1155,12538,12539,12541,12543,12545,12547],{"class":1157,"line":4633},[1155,12540,7657],{"class":1625},[1155,12542,1629],{"class":1382},[1155,12544,1556],{"class":1382},[1155,12546,5760],{"class":1165},[1155,12548,5650],{"class":1382},[1155,12550,12551,12553,12555,12557,12559,12561,12563],{"class":1157,"line":4641},[1155,12552,7670],{"class":1382},[1155,12554,7673],{"class":1625},[1155,12556,1629],{"class":1382},[1155,12558,1556],{"class":1382},[1155,12560,7673],{"class":1178},[1155,12562,1842],{"class":1382},[1155,12564,5650],{"class":1382},[1155,12566,12567,12569,12571,12573,12575,12577,12579],{"class":1157,"line":4647},[1155,12568,7670],{"class":1382},[1155,12570,7690],{"class":1625},[1155,12572,1629],{"class":1382},[1155,12574,1556],{"class":1382},[1155,12576,7697],{"class":1178},[1155,12578,1842],{"class":1382},[1155,12580,5650],{"class":1382},[1155,12582,12583],{"class":1157,"line":4654},[1155,12584,7706],{"class":1382},[1155,12586,12587,12589,12591],{"class":1157,"line":4659},[1155,12588,5619],{"class":1382},[1155,12590,5172],{"class":1388},[1155,12592,1603],{"class":1382},[1155,12594,12595,12597,12599],{"class":1157,"line":4677},[1155,12596,5778],{"class":1382},[1155,12598,5574],{"class":1388},[1155,12600,1603],{"class":1382},[1155,12602,12604,12606,12608],{"class":1157,"line":12603},115,[1155,12605,1654],{"class":1382},[1155,12607,1600],{"class":1388},[1155,12609,1603],{"class":1382},[1155,12611,12613,12615,12617],{"class":1157,"line":12612},116,[1155,12614,1664],{"class":1382},[1155,12616,5522],{"class":1388},[1155,12618,1603],{"class":1382},[1155,12620,12622,12624,12626],{"class":1157,"line":12621},117,[1155,12623,1673],{"class":1382},[1155,12625,1600],{"class":1388},[1155,12627,1603],{"class":1382},[1049,12629,12631],{"id":12630},"going-further","Going further",[1045,12633,12634],{},"You now have a working AI chatbot with database persistence! To take it further, consider adding:",[1045,12636,12637],{},[1063,12638,12639],{},"User Authentication",[1045,12641,12642,12643,12648],{},"Add authentication with ",[1099,12644,12647],{"href":12645,"rel":12646},"https:\u002F\u002Fgithub.com\u002Fatinux\u002Fnuxt-auth-utils",[1103],"nuxt-auth-utils"," to let users access their chat history across devices and keep conversations private.",[1045,12650,12651],{},[1063,12652,12653],{},"AI Tools",[1045,12655,12656,12657,12662],{},"Extend your chatbot with ",[1099,12658,12661],{"href":12659,"rel":12660},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-core\u002Ftools-and-tool-calling",[1103],"AI SDK tools"," that can fetch real-time data, generate charts, or interact with external APIs:",[1146,12664,12666],{"className":1359,"code":12665,"language":1361,"meta":1151,"style":1151},"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",[1105,12667,12668,12687,12705,12709,12724,12740,12757,12788,12796,12816,12821,12856,12860],{"__ignoreMap":1151},[1155,12669,12670,12672,12674,12677,12679,12681,12683,12685],{"class":1157,"line":1158},[1155,12671,1744],{"class":1368},[1155,12673,1747],{"class":1382},[1155,12675,12676],{"class":1378}," tool",[1155,12678,1769],{"class":1382},[1155,12680,1772],{"class":1368},[1155,12682,1469],{"class":1382},[1155,12684,2576],{"class":1165},[1155,12686,1433],{"class":1382},[1155,12688,12689,12691,12693,12695,12697,12699,12701,12703],{"class":1157,"line":1175},[1155,12690,1744],{"class":1368},[1155,12692,1747],{"class":1382},[1155,12694,2611],{"class":1378},[1155,12696,1769],{"class":1382},[1155,12698,1772],{"class":1368},[1155,12700,1469],{"class":1382},[1155,12702,2620],{"class":1165},[1155,12704,1433],{"class":1382},[1155,12706,12707],{"class":1157,"line":1398},[1155,12708,1447],{"emptyLinePlaceholder":21},[1155,12710,12711,12713,12716,12718,12720,12722],{"class":1157,"line":1413},[1155,12712,3111],{"class":1625},[1155,12714,12715],{"class":1378}," weatherTool ",[1155,12717,1629],{"class":1382},[1155,12719,12676],{"class":1178},[1155,12721,1379],{"class":1378},[1155,12723,1383],{"class":1382},[1155,12725,12726,12729,12731,12733,12736,12738],{"class":1157,"line":1425},[1155,12727,12728],{"class":1388},"  description",[1155,12730,1392],{"class":1382},[1155,12732,1469],{"class":1382},[1155,12734,12735],{"class":1165},"Get the current weather for a location",[1155,12737,1407],{"class":1382},[1155,12739,1410],{"class":1382},[1155,12741,12742,12745,12747,12749,12751,12753,12755],{"class":1157,"line":1436},[1155,12743,12744],{"class":1388},"  parameters",[1155,12746,1392],{"class":1382},[1155,12748,2611],{"class":1378},[1155,12750,1845],{"class":1382},[1155,12752,2683],{"class":1178},[1155,12754,1379],{"class":1378},[1155,12756,1383],{"class":1382},[1155,12758,12759,12762,12764,12766,12768,12770,12772,12774,12777,12779,12781,12784,12786],{"class":1157,"line":1444},[1155,12760,12761],{"class":1388},"    location",[1155,12763,1392],{"class":1382},[1155,12765,2611],{"class":1378},[1155,12767,1845],{"class":1382},[1155,12769,3310],{"class":1178},[1155,12771,1842],{"class":1378},[1155,12773,1845],{"class":1382},[1155,12775,12776],{"class":1178},"describe",[1155,12778,1379],{"class":1378},[1155,12780,1407],{"class":1382},[1155,12782,12783],{"class":1165},"The city name",[1155,12785,1407],{"class":1382},[1155,12787,1517],{"class":1378},[1155,12789,12790,12792,12794],{"class":1157,"line":1450},[1155,12791,2456],{"class":1382},[1155,12793,1919],{"class":1378},[1155,12795,1410],{"class":1382},[1155,12797,12798,12801,12803,12805,12807,12810,12812,12814],{"class":1157,"line":1461},[1155,12799,12800],{"class":1178},"  execute",[1155,12802,1392],{"class":1382},[1155,12804,4073],{"class":1625},[1155,12806,1976],{"class":1382},[1155,12808,12809],{"class":1979}," location",[1155,12811,1983],{"class":1382},[1155,12813,1862],{"class":1625},[1155,12815,1458],{"class":1382},[1155,12817,12818],{"class":1157,"line":1477},[1155,12819,12820],{"class":2733},"    \u002F\u002F Fetch weather data from an API\n",[1155,12822,12823,12826,12828,12830,12832,12835,12837,12840,12842,12845,12847,12849,12852,12854],{"class":1157,"line":1483},[1155,12824,12825],{"class":1368},"    return",[1155,12827,1747],{"class":1382},[1155,12829,12809],{"class":1378},[1155,12831,1753],{"class":1382},[1155,12833,12834],{"class":1388}," temperature",[1155,12836,1392],{"class":1382},[1155,12838,12839],{"class":3644}," 22",[1155,12841,1753],{"class":1382},[1155,12843,12844],{"class":1388}," condition",[1155,12846,1392],{"class":1382},[1155,12848,1469],{"class":1382},[1155,12850,12851],{"class":1165},"Sunny",[1155,12853,1407],{"class":1382},[1155,12855,3232],{"class":1382},[1155,12857,12858],{"class":1157,"line":1488},[1155,12859,3669],{"class":1382},[1155,12861,12862,12864],{"class":1157,"line":1511},[1155,12863,1514],{"class":1382},[1155,12865,1517],{"class":1378},[1049,12867,12869],{"id":12868},"deploying-to-vercel","Deploying to Vercel",[1045,12871,12872],{},"Deploy your chatbot to Vercel with zero configuration:",[1146,12874,12876],{"className":1148,"code":12875,"language":1150,"meta":1151,"style":1151},"npx vercel deploy\n",[1105,12877,12878],{"__ignoreMap":1151},[1155,12879,12880,12882,12885],{"class":1157,"line":1158},[1155,12881,1162],{"class":1161},[1155,12883,12884],{"class":1165}," vercel",[1155,12886,12887],{"class":1165}," deploy\n",[1045,12889,12890],{},"Then, in the Vercel dashboard:",[1057,12892,12893,12899],{},[1060,12894,12895,12896,12898],{},"Enable ",[1063,12897,4689],{}," and add credits so requests can be processed.",[1060,12900,12901,12902,12905],{},"Add a ",[1063,12903,12904],{},"Turso"," database from the Vercel Marketplace and connect it to your project (it will provision the database and add the required environment variables automatically).",[1519,12907,12908],{},[1045,12909,12910,12911,12913,12914,12916],{},"On Vercel you don't need to manually add ",[1105,12912,1696],{},". Vercel handles the gateway configuration for deployments. Keep using ",[1105,12915,1683],{}," locally for development.",[1519,12918,12919],{"to":1134,"target":165},[1045,12920,12921,12922,1845],{},"Learn more about setting up AI Gateway in the ",[1063,12923,12924],{},"Vercel AI Gateway documentation",[1049,12926,12928],{"id":12927},"conclusion","Conclusion",[1045,12930,12931],{},"You've built a complete AI chatbot with:",[1057,12933,12934,12940,12946,12952,12957],{},[1060,12935,12936,12939],{},[1063,12937,12938],{},"A complete chat interface"," using Nuxt UI components",[1060,12941,12942,12945],{},[1063,12943,12944],{},"Real-time streaming responses"," with the AI SDK",[1060,12947,12948,12951],{},[1063,12949,12950],{},"Streaming Markdown rendering"," with Comark for rich content display",[1060,12953,12954,12956],{},[1063,12955,1083],{}," via AI Gateway",[1060,12958,12959,12962],{},[1063,12960,12961],{},"Database persistence"," with SQLite (local) \u002F Turso (production) and Drizzle ORM",[1045,12964,12965],{},"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.",[1045,12967,12968],{},[1063,12969,12970],{},"Resources:",[1057,12972,12973,12980,12987,12994,13000,13006],{},[1060,12974,12975],{},[1099,12976,12979],{"href":12977,"rel":12978},"https:\u002F\u002Fui.nuxt.com\u002Fdocs\u002Fcomponents\u002Fchat",[1103],"Nuxt UI Chat Components",[1060,12981,12982],{},[1099,12983,12986],{"href":12984,"rel":12985},"https:\u002F\u002Fhub.nuxt.com\u002Fdocs\u002Ffeatures\u002Fdatabase",[1103],"NuxtHub Database",[1060,12988,12989],{},[1099,12990,12993],{"href":12991,"rel":12992},"https:\u002F\u002Fai-sdk.dev",[1103],"AI SDK Documentation",[1060,12995,12996],{},[1099,12997,12999],{"href":1134,"rel":12998},[1103],"AI Gateway Documentation",[1060,13001,13002],{},[1099,13003,13005],{"href":1101,"rel":13004},[1103],"Nuxt AI Chat Template",[1060,13007,13008],{},[1099,13009,13011],{"href":1111,"rel":13010},[1103],"Vue AI Chat Template",[1045,13013,13014],{},"We're excited to see what you'll build!",[13016,13017,13018],"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 .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 .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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sqsOY, html code.shiki .sqsOY{--shiki-light:#8796B0;--shiki-default:#B2CCD6;--shiki-dark:#B2CCD6}html pre.shiki code .s5r3L, html code.shiki .s5r3L{--shiki-icon-url:url(https:\u002F\u002Fapi.iconify.design\u002Flucide:plus-square.svg?color=%23000)}html pre.shiki code .sS-BN, html code.shiki .sS-BN{--shiki-icon-url:url(https:\u002F\u002Fapi.iconify.design\u002Flucide:messages-square.svg?color=%23000)}html pre.shiki code .spZLw, html code.shiki .spZLw{--shiki-icon-url:url(https:\u002F\u002Fapi.iconify.design\u002Fsimple-icons:openai.svg?color=%23000)}html pre.shiki code .sVmEp, html code.shiki .sVmEp{--shiki-icon-url:url(https:\u002F\u002Fapi.iconify.design\u002Fsimple-icons:anthropic.svg?color=%23000)}html pre.shiki code .st_gQ, html code.shiki .st_gQ{--shiki-icon-url:url(https:\u002F\u002Fapi.iconify.design\u002Fsimple-icons:google.svg?color=%23000)}",{"title":1151,"searchDepth":1175,"depth":1175,"links":13020},[13021,13022,13023,13029,13034,13038,13039,13043,13044,13045,13050,13051,13052],{"id":1051,"depth":1175,"text":1052},{"id":1119,"depth":1175,"text":1120},{"id":1140,"depth":1175,"text":1141,"children":13024},[13025,13026,13027,13028],{"id":1185,"depth":1398,"text":1186},{"id":1345,"depth":1398,"text":1346},{"id":1574,"depth":1398,"text":1575},{"id":1713,"depth":1398,"text":1714},{"id":2499,"depth":1175,"text":2500,"children":13030},[13031,13032,13033],{"id":2511,"depth":1398,"text":2512},{"id":2895,"depth":1398,"text":2896},{"id":4781,"depth":1398,"text":4782},{"id":5163,"depth":1175,"text":5164,"children":13035},[13036,13037],{"id":5182,"depth":1398,"text":5183},{"id":5839,"depth":1398,"text":5840},{"id":6211,"depth":1175,"text":6212},{"id":7903,"depth":1175,"text":7904,"children":13040},[13041,13042],{"id":7910,"depth":1398,"text":7911},{"id":8070,"depth":1398,"text":8071},{"id":8578,"depth":1175,"text":8579},{"id":9153,"depth":1175,"text":9154},{"id":10579,"depth":1175,"text":10580,"children":13046},[13047,13048,13049],{"id":10590,"depth":1398,"text":10591},{"id":10862,"depth":1398,"text":10863},{"id":11129,"depth":1398,"text":11130},{"id":12630,"depth":1175,"text":12631},{"id":12868,"depth":1175,"text":12869},{"id":12927,"depth":1175,"text":12928},"Tutorial","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",{},"\u002Fblog\u002Fhow-to-build-an-ai-chat",{"title":1029,"description":13055},{"loc":13059},"blog\u002Fhow-to-build-an-ai-chat","OyA30wSPV-cwbC7iiF8bX9oTtDFRB8TfpLoapK-rtrE",1791788192140]