[{"data":1,"prerenderedAt":12602},["ShallowReactive",2],{"navigation":3,"-blog-how-to-build-an-ai-chat":969},[4],{"title":5,"path":6,"stem":7,"children":8,"page":36},"Docs","\u002Fdocs","docs",[9,163,822,863],{"title":10,"path":11,"stem":12,"children":13,"framework":16,"category":16,"description":16,"icon":30},"Get Started","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started\u002F1.index",[14,19,37,47,53,76,141],{"title":15,"path":11,"stem":12,"framework":16,"category":16,"description":17,"icon":18},"Introduction",null,"Nuxt UI is a comprehensive Vue UI component library (Nuxt optional), offering 125+ accessible, Tailwind CSS components for building modern web applications.","i-lucide-house",{"title":20,"framework":16,"category":16,"description":16,"shadow":21,"path":22,"stem":23,"children":24,"page":36},"Installation",true,"\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F1.getting-started\u002F2.installation",[25,31],{"title":20,"path":26,"stem":27,"framework":28,"category":16,"description":29,"icon":30},"\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fnuxt","docs\u002F1.getting-started\u002F2.installation\u002F1.nuxt","nuxt","Learn how to install and configure Nuxt UI in your Nuxt application.","i-lucide-square-play",{"title":20,"path":32,"stem":33,"framework":34,"category":16,"description":35,"icon":30},"\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fvue","docs\u002F1.getting-started\u002F2.installation\u002F2.vue","vue","Learn how to install and configure Nuxt UI in your Vue application, compatible with both plain Vite and Inertia.",false,{"title":38,"framework":16,"category":16,"description":16,"icon":39,"shadow":21,"path":40,"stem":41,"children":42,"page":36},"Migration","i-lucide-arrow-right-left","\u002Fdocs\u002Fgetting-started\u002Fmigration","docs\u002F1.getting-started\u002F3.migration",[43],{"title":38,"path":44,"stem":45,"framework":16,"category":16,"description":46,"icon":39},"\u002Fdocs\u002Fgetting-started\u002Fmigration\u002Fv4","docs\u002F1.getting-started\u002F3.migration\u002F1.v4","A comprehensive guide to migrate your application from Nuxt UI v3 to Nuxt UI v4.",{"title":48,"path":49,"stem":50,"framework":16,"category":16,"description":51,"icon":52},"Contribution","\u002Fdocs\u002Fgetting-started\u002Fcontribution","docs\u002F1.getting-started\u002F4.contribution","A comprehensive guide on contributing to Nuxt UI, including project structure, development workflow, and best practices.","i-lucide-handshake",{"title":54,"path":55,"stem":56,"children":57,"page":36},"Theme","\u002Fdocs\u002Fgetting-started\u002Ftheme","docs\u002F1.getting-started\u002F5.theme",[58,64,70],{"title":59,"path":60,"stem":61,"framework":16,"category":16,"description":62,"icon":63},"Design System","\u002Fdocs\u002Fgetting-started\u002Ftheme\u002Fdesign-system","docs\u002F1.getting-started\u002F5.theme\u002F1.design-system","Nuxt UI's design system uses Tailwind CSS for simple theming and easy customization.","i-lucide-palette",{"title":65,"path":66,"stem":67,"framework":16,"category":16,"description":68,"icon":69},"CSS Variables","\u002Fdocs\u002Fgetting-started\u002Ftheme\u002Fcss-variables","docs\u002F1.getting-started\u002F5.theme\u002F2.css-variables","Nuxt UI uses CSS variables as design tokens for flexible, consistent theming with built-in light and dark mode support.","i-lucide-swatch-book",{"title":71,"path":72,"stem":73,"framework":16,"category":16,"description":74,"icon":75},"Components","\u002Fdocs\u002Fgetting-started\u002Ftheme\u002Fcomponents","docs\u002F1.getting-started\u002F5.theme\u002F3.components","Learn how to customize Nuxt UI components with the Tailwind Variants API for advanced, flexible, and maintainable styling.","i-lucide-layout-grid",{"title":77,"framework":16,"category":16,"description":16,"path":78,"stem":79,"children":80,"page":36},"Integrations","\u002Fdocs\u002Fgetting-started\u002Fintegrations","docs\u002F1.getting-started\u002F6.integrations",[81,95,101,115,129,135],{"title":82,"framework":16,"category":16,"description":16,"shadow":21,"path":83,"stem":84,"children":85,"page":36},"Icons","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ficons","docs\u002F1.getting-started\u002F6.integrations\u002F1.icons",[86,91],{"title":82,"path":87,"stem":88,"framework":28,"category":16,"description":89,"icon":90},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ficons\u002Fnuxt","docs\u002F1.getting-started\u002F6.integrations\u002F1.icons\u002F1.nuxt","Nuxt UI integrates with Nuxt Icon to access over 200,000+ icons from Iconify.","i-lucide-smile",{"title":82,"path":92,"stem":93,"framework":34,"category":16,"description":94,"icon":90},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ficons\u002Fvue","docs\u002F1.getting-started\u002F6.integrations\u002F1.icons\u002F2.vue","Nuxt UI integrates with Iconify to access over 200,000+ icons.",{"title":96,"path":97,"stem":98,"framework":28,"category":16,"description":99,"icon":100},"Fonts","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ffonts","docs\u002F1.getting-started\u002F6.integrations\u002F2.fonts","Nuxt UI integrates with Nuxt Fonts to provide plug-and-play font optimization.","i-lucide-a-large-small",{"title":102,"framework":16,"category":16,"description":16,"shadow":21,"path":103,"stem":104,"children":105,"page":36},"Color Mode","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcolor-mode","docs\u002F1.getting-started\u002F6.integrations\u002F3.color-mode",[106,111],{"title":102,"path":107,"stem":108,"framework":28,"category":16,"description":109,"icon":110},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcolor-mode\u002Fnuxt","docs\u002F1.getting-started\u002F6.integrations\u002F3.color-mode\u002F1.nuxt","Nuxt UI integrates with Nuxt Color Mode to allow for easy switching between light and dark themes.","i-lucide-sun-moon",{"title":102,"path":112,"stem":113,"framework":34,"category":16,"description":114,"icon":110},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcolor-mode\u002Fvue","docs\u002F1.getting-started\u002F6.integrations\u002F3.color-mode\u002F2.vue","Nuxt UI integrates with VueUse to allow for easy switching between light and dark themes.",{"title":116,"framework":16,"category":16,"description":16,"shadow":21,"path":117,"stem":118,"children":119,"page":36},"I18n","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fi18n","docs\u002F1.getting-started\u002F6.integrations\u002F4.i18n",[120,126],{"title":121,"path":122,"stem":123,"framework":28,"category":16,"description":124,"icon":125},"Internationalization (i18n)","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fi18n\u002Fnuxt","docs\u002F1.getting-started\u002F6.integrations\u002F4.i18n\u002F1.nuxt","Nuxt UI supports 50+ locales and multi-directional (LTR\u002FRTL) internationalization.","i-lucide-languages",{"title":121,"path":127,"stem":128,"framework":34,"category":16,"description":124,"icon":125},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fi18n\u002Fvue","docs\u002F1.getting-started\u002F6.integrations\u002F4.i18n\u002F2.vue",{"title":130,"path":131,"stem":132,"framework":28,"category":16,"description":133,"icon":134},"Content","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcontent","docs\u002F1.getting-started\u002F6.integrations\u002F5.content","Nuxt UI integrates with Nuxt Content to deliver beautiful typography and consistent component styling.","i-simple-icons-markdown",{"title":136,"path":137,"stem":138,"framework":34,"category":16,"description":139,"icon":140},"SSR","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fssr","docs\u002F1.getting-started\u002F6.integrations\u002F6.ssr","Nuxt UI has first-party support for Vue SSR. This guide will help you have it fully enabled.","i-lucide-server",{"title":142,"framework":16,"category":16,"description":16,"path":143,"stem":144,"children":145,"page":36},"Agents","\u002Fdocs\u002Fgetting-started\u002Fai","docs\u002F1.getting-started\u002F7.ai",[146,151,157],{"title":147,"path":148,"stem":149,"framework":16,"category":16,"description":150,"icon":140},"MCP Server","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fmcp","docs\u002F1.getting-started\u002F7.ai\u002F1.mcp","Use Nuxt UI components in your AI assistants with Model Context Protocol support.",{"title":152,"path":153,"stem":154,"framework":16,"category":16,"description":155,"icon":156},"LLMs.txt","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fllms-txt","docs\u002F1.getting-started\u002F7.ai\u002F2.llms-txt","How to get AI tools like Cursor, Windsurf, GitHub Copilot, ChatGPT, and Claude to understand Nuxt UI components, theming, and best practices.","i-lucide-bot",{"title":158,"path":159,"stem":160,"framework":16,"category":16,"description":161,"icon":162},"Skills","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fskills","docs\u002F1.getting-started\u002F7.ai\u002F3.skills","Install Nuxt UI skills to give AI coding agents deep knowledge of components, theming, and best practices.","i-lucide-sparkles",{"title":71,"framework":16,"category":16,"description":16,"icon":164,"path":165,"stem":166,"children":167,"page":36},"i-lucide-square-code","\u002Fdocs\u002Fcomponents","docs\u002F2.components",[168,174,180,186,192,197,202,207,212,217,222,228,233,238,243,248,253,258,264,269,274,279,284,289,295,300,305,311,316,321,326,332,337,342,347,352,357,362,367,373,378,383,388,393,399,405,410,415,420,425,430,435,440,445,450,455,460,466,471,476,481,486,491,496,501,506,511,516,521,526,531,536,541,546,551,556,561,566,571,576,581,587,593,598,603,608,613,618,623,628,633,638,643,648,653,658,663,668,673,678,683,688,693,698,703,708,713,718,723,728,733,738,743,748,753,758,763,768,773,778,783,788,793,797,802,807,812,817],{"title":169,"path":170,"stem":171,"framework":16,"category":172,"description":173},"Accordion","\u002Fdocs\u002Fcomponents\u002Faccordion","docs\u002F2.components\u002Faccordion","data","A stacked set of collapsible panels.",{"title":175,"path":176,"stem":177,"framework":16,"category":178,"description":179},"Alert","\u002Fdocs\u002Fcomponents\u002Falert","docs\u002F2.components\u002Falert","element","A callout to draw user's attention.",{"title":181,"path":182,"stem":183,"framework":16,"category":184,"description":185},"App","\u002Fdocs\u002Fcomponents\u002Fapp","docs\u002F2.components\u002Fapp","layout","Wraps your app to provide global configurations and more.",{"title":187,"path":188,"stem":189,"framework":16,"category":190,"description":191},"AuthForm","\u002Fdocs\u002Fcomponents\u002Fauth-form","docs\u002F2.components\u002Fauth-form","page","A customizable Form to create login, register or password reset forms.",{"title":193,"path":194,"stem":195,"framework":16,"category":178,"description":196},"Avatar","\u002Fdocs\u002Fcomponents\u002Favatar","docs\u002F2.components\u002Favatar","An img element with fallback and Nuxt Image support.",{"title":198,"path":199,"stem":200,"framework":16,"category":178,"description":201},"AvatarGroup","\u002Fdocs\u002Fcomponents\u002Favatar-group","docs\u002F2.components\u002Favatar-group","Stack multiple avatars in a group.",{"title":203,"path":204,"stem":205,"framework":16,"category":178,"description":206},"Badge","\u002Fdocs\u002Fcomponents\u002Fbadge","docs\u002F2.components\u002Fbadge","A short text to represent a status or a category.",{"title":208,"path":209,"stem":210,"framework":16,"category":178,"description":211},"Banner","\u002Fdocs\u002Fcomponents\u002Fbanner","docs\u002F2.components\u002Fbanner","Display a banner at the top of your website to inform users about important information.",{"title":213,"path":214,"stem":215,"framework":16,"category":190,"description":216},"BlogPost","\u002Fdocs\u002Fcomponents\u002Fblog-post","docs\u002F2.components\u002Fblog-post","A customizable article to display in a blog page.",{"title":218,"path":219,"stem":220,"framework":16,"category":190,"description":221},"BlogPosts","\u002Fdocs\u002Fcomponents\u002Fblog-posts","docs\u002F2.components\u002Fblog-posts","Display a list of blog posts in a responsive grid layout.",{"title":223,"path":224,"stem":225,"framework":16,"category":226,"description":227},"Breadcrumb","\u002Fdocs\u002Fcomponents\u002Fbreadcrumb","docs\u002F2.components\u002Fbreadcrumb","navigation","A hierarchy of links to navigate through a website.",{"title":229,"path":230,"stem":231,"framework":16,"category":178,"description":232},"Button","\u002Fdocs\u002Fcomponents\u002Fbutton","docs\u002F2.components\u002Fbutton","A button element that can act as a link or trigger an action.",{"title":234,"path":235,"stem":236,"framework":16,"category":178,"description":237},"Calendar","\u002Fdocs\u002Fcomponents\u002Fcalendar","docs\u002F2.components\u002Fcalendar","A calendar component for selecting single dates, multiple dates or date ranges.",{"title":239,"path":240,"stem":241,"framework":16,"category":178,"description":242},"Card","\u002Fdocs\u002Fcomponents\u002Fcard","docs\u002F2.components\u002Fcard","Display content in a card with a header, body and footer.",{"title":244,"path":245,"stem":246,"framework":16,"category":172,"description":247},"Carousel","\u002Fdocs\u002Fcomponents\u002Fcarousel","docs\u002F2.components\u002Fcarousel","A carousel with motion and swipe built using Embla.",{"title":249,"path":250,"stem":251,"framework":16,"category":190,"description":252},"ChangelogVersion","\u002Fdocs\u002Fcomponents\u002Fchangelog-version","docs\u002F2.components\u002Fchangelog-version","A customizable article to display in a changelog.",{"title":254,"path":255,"stem":256,"framework":16,"category":190,"description":257},"ChangelogVersions","\u002Fdocs\u002Fcomponents\u002Fchangelog-versions","docs\u002F2.components\u002Fchangelog-versions","Display a list of changelog versions in a timeline.",{"title":259,"path":260,"stem":261,"framework":16,"category":262,"description":263},"Chat","\u002Fdocs\u002Fcomponents\u002Fchat","docs\u002F2.components\u002Fchat","chat","Build AI chat interfaces with streaming, reasoning, and tool calling.",{"title":265,"path":266,"stem":267,"framework":16,"category":262,"description":268},"ChatMessage","\u002Fdocs\u002Fcomponents\u002Fchat-message","docs\u002F2.components\u002Fchat-message","Display a chat message with icon, avatar, and actions.",{"title":270,"path":271,"stem":272,"framework":16,"category":262,"description":273},"ChatMessages","\u002Fdocs\u002Fcomponents\u002Fchat-messages","docs\u002F2.components\u002Fchat-messages","Display a list of chat messages, designed to work seamlessly with Vercel AI SDK.",{"title":275,"path":276,"stem":277,"framework":16,"category":262,"description":278},"ChatPalette","\u002Fdocs\u002Fcomponents\u002Fchat-palette","docs\u002F2.components\u002Fchat-palette","A chat palette to create a chatbot interface inside an overlay.",{"title":280,"path":281,"stem":282,"framework":16,"category":262,"description":283},"ChatPrompt","\u002Fdocs\u002Fcomponents\u002Fchat-prompt","docs\u002F2.components\u002Fchat-prompt","An enhanced Textarea for submitting prompts in AI chat interfaces.",{"title":285,"path":286,"stem":287,"framework":16,"category":262,"description":288},"ChatPromptSubmit","\u002Fdocs\u002Fcomponents\u002Fchat-prompt-submit","docs\u002F2.components\u002Fchat-prompt-submit","A Button for submitting chat prompts with automatic status handling.",{"title":290,"path":291,"stem":292,"framework":16,"category":262,"description":293,"badge":294},"ChatReasoning","\u002Fdocs\u002Fcomponents\u002Fchat-reasoning","docs\u002F2.components\u002Fchat-reasoning","Display a collapsible AI reasoning or thinking process.","New",{"title":296,"path":297,"stem":298,"framework":16,"category":262,"description":299,"badge":294},"ChatShimmer","\u002Fdocs\u002Fcomponents\u002Fchat-shimmer","docs\u002F2.components\u002Fchat-shimmer","Display a text shimmer animation effect.",{"title":301,"path":302,"stem":303,"framework":16,"category":262,"description":304,"badge":294},"ChatTool","\u002Fdocs\u002Fcomponents\u002Fchat-tool","docs\u002F2.components\u002Fchat-tool","Display a collapsible AI tool invocation status.",{"title":306,"path":307,"stem":308,"framework":16,"category":309,"description":310},"Checkbox","\u002Fdocs\u002Fcomponents\u002Fcheckbox","docs\u002F2.components\u002Fcheckbox","form","An input element to toggle between checked and unchecked states.",{"title":312,"path":313,"stem":314,"framework":16,"category":309,"description":315},"CheckboxGroup","\u002Fdocs\u002Fcomponents\u002Fcheckbox-group","docs\u002F2.components\u002Fcheckbox-group","A set of checklist buttons to select multiple option from a list.",{"title":317,"path":318,"stem":319,"framework":16,"category":178,"description":320},"Chip","\u002Fdocs\u002Fcomponents\u002Fchip","docs\u002F2.components\u002Fchip","An indicator of a numeric value or a state.",{"title":322,"path":323,"stem":324,"framework":16,"category":178,"description":325},"Collapsible","\u002Fdocs\u002Fcomponents\u002Fcollapsible","docs\u002F2.components\u002Fcollapsible","A collapsible element to toggle visibility of its content.",{"title":327,"path":328,"stem":329,"framework":16,"category":330,"description":331},"ColorModeAvatar","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-avatar","docs\u002F2.components\u002Fcolor-mode-avatar","color-mode","An Avatar with a different source for light and dark mode.",{"title":333,"path":334,"stem":335,"framework":16,"category":330,"description":336},"ColorModeButton","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-button","docs\u002F2.components\u002Fcolor-mode-button","A Button to switch between light and dark mode.",{"title":338,"path":339,"stem":340,"framework":16,"category":330,"description":341},"ColorModeImage","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-image","docs\u002F2.components\u002Fcolor-mode-image","An image element with a different source for light and dark mode.",{"title":343,"path":344,"stem":345,"framework":16,"category":330,"description":346},"ColorModeSelect","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-select","docs\u002F2.components\u002Fcolor-mode-select","A Select to switch between system, dark & light mode.",{"title":348,"path":349,"stem":350,"framework":16,"category":330,"description":351},"ColorModeSwitch","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-switch","docs\u002F2.components\u002Fcolor-mode-switch","A switch to toggle between light and dark mode.",{"title":353,"path":354,"stem":355,"framework":16,"category":309,"description":356},"ColorPicker","\u002Fdocs\u002Fcomponents\u002Fcolor-picker","docs\u002F2.components\u002Fcolor-picker","A component to select a color.",{"title":358,"path":359,"stem":360,"framework":16,"category":226,"description":361},"CommandPalette","\u002Fdocs\u002Fcomponents\u002Fcommand-palette","docs\u002F2.components\u002Fcommand-palette","A command palette with full-text search powered by Fuse.js for efficient fuzzy matching.",{"title":363,"path":364,"stem":365,"framework":16,"category":184,"description":366},"Container","\u002Fdocs\u002Fcomponents\u002Fcontainer","docs\u002F2.components\u002Fcontainer","A container lets you center and constrain the width of your content.",{"title":368,"path":369,"stem":370,"framework":28,"category":371,"description":372},"ContentNavigation","\u002Fdocs\u002Fcomponents\u002Fcontent-navigation","docs\u002F2.components\u002Fcontent-navigation","content","An accordion-style navigation component for organizing page links.",{"title":374,"path":375,"stem":376,"framework":28,"category":371,"description":377},"ContentSearch","\u002Fdocs\u002Fcomponents\u002Fcontent-search","docs\u002F2.components\u002Fcontent-search","A ready to use CommandPalette to add to your documentation.",{"title":379,"path":380,"stem":381,"framework":28,"category":371,"description":382},"ContentSearchButton","\u002Fdocs\u002Fcomponents\u002Fcontent-search-button","docs\u002F2.components\u002Fcontent-search-button","A pre-styled Button to open the ContentSearch modal.",{"title":384,"path":385,"stem":386,"framework":28,"category":371,"description":387},"ContentSurround","\u002Fdocs\u002Fcomponents\u002Fcontent-surround","docs\u002F2.components\u002Fcontent-surround","A pair of prev and next links to navigate between pages.",{"title":389,"path":390,"stem":391,"framework":28,"category":371,"description":392},"ContentToc","\u002Fdocs\u002Fcomponents\u002Fcontent-toc","docs\u002F2.components\u002Fcontent-toc","A sticky Table of Contents with automatic active anchor link highlighting.",{"title":394,"path":395,"stem":396,"framework":16,"category":397,"description":398},"ContextMenu","\u002Fdocs\u002Fcomponents\u002Fcontext-menu","docs\u002F2.components\u002Fcontext-menu","overlay","A menu to display actions when right-clicking on an element.",{"title":400,"path":401,"stem":402,"framework":16,"category":403,"description":404},"DashboardGroup","\u002Fdocs\u002Fcomponents\u002Fdashboard-group","docs\u002F2.components\u002Fdashboard-group","dashboard","A fixed layout component that provides context for dashboard components with sidebar state management and persistence.",{"title":406,"path":407,"stem":408,"framework":16,"category":403,"description":409},"DashboardNavbar","\u002Fdocs\u002Fcomponents\u002Fdashboard-navbar","docs\u002F2.components\u002Fdashboard-navbar","A responsive navbar to display in a dashboard.",{"title":411,"path":412,"stem":413,"framework":16,"category":403,"description":414},"DashboardPanel","\u002Fdocs\u002Fcomponents\u002Fdashboard-panel","docs\u002F2.components\u002Fdashboard-panel","A resizable panel to display in a dashboard.",{"title":416,"path":417,"stem":418,"framework":16,"category":403,"description":419},"DashboardResizeHandle","\u002Fdocs\u002Fcomponents\u002Fdashboard-resize-handle","docs\u002F2.components\u002Fdashboard-resize-handle","A handle to resize a sidebar or panel.",{"title":421,"path":422,"stem":423,"framework":16,"category":403,"description":424},"DashboardSearch","\u002Fdocs\u002Fcomponents\u002Fdashboard-search","docs\u002F2.components\u002Fdashboard-search","A ready to use CommandPalette to add to your dashboard.",{"title":426,"path":427,"stem":428,"framework":16,"category":403,"description":429},"DashboardSearchButton","\u002Fdocs\u002Fcomponents\u002Fdashboard-search-button","docs\u002F2.components\u002Fdashboard-search-button","A pre-styled Button to open the DashboardSearch modal.",{"title":431,"path":432,"stem":433,"framework":16,"category":403,"description":434},"DashboardSidebar","\u002Fdocs\u002Fcomponents\u002Fdashboard-sidebar","docs\u002F2.components\u002Fdashboard-sidebar","A resizable and collapsible sidebar to display in a dashboard.",{"title":436,"path":437,"stem":438,"framework":16,"category":403,"description":439},"DashboardSidebarCollapse","\u002Fdocs\u002Fcomponents\u002Fdashboard-sidebar-collapse","docs\u002F2.components\u002Fdashboard-sidebar-collapse","A Button to collapse the sidebar on desktop.",{"title":441,"path":442,"stem":443,"framework":16,"category":403,"description":444},"DashboardSidebarToggle","\u002Fdocs\u002Fcomponents\u002Fdashboard-sidebar-toggle","docs\u002F2.components\u002Fdashboard-sidebar-toggle","A Button to toggle the sidebar on mobile.",{"title":446,"path":447,"stem":448,"framework":16,"category":403,"description":449},"DashboardToolbar","\u002Fdocs\u002Fcomponents\u002Fdashboard-toolbar","docs\u002F2.components\u002Fdashboard-toolbar","A toolbar to display under the navbar in a dashboard.",{"title":451,"path":452,"stem":453,"framework":16,"category":397,"description":454},"Drawer","\u002Fdocs\u002Fcomponents\u002Fdrawer","docs\u002F2.components\u002Fdrawer","A drawer that smoothly slides in & out of the screen.",{"title":456,"path":457,"stem":458,"framework":16,"category":397,"description":459},"DropdownMenu","\u002Fdocs\u002Fcomponents\u002Fdropdown-menu","docs\u002F2.components\u002Fdropdown-menu","A menu to display actions when clicking on an element.",{"title":461,"path":462,"stem":463,"framework":16,"category":464,"description":465},"Editor","\u002Fdocs\u002Fcomponents\u002Feditor","docs\u002F2.components\u002Feditor","editor","A rich text editor component based on TipTap with support for markdown, HTML, and JSON content types.",{"title":467,"path":468,"stem":469,"framework":16,"category":464,"description":470},"EditorDragHandle","\u002Fdocs\u002Fcomponents\u002Feditor-drag-handle","docs\u002F2.components\u002Feditor-drag-handle","A draggable handle for reordering and selecting blocks in the editor.",{"title":472,"path":473,"stem":474,"framework":16,"category":464,"description":475},"EditorEmojiMenu","\u002Fdocs\u002Fcomponents\u002Feditor-emoji-menu","docs\u002F2.components\u002Feditor-emoji-menu","An emoji picker menu that displays emoji suggestions when typing the : character in the editor.",{"title":477,"path":478,"stem":479,"framework":16,"category":464,"description":480},"EditorMentionMenu","\u002Fdocs\u002Fcomponents\u002Feditor-mention-menu","docs\u002F2.components\u002Feditor-mention-menu","A mention menu that displays user suggestions when typing a trigger character in the editor.",{"title":482,"path":483,"stem":484,"framework":16,"category":464,"description":485},"EditorSuggestionMenu","\u002Fdocs\u002Fcomponents\u002Feditor-suggestion-menu","docs\u002F2.components\u002Feditor-suggestion-menu","A command menu that displays formatting and action suggestions when typing the \u002F character in the editor.",{"title":487,"path":488,"stem":489,"framework":16,"category":464,"description":490},"EditorToolbar","\u002Fdocs\u002Fcomponents\u002Feditor-toolbar","docs\u002F2.components\u002Feditor-toolbar","A customizable toolbar for editor actions that can be displayed as fixed, bubble, or floating menu.",{"title":492,"path":493,"stem":494,"framework":16,"category":172,"description":495},"Empty","\u002Fdocs\u002Fcomponents\u002Fempty","docs\u002F2.components\u002Fempty","A component to display an empty state.",{"title":497,"path":498,"stem":499,"framework":16,"category":184,"description":500},"Error","\u002Fdocs\u002Fcomponents\u002Ferror","docs\u002F2.components\u002Ferror","A pre-built error component with NuxtError support.",{"title":502,"path":503,"stem":504,"framework":16,"category":178,"description":505},"FieldGroup","\u002Fdocs\u002Fcomponents\u002Ffield-group","docs\u002F2.components\u002Ffield-group","Group multiple button-like elements together.",{"title":507,"path":508,"stem":509,"framework":16,"category":309,"description":510},"FileUpload","\u002Fdocs\u002Fcomponents\u002Ffile-upload","docs\u002F2.components\u002Ffile-upload","An input element to upload files.",{"title":512,"path":513,"stem":514,"framework":16,"category":184,"description":515},"Footer","\u002Fdocs\u002Fcomponents\u002Ffooter","docs\u002F2.components\u002Ffooter","A responsive footer component.",{"title":517,"path":518,"stem":519,"framework":16,"category":226,"description":520},"FooterColumns","\u002Fdocs\u002Fcomponents\u002Ffooter-columns","docs\u002F2.components\u002Ffooter-columns","A list of links as columns to display in your Footer.",{"title":522,"path":523,"stem":524,"framework":16,"category":309,"description":525},"Form","\u002Fdocs\u002Fcomponents\u002Fform","docs\u002F2.components\u002Fform","A form component with built-in validation and submission handling.",{"title":527,"path":528,"stem":529,"framework":16,"category":309,"description":530},"FormField","\u002Fdocs\u002Fcomponents\u002Fform-field","docs\u002F2.components\u002Fform-field","A wrapper for form elements that provides validation and error handling.",{"title":532,"path":533,"stem":534,"framework":16,"category":184,"description":535},"Header","\u002Fdocs\u002Fcomponents\u002Fheader","docs\u002F2.components\u002Fheader","A responsive header component.",{"title":537,"path":538,"stem":539,"framework":16,"category":178,"description":540},"Icon","\u002Fdocs\u002Fcomponents\u002Ficon","docs\u002F2.components\u002Ficon","A component to display any icon from Iconify or another component.",{"title":542,"path":543,"stem":544,"framework":16,"category":309,"description":545},"Input","\u002Fdocs\u002Fcomponents\u002Finput","docs\u002F2.components\u002Finput","An input element to enter text.",{"title":547,"path":548,"stem":549,"framework":16,"category":309,"description":550},"InputDate","\u002Fdocs\u002Fcomponents\u002Finput-date","docs\u002F2.components\u002Finput-date","An input component for date selection.",{"title":552,"path":553,"stem":554,"framework":16,"category":309,"description":555},"InputMenu","\u002Fdocs\u002Fcomponents\u002Finput-menu","docs\u002F2.components\u002Finput-menu","An autocomplete input with real-time suggestions.",{"title":557,"path":558,"stem":559,"framework":16,"category":309,"description":560},"InputNumber","\u002Fdocs\u002Fcomponents\u002Finput-number","docs\u002F2.components\u002Finput-number","An input for numerical values with a customizable range.",{"title":562,"path":563,"stem":564,"framework":16,"category":309,"description":565},"InputTags","\u002Fdocs\u002Fcomponents\u002Finput-tags","docs\u002F2.components\u002Finput-tags","An input element that displays interactive tags.",{"title":567,"path":568,"stem":569,"framework":16,"category":309,"description":570},"InputTime","\u002Fdocs\u002Fcomponents\u002Finput-time","docs\u002F2.components\u002Finput-time","An input for selecting a time.",{"title":572,"path":573,"stem":574,"framework":16,"category":178,"description":575},"Kbd","\u002Fdocs\u002Fcomponents\u002Fkbd","docs\u002F2.components\u002Fkbd","A kbd element to display a keyboard key.",{"title":577,"path":578,"stem":579,"framework":16,"category":226,"description":580},"Link","\u002Fdocs\u002Fcomponents\u002Flink","docs\u002F2.components\u002Flink","A wrapper around \u003CNuxtLink> with extra props.",{"title":582,"path":583,"stem":584,"framework":16,"category":309,"description":585,"badge":586},"Listbox","\u002Fdocs\u002Fcomponents\u002Flistbox","docs\u002F2.components\u002Flistbox","A selectable list of items with search, virtualization and rich item rendering.","Soon",{"title":588,"path":589,"stem":590,"framework":16,"category":591,"description":592},"LocaleSelect","\u002Fdocs\u002Fcomponents\u002Flocale-select","docs\u002F2.components\u002Flocale-select","i18n","A Select to switch between locales.",{"title":594,"path":595,"stem":596,"framework":16,"category":184,"description":597},"Main","\u002Fdocs\u002Fcomponents\u002Fmain","docs\u002F2.components\u002Fmain","A main element that fills the available viewport height.",{"title":599,"path":600,"stem":601,"framework":16,"category":172,"description":602},"Marquee","\u002Fdocs\u002Fcomponents\u002Fmarquee","docs\u002F2.components\u002Fmarquee","A component to create infinite scrolling content.",{"title":604,"path":605,"stem":606,"framework":16,"category":397,"description":607},"Modal","\u002Fdocs\u002Fcomponents\u002Fmodal","docs\u002F2.components\u002Fmodal","A dialog window that can be used to display a message or request user input.",{"title":609,"path":610,"stem":611,"framework":16,"category":226,"description":612},"NavigationMenu","\u002Fdocs\u002Fcomponents\u002Fnavigation-menu","docs\u002F2.components\u002Fnavigation-menu","A list of links that can be displayed horizontally or vertically.",{"title":614,"path":615,"stem":616,"framework":16,"category":190,"description":617},"Page","\u002Fdocs\u002Fcomponents\u002Fpage","docs\u002F2.components\u002Fpage","A grid layout for your pages with left and right columns.",{"title":619,"path":620,"stem":621,"framework":16,"category":190,"description":622},"PageAnchors","\u002Fdocs\u002Fcomponents\u002Fpage-anchors","docs\u002F2.components\u002Fpage-anchors","A list of anchors to be displayed in the page.",{"title":624,"path":625,"stem":626,"framework":16,"category":190,"description":627},"PageAside","\u002Fdocs\u002Fcomponents\u002Fpage-aside","docs\u002F2.components\u002Fpage-aside","A sticky aside to display your page navigation.",{"title":629,"path":630,"stem":631,"framework":16,"category":190,"description":632},"PageBody","\u002Fdocs\u002Fcomponents\u002Fpage-body","docs\u002F2.components\u002Fpage-body","The main content of your page.",{"title":634,"path":635,"stem":636,"framework":16,"category":190,"description":637},"PageCard","\u002Fdocs\u002Fcomponents\u002Fpage-card","docs\u002F2.components\u002Fpage-card","A pre-styled card component that displays a title, description and optional link.",{"title":639,"path":640,"stem":641,"framework":16,"category":190,"description":642},"PageColumns","\u002Fdocs\u002Fcomponents\u002Fpage-columns","docs\u002F2.components\u002Fpage-columns","A responsive multi-column layout system for organizing content side-by-side.",{"title":644,"path":645,"stem":646,"framework":16,"category":190,"description":647},"PageCTA","\u002Fdocs\u002Fcomponents\u002Fpage-cta","docs\u002F2.components\u002Fpage-cta","A call to action section to display in your pages.",{"title":649,"path":650,"stem":651,"framework":16,"category":190,"description":652},"PageFeature","\u002Fdocs\u002Fcomponents\u002Fpage-feature","docs\u002F2.components\u002Fpage-feature","A component to showcase key features of your application.",{"title":654,"path":655,"stem":656,"framework":16,"category":190,"description":657},"PageGrid","\u002Fdocs\u002Fcomponents\u002Fpage-grid","docs\u002F2.components\u002Fpage-grid","A responsive grid system for displaying content in a flexible layout.",{"title":659,"path":660,"stem":661,"framework":16,"category":190,"description":662},"PageHeader","\u002Fdocs\u002Fcomponents\u002Fpage-header","docs\u002F2.components\u002Fpage-header","A responsive header for your pages.",{"title":664,"path":665,"stem":666,"framework":16,"category":190,"description":667},"PageHero","\u002Fdocs\u002Fcomponents\u002Fpage-hero","docs\u002F2.components\u002Fpage-hero","A responsive hero for your pages.",{"title":669,"path":670,"stem":671,"framework":16,"category":190,"description":672},"PageLinks","\u002Fdocs\u002Fcomponents\u002Fpage-links","docs\u002F2.components\u002Fpage-links","A list of links to be displayed in the page.",{"title":674,"path":675,"stem":676,"framework":16,"category":190,"description":677},"PageList","\u002Fdocs\u002Fcomponents\u002Fpage-list","docs\u002F2.components\u002Fpage-list","A vertical list layout for displaying content in a stacked format.",{"title":679,"path":680,"stem":681,"framework":16,"category":190,"description":682},"PageLogos","\u002Fdocs\u002Fcomponents\u002Fpage-logos","docs\u002F2.components\u002Fpage-logos","A list of logos or images to display on your pages.",{"title":684,"path":685,"stem":686,"framework":16,"category":190,"description":687},"PageSection","\u002Fdocs\u002Fcomponents\u002Fpage-section","docs\u002F2.components\u002Fpage-section","A responsive section for your pages.",{"title":689,"path":690,"stem":691,"framework":16,"category":226,"description":692},"Pagination","\u002Fdocs\u002Fcomponents\u002Fpagination","docs\u002F2.components\u002Fpagination","A list of buttons or links to navigate through pages.",{"title":694,"path":695,"stem":696,"framework":16,"category":309,"description":697},"PinInput","\u002Fdocs\u002Fcomponents\u002Fpin-input","docs\u002F2.components\u002Fpin-input","An input element to enter a pin.",{"title":699,"path":700,"stem":701,"framework":16,"category":397,"description":702},"Popover","\u002Fdocs\u002Fcomponents\u002Fpopover","docs\u002F2.components\u002Fpopover","A non-modal dialog that floats around a trigger element.",{"title":704,"path":705,"stem":706,"framework":16,"category":190,"description":707},"PricingPlan","\u002Fdocs\u002Fcomponents\u002Fpricing-plan","docs\u002F2.components\u002Fpricing-plan","A customizable pricing plan to display in a pricing page.",{"title":709,"path":710,"stem":711,"framework":16,"category":190,"description":712},"PricingPlans","\u002Fdocs\u002Fcomponents\u002Fpricing-plans","docs\u002F2.components\u002Fpricing-plans","Display a list of pricing plans in a responsive grid layout.",{"title":714,"path":715,"stem":716,"framework":16,"category":190,"description":717},"PricingTable","\u002Fdocs\u002Fcomponents\u002Fpricing-table","docs\u002F2.components\u002Fpricing-table","A responsive pricing table component that displays tiered pricing plans with feature comparisons.",{"title":719,"path":720,"stem":721,"framework":16,"category":178,"description":722},"Progress","\u002Fdocs\u002Fcomponents\u002Fprogress","docs\u002F2.components\u002Fprogress","An indicator showing the progress of a task.",{"title":724,"path":725,"stem":726,"framework":16,"category":309,"description":727},"RadioGroup","\u002Fdocs\u002Fcomponents\u002Fradio-group","docs\u002F2.components\u002Fradio-group","A set of radio buttons to select a single option from a list.",{"title":729,"path":730,"stem":731,"framework":16,"category":172,"description":732},"ScrollArea","\u002Fdocs\u002Fcomponents\u002Fscroll-area","docs\u002F2.components\u002Fscroll-area","A flexible scroll container with virtualization support.",{"title":734,"path":735,"stem":736,"framework":16,"category":309,"description":737},"Select","\u002Fdocs\u002Fcomponents\u002Fselect","docs\u002F2.components\u002Fselect","A select element to choose from a list of options.",{"title":739,"path":740,"stem":741,"framework":16,"category":309,"description":742},"SelectMenu","\u002Fdocs\u002Fcomponents\u002Fselect-menu","docs\u002F2.components\u002Fselect-menu","An advanced searchable select element.",{"title":744,"path":745,"stem":746,"framework":16,"category":178,"description":747},"Separator","\u002Fdocs\u002Fcomponents\u002Fseparator","docs\u002F2.components\u002Fseparator","Separates content horizontally or vertically.",{"title":749,"path":750,"stem":751,"framework":16,"category":184,"description":752,"badge":294},"Sidebar","\u002Fdocs\u002Fcomponents\u002Fsidebar","docs\u002F2.components\u002Fsidebar","A collapsible sidebar with multiple visual variants.",{"title":754,"path":755,"stem":756,"framework":16,"category":178,"description":757},"Skeleton","\u002Fdocs\u002Fcomponents\u002Fskeleton","docs\u002F2.components\u002Fskeleton","A placeholder to show while content is loading.",{"title":759,"path":760,"stem":761,"framework":16,"category":397,"description":762},"Slideover","\u002Fdocs\u002Fcomponents\u002Fslideover","docs\u002F2.components\u002Fslideover","A dialog that slides in from any side of the screen.",{"title":764,"path":765,"stem":766,"framework":16,"category":309,"description":767},"Slider","\u002Fdocs\u002Fcomponents\u002Fslider","docs\u002F2.components\u002Fslider","An input to select a numeric value within a range.",{"title":769,"path":770,"stem":771,"framework":16,"category":226,"description":772},"Stepper","\u002Fdocs\u002Fcomponents\u002Fstepper","docs\u002F2.components\u002Fstepper","A set of steps that are used to indicate progress through a multi-step process.",{"title":774,"path":775,"stem":776,"framework":16,"category":309,"description":777},"Switch","\u002Fdocs\u002Fcomponents\u002Fswitch","docs\u002F2.components\u002Fswitch","A control that toggles between two states.",{"title":779,"path":780,"stem":781,"framework":16,"category":172,"description":782},"Table","\u002Fdocs\u002Fcomponents\u002Ftable","docs\u002F2.components\u002Ftable","A responsive table element to display data in rows and columns.",{"title":784,"path":785,"stem":786,"framework":16,"category":226,"description":787},"Tabs","\u002Fdocs\u002Fcomponents\u002Ftabs","docs\u002F2.components\u002Ftabs","A set of tab panels that are displayed one at a time.",{"title":789,"path":790,"stem":791,"framework":16,"category":309,"description":792},"Textarea","\u002Fdocs\u002Fcomponents\u002Ftextarea","docs\u002F2.components\u002Ftextarea","A textarea element to input multi-line text.",{"title":54,"path":794,"stem":795,"framework":16,"category":184,"description":796},"\u002Fdocs\u002Fcomponents\u002Ftheme","docs\u002F2.components\u002Ftheme","A headless component to theme child components.",{"title":798,"path":799,"stem":800,"framework":16,"category":172,"description":801},"Timeline","\u002Fdocs\u002Fcomponents\u002Ftimeline","docs\u002F2.components\u002Ftimeline","A component that displays a sequence of events with dates, titles, icons or avatars.",{"title":803,"path":804,"stem":805,"framework":16,"category":397,"description":806},"Toast","\u002Fdocs\u002Fcomponents\u002Ftoast","docs\u002F2.components\u002Ftoast","A succinct message to provide information or feedback to the user.",{"title":808,"path":809,"stem":810,"framework":16,"category":397,"description":811},"Tooltip","\u002Fdocs\u002Fcomponents\u002Ftooltip","docs\u002F2.components\u002Ftooltip","A popup that reveals information when hovering over an element.",{"title":813,"path":814,"stem":815,"framework":16,"category":172,"description":816},"Tree","\u002Fdocs\u002Fcomponents\u002Ftree","docs\u002F2.components\u002Ftree","A tree view component to display and interact with hierarchical data structures.",{"title":818,"path":819,"stem":820,"framework":16,"category":172,"description":821},"User","\u002Fdocs\u002Fcomponents\u002Fuser","docs\u002F2.components\u002Fuser","Display user information with name, description and avatar.",{"title":823,"framework":16,"category":16,"description":16,"icon":824,"path":825,"stem":826,"children":827,"page":36},"Composables","i-lucide-square-function","\u002Fdocs\u002Fcomposables","docs\u002F3.composables",[828,833,838,843,848,853,858],{"title":829,"path":830,"stem":831,"framework":16,"category":16,"description":832},"defineLocale","\u002Fdocs\u002Fcomposables\u002Fdefine-locale","docs\u002F3.composables\u002Fdefine-locale","A utility to create a custom locale for your app.",{"title":834,"path":835,"stem":836,"framework":16,"category":16,"description":837},"defineShortcuts","\u002Fdocs\u002Fcomposables\u002Fdefine-shortcuts","docs\u002F3.composables\u002Fdefine-shortcuts","A composable to define keyboard shortcuts in your app.",{"title":839,"path":840,"stem":841,"framework":16,"category":16,"description":842},"extendLocale","\u002Fdocs\u002Fcomposables\u002Fextend-locale","docs\u002F3.composables\u002Fextend-locale","A utility to extend an existing locale with custom translations.",{"title":844,"path":845,"stem":846,"framework":16,"category":16,"description":847},"extractShortcuts","\u002Fdocs\u002Fcomposables\u002Fextract-shortcuts","docs\u002F3.composables\u002Fextract-shortcuts","A utility to extract keyboard shortcuts from menu items.",{"title":849,"path":850,"stem":851,"framework":16,"category":16,"description":852},"useOverlay","\u002Fdocs\u002Fcomposables\u002Fuse-overlay","docs\u002F3.composables\u002Fuse-overlay","A composable to programmatically control overlays.",{"title":854,"path":855,"stem":856,"framework":16,"category":16,"description":857,"badge":294},"useScrollShadow","\u002Fdocs\u002Fcomposables\u002Fuse-scroll-shadow","docs\u002F3.composables\u002Fuse-scroll-shadow","A composable to apply scroll shadow effects on any scrollable element.",{"title":859,"path":860,"stem":861,"framework":16,"category":16,"description":862},"useToast","\u002Fdocs\u002Fcomposables\u002Fuse-toast","docs\u002F3.composables\u002Fuse-toast","A composable to display toast notifications in your app.",{"title":864,"path":865,"stem":866,"children":867,"framework":16,"category":16,"description":16,"icon":968},"Typography","\u002Fdocs\u002Ftypography","docs\u002F4.typography\u002F1.index",[868,870,875,880,885,890,895,899,904,908,913,918,923,928,933,937,942,946,950,954,959,964],{"title":15,"path":865,"stem":866,"framework":16,"category":16,"description":869},"Beautiful typography components and utilities to style your content with Nuxt UI.",{"title":871,"path":872,"stem":873,"framework":16,"category":16,"description":874},"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":876,"path":877,"stem":878,"framework":16,"category":16,"description":879},"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":881,"path":882,"stem":883,"framework":16,"category":16,"description":884},"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":886,"path":887,"stem":888,"framework":16,"category":16,"description":889},"Code","\u002Fdocs\u002Ftypography\u002Fcode","docs\u002F4.typography\u002F5.code","Display inline code and syntax-highlighted code blocks with copy-to-clipboard support.",{"title":169,"path":891,"stem":892,"framework":16,"category":893,"description":894},"\u002Fdocs\u002Ftypography\u002Faccordion","docs\u002F4.typography\u002Faccordion","components","Create expandable content sections for better information organization.",{"title":203,"path":896,"stem":897,"framework":16,"category":893,"description":898},"\u002Fdocs\u002Ftypography\u002Fbadge","docs\u002F4.typography\u002Fbadge","Display version numbers, status labels, and tags within your content.",{"title":900,"path":901,"stem":902,"framework":16,"category":893,"description":903},"Callout","\u002Fdocs\u002Ftypography\u002Fcallout","docs\u002F4.typography\u002Fcallout","Highlight important information with eye-catching colored boxes and icons.",{"title":239,"path":905,"stem":906,"framework":16,"category":893,"description":907},"\u002Fdocs\u002Ftypography\u002Fcard","docs\u002F4.typography\u002Fcard","Create highlighted content blocks with optional links and navigation.",{"title":909,"path":910,"stem":911,"framework":16,"category":893,"description":912},"CardGroup","\u002Fdocs\u002Ftypography\u002Fcard-group","docs\u002F4.typography\u002Fcard-group","Organize multiple cards in responsive grid layouts for better content presentation.",{"title":914,"path":915,"stem":916,"framework":16,"category":893,"description":917},"CodeCollapse","\u002Fdocs\u002Ftypography\u002Fcode-collapse","docs\u002F4.typography\u002Fcode-collapse","Make long code blocks collapsible to save space and improve readability.",{"title":919,"path":920,"stem":921,"framework":16,"category":893,"description":922},"CodeGroup","\u002Fdocs\u002Ftypography\u002Fcode-group","docs\u002F4.typography\u002Fcode-group","Group multiple code examples in tabbed interfaces for easy comparison.",{"title":924,"path":925,"stem":926,"framework":16,"category":893,"description":927},"CodePreview","\u002Fdocs\u002Ftypography\u002Fcode-preview","docs\u002F4.typography\u002Fcode-preview","Display code examples with a preview and their source for clearer documentation.",{"title":929,"path":930,"stem":931,"framework":16,"category":893,"description":932},"CodeTree","\u002Fdocs\u002Ftypography\u002Fcode-tree","docs\u002F4.typography\u002Fcode-tree","Visualize file and folder structures with syntax-highlighted code.",{"title":322,"path":934,"stem":935,"framework":16,"category":893,"description":936},"\u002Fdocs\u002Ftypography\u002Fcollapsible","docs\u002F4.typography\u002Fcollapsible","Toggle content visibility with smooth expand and collapse animations.",{"title":938,"path":939,"stem":940,"framework":16,"category":893,"description":941},"Field","\u002Fdocs\u002Ftypography\u002Ffield","docs\u002F4.typography\u002Ffield","Document API parameters, props, and configuration options clearly.",{"title":502,"path":943,"stem":944,"framework":16,"category":893,"description":945},"\u002Fdocs\u002Ftypography\u002Ffield-group","docs\u002F4.typography\u002Ffield-group","Group related fields together for comprehensive API documentation.",{"title":537,"path":947,"stem":948,"framework":16,"category":893,"description":949},"\u002Fdocs\u002Ftypography\u002Ficon","docs\u002F4.typography\u002Ficon","Display icons from popular icon libraries to enhance your content.",{"title":572,"path":951,"stem":952,"framework":16,"category":893,"description":953},"\u002Fdocs\u002Ftypography\u002Fkbd","docs\u002F4.typography\u002Fkbd","Display keyboard shortcuts and key combinations with proper styling.",{"title":955,"path":956,"stem":957,"framework":16,"category":893,"description":958,"badge":586},"Prompt","\u002Fdocs\u002Ftypography\u002Fprompt","docs\u002F4.typography\u002Fprompt","Display pre-built AI prompts with one-click copy and IDE integration.",{"title":960,"path":961,"stem":962,"framework":16,"category":893,"description":963},"Steps","\u002Fdocs\u002Ftypography\u002Fsteps","docs\u002F4.typography\u002Fsteps","Transform headings into numbered step-by-step guides and tutorials.",{"title":784,"path":965,"stem":966,"framework":16,"category":893,"description":967},"\u002Fdocs\u002Ftypography\u002Ftabs","docs\u002F4.typography\u002Ftabs","Organize related content in interactive tabbed interfaces.","i-lucide-square-pilcrow",{"id":970,"title":971,"authors":972,"body":983,"date":12592,"description":12593,"extension":12594,"image":12595,"meta":12596,"navigation":36,"path":12598,"seo":12599,"stem":12600,"__hash__":12601},"posts\u002Fblog\u002Fhow-to-build-an-ai-chat.md","Build an AI Chatbot with Nuxt, Nuxt UI, and AI SDK",[973,978],{"name":974,"avatar":975,"to":977},"Hugo Richard",{"src":976},"https:\u002F\u002Fgithub.com\u002Fhugorcd.png","https:\u002F\u002Fx.com\u002Fhugorcd",{"name":979,"avatar":980,"to":982},"Benjamin Canac",{"src":981},"https:\u002F\u002Fgithub.com\u002Fbenjamincanac.png","https:\u002F\u002Fx.com\u002Fbenjamincanac",{"type":984,"value":985,"toc":12558},"minimark",[986,990,995,998,1033,1059,1063,1066,1080,1084,1087,1124,1129,1132,1285,1289,1296,1460,1472,1475,1514,1518,1525,1620,1627,1644,1653,1657,1671,2408,2411,2429,2439,2443,2451,2455,2466,2835,2839,2866,4604,4607,4612,4619,4624,4635,4640,4649,4667,4672,4687,4700,4704,4707,5082,5086,5101,5105,5113,5686,5693,5718,5722,5750,5947,5954,5957,6090,6094,6112,7530,7533,7538,7549,7587,7602,7607,7614,7628,7633,7660,7665,7672,7683,7687,7690,7694,7697,7850,7854,7879,8357,8361,8900,8904,10213,10222,10226,10233,10237,10247,10505,10509,10517,10764,10768,10771,12162,12166,12169,12174,12183,12188,12197,12400,12404,12407,12422,12425,12440,12455,12464,12468,12471,12502,12505,12510,12551,12554],[987,988,989],"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.",[991,992,994],"h2",{"id":993},"what-were-building","What we're building",[987,996,997],{},"By the end of this tutorial, you'll have a fully functional AI chatbot with:",[999,1000,1001,1009,1015,1021,1027],"ul",{},[1002,1003,1004,1008],"li",{},[1005,1006,1007],"strong",{},"Streaming responses"," that appear in real-time as the AI generates them",[1002,1010,1011,1014],{},[1005,1012,1013],{},"A beautiful chat interface"," built with Nuxt UI's purpose-built chat components",[1002,1016,1017,1020],{},[1005,1018,1019],{},"Markdown rendering"," for rich AI responses with code highlighting",[1002,1022,1023,1026],{},[1005,1024,1025],{},"Multi-model support"," allowing users to switch between OpenAI, Anthropic, and Google models",[1002,1028,1029,1032],{},[1005,1030,1031],{},"Server-side AI integration"," using Nitro API routes and the AI SDK",[1034,1035,1037],"callout",{"icon":1036},"i-simple-icons-github",[987,1038,1039,1040,1050,1051,1058],{},"Check out the ",[1041,1042,1046],"a",{"href":1043,"rel":1044},"https:\u002F\u002Fgithub.com\u002Fnuxt-ui-templates\u002Fchat",[1045],"nofollow",[1047,1048,1049],"code",{},"Nuxt"," and ",[1041,1052,1055],{"href":1053,"rel":1054},"https:\u002F\u002Fgithub.com\u002Fnuxt-ui-templates\u002Fchat-vue",[1045],[1047,1056,1057],{},"Vue"," AI Chat templates on GitHub for production-ready implementations with authentication, database persistence, and more.",[991,1060,1062],{"id":1061},"prerequisites","Prerequisites",[987,1064,1065],{},"Before we start, make sure you have:",[999,1067,1068,1071],{},[1002,1069,1070],{},"Node.js 20+ installed",[1002,1072,1073,1074,1079],{},"A ",[1041,1075,1078],{"href":1076,"rel":1077},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fai-gateway",[1045],"Vercel AI Gateway"," API key (provides access to multiple AI providers through a single endpoint)",[991,1081,1083],{"id":1082},"project-setup","Project setup",[987,1085,1086],{},"Start by creating a new Nuxt project:",[1088,1089,1094],"pre",{"className":1090,"code":1091,"language":1092,"meta":1093,"style":1093},"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","",[1047,1095,1096,1115],{"__ignoreMap":1093},[1097,1098,1101,1105,1109,1112],"span",{"class":1099,"line":1100},"line",1,[1097,1102,1104],{"class":1103},"sBMFI","npx",[1097,1106,1108],{"class":1107},"sfazB"," nuxi@latest",[1097,1110,1111],{"class":1107}," init",[1097,1113,1114],{"class":1107}," nuxt-ai-chat\n",[1097,1116,1118,1122],{"class":1099,"line":1117},2,[1097,1119,1121],{"class":1120},"s2Zo4","cd",[1097,1123,1114],{"class":1107},[1125,1126,1128],"h3",{"id":1127},"installing-dependencies","Installing dependencies",[987,1130,1131],{},"Install Nuxt UI and the AI-specific dependencies:",[1133,1134,1136,1182,1216,1251],"code-group",{"sync":1135},"pm",[1088,1137,1140],{"className":1090,"code":1138,"filename":1139,"language":1092,"meta":1093,"style":1093},"pnpm add @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","pnpm",[1047,1141,1142],{"__ignoreMap":1093},[1097,1143,1144,1146,1149,1152,1155,1158,1161,1164,1167,1170,1173,1176,1179],{"class":1099,"line":1100},[1097,1145,1139],{"class":1103},[1097,1147,1148],{"class":1107}," add",[1097,1150,1151],{"class":1107}," @nuxt\u002Fui",[1097,1153,1154],{"class":1107}," tailwindcss",[1097,1156,1157],{"class":1107}," @comark\u002Fnuxt",[1097,1159,1160],{"class":1107}," @shikijs\u002Flangs",[1097,1162,1163],{"class":1107}," @nuxthub\u002Fcore",[1097,1165,1166],{"class":1107}," drizzle-orm",[1097,1168,1169],{"class":1107}," drizzle-kit",[1097,1171,1172],{"class":1107}," @libsql\u002Fclient",[1097,1174,1175],{"class":1107}," ai",[1097,1177,1178],{"class":1107}," @ai-sdk\u002Fvue",[1097,1180,1181],{"class":1107}," zod\n",[1088,1183,1186],{"className":1090,"code":1184,"filename":1185,"language":1092,"meta":1093,"style":1093},"yarn add @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","yarn",[1047,1187,1188],{"__ignoreMap":1093},[1097,1189,1190,1192,1194,1196,1198,1200,1202,1204,1206,1208,1210,1212,1214],{"class":1099,"line":1100},[1097,1191,1185],{"class":1103},[1097,1193,1148],{"class":1107},[1097,1195,1151],{"class":1107},[1097,1197,1154],{"class":1107},[1097,1199,1157],{"class":1107},[1097,1201,1160],{"class":1107},[1097,1203,1163],{"class":1107},[1097,1205,1166],{"class":1107},[1097,1207,1169],{"class":1107},[1097,1209,1172],{"class":1107},[1097,1211,1175],{"class":1107},[1097,1213,1178],{"class":1107},[1097,1215,1181],{"class":1107},[1088,1217,1220],{"className":1090,"code":1218,"filename":1219,"language":1092,"meta":1093,"style":1093},"npm install @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","npm",[1047,1221,1222],{"__ignoreMap":1093},[1097,1223,1224,1226,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249],{"class":1099,"line":1100},[1097,1225,1219],{"class":1103},[1097,1227,1228],{"class":1107}," install",[1097,1230,1151],{"class":1107},[1097,1232,1154],{"class":1107},[1097,1234,1157],{"class":1107},[1097,1236,1160],{"class":1107},[1097,1238,1163],{"class":1107},[1097,1240,1166],{"class":1107},[1097,1242,1169],{"class":1107},[1097,1244,1172],{"class":1107},[1097,1246,1175],{"class":1107},[1097,1248,1178],{"class":1107},[1097,1250,1181],{"class":1107},[1088,1252,1255],{"className":1090,"code":1253,"filename":1254,"language":1092,"meta":1093,"style":1093},"bun add @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","bun",[1047,1256,1257],{"__ignoreMap":1093},[1097,1258,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283],{"class":1099,"line":1100},[1097,1260,1254],{"class":1103},[1097,1262,1148],{"class":1107},[1097,1264,1151],{"class":1107},[1097,1266,1154],{"class":1107},[1097,1268,1157],{"class":1107},[1097,1270,1160],{"class":1107},[1097,1272,1163],{"class":1107},[1097,1274,1166],{"class":1107},[1097,1276,1169],{"class":1107},[1097,1278,1172],{"class":1107},[1097,1280,1175],{"class":1107},[1097,1282,1178],{"class":1107},[1097,1284,1181],{"class":1107},[1125,1286,1288],{"id":1287},"configuration","Configuration",[987,1290,1291,1292,1295],{},"Update your ",[1047,1293,1294],{},"nuxt.config.ts"," to register the modules:",[1297,1298,1299],"code-tree-intersection",{},[1088,1300,1304],{"className":1301,"code":1302,"filename":1294,"language":1303,"meta":1093,"style":1093},"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",[1047,1305,1306,1326,1338,1353,1365,1376,1384,1390,1401,1417,1423,1428,1451],{"__ignoreMap":1093},[1097,1307,1308,1312,1315,1318,1322],{"class":1099,"line":1100},[1097,1309,1311],{"class":1310},"s7zQu","export",[1097,1313,1314],{"class":1310}," default",[1097,1316,1317],{"class":1120}," defineNuxtConfig",[1097,1319,1321],{"class":1320},"sTEyZ","(",[1097,1323,1325],{"class":1324},"sMK4o","{\n",[1097,1327,1328,1332,1335],{"class":1099,"line":1117},[1097,1329,1331],{"class":1330},"swJcz","  modules",[1097,1333,1334],{"class":1324},":",[1097,1336,1337],{"class":1320}," [\n",[1097,1339,1341,1344,1347,1350],{"class":1099,"line":1340},3,[1097,1342,1343],{"class":1324},"    '",[1097,1345,1346],{"class":1107},"@nuxt\u002Fui",[1097,1348,1349],{"class":1324},"'",[1097,1351,1352],{"class":1324},",\n",[1097,1354,1356,1358,1361,1363],{"class":1099,"line":1355},4,[1097,1357,1343],{"class":1324},[1097,1359,1360],{"class":1107},"@comark\u002Fnuxt",[1097,1362,1349],{"class":1324},[1097,1364,1352],{"class":1324},[1097,1366,1368,1370,1373],{"class":1099,"line":1367},5,[1097,1369,1343],{"class":1324},[1097,1371,1372],{"class":1107},"@nuxthub\u002Fcore",[1097,1374,1375],{"class":1324},"'\n",[1097,1377,1379,1382],{"class":1099,"line":1378},6,[1097,1380,1381],{"class":1320},"  ]",[1097,1383,1352],{"class":1324},[1097,1385,1387],{"class":1099,"line":1386},7,[1097,1388,1389],{"emptyLinePlaceholder":21},"\n",[1097,1391,1393,1396,1398],{"class":1099,"line":1392},8,[1097,1394,1395],{"class":1330},"  hub",[1097,1397,1334],{"class":1324},[1097,1399,1400],{"class":1324}," {\n",[1097,1402,1404,1407,1409,1412,1415],{"class":1099,"line":1403},9,[1097,1405,1406],{"class":1330},"    db",[1097,1408,1334],{"class":1324},[1097,1410,1411],{"class":1324}," '",[1097,1413,1414],{"class":1107},"sqlite",[1097,1416,1375],{"class":1324},[1097,1418,1420],{"class":1099,"line":1419},10,[1097,1421,1422],{"class":1324},"  },\n",[1097,1424,1426],{"class":1099,"line":1425},11,[1097,1427,1389],{"emptyLinePlaceholder":21},[1097,1429,1431,1434,1436,1439,1441,1444,1446,1449],{"class":1099,"line":1430},12,[1097,1432,1433],{"class":1330},"  css",[1097,1435,1334],{"class":1324},[1097,1437,1438],{"class":1320}," [",[1097,1440,1349],{"class":1324},[1097,1442,1443],{"class":1107},"~\u002Fassets\u002Fcss\u002Fmain.css",[1097,1445,1349],{"class":1324},[1097,1447,1448],{"class":1320},"]",[1097,1450,1352],{"class":1324},[1097,1452,1454,1457],{"class":1099,"line":1453},13,[1097,1455,1456],{"class":1324},"}",[1097,1458,1459],{"class":1320},")\n",[1461,1462,1463],"note",{"to":865},[987,1464,1465,1467,1468,1471],{},[1047,1466,1360],{}," automatically enables Nuxt UI's ",[1041,1469,1470],{"href":865},"prose components",", so Markdown rendered by Comark is styled to match your theme.",[987,1473,1474],{},"Create the main CSS file to import Tailwind CSS and Nuxt UI:",[1297,1476,1477],{},[1088,1478,1483],{"className":1479,"code":1480,"filename":1481,"language":1482,"meta":1093,"style":1093},"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",[1047,1484,1485,1502],{"__ignoreMap":1093},[1097,1486,1487,1490,1493,1496,1499],{"class":1099,"line":1100},[1097,1488,1489],{"class":1310},"@import",[1097,1491,1492],{"class":1324}," \"",[1097,1494,1495],{"class":1107},"tailwindcss",[1097,1497,1498],{"class":1324},"\"",[1097,1500,1501],{"class":1324},";\n",[1097,1503,1504,1506,1508,1510,1512],{"class":1099,"line":1117},[1097,1505,1489],{"class":1310},[1097,1507,1492],{"class":1324},[1097,1509,1346],{"class":1107},[1097,1511,1498],{"class":1324},[1097,1513,1501],{"class":1324},[1125,1515,1517],{"id":1516},"setting-up-the-app","Setting up the app",[987,1519,1520,1521,1524],{},"Nuxt UI requires wrapping your app with ",[1047,1522,1523],{},"UApp"," for modals, toasts, and overlays to work properly:",[1297,1526,1527],{},[1088,1528,1533],{"className":1529,"code":1530,"filename":1531,"highlights":1532,"language":34,"meta":1093,"style":1093},"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",[1117,1378],[1047,1534,1535,1546,1557,1581,1592,1601,1611],{"__ignoreMap":1093},[1097,1536,1537,1540,1543],{"class":1099,"line":1100},[1097,1538,1539],{"class":1324},"\u003C",[1097,1541,1542],{"class":1330},"template",[1097,1544,1545],{"class":1324},">\n",[1097,1547,1550,1553,1555],{"class":1548,"line":1117},[1099,1549],"highlight",[1097,1551,1552],{"class":1324},"  \u003C",[1097,1554,1523],{"class":1330},[1097,1556,1545],{"class":1324},[1097,1558,1559,1562,1565,1569,1572,1574,1577,1579],{"class":1099,"line":1340},[1097,1560,1561],{"class":1324},"    \u003C",[1097,1563,1564],{"class":1330},"UDashboardGroup",[1097,1566,1568],{"class":1567},"spNyl"," unit",[1097,1570,1571],{"class":1324},"=",[1097,1573,1498],{"class":1324},[1097,1575,1576],{"class":1107},"rem",[1097,1578,1498],{"class":1324},[1097,1580,1545],{"class":1324},[1097,1582,1583,1586,1589],{"class":1099,"line":1355},[1097,1584,1585],{"class":1324},"      \u003C",[1097,1587,1588],{"class":1330},"NuxtPage",[1097,1590,1591],{"class":1324}," \u002F>\n",[1097,1593,1594,1597,1599],{"class":1099,"line":1367},[1097,1595,1596],{"class":1324},"    \u003C\u002F",[1097,1598,1564],{"class":1330},[1097,1600,1545],{"class":1324},[1097,1602,1604,1607,1609],{"class":1603,"line":1378},[1099,1549],[1097,1605,1606],{"class":1324},"  \u003C\u002F",[1097,1608,1523],{"class":1330},[1097,1610,1545],{"class":1324},[1097,1612,1613,1616,1618],{"class":1099,"line":1386},[1097,1614,1615],{"class":1324},"\u003C\u002F",[1097,1617,1542],{"class":1330},[1097,1619,1545],{"class":1324},[987,1621,1622,1623,1626],{},"Create a ",[1047,1624,1625],{},".env"," file with your AI Gateway API key:",[1297,1628,1629],{},[1088,1630,1632],{"className":1090,"code":1631,"filename":1625,"language":1092,"meta":1093,"style":1093},"AI_GATEWAY_API_KEY=your-api-key-here\n",[1047,1633,1634],{"__ignoreMap":1093},[1097,1635,1636,1639,1641],{"class":1099,"line":1100},[1097,1637,1638],{"class":1320},"AI_GATEWAY_API_KEY",[1097,1640,1571],{"class":1324},[1097,1642,1643],{"class":1107},"your-api-key-here\n",[1461,1645,1646],{},[987,1647,1648,1649,1652],{},"With ",[1041,1650,1078],{"href":1076,"rel":1651},[1045],", 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.",[1125,1654,1656],{"id":1655},"setting-up-the-database","Setting up the database",[987,1658,1659,1664,1665,1670],{},[1041,1660,1663],{"href":1661,"rel":1662},"https:\u002F\u002Fhub.nuxt.com",[1045],"NuxtHub"," provides a zero-config database powered by ",[1041,1666,1669],{"href":1667,"rel":1668},"https:\u002F\u002Form.drizzle.team",[1045],"Drizzle ORM",". Here is the schema for the chat application:",[1297,1672,1673],{},[1674,1675,1676],"code-collapse",{},[1088,1677,1680],{"className":1301,"code":1678,"filename":1679,"language":1303,"meta":1093,"style":1093},"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",[1047,1681,1682,1722,1742,1746,1773,1818,1831,1888,1894,1898,1933,1945,1952,1956,1983,2029,2096,2166,2206,2257,2270,2300,2306,2311,2343,2359,2377,2393,2401],{"__ignoreMap":1093},[1097,1683,1684,1687,1690,1693,1696,1699,1701,1704,1706,1709,1712,1715,1717,1720],{"class":1099,"line":1100},[1097,1685,1686],{"class":1310},"import",[1097,1688,1689],{"class":1324}," {",[1097,1691,1692],{"class":1320}," sqliteTable",[1097,1694,1695],{"class":1324},",",[1097,1697,1698],{"class":1320}," text",[1097,1700,1695],{"class":1324},[1097,1702,1703],{"class":1320}," integer",[1097,1705,1695],{"class":1324},[1097,1707,1708],{"class":1320}," index",[1097,1710,1711],{"class":1324}," }",[1097,1713,1714],{"class":1310}," from",[1097,1716,1411],{"class":1324},[1097,1718,1719],{"class":1107},"drizzle-orm\u002Fsqlite-core",[1097,1721,1375],{"class":1324},[1097,1723,1724,1726,1728,1731,1733,1735,1737,1740],{"class":1099,"line":1117},[1097,1725,1686],{"class":1310},[1097,1727,1689],{"class":1324},[1097,1729,1730],{"class":1320}," relations",[1097,1732,1711],{"class":1324},[1097,1734,1714],{"class":1310},[1097,1736,1411],{"class":1324},[1097,1738,1739],{"class":1107},"drizzle-orm",[1097,1741,1375],{"class":1324},[1097,1743,1744],{"class":1099,"line":1340},[1097,1745,1389],{"emptyLinePlaceholder":21},[1097,1747,1748,1750,1753,1756,1758,1760,1762,1764,1767,1769,1771],{"class":1099,"line":1355},[1097,1749,1311],{"class":1310},[1097,1751,1752],{"class":1567}," const",[1097,1754,1755],{"class":1320}," chats ",[1097,1757,1571],{"class":1324},[1097,1759,1692],{"class":1120},[1097,1761,1321],{"class":1320},[1097,1763,1349],{"class":1324},[1097,1765,1766],{"class":1107},"chats",[1097,1768,1349],{"class":1324},[1097,1770,1695],{"class":1324},[1097,1772,1400],{"class":1324},[1097,1774,1775,1778,1780,1782,1785,1788,1791,1793,1795,1798,1800,1802,1805,1808,1810,1813,1816],{"class":1099,"line":1367},[1097,1776,1777],{"class":1330},"  id",[1097,1779,1334],{"class":1324},[1097,1781,1698],{"class":1120},[1097,1783,1784],{"class":1320},"()",[1097,1786,1787],{"class":1324},".",[1097,1789,1790],{"class":1120},"primaryKey",[1097,1792,1784],{"class":1320},[1097,1794,1787],{"class":1324},[1097,1796,1797],{"class":1120},"$defaultFn",[1097,1799,1321],{"class":1320},[1097,1801,1784],{"class":1324},[1097,1803,1804],{"class":1567}," =>",[1097,1806,1807],{"class":1320}," crypto",[1097,1809,1787],{"class":1324},[1097,1811,1812],{"class":1120},"randomUUID",[1097,1814,1815],{"class":1320},"())",[1097,1817,1352],{"class":1324},[1097,1819,1820,1823,1825,1827,1829],{"class":1099,"line":1378},[1097,1821,1822],{"class":1330},"  title",[1097,1824,1334],{"class":1324},[1097,1826,1698],{"class":1120},[1097,1828,1784],{"class":1320},[1097,1830,1352],{"class":1324},[1097,1832,1833,1836,1838,1840,1842,1845,1848,1850,1852,1855,1857,1859,1862,1864,1867,1869,1871,1873,1875,1877,1879,1882,1885],{"class":1099,"line":1386},[1097,1834,1835],{"class":1330},"  createdAt",[1097,1837,1334],{"class":1324},[1097,1839,1703],{"class":1120},[1097,1841,1321],{"class":1320},[1097,1843,1844],{"class":1324},"{",[1097,1846,1847],{"class":1330}," mode",[1097,1849,1334],{"class":1324},[1097,1851,1411],{"class":1324},[1097,1853,1854],{"class":1107},"timestamp",[1097,1856,1349],{"class":1324},[1097,1858,1711],{"class":1324},[1097,1860,1861],{"class":1320},")",[1097,1863,1787],{"class":1324},[1097,1865,1866],{"class":1120},"notNull",[1097,1868,1784],{"class":1320},[1097,1870,1787],{"class":1324},[1097,1872,1797],{"class":1120},[1097,1874,1321],{"class":1320},[1097,1876,1784],{"class":1324},[1097,1878,1804],{"class":1567},[1097,1880,1881],{"class":1324}," new",[1097,1883,1884],{"class":1120}," Date",[1097,1886,1887],{"class":1320},"())\n",[1097,1889,1890,1892],{"class":1099,"line":1392},[1097,1891,1456],{"class":1324},[1097,1893,1459],{"class":1320},[1097,1895,1896],{"class":1099,"line":1403},[1097,1897,1389],{"emptyLinePlaceholder":21},[1097,1899,1900,1902,1904,1907,1909,1911,1914,1916,1919,1923,1926,1928,1931],{"class":1099,"line":1419},[1097,1901,1311],{"class":1310},[1097,1903,1752],{"class":1567},[1097,1905,1906],{"class":1320}," chatsRelations ",[1097,1908,1571],{"class":1324},[1097,1910,1730],{"class":1120},[1097,1912,1913],{"class":1320},"(chats",[1097,1915,1695],{"class":1324},[1097,1917,1918],{"class":1324}," ({",[1097,1920,1922],{"class":1921},"sHdIc"," many",[1097,1924,1925],{"class":1324}," })",[1097,1927,1804],{"class":1567},[1097,1929,1930],{"class":1320}," (",[1097,1932,1325],{"class":1324},[1097,1934,1935,1938,1940,1942],{"class":1099,"line":1425},[1097,1936,1937],{"class":1330},"  messages",[1097,1939,1334],{"class":1324},[1097,1941,1922],{"class":1120},[1097,1943,1944],{"class":1320},"(messages)\n",[1097,1946,1947,1949],{"class":1099,"line":1430},[1097,1948,1456],{"class":1324},[1097,1950,1951],{"class":1320},"))\n",[1097,1953,1954],{"class":1099,"line":1453},[1097,1955,1389],{"emptyLinePlaceholder":21},[1097,1957,1959,1961,1963,1966,1968,1970,1972,1974,1977,1979,1981],{"class":1099,"line":1958},14,[1097,1960,1311],{"class":1310},[1097,1962,1752],{"class":1567},[1097,1964,1965],{"class":1320}," messages ",[1097,1967,1571],{"class":1324},[1097,1969,1692],{"class":1120},[1097,1971,1321],{"class":1320},[1097,1973,1349],{"class":1324},[1097,1975,1976],{"class":1107},"messages",[1097,1978,1349],{"class":1324},[1097,1980,1695],{"class":1324},[1097,1982,1400],{"class":1324},[1097,1984,1986,1988,1990,1992,1994,1996,1999,2001,2003,2005,2007,2009,2011,2013,2015,2017,2019,2021,2023,2025,2027],{"class":1099,"line":1985},15,[1097,1987,1777],{"class":1330},[1097,1989,1334],{"class":1324},[1097,1991,1698],{"class":1120},[1097,1993,1321],{"class":1320},[1097,1995,1349],{"class":1324},[1097,1997,1998],{"class":1107},"id",[1097,2000,1349],{"class":1324},[1097,2002,1861],{"class":1320},[1097,2004,1787],{"class":1324},[1097,2006,1790],{"class":1120},[1097,2008,1784],{"class":1320},[1097,2010,1787],{"class":1324},[1097,2012,1797],{"class":1120},[1097,2014,1321],{"class":1320},[1097,2016,1784],{"class":1324},[1097,2018,1804],{"class":1567},[1097,2020,1807],{"class":1320},[1097,2022,1787],{"class":1324},[1097,2024,1812],{"class":1120},[1097,2026,1815],{"class":1320},[1097,2028,1352],{"class":1324},[1097,2030,2032,2035,2037,2039,2041,2043,2046,2048,2050,2052,2054,2056,2058,2061,2063,2065,2067,2070,2072,2074,2076,2078,2081,2083,2085,2088,2090,2092,2094],{"class":1099,"line":2031},16,[1097,2033,2034],{"class":1330},"  chatId",[1097,2036,1334],{"class":1324},[1097,2038,1698],{"class":1120},[1097,2040,1321],{"class":1320},[1097,2042,1349],{"class":1324},[1097,2044,2045],{"class":1107},"chat_id",[1097,2047,1349],{"class":1324},[1097,2049,1861],{"class":1320},[1097,2051,1787],{"class":1324},[1097,2053,1866],{"class":1120},[1097,2055,1784],{"class":1320},[1097,2057,1787],{"class":1324},[1097,2059,2060],{"class":1120},"references",[1097,2062,1321],{"class":1320},[1097,2064,1784],{"class":1324},[1097,2066,1804],{"class":1567},[1097,2068,2069],{"class":1320}," chats",[1097,2071,1787],{"class":1324},[1097,2073,1998],{"class":1320},[1097,2075,1695],{"class":1324},[1097,2077,1689],{"class":1324},[1097,2079,2080],{"class":1330}," onDelete",[1097,2082,1334],{"class":1324},[1097,2084,1411],{"class":1324},[1097,2086,2087],{"class":1107},"cascade",[1097,2089,1349],{"class":1324},[1097,2091,1711],{"class":1324},[1097,2093,1861],{"class":1320},[1097,2095,1352],{"class":1324},[1097,2097,2099,2102,2104,2106,2108,2110,2113,2115,2117,2119,2122,2124,2126,2128,2131,2133,2135,2137,2140,2142,2144,2146,2149,2151,2154,2156,2158,2160,2162,2164],{"class":1099,"line":2098},17,[1097,2100,2101],{"class":1330},"  role",[1097,2103,1334],{"class":1324},[1097,2105,1698],{"class":1120},[1097,2107,1321],{"class":1320},[1097,2109,1349],{"class":1324},[1097,2111,2112],{"class":1107},"role",[1097,2114,1349],{"class":1324},[1097,2116,1695],{"class":1324},[1097,2118,1689],{"class":1324},[1097,2120,2121],{"class":1330}," enum",[1097,2123,1334],{"class":1324},[1097,2125,1438],{"class":1320},[1097,2127,1349],{"class":1324},[1097,2129,2130],{"class":1107},"user",[1097,2132,1349],{"class":1324},[1097,2134,1695],{"class":1324},[1097,2136,1411],{"class":1324},[1097,2138,2139],{"class":1107},"assistant",[1097,2141,1349],{"class":1324},[1097,2143,1695],{"class":1324},[1097,2145,1411],{"class":1324},[1097,2147,2148],{"class":1107},"system",[1097,2150,1349],{"class":1324},[1097,2152,2153],{"class":1320},"] ",[1097,2155,1456],{"class":1324},[1097,2157,1861],{"class":1320},[1097,2159,1787],{"class":1324},[1097,2161,1866],{"class":1120},[1097,2163,1784],{"class":1320},[1097,2165,1352],{"class":1324},[1097,2167,2169,2172,2174,2176,2178,2180,2183,2185,2187,2189,2191,2193,2195,2198,2200,2202,2204],{"class":1099,"line":2168},18,[1097,2170,2171],{"class":1330},"  parts",[1097,2173,1334],{"class":1324},[1097,2175,1698],{"class":1120},[1097,2177,1321],{"class":1320},[1097,2179,1349],{"class":1324},[1097,2181,2182],{"class":1107},"parts",[1097,2184,1349],{"class":1324},[1097,2186,1695],{"class":1324},[1097,2188,1689],{"class":1324},[1097,2190,1847],{"class":1330},[1097,2192,1334],{"class":1324},[1097,2194,1411],{"class":1324},[1097,2196,2197],{"class":1107},"json",[1097,2199,1349],{"class":1324},[1097,2201,1711],{"class":1324},[1097,2203,1861],{"class":1320},[1097,2205,1352],{"class":1324},[1097,2207,2209,2211,2213,2215,2217,2219,2221,2223,2225,2227,2229,2231,2233,2235,2237,2239,2241,2243,2245,2247,2249,2251,2253,2255],{"class":1099,"line":2208},19,[1097,2210,1835],{"class":1330},[1097,2212,1334],{"class":1324},[1097,2214,1703],{"class":1120},[1097,2216,1321],{"class":1320},[1097,2218,1844],{"class":1324},[1097,2220,1847],{"class":1330},[1097,2222,1334],{"class":1324},[1097,2224,1411],{"class":1324},[1097,2226,1854],{"class":1107},[1097,2228,1349],{"class":1324},[1097,2230,1711],{"class":1324},[1097,2232,1861],{"class":1320},[1097,2234,1787],{"class":1324},[1097,2236,1866],{"class":1120},[1097,2238,1784],{"class":1320},[1097,2240,1787],{"class":1324},[1097,2242,1797],{"class":1120},[1097,2244,1321],{"class":1320},[1097,2246,1784],{"class":1324},[1097,2248,1804],{"class":1567},[1097,2250,1881],{"class":1324},[1097,2252,1884],{"class":1120},[1097,2254,1815],{"class":1320},[1097,2256,1352],{"class":1324},[1097,2258,2260,2263,2266,2268],{"class":1099,"line":2259},20,[1097,2261,2262],{"class":1324},"},",[1097,2264,2265],{"class":1921}," table",[1097,2267,1804],{"class":1567},[1097,2269,1337],{"class":1320},[1097,2271,2273,2276,2278,2280,2283,2285,2287,2289,2292,2295,2297],{"class":1099,"line":2272},21,[1097,2274,2275],{"class":1120},"  index",[1097,2277,1321],{"class":1320},[1097,2279,1349],{"class":1324},[1097,2281,2282],{"class":1107},"messages_chat_id_idx",[1097,2284,1349],{"class":1324},[1097,2286,1861],{"class":1320},[1097,2288,1787],{"class":1324},[1097,2290,2291],{"class":1120},"on",[1097,2293,2294],{"class":1320},"(table",[1097,2296,1787],{"class":1324},[1097,2298,2299],{"class":1320},"chatId)\n",[1097,2301,2303],{"class":1099,"line":2302},22,[1097,2304,2305],{"class":1320},"])\n",[1097,2307,2309],{"class":1099,"line":2308},23,[1097,2310,1389],{"emptyLinePlaceholder":21},[1097,2312,2314,2316,2318,2321,2323,2325,2328,2330,2332,2335,2337,2339,2341],{"class":1099,"line":2313},24,[1097,2315,1311],{"class":1310},[1097,2317,1752],{"class":1567},[1097,2319,2320],{"class":1320}," messagesRelations ",[1097,2322,1571],{"class":1324},[1097,2324,1730],{"class":1120},[1097,2326,2327],{"class":1320},"(messages",[1097,2329,1695],{"class":1324},[1097,2331,1918],{"class":1324},[1097,2333,2334],{"class":1921}," one",[1097,2336,1925],{"class":1324},[1097,2338,1804],{"class":1567},[1097,2340,1930],{"class":1320},[1097,2342,1325],{"class":1324},[1097,2344,2346,2349,2351,2353,2355,2357],{"class":1099,"line":2345},25,[1097,2347,2348],{"class":1330},"  chat",[1097,2350,1334],{"class":1324},[1097,2352,2334],{"class":1120},[1097,2354,1913],{"class":1320},[1097,2356,1695],{"class":1324},[1097,2358,1400],{"class":1324},[1097,2360,2362,2365,2367,2370,2372,2375],{"class":1099,"line":2361},26,[1097,2363,2364],{"class":1330},"    fields",[1097,2366,1334],{"class":1324},[1097,2368,2369],{"class":1320}," [messages",[1097,2371,1787],{"class":1324},[1097,2373,2374],{"class":1320},"chatId]",[1097,2376,1352],{"class":1324},[1097,2378,2380,2383,2385,2388,2390],{"class":1099,"line":2379},27,[1097,2381,2382],{"class":1330},"    references",[1097,2384,1334],{"class":1324},[1097,2386,2387],{"class":1320}," [chats",[1097,2389,1787],{"class":1324},[1097,2391,2392],{"class":1320},"id]\n",[1097,2394,2396,2399],{"class":1099,"line":2395},28,[1097,2397,2398],{"class":1324},"  }",[1097,2400,1459],{"class":1320},[1097,2402,2404,2406],{"class":1099,"line":2403},29,[1097,2405,1456],{"class":1324},[1097,2407,1951],{"class":1320},[987,2409,2410],{},"Generate the database migrations from your schema:",[1088,2412,2414],{"className":1090,"code":2413,"language":1092,"meta":1093,"style":1093},"npx nuxt db generate\n",[1047,2415,2416],{"__ignoreMap":1093},[1097,2417,2418,2420,2423,2426],{"class":1099,"line":1100},[1097,2419,1104],{"class":1103},[1097,2421,2422],{"class":1107}," nuxt",[1097,2424,2425],{"class":1107}," db",[1097,2427,2428],{"class":1107}," generate\n",[2430,2431,2432],"tip",{},[987,2433,2434,2435,2438],{},"Migrations are automatically applied when you start the development server with ",[1047,2436,2437],{},"npx nuxt dev",". NuxtHub uses SQLite locally, so no external database is required during development.",[991,2440,2442],{"id":2441},"building-the-backend","Building the backend",[987,2444,2445,2446,1787],{},"This section covers integrating AI on the server. The following API endpoints handle chat creation, AI streaming, and data persistence using ",[1041,2447,2450],{"href":2448,"rel":2449},"https:\u002F\u002Fnitro.build",[1045],"Nitro",[1125,2452,2454],{"id":2453},"creating-a-chat","Creating a chat",[987,2456,2457,2458,2465],{},"First, create the endpoint that initializes a new chat and saves the first message to the database. This uses the ",[1041,2459,2462],{"href":2460,"rel":2461},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fui-message",[1045],[1047,2463,2464],{},"UIMessage"," type from the AI SDK:",[1297,2467,2468],{},[1088,2469,2472],{"className":1301,"code":2470,"filename":2471,"language":1303,"meta":1093,"style":1093},"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",[1047,2473,2474,2498,2521,2545,2565,2569,2593,2630,2654,2667,2671,2677,2728,2732,2737,2766,2782,2797,2811,2817,2821,2829],{"__ignoreMap":1093},[1097,2475,2476,2478,2480,2483,2485,2488,2490,2492,2494,2496],{"class":1099,"line":1100},[1097,2477,1686],{"class":1310},[1097,2479,1689],{"class":1324},[1097,2481,2482],{"class":1320}," defineEventHandler",[1097,2484,1695],{"class":1324},[1097,2486,2487],{"class":1320}," readValidatedBody",[1097,2489,1711],{"class":1324},[1097,2491,1714],{"class":1310},[1097,2493,1411],{"class":1324},[1097,2495,1125],{"class":1107},[1097,2497,1375],{"class":1324},[1097,2499,2500,2502,2505,2507,2510,2512,2514,2516,2519],{"class":1099,"line":1117},[1097,2501,1686],{"class":1310},[1097,2503,2504],{"class":1310}," type",[1097,2506,1689],{"class":1324},[1097,2508,2509],{"class":1320}," UIMessage",[1097,2511,1711],{"class":1324},[1097,2513,1714],{"class":1310},[1097,2515,1411],{"class":1324},[1097,2517,2518],{"class":1107},"ai",[1097,2520,1375],{"class":1324},[1097,2522,2523,2525,2527,2529,2531,2534,2536,2538,2540,2543],{"class":1099,"line":1340},[1097,2524,1686],{"class":1310},[1097,2526,1689],{"class":1324},[1097,2528,2425],{"class":1320},[1097,2530,1695],{"class":1324},[1097,2532,2533],{"class":1320}," schema",[1097,2535,1711],{"class":1324},[1097,2537,1714],{"class":1310},[1097,2539,1411],{"class":1324},[1097,2541,2542],{"class":1107},"hub:db",[1097,2544,1375],{"class":1324},[1097,2546,2547,2549,2551,2554,2556,2558,2560,2563],{"class":1099,"line":1355},[1097,2548,1686],{"class":1310},[1097,2550,1689],{"class":1324},[1097,2552,2553],{"class":1320}," z",[1097,2555,1711],{"class":1324},[1097,2557,1714],{"class":1310},[1097,2559,1411],{"class":1324},[1097,2561,2562],{"class":1107},"zod",[1097,2564,1375],{"class":1324},[1097,2566,2567],{"class":1099,"line":1367},[1097,2568,1389],{"emptyLinePlaceholder":21},[1097,2570,2571,2573,2575,2577,2579,2582,2584,2587,2589,2591],{"class":1099,"line":1378},[1097,2572,1311],{"class":1310},[1097,2574,1314],{"class":1310},[1097,2576,2482],{"class":1120},[1097,2578,1321],{"class":1320},[1097,2580,2581],{"class":1567},"async",[1097,2583,1930],{"class":1324},[1097,2585,2586],{"class":1921},"event",[1097,2588,1861],{"class":1324},[1097,2590,1804],{"class":1567},[1097,2592,1400],{"class":1324},[1097,2594,2595,2598,2600,2603,2605,2608,2611,2613,2615,2617,2619,2621,2623,2626,2628],{"class":1099,"line":1386},[1097,2596,2597],{"class":1567},"  const",[1097,2599,1689],{"class":1324},[1097,2601,2602],{"class":1320}," message",[1097,2604,1711],{"class":1324},[1097,2606,2607],{"class":1324}," =",[1097,2609,2610],{"class":1310}," await",[1097,2612,2487],{"class":1120},[1097,2614,1321],{"class":1330},[1097,2616,2586],{"class":1320},[1097,2618,1695],{"class":1324},[1097,2620,2553],{"class":1320},[1097,2622,1787],{"class":1324},[1097,2624,2625],{"class":1120},"object",[1097,2627,1321],{"class":1330},[1097,2629,1325],{"class":1324},[1097,2631,2632,2635,2637,2639,2641,2644,2646,2648,2651],{"class":1099,"line":1392},[1097,2633,2634],{"class":1330},"    message",[1097,2636,1334],{"class":1324},[1097,2638,2553],{"class":1320},[1097,2640,1787],{"class":1324},[1097,2642,2643],{"class":1120},"custom",[1097,2645,1539],{"class":1324},[1097,2647,2464],{"class":1103},[1097,2649,2650],{"class":1324},">",[1097,2652,2653],{"class":1330},"()\n",[1097,2655,2656,2658,2660,2662,2665],{"class":1099,"line":1403},[1097,2657,2398],{"class":1324},[1097,2659,1861],{"class":1330},[1097,2661,1787],{"class":1324},[1097,2663,2664],{"class":1320},"parse",[1097,2666,1459],{"class":1330},[1097,2668,2669],{"class":1099,"line":1419},[1097,2670,1389],{"emptyLinePlaceholder":21},[1097,2672,2673],{"class":1099,"line":1425},[1097,2674,2676],{"class":2675},"sHwdD","  \u002F\u002F Create a new chat\n",[1097,2678,2679,2681,2683,2685,2687,2689,2691,2693,2695,2698,2700,2703,2705,2707,2709,2711,2714,2716,2719,2721,2723,2726],{"class":1099,"line":1430},[1097,2680,2597],{"class":1567},[1097,2682,1438],{"class":1324},[1097,2684,262],{"class":1320},[1097,2686,1448],{"class":1324},[1097,2688,2607],{"class":1324},[1097,2690,2610],{"class":1310},[1097,2692,2425],{"class":1320},[1097,2694,1787],{"class":1324},[1097,2696,2697],{"class":1120},"insert",[1097,2699,1321],{"class":1330},[1097,2701,2702],{"class":1320},"schema",[1097,2704,1787],{"class":1324},[1097,2706,1766],{"class":1320},[1097,2708,1861],{"class":1330},[1097,2710,1787],{"class":1324},[1097,2712,2713],{"class":1120},"values",[1097,2715,1321],{"class":1330},[1097,2717,2718],{"class":1324},"{}",[1097,2720,1861],{"class":1330},[1097,2722,1787],{"class":1324},[1097,2724,2725],{"class":1120},"returning",[1097,2727,2653],{"class":1330},[1097,2729,2730],{"class":1099,"line":1453},[1097,2731,1389],{"emptyLinePlaceholder":21},[1097,2733,2734],{"class":1099,"line":1958},[1097,2735,2736],{"class":2675},"  \u002F\u002F Save the first user message\n",[1097,2738,2739,2742,2744,2746,2748,2750,2752,2754,2756,2758,2760,2762,2764],{"class":1099,"line":1985},[1097,2740,2741],{"class":1310},"  await",[1097,2743,2425],{"class":1320},[1097,2745,1787],{"class":1324},[1097,2747,2697],{"class":1120},[1097,2749,1321],{"class":1330},[1097,2751,2702],{"class":1320},[1097,2753,1787],{"class":1324},[1097,2755,1976],{"class":1320},[1097,2757,1861],{"class":1330},[1097,2759,1787],{"class":1324},[1097,2761,2713],{"class":1120},[1097,2763,1321],{"class":1330},[1097,2765,1325],{"class":1324},[1097,2767,2768,2771,2773,2776,2778,2780],{"class":1099,"line":2031},[1097,2769,2770],{"class":1330},"    chatId",[1097,2772,1334],{"class":1324},[1097,2774,2775],{"class":1320}," chat",[1097,2777,1787],{"class":1324},[1097,2779,1998],{"class":1320},[1097,2781,1352],{"class":1324},[1097,2783,2784,2787,2789,2791,2793,2795],{"class":1099,"line":2098},[1097,2785,2786],{"class":1330},"    role",[1097,2788,1334],{"class":1324},[1097,2790,1411],{"class":1324},[1097,2792,2130],{"class":1107},[1097,2794,1349],{"class":1324},[1097,2796,1352],{"class":1324},[1097,2798,2799,2802,2804,2806,2808],{"class":1099,"line":2168},[1097,2800,2801],{"class":1330},"    parts",[1097,2803,1334],{"class":1324},[1097,2805,2602],{"class":1320},[1097,2807,1787],{"class":1324},[1097,2809,2810],{"class":1320},"parts\n",[1097,2812,2813,2815],{"class":1099,"line":2208},[1097,2814,2398],{"class":1324},[1097,2816,1459],{"class":1330},[1097,2818,2819],{"class":1099,"line":2259},[1097,2820,1389],{"emptyLinePlaceholder":21},[1097,2822,2823,2826],{"class":1099,"line":2272},[1097,2824,2825],{"class":1310},"  return",[1097,2827,2828],{"class":1320}," chat\n",[1097,2830,2831,2833],{"class":1099,"line":2302},[1097,2832,1456],{"class":1324},[1097,2834,1459],{"class":1320},[1125,2836,2838],{"id":2837},"streaming-ai-responses","Streaming AI responses",[987,2840,2841,2842,2849,2850,2857,2858,2865],{},"Next, create the endpoint that handles the AI conversation. This endpoint uses ",[1041,2843,2846],{"href":2844,"rel":2845},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-core\u002Fstream-text",[1045],[1047,2847,2848],{},"streamText",", ",[1041,2851,2854],{"href":2852,"rel":2853},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream",[1045],[1047,2855,2856],{},"createUIMessageStream",", and ",[1041,2859,2862],{"href":2860,"rel":2861},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream-response",[1045],[1047,2863,2864],{},"createUIMessageStreamResponse"," from the AI SDK:",[1297,2867,2868],{},[1674,2869,2870],{},[1088,2871,2874],{"className":1301,"code":2872,"filename":2873,"language":1303,"meta":1093,"style":1093},"import { createError, defineEventHandler, getValidatedRouterParams, readValidatedBody } from 'h3'\nimport { eq } from 'drizzle-orm'\nimport { db, schema } from 'hub:db'\nimport { z } from 'zod'\nimport {\n  convertToModelMessages,\n  createUIMessageStream,\n  createUIMessageStreamResponse,\n  generateText,\n  streamText\n} from 'ai'\nimport type { UIMessage } from 'ai'\n\nconst 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      system: `Generate a short title (max 30 characters) based on the user's message. No quotes or punctuation.`,\n      prompt: JSON.stringify(messages[0])\n    })\n\n    await db.update(schema.chats).set({ title }).where(eq(schema.chats.id, id))\n  }\n\n  \u002F\u002F Save the user message if it's a follow-up\n  const lastMessage = messages[messages.length - 1]\n  if (lastMessage?.role === 'user' && messages.length > 1) {\n    await db.insert(schema.messages).values({\n      chatId: id,\n      role: 'user',\n      parts: lastMessage.parts\n    })\n  }\n\n  \u002F\u002F Create the streaming response\n  const stream = createUIMessageStream({\n    execute: async ({ writer }) => {\n      const result = streamText({\n        model,\n        system: `You are a helpful AI assistant. Be concise and friendly.`,\n        messages: await convertToModelMessages(messages),\n        providerOptions: {\n          anthropic: {\n            thinking: {\n              type: 'enabled',\n              budgetTokens: 2048\n            }\n          },\n          google: {\n            thinkingConfig: {\n              includeThoughts: true,\n              thinkingLevel: 'low'\n            }\n          },\n          openai: {\n            reasoningEffort: 'low',\n            reasoningSummary: 'detailed'\n          }\n        }\n      })\n\n      \u002F\u002F Notify the client that a title was generated\n      if (!chat.title) {\n        writer.write({\n          type: 'data-chat-title',\n          data: { message: 'Title generated' },\n          transient: true\n        })\n      }\n\n      writer.merge(result.toUIMessageStream())\n    },\n    onFinish: async ({ messages }) => {\n      \u002F\u002F Save the assistant's response to the database\n      await db.insert(schema.messages).values(messages.map(message => ({\n        chatId: chat.id,\n        role: message.role as 'user' | 'assistant',\n        parts: message.parts\n      })))\n    }\n  })\n\n  return createUIMessageStreamResponse({ stream })\n})\n","server\u002Fapi\u002Fchats\u002F[id].post.ts",[1047,2875,2876,2908,2927,2949,2967,2973,2980,2987,2994,3001,3006,3018,3038,3042,3059,3063,3074,3108,3137,3168,3173,3177,3199,3232,3248,3260,3264,3307,3367,3381,3398,3430,3443,3448,3454,3485,3529,3536,3541,3559,3598,3604,3609,3615,3635,3663,3675,3694,3722,3729,3734,3800,3805,3810,3816,3845,3886,3915,3927,3943,3957,3964,3969,3974,3980,3997,4019,4037,4045,4062,4083,4093,4103,4113,4130,4141,4147,4153,4163,4173,4187,4202,4207,4212,4222,4238,4253,4259,4265,4273,4278,4284,4304,4319,4336,4359,4370,4378,4384,4389,4412,4418,4438,4444,4490,4506,4539,4553,4561,4567,4574,4579,4597],{"__ignoreMap":1093},[1097,2877,2878,2880,2882,2885,2887,2889,2891,2894,2896,2898,2900,2902,2904,2906],{"class":1099,"line":1100},[1097,2879,1686],{"class":1310},[1097,2881,1689],{"class":1324},[1097,2883,2884],{"class":1320}," createError",[1097,2886,1695],{"class":1324},[1097,2888,2482],{"class":1320},[1097,2890,1695],{"class":1324},[1097,2892,2893],{"class":1320}," getValidatedRouterParams",[1097,2895,1695],{"class":1324},[1097,2897,2487],{"class":1320},[1097,2899,1711],{"class":1324},[1097,2901,1714],{"class":1310},[1097,2903,1411],{"class":1324},[1097,2905,1125],{"class":1107},[1097,2907,1375],{"class":1324},[1097,2909,2910,2912,2914,2917,2919,2921,2923,2925],{"class":1099,"line":1117},[1097,2911,1686],{"class":1310},[1097,2913,1689],{"class":1324},[1097,2915,2916],{"class":1320}," eq",[1097,2918,1711],{"class":1324},[1097,2920,1714],{"class":1310},[1097,2922,1411],{"class":1324},[1097,2924,1739],{"class":1107},[1097,2926,1375],{"class":1324},[1097,2928,2929,2931,2933,2935,2937,2939,2941,2943,2945,2947],{"class":1099,"line":1340},[1097,2930,1686],{"class":1310},[1097,2932,1689],{"class":1324},[1097,2934,2425],{"class":1320},[1097,2936,1695],{"class":1324},[1097,2938,2533],{"class":1320},[1097,2940,1711],{"class":1324},[1097,2942,1714],{"class":1310},[1097,2944,1411],{"class":1324},[1097,2946,2542],{"class":1107},[1097,2948,1375],{"class":1324},[1097,2950,2951,2953,2955,2957,2959,2961,2963,2965],{"class":1099,"line":1355},[1097,2952,1686],{"class":1310},[1097,2954,1689],{"class":1324},[1097,2956,2553],{"class":1320},[1097,2958,1711],{"class":1324},[1097,2960,1714],{"class":1310},[1097,2962,1411],{"class":1324},[1097,2964,2562],{"class":1107},[1097,2966,1375],{"class":1324},[1097,2968,2969,2971],{"class":1099,"line":1367},[1097,2970,1686],{"class":1310},[1097,2972,1400],{"class":1324},[1097,2974,2975,2978],{"class":1099,"line":1378},[1097,2976,2977],{"class":1320},"  convertToModelMessages",[1097,2979,1352],{"class":1324},[1097,2981,2982,2985],{"class":1099,"line":1386},[1097,2983,2984],{"class":1320},"  createUIMessageStream",[1097,2986,1352],{"class":1324},[1097,2988,2989,2992],{"class":1099,"line":1392},[1097,2990,2991],{"class":1320},"  createUIMessageStreamResponse",[1097,2993,1352],{"class":1324},[1097,2995,2996,2999],{"class":1099,"line":1403},[1097,2997,2998],{"class":1320},"  generateText",[1097,3000,1352],{"class":1324},[1097,3002,3003],{"class":1099,"line":1419},[1097,3004,3005],{"class":1320},"  streamText\n",[1097,3007,3008,3010,3012,3014,3016],{"class":1099,"line":1425},[1097,3009,1456],{"class":1324},[1097,3011,1714],{"class":1310},[1097,3013,1411],{"class":1324},[1097,3015,2518],{"class":1107},[1097,3017,1375],{"class":1324},[1097,3019,3020,3022,3024,3026,3028,3030,3032,3034,3036],{"class":1099,"line":1430},[1097,3021,1686],{"class":1310},[1097,3023,2504],{"class":1310},[1097,3025,1689],{"class":1324},[1097,3027,2509],{"class":1320},[1097,3029,1711],{"class":1324},[1097,3031,1714],{"class":1310},[1097,3033,1411],{"class":1324},[1097,3035,2518],{"class":1107},[1097,3037,1375],{"class":1324},[1097,3039,3040],{"class":1099,"line":1453},[1097,3041,1389],{"emptyLinePlaceholder":21},[1097,3043,3044,3047,3050,3052,3054,3057],{"class":1099,"line":1958},[1097,3045,3046],{"class":1567},"const",[1097,3048,3049],{"class":1320}," DEFAULT_MODEL ",[1097,3051,1571],{"class":1324},[1097,3053,1411],{"class":1324},[1097,3055,3056],{"class":1107},"anthropic\u002Fclaude-haiku-4.5",[1097,3058,1375],{"class":1324},[1097,3060,3061],{"class":1099,"line":1985},[1097,3062,1389],{"emptyLinePlaceholder":21},[1097,3064,3065,3067,3070,3072],{"class":1099,"line":2031},[1097,3066,3046],{"class":1567},[1097,3068,3069],{"class":1320}," MODELS ",[1097,3071,1571],{"class":1324},[1097,3073,1337],{"class":1320},[1097,3075,3076,3079,3082,3084,3086,3089,3091,3093,3096,3098,3100,3103,3105],{"class":1099,"line":2098},[1097,3077,3078],{"class":1324},"  {",[1097,3080,3081],{"class":1330}," value",[1097,3083,1334],{"class":1324},[1097,3085,1411],{"class":1324},[1097,3087,3088],{"class":1107},"openai\u002Fgpt-5-nano",[1097,3090,1349],{"class":1324},[1097,3092,1695],{"class":1324},[1097,3094,3095],{"class":1330}," label",[1097,3097,1334],{"class":1324},[1097,3099,1411],{"class":1324},[1097,3101,3102],{"class":1107},"GPT-5 Nano",[1097,3104,1349],{"class":1324},[1097,3106,3107],{"class":1324}," },\n",[1097,3109,3110,3112,3114,3116,3118,3120,3122,3124,3126,3128,3130,3133,3135],{"class":1099,"line":2168},[1097,3111,3078],{"class":1324},[1097,3113,3081],{"class":1330},[1097,3115,1334],{"class":1324},[1097,3117,1411],{"class":1324},[1097,3119,3056],{"class":1107},[1097,3121,1349],{"class":1324},[1097,3123,1695],{"class":1324},[1097,3125,3095],{"class":1330},[1097,3127,1334],{"class":1324},[1097,3129,1411],{"class":1324},[1097,3131,3132],{"class":1107},"Claude Haiku 4.5",[1097,3134,1349],{"class":1324},[1097,3136,3107],{"class":1324},[1097,3138,3139,3141,3143,3145,3147,3150,3152,3154,3156,3158,3160,3163,3165],{"class":1099,"line":2208},[1097,3140,3078],{"class":1324},[1097,3142,3081],{"class":1330},[1097,3144,1334],{"class":1324},[1097,3146,1411],{"class":1324},[1097,3148,3149],{"class":1107},"google\u002Fgemini-3-flash",[1097,3151,1349],{"class":1324},[1097,3153,1695],{"class":1324},[1097,3155,3095],{"class":1330},[1097,3157,1334],{"class":1324},[1097,3159,1411],{"class":1324},[1097,3161,3162],{"class":1107},"Gemini 3 Flash",[1097,3164,1349],{"class":1324},[1097,3166,3167],{"class":1324}," }\n",[1097,3169,3170],{"class":1099,"line":2259},[1097,3171,3172],{"class":1320},"]\n",[1097,3174,3175],{"class":1099,"line":2272},[1097,3176,1389],{"emptyLinePlaceholder":21},[1097,3178,3179,3181,3183,3185,3187,3189,3191,3193,3195,3197],{"class":1099,"line":2302},[1097,3180,1311],{"class":1310},[1097,3182,1314],{"class":1310},[1097,3184,2482],{"class":1120},[1097,3186,1321],{"class":1320},[1097,3188,2581],{"class":1567},[1097,3190,1930],{"class":1324},[1097,3192,2586],{"class":1921},[1097,3194,1861],{"class":1324},[1097,3196,1804],{"class":1567},[1097,3198,1400],{"class":1324},[1097,3200,3201,3203,3205,3208,3210,3212,3214,3216,3218,3220,3222,3224,3226,3228,3230],{"class":1099,"line":2308},[1097,3202,2597],{"class":1567},[1097,3204,1689],{"class":1324},[1097,3206,3207],{"class":1320}," id",[1097,3209,1711],{"class":1324},[1097,3211,2607],{"class":1324},[1097,3213,2610],{"class":1310},[1097,3215,2893],{"class":1120},[1097,3217,1321],{"class":1330},[1097,3219,2586],{"class":1320},[1097,3221,1695],{"class":1324},[1097,3223,2553],{"class":1320},[1097,3225,1787],{"class":1324},[1097,3227,2625],{"class":1120},[1097,3229,1321],{"class":1330},[1097,3231,1325],{"class":1324},[1097,3233,3234,3237,3239,3241,3243,3246],{"class":1099,"line":2313},[1097,3235,3236],{"class":1330},"    id",[1097,3238,1334],{"class":1324},[1097,3240,2553],{"class":1320},[1097,3242,1787],{"class":1324},[1097,3244,3245],{"class":1120},"string",[1097,3247,2653],{"class":1330},[1097,3249,3250,3252,3254,3256,3258],{"class":1099,"line":2345},[1097,3251,2398],{"class":1324},[1097,3253,1861],{"class":1330},[1097,3255,1787],{"class":1324},[1097,3257,2664],{"class":1320},[1097,3259,1459],{"class":1330},[1097,3261,3262],{"class":1099,"line":2361},[1097,3263,1389],{"emptyLinePlaceholder":21},[1097,3265,3266,3268,3270,3273,3275,3278,3280,3283,3285,3287,3289,3291,3293,3295,3297,3299,3301,3303,3305],{"class":1099,"line":2379},[1097,3267,2597],{"class":1567},[1097,3269,1689],{"class":1324},[1097,3271,3272],{"class":1320}," model",[1097,3274,2607],{"class":1324},[1097,3276,3277],{"class":1320}," DEFAULT_MODEL",[1097,3279,1695],{"class":1324},[1097,3281,3282],{"class":1320}," messages",[1097,3284,1711],{"class":1324},[1097,3286,2607],{"class":1324},[1097,3288,2610],{"class":1310},[1097,3290,2487],{"class":1120},[1097,3292,1321],{"class":1330},[1097,3294,2586],{"class":1320},[1097,3296,1695],{"class":1324},[1097,3298,2553],{"class":1320},[1097,3300,1787],{"class":1324},[1097,3302,2625],{"class":1120},[1097,3304,1321],{"class":1330},[1097,3306,1325],{"class":1324},[1097,3308,3309,3312,3314,3316,3318,3320,3322,3324,3327,3329,3332,3334,3337,3339,3342,3344,3347,3349,3352,3354,3356,3359,3361,3363,3365],{"class":1099,"line":2395},[1097,3310,3311],{"class":1330},"    model",[1097,3313,1334],{"class":1324},[1097,3315,2553],{"class":1320},[1097,3317,1787],{"class":1324},[1097,3319,3245],{"class":1120},[1097,3321,1784],{"class":1330},[1097,3323,1787],{"class":1324},[1097,3325,3326],{"class":1120},"refine",[1097,3328,1321],{"class":1330},[1097,3330,3331],{"class":1921},"value",[1097,3333,1804],{"class":1567},[1097,3335,3336],{"class":1320}," MODELS",[1097,3338,1787],{"class":1324},[1097,3340,3341],{"class":1120},"some",[1097,3343,1321],{"class":1330},[1097,3345,3346],{"class":1921},"m",[1097,3348,1804],{"class":1567},[1097,3350,3351],{"class":1320}," m",[1097,3353,1787],{"class":1324},[1097,3355,3331],{"class":1320},[1097,3357,3358],{"class":1324}," ===",[1097,3360,3081],{"class":1320},[1097,3362,1861],{"class":1330},[1097,3364,1695],{"class":1324},[1097,3366,1400],{"class":1324},[1097,3368,3369,3372,3374,3376,3379],{"class":1099,"line":2403},[1097,3370,3371],{"class":1330},"      message",[1097,3373,1334],{"class":1324},[1097,3375,1411],{"class":1324},[1097,3377,3378],{"class":1107},"Invalid model",[1097,3380,1375],{"class":1324},[1097,3382,3384,3387,3389,3391,3394,3396],{"class":1099,"line":3383},30,[1097,3385,3386],{"class":1324},"    }",[1097,3388,1861],{"class":1330},[1097,3390,1787],{"class":1324},[1097,3392,3393],{"class":1120},"optional",[1097,3395,1784],{"class":1330},[1097,3397,1352],{"class":1324},[1097,3399,3401,3404,3406,3408,3410,3413,3415,3418,3420,3422,3424,3426,3428],{"class":1099,"line":3400},31,[1097,3402,3403],{"class":1330},"    messages",[1097,3405,1334],{"class":1324},[1097,3407,2553],{"class":1320},[1097,3409,1787],{"class":1324},[1097,3411,3412],{"class":1120},"array",[1097,3414,1321],{"class":1330},[1097,3416,3417],{"class":1320},"z",[1097,3419,1787],{"class":1324},[1097,3421,2643],{"class":1120},[1097,3423,1539],{"class":1324},[1097,3425,2464],{"class":1103},[1097,3427,2650],{"class":1324},[1097,3429,1887],{"class":1330},[1097,3431,3433,3435,3437,3439,3441],{"class":1099,"line":3432},32,[1097,3434,2398],{"class":1324},[1097,3436,1861],{"class":1330},[1097,3438,1787],{"class":1324},[1097,3440,2664],{"class":1320},[1097,3442,1459],{"class":1330},[1097,3444,3446],{"class":1099,"line":3445},33,[1097,3447,1389],{"emptyLinePlaceholder":21},[1097,3449,3451],{"class":1099,"line":3450},34,[1097,3452,3453],{"class":2675},"  \u002F\u002F Fetch the chat from the database\n",[1097,3455,3457,3459,3461,3463,3465,3467,3469,3472,3474,3476,3478,3481,3483],{"class":1099,"line":3456},35,[1097,3458,2597],{"class":1567},[1097,3460,2775],{"class":1320},[1097,3462,2607],{"class":1324},[1097,3464,2610],{"class":1310},[1097,3466,2425],{"class":1320},[1097,3468,1787],{"class":1324},[1097,3470,3471],{"class":1320},"query",[1097,3473,1787],{"class":1324},[1097,3475,1766],{"class":1320},[1097,3477,1787],{"class":1324},[1097,3479,3480],{"class":1120},"findFirst",[1097,3482,1321],{"class":1330},[1097,3484,1325],{"class":1324},[1097,3486,3488,3491,3493,3495,3497,3499,3501,3503,3505,3507,3509,3511,3513,3515,3517,3519,3521,3524,3527],{"class":1099,"line":3487},36,[1097,3489,3490],{"class":1120},"    where",[1097,3492,1334],{"class":1324},[1097,3494,1930],{"class":1324},[1097,3496,262],{"class":1921},[1097,3498,1695],{"class":1324},[1097,3500,1689],{"class":1324},[1097,3502,2916],{"class":1921},[1097,3504,1925],{"class":1324},[1097,3506,1804],{"class":1567},[1097,3508,2916],{"class":1120},[1097,3510,1321],{"class":1330},[1097,3512,262],{"class":1320},[1097,3514,1787],{"class":1324},[1097,3516,1998],{"class":1320},[1097,3518,1695],{"class":1324},[1097,3520,3207],{"class":1320},[1097,3522,3523],{"class":1310}," as",[1097,3525,3526],{"class":1103}," string",[1097,3528,1459],{"class":1330},[1097,3530,3532,3534],{"class":1099,"line":3531},37,[1097,3533,2398],{"class":1324},[1097,3535,1459],{"class":1330},[1097,3537,3539],{"class":1099,"line":3538},38,[1097,3540,1389],{"emptyLinePlaceholder":21},[1097,3542,3544,3547,3549,3552,3554,3557],{"class":1099,"line":3543},39,[1097,3545,3546],{"class":1310},"  if",[1097,3548,1930],{"class":1330},[1097,3550,3551],{"class":1324},"!",[1097,3553,262],{"class":1320},[1097,3555,3556],{"class":1330},") ",[1097,3558,1325],{"class":1324},[1097,3560,3562,3565,3567,3569,3571,3574,3576,3580,3582,3585,3587,3589,3592,3594,3596],{"class":1099,"line":3561},40,[1097,3563,3564],{"class":1310},"    throw",[1097,3566,2884],{"class":1120},[1097,3568,1321],{"class":1330},[1097,3570,1844],{"class":1324},[1097,3572,3573],{"class":1330}," statusCode",[1097,3575,1334],{"class":1324},[1097,3577,3579],{"class":3578},"sbssI"," 404",[1097,3581,1695],{"class":1324},[1097,3583,3584],{"class":1330}," statusMessage",[1097,3586,1334],{"class":1324},[1097,3588,1411],{"class":1324},[1097,3590,3591],{"class":1107},"Chat not found",[1097,3593,1349],{"class":1324},[1097,3595,1711],{"class":1324},[1097,3597,1459],{"class":1330},[1097,3599,3601],{"class":1099,"line":3600},41,[1097,3602,3603],{"class":1324},"  }\n",[1097,3605,3607],{"class":1099,"line":3606},42,[1097,3608,1389],{"emptyLinePlaceholder":21},[1097,3610,3612],{"class":1099,"line":3611},43,[1097,3613,3614],{"class":2675},"  \u002F\u002F Generate a title for the chat if it doesn't have one\n",[1097,3616,3618,3620,3622,3624,3626,3628,3631,3633],{"class":1099,"line":3617},44,[1097,3619,3546],{"class":1310},[1097,3621,1930],{"class":1330},[1097,3623,3551],{"class":1324},[1097,3625,262],{"class":1320},[1097,3627,1787],{"class":1324},[1097,3629,3630],{"class":1320},"title",[1097,3632,3556],{"class":1330},[1097,3634,1325],{"class":1324},[1097,3636,3638,3641,3643,3645,3647,3650,3652,3654,3656,3659,3661],{"class":1099,"line":3637},45,[1097,3639,3640],{"class":1567},"    const",[1097,3642,1689],{"class":1324},[1097,3644,1698],{"class":1330},[1097,3646,1334],{"class":1324},[1097,3648,3649],{"class":1320}," title",[1097,3651,1711],{"class":1324},[1097,3653,2607],{"class":1324},[1097,3655,2610],{"class":1310},[1097,3657,3658],{"class":1120}," generateText",[1097,3660,1321],{"class":1330},[1097,3662,1325],{"class":1324},[1097,3664,3666,3669,3671,3673],{"class":1099,"line":3665},46,[1097,3667,3668],{"class":1330},"      model",[1097,3670,1334],{"class":1324},[1097,3672,3277],{"class":1320},[1097,3674,1352],{"class":1324},[1097,3676,3678,3681,3683,3686,3689,3692],{"class":1099,"line":3677},47,[1097,3679,3680],{"class":1330},"      system",[1097,3682,1334],{"class":1324},[1097,3684,3685],{"class":1324}," `",[1097,3687,3688],{"class":1107},"Generate a short title (max 30 characters) based on the user's message. No quotes or punctuation.",[1097,3690,3691],{"class":1324},"`",[1097,3693,1352],{"class":1324},[1097,3695,3697,3700,3702,3705,3707,3710,3712,3714,3717,3720],{"class":1099,"line":3696},48,[1097,3698,3699],{"class":1330},"      prompt",[1097,3701,1334],{"class":1324},[1097,3703,3704],{"class":1320}," JSON",[1097,3706,1787],{"class":1324},[1097,3708,3709],{"class":1120},"stringify",[1097,3711,1321],{"class":1330},[1097,3713,1976],{"class":1320},[1097,3715,3716],{"class":1330},"[",[1097,3718,3719],{"class":3578},"0",[1097,3721,2305],{"class":1330},[1097,3723,3725,3727],{"class":1099,"line":3724},49,[1097,3726,3386],{"class":1324},[1097,3728,1459],{"class":1330},[1097,3730,3732],{"class":1099,"line":3731},50,[1097,3733,1389],{"emptyLinePlaceholder":21},[1097,3735,3737,3740,3742,3744,3747,3749,3751,3753,3755,3757,3759,3762,3764,3766,3768,3770,3772,3774,3777,3779,3782,3784,3786,3788,3790,3792,3794,3796,3798],{"class":1099,"line":3736},51,[1097,3738,3739],{"class":1310},"    await",[1097,3741,2425],{"class":1320},[1097,3743,1787],{"class":1324},[1097,3745,3746],{"class":1120},"update",[1097,3748,1321],{"class":1330},[1097,3750,2702],{"class":1320},[1097,3752,1787],{"class":1324},[1097,3754,1766],{"class":1320},[1097,3756,1861],{"class":1330},[1097,3758,1787],{"class":1324},[1097,3760,3761],{"class":1120},"set",[1097,3763,1321],{"class":1330},[1097,3765,1844],{"class":1324},[1097,3767,3649],{"class":1320},[1097,3769,1711],{"class":1324},[1097,3771,1861],{"class":1330},[1097,3773,1787],{"class":1324},[1097,3775,3776],{"class":1120},"where",[1097,3778,1321],{"class":1330},[1097,3780,3781],{"class":1120},"eq",[1097,3783,1321],{"class":1330},[1097,3785,2702],{"class":1320},[1097,3787,1787],{"class":1324},[1097,3789,1766],{"class":1320},[1097,3791,1787],{"class":1324},[1097,3793,1998],{"class":1320},[1097,3795,1695],{"class":1324},[1097,3797,3207],{"class":1320},[1097,3799,1951],{"class":1330},[1097,3801,3803],{"class":1099,"line":3802},52,[1097,3804,3603],{"class":1324},[1097,3806,3808],{"class":1099,"line":3807},53,[1097,3809,1389],{"emptyLinePlaceholder":21},[1097,3811,3813],{"class":1099,"line":3812},54,[1097,3814,3815],{"class":2675},"  \u002F\u002F Save the user message if it's a follow-up\n",[1097,3817,3819,3821,3824,3826,3828,3830,3832,3834,3837,3840,3843],{"class":1099,"line":3818},55,[1097,3820,2597],{"class":1567},[1097,3822,3823],{"class":1320}," lastMessage",[1097,3825,2607],{"class":1324},[1097,3827,3282],{"class":1320},[1097,3829,3716],{"class":1330},[1097,3831,1976],{"class":1320},[1097,3833,1787],{"class":1324},[1097,3835,3836],{"class":1320},"length",[1097,3838,3839],{"class":1324}," -",[1097,3841,3842],{"class":3578}," 1",[1097,3844,3172],{"class":1330},[1097,3846,3848,3850,3852,3855,3858,3860,3862,3864,3866,3868,3871,3873,3875,3877,3880,3882,3884],{"class":1099,"line":3847},56,[1097,3849,3546],{"class":1310},[1097,3851,1930],{"class":1330},[1097,3853,3854],{"class":1320},"lastMessage",[1097,3856,3857],{"class":1324},"?.",[1097,3859,2112],{"class":1320},[1097,3861,3358],{"class":1324},[1097,3863,1411],{"class":1324},[1097,3865,2130],{"class":1107},[1097,3867,1349],{"class":1324},[1097,3869,3870],{"class":1324}," &&",[1097,3872,3282],{"class":1320},[1097,3874,1787],{"class":1324},[1097,3876,3836],{"class":1320},[1097,3878,3879],{"class":1324}," >",[1097,3881,3842],{"class":3578},[1097,3883,3556],{"class":1330},[1097,3885,1325],{"class":1324},[1097,3887,3889,3891,3893,3895,3897,3899,3901,3903,3905,3907,3909,3911,3913],{"class":1099,"line":3888},57,[1097,3890,3739],{"class":1310},[1097,3892,2425],{"class":1320},[1097,3894,1787],{"class":1324},[1097,3896,2697],{"class":1120},[1097,3898,1321],{"class":1330},[1097,3900,2702],{"class":1320},[1097,3902,1787],{"class":1324},[1097,3904,1976],{"class":1320},[1097,3906,1861],{"class":1330},[1097,3908,1787],{"class":1324},[1097,3910,2713],{"class":1120},[1097,3912,1321],{"class":1330},[1097,3914,1325],{"class":1324},[1097,3916,3918,3921,3923,3925],{"class":1099,"line":3917},58,[1097,3919,3920],{"class":1330},"      chatId",[1097,3922,1334],{"class":1324},[1097,3924,3207],{"class":1320},[1097,3926,1352],{"class":1324},[1097,3928,3930,3933,3935,3937,3939,3941],{"class":1099,"line":3929},59,[1097,3931,3932],{"class":1330},"      role",[1097,3934,1334],{"class":1324},[1097,3936,1411],{"class":1324},[1097,3938,2130],{"class":1107},[1097,3940,1349],{"class":1324},[1097,3942,1352],{"class":1324},[1097,3944,3946,3949,3951,3953,3955],{"class":1099,"line":3945},60,[1097,3947,3948],{"class":1330},"      parts",[1097,3950,1334],{"class":1324},[1097,3952,3823],{"class":1320},[1097,3954,1787],{"class":1324},[1097,3956,2810],{"class":1320},[1097,3958,3960,3962],{"class":1099,"line":3959},61,[1097,3961,3386],{"class":1324},[1097,3963,1459],{"class":1330},[1097,3965,3967],{"class":1099,"line":3966},62,[1097,3968,3603],{"class":1324},[1097,3970,3972],{"class":1099,"line":3971},63,[1097,3973,1389],{"emptyLinePlaceholder":21},[1097,3975,3977],{"class":1099,"line":3976},64,[1097,3978,3979],{"class":2675},"  \u002F\u002F Create the streaming response\n",[1097,3981,3983,3985,3988,3990,3993,3995],{"class":1099,"line":3982},65,[1097,3984,2597],{"class":1567},[1097,3986,3987],{"class":1320}," stream",[1097,3989,2607],{"class":1324},[1097,3991,3992],{"class":1120}," createUIMessageStream",[1097,3994,1321],{"class":1330},[1097,3996,1325],{"class":1324},[1097,3998,4000,4003,4005,4008,4010,4013,4015,4017],{"class":1099,"line":3999},66,[1097,4001,4002],{"class":1120},"    execute",[1097,4004,1334],{"class":1324},[1097,4006,4007],{"class":1567}," async",[1097,4009,1918],{"class":1324},[1097,4011,4012],{"class":1921}," writer",[1097,4014,1925],{"class":1324},[1097,4016,1804],{"class":1567},[1097,4018,1400],{"class":1324},[1097,4020,4022,4025,4028,4030,4033,4035],{"class":1099,"line":4021},67,[1097,4023,4024],{"class":1567},"      const",[1097,4026,4027],{"class":1320}," result",[1097,4029,2607],{"class":1324},[1097,4031,4032],{"class":1120}," streamText",[1097,4034,1321],{"class":1330},[1097,4036,1325],{"class":1324},[1097,4038,4040,4043],{"class":1099,"line":4039},68,[1097,4041,4042],{"class":1320},"        model",[1097,4044,1352],{"class":1324},[1097,4046,4048,4051,4053,4055,4058,4060],{"class":1099,"line":4047},69,[1097,4049,4050],{"class":1330},"        system",[1097,4052,1334],{"class":1324},[1097,4054,3685],{"class":1324},[1097,4056,4057],{"class":1107},"You are a helpful AI assistant. Be concise and friendly.",[1097,4059,3691],{"class":1324},[1097,4061,1352],{"class":1324},[1097,4063,4065,4068,4070,4072,4075,4077,4079,4081],{"class":1099,"line":4064},70,[1097,4066,4067],{"class":1330},"        messages",[1097,4069,1334],{"class":1324},[1097,4071,2610],{"class":1310},[1097,4073,4074],{"class":1120}," convertToModelMessages",[1097,4076,1321],{"class":1330},[1097,4078,1976],{"class":1320},[1097,4080,1861],{"class":1330},[1097,4082,1352],{"class":1324},[1097,4084,4086,4089,4091],{"class":1099,"line":4085},71,[1097,4087,4088],{"class":1330},"        providerOptions",[1097,4090,1334],{"class":1324},[1097,4092,1400],{"class":1324},[1097,4094,4096,4099,4101],{"class":1099,"line":4095},72,[1097,4097,4098],{"class":1330},"          anthropic",[1097,4100,1334],{"class":1324},[1097,4102,1400],{"class":1324},[1097,4104,4106,4109,4111],{"class":1099,"line":4105},73,[1097,4107,4108],{"class":1330},"            thinking",[1097,4110,1334],{"class":1324},[1097,4112,1400],{"class":1324},[1097,4114,4116,4119,4121,4123,4126,4128],{"class":1099,"line":4115},74,[1097,4117,4118],{"class":1330},"              type",[1097,4120,1334],{"class":1324},[1097,4122,1411],{"class":1324},[1097,4124,4125],{"class":1107},"enabled",[1097,4127,1349],{"class":1324},[1097,4129,1352],{"class":1324},[1097,4131,4133,4136,4138],{"class":1099,"line":4132},75,[1097,4134,4135],{"class":1330},"              budgetTokens",[1097,4137,1334],{"class":1324},[1097,4139,4140],{"class":3578}," 2048\n",[1097,4142,4144],{"class":1099,"line":4143},76,[1097,4145,4146],{"class":1324},"            }\n",[1097,4148,4150],{"class":1099,"line":4149},77,[1097,4151,4152],{"class":1324},"          },\n",[1097,4154,4156,4159,4161],{"class":1099,"line":4155},78,[1097,4157,4158],{"class":1330},"          google",[1097,4160,1334],{"class":1324},[1097,4162,1400],{"class":1324},[1097,4164,4166,4169,4171],{"class":1099,"line":4165},79,[1097,4167,4168],{"class":1330},"            thinkingConfig",[1097,4170,1334],{"class":1324},[1097,4172,1400],{"class":1324},[1097,4174,4176,4179,4181,4185],{"class":1099,"line":4175},80,[1097,4177,4178],{"class":1330},"              includeThoughts",[1097,4180,1334],{"class":1324},[1097,4182,4184],{"class":4183},"sfNiH"," true",[1097,4186,1352],{"class":1324},[1097,4188,4190,4193,4195,4197,4200],{"class":1099,"line":4189},81,[1097,4191,4192],{"class":1330},"              thinkingLevel",[1097,4194,1334],{"class":1324},[1097,4196,1411],{"class":1324},[1097,4198,4199],{"class":1107},"low",[1097,4201,1375],{"class":1324},[1097,4203,4205],{"class":1099,"line":4204},82,[1097,4206,4146],{"class":1324},[1097,4208,4210],{"class":1099,"line":4209},83,[1097,4211,4152],{"class":1324},[1097,4213,4215,4218,4220],{"class":1099,"line":4214},84,[1097,4216,4217],{"class":1330},"          openai",[1097,4219,1334],{"class":1324},[1097,4221,1400],{"class":1324},[1097,4223,4225,4228,4230,4232,4234,4236],{"class":1099,"line":4224},85,[1097,4226,4227],{"class":1330},"            reasoningEffort",[1097,4229,1334],{"class":1324},[1097,4231,1411],{"class":1324},[1097,4233,4199],{"class":1107},[1097,4235,1349],{"class":1324},[1097,4237,1352],{"class":1324},[1097,4239,4241,4244,4246,4248,4251],{"class":1099,"line":4240},86,[1097,4242,4243],{"class":1330},"            reasoningSummary",[1097,4245,1334],{"class":1324},[1097,4247,1411],{"class":1324},[1097,4249,4250],{"class":1107},"detailed",[1097,4252,1375],{"class":1324},[1097,4254,4256],{"class":1099,"line":4255},87,[1097,4257,4258],{"class":1324},"          }\n",[1097,4260,4262],{"class":1099,"line":4261},88,[1097,4263,4264],{"class":1324},"        }\n",[1097,4266,4268,4271],{"class":1099,"line":4267},89,[1097,4269,4270],{"class":1324},"      }",[1097,4272,1459],{"class":1330},[1097,4274,4276],{"class":1099,"line":4275},90,[1097,4277,1389],{"emptyLinePlaceholder":21},[1097,4279,4281],{"class":1099,"line":4280},91,[1097,4282,4283],{"class":2675},"      \u002F\u002F Notify the client that a title was generated\n",[1097,4285,4287,4290,4292,4294,4296,4298,4300,4302],{"class":1099,"line":4286},92,[1097,4288,4289],{"class":1310},"      if",[1097,4291,1930],{"class":1330},[1097,4293,3551],{"class":1324},[1097,4295,262],{"class":1320},[1097,4297,1787],{"class":1324},[1097,4299,3630],{"class":1320},[1097,4301,3556],{"class":1330},[1097,4303,1325],{"class":1324},[1097,4305,4307,4310,4312,4315,4317],{"class":1099,"line":4306},93,[1097,4308,4309],{"class":1320},"        writer",[1097,4311,1787],{"class":1324},[1097,4313,4314],{"class":1120},"write",[1097,4316,1321],{"class":1330},[1097,4318,1325],{"class":1324},[1097,4320,4322,4325,4327,4329,4332,4334],{"class":1099,"line":4321},94,[1097,4323,4324],{"class":1330},"          type",[1097,4326,1334],{"class":1324},[1097,4328,1411],{"class":1324},[1097,4330,4331],{"class":1107},"data-chat-title",[1097,4333,1349],{"class":1324},[1097,4335,1352],{"class":1324},[1097,4337,4339,4342,4344,4346,4348,4350,4352,4355,4357],{"class":1099,"line":4338},95,[1097,4340,4341],{"class":1330},"          data",[1097,4343,1334],{"class":1324},[1097,4345,1689],{"class":1324},[1097,4347,2602],{"class":1330},[1097,4349,1334],{"class":1324},[1097,4351,1411],{"class":1324},[1097,4353,4354],{"class":1107},"Title generated",[1097,4356,1349],{"class":1324},[1097,4358,3107],{"class":1324},[1097,4360,4362,4365,4367],{"class":1099,"line":4361},96,[1097,4363,4364],{"class":1330},"          transient",[1097,4366,1334],{"class":1324},[1097,4368,4369],{"class":4183}," true\n",[1097,4371,4373,4376],{"class":1099,"line":4372},97,[1097,4374,4375],{"class":1324},"        }",[1097,4377,1459],{"class":1330},[1097,4379,4381],{"class":1099,"line":4380},98,[1097,4382,4383],{"class":1324},"      }\n",[1097,4385,4387],{"class":1099,"line":4386},99,[1097,4388,1389],{"emptyLinePlaceholder":21},[1097,4390,4392,4395,4397,4400,4402,4405,4407,4410],{"class":1099,"line":4391},100,[1097,4393,4394],{"class":1320},"      writer",[1097,4396,1787],{"class":1324},[1097,4398,4399],{"class":1120},"merge",[1097,4401,1321],{"class":1330},[1097,4403,4404],{"class":1320},"result",[1097,4406,1787],{"class":1324},[1097,4408,4409],{"class":1120},"toUIMessageStream",[1097,4411,1887],{"class":1330},[1097,4413,4415],{"class":1099,"line":4414},101,[1097,4416,4417],{"class":1324},"    },\n",[1097,4419,4421,4424,4426,4428,4430,4432,4434,4436],{"class":1099,"line":4420},102,[1097,4422,4423],{"class":1120},"    onFinish",[1097,4425,1334],{"class":1324},[1097,4427,4007],{"class":1567},[1097,4429,1918],{"class":1324},[1097,4431,3282],{"class":1921},[1097,4433,1925],{"class":1324},[1097,4435,1804],{"class":1567},[1097,4437,1400],{"class":1324},[1097,4439,4441],{"class":1099,"line":4440},103,[1097,4442,4443],{"class":2675},"      \u002F\u002F Save the assistant's response to the database\n",[1097,4445,4447,4450,4452,4454,4456,4458,4460,4462,4464,4466,4468,4470,4472,4474,4476,4479,4481,4484,4486,4488],{"class":1099,"line":4446},104,[1097,4448,4449],{"class":1310},"      await",[1097,4451,2425],{"class":1320},[1097,4453,1787],{"class":1324},[1097,4455,2697],{"class":1120},[1097,4457,1321],{"class":1330},[1097,4459,2702],{"class":1320},[1097,4461,1787],{"class":1324},[1097,4463,1976],{"class":1320},[1097,4465,1861],{"class":1330},[1097,4467,1787],{"class":1324},[1097,4469,2713],{"class":1120},[1097,4471,1321],{"class":1330},[1097,4473,1976],{"class":1320},[1097,4475,1787],{"class":1324},[1097,4477,4478],{"class":1120},"map",[1097,4480,1321],{"class":1330},[1097,4482,4483],{"class":1921},"message",[1097,4485,1804],{"class":1567},[1097,4487,1930],{"class":1330},[1097,4489,1325],{"class":1324},[1097,4491,4493,4496,4498,4500,4502,4504],{"class":1099,"line":4492},105,[1097,4494,4495],{"class":1330},"        chatId",[1097,4497,1334],{"class":1324},[1097,4499,2775],{"class":1320},[1097,4501,1787],{"class":1324},[1097,4503,1998],{"class":1320},[1097,4505,1352],{"class":1324},[1097,4507,4509,4512,4514,4516,4518,4520,4522,4524,4526,4528,4531,4533,4535,4537],{"class":1099,"line":4508},106,[1097,4510,4511],{"class":1330},"        role",[1097,4513,1334],{"class":1324},[1097,4515,2602],{"class":1320},[1097,4517,1787],{"class":1324},[1097,4519,2112],{"class":1320},[1097,4521,3523],{"class":1310},[1097,4523,1411],{"class":1324},[1097,4525,2130],{"class":1107},[1097,4527,1349],{"class":1324},[1097,4529,4530],{"class":1324}," |",[1097,4532,1411],{"class":1324},[1097,4534,2139],{"class":1107},[1097,4536,1349],{"class":1324},[1097,4538,1352],{"class":1324},[1097,4540,4542,4545,4547,4549,4551],{"class":1099,"line":4541},107,[1097,4543,4544],{"class":1330},"        parts",[1097,4546,1334],{"class":1324},[1097,4548,2602],{"class":1320},[1097,4550,1787],{"class":1324},[1097,4552,2810],{"class":1320},[1097,4554,4556,4558],{"class":1099,"line":4555},108,[1097,4557,4270],{"class":1324},[1097,4559,4560],{"class":1330},")))\n",[1097,4562,4564],{"class":1099,"line":4563},109,[1097,4565,4566],{"class":1324},"    }\n",[1097,4568,4570,4572],{"class":1099,"line":4569},110,[1097,4571,2398],{"class":1324},[1097,4573,1459],{"class":1330},[1097,4575,4577],{"class":1099,"line":4576},111,[1097,4578,1389],{"emptyLinePlaceholder":21},[1097,4580,4582,4584,4587,4589,4591,4593,4595],{"class":1099,"line":4581},112,[1097,4583,2825],{"class":1310},[1097,4585,4586],{"class":1120}," createUIMessageStreamResponse",[1097,4588,1321],{"class":1330},[1097,4590,1844],{"class":1324},[1097,4592,3987],{"class":1320},[1097,4594,1711],{"class":1324},[1097,4596,1459],{"class":1330},[1097,4598,4600,4602],{"class":1099,"line":4599},113,[1097,4601,1456],{"class":1324},[1097,4603,1459],{"class":1320},[987,4605,4606],{},"Here's what each part does:",[987,4608,4609],{},[1005,4610,4611],{},"AI Gateway",[987,4613,4614,4615,4618],{},"Thanks to ",[1041,4616,1078],{"href":1076,"rel":4617},[1045],", we can use any AI model supported by the gateway just by specifying the model name.",[987,4620,4621],{},[1005,4622,4623],{},"Automatic Title Generation",[987,4625,4626,4627,4634],{},"When a chat doesn't have a title yet, we use ",[1041,4628,4631],{"href":4629,"rel":4630},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-core\u002Fgenerate-text#generatetext",[1045],[1047,4632,4633],{},"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\".",[987,4636,4637],{},[1005,4638,4639],{},"Streaming with streamText",[987,4641,4642,4643,4648],{},"The ",[1041,4644,4646],{"href":2844,"rel":4645},[1045],[1047,4647,2848],{}," function generates a streaming response from the AI model. Key options include:",[999,4650,4651,4657,4662],{},[1002,4652,4653,4656],{},[1047,4654,4655],{},"model",": The AI model to use",[1002,4658,4659,4661],{},[1047,4660,2148],{},": Instructions that guide the AI's behavior",[1002,4663,4664,4666],{},[1047,4665,1976],{},": The conversation history",[987,4668,4669],{},[1005,4670,4671],{},"UIMessageStream",[987,4673,4642,4674,1050,4680,4686],{},[1041,4675,4678],{"href":4676,"rel":4677},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream#createuimessagestream",[1045],[1047,4679,2856],{},[1041,4681,4684],{"href":4682,"rel":4683},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream-response#createuimessagestreamresponse",[1045],[1047,4685,2864],{}," 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.",[987,4688,4642,4689,4692,4693,4695,4696,4699],{},[1047,4690,4691],{},"writer.write()"," method allows sending custom data events to the client (like ",[1047,4694,4331],{},"), while ",[1047,4697,4698],{},"onFinish"," is called when streaming completes, perfect for persisting the assistant's response.",[1125,4701,4703],{"id":4702},"fetching-a-chat","Fetching a chat",[987,4705,4706],{},"Add an endpoint to fetch existing chat data from your database:",[1297,4708,4709],{},[1088,4710,4713],{"className":1301,"code":4711,"filename":4712,"language":1303,"meta":1093,"style":1093},"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",[1047,4714,4715,4741,4764,4786,4804,4808,4830,4862,4876,4888,4892,4920,4951,4960,4969,4998,5002,5006,5012,5016,5030,5062,5066,5070,5076],{"__ignoreMap":1093},[1097,4716,4717,4719,4721,4723,4725,4727,4729,4731,4733,4735,4737,4739],{"class":1099,"line":1100},[1097,4718,1686],{"class":1310},[1097,4720,1689],{"class":1324},[1097,4722,2884],{"class":1320},[1097,4724,1695],{"class":1324},[1097,4726,2482],{"class":1320},[1097,4728,1695],{"class":1324},[1097,4730,2893],{"class":1320},[1097,4732,1711],{"class":1324},[1097,4734,1714],{"class":1310},[1097,4736,1411],{"class":1324},[1097,4738,1125],{"class":1107},[1097,4740,1375],{"class":1324},[1097,4742,4743,4745,4747,4750,4752,4754,4756,4758,4760,4762],{"class":1099,"line":1117},[1097,4744,1686],{"class":1310},[1097,4746,1689],{"class":1324},[1097,4748,4749],{"class":1320}," asc",[1097,4751,1695],{"class":1324},[1097,4753,2916],{"class":1320},[1097,4755,1711],{"class":1324},[1097,4757,1714],{"class":1310},[1097,4759,1411],{"class":1324},[1097,4761,1739],{"class":1107},[1097,4763,1375],{"class":1324},[1097,4765,4766,4768,4770,4772,4774,4776,4778,4780,4782,4784],{"class":1099,"line":1340},[1097,4767,1686],{"class":1310},[1097,4769,1689],{"class":1324},[1097,4771,2425],{"class":1320},[1097,4773,1695],{"class":1324},[1097,4775,2533],{"class":1320},[1097,4777,1711],{"class":1324},[1097,4779,1714],{"class":1310},[1097,4781,1411],{"class":1324},[1097,4783,2542],{"class":1107},[1097,4785,1375],{"class":1324},[1097,4787,4788,4790,4792,4794,4796,4798,4800,4802],{"class":1099,"line":1355},[1097,4789,1686],{"class":1310},[1097,4791,1689],{"class":1324},[1097,4793,2553],{"class":1320},[1097,4795,1711],{"class":1324},[1097,4797,1714],{"class":1310},[1097,4799,1411],{"class":1324},[1097,4801,2562],{"class":1107},[1097,4803,1375],{"class":1324},[1097,4805,4806],{"class":1099,"line":1367},[1097,4807,1389],{"emptyLinePlaceholder":21},[1097,4809,4810,4812,4814,4816,4818,4820,4822,4824,4826,4828],{"class":1099,"line":1378},[1097,4811,1311],{"class":1310},[1097,4813,1314],{"class":1310},[1097,4815,2482],{"class":1120},[1097,4817,1321],{"class":1320},[1097,4819,2581],{"class":1567},[1097,4821,1930],{"class":1324},[1097,4823,2586],{"class":1921},[1097,4825,1861],{"class":1324},[1097,4827,1804],{"class":1567},[1097,4829,1400],{"class":1324},[1097,4831,4832,4834,4836,4838,4840,4842,4844,4846,4848,4850,4852,4854,4856,4858,4860],{"class":1099,"line":1386},[1097,4833,2597],{"class":1567},[1097,4835,1689],{"class":1324},[1097,4837,3207],{"class":1320},[1097,4839,1711],{"class":1324},[1097,4841,2607],{"class":1324},[1097,4843,2610],{"class":1310},[1097,4845,2893],{"class":1120},[1097,4847,1321],{"class":1330},[1097,4849,2586],{"class":1320},[1097,4851,1695],{"class":1324},[1097,4853,2553],{"class":1320},[1097,4855,1787],{"class":1324},[1097,4857,2625],{"class":1120},[1097,4859,1321],{"class":1330},[1097,4861,1325],{"class":1324},[1097,4863,4864,4866,4868,4870,4872,4874],{"class":1099,"line":1392},[1097,4865,3236],{"class":1330},[1097,4867,1334],{"class":1324},[1097,4869,2553],{"class":1320},[1097,4871,1787],{"class":1324},[1097,4873,3245],{"class":1120},[1097,4875,2653],{"class":1330},[1097,4877,4878,4880,4882,4884,4886],{"class":1099,"line":1403},[1097,4879,2398],{"class":1324},[1097,4881,1861],{"class":1330},[1097,4883,1787],{"class":1324},[1097,4885,2664],{"class":1320},[1097,4887,1459],{"class":1330},[1097,4889,4890],{"class":1099,"line":1419},[1097,4891,1389],{"emptyLinePlaceholder":21},[1097,4893,4894,4896,4898,4900,4902,4904,4906,4908,4910,4912,4914,4916,4918],{"class":1099,"line":1425},[1097,4895,2597],{"class":1567},[1097,4897,2775],{"class":1320},[1097,4899,2607],{"class":1324},[1097,4901,2610],{"class":1310},[1097,4903,2425],{"class":1320},[1097,4905,1787],{"class":1324},[1097,4907,3471],{"class":1320},[1097,4909,1787],{"class":1324},[1097,4911,1766],{"class":1320},[1097,4913,1787],{"class":1324},[1097,4915,3480],{"class":1120},[1097,4917,1321],{"class":1330},[1097,4919,1325],{"class":1324},[1097,4921,4922,4924,4926,4928,4930,4932,4934,4936,4938,4940,4942,4944,4946,4949],{"class":1099,"line":1430},[1097,4923,3490],{"class":1330},[1097,4925,1334],{"class":1324},[1097,4927,1930],{"class":1330},[1097,4929,3781],{"class":1120},[1097,4931,1321],{"class":1330},[1097,4933,2702],{"class":1320},[1097,4935,1787],{"class":1324},[1097,4937,1766],{"class":1320},[1097,4939,1787],{"class":1324},[1097,4941,1998],{"class":1320},[1097,4943,1695],{"class":1324},[1097,4945,3207],{"class":1320},[1097,4947,4948],{"class":1330},"))",[1097,4950,1352],{"class":1324},[1097,4952,4953,4956,4958],{"class":1099,"line":1453},[1097,4954,4955],{"class":1330},"    with",[1097,4957,1334],{"class":1324},[1097,4959,1400],{"class":1324},[1097,4961,4962,4965,4967],{"class":1099,"line":1958},[1097,4963,4964],{"class":1330},"      messages",[1097,4966,1334],{"class":1324},[1097,4968,1400],{"class":1324},[1097,4970,4971,4974,4976,4979,4981,4983,4985,4987,4989,4991,4993,4996],{"class":1099,"line":1985},[1097,4972,4973],{"class":1120},"        orderBy",[1097,4975,1334],{"class":1324},[1097,4977,4978],{"class":1324}," ()",[1097,4980,1804],{"class":1567},[1097,4982,4749],{"class":1120},[1097,4984,1321],{"class":1330},[1097,4986,2702],{"class":1320},[1097,4988,1787],{"class":1324},[1097,4990,1976],{"class":1320},[1097,4992,1787],{"class":1324},[1097,4994,4995],{"class":1320},"createdAt",[1097,4997,1459],{"class":1330},[1097,4999,5000],{"class":1099,"line":2031},[1097,5001,4383],{"class":1324},[1097,5003,5004],{"class":1099,"line":2098},[1097,5005,4566],{"class":1324},[1097,5007,5008,5010],{"class":1099,"line":2168},[1097,5009,2398],{"class":1324},[1097,5011,1459],{"class":1330},[1097,5013,5014],{"class":1099,"line":2208},[1097,5015,1389],{"emptyLinePlaceholder":21},[1097,5017,5018,5020,5022,5024,5026,5028],{"class":1099,"line":2259},[1097,5019,3546],{"class":1310},[1097,5021,1930],{"class":1330},[1097,5023,3551],{"class":1324},[1097,5025,262],{"class":1320},[1097,5027,3556],{"class":1330},[1097,5029,1325],{"class":1324},[1097,5031,5032,5034,5036,5038,5040,5042,5044,5046,5048,5050,5052,5054,5056,5058,5060],{"class":1099,"line":2272},[1097,5033,3564],{"class":1310},[1097,5035,2884],{"class":1120},[1097,5037,1321],{"class":1330},[1097,5039,1844],{"class":1324},[1097,5041,3573],{"class":1330},[1097,5043,1334],{"class":1324},[1097,5045,3579],{"class":3578},[1097,5047,1695],{"class":1324},[1097,5049,3584],{"class":1330},[1097,5051,1334],{"class":1324},[1097,5053,1411],{"class":1324},[1097,5055,3591],{"class":1107},[1097,5057,1349],{"class":1324},[1097,5059,1711],{"class":1324},[1097,5061,1459],{"class":1330},[1097,5063,5064],{"class":1099,"line":2302},[1097,5065,3603],{"class":1324},[1097,5067,5068],{"class":1099,"line":2308},[1097,5069,1389],{"emptyLinePlaceholder":21},[1097,5071,5072,5074],{"class":1099,"line":2313},[1097,5073,2825],{"class":1310},[1097,5075,2828],{"class":1320},[1097,5077,5078,5080],{"class":1099,"line":2345},[1097,5079,1456],{"class":1324},[1097,5081,1459],{"class":1320},[991,5083,5085],{"id":5084},"wire-up-the-ui","Wire up the UI",[987,5087,5088,5089,5094,5095,5100],{},"Nuxt UI provides purpose-built components for AI chat interfaces: ",[1041,5090,5091],{"href":281},[1047,5092,5093],{},"UChatPrompt"," for the input area and ",[1041,5096,5097],{"href":271},[1047,5098,5099],{},"UChatMessages"," for displaying the conversation.",[1125,5102,5104],{"id":5103},"creating-the-home-page","Creating the home page",[987,5106,5107,5108,5112],{},"The home page is where users start a new conversation. The ",[1041,5109,5110],{"href":281},[1047,5111,5093],{}," component provides a textarea with auto-resize, keyboard shortcuts, and a submit button:",[1297,5114,5115],{},[1088,5116,5120],{"className":1529,"code":5117,"filename":5118,"highlights":5119,"language":34,"meta":1093,"style":1093},"\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",[3450,3456,3487,3531,3538,3543,3561,3600,3606],[1047,5121,5122,5145,5164,5182,5186,5200,5226,5230,5243,5247,5252,5278,5294,5303,5311,5325,5363,5367,5371,5377,5381,5386,5412,5417,5425,5429,5437,5458,5472,5493,5514,5519,5528,5532,5540,5555,5570,5585,5600,5615,5621,5644,5653,5662,5670,5678],{"__ignoreMap":1093},[1097,5123,5124,5126,5129,5132,5135,5137,5139,5141,5143],{"class":1099,"line":1100},[1097,5125,1539],{"class":1324},[1097,5127,5128],{"class":1330},"script",[1097,5130,5131],{"class":1567}," setup",[1097,5133,5134],{"class":1567}," lang",[1097,5136,1571],{"class":1324},[1097,5138,1498],{"class":1324},[1097,5140,1303],{"class":1107},[1097,5142,1498],{"class":1324},[1097,5144,1545],{"class":1324},[1097,5146,5147,5149,5152,5154,5157,5159,5162],{"class":1099,"line":1117},[1097,5148,3046],{"class":1567},[1097,5150,5151],{"class":1320}," input ",[1097,5153,1571],{"class":1324},[1097,5155,5156],{"class":1120}," ref",[1097,5158,1321],{"class":1320},[1097,5160,5161],{"class":1324},"''",[1097,5163,1459],{"class":1320},[1097,5165,5166,5168,5171,5173,5175,5177,5180],{"class":1099,"line":1340},[1097,5167,3046],{"class":1567},[1097,5169,5170],{"class":1320}," loading ",[1097,5172,1571],{"class":1324},[1097,5174,5156],{"class":1120},[1097,5176,1321],{"class":1320},[1097,5178,5179],{"class":4183},"false",[1097,5181,1459],{"class":1320},[1097,5183,5184],{"class":1099,"line":1355},[1097,5185,1389],{"emptyLinePlaceholder":21},[1097,5187,5188,5190,5193,5196,5198],{"class":1099,"line":1367},[1097,5189,2581],{"class":1567},[1097,5191,5192],{"class":1567}," function",[1097,5194,5195],{"class":1120}," createChat",[1097,5197,1784],{"class":1324},[1097,5199,1400],{"class":1324},[1097,5201,5202,5204,5206,5208,5211,5213,5215,5217,5220,5223],{"class":1099,"line":1378},[1097,5203,3546],{"class":1310},[1097,5205,1930],{"class":1330},[1097,5207,3551],{"class":1324},[1097,5209,5210],{"class":1320},"input",[1097,5212,1787],{"class":1324},[1097,5214,3331],{"class":1320},[1097,5216,1787],{"class":1324},[1097,5218,5219],{"class":1120},"trim",[1097,5221,5222],{"class":1330},"()) ",[1097,5224,5225],{"class":1310},"return\n",[1097,5227,5228],{"class":1099,"line":1386},[1097,5229,1389],{"emptyLinePlaceholder":21},[1097,5231,5232,5235,5237,5239,5241],{"class":1099,"line":1392},[1097,5233,5234],{"class":1320},"  loading",[1097,5236,1787],{"class":1324},[1097,5238,3331],{"class":1320},[1097,5240,2607],{"class":1324},[1097,5242,4369],{"class":4183},[1097,5244,5245],{"class":1099,"line":1403},[1097,5246,1389],{"emptyLinePlaceholder":21},[1097,5248,5249],{"class":1099,"line":1419},[1097,5250,5251],{"class":2675},"  \u002F\u002F Create a new chat on the server\n",[1097,5253,5254,5256,5258,5260,5262,5265,5267,5269,5272,5274,5276],{"class":1099,"line":1425},[1097,5255,2597],{"class":1567},[1097,5257,2775],{"class":1320},[1097,5259,2607],{"class":1324},[1097,5261,2610],{"class":1310},[1097,5263,5264],{"class":1120}," $fetch",[1097,5266,1321],{"class":1330},[1097,5268,1349],{"class":1324},[1097,5270,5271],{"class":1107},"\u002Fapi\u002Fchats",[1097,5273,1349],{"class":1324},[1097,5275,1695],{"class":1324},[1097,5277,1400],{"class":1324},[1097,5279,5280,5283,5285,5287,5290,5292],{"class":1099,"line":1430},[1097,5281,5282],{"class":1330},"    method",[1097,5284,1334],{"class":1324},[1097,5286,1411],{"class":1324},[1097,5288,5289],{"class":1107},"POST",[1097,5291,1349],{"class":1324},[1097,5293,1352],{"class":1324},[1097,5295,5296,5299,5301],{"class":1099,"line":1453},[1097,5297,5298],{"class":1330},"    body",[1097,5300,1334],{"class":1324},[1097,5302,1400],{"class":1324},[1097,5304,5305,5307,5309],{"class":1099,"line":1958},[1097,5306,3371],{"class":1330},[1097,5308,1334],{"class":1324},[1097,5310,1400],{"class":1324},[1097,5312,5313,5315,5317,5319,5321,5323],{"class":1099,"line":1985},[1097,5314,4511],{"class":1330},[1097,5316,1334],{"class":1324},[1097,5318,1411],{"class":1324},[1097,5320,2130],{"class":1107},[1097,5322,1349],{"class":1324},[1097,5324,1352],{"class":1324},[1097,5326,5327,5329,5331,5333,5335,5337,5339,5341,5344,5346,5348,5350,5352,5355,5357,5359,5361],{"class":1099,"line":2031},[1097,5328,4544],{"class":1330},[1097,5330,1334],{"class":1324},[1097,5332,1438],{"class":1330},[1097,5334,1844],{"class":1324},[1097,5336,2504],{"class":1330},[1097,5338,1334],{"class":1324},[1097,5340,1411],{"class":1324},[1097,5342,5343],{"class":1107},"text",[1097,5345,1349],{"class":1324},[1097,5347,1695],{"class":1324},[1097,5349,1698],{"class":1330},[1097,5351,1334],{"class":1324},[1097,5353,5354],{"class":1320}," input",[1097,5356,1787],{"class":1324},[1097,5358,3331],{"class":1320},[1097,5360,1711],{"class":1324},[1097,5362,3172],{"class":1330},[1097,5364,5365],{"class":1099,"line":2098},[1097,5366,4383],{"class":1324},[1097,5368,5369],{"class":1099,"line":2168},[1097,5370,4566],{"class":1324},[1097,5372,5373,5375],{"class":1099,"line":2208},[1097,5374,2398],{"class":1324},[1097,5376,1459],{"class":1330},[1097,5378,5379],{"class":1099,"line":2259},[1097,5380,1389],{"emptyLinePlaceholder":21},[1097,5382,5383],{"class":1099,"line":2272},[1097,5384,5385],{"class":2675},"  \u002F\u002F Navigate to the chat page\n",[1097,5387,5388,5391,5393,5395,5398,5401,5403,5405,5407,5410],{"class":1099,"line":2302},[1097,5389,5390],{"class":1120},"  navigateTo",[1097,5392,1321],{"class":1330},[1097,5394,3691],{"class":1324},[1097,5396,5397],{"class":1107},"\u002Fchat\u002F",[1097,5399,5400],{"class":1324},"${",[1097,5402,262],{"class":1320},[1097,5404,1787],{"class":1324},[1097,5406,1998],{"class":1320},[1097,5408,5409],{"class":1324},"}`",[1097,5411,1459],{"class":1330},[1097,5413,5414],{"class":1099,"line":2308},[1097,5415,5416],{"class":1324},"}\n",[1097,5418,5419,5421,5423],{"class":1099,"line":2313},[1097,5420,1615],{"class":1324},[1097,5422,5128],{"class":1330},[1097,5424,1545],{"class":1324},[1097,5426,5427],{"class":1099,"line":2345},[1097,5428,1389],{"emptyLinePlaceholder":21},[1097,5430,5431,5433,5435],{"class":1099,"line":2361},[1097,5432,1539],{"class":1324},[1097,5434,1542],{"class":1330},[1097,5436,1545],{"class":1324},[1097,5438,5439,5441,5444,5447,5449,5451,5454,5456],{"class":1099,"line":2379},[1097,5440,1552],{"class":1324},[1097,5442,5443],{"class":1330},"UDashboardPanel",[1097,5445,5446],{"class":1567}," :ui",[1097,5448,1571],{"class":1324},[1097,5450,1498],{"class":1324},[1097,5452,5453],{"class":1107},"{ body: 'p-0 sm:p-0' }",[1097,5455,1498],{"class":1324},[1097,5457,1545],{"class":1324},[1097,5459,5460,5462,5464,5467,5470],{"class":1099,"line":2395},[1097,5461,1561],{"class":1324},[1097,5463,1542],{"class":1330},[1097,5465,5466],{"class":1324}," #",[1097,5468,5469],{"class":1567},"body",[1097,5471,1545],{"class":1324},[1097,5473,5474,5476,5479,5482,5484,5486,5489,5491],{"class":1099,"line":2403},[1097,5475,1585],{"class":1324},[1097,5477,5478],{"class":1330},"UContainer",[1097,5480,5481],{"class":1567}," class",[1097,5483,1571],{"class":1324},[1097,5485,1498],{"class":1324},[1097,5487,5488],{"class":1107},"min-h-dvh flex flex-col justify-center gap-6 py-8",[1097,5490,1498],{"class":1324},[1097,5492,1545],{"class":1324},[1097,5494,5495,5498,5501,5503,5505,5507,5510,5512],{"class":1099,"line":3383},[1097,5496,5497],{"class":1324},"        \u003C",[1097,5499,5500],{"class":1330},"h1",[1097,5502,5481],{"class":1567},[1097,5504,1571],{"class":1324},[1097,5506,1498],{"class":1324},[1097,5508,5509],{"class":1107},"text-3xl sm:text-4xl text-highlighted font-bold",[1097,5511,1498],{"class":1324},[1097,5513,1545],{"class":1324},[1097,5515,5516],{"class":1099,"line":3400},[1097,5517,5518],{"class":1320},"          How can I help you today?\n",[1097,5520,5521,5524,5526],{"class":1099,"line":3432},[1097,5522,5523],{"class":1324},"        \u003C\u002F",[1097,5525,5500],{"class":1330},[1097,5527,1545],{"class":1324},[1097,5529,5530],{"class":1099,"line":3445},[1097,5531,1389],{"emptyLinePlaceholder":21},[1097,5533,5535,5537],{"class":5534,"line":3450},[1099,1549],[1097,5536,5497],{"class":1324},[1097,5538,5539],{"class":1330},"UChatPrompt\n",[1097,5541,5543,5546,5548,5550,5552],{"class":5542,"line":3456},[1099,1549],[1097,5544,5545],{"class":1567},"          v-model",[1097,5547,1571],{"class":1324},[1097,5549,1498],{"class":1324},[1097,5551,5210],{"class":1107},[1097,5553,5554],{"class":1324},"\"\n",[1097,5556,5558,5561,5563,5565,5568],{"class":5557,"line":3487},[1099,1549],[1097,5559,5560],{"class":1567},"          :status",[1097,5562,1571],{"class":1324},[1097,5564,1498],{"class":1324},[1097,5566,5567],{"class":1107},"loading ? 'streaming' : 'ready'",[1097,5569,5554],{"class":1324},[1097,5571,5573,5576,5578,5580,5583],{"class":5572,"line":3531},[1099,1549],[1097,5574,5575],{"class":1567},"          variant",[1097,5577,1571],{"class":1324},[1097,5579,1498],{"class":1324},[1097,5581,5582],{"class":1107},"subtle",[1097,5584,5554],{"class":1324},[1097,5586,5588,5591,5593,5595,5598],{"class":5587,"line":3538},[1099,1549],[1097,5589,5590],{"class":1567},"          placeholder",[1097,5592,1571],{"class":1324},[1097,5594,1498],{"class":1324},[1097,5596,5597],{"class":1107},"Ask me anything...",[1097,5599,5554],{"class":1324},[1097,5601,5603,5606,5608,5610,5613],{"class":5602,"line":3543},[1099,1549],[1097,5604,5605],{"class":1567},"          @submit",[1097,5607,1571],{"class":1324},[1097,5609,1498],{"class":1324},[1097,5611,5612],{"class":1107},"createChat",[1097,5614,5554],{"class":1324},[1097,5616,5618],{"class":5617,"line":3561},[1099,1549],[1097,5619,5620],{"class":1324},"        >\n",[1097,5622,5624,5627,5630,5633,5635,5637,5640,5642],{"class":5623,"line":3600},[1099,1549],[1097,5625,5626],{"class":1324},"          \u003C",[1097,5628,5629],{"class":1330},"UChatPromptSubmit",[1097,5631,5632],{"class":1567}," color",[1097,5634,1571],{"class":1324},[1097,5636,1498],{"class":1324},[1097,5638,5639],{"class":1107},"neutral",[1097,5641,1498],{"class":1324},[1097,5643,1591],{"class":1324},[1097,5645,5647,5649,5651],{"class":5646,"line":3606},[1099,1549],[1097,5648,5523],{"class":1324},[1097,5650,5093],{"class":1330},[1097,5652,1545],{"class":1324},[1097,5654,5655,5658,5660],{"class":1099,"line":3611},[1097,5656,5657],{"class":1324},"      \u003C\u002F",[1097,5659,5478],{"class":1330},[1097,5661,1545],{"class":1324},[1097,5663,5664,5666,5668],{"class":1099,"line":3617},[1097,5665,1596],{"class":1324},[1097,5667,1542],{"class":1330},[1097,5669,1545],{"class":1324},[1097,5671,5672,5674,5676],{"class":1099,"line":3637},[1097,5673,1606],{"class":1324},[1097,5675,5443],{"class":1330},[1097,5677,1545],{"class":1324},[1097,5679,5680,5682,5684],{"class":1099,"line":3665},[1097,5681,1615],{"class":1324},[1097,5683,1542],{"class":1330},[1097,5685,1545],{"class":1324},[987,5687,4642,5688,5692],{},[1041,5689,5690],{"href":281},[1047,5691,5093],{}," component automatically handles:",[999,5694,5695,5702,5705,5715],{},[1002,5696,5697,5698],{},"Form submission when pressing ",[5699,5700],"kbd",{"value":5701},"enter",[1002,5703,5704],{},"Auto-resizing as you type",[1002,5706,5707,5708,5711,5712],{},"A loading state when ",[1047,5709,5710],{},"status"," is set to ",[1047,5713,5714],{},"streaming",[1002,5716,5717],{},"Focus management and keyboard shortcuts",[1125,5719,5721],{"id":5720},"setting-up-markdown-rendering","Setting up Markdown rendering",[987,5723,5724,5725,5732,5733,5740,5741,5743,5744,5749],{},"AI models often respond with Markdown formatting (code blocks, lists, bold text, etc.). Before building the chat page, create a custom ",[1041,5726,5729],{"href":5727,"rel":5728},"https:\u002F\u002Fcomark.dev",[1045],[1047,5730,5731],{},"Comark"," component that will handle streaming Markdown rendering. Using ",[1041,5734,5737],{"href":5735,"rel":5736},"https:\u002F\u002Fcomark.dev\u002Frendering\u002Fvue#code-definecomarkcomponent",[1045],[1047,5738,5739],{},"defineComarkComponent",", you can enable the ",[1047,5742,1549],{}," plugin for syntax highlighting in code blocks and register additional ",[1041,5745,5748],{"href":5746,"rel":5747},"https:\u002F\u002Fshiki.style",[1045],"Shiki"," languages beyond the defaults (TypeScript, JavaScript, Vue, Shell, JSON, YAML, Markdown):",[1297,5751,5752],{},[1088,5753,5756],{"className":1301,"code":5754,"filename":5755,"language":1303,"meta":1093,"style":1093},"import highlight from '@comark\u002Fnuxt\u002Fplugins\u002Fhighlight'\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 defineComarkComponent({\n  name: 'ChatComark',\n  plugins: [\n    highlight({\n      languages: [python, sql, go, rust]\n    })\n  ],\n  class: '*:first:mt-0 *:last:mb-0'\n})\n","app\u002Fcomponents\u002Fchat\u002FComark.ts",[1047,5757,5758,5775,5791,5807,5823,5839,5843,5856,5872,5881,5890,5915,5921,5927,5941],{"__ignoreMap":1093},[1097,5759,5760,5762,5765,5768,5770,5773],{"class":1099,"line":1100},[1097,5761,1686],{"class":1310},[1097,5763,5764],{"class":1320}," highlight ",[1097,5766,5767],{"class":1310},"from",[1097,5769,1411],{"class":1324},[1097,5771,5772],{"class":1107},"@comark\u002Fnuxt\u002Fplugins\u002Fhighlight",[1097,5774,1375],{"class":1324},[1097,5776,5777,5779,5782,5784,5786,5789],{"class":1099,"line":1117},[1097,5778,1686],{"class":1310},[1097,5780,5781],{"class":1320}," python ",[1097,5783,5767],{"class":1310},[1097,5785,1411],{"class":1324},[1097,5787,5788],{"class":1107},"@shikijs\u002Flangs\u002Fpython",[1097,5790,1375],{"class":1324},[1097,5792,5793,5795,5798,5800,5802,5805],{"class":1099,"line":1340},[1097,5794,1686],{"class":1310},[1097,5796,5797],{"class":1320}," sql ",[1097,5799,5767],{"class":1310},[1097,5801,1411],{"class":1324},[1097,5803,5804],{"class":1107},"@shikijs\u002Flangs\u002Fsql",[1097,5806,1375],{"class":1324},[1097,5808,5809,5811,5814,5816,5818,5821],{"class":1099,"line":1355},[1097,5810,1686],{"class":1310},[1097,5812,5813],{"class":1320}," go ",[1097,5815,5767],{"class":1310},[1097,5817,1411],{"class":1324},[1097,5819,5820],{"class":1107},"@shikijs\u002Flangs\u002Fgo",[1097,5822,1375],{"class":1324},[1097,5824,5825,5827,5830,5832,5834,5837],{"class":1099,"line":1367},[1097,5826,1686],{"class":1310},[1097,5828,5829],{"class":1320}," rust ",[1097,5831,5767],{"class":1310},[1097,5833,1411],{"class":1324},[1097,5835,5836],{"class":1107},"@shikijs\u002Flangs\u002Frust",[1097,5838,1375],{"class":1324},[1097,5840,5841],{"class":1099,"line":1378},[1097,5842,1389],{"emptyLinePlaceholder":21},[1097,5844,5845,5847,5849,5852,5854],{"class":1099,"line":1386},[1097,5846,1311],{"class":1310},[1097,5848,1314],{"class":1310},[1097,5850,5851],{"class":1120}," defineComarkComponent",[1097,5853,1321],{"class":1320},[1097,5855,1325],{"class":1324},[1097,5857,5858,5861,5863,5865,5868,5870],{"class":1099,"line":1392},[1097,5859,5860],{"class":1330},"  name",[1097,5862,1334],{"class":1324},[1097,5864,1411],{"class":1324},[1097,5866,5867],{"class":1107},"ChatComark",[1097,5869,1349],{"class":1324},[1097,5871,1352],{"class":1324},[1097,5873,5874,5877,5879],{"class":1099,"line":1403},[1097,5875,5876],{"class":1330},"  plugins",[1097,5878,1334],{"class":1324},[1097,5880,1337],{"class":1320},[1097,5882,5883,5886,5888],{"class":1099,"line":1419},[1097,5884,5885],{"class":1120},"    highlight",[1097,5887,1321],{"class":1320},[1097,5889,1325],{"class":1324},[1097,5891,5892,5895,5897,5900,5902,5905,5907,5910,5912],{"class":1099,"line":1425},[1097,5893,5894],{"class":1330},"      languages",[1097,5896,1334],{"class":1324},[1097,5898,5899],{"class":1320}," [python",[1097,5901,1695],{"class":1324},[1097,5903,5904],{"class":1320}," sql",[1097,5906,1695],{"class":1324},[1097,5908,5909],{"class":1320}," go",[1097,5911,1695],{"class":1324},[1097,5913,5914],{"class":1320}," rust]\n",[1097,5916,5917,5919],{"class":1099,"line":1430},[1097,5918,3386],{"class":1324},[1097,5920,1459],{"class":1320},[1097,5922,5923,5925],{"class":1099,"line":1453},[1097,5924,1381],{"class":1320},[1097,5926,1352],{"class":1324},[1097,5928,5929,5932,5934,5936,5939],{"class":1099,"line":1958},[1097,5930,5931],{"class":1330},"  class",[1097,5933,1334],{"class":1324},[1097,5935,1411],{"class":1324},[1097,5937,5938],{"class":1107},"*:first:mt-0 *:last:mb-0",[1097,5940,1375],{"class":1324},[1097,5942,5943,5945],{"class":1099,"line":1985},[1097,5944,1456],{"class":1324},[1097,5946,1459],{"class":1320},[987,5948,5949,5950,5953],{},"This creates a ",[1047,5951,5952],{},"\u003CChatComark>"," component we'll use in the chat page to render assistant messages and reasoning content.",[987,5955,5956],{},"Since Comark uses Shiki with dual themes, you need to add the following CSS to your stylesheet for dark mode support:",[1088,5958,5960],{"className":1479,"code":5959,"filename":1481,"language":1482,"meta":1093,"style":1093},"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",[1047,5961,5962,5983,6006,6026,6046,6066,6086],{"__ignoreMap":1093},[1097,5963,5964,5967,5969,5972,5975,5978,5981],{"class":1099,"line":1100},[1097,5965,5966],{"class":1103},"html",[1097,5968,1787],{"class":1324},[1097,5970,5971],{"class":1103},"dark",[1097,5973,5974],{"class":1324}," .",[1097,5976,5977],{"class":1103},"shiki",[1097,5979,5980],{"class":1103}," span",[1097,5982,1400],{"class":1324},[1097,5984,5985,5989,5991,5994,5996,5999,6001,6004],{"class":1099,"line":1117},[1097,5986,5988],{"class":5987},"sqsOY","  color",[1097,5990,1334],{"class":1324},[1097,5992,5993],{"class":1120}," var",[1097,5995,1321],{"class":1324},[1097,5997,5998],{"class":1320},"--shiki-dark",[1097,6000,1861],{"class":1324},[1097,6002,6003],{"class":3578}," !important",[1097,6005,1501],{"class":1324},[1097,6007,6008,6011,6013,6015,6017,6020,6022,6024],{"class":1099,"line":1340},[1097,6009,6010],{"class":5987},"  background-color",[1097,6012,1334],{"class":1324},[1097,6014,5993],{"class":1120},[1097,6016,1321],{"class":1324},[1097,6018,6019],{"class":1320},"--shiki-dark-bg",[1097,6021,1861],{"class":1324},[1097,6023,6003],{"class":3578},[1097,6025,1501],{"class":1324},[1097,6027,6028,6031,6033,6035,6037,6040,6042,6044],{"class":1099,"line":1355},[1097,6029,6030],{"class":5987},"  font-style",[1097,6032,1334],{"class":1324},[1097,6034,5993],{"class":1120},[1097,6036,1321],{"class":1324},[1097,6038,6039],{"class":1320},"--shiki-dark-font-style",[1097,6041,1861],{"class":1324},[1097,6043,6003],{"class":3578},[1097,6045,1501],{"class":1324},[1097,6047,6048,6051,6053,6055,6057,6060,6062,6064],{"class":1099,"line":1367},[1097,6049,6050],{"class":5987},"  font-weight",[1097,6052,1334],{"class":1324},[1097,6054,5993],{"class":1120},[1097,6056,1321],{"class":1324},[1097,6058,6059],{"class":1320},"--shiki-dark-font-weight",[1097,6061,1861],{"class":1324},[1097,6063,6003],{"class":3578},[1097,6065,1501],{"class":1324},[1097,6067,6068,6071,6073,6075,6077,6080,6082,6084],{"class":1099,"line":1378},[1097,6069,6070],{"class":5987},"  text-decoration",[1097,6072,1334],{"class":1324},[1097,6074,5993],{"class":1120},[1097,6076,1321],{"class":1324},[1097,6078,6079],{"class":1320},"--shiki-dark-text-decoration",[1097,6081,1861],{"class":1324},[1097,6083,6003],{"class":3578},[1097,6085,1501],{"class":1324},[1097,6087,6088],{"class":1099,"line":1386},[1097,6089,5416],{"class":1324},[991,6091,6093],{"id":6092},"creating-the-chat-page","Creating the chat page",[987,6095,6096,6097,6103,6104,6111],{},"The chat page is where the actual conversation happens. It integrates the AI SDK's ",[1041,6098,6101],{"href":6099,"rel":6100},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fchat",[1045],[1047,6102,259],{}," class and ",[1041,6105,6108],{"href":6106,"rel":6107},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fdefault-chat-transport",[1045],[1047,6109,6110],{},"DefaultChatTransport"," for real-time streaming.",[1297,6113,6114],{},[1674,6115,6116],{},[1088,6117,6121],{"className":1529,"code":6118,"filename":6119,"highlights":6120,"language":34,"meta":1093,"style":1093},"\u003Cscript setup lang=\"ts\">\nimport { DefaultChatTransport, isReasoningUIPart, isTextUIPart } from 'ai'\nimport { Chat } from '@ai-sdk\u002Fvue'\nimport { isPartStreaming } from '@nuxt\u002Fui\u002Futils\u002Fai'\n\nconst route = useRoute()\nconst toast = useToast()\n\n\u002F\u002F Fetch existing chat data\nconst { data: chatData } = await useFetch(`\u002Fapi\u002Fchats\u002F${route.params.id}`)\n\nif (!chatData.value) {\n  throw createError({ statusCode: 404, statusMessage: 'Chat not found', fatal: true })\n}\n\nconst input = ref('')\n\n\u002F\u002F Initialize the Chat class from AI SDK\nconst chat = new Chat({\n  id: chatData.value.id,\n  messages: chatData.value.messages,\n  transport: new DefaultChatTransport({\n    api: `\u002Fapi\u002Fchats\u002F${chatData.value.id}`\n  }),\n  onData(dataPart) {\n    \u002F\u002F Refresh the chat list when a title is generated\n    if (dataPart.type === 'data-chat-title') {\n      refreshNuxtData('chats')\n    }\n  },\n  onError(error) {\n    toast.add({\n      title: 'Error',\n      description: error.message,\n      color: 'error'\n    })\n  }\n})\n\nfunction handleSubmit(e: Event) {\n  e.preventDefault()\n  if (input.value.trim()) {\n    chat.sendMessage({ text: input.value })\n    input.value = ''\n  }\n}\n\n\u002F\u002F Auto-generate response for first message\nonMounted(() => {\n  if (chatData.value?.messages.length === 1) {\n    chat.regenerate()\n  }\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CUDashboardPanel :ui=\"{ body: 'p-0 sm:p-0' }\">\n    \u003Ctemplate #body>\n      \u003CUContainer class=\"min-h-dvh flex flex-col py-4 sm:py-6\">\n        \u003CUChatMessages\n          :messages=\"chat.messages\"\n          :status=\"chat.status\"\n          should-auto-scroll\n          class=\"flex-1\"\n        >\n          \u003Ctemplate #content=\"{ message }\">\n            \u003Ctemplate v-for=\"(part, index) in message.parts\" :key=\"`${message.id}-${part.type}-${index}`\">\n              \u003CUChatReasoning\n                v-if=\"isReasoningUIPart(part)\"\n                :text=\"part.text\"\n                :streaming=\"isPartStreaming(part)\"\n              >\n                \u003CChatComark\n                  :markdown=\"part.text\"\n                  :streaming=\"isPartStreaming(part)\"\n                \u002F>\n              \u003C\u002FUChatReasoning>\n\n              \u003Ctemplate v-else-if=\"isTextUIPart(part)\">\n                \u003CChatComark\n                  v-if=\"message.role === 'assistant'\"\n                  :markdown=\"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=\"chat.error\"\n          variant=\"subtle\"\n          class=\"sticky bottom-0\"\n          @submit=\"handleSubmit\"\n        >\n          \u003CUChatPromptSubmit\n            :status=\"chat.status\"\n            color=\"neutral\"\n            @stop=\"chat.stop()\"\n            @reload=\"chat.regenerate()\"\n          \u002F>\n        \u003C\u002FUChatPrompt>\n      \u003C\u002FUContainer>\n    \u003C\u002Ftemplate>\n  \u003C\u002FUDashboardPanel>\n\u003C\u002Ftemplate>\n","app\u002Fpages\u002Fchat\u002F[id].vue",[1117,1340,1355,2208,2259,2272,2302,2308,2313,2345,2361,2379,2395,2403,3383,3400,3432,3445,3450,3456,3487,3531,3538],[1047,6122,6123,6143,6173,6194,6215,6219,6233,6247,6251,6256,6304,6308,6327,6369,6373,6377,6393,6397,6402,6420,6440,6459,6475,6502,6511,6526,6532,6559,6575,6580,6585,6600,6615,6631,6648,6662,6669,6674,6681,6685,6707,6719,6739,6767,6781,6785,6789,6793,6798,6811,6839,6850,6854,6860,6868,6872,6880,6898,6910,6929,6936,6950,6963,6968,6982,6986,7011,7089,7097,7111,7125,7139,7144,7152,7165,7178,7183,7193,7197,7220,7226,7240,7252,7264,7268,7298,7303,7312,7320,7329,7338,7346,7350,7356,7368,7382,7394,7407,7420,7424,7431,7444,7457,7471,7485,7490,7498,7506,7514,7522],{"__ignoreMap":1093},[1097,6124,6125,6127,6129,6131,6133,6135,6137,6139,6141],{"class":1099,"line":1100},[1097,6126,1539],{"class":1324},[1097,6128,5128],{"class":1330},[1097,6130,5131],{"class":1567},[1097,6132,5134],{"class":1567},[1097,6134,1571],{"class":1324},[1097,6136,1498],{"class":1324},[1097,6138,1303],{"class":1107},[1097,6140,1498],{"class":1324},[1097,6142,1545],{"class":1324},[1097,6144,6146,6148,6150,6153,6155,6158,6160,6163,6165,6167,6169,6171],{"class":6145,"line":1117},[1099,1549],[1097,6147,1686],{"class":1310},[1097,6149,1689],{"class":1324},[1097,6151,6152],{"class":1320}," DefaultChatTransport",[1097,6154,1695],{"class":1324},[1097,6156,6157],{"class":1320}," isReasoningUIPart",[1097,6159,1695],{"class":1324},[1097,6161,6162],{"class":1320}," isTextUIPart",[1097,6164,1711],{"class":1324},[1097,6166,1714],{"class":1310},[1097,6168,1411],{"class":1324},[1097,6170,2518],{"class":1107},[1097,6172,1375],{"class":1324},[1097,6174,6176,6178,6180,6183,6185,6187,6189,6192],{"class":6175,"line":1340},[1099,1549],[1097,6177,1686],{"class":1310},[1097,6179,1689],{"class":1324},[1097,6181,6182],{"class":1320}," Chat",[1097,6184,1711],{"class":1324},[1097,6186,1714],{"class":1310},[1097,6188,1411],{"class":1324},[1097,6190,6191],{"class":1107},"@ai-sdk\u002Fvue",[1097,6193,1375],{"class":1324},[1097,6195,6197,6199,6201,6204,6206,6208,6210,6213],{"class":6196,"line":1355},[1099,1549],[1097,6198,1686],{"class":1310},[1097,6200,1689],{"class":1324},[1097,6202,6203],{"class":1320}," isPartStreaming",[1097,6205,1711],{"class":1324},[1097,6207,1714],{"class":1310},[1097,6209,1411],{"class":1324},[1097,6211,6212],{"class":1107},"@nuxt\u002Fui\u002Futils\u002Fai",[1097,6214,1375],{"class":1324},[1097,6216,6217],{"class":1099,"line":1367},[1097,6218,1389],{"emptyLinePlaceholder":21},[1097,6220,6221,6223,6226,6228,6231],{"class":1099,"line":1378},[1097,6222,3046],{"class":1567},[1097,6224,6225],{"class":1320}," route ",[1097,6227,1571],{"class":1324},[1097,6229,6230],{"class":1120}," useRoute",[1097,6232,2653],{"class":1320},[1097,6234,6235,6237,6240,6242,6245],{"class":1099,"line":1386},[1097,6236,3046],{"class":1567},[1097,6238,6239],{"class":1320}," toast ",[1097,6241,1571],{"class":1324},[1097,6243,6244],{"class":1120}," useToast",[1097,6246,2653],{"class":1320},[1097,6248,6249],{"class":1099,"line":1392},[1097,6250,1389],{"emptyLinePlaceholder":21},[1097,6252,6253],{"class":1099,"line":1403},[1097,6254,6255],{"class":2675},"\u002F\u002F Fetch existing chat data\n",[1097,6257,6258,6260,6262,6265,6267,6270,6272,6274,6276,6279,6281,6283,6286,6288,6291,6293,6296,6298,6300,6302],{"class":1099,"line":1419},[1097,6259,3046],{"class":1567},[1097,6261,1689],{"class":1324},[1097,6263,6264],{"class":1330}," data",[1097,6266,1334],{"class":1324},[1097,6268,6269],{"class":1320}," chatData ",[1097,6271,1456],{"class":1324},[1097,6273,2607],{"class":1324},[1097,6275,2610],{"class":1310},[1097,6277,6278],{"class":1120}," useFetch",[1097,6280,1321],{"class":1320},[1097,6282,3691],{"class":1324},[1097,6284,6285],{"class":1107},"\u002Fapi\u002Fchats\u002F",[1097,6287,5400],{"class":1324},[1097,6289,6290],{"class":1320},"route",[1097,6292,1787],{"class":1324},[1097,6294,6295],{"class":1320},"params",[1097,6297,1787],{"class":1324},[1097,6299,1998],{"class":1320},[1097,6301,5409],{"class":1324},[1097,6303,1459],{"class":1320},[1097,6305,6306],{"class":1099,"line":1425},[1097,6307,1389],{"emptyLinePlaceholder":21},[1097,6309,6310,6313,6315,6317,6320,6322,6325],{"class":1099,"line":1430},[1097,6311,6312],{"class":1310},"if",[1097,6314,1930],{"class":1320},[1097,6316,3551],{"class":1324},[1097,6318,6319],{"class":1320},"chatData",[1097,6321,1787],{"class":1324},[1097,6323,6324],{"class":1320},"value) ",[1097,6326,1325],{"class":1324},[1097,6328,6329,6332,6334,6336,6338,6340,6342,6344,6346,6348,6350,6352,6354,6356,6358,6361,6363,6365,6367],{"class":1099,"line":1453},[1097,6330,6331],{"class":1310},"  throw",[1097,6333,2884],{"class":1120},[1097,6335,1321],{"class":1330},[1097,6337,1844],{"class":1324},[1097,6339,3573],{"class":1330},[1097,6341,1334],{"class":1324},[1097,6343,3579],{"class":3578},[1097,6345,1695],{"class":1324},[1097,6347,3584],{"class":1330},[1097,6349,1334],{"class":1324},[1097,6351,1411],{"class":1324},[1097,6353,3591],{"class":1107},[1097,6355,1349],{"class":1324},[1097,6357,1695],{"class":1324},[1097,6359,6360],{"class":1330}," fatal",[1097,6362,1334],{"class":1324},[1097,6364,4184],{"class":4183},[1097,6366,1711],{"class":1324},[1097,6368,1459],{"class":1330},[1097,6370,6371],{"class":1099,"line":1958},[1097,6372,5416],{"class":1324},[1097,6374,6375],{"class":1099,"line":1985},[1097,6376,1389],{"emptyLinePlaceholder":21},[1097,6378,6379,6381,6383,6385,6387,6389,6391],{"class":1099,"line":2031},[1097,6380,3046],{"class":1567},[1097,6382,5151],{"class":1320},[1097,6384,1571],{"class":1324},[1097,6386,5156],{"class":1120},[1097,6388,1321],{"class":1320},[1097,6390,5161],{"class":1324},[1097,6392,1459],{"class":1320},[1097,6394,6395],{"class":1099,"line":2098},[1097,6396,1389],{"emptyLinePlaceholder":21},[1097,6398,6399],{"class":1099,"line":2168},[1097,6400,6401],{"class":2675},"\u002F\u002F Initialize the Chat class from AI SDK\n",[1097,6403,6405,6407,6410,6412,6414,6416,6418],{"class":6404,"line":2208},[1099,1549],[1097,6406,3046],{"class":1567},[1097,6408,6409],{"class":1320}," chat ",[1097,6411,1571],{"class":1324},[1097,6413,1881],{"class":1324},[1097,6415,6182],{"class":1120},[1097,6417,1321],{"class":1320},[1097,6419,1325],{"class":1324},[1097,6421,6423,6425,6427,6430,6432,6434,6436,6438],{"class":6422,"line":2259},[1099,1549],[1097,6424,1777],{"class":1330},[1097,6426,1334],{"class":1324},[1097,6428,6429],{"class":1320}," chatData",[1097,6431,1787],{"class":1324},[1097,6433,3331],{"class":1320},[1097,6435,1787],{"class":1324},[1097,6437,1998],{"class":1320},[1097,6439,1352],{"class":1324},[1097,6441,6443,6445,6447,6449,6451,6453,6455,6457],{"class":6442,"line":2272},[1099,1549],[1097,6444,1937],{"class":1330},[1097,6446,1334],{"class":1324},[1097,6448,6429],{"class":1320},[1097,6450,1787],{"class":1324},[1097,6452,3331],{"class":1320},[1097,6454,1787],{"class":1324},[1097,6456,1976],{"class":1320},[1097,6458,1352],{"class":1324},[1097,6460,6462,6465,6467,6469,6471,6473],{"class":6461,"line":2302},[1099,1549],[1097,6463,6464],{"class":1330},"  transport",[1097,6466,1334],{"class":1324},[1097,6468,1881],{"class":1324},[1097,6470,6152],{"class":1120},[1097,6472,1321],{"class":1320},[1097,6474,1325],{"class":1324},[1097,6476,6478,6481,6483,6485,6487,6489,6491,6493,6495,6497,6499],{"class":6477,"line":2308},[1099,1549],[1097,6479,6480],{"class":1330},"    api",[1097,6482,1334],{"class":1324},[1097,6484,3685],{"class":1324},[1097,6486,6285],{"class":1107},[1097,6488,5400],{"class":1324},[1097,6490,6319],{"class":1320},[1097,6492,1787],{"class":1324},[1097,6494,3331],{"class":1320},[1097,6496,1787],{"class":1324},[1097,6498,1998],{"class":1320},[1097,6500,6501],{"class":1324},"}`\n",[1097,6503,6505,6507,6509],{"class":6504,"line":2313},[1099,1549],[1097,6506,2398],{"class":1324},[1097,6508,1861],{"class":1320},[1097,6510,1352],{"class":1324},[1097,6512,6514,6517,6519,6522,6524],{"class":6513,"line":2345},[1099,1549],[1097,6515,6516],{"class":1330},"  onData",[1097,6518,1321],{"class":1324},[1097,6520,6521],{"class":1921},"dataPart",[1097,6523,1861],{"class":1324},[1097,6525,1400],{"class":1324},[1097,6527,6529],{"class":6528,"line":2361},[1099,1549],[1097,6530,6531],{"class":2675},"    \u002F\u002F Refresh the chat list when a title is generated\n",[1097,6533,6535,6538,6540,6542,6544,6547,6549,6551,6553,6555,6557],{"class":6534,"line":2379},[1099,1549],[1097,6536,6537],{"class":1310},"    if",[1097,6539,1930],{"class":1330},[1097,6541,6521],{"class":1320},[1097,6543,1787],{"class":1324},[1097,6545,6546],{"class":1320},"type",[1097,6548,3358],{"class":1324},[1097,6550,1411],{"class":1324},[1097,6552,4331],{"class":1107},[1097,6554,1349],{"class":1324},[1097,6556,3556],{"class":1330},[1097,6558,1325],{"class":1324},[1097,6560,6562,6565,6567,6569,6571,6573],{"class":6561,"line":2395},[1099,1549],[1097,6563,6564],{"class":1120},"      refreshNuxtData",[1097,6566,1321],{"class":1330},[1097,6568,1349],{"class":1324},[1097,6570,1766],{"class":1107},[1097,6572,1349],{"class":1324},[1097,6574,1459],{"class":1330},[1097,6576,6578],{"class":6577,"line":2403},[1099,1549],[1097,6579,4566],{"class":1324},[1097,6581,6583],{"class":6582,"line":3383},[1099,1549],[1097,6584,1422],{"class":1324},[1097,6586,6588,6591,6593,6596,6598],{"class":6587,"line":3400},[1099,1549],[1097,6589,6590],{"class":1330},"  onError",[1097,6592,1321],{"class":1324},[1097,6594,6595],{"class":1921},"error",[1097,6597,1861],{"class":1324},[1097,6599,1400],{"class":1324},[1097,6601,6603,6606,6608,6611,6613],{"class":6602,"line":3432},[1099,1549],[1097,6604,6605],{"class":1320},"    toast",[1097,6607,1787],{"class":1324},[1097,6609,6610],{"class":1120},"add",[1097,6612,1321],{"class":1330},[1097,6614,1325],{"class":1324},[1097,6616,6618,6621,6623,6625,6627,6629],{"class":6617,"line":3445},[1099,1549],[1097,6619,6620],{"class":1330},"      title",[1097,6622,1334],{"class":1324},[1097,6624,1411],{"class":1324},[1097,6626,497],{"class":1107},[1097,6628,1349],{"class":1324},[1097,6630,1352],{"class":1324},[1097,6632,6634,6637,6639,6642,6644,6646],{"class":6633,"line":3450},[1099,1549],[1097,6635,6636],{"class":1330},"      description",[1097,6638,1334],{"class":1324},[1097,6640,6641],{"class":1320}," error",[1097,6643,1787],{"class":1324},[1097,6645,4483],{"class":1320},[1097,6647,1352],{"class":1324},[1097,6649,6651,6654,6656,6658,6660],{"class":6650,"line":3456},[1099,1549],[1097,6652,6653],{"class":1330},"      color",[1097,6655,1334],{"class":1324},[1097,6657,1411],{"class":1324},[1097,6659,6595],{"class":1107},[1097,6661,1375],{"class":1324},[1097,6663,6665,6667],{"class":6664,"line":3487},[1099,1549],[1097,6666,3386],{"class":1324},[1097,6668,1459],{"class":1330},[1097,6670,6672],{"class":6671,"line":3531},[1099,1549],[1097,6673,3603],{"class":1324},[1097,6675,6677,6679],{"class":6676,"line":3538},[1099,1549],[1097,6678,1456],{"class":1324},[1097,6680,1459],{"class":1320},[1097,6682,6683],{"class":1099,"line":3543},[1097,6684,1389],{"emptyLinePlaceholder":21},[1097,6686,6687,6690,6693,6695,6698,6700,6703,6705],{"class":1099,"line":3561},[1097,6688,6689],{"class":1567},"function",[1097,6691,6692],{"class":1120}," handleSubmit",[1097,6694,1321],{"class":1324},[1097,6696,6697],{"class":1921},"e",[1097,6699,1334],{"class":1324},[1097,6701,6702],{"class":1103}," Event",[1097,6704,1861],{"class":1324},[1097,6706,1400],{"class":1324},[1097,6708,6709,6712,6714,6717],{"class":1099,"line":3600},[1097,6710,6711],{"class":1320},"  e",[1097,6713,1787],{"class":1324},[1097,6715,6716],{"class":1120},"preventDefault",[1097,6718,2653],{"class":1330},[1097,6720,6721,6723,6725,6727,6729,6731,6733,6735,6737],{"class":1099,"line":3606},[1097,6722,3546],{"class":1310},[1097,6724,1930],{"class":1330},[1097,6726,5210],{"class":1320},[1097,6728,1787],{"class":1324},[1097,6730,3331],{"class":1320},[1097,6732,1787],{"class":1324},[1097,6734,5219],{"class":1120},[1097,6736,5222],{"class":1330},[1097,6738,1325],{"class":1324},[1097,6740,6741,6744,6746,6749,6751,6753,6755,6757,6759,6761,6763,6765],{"class":1099,"line":3611},[1097,6742,6743],{"class":1320},"    chat",[1097,6745,1787],{"class":1324},[1097,6747,6748],{"class":1120},"sendMessage",[1097,6750,1321],{"class":1330},[1097,6752,1844],{"class":1324},[1097,6754,1698],{"class":1330},[1097,6756,1334],{"class":1324},[1097,6758,5354],{"class":1320},[1097,6760,1787],{"class":1324},[1097,6762,3331],{"class":1320},[1097,6764,1711],{"class":1324},[1097,6766,1459],{"class":1330},[1097,6768,6769,6772,6774,6776,6778],{"class":1099,"line":3617},[1097,6770,6771],{"class":1320},"    input",[1097,6773,1787],{"class":1324},[1097,6775,3331],{"class":1320},[1097,6777,2607],{"class":1324},[1097,6779,6780],{"class":1324}," ''\n",[1097,6782,6783],{"class":1099,"line":3637},[1097,6784,3603],{"class":1324},[1097,6786,6787],{"class":1099,"line":3665},[1097,6788,5416],{"class":1324},[1097,6790,6791],{"class":1099,"line":3677},[1097,6792,1389],{"emptyLinePlaceholder":21},[1097,6794,6795],{"class":1099,"line":3696},[1097,6796,6797],{"class":2675},"\u002F\u002F Auto-generate response for first message\n",[1097,6799,6800,6803,6805,6807,6809],{"class":1099,"line":3724},[1097,6801,6802],{"class":1120},"onMounted",[1097,6804,1321],{"class":1320},[1097,6806,1784],{"class":1324},[1097,6808,1804],{"class":1567},[1097,6810,1400],{"class":1324},[1097,6812,6813,6815,6817,6819,6821,6823,6825,6827,6829,6831,6833,6835,6837],{"class":1099,"line":3731},[1097,6814,3546],{"class":1310},[1097,6816,1930],{"class":1330},[1097,6818,6319],{"class":1320},[1097,6820,1787],{"class":1324},[1097,6822,3331],{"class":1320},[1097,6824,3857],{"class":1324},[1097,6826,1976],{"class":1320},[1097,6828,1787],{"class":1324},[1097,6830,3836],{"class":1320},[1097,6832,3358],{"class":1324},[1097,6834,3842],{"class":3578},[1097,6836,3556],{"class":1330},[1097,6838,1325],{"class":1324},[1097,6840,6841,6843,6845,6848],{"class":1099,"line":3736},[1097,6842,6743],{"class":1320},[1097,6844,1787],{"class":1324},[1097,6846,6847],{"class":1120},"regenerate",[1097,6849,2653],{"class":1330},[1097,6851,6852],{"class":1099,"line":3802},[1097,6853,3603],{"class":1324},[1097,6855,6856,6858],{"class":1099,"line":3807},[1097,6857,1456],{"class":1324},[1097,6859,1459],{"class":1320},[1097,6861,6862,6864,6866],{"class":1099,"line":3812},[1097,6863,1615],{"class":1324},[1097,6865,5128],{"class":1330},[1097,6867,1545],{"class":1324},[1097,6869,6870],{"class":1099,"line":3818},[1097,6871,1389],{"emptyLinePlaceholder":21},[1097,6873,6874,6876,6878],{"class":1099,"line":3847},[1097,6875,1539],{"class":1324},[1097,6877,1542],{"class":1330},[1097,6879,1545],{"class":1324},[1097,6881,6882,6884,6886,6888,6890,6892,6894,6896],{"class":1099,"line":3888},[1097,6883,1552],{"class":1324},[1097,6885,5443],{"class":1330},[1097,6887,5446],{"class":1567},[1097,6889,1571],{"class":1324},[1097,6891,1498],{"class":1324},[1097,6893,5453],{"class":1107},[1097,6895,1498],{"class":1324},[1097,6897,1545],{"class":1324},[1097,6899,6900,6902,6904,6906,6908],{"class":1099,"line":3917},[1097,6901,1561],{"class":1324},[1097,6903,1542],{"class":1330},[1097,6905,5466],{"class":1324},[1097,6907,5469],{"class":1567},[1097,6909,1545],{"class":1324},[1097,6911,6912,6914,6916,6918,6920,6922,6925,6927],{"class":1099,"line":3929},[1097,6913,1585],{"class":1324},[1097,6915,5478],{"class":1330},[1097,6917,5481],{"class":1567},[1097,6919,1571],{"class":1324},[1097,6921,1498],{"class":1324},[1097,6923,6924],{"class":1107},"min-h-dvh flex flex-col py-4 sm:py-6",[1097,6926,1498],{"class":1324},[1097,6928,1545],{"class":1324},[1097,6930,6931,6933],{"class":1099,"line":3945},[1097,6932,5497],{"class":1324},[1097,6934,6935],{"class":1330},"UChatMessages\n",[1097,6937,6938,6941,6943,6945,6948],{"class":1099,"line":3959},[1097,6939,6940],{"class":1567},"          :messages",[1097,6942,1571],{"class":1324},[1097,6944,1498],{"class":1324},[1097,6946,6947],{"class":1107},"chat.messages",[1097,6949,5554],{"class":1324},[1097,6951,6952,6954,6956,6958,6961],{"class":1099,"line":3966},[1097,6953,5560],{"class":1567},[1097,6955,1571],{"class":1324},[1097,6957,1498],{"class":1324},[1097,6959,6960],{"class":1107},"chat.status",[1097,6962,5554],{"class":1324},[1097,6964,6965],{"class":1099,"line":3971},[1097,6966,6967],{"class":1567},"          should-auto-scroll\n",[1097,6969,6970,6973,6975,6977,6980],{"class":1099,"line":3976},[1097,6971,6972],{"class":1567},"          class",[1097,6974,1571],{"class":1324},[1097,6976,1498],{"class":1324},[1097,6978,6979],{"class":1107},"flex-1",[1097,6981,5554],{"class":1324},[1097,6983,6984],{"class":1099,"line":3982},[1097,6985,5620],{"class":1324},[1097,6987,6988,6990,6992,6994,6996,6998,7000,7002,7005,7007,7009],{"class":1099,"line":3999},[1097,6989,5626],{"class":1324},[1097,6991,1542],{"class":1330},[1097,6993,5466],{"class":1324},[1097,6995,371],{"class":1567},[1097,6997,1571],{"class":1324},[1097,6999,1498],{"class":1324},[1097,7001,1844],{"class":1324},[1097,7003,7004],{"class":1320}," message ",[1097,7006,1456],{"class":1324},[1097,7008,1498],{"class":1324},[1097,7010,1545],{"class":1324},[1097,7012,7013,7016,7018,7021,7023,7025,7028,7030,7033,7036,7038,7040,7042,7044,7047,7050,7052,7055,7057,7059,7061,7063,7066,7068,7071,7073,7075,7077,7079,7081,7084,7087],{"class":1099,"line":4021},[1097,7014,7015],{"class":1324},"            \u003C",[1097,7017,1542],{"class":1330},[1097,7019,7020],{"class":1310}," v-for",[1097,7022,1571],{"class":1324},[1097,7024,1498],{"class":1324},[1097,7026,7027],{"class":1320},"(part",[1097,7029,1695],{"class":1324},[1097,7031,7032],{"class":1320}," index) ",[1097,7034,7035],{"class":1324},"in",[1097,7037,2602],{"class":1320},[1097,7039,1787],{"class":1324},[1097,7041,2182],{"class":1320},[1097,7043,1498],{"class":1324},[1097,7045,7046],{"class":1324}," :",[1097,7048,7049],{"class":1567},"key",[1097,7051,1571],{"class":1324},[1097,7053,7054],{"class":1324},"\"`${",[1097,7056,4483],{"class":1320},[1097,7058,1787],{"class":1324},[1097,7060,1998],{"class":1320},[1097,7062,1456],{"class":1324},[1097,7064,7065],{"class":1107},"-",[1097,7067,5400],{"class":1324},[1097,7069,7070],{"class":1320},"part",[1097,7072,1787],{"class":1324},[1097,7074,6546],{"class":1320},[1097,7076,1456],{"class":1324},[1097,7078,7065],{"class":1107},[1097,7080,5400],{"class":1324},[1097,7082,7083],{"class":1320},"index",[1097,7085,7086],{"class":1324},"}`\"",[1097,7088,1545],{"class":1324},[1097,7090,7091,7094],{"class":1099,"line":4039},[1097,7092,7093],{"class":1324},"              \u003C",[1097,7095,7096],{"class":1330},"UChatReasoning\n",[1097,7098,7099,7102,7104,7106,7109],{"class":1099,"line":4047},[1097,7100,7101],{"class":1567},"                v-if",[1097,7103,1571],{"class":1324},[1097,7105,1498],{"class":1324},[1097,7107,7108],{"class":1107},"isReasoningUIPart(part)",[1097,7110,5554],{"class":1324},[1097,7112,7113,7116,7118,7120,7123],{"class":1099,"line":4064},[1097,7114,7115],{"class":1567},"                :text",[1097,7117,1571],{"class":1324},[1097,7119,1498],{"class":1324},[1097,7121,7122],{"class":1107},"part.text",[1097,7124,5554],{"class":1324},[1097,7126,7127,7130,7132,7134,7137],{"class":1099,"line":4085},[1097,7128,7129],{"class":1567},"                :streaming",[1097,7131,1571],{"class":1324},[1097,7133,1498],{"class":1324},[1097,7135,7136],{"class":1107},"isPartStreaming(part)",[1097,7138,5554],{"class":1324},[1097,7140,7141],{"class":1099,"line":4095},[1097,7142,7143],{"class":1324},"              >\n",[1097,7145,7146,7149],{"class":1099,"line":4105},[1097,7147,7148],{"class":1324},"                \u003C",[1097,7150,7151],{"class":1330},"ChatComark\n",[1097,7153,7154,7157,7159,7161,7163],{"class":1099,"line":4115},[1097,7155,7156],{"class":1567},"                  :markdown",[1097,7158,1571],{"class":1324},[1097,7160,1498],{"class":1324},[1097,7162,7122],{"class":1107},[1097,7164,5554],{"class":1324},[1097,7166,7167,7170,7172,7174,7176],{"class":1099,"line":4132},[1097,7168,7169],{"class":1567},"                  :streaming",[1097,7171,1571],{"class":1324},[1097,7173,1498],{"class":1324},[1097,7175,7136],{"class":1107},[1097,7177,5554],{"class":1324},[1097,7179,7180],{"class":1099,"line":4143},[1097,7181,7182],{"class":1324},"                \u002F>\n",[1097,7184,7185,7188,7191],{"class":1099,"line":4149},[1097,7186,7187],{"class":1324},"              \u003C\u002F",[1097,7189,7190],{"class":1330},"UChatReasoning",[1097,7192,1545],{"class":1324},[1097,7194,7195],{"class":1099,"line":4155},[1097,7196,1389],{"emptyLinePlaceholder":21},[1097,7198,7199,7201,7203,7206,7208,7210,7213,7216,7218],{"class":1099,"line":4165},[1097,7200,7093],{"class":1324},[1097,7202,1542],{"class":1330},[1097,7204,7205],{"class":1310}," v-else-if",[1097,7207,1571],{"class":1324},[1097,7209,1498],{"class":1324},[1097,7211,7212],{"class":1120},"isTextUIPart",[1097,7214,7215],{"class":1320},"(part)",[1097,7217,1498],{"class":1324},[1097,7219,1545],{"class":1324},[1097,7221,7222,7224],{"class":1099,"line":4175},[1097,7223,7148],{"class":1324},[1097,7225,7151],{"class":1330},[1097,7227,7228,7231,7233,7235,7238],{"class":1099,"line":4189},[1097,7229,7230],{"class":1567},"                  v-if",[1097,7232,1571],{"class":1324},[1097,7234,1498],{"class":1324},[1097,7236,7237],{"class":1107},"message.role === 'assistant'",[1097,7239,5554],{"class":1324},[1097,7241,7242,7244,7246,7248,7250],{"class":1099,"line":4204},[1097,7243,7156],{"class":1567},[1097,7245,1571],{"class":1324},[1097,7247,1498],{"class":1324},[1097,7249,7122],{"class":1107},[1097,7251,5554],{"class":1324},[1097,7253,7254,7256,7258,7260,7262],{"class":1099,"line":4209},[1097,7255,7169],{"class":1567},[1097,7257,1571],{"class":1324},[1097,7259,1498],{"class":1324},[1097,7261,7136],{"class":1107},[1097,7263,5554],{"class":1324},[1097,7265,7266],{"class":1099,"line":4214},[1097,7267,7182],{"class":1324},[1097,7269,7270,7272,7274,7276,7278,7280,7283,7285,7287,7289,7291,7294,7296],{"class":1099,"line":4224},[1097,7271,7148],{"class":1324},[1097,7273,987],{"class":1330},[1097,7275,7205],{"class":1567},[1097,7277,1571],{"class":1324},[1097,7279,1498],{"class":1324},[1097,7281,7282],{"class":1107},"message.role === 'user'",[1097,7284,1498],{"class":1324},[1097,7286,5481],{"class":1567},[1097,7288,1571],{"class":1324},[1097,7290,1498],{"class":1324},[1097,7292,7293],{"class":1107},"whitespace-pre-wrap",[1097,7295,1498],{"class":1324},[1097,7297,1545],{"class":1324},[1097,7299,7300],{"class":1099,"line":4240},[1097,7301,7302],{"class":1320},"                  {{ part.text }}\n",[1097,7304,7305,7308,7310],{"class":1099,"line":4255},[1097,7306,7307],{"class":1324},"                \u003C\u002F",[1097,7309,987],{"class":1330},[1097,7311,1545],{"class":1324},[1097,7313,7314,7316,7318],{"class":1099,"line":4261},[1097,7315,7187],{"class":1324},[1097,7317,1542],{"class":1330},[1097,7319,1545],{"class":1324},[1097,7321,7322,7325,7327],{"class":1099,"line":4267},[1097,7323,7324],{"class":1324},"            \u003C\u002F",[1097,7326,1542],{"class":1330},[1097,7328,1545],{"class":1324},[1097,7330,7331,7334,7336],{"class":1099,"line":4275},[1097,7332,7333],{"class":1324},"          \u003C\u002F",[1097,7335,1542],{"class":1330},[1097,7337,1545],{"class":1324},[1097,7339,7340,7342,7344],{"class":1099,"line":4280},[1097,7341,5523],{"class":1324},[1097,7343,5099],{"class":1330},[1097,7345,1545],{"class":1324},[1097,7347,7348],{"class":1099,"line":4286},[1097,7349,1389],{"emptyLinePlaceholder":21},[1097,7351,7352,7354],{"class":1099,"line":4306},[1097,7353,5497],{"class":1324},[1097,7355,5539],{"class":1330},[1097,7357,7358,7360,7362,7364,7366],{"class":1099,"line":4321},[1097,7359,5545],{"class":1567},[1097,7361,1571],{"class":1324},[1097,7363,1498],{"class":1324},[1097,7365,5210],{"class":1107},[1097,7367,5554],{"class":1324},[1097,7369,7370,7373,7375,7377,7380],{"class":1099,"line":4338},[1097,7371,7372],{"class":1567},"          :error",[1097,7374,1571],{"class":1324},[1097,7376,1498],{"class":1324},[1097,7378,7379],{"class":1107},"chat.error",[1097,7381,5554],{"class":1324},[1097,7383,7384,7386,7388,7390,7392],{"class":1099,"line":4361},[1097,7385,5575],{"class":1567},[1097,7387,1571],{"class":1324},[1097,7389,1498],{"class":1324},[1097,7391,5582],{"class":1107},[1097,7393,5554],{"class":1324},[1097,7395,7396,7398,7400,7402,7405],{"class":1099,"line":4372},[1097,7397,6972],{"class":1567},[1097,7399,1571],{"class":1324},[1097,7401,1498],{"class":1324},[1097,7403,7404],{"class":1107},"sticky bottom-0",[1097,7406,5554],{"class":1324},[1097,7408,7409,7411,7413,7415,7418],{"class":1099,"line":4380},[1097,7410,5605],{"class":1567},[1097,7412,1571],{"class":1324},[1097,7414,1498],{"class":1324},[1097,7416,7417],{"class":1107},"handleSubmit",[1097,7419,5554],{"class":1324},[1097,7421,7422],{"class":1099,"line":4386},[1097,7423,5620],{"class":1324},[1097,7425,7426,7428],{"class":1099,"line":4391},[1097,7427,5626],{"class":1324},[1097,7429,7430],{"class":1330},"UChatPromptSubmit\n",[1097,7432,7433,7436,7438,7440,7442],{"class":1099,"line":4414},[1097,7434,7435],{"class":1567},"            :status",[1097,7437,1571],{"class":1324},[1097,7439,1498],{"class":1324},[1097,7441,6960],{"class":1107},[1097,7443,5554],{"class":1324},[1097,7445,7446,7449,7451,7453,7455],{"class":1099,"line":4420},[1097,7447,7448],{"class":1567},"            color",[1097,7450,1571],{"class":1324},[1097,7452,1498],{"class":1324},[1097,7454,5639],{"class":1107},[1097,7456,5554],{"class":1324},[1097,7458,7459,7462,7464,7466,7469],{"class":1099,"line":4440},[1097,7460,7461],{"class":1567},"            @stop",[1097,7463,1571],{"class":1324},[1097,7465,1498],{"class":1324},[1097,7467,7468],{"class":1107},"chat.stop()",[1097,7470,5554],{"class":1324},[1097,7472,7473,7476,7478,7480,7483],{"class":1099,"line":4446},[1097,7474,7475],{"class":1567},"            @reload",[1097,7477,1571],{"class":1324},[1097,7479,1498],{"class":1324},[1097,7481,7482],{"class":1107},"chat.regenerate()",[1097,7484,5554],{"class":1324},[1097,7486,7487],{"class":1099,"line":4492},[1097,7488,7489],{"class":1324},"          \u002F>\n",[1097,7491,7492,7494,7496],{"class":1099,"line":4508},[1097,7493,5523],{"class":1324},[1097,7495,5093],{"class":1330},[1097,7497,1545],{"class":1324},[1097,7499,7500,7502,7504],{"class":1099,"line":4541},[1097,7501,5657],{"class":1324},[1097,7503,5478],{"class":1330},[1097,7505,1545],{"class":1324},[1097,7507,7508,7510,7512],{"class":1099,"line":4555},[1097,7509,1596],{"class":1324},[1097,7511,1542],{"class":1330},[1097,7513,1545],{"class":1324},[1097,7515,7516,7518,7520],{"class":1099,"line":4563},[1097,7517,1606],{"class":1324},[1097,7519,5443],{"class":1330},[1097,7521,1545],{"class":1324},[1097,7523,7524,7526,7528],{"class":1099,"line":4569},[1097,7525,1615],{"class":1324},[1097,7527,1542],{"class":1330},[1097,7529,1545],{"class":1324},[987,7531,7532],{},"Here's a breakdown of the key parts:",[987,7534,7535],{},[1005,7536,7537],{},"The Chat Class",[987,7539,4642,7540,7545,7546,7548],{},[1041,7541,7543],{"href":6099,"rel":7542},[1045],[1047,7544,259],{}," class from ",[1047,7547,6191],{}," manages the entire conversation state. It handles:",[999,7550,7551,7556,7571,7577,7582],{},[1002,7552,7553,7554],{},"Message history with ",[1047,7555,6947],{},[1002,7557,7558,7559,1930,7561,2849,7564,2849,7567,2849,7569,1861],{},"Connection status with ",[1047,7560,6960],{},[1047,7562,7563],{},"ready",[1047,7565,7566],{},"submitted",[1047,7568,5714],{},[1047,7570,6595],{},[1002,7572,7573,7574],{},"Sending messages with ",[1047,7575,7576],{},"chat.sendMessage()",[1002,7578,7579,7580],{},"Stopping generation with ",[1047,7581,7468],{},[1002,7583,7584,7585],{},"Regenerating responses with ",[1047,7586,7482],{},[987,7588,4642,7589,7592,7593,7598,7599,7601],{},[1047,7590,7591],{},"onData"," callback receives ",[1041,7594,7597],{"href":7595,"rel":7596},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-ui\u002Fstreaming-data",[1045],"custom data events"," from the server (like ",[1047,7600,4331],{},"), allowing you to react to server-side events during streaming.",[987,7603,7604],{},[1005,7605,7606],{},"UChatMessages Component",[987,7608,4642,7609,7613],{},[1041,7610,7611],{"href":271},[1047,7612,5099],{}," component is purpose-built for AI chatbots with:",[999,7615,7616,7619,7622,7625],{},[1002,7617,7618],{},"Auto-scroll to bottom on load",[1002,7620,7621],{},"Continuous scrolling as messages stream in",[1002,7623,7624],{},"A loading indicator while the assistant processes",[1002,7626,7627],{},"An \"Auto scroll\" button when scrolled up",[987,7629,7630],{},[1005,7631,7632],{},"Rendering Message Parts",[987,7634,7635,7636,7638,7639,1050,7641,7644,7645,7647,7648,7652,7653,7656,7657,7659],{},"We iterate over message ",[1047,7637,2182],{}," using AI SDK helpers like ",[1047,7640,7212],{},[1047,7642,7643],{},"isReasoningUIPart",", rendering assistant text with the ",[1047,7646,5952],{}," component we created earlier and reasoning content with ",[1041,7649,7650],{"href":291},[1047,7651,7190],{},". The ",[1047,7654,7655],{},"isPartStreaming"," utility from ",[1047,7658,6212],{}," detects if a part is currently being streamed.",[987,7661,7662],{},[1005,7663,7664],{},"UChatPromptSubmit Component",[987,7666,4642,7667,7671],{},[1041,7668,7669],{"href":286},[1047,7670,5629],{}," component adapts based on the chat status:",[999,7673,7674,7677,7680],{},[1002,7675,7676],{},"Shows a send button when ready",[1002,7678,7679],{},"Shows a stop button while streaming",[1002,7681,7682],{},"Shows a reload button after an error",[991,7684,7686],{"id":7685},"adding-chat-history","Adding chat history",[987,7688,7689],{},"This section adds a dropdown menu to list previous chats and navigate between them.",[1125,7691,7693],{"id":7692},"listing-chats-api","Listing chats API",[987,7695,7696],{},"First, create an endpoint to fetch all chats:",[1297,7698,7699],{},[1088,7700,7703],{"className":1301,"code":7701,"filename":7702,"language":1303,"meta":1093,"style":1093},"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",[1047,7704,7705,7723,7745,7764,7768,7786,7811,7838,7844],{"__ignoreMap":1093},[1097,7706,7707,7709,7711,7713,7715,7717,7719,7721],{"class":1099,"line":1100},[1097,7708,1686],{"class":1310},[1097,7710,1689],{"class":1324},[1097,7712,2482],{"class":1320},[1097,7714,1711],{"class":1324},[1097,7716,1714],{"class":1310},[1097,7718,1411],{"class":1324},[1097,7720,1125],{"class":1107},[1097,7722,1375],{"class":1324},[1097,7724,7725,7727,7729,7731,7733,7735,7737,7739,7741,7743],{"class":1099,"line":1117},[1097,7726,1686],{"class":1310},[1097,7728,1689],{"class":1324},[1097,7730,2425],{"class":1320},[1097,7732,1695],{"class":1324},[1097,7734,2533],{"class":1320},[1097,7736,1711],{"class":1324},[1097,7738,1714],{"class":1310},[1097,7740,1411],{"class":1324},[1097,7742,2542],{"class":1107},[1097,7744,1375],{"class":1324},[1097,7746,7747,7749,7751,7754,7756,7758,7760,7762],{"class":1099,"line":1340},[1097,7748,1686],{"class":1310},[1097,7750,1689],{"class":1324},[1097,7752,7753],{"class":1320}," desc",[1097,7755,1711],{"class":1324},[1097,7757,1714],{"class":1310},[1097,7759,1411],{"class":1324},[1097,7761,1739],{"class":1107},[1097,7763,1375],{"class":1324},[1097,7765,7766],{"class":1099,"line":1355},[1097,7767,1389],{"emptyLinePlaceholder":21},[1097,7769,7770,7772,7774,7776,7778,7780,7782,7784],{"class":1099,"line":1367},[1097,7771,1311],{"class":1310},[1097,7773,1314],{"class":1310},[1097,7775,2482],{"class":1120},[1097,7777,1321],{"class":1320},[1097,7779,2581],{"class":1567},[1097,7781,4978],{"class":1324},[1097,7783,1804],{"class":1567},[1097,7785,1400],{"class":1324},[1097,7787,7788,7790,7792,7794,7796,7798,7800,7802,7804,7807,7809],{"class":1099,"line":1378},[1097,7789,2825],{"class":1310},[1097,7791,2610],{"class":1310},[1097,7793,2425],{"class":1320},[1097,7795,1787],{"class":1324},[1097,7797,3471],{"class":1320},[1097,7799,1787],{"class":1324},[1097,7801,1766],{"class":1320},[1097,7803,1787],{"class":1324},[1097,7805,7806],{"class":1120},"findMany",[1097,7808,1321],{"class":1330},[1097,7810,1325],{"class":1324},[1097,7812,7813,7816,7818,7820,7822,7824,7826,7828,7830,7832,7834,7836],{"class":1099,"line":1386},[1097,7814,7815],{"class":1120},"    orderBy",[1097,7817,1334],{"class":1324},[1097,7819,4978],{"class":1324},[1097,7821,1804],{"class":1567},[1097,7823,7753],{"class":1120},[1097,7825,1321],{"class":1330},[1097,7827,2702],{"class":1320},[1097,7829,1787],{"class":1324},[1097,7831,1766],{"class":1320},[1097,7833,1787],{"class":1324},[1097,7835,4995],{"class":1320},[1097,7837,1459],{"class":1330},[1097,7839,7840,7842],{"class":1099,"line":1392},[1097,7841,2398],{"class":1324},[1097,7843,1459],{"class":1330},[1097,7845,7846,7848],{"class":1099,"line":1403},[1097,7847,1456],{"class":1324},[1097,7849,1459],{"class":1320},[1125,7851,7853],{"id":7852},"building-the-chats-history-dropdown","Building the chats history dropdown",[987,7855,7856,7857,7862,7863,7868,7869,7862,7876,7878],{},"The component uses ",[1041,7858,7859],{"href":457},[1047,7860,7861],{},"UDropdownMenu"," with a ",[1041,7864,7865],{"href":230},[1047,7866,7867],{},"UButton"," as trigger. Use ",[1041,7870,7873],{"href":7871,"rel":7872},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-fetch",[1045],[1047,7874,7875],{},"useFetch",[1047,7877,7049],{}," to fetch and cache the chat list:",[1297,7880,7881],{},[1088,7882,7885],{"className":1529,"code":7883,"filename":7884,"language":34,"meta":1093,"style":1093},"\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",[1047,7886,7887,7907,7919,7923,7955,7970,7984,7990,7994,8014,8019,8035,8051,8071,8095,8099,8124,8149,8171,8197,8203,8207,8215,8219,8227,8258,8265,8282,8296,8310,8322,8336,8341,8349],{"__ignoreMap":1093},[1097,7888,7889,7891,7893,7895,7897,7899,7901,7903,7905],{"class":1099,"line":1100},[1097,7890,1539],{"class":1324},[1097,7892,5128],{"class":1330},[1097,7894,5131],{"class":1567},[1097,7896,5134],{"class":1567},[1097,7898,1571],{"class":1324},[1097,7900,1498],{"class":1324},[1097,7902,1303],{"class":1107},[1097,7904,1498],{"class":1324},[1097,7906,1545],{"class":1324},[1097,7908,7909,7911,7913,7915,7917],{"class":1099,"line":1117},[1097,7910,3046],{"class":1567},[1097,7912,6225],{"class":1320},[1097,7914,1571],{"class":1324},[1097,7916,6230],{"class":1120},[1097,7918,2653],{"class":1320},[1097,7920,7921],{"class":1099,"line":1340},[1097,7922,1389],{"emptyLinePlaceholder":21},[1097,7924,7925,7927,7929,7931,7933,7935,7937,7939,7941,7943,7945,7947,7949,7951,7953],{"class":1099,"line":1355},[1097,7926,3046],{"class":1567},[1097,7928,1689],{"class":1324},[1097,7930,6264],{"class":1330},[1097,7932,1334],{"class":1324},[1097,7934,1755],{"class":1320},[1097,7936,1456],{"class":1324},[1097,7938,2607],{"class":1324},[1097,7940,2610],{"class":1310},[1097,7942,6278],{"class":1120},[1097,7944,1321],{"class":1320},[1097,7946,1349],{"class":1324},[1097,7948,5271],{"class":1107},[1097,7950,1349],{"class":1324},[1097,7952,1695],{"class":1324},[1097,7954,1400],{"class":1324},[1097,7956,7957,7960,7962,7964,7966,7968],{"class":1099,"line":1367},[1097,7958,7959],{"class":1330},"  key",[1097,7961,1334],{"class":1324},[1097,7963,1411],{"class":1324},[1097,7965,1766],{"class":1107},[1097,7967,1349],{"class":1324},[1097,7969,1352],{"class":1324},[1097,7971,7972,7975,7977,7979,7981],{"class":1099,"line":1378},[1097,7973,7974],{"class":1120},"  default",[1097,7976,1334],{"class":1324},[1097,7978,4978],{"class":1324},[1097,7980,1804],{"class":1567},[1097,7982,7983],{"class":1320}," []\n",[1097,7985,7986,7988],{"class":1099,"line":1386},[1097,7987,1456],{"class":1324},[1097,7989,1459],{"class":1320},[1097,7991,7992],{"class":1099,"line":1392},[1097,7993,1389],{"emptyLinePlaceholder":21},[1097,7995,7996,7998,8001,8003,8006,8008,8010,8012],{"class":1099,"line":1403},[1097,7997,3046],{"class":1567},[1097,7999,8000],{"class":1320}," items ",[1097,8002,1571],{"class":1324},[1097,8004,8005],{"class":1120}," computed",[1097,8007,1321],{"class":1320},[1097,8009,1784],{"class":1324},[1097,8011,1804],{"class":1567},[1097,8013,1337],{"class":1320},[1097,8015,8016],{"class":1099,"line":1419},[1097,8017,8018],{"class":1324},"  {\n",[1097,8020,8021,8024,8026,8028,8031,8033],{"class":1099,"line":1425},[1097,8022,8023],{"class":1330},"    label",[1097,8025,1334],{"class":1324},[1097,8027,1411],{"class":1324},[1097,8029,8030],{"class":1107},"New chat",[1097,8032,1349],{"class":1324},[1097,8034,1352],{"class":1324},[1097,8036,8037,8040,8042,8044,8047,8049],{"class":1099,"line":1430},[1097,8038,8039],{"class":1330},"    to",[1097,8041,1334],{"class":1324},[1097,8043,1411],{"class":1324},[1097,8045,8046],{"class":1107},"\u002F",[1097,8048,1349],{"class":1324},[1097,8050,1352],{"class":1324},[1097,8052,8053,8056,8058,8060,8067,8069],{"class":1099,"line":1453},[1097,8054,8055],{"class":1330},"    icon",[1097,8057,1334],{"class":1324},[1097,8059,1411],{"class":1324},[1097,8061,8062,8066],{"class":1107},[8063,8064],"i",{"class":8065},"shiki-icon-highlight sRy2g","i-lucide-plus-square",[1097,8068,1349],{"class":1324},[1097,8070,1352],{"class":1324},[1097,8072,8073,8076,8078,8081,8083,8086,8089,8091,8093],{"class":1099,"line":1958},[1097,8074,8075],{"class":1330},"    active",[1097,8077,1334],{"class":1324},[1097,8079,8080],{"class":1320}," route",[1097,8082,1787],{"class":1324},[1097,8084,8085],{"class":1320},"name ",[1097,8087,8088],{"class":1324},"===",[1097,8090,1411],{"class":1324},[1097,8092,7083],{"class":1107},[1097,8094,1375],{"class":1324},[1097,8096,8097],{"class":1099,"line":1985},[1097,8098,1422],{"class":1324},[1097,8100,8101,8104,8106,8108,8110,8112,8114,8116,8118,8120,8122],{"class":1099,"line":2031},[1097,8102,8103],{"class":1324},"  ...",[1097,8105,1766],{"class":1320},[1097,8107,1787],{"class":1324},[1097,8109,3331],{"class":1320},[1097,8111,1787],{"class":1324},[1097,8113,4478],{"class":1120},[1097,8115,1321],{"class":1320},[1097,8117,262],{"class":1921},[1097,8119,1804],{"class":1567},[1097,8121,1930],{"class":1320},[1097,8123,1325],{"class":1324},[1097,8125,8126,8128,8130,8132,8134,8137,8140,8142,8145,8147],{"class":1099,"line":2098},[1097,8127,8023],{"class":1330},[1097,8129,1334],{"class":1324},[1097,8131,2775],{"class":1320},[1097,8133,1787],{"class":1324},[1097,8135,8136],{"class":1320},"title ",[1097,8138,8139],{"class":1324},"||",[1097,8141,1411],{"class":1324},[1097,8143,8144],{"class":1107},"Untitled",[1097,8146,1349],{"class":1324},[1097,8148,1352],{"class":1324},[1097,8150,8151,8153,8155,8157,8159,8161,8163,8165,8167,8169],{"class":1099,"line":2168},[1097,8152,8039],{"class":1330},[1097,8154,1334],{"class":1324},[1097,8156,3685],{"class":1324},[1097,8158,5397],{"class":1107},[1097,8160,5400],{"class":1324},[1097,8162,262],{"class":1320},[1097,8164,1787],{"class":1324},[1097,8166,1998],{"class":1320},[1097,8168,5409],{"class":1324},[1097,8170,1352],{"class":1324},[1097,8172,8173,8175,8177,8179,8181,8183,8185,8188,8190,8192,8194],{"class":1099,"line":2208},[1097,8174,8075],{"class":1330},[1097,8176,1334],{"class":1324},[1097,8178,8080],{"class":1320},[1097,8180,1787],{"class":1324},[1097,8182,6295],{"class":1320},[1097,8184,1787],{"class":1324},[1097,8186,8187],{"class":1320},"id ",[1097,8189,8088],{"class":1324},[1097,8191,2775],{"class":1320},[1097,8193,1787],{"class":1324},[1097,8195,8196],{"class":1320},"id\n",[1097,8198,8199,8201],{"class":1099,"line":2259},[1097,8200,2398],{"class":1324},[1097,8202,1951],{"class":1320},[1097,8204,8205],{"class":1099,"line":2272},[1097,8206,2305],{"class":1320},[1097,8208,8209,8211,8213],{"class":1099,"line":2302},[1097,8210,1615],{"class":1324},[1097,8212,5128],{"class":1330},[1097,8214,1545],{"class":1324},[1097,8216,8217],{"class":1099,"line":2308},[1097,8218,1389],{"emptyLinePlaceholder":21},[1097,8220,8221,8223,8225],{"class":1099,"line":2313},[1097,8222,1539],{"class":1324},[1097,8224,1542],{"class":1330},[1097,8226,1545],{"class":1324},[1097,8228,8229,8231,8233,8236,8238,8240,8243,8245,8247,8249,8251,8254,8256],{"class":1099,"line":2345},[1097,8230,1552],{"class":1324},[1097,8232,7861],{"class":1330},[1097,8234,8235],{"class":1567}," :items",[1097,8237,1571],{"class":1324},[1097,8239,1498],{"class":1324},[1097,8241,8242],{"class":1107},"items",[1097,8244,1498],{"class":1324},[1097,8246,5481],{"class":1567},[1097,8248,1571],{"class":1324},[1097,8250,1498],{"class":1324},[1097,8252,8253],{"class":1107},"m-2",[1097,8255,1498],{"class":1324},[1097,8257,1545],{"class":1324},[1097,8259,8260,8262],{"class":1099,"line":2361},[1097,8261,1561],{"class":1324},[1097,8263,8264],{"class":1330},"UButton\n",[1097,8266,8267,8270,8272,8274,8280],{"class":1099,"line":2379},[1097,8268,8269],{"class":1567},"      icon",[1097,8271,1571],{"class":1324},[1097,8273,1498],{"class":1324},[1097,8275,8276,8279],{"class":1107},[8063,8277],{"class":8278},"shiki-icon-highlight sdATh","i-lucide-messages-square",[1097,8281,5554],{"class":1324},[1097,8283,8284,8287,8289,8291,8294],{"class":1099,"line":2395},[1097,8285,8286],{"class":1567},"      variant",[1097,8288,1571],{"class":1324},[1097,8290,1498],{"class":1324},[1097,8292,8293],{"class":1107},"ghost",[1097,8295,5554],{"class":1324},[1097,8297,8298,8301,8303,8305,8308],{"class":1099,"line":2403},[1097,8299,8300],{"class":1567},"      label",[1097,8302,1571],{"class":1324},[1097,8304,1498],{"class":1324},[1097,8306,8307],{"class":1107},"Chats History",[1097,8309,5554],{"class":1324},[1097,8311,8312,8314,8316,8318,8320],{"class":1099,"line":3383},[1097,8313,6653],{"class":1567},[1097,8315,1571],{"class":1324},[1097,8317,1498],{"class":1324},[1097,8319,5639],{"class":1107},[1097,8321,5554],{"class":1324},[1097,8323,8324,8327,8329,8331,8334],{"class":1099,"line":3400},[1097,8325,8326],{"class":1567},"      class",[1097,8328,1571],{"class":1324},[1097,8330,1498],{"class":1324},[1097,8332,8333],{"class":1107},"w-fit",[1097,8335,5554],{"class":1324},[1097,8337,8338],{"class":1099,"line":3432},[1097,8339,8340],{"class":1324},"    \u002F>\n",[1097,8342,8343,8345,8347],{"class":1099,"line":3445},[1097,8344,1606],{"class":1324},[1097,8346,7861],{"class":1330},[1097,8348,1545],{"class":1324},[1097,8350,8351,8353,8355],{"class":1099,"line":3450},[1097,8352,1615],{"class":1324},[1097,8354,1542],{"class":1330},[1097,8356,1545],{"class":1324},[991,8358,8360],{"id":8359},"integrating-history-in-the-home-page","Integrating history in the home page",[1297,8362,8363],{},[1674,8364,8365],{},[1088,8366,8369],{"className":1529,"code":8367,"filename":5118,"highlights":8368,"language":34,"meta":1093,"style":1093},"\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",[2395,2403,3383],[1047,8370,8371,8391,8407,8423,8427,8439,8461,8465,8477,8481,8485,8509,8523,8531,8539,8553,8589,8593,8597,8603,8607,8611,8633,8637,8645,8649,8657,8675,8689,8699,8708,8720,8738,8756,8760,8768,8772,8778,8790,8802,8814,8826,8838,8842,8860,8868,8876,8884,8892],{"__ignoreMap":1093},[1097,8372,8373,8375,8377,8379,8381,8383,8385,8387,8389],{"class":1099,"line":1100},[1097,8374,1539],{"class":1324},[1097,8376,5128],{"class":1330},[1097,8378,5131],{"class":1567},[1097,8380,5134],{"class":1567},[1097,8382,1571],{"class":1324},[1097,8384,1498],{"class":1324},[1097,8386,1303],{"class":1107},[1097,8388,1498],{"class":1324},[1097,8390,1545],{"class":1324},[1097,8392,8393,8395,8397,8399,8401,8403,8405],{"class":1099,"line":1117},[1097,8394,3046],{"class":1567},[1097,8396,5151],{"class":1320},[1097,8398,1571],{"class":1324},[1097,8400,5156],{"class":1120},[1097,8402,1321],{"class":1320},[1097,8404,5161],{"class":1324},[1097,8406,1459],{"class":1320},[1097,8408,8409,8411,8413,8415,8417,8419,8421],{"class":1099,"line":1340},[1097,8410,3046],{"class":1567},[1097,8412,5170],{"class":1320},[1097,8414,1571],{"class":1324},[1097,8416,5156],{"class":1120},[1097,8418,1321],{"class":1320},[1097,8420,5179],{"class":4183},[1097,8422,1459],{"class":1320},[1097,8424,8425],{"class":1099,"line":1355},[1097,8426,1389],{"emptyLinePlaceholder":21},[1097,8428,8429,8431,8433,8435,8437],{"class":1099,"line":1367},[1097,8430,2581],{"class":1567},[1097,8432,5192],{"class":1567},[1097,8434,5195],{"class":1120},[1097,8436,1784],{"class":1324},[1097,8438,1400],{"class":1324},[1097,8440,8441,8443,8445,8447,8449,8451,8453,8455,8457,8459],{"class":1099,"line":1378},[1097,8442,3546],{"class":1310},[1097,8444,1930],{"class":1330},[1097,8446,3551],{"class":1324},[1097,8448,5210],{"class":1320},[1097,8450,1787],{"class":1324},[1097,8452,3331],{"class":1320},[1097,8454,1787],{"class":1324},[1097,8456,5219],{"class":1120},[1097,8458,5222],{"class":1330},[1097,8460,5225],{"class":1310},[1097,8462,8463],{"class":1099,"line":1386},[1097,8464,1389],{"emptyLinePlaceholder":21},[1097,8466,8467,8469,8471,8473,8475],{"class":1099,"line":1392},[1097,8468,5234],{"class":1320},[1097,8470,1787],{"class":1324},[1097,8472,3331],{"class":1320},[1097,8474,2607],{"class":1324},[1097,8476,4369],{"class":4183},[1097,8478,8479],{"class":1099,"line":1403},[1097,8480,1389],{"emptyLinePlaceholder":21},[1097,8482,8483],{"class":1099,"line":1419},[1097,8484,5251],{"class":2675},[1097,8486,8487,8489,8491,8493,8495,8497,8499,8501,8503,8505,8507],{"class":1099,"line":1425},[1097,8488,2597],{"class":1567},[1097,8490,2775],{"class":1320},[1097,8492,2607],{"class":1324},[1097,8494,2610],{"class":1310},[1097,8496,5264],{"class":1120},[1097,8498,1321],{"class":1330},[1097,8500,1349],{"class":1324},[1097,8502,5271],{"class":1107},[1097,8504,1349],{"class":1324},[1097,8506,1695],{"class":1324},[1097,8508,1400],{"class":1324},[1097,8510,8511,8513,8515,8517,8519,8521],{"class":1099,"line":1430},[1097,8512,5282],{"class":1330},[1097,8514,1334],{"class":1324},[1097,8516,1411],{"class":1324},[1097,8518,5289],{"class":1107},[1097,8520,1349],{"class":1324},[1097,8522,1352],{"class":1324},[1097,8524,8525,8527,8529],{"class":1099,"line":1453},[1097,8526,5298],{"class":1330},[1097,8528,1334],{"class":1324},[1097,8530,1400],{"class":1324},[1097,8532,8533,8535,8537],{"class":1099,"line":1958},[1097,8534,3371],{"class":1330},[1097,8536,1334],{"class":1324},[1097,8538,1400],{"class":1324},[1097,8540,8541,8543,8545,8547,8549,8551],{"class":1099,"line":1985},[1097,8542,4511],{"class":1330},[1097,8544,1334],{"class":1324},[1097,8546,1411],{"class":1324},[1097,8548,2130],{"class":1107},[1097,8550,1349],{"class":1324},[1097,8552,1352],{"class":1324},[1097,8554,8555,8557,8559,8561,8563,8565,8567,8569,8571,8573,8575,8577,8579,8581,8583,8585,8587],{"class":1099,"line":2031},[1097,8556,4544],{"class":1330},[1097,8558,1334],{"class":1324},[1097,8560,1438],{"class":1330},[1097,8562,1844],{"class":1324},[1097,8564,2504],{"class":1330},[1097,8566,1334],{"class":1324},[1097,8568,1411],{"class":1324},[1097,8570,5343],{"class":1107},[1097,8572,1349],{"class":1324},[1097,8574,1695],{"class":1324},[1097,8576,1698],{"class":1330},[1097,8578,1334],{"class":1324},[1097,8580,5354],{"class":1320},[1097,8582,1787],{"class":1324},[1097,8584,3331],{"class":1320},[1097,8586,1711],{"class":1324},[1097,8588,3172],{"class":1330},[1097,8590,8591],{"class":1099,"line":2098},[1097,8592,4383],{"class":1324},[1097,8594,8595],{"class":1099,"line":2168},[1097,8596,4566],{"class":1324},[1097,8598,8599,8601],{"class":1099,"line":2208},[1097,8600,2398],{"class":1324},[1097,8602,1459],{"class":1330},[1097,8604,8605],{"class":1099,"line":2259},[1097,8606,1389],{"emptyLinePlaceholder":21},[1097,8608,8609],{"class":1099,"line":2272},[1097,8610,5385],{"class":2675},[1097,8612,8613,8615,8617,8619,8621,8623,8625,8627,8629,8631],{"class":1099,"line":2302},[1097,8614,5390],{"class":1120},[1097,8616,1321],{"class":1330},[1097,8618,3691],{"class":1324},[1097,8620,5397],{"class":1107},[1097,8622,5400],{"class":1324},[1097,8624,262],{"class":1320},[1097,8626,1787],{"class":1324},[1097,8628,1998],{"class":1320},[1097,8630,5409],{"class":1324},[1097,8632,1459],{"class":1330},[1097,8634,8635],{"class":1099,"line":2308},[1097,8636,5416],{"class":1324},[1097,8638,8639,8641,8643],{"class":1099,"line":2313},[1097,8640,1615],{"class":1324},[1097,8642,5128],{"class":1330},[1097,8644,1545],{"class":1324},[1097,8646,8647],{"class":1099,"line":2345},[1097,8648,1389],{"emptyLinePlaceholder":21},[1097,8650,8651,8653,8655],{"class":1099,"line":2361},[1097,8652,1539],{"class":1324},[1097,8654,1542],{"class":1330},[1097,8656,1545],{"class":1324},[1097,8658,8659,8661,8663,8665,8667,8669,8671,8673],{"class":1099,"line":2379},[1097,8660,1552],{"class":1324},[1097,8662,5443],{"class":1330},[1097,8664,5446],{"class":1567},[1097,8666,1571],{"class":1324},[1097,8668,1498],{"class":1324},[1097,8670,5453],{"class":1107},[1097,8672,1498],{"class":1324},[1097,8674,1545],{"class":1324},[1097,8676,8678,8680,8682,8684,8687],{"class":8677,"line":2395},[1099,1549],[1097,8679,1561],{"class":1324},[1097,8681,1542],{"class":1330},[1097,8683,5466],{"class":1324},[1097,8685,8686],{"class":1567},"header",[1097,8688,1545],{"class":1324},[1097,8690,8692,8694,8697],{"class":8691,"line":2403},[1099,1549],[1097,8693,1585],{"class":1324},[1097,8695,8696],{"class":1330},"ChatsHistory",[1097,8698,1591],{"class":1324},[1097,8700,8702,8704,8706],{"class":8701,"line":3383},[1099,1549],[1097,8703,1596],{"class":1324},[1097,8705,1542],{"class":1330},[1097,8707,1545],{"class":1324},[1097,8709,8710,8712,8714,8716,8718],{"class":1099,"line":3400},[1097,8711,1561],{"class":1324},[1097,8713,1542],{"class":1330},[1097,8715,5466],{"class":1324},[1097,8717,5469],{"class":1567},[1097,8719,1545],{"class":1324},[1097,8721,8722,8724,8726,8728,8730,8732,8734,8736],{"class":1099,"line":3432},[1097,8723,1585],{"class":1324},[1097,8725,5478],{"class":1330},[1097,8727,5481],{"class":1567},[1097,8729,1571],{"class":1324},[1097,8731,1498],{"class":1324},[1097,8733,5488],{"class":1107},[1097,8735,1498],{"class":1324},[1097,8737,1545],{"class":1324},[1097,8739,8740,8742,8744,8746,8748,8750,8752,8754],{"class":1099,"line":3445},[1097,8741,5497],{"class":1324},[1097,8743,5500],{"class":1330},[1097,8745,5481],{"class":1567},[1097,8747,1571],{"class":1324},[1097,8749,1498],{"class":1324},[1097,8751,5509],{"class":1107},[1097,8753,1498],{"class":1324},[1097,8755,1545],{"class":1324},[1097,8757,8758],{"class":1099,"line":3450},[1097,8759,5518],{"class":1320},[1097,8761,8762,8764,8766],{"class":1099,"line":3456},[1097,8763,5523],{"class":1324},[1097,8765,5500],{"class":1330},[1097,8767,1545],{"class":1324},[1097,8769,8770],{"class":1099,"line":3487},[1097,8771,1389],{"emptyLinePlaceholder":21},[1097,8773,8774,8776],{"class":1099,"line":3531},[1097,8775,5497],{"class":1324},[1097,8777,5539],{"class":1330},[1097,8779,8780,8782,8784,8786,8788],{"class":1099,"line":3538},[1097,8781,5545],{"class":1567},[1097,8783,1571],{"class":1324},[1097,8785,1498],{"class":1324},[1097,8787,5210],{"class":1107},[1097,8789,5554],{"class":1324},[1097,8791,8792,8794,8796,8798,8800],{"class":1099,"line":3543},[1097,8793,5560],{"class":1567},[1097,8795,1571],{"class":1324},[1097,8797,1498],{"class":1324},[1097,8799,5567],{"class":1107},[1097,8801,5554],{"class":1324},[1097,8803,8804,8806,8808,8810,8812],{"class":1099,"line":3561},[1097,8805,5575],{"class":1567},[1097,8807,1571],{"class":1324},[1097,8809,1498],{"class":1324},[1097,8811,5582],{"class":1107},[1097,8813,5554],{"class":1324},[1097,8815,8816,8818,8820,8822,8824],{"class":1099,"line":3600},[1097,8817,5590],{"class":1567},[1097,8819,1571],{"class":1324},[1097,8821,1498],{"class":1324},[1097,8823,5597],{"class":1107},[1097,8825,5554],{"class":1324},[1097,8827,8828,8830,8832,8834,8836],{"class":1099,"line":3606},[1097,8829,5605],{"class":1567},[1097,8831,1571],{"class":1324},[1097,8833,1498],{"class":1324},[1097,8835,5612],{"class":1107},[1097,8837,5554],{"class":1324},[1097,8839,8840],{"class":1099,"line":3611},[1097,8841,5620],{"class":1324},[1097,8843,8844,8846,8848,8850,8852,8854,8856,8858],{"class":1099,"line":3617},[1097,8845,5626],{"class":1324},[1097,8847,5629],{"class":1330},[1097,8849,5632],{"class":1567},[1097,8851,1571],{"class":1324},[1097,8853,1498],{"class":1324},[1097,8855,5639],{"class":1107},[1097,8857,1498],{"class":1324},[1097,8859,1591],{"class":1324},[1097,8861,8862,8864,8866],{"class":1099,"line":3637},[1097,8863,5523],{"class":1324},[1097,8865,5093],{"class":1330},[1097,8867,1545],{"class":1324},[1097,8869,8870,8872,8874],{"class":1099,"line":3665},[1097,8871,5657],{"class":1324},[1097,8873,5478],{"class":1330},[1097,8875,1545],{"class":1324},[1097,8877,8878,8880,8882],{"class":1099,"line":3677},[1097,8879,1596],{"class":1324},[1097,8881,1542],{"class":1330},[1097,8883,1545],{"class":1324},[1097,8885,8886,8888,8890],{"class":1099,"line":3696},[1097,8887,1606],{"class":1324},[1097,8889,5443],{"class":1330},[1097,8891,1545],{"class":1324},[1097,8893,8894,8896,8898],{"class":1099,"line":3724},[1097,8895,1615],{"class":1324},[1097,8897,1542],{"class":1330},[1097,8899,1545],{"class":1324},[991,8901,8903],{"id":8902},"integrating-history-in-the-chat-page","Integrating history in the chat page",[1297,8905,8906],{},[1674,8907,8908],{},[1088,8909,8912],{"className":1529,"code":8910,"filename":6119,"highlights":8911,"language":34,"meta":1093,"style":1093},"\u003Cscript setup lang=\"ts\">\nimport { DefaultChatTransport, isReasoningUIPart, isTextUIPart } from 'ai'\nimport { Chat } from '@ai-sdk\u002Fvue'\nimport { isPartStreaming } from '@nuxt\u002Fui\u002Futils\u002Fai'\n\nconst route = useRoute()\nconst toast = useToast()\n\n\u002F\u002F Fetch existing chat data\nconst { data: chatData } = await useFetch(`\u002Fapi\u002Fchats\u002F${route.params.id}`)\n\nif (!chatData.value) {\n  throw createError({ statusCode: 404, statusMessage: 'Chat not found', fatal: true })\n}\n\nconst input = ref('')\n\n\u002F\u002F Initialize the Chat class from AI SDK\nconst chat = new Chat({\n  id: chatData.value.id,\n  messages: chatData.value.messages,\n  transport: new DefaultChatTransport({\n    api: `\u002Fapi\u002Fchats\u002F${chatData.value.id}`\n  }),\n  onData(dataPart) {\n    \u002F\u002F Refresh the chat list when a title is generated\n    if (dataPart.type === 'data-chat-title') {\n      refreshNuxtData('chats')\n    }\n  },\n  onError(error) {\n    toast.add({\n      title: 'Error',\n      description: error.message,\n      color: 'error'\n    })\n  }\n})\n\nfunction handleSubmit(e: Event) {\n  e.preventDefault()\n  if (input.value.trim()) {\n    chat.sendMessage({ text: input.value })\n    input.value = ''\n  }\n}\n\n\u002F\u002F Auto-generate response for first message\nonMounted(() => {\n  if (chatData.value?.messages.length === 1) {\n    chat.regenerate()\n  }\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CUDashboardPanel :ui=\"{ body: 'p-0 sm:p-0' }\">\n    \u003Ctemplate #header>\n      \u003CChatsHistory \u002F>\n    \u003C\u002Ftemplate>\n    \u003Ctemplate #body>\n      \u003CUContainer class=\"min-h-dvh flex flex-col py-4 sm:py-6\">\n        \u003CUChatMessages\n          :messages=\"chat.messages\"\n          :status=\"chat.status\"\n          should-auto-scroll\n          class=\"flex-1\"\n        >\n          \u003Ctemplate #content=\"{ message }\">\n            \u003Ctemplate v-for=\"(part, index) in message.parts\" :key=\"`${message.id}-${part.type}-${index}`\">\n              \u003CUChatReasoning\n                v-if=\"isReasoningUIPart(part)\"\n                :text=\"part.text\"\n                :streaming=\"isPartStreaming(part)\"\n              >\n                \u003CChatComark\n                  :markdown=\"part.text\"\n                  :streaming=\"isPartStreaming(part)\"\n                \u002F>\n              \u003C\u002FUChatReasoning>\n\n              \u003Ctemplate v-else-if=\"isTextUIPart(part)\">\n                \u003CChatComark\n                  v-if=\"message.role === 'assistant'\"\n                  :markdown=\"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=\"chat.error\"\n          variant=\"subtle\"\n          class=\"sticky bottom-0\"\n          @submit=\"handleSubmit\"\n        >\n          \u003CUChatPromptSubmit\n            :status=\"chat.status\"\n            color=\"neutral\"\n            @stop=\"chat.stop()\"\n            @reload=\"chat.regenerate()\"\n          \u002F>\n        \u003C\u002FUChatPrompt>\n      \u003C\u002FUContainer>\n    \u003C\u002Ftemplate>\n  \u003C\u002FUDashboardPanel>\n\u003C\u002Ftemplate>\n",[3966,3971,3976],[1047,8913,8914,8934,8960,8978,8996,9000,9012,9024,9028,9032,9074,9078,9094,9134,9138,9142,9158,9162,9166,9182,9200,9218,9232,9256,9264,9276,9280,9304,9318,9322,9326,9338,9350,9364,9378,9390,9396,9400,9406,9410,9428,9438,9458,9484,9496,9500,9504,9508,9512,9524,9552,9562,9566,9572,9580,9584,9592,9610,9622,9630,9638,9650,9669,9676,9689,9701,9705,9717,9721,9745,9811,9817,9829,9841,9853,9857,9863,9875,9887,9891,9899,9903,9923,9929,9941,9953,9965,9969,9997,10001,10009,10017,10025,10033,10041,10045,10051,10063,10075,10087,10099,10111,10115,10121,10133,10145,10157,10169,10173,10181,10189,10197,10205],{"__ignoreMap":1093},[1097,8915,8916,8918,8920,8922,8924,8926,8928,8930,8932],{"class":1099,"line":1100},[1097,8917,1539],{"class":1324},[1097,8919,5128],{"class":1330},[1097,8921,5131],{"class":1567},[1097,8923,5134],{"class":1567},[1097,8925,1571],{"class":1324},[1097,8927,1498],{"class":1324},[1097,8929,1303],{"class":1107},[1097,8931,1498],{"class":1324},[1097,8933,1545],{"class":1324},[1097,8935,8936,8938,8940,8942,8944,8946,8948,8950,8952,8954,8956,8958],{"class":1099,"line":1117},[1097,8937,1686],{"class":1310},[1097,8939,1689],{"class":1324},[1097,8941,6152],{"class":1320},[1097,8943,1695],{"class":1324},[1097,8945,6157],{"class":1320},[1097,8947,1695],{"class":1324},[1097,8949,6162],{"class":1320},[1097,8951,1711],{"class":1324},[1097,8953,1714],{"class":1310},[1097,8955,1411],{"class":1324},[1097,8957,2518],{"class":1107},[1097,8959,1375],{"class":1324},[1097,8961,8962,8964,8966,8968,8970,8972,8974,8976],{"class":1099,"line":1340},[1097,8963,1686],{"class":1310},[1097,8965,1689],{"class":1324},[1097,8967,6182],{"class":1320},[1097,8969,1711],{"class":1324},[1097,8971,1714],{"class":1310},[1097,8973,1411],{"class":1324},[1097,8975,6191],{"class":1107},[1097,8977,1375],{"class":1324},[1097,8979,8980,8982,8984,8986,8988,8990,8992,8994],{"class":1099,"line":1355},[1097,8981,1686],{"class":1310},[1097,8983,1689],{"class":1324},[1097,8985,6203],{"class":1320},[1097,8987,1711],{"class":1324},[1097,8989,1714],{"class":1310},[1097,8991,1411],{"class":1324},[1097,8993,6212],{"class":1107},[1097,8995,1375],{"class":1324},[1097,8997,8998],{"class":1099,"line":1367},[1097,8999,1389],{"emptyLinePlaceholder":21},[1097,9001,9002,9004,9006,9008,9010],{"class":1099,"line":1378},[1097,9003,3046],{"class":1567},[1097,9005,6225],{"class":1320},[1097,9007,1571],{"class":1324},[1097,9009,6230],{"class":1120},[1097,9011,2653],{"class":1320},[1097,9013,9014,9016,9018,9020,9022],{"class":1099,"line":1386},[1097,9015,3046],{"class":1567},[1097,9017,6239],{"class":1320},[1097,9019,1571],{"class":1324},[1097,9021,6244],{"class":1120},[1097,9023,2653],{"class":1320},[1097,9025,9026],{"class":1099,"line":1392},[1097,9027,1389],{"emptyLinePlaceholder":21},[1097,9029,9030],{"class":1099,"line":1403},[1097,9031,6255],{"class":2675},[1097,9033,9034,9036,9038,9040,9042,9044,9046,9048,9050,9052,9054,9056,9058,9060,9062,9064,9066,9068,9070,9072],{"class":1099,"line":1419},[1097,9035,3046],{"class":1567},[1097,9037,1689],{"class":1324},[1097,9039,6264],{"class":1330},[1097,9041,1334],{"class":1324},[1097,9043,6269],{"class":1320},[1097,9045,1456],{"class":1324},[1097,9047,2607],{"class":1324},[1097,9049,2610],{"class":1310},[1097,9051,6278],{"class":1120},[1097,9053,1321],{"class":1320},[1097,9055,3691],{"class":1324},[1097,9057,6285],{"class":1107},[1097,9059,5400],{"class":1324},[1097,9061,6290],{"class":1320},[1097,9063,1787],{"class":1324},[1097,9065,6295],{"class":1320},[1097,9067,1787],{"class":1324},[1097,9069,1998],{"class":1320},[1097,9071,5409],{"class":1324},[1097,9073,1459],{"class":1320},[1097,9075,9076],{"class":1099,"line":1425},[1097,9077,1389],{"emptyLinePlaceholder":21},[1097,9079,9080,9082,9084,9086,9088,9090,9092],{"class":1099,"line":1430},[1097,9081,6312],{"class":1310},[1097,9083,1930],{"class":1320},[1097,9085,3551],{"class":1324},[1097,9087,6319],{"class":1320},[1097,9089,1787],{"class":1324},[1097,9091,6324],{"class":1320},[1097,9093,1325],{"class":1324},[1097,9095,9096,9098,9100,9102,9104,9106,9108,9110,9112,9114,9116,9118,9120,9122,9124,9126,9128,9130,9132],{"class":1099,"line":1453},[1097,9097,6331],{"class":1310},[1097,9099,2884],{"class":1120},[1097,9101,1321],{"class":1330},[1097,9103,1844],{"class":1324},[1097,9105,3573],{"class":1330},[1097,9107,1334],{"class":1324},[1097,9109,3579],{"class":3578},[1097,9111,1695],{"class":1324},[1097,9113,3584],{"class":1330},[1097,9115,1334],{"class":1324},[1097,9117,1411],{"class":1324},[1097,9119,3591],{"class":1107},[1097,9121,1349],{"class":1324},[1097,9123,1695],{"class":1324},[1097,9125,6360],{"class":1330},[1097,9127,1334],{"class":1324},[1097,9129,4184],{"class":4183},[1097,9131,1711],{"class":1324},[1097,9133,1459],{"class":1330},[1097,9135,9136],{"class":1099,"line":1958},[1097,9137,5416],{"class":1324},[1097,9139,9140],{"class":1099,"line":1985},[1097,9141,1389],{"emptyLinePlaceholder":21},[1097,9143,9144,9146,9148,9150,9152,9154,9156],{"class":1099,"line":2031},[1097,9145,3046],{"class":1567},[1097,9147,5151],{"class":1320},[1097,9149,1571],{"class":1324},[1097,9151,5156],{"class":1120},[1097,9153,1321],{"class":1320},[1097,9155,5161],{"class":1324},[1097,9157,1459],{"class":1320},[1097,9159,9160],{"class":1099,"line":2098},[1097,9161,1389],{"emptyLinePlaceholder":21},[1097,9163,9164],{"class":1099,"line":2168},[1097,9165,6401],{"class":2675},[1097,9167,9168,9170,9172,9174,9176,9178,9180],{"class":1099,"line":2208},[1097,9169,3046],{"class":1567},[1097,9171,6409],{"class":1320},[1097,9173,1571],{"class":1324},[1097,9175,1881],{"class":1324},[1097,9177,6182],{"class":1120},[1097,9179,1321],{"class":1320},[1097,9181,1325],{"class":1324},[1097,9183,9184,9186,9188,9190,9192,9194,9196,9198],{"class":1099,"line":2259},[1097,9185,1777],{"class":1330},[1097,9187,1334],{"class":1324},[1097,9189,6429],{"class":1320},[1097,9191,1787],{"class":1324},[1097,9193,3331],{"class":1320},[1097,9195,1787],{"class":1324},[1097,9197,1998],{"class":1320},[1097,9199,1352],{"class":1324},[1097,9201,9202,9204,9206,9208,9210,9212,9214,9216],{"class":1099,"line":2272},[1097,9203,1937],{"class":1330},[1097,9205,1334],{"class":1324},[1097,9207,6429],{"class":1320},[1097,9209,1787],{"class":1324},[1097,9211,3331],{"class":1320},[1097,9213,1787],{"class":1324},[1097,9215,1976],{"class":1320},[1097,9217,1352],{"class":1324},[1097,9219,9220,9222,9224,9226,9228,9230],{"class":1099,"line":2302},[1097,9221,6464],{"class":1330},[1097,9223,1334],{"class":1324},[1097,9225,1881],{"class":1324},[1097,9227,6152],{"class":1120},[1097,9229,1321],{"class":1320},[1097,9231,1325],{"class":1324},[1097,9233,9234,9236,9238,9240,9242,9244,9246,9248,9250,9252,9254],{"class":1099,"line":2308},[1097,9235,6480],{"class":1330},[1097,9237,1334],{"class":1324},[1097,9239,3685],{"class":1324},[1097,9241,6285],{"class":1107},[1097,9243,5400],{"class":1324},[1097,9245,6319],{"class":1320},[1097,9247,1787],{"class":1324},[1097,9249,3331],{"class":1320},[1097,9251,1787],{"class":1324},[1097,9253,1998],{"class":1320},[1097,9255,6501],{"class":1324},[1097,9257,9258,9260,9262],{"class":1099,"line":2313},[1097,9259,2398],{"class":1324},[1097,9261,1861],{"class":1320},[1097,9263,1352],{"class":1324},[1097,9265,9266,9268,9270,9272,9274],{"class":1099,"line":2345},[1097,9267,6516],{"class":1330},[1097,9269,1321],{"class":1324},[1097,9271,6521],{"class":1921},[1097,9273,1861],{"class":1324},[1097,9275,1400],{"class":1324},[1097,9277,9278],{"class":1099,"line":2361},[1097,9279,6531],{"class":2675},[1097,9281,9282,9284,9286,9288,9290,9292,9294,9296,9298,9300,9302],{"class":1099,"line":2379},[1097,9283,6537],{"class":1310},[1097,9285,1930],{"class":1330},[1097,9287,6521],{"class":1320},[1097,9289,1787],{"class":1324},[1097,9291,6546],{"class":1320},[1097,9293,3358],{"class":1324},[1097,9295,1411],{"class":1324},[1097,9297,4331],{"class":1107},[1097,9299,1349],{"class":1324},[1097,9301,3556],{"class":1330},[1097,9303,1325],{"class":1324},[1097,9305,9306,9308,9310,9312,9314,9316],{"class":1099,"line":2395},[1097,9307,6564],{"class":1120},[1097,9309,1321],{"class":1330},[1097,9311,1349],{"class":1324},[1097,9313,1766],{"class":1107},[1097,9315,1349],{"class":1324},[1097,9317,1459],{"class":1330},[1097,9319,9320],{"class":1099,"line":2403},[1097,9321,4566],{"class":1324},[1097,9323,9324],{"class":1099,"line":3383},[1097,9325,1422],{"class":1324},[1097,9327,9328,9330,9332,9334,9336],{"class":1099,"line":3400},[1097,9329,6590],{"class":1330},[1097,9331,1321],{"class":1324},[1097,9333,6595],{"class":1921},[1097,9335,1861],{"class":1324},[1097,9337,1400],{"class":1324},[1097,9339,9340,9342,9344,9346,9348],{"class":1099,"line":3432},[1097,9341,6605],{"class":1320},[1097,9343,1787],{"class":1324},[1097,9345,6610],{"class":1120},[1097,9347,1321],{"class":1330},[1097,9349,1325],{"class":1324},[1097,9351,9352,9354,9356,9358,9360,9362],{"class":1099,"line":3445},[1097,9353,6620],{"class":1330},[1097,9355,1334],{"class":1324},[1097,9357,1411],{"class":1324},[1097,9359,497],{"class":1107},[1097,9361,1349],{"class":1324},[1097,9363,1352],{"class":1324},[1097,9365,9366,9368,9370,9372,9374,9376],{"class":1099,"line":3450},[1097,9367,6636],{"class":1330},[1097,9369,1334],{"class":1324},[1097,9371,6641],{"class":1320},[1097,9373,1787],{"class":1324},[1097,9375,4483],{"class":1320},[1097,9377,1352],{"class":1324},[1097,9379,9380,9382,9384,9386,9388],{"class":1099,"line":3456},[1097,9381,6653],{"class":1330},[1097,9383,1334],{"class":1324},[1097,9385,1411],{"class":1324},[1097,9387,6595],{"class":1107},[1097,9389,1375],{"class":1324},[1097,9391,9392,9394],{"class":1099,"line":3487},[1097,9393,3386],{"class":1324},[1097,9395,1459],{"class":1330},[1097,9397,9398],{"class":1099,"line":3531},[1097,9399,3603],{"class":1324},[1097,9401,9402,9404],{"class":1099,"line":3538},[1097,9403,1456],{"class":1324},[1097,9405,1459],{"class":1320},[1097,9407,9408],{"class":1099,"line":3543},[1097,9409,1389],{"emptyLinePlaceholder":21},[1097,9411,9412,9414,9416,9418,9420,9422,9424,9426],{"class":1099,"line":3561},[1097,9413,6689],{"class":1567},[1097,9415,6692],{"class":1120},[1097,9417,1321],{"class":1324},[1097,9419,6697],{"class":1921},[1097,9421,1334],{"class":1324},[1097,9423,6702],{"class":1103},[1097,9425,1861],{"class":1324},[1097,9427,1400],{"class":1324},[1097,9429,9430,9432,9434,9436],{"class":1099,"line":3600},[1097,9431,6711],{"class":1320},[1097,9433,1787],{"class":1324},[1097,9435,6716],{"class":1120},[1097,9437,2653],{"class":1330},[1097,9439,9440,9442,9444,9446,9448,9450,9452,9454,9456],{"class":1099,"line":3606},[1097,9441,3546],{"class":1310},[1097,9443,1930],{"class":1330},[1097,9445,5210],{"class":1320},[1097,9447,1787],{"class":1324},[1097,9449,3331],{"class":1320},[1097,9451,1787],{"class":1324},[1097,9453,5219],{"class":1120},[1097,9455,5222],{"class":1330},[1097,9457,1325],{"class":1324},[1097,9459,9460,9462,9464,9466,9468,9470,9472,9474,9476,9478,9480,9482],{"class":1099,"line":3611},[1097,9461,6743],{"class":1320},[1097,9463,1787],{"class":1324},[1097,9465,6748],{"class":1120},[1097,9467,1321],{"class":1330},[1097,9469,1844],{"class":1324},[1097,9471,1698],{"class":1330},[1097,9473,1334],{"class":1324},[1097,9475,5354],{"class":1320},[1097,9477,1787],{"class":1324},[1097,9479,3331],{"class":1320},[1097,9481,1711],{"class":1324},[1097,9483,1459],{"class":1330},[1097,9485,9486,9488,9490,9492,9494],{"class":1099,"line":3617},[1097,9487,6771],{"class":1320},[1097,9489,1787],{"class":1324},[1097,9491,3331],{"class":1320},[1097,9493,2607],{"class":1324},[1097,9495,6780],{"class":1324},[1097,9497,9498],{"class":1099,"line":3637},[1097,9499,3603],{"class":1324},[1097,9501,9502],{"class":1099,"line":3665},[1097,9503,5416],{"class":1324},[1097,9505,9506],{"class":1099,"line":3677},[1097,9507,1389],{"emptyLinePlaceholder":21},[1097,9509,9510],{"class":1099,"line":3696},[1097,9511,6797],{"class":2675},[1097,9513,9514,9516,9518,9520,9522],{"class":1099,"line":3724},[1097,9515,6802],{"class":1120},[1097,9517,1321],{"class":1320},[1097,9519,1784],{"class":1324},[1097,9521,1804],{"class":1567},[1097,9523,1400],{"class":1324},[1097,9525,9526,9528,9530,9532,9534,9536,9538,9540,9542,9544,9546,9548,9550],{"class":1099,"line":3731},[1097,9527,3546],{"class":1310},[1097,9529,1930],{"class":1330},[1097,9531,6319],{"class":1320},[1097,9533,1787],{"class":1324},[1097,9535,3331],{"class":1320},[1097,9537,3857],{"class":1324},[1097,9539,1976],{"class":1320},[1097,9541,1787],{"class":1324},[1097,9543,3836],{"class":1320},[1097,9545,3358],{"class":1324},[1097,9547,3842],{"class":3578},[1097,9549,3556],{"class":1330},[1097,9551,1325],{"class":1324},[1097,9553,9554,9556,9558,9560],{"class":1099,"line":3736},[1097,9555,6743],{"class":1320},[1097,9557,1787],{"class":1324},[1097,9559,6847],{"class":1120},[1097,9561,2653],{"class":1330},[1097,9563,9564],{"class":1099,"line":3802},[1097,9565,3603],{"class":1324},[1097,9567,9568,9570],{"class":1099,"line":3807},[1097,9569,1456],{"class":1324},[1097,9571,1459],{"class":1320},[1097,9573,9574,9576,9578],{"class":1099,"line":3812},[1097,9575,1615],{"class":1324},[1097,9577,5128],{"class":1330},[1097,9579,1545],{"class":1324},[1097,9581,9582],{"class":1099,"line":3818},[1097,9583,1389],{"emptyLinePlaceholder":21},[1097,9585,9586,9588,9590],{"class":1099,"line":3847},[1097,9587,1539],{"class":1324},[1097,9589,1542],{"class":1330},[1097,9591,1545],{"class":1324},[1097,9593,9594,9596,9598,9600,9602,9604,9606,9608],{"class":1099,"line":3888},[1097,9595,1552],{"class":1324},[1097,9597,5443],{"class":1330},[1097,9599,5446],{"class":1567},[1097,9601,1571],{"class":1324},[1097,9603,1498],{"class":1324},[1097,9605,5453],{"class":1107},[1097,9607,1498],{"class":1324},[1097,9609,1545],{"class":1324},[1097,9611,9612,9614,9616,9618,9620],{"class":1099,"line":3917},[1097,9613,1561],{"class":1324},[1097,9615,1542],{"class":1330},[1097,9617,5466],{"class":1324},[1097,9619,8686],{"class":1567},[1097,9621,1545],{"class":1324},[1097,9623,9624,9626,9628],{"class":1099,"line":3929},[1097,9625,1585],{"class":1324},[1097,9627,8696],{"class":1330},[1097,9629,1591],{"class":1324},[1097,9631,9632,9634,9636],{"class":1099,"line":3945},[1097,9633,1596],{"class":1324},[1097,9635,1542],{"class":1330},[1097,9637,1545],{"class":1324},[1097,9639,9640,9642,9644,9646,9648],{"class":1099,"line":3959},[1097,9641,1561],{"class":1324},[1097,9643,1542],{"class":1330},[1097,9645,5466],{"class":1324},[1097,9647,5469],{"class":1567},[1097,9649,1545],{"class":1324},[1097,9651,9653,9655,9657,9659,9661,9663,9665,9667],{"class":9652,"line":3966},[1099,1549],[1097,9654,1585],{"class":1324},[1097,9656,5478],{"class":1330},[1097,9658,5481],{"class":1567},[1097,9660,1571],{"class":1324},[1097,9662,1498],{"class":1324},[1097,9664,6924],{"class":1107},[1097,9666,1498],{"class":1324},[1097,9668,1545],{"class":1324},[1097,9670,9672,9674],{"class":9671,"line":3971},[1099,1549],[1097,9673,5497],{"class":1324},[1097,9675,6935],{"class":1330},[1097,9677,9679,9681,9683,9685,9687],{"class":9678,"line":3976},[1099,1549],[1097,9680,6940],{"class":1567},[1097,9682,1571],{"class":1324},[1097,9684,1498],{"class":1324},[1097,9686,6947],{"class":1107},[1097,9688,5554],{"class":1324},[1097,9690,9691,9693,9695,9697,9699],{"class":1099,"line":3982},[1097,9692,5560],{"class":1567},[1097,9694,1571],{"class":1324},[1097,9696,1498],{"class":1324},[1097,9698,6960],{"class":1107},[1097,9700,5554],{"class":1324},[1097,9702,9703],{"class":1099,"line":3999},[1097,9704,6967],{"class":1567},[1097,9706,9707,9709,9711,9713,9715],{"class":1099,"line":4021},[1097,9708,6972],{"class":1567},[1097,9710,1571],{"class":1324},[1097,9712,1498],{"class":1324},[1097,9714,6979],{"class":1107},[1097,9716,5554],{"class":1324},[1097,9718,9719],{"class":1099,"line":4039},[1097,9720,5620],{"class":1324},[1097,9722,9723,9725,9727,9729,9731,9733,9735,9737,9739,9741,9743],{"class":1099,"line":4047},[1097,9724,5626],{"class":1324},[1097,9726,1542],{"class":1330},[1097,9728,5466],{"class":1324},[1097,9730,371],{"class":1567},[1097,9732,1571],{"class":1324},[1097,9734,1498],{"class":1324},[1097,9736,1844],{"class":1324},[1097,9738,7004],{"class":1320},[1097,9740,1456],{"class":1324},[1097,9742,1498],{"class":1324},[1097,9744,1545],{"class":1324},[1097,9746,9747,9749,9751,9753,9755,9757,9759,9761,9763,9765,9767,9769,9771,9773,9775,9777,9779,9781,9783,9785,9787,9789,9791,9793,9795,9797,9799,9801,9803,9805,9807,9809],{"class":1099,"line":4064},[1097,9748,7015],{"class":1324},[1097,9750,1542],{"class":1330},[1097,9752,7020],{"class":1310},[1097,9754,1571],{"class":1324},[1097,9756,1498],{"class":1324},[1097,9758,7027],{"class":1320},[1097,9760,1695],{"class":1324},[1097,9762,7032],{"class":1320},[1097,9764,7035],{"class":1324},[1097,9766,2602],{"class":1320},[1097,9768,1787],{"class":1324},[1097,9770,2182],{"class":1320},[1097,9772,1498],{"class":1324},[1097,9774,7046],{"class":1324},[1097,9776,7049],{"class":1567},[1097,9778,1571],{"class":1324},[1097,9780,7054],{"class":1324},[1097,9782,4483],{"class":1320},[1097,9784,1787],{"class":1324},[1097,9786,1998],{"class":1320},[1097,9788,1456],{"class":1324},[1097,9790,7065],{"class":1107},[1097,9792,5400],{"class":1324},[1097,9794,7070],{"class":1320},[1097,9796,1787],{"class":1324},[1097,9798,6546],{"class":1320},[1097,9800,1456],{"class":1324},[1097,9802,7065],{"class":1107},[1097,9804,5400],{"class":1324},[1097,9806,7083],{"class":1320},[1097,9808,7086],{"class":1324},[1097,9810,1545],{"class":1324},[1097,9812,9813,9815],{"class":1099,"line":4085},[1097,9814,7093],{"class":1324},[1097,9816,7096],{"class":1330},[1097,9818,9819,9821,9823,9825,9827],{"class":1099,"line":4095},[1097,9820,7101],{"class":1567},[1097,9822,1571],{"class":1324},[1097,9824,1498],{"class":1324},[1097,9826,7108],{"class":1107},[1097,9828,5554],{"class":1324},[1097,9830,9831,9833,9835,9837,9839],{"class":1099,"line":4105},[1097,9832,7115],{"class":1567},[1097,9834,1571],{"class":1324},[1097,9836,1498],{"class":1324},[1097,9838,7122],{"class":1107},[1097,9840,5554],{"class":1324},[1097,9842,9843,9845,9847,9849,9851],{"class":1099,"line":4115},[1097,9844,7129],{"class":1567},[1097,9846,1571],{"class":1324},[1097,9848,1498],{"class":1324},[1097,9850,7136],{"class":1107},[1097,9852,5554],{"class":1324},[1097,9854,9855],{"class":1099,"line":4132},[1097,9856,7143],{"class":1324},[1097,9858,9859,9861],{"class":1099,"line":4143},[1097,9860,7148],{"class":1324},[1097,9862,7151],{"class":1330},[1097,9864,9865,9867,9869,9871,9873],{"class":1099,"line":4149},[1097,9866,7156],{"class":1567},[1097,9868,1571],{"class":1324},[1097,9870,1498],{"class":1324},[1097,9872,7122],{"class":1107},[1097,9874,5554],{"class":1324},[1097,9876,9877,9879,9881,9883,9885],{"class":1099,"line":4155},[1097,9878,7169],{"class":1567},[1097,9880,1571],{"class":1324},[1097,9882,1498],{"class":1324},[1097,9884,7136],{"class":1107},[1097,9886,5554],{"class":1324},[1097,9888,9889],{"class":1099,"line":4165},[1097,9890,7182],{"class":1324},[1097,9892,9893,9895,9897],{"class":1099,"line":4175},[1097,9894,7187],{"class":1324},[1097,9896,7190],{"class":1330},[1097,9898,1545],{"class":1324},[1097,9900,9901],{"class":1099,"line":4189},[1097,9902,1389],{"emptyLinePlaceholder":21},[1097,9904,9905,9907,9909,9911,9913,9915,9917,9919,9921],{"class":1099,"line":4204},[1097,9906,7093],{"class":1324},[1097,9908,1542],{"class":1330},[1097,9910,7205],{"class":1310},[1097,9912,1571],{"class":1324},[1097,9914,1498],{"class":1324},[1097,9916,7212],{"class":1120},[1097,9918,7215],{"class":1320},[1097,9920,1498],{"class":1324},[1097,9922,1545],{"class":1324},[1097,9924,9925,9927],{"class":1099,"line":4209},[1097,9926,7148],{"class":1324},[1097,9928,7151],{"class":1330},[1097,9930,9931,9933,9935,9937,9939],{"class":1099,"line":4214},[1097,9932,7230],{"class":1567},[1097,9934,1571],{"class":1324},[1097,9936,1498],{"class":1324},[1097,9938,7237],{"class":1107},[1097,9940,5554],{"class":1324},[1097,9942,9943,9945,9947,9949,9951],{"class":1099,"line":4224},[1097,9944,7156],{"class":1567},[1097,9946,1571],{"class":1324},[1097,9948,1498],{"class":1324},[1097,9950,7122],{"class":1107},[1097,9952,5554],{"class":1324},[1097,9954,9955,9957,9959,9961,9963],{"class":1099,"line":4240},[1097,9956,7169],{"class":1567},[1097,9958,1571],{"class":1324},[1097,9960,1498],{"class":1324},[1097,9962,7136],{"class":1107},[1097,9964,5554],{"class":1324},[1097,9966,9967],{"class":1099,"line":4255},[1097,9968,7182],{"class":1324},[1097,9970,9971,9973,9975,9977,9979,9981,9983,9985,9987,9989,9991,9993,9995],{"class":1099,"line":4261},[1097,9972,7148],{"class":1324},[1097,9974,987],{"class":1330},[1097,9976,7205],{"class":1567},[1097,9978,1571],{"class":1324},[1097,9980,1498],{"class":1324},[1097,9982,7282],{"class":1107},[1097,9984,1498],{"class":1324},[1097,9986,5481],{"class":1567},[1097,9988,1571],{"class":1324},[1097,9990,1498],{"class":1324},[1097,9992,7293],{"class":1107},[1097,9994,1498],{"class":1324},[1097,9996,1545],{"class":1324},[1097,9998,9999],{"class":1099,"line":4267},[1097,10000,7302],{"class":1320},[1097,10002,10003,10005,10007],{"class":1099,"line":4275},[1097,10004,7307],{"class":1324},[1097,10006,987],{"class":1330},[1097,10008,1545],{"class":1324},[1097,10010,10011,10013,10015],{"class":1099,"line":4280},[1097,10012,7187],{"class":1324},[1097,10014,1542],{"class":1330},[1097,10016,1545],{"class":1324},[1097,10018,10019,10021,10023],{"class":1099,"line":4286},[1097,10020,7324],{"class":1324},[1097,10022,1542],{"class":1330},[1097,10024,1545],{"class":1324},[1097,10026,10027,10029,10031],{"class":1099,"line":4306},[1097,10028,7333],{"class":1324},[1097,10030,1542],{"class":1330},[1097,10032,1545],{"class":1324},[1097,10034,10035,10037,10039],{"class":1099,"line":4321},[1097,10036,5523],{"class":1324},[1097,10038,5099],{"class":1330},[1097,10040,1545],{"class":1324},[1097,10042,10043],{"class":1099,"line":4338},[1097,10044,1389],{"emptyLinePlaceholder":21},[1097,10046,10047,10049],{"class":1099,"line":4361},[1097,10048,5497],{"class":1324},[1097,10050,5539],{"class":1330},[1097,10052,10053,10055,10057,10059,10061],{"class":1099,"line":4372},[1097,10054,5545],{"class":1567},[1097,10056,1571],{"class":1324},[1097,10058,1498],{"class":1324},[1097,10060,5210],{"class":1107},[1097,10062,5554],{"class":1324},[1097,10064,10065,10067,10069,10071,10073],{"class":1099,"line":4380},[1097,10066,7372],{"class":1567},[1097,10068,1571],{"class":1324},[1097,10070,1498],{"class":1324},[1097,10072,7379],{"class":1107},[1097,10074,5554],{"class":1324},[1097,10076,10077,10079,10081,10083,10085],{"class":1099,"line":4386},[1097,10078,5575],{"class":1567},[1097,10080,1571],{"class":1324},[1097,10082,1498],{"class":1324},[1097,10084,5582],{"class":1107},[1097,10086,5554],{"class":1324},[1097,10088,10089,10091,10093,10095,10097],{"class":1099,"line":4391},[1097,10090,6972],{"class":1567},[1097,10092,1571],{"class":1324},[1097,10094,1498],{"class":1324},[1097,10096,7404],{"class":1107},[1097,10098,5554],{"class":1324},[1097,10100,10101,10103,10105,10107,10109],{"class":1099,"line":4414},[1097,10102,5605],{"class":1567},[1097,10104,1571],{"class":1324},[1097,10106,1498],{"class":1324},[1097,10108,7417],{"class":1107},[1097,10110,5554],{"class":1324},[1097,10112,10113],{"class":1099,"line":4420},[1097,10114,5620],{"class":1324},[1097,10116,10117,10119],{"class":1099,"line":4440},[1097,10118,5626],{"class":1324},[1097,10120,7430],{"class":1330},[1097,10122,10123,10125,10127,10129,10131],{"class":1099,"line":4446},[1097,10124,7435],{"class":1567},[1097,10126,1571],{"class":1324},[1097,10128,1498],{"class":1324},[1097,10130,6960],{"class":1107},[1097,10132,5554],{"class":1324},[1097,10134,10135,10137,10139,10141,10143],{"class":1099,"line":4492},[1097,10136,7448],{"class":1567},[1097,10138,1571],{"class":1324},[1097,10140,1498],{"class":1324},[1097,10142,5639],{"class":1107},[1097,10144,5554],{"class":1324},[1097,10146,10147,10149,10151,10153,10155],{"class":1099,"line":4508},[1097,10148,7461],{"class":1567},[1097,10150,1571],{"class":1324},[1097,10152,1498],{"class":1324},[1097,10154,7468],{"class":1107},[1097,10156,5554],{"class":1324},[1097,10158,10159,10161,10163,10165,10167],{"class":1099,"line":4541},[1097,10160,7475],{"class":1567},[1097,10162,1571],{"class":1324},[1097,10164,1498],{"class":1324},[1097,10166,7482],{"class":1107},[1097,10168,5554],{"class":1324},[1097,10170,10171],{"class":1099,"line":4555},[1097,10172,7489],{"class":1324},[1097,10174,10175,10177,10179],{"class":1099,"line":4563},[1097,10176,5523],{"class":1324},[1097,10178,5093],{"class":1330},[1097,10180,1545],{"class":1324},[1097,10182,10183,10185,10187],{"class":1099,"line":4569},[1097,10184,5657],{"class":1324},[1097,10186,5478],{"class":1330},[1097,10188,1545],{"class":1324},[1097,10190,10191,10193,10195],{"class":1099,"line":4576},[1097,10192,1596],{"class":1324},[1097,10194,1542],{"class":1330},[1097,10196,1545],{"class":1324},[1097,10198,10199,10201,10203],{"class":1099,"line":4581},[1097,10200,1606],{"class":1324},[1097,10202,5443],{"class":1330},[1097,10204,1545],{"class":1324},[1097,10206,10207,10209,10211],{"class":1099,"line":4599},[1097,10208,1615],{"class":1324},[1097,10210,1542],{"class":1330},[1097,10212,1545],{"class":1324},[987,10214,4642,10215,10218,10219,10221],{},[1047,10216,10217],{},"refreshNuxtData('chats')"," call in the chat page's ",[1047,10220,7591],{}," callback (as shown earlier) ensures the chat list updates automatically when a new title is generated.",[991,10223,10225],{"id":10224},"adding-multi-model-support","Adding multi-model support",[987,10227,10228,10229,10232],{},"One of the benefits of using ",[1041,10230,4611],{"href":1076,"rel":10231},[1045]," is the ability to switch between models seamlessly. This section adds a model selector to the chat.",[1125,10234,10236],{"id":10235},"creating-a-models-composable","Creating a models composable",[987,10238,10239,10240,1334],{},"Define the available models and persist the user's selection using ",[1041,10241,10244],{"href":10242,"rel":10243},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-cookie",[1045],[1047,10245,10246],{},"useCookie",[1297,10248,10249],{},[1088,10250,10253],{"className":1301,"code":10251,"filename":10252,"language":1303,"meta":1093,"style":1093},"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",[1047,10254,10255,10268,10279,10325,10369,10413,10418,10422,10452,10469,10475,10479,10485,10492,10497,10501],{"__ignoreMap":1093},[1097,10256,10257,10259,10261,10264,10266],{"class":1099,"line":1100},[1097,10258,1311],{"class":1310},[1097,10260,5192],{"class":1567},[1097,10262,10263],{"class":1120}," useModels",[1097,10265,1784],{"class":1324},[1097,10267,1400],{"class":1324},[1097,10269,10270,10272,10275,10277],{"class":1099,"line":1117},[1097,10271,2597],{"class":1567},[1097,10273,10274],{"class":1320}," models",[1097,10276,2607],{"class":1324},[1097,10278,1337],{"class":1330},[1097,10280,10281,10284,10286,10288,10290,10292,10294,10296,10298,10300,10302,10304,10306,10308,10311,10313,10315,10321,10323],{"class":1099,"line":1340},[1097,10282,10283],{"class":1324},"    {",[1097,10285,3095],{"class":1330},[1097,10287,1334],{"class":1324},[1097,10289,1411],{"class":1324},[1097,10291,3102],{"class":1107},[1097,10293,1349],{"class":1324},[1097,10295,1695],{"class":1324},[1097,10297,3081],{"class":1330},[1097,10299,1334],{"class":1324},[1097,10301,1411],{"class":1324},[1097,10303,3088],{"class":1107},[1097,10305,1349],{"class":1324},[1097,10307,1695],{"class":1324},[1097,10309,10310],{"class":1330}," icon",[1097,10312,1334],{"class":1324},[1097,10314,1411],{"class":1324},[1097,10316,10317,10320],{"class":1107},[8063,10318],{"class":10319},"shiki-icon-highlight sh9xi","i-simple-icons-openai",[1097,10322,1349],{"class":1324},[1097,10324,3107],{"class":1324},[1097,10326,10327,10329,10331,10333,10335,10337,10339,10341,10343,10345,10347,10349,10351,10353,10355,10357,10359,10365,10367],{"class":1099,"line":1355},[1097,10328,10283],{"class":1324},[1097,10330,3095],{"class":1330},[1097,10332,1334],{"class":1324},[1097,10334,1411],{"class":1324},[1097,10336,3132],{"class":1107},[1097,10338,1349],{"class":1324},[1097,10340,1695],{"class":1324},[1097,10342,3081],{"class":1330},[1097,10344,1334],{"class":1324},[1097,10346,1411],{"class":1324},[1097,10348,3056],{"class":1107},[1097,10350,1349],{"class":1324},[1097,10352,1695],{"class":1324},[1097,10354,10310],{"class":1330},[1097,10356,1334],{"class":1324},[1097,10358,1411],{"class":1324},[1097,10360,10361,10364],{"class":1107},[8063,10362],{"class":10363},"shiki-icon-highlight sNknm","i-simple-icons-anthropic",[1097,10366,1349],{"class":1324},[1097,10368,3107],{"class":1324},[1097,10370,10371,10373,10375,10377,10379,10381,10383,10385,10387,10389,10391,10393,10395,10397,10399,10401,10403,10409,10411],{"class":1099,"line":1367},[1097,10372,10283],{"class":1324},[1097,10374,3095],{"class":1330},[1097,10376,1334],{"class":1324},[1097,10378,1411],{"class":1324},[1097,10380,3162],{"class":1107},[1097,10382,1349],{"class":1324},[1097,10384,1695],{"class":1324},[1097,10386,3081],{"class":1330},[1097,10388,1334],{"class":1324},[1097,10390,1411],{"class":1324},[1097,10392,3149],{"class":1107},[1097,10394,1349],{"class":1324},[1097,10396,1695],{"class":1324},[1097,10398,10310],{"class":1330},[1097,10400,1334],{"class":1324},[1097,10402,1411],{"class":1324},[1097,10404,10405,10408],{"class":1107},[8063,10406],{"class":10407},"shiki-icon-highlight scZL3","i-simple-icons-google",[1097,10410,1349],{"class":1324},[1097,10412,3167],{"class":1324},[1097,10414,10415],{"class":1099,"line":1378},[1097,10416,10417],{"class":1330},"  ]\n",[1097,10419,10420],{"class":1099,"line":1386},[1097,10421,1389],{"emptyLinePlaceholder":21},[1097,10423,10424,10426,10428,10430,10433,10435,10437,10439,10441,10443,10446,10448,10450],{"class":1099,"line":1392},[1097,10425,2597],{"class":1567},[1097,10427,3272],{"class":1320},[1097,10429,2607],{"class":1324},[1097,10431,10432],{"class":1120}," useCookie",[1097,10434,1539],{"class":1324},[1097,10436,3245],{"class":1103},[1097,10438,2650],{"class":1324},[1097,10440,1321],{"class":1330},[1097,10442,1349],{"class":1324},[1097,10444,10445],{"class":1107},"ai-model",[1097,10447,1349],{"class":1324},[1097,10449,1695],{"class":1324},[1097,10451,1400],{"class":1324},[1097,10453,10454,10457,10459,10461,10463,10465,10467],{"class":1099,"line":1403},[1097,10455,10456],{"class":1120},"    default",[1097,10458,1334],{"class":1324},[1097,10460,4978],{"class":1324},[1097,10462,1804],{"class":1567},[1097,10464,1411],{"class":1324},[1097,10466,3056],{"class":1107},[1097,10468,1375],{"class":1324},[1097,10470,10471,10473],{"class":1099,"line":1419},[1097,10472,2398],{"class":1324},[1097,10474,1459],{"class":1330},[1097,10476,10477],{"class":1099,"line":1425},[1097,10478,1389],{"emptyLinePlaceholder":21},[1097,10480,10481,10483],{"class":1099,"line":1430},[1097,10482,2825],{"class":1310},[1097,10484,1400],{"class":1324},[1097,10486,10487,10490],{"class":1099,"line":1453},[1097,10488,10489],{"class":1320},"    models",[1097,10491,1352],{"class":1324},[1097,10493,10494],{"class":1099,"line":1958},[1097,10495,10496],{"class":1320},"    model\n",[1097,10498,10499],{"class":1099,"line":1985},[1097,10500,3603],{"class":1324},[1097,10502,10503],{"class":1099,"line":2031},[1097,10504,5416],{"class":1324},[1125,10506,10508],{"id":10507},"building-the-model-selector","Building the model selector",[987,10510,1622,10511,10516],{},[1041,10512,10513],{"href":740},[1047,10514,10515],{},"USelectMenu"," component that displays the available models:",[1297,10518,10519],{},[1088,10520,10523],{"className":1529,"code":10521,"filename":10522,"language":34,"meta":1093,"style":1093},"\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",[1047,10524,10525,10545,10578,10582,10599,10603,10621,10653,10657,10665,10669,10677,10684,10697,10711,10725,10738,10751,10756],{"__ignoreMap":1093},[1097,10526,10527,10529,10531,10533,10535,10537,10539,10541,10543],{"class":1099,"line":1100},[1097,10528,1539],{"class":1324},[1097,10530,5128],{"class":1330},[1097,10532,5131],{"class":1567},[1097,10534,5134],{"class":1567},[1097,10536,1571],{"class":1324},[1097,10538,1498],{"class":1324},[1097,10540,1303],{"class":1107},[1097,10542,1498],{"class":1324},[1097,10544,1545],{"class":1324},[1097,10546,10547,10549,10552,10554,10557,10559,10561,10563,10565,10567,10570,10572,10574,10576],{"class":1099,"line":1117},[1097,10548,3046],{"class":1567},[1097,10550,10551],{"class":1320}," model ",[1097,10553,1571],{"class":1324},[1097,10555,10556],{"class":1120}," defineModel",[1097,10558,1539],{"class":1324},[1097,10560,3245],{"class":1103},[1097,10562,2650],{"class":1324},[1097,10564,1321],{"class":1320},[1097,10566,1844],{"class":1324},[1097,10568,10569],{"class":1330}," required",[1097,10571,1334],{"class":1324},[1097,10573,4184],{"class":4183},[1097,10575,1711],{"class":1324},[1097,10577,1459],{"class":1320},[1097,10579,10580],{"class":1099,"line":1340},[1097,10581,1389],{"emptyLinePlaceholder":21},[1097,10583,10584,10586,10588,10591,10593,10595,10597],{"class":1099,"line":1355},[1097,10585,3046],{"class":1567},[1097,10587,1689],{"class":1324},[1097,10589,10590],{"class":1320}," models ",[1097,10592,1456],{"class":1324},[1097,10594,2607],{"class":1324},[1097,10596,10263],{"class":1120},[1097,10598,2653],{"class":1320},[1097,10600,10601],{"class":1099,"line":1367},[1097,10602,1389],{"emptyLinePlaceholder":21},[1097,10604,10605,10607,10610,10612,10614,10616,10618],{"class":1099,"line":1378},[1097,10606,3046],{"class":1567},[1097,10608,10609],{"class":1320}," selectedModel ",[1097,10611,1571],{"class":1324},[1097,10613,8005],{"class":1120},[1097,10615,1321],{"class":1320},[1097,10617,1784],{"class":1324},[1097,10619,10620],{"class":1567}," =>\n",[1097,10622,10623,10626,10628,10631,10633,10635,10637,10639,10641,10644,10646,10648,10650],{"class":1099,"line":1386},[1097,10624,10625],{"class":1320},"  models",[1097,10627,1787],{"class":1324},[1097,10629,10630],{"class":1120},"find",[1097,10632,1321],{"class":1320},[1097,10634,3346],{"class":1921},[1097,10636,1804],{"class":1567},[1097,10638,3351],{"class":1320},[1097,10640,1787],{"class":1324},[1097,10642,10643],{"class":1320},"value ",[1097,10645,8088],{"class":1324},[1097,10647,3272],{"class":1320},[1097,10649,1787],{"class":1324},[1097,10651,10652],{"class":1320},"value)\n",[1097,10654,10655],{"class":1099,"line":1392},[1097,10656,1459],{"class":1320},[1097,10658,10659,10661,10663],{"class":1099,"line":1403},[1097,10660,1615],{"class":1324},[1097,10662,5128],{"class":1330},[1097,10664,1545],{"class":1324},[1097,10666,10667],{"class":1099,"line":1419},[1097,10668,1389],{"emptyLinePlaceholder":21},[1097,10670,10671,10673,10675],{"class":1099,"line":1425},[1097,10672,1539],{"class":1324},[1097,10674,1542],{"class":1330},[1097,10676,1545],{"class":1324},[1097,10678,10679,10681],{"class":1099,"line":1430},[1097,10680,1552],{"class":1324},[1097,10682,10683],{"class":1330},"USelectMenu\n",[1097,10685,10686,10689,10691,10693,10695],{"class":1099,"line":1453},[1097,10687,10688],{"class":1567},"    v-model",[1097,10690,1571],{"class":1324},[1097,10692,1498],{"class":1324},[1097,10694,4655],{"class":1107},[1097,10696,5554],{"class":1324},[1097,10698,10699,10702,10704,10706,10709],{"class":1099,"line":1958},[1097,10700,10701],{"class":1567},"    :items",[1097,10703,1571],{"class":1324},[1097,10705,1498],{"class":1324},[1097,10707,10708],{"class":1107},"models",[1097,10710,5554],{"class":1324},[1097,10712,10713,10716,10718,10720,10723],{"class":1099,"line":1985},[1097,10714,10715],{"class":1567},"    :icon",[1097,10717,1571],{"class":1324},[1097,10719,1498],{"class":1324},[1097,10721,10722],{"class":1107},"selectedModel?.icon",[1097,10724,5554],{"class":1324},[1097,10726,10727,10730,10732,10734,10736],{"class":1099,"line":2031},[1097,10728,10729],{"class":1567},"    variant",[1097,10731,1571],{"class":1324},[1097,10733,1498],{"class":1324},[1097,10735,8293],{"class":1107},[1097,10737,5554],{"class":1324},[1097,10739,10740,10743,10745,10747,10749],{"class":1099,"line":2098},[1097,10741,10742],{"class":1567},"    value-key",[1097,10744,1571],{"class":1324},[1097,10746,1498],{"class":1324},[1097,10748,3331],{"class":1107},[1097,10750,5554],{"class":1324},[1097,10752,10753],{"class":1099,"line":2168},[1097,10754,10755],{"class":1324},"  \u002F>\n",[1097,10757,10758,10760,10762],{"class":1099,"line":2208},[1097,10759,1615],{"class":1324},[1097,10761,1542],{"class":1330},[1097,10763,1545],{"class":1324},[1125,10765,10767],{"id":10766},"integrating-with-the-chat","Integrating with the chat",[987,10769,10770],{},"Update the chat page to include the model selector and pass the selected model to the server:",[1297,10772,10773],{},[1674,10774,10775],{},[1088,10776,10779],{"className":1529,"code":10777,"filename":6119,"highlights":10778,"language":34,"meta":1093,"style":1093},"\u003Cscript setup lang=\"ts\">\nimport { DefaultChatTransport, isReasoningUIPart, isTextUIPart } from 'ai'\nimport { Chat } from '@ai-sdk\u002Fvue'\nimport { isPartStreaming } from '@nuxt\u002Fui\u002Futils\u002Fai'\n\nconst route = useRoute()\nconst toast = useToast()\nconst { model } = useModels()\n\nconst { data: chatData } = await useFetch(`\u002Fapi\u002Fchats\u002F${route.params.id}`)\n\nif (!chatData.value) {\n  throw createError({ statusCode: 404, statusMessage: 'Chat not found', fatal: true })\n}\n\nconst input = ref('')\n\nconst chat = new Chat({\n  id: chatData.value.id,\n  messages: chatData.value.messages,\n  transport: new DefaultChatTransport({\n    api: `\u002Fapi\u002Fchats\u002F${chatData.value.id}`,\n    body: {\n      model: model.value \u002F\u002F Pass the selected model\n    }\n  }),\n  onData(dataPart) {\n    if (dataPart.type === 'data-chat-title') {\n      refreshNuxtData('chats')\n    }\n  },\n  onError(error) {\n    toast.add({\n      title: 'Error',\n      description: error.message,\n      color: 'error'\n    })\n  }\n})\n\nfunction handleSubmit(e: Event) {\n  e.preventDefault()\n  if (input.value.trim()) {\n    chat.sendMessage({ text: input.value })\n    input.value = ''\n  }\n}\n\nonMounted(() => {\n  if (chatData.value?.messages.length === 1) {\n    chat.regenerate()\n  }\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CUDashboardPanel :ui=\"{ body: 'p-0 sm:p-0' }\">\n    \u003Ctemplate #header>\n      \u003CChatsHistory \u002F>\n    \u003C\u002Ftemplate>\n    \u003Ctemplate #body>\n      \u003CUContainer class=\"min-h-dvh flex flex-col py-4 sm:py-6\">\n        \u003CUChatMessages\n          :messages=\"chat.messages\"\n          :status=\"chat.status\"\n          should-auto-scroll\n          class=\"flex-1\"\n        >\n          \u003Ctemplate #content=\"{ message }\">\n            \u003Ctemplate v-for=\"(part, index) in message.parts\" :key=\"`${message.id}-${part.type}-${index}`\">\n              \u003CUChatReasoning\n                v-if=\"isReasoningUIPart(part)\"\n                :text=\"part.text\"\n                :streaming=\"isPartStreaming(part)\"\n              >\n                \u003CChatComark\n                  :markdown=\"part.text\"\n                  :streaming=\"isPartStreaming(part)\"\n                \u002F>\n              \u003C\u002FUChatReasoning>\n\n              \u003Ctemplate v-else-if=\"isTextUIPart(part)\">\n                \u003CChatComark\n                  v-if=\"message.role === 'assistant'\"\n                  :markdown=\"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=\"chat.error\"\n          variant=\"subtle\"\n          class=\"sticky bottom-0\"\n          @submit=\"handleSubmit\"\n        >\n          \u003Ctemplate #footer>\n            \u003CModelSelect v-model=\"model\" \u002F>\n          \u003C\u002Ftemplate>\n\n          \u003CUChatPromptSubmit\n            :status=\"chat.status\"\n            color=\"neutral\"\n            @stop=\"chat.stop()\"\n            @reload=\"chat.regenerate()\"\n          \u002F>\n        \u003C\u002FUChatPrompt>\n      \u003C\u002FUContainer>\n    \u003C\u002Ftemplate>\n  \u003C\u002FUDashboardPanel>\n\u003C\u002Ftemplate>\n",[1392,2313,2345,2361,4321,4338,4361],[1047,10780,10781,10801,10827,10845,10863,10867,10879,10891,10908,10912,10954,10958,10974,11014,11018,11022,11038,11042,11058,11076,11094,11108,11134,11142,11158,11163,11172,11184,11208,11222,11226,11230,11242,11254,11268,11282,11294,11300,11304,11310,11314,11332,11342,11362,11388,11400,11404,11408,11412,11424,11452,11462,11466,11472,11480,11484,11492,11510,11522,11530,11538,11550,11568,11574,11586,11598,11602,11614,11618,11642,11708,11714,11726,11738,11750,11754,11760,11772,11784,11788,11796,11800,11820,11826,11838,11850,11862,11866,11894,11898,11906,11914,11922,11930,11939,11944,11951,11963,11975,11987,11999,12011,12015,12028,12048,12056,12060,12066,12078,12090,12102,12114,12118,12126,12135,12144,12153],{"__ignoreMap":1093},[1097,10782,10783,10785,10787,10789,10791,10793,10795,10797,10799],{"class":1099,"line":1100},[1097,10784,1539],{"class":1324},[1097,10786,5128],{"class":1330},[1097,10788,5131],{"class":1567},[1097,10790,5134],{"class":1567},[1097,10792,1571],{"class":1324},[1097,10794,1498],{"class":1324},[1097,10796,1303],{"class":1107},[1097,10798,1498],{"class":1324},[1097,10800,1545],{"class":1324},[1097,10802,10803,10805,10807,10809,10811,10813,10815,10817,10819,10821,10823,10825],{"class":1099,"line":1117},[1097,10804,1686],{"class":1310},[1097,10806,1689],{"class":1324},[1097,10808,6152],{"class":1320},[1097,10810,1695],{"class":1324},[1097,10812,6157],{"class":1320},[1097,10814,1695],{"class":1324},[1097,10816,6162],{"class":1320},[1097,10818,1711],{"class":1324},[1097,10820,1714],{"class":1310},[1097,10822,1411],{"class":1324},[1097,10824,2518],{"class":1107},[1097,10826,1375],{"class":1324},[1097,10828,10829,10831,10833,10835,10837,10839,10841,10843],{"class":1099,"line":1340},[1097,10830,1686],{"class":1310},[1097,10832,1689],{"class":1324},[1097,10834,6182],{"class":1320},[1097,10836,1711],{"class":1324},[1097,10838,1714],{"class":1310},[1097,10840,1411],{"class":1324},[1097,10842,6191],{"class":1107},[1097,10844,1375],{"class":1324},[1097,10846,10847,10849,10851,10853,10855,10857,10859,10861],{"class":1099,"line":1355},[1097,10848,1686],{"class":1310},[1097,10850,1689],{"class":1324},[1097,10852,6203],{"class":1320},[1097,10854,1711],{"class":1324},[1097,10856,1714],{"class":1310},[1097,10858,1411],{"class":1324},[1097,10860,6212],{"class":1107},[1097,10862,1375],{"class":1324},[1097,10864,10865],{"class":1099,"line":1367},[1097,10866,1389],{"emptyLinePlaceholder":21},[1097,10868,10869,10871,10873,10875,10877],{"class":1099,"line":1378},[1097,10870,3046],{"class":1567},[1097,10872,6225],{"class":1320},[1097,10874,1571],{"class":1324},[1097,10876,6230],{"class":1120},[1097,10878,2653],{"class":1320},[1097,10880,10881,10883,10885,10887,10889],{"class":1099,"line":1386},[1097,10882,3046],{"class":1567},[1097,10884,6239],{"class":1320},[1097,10886,1571],{"class":1324},[1097,10888,6244],{"class":1120},[1097,10890,2653],{"class":1320},[1097,10892,10894,10896,10898,10900,10902,10904,10906],{"class":10893,"line":1392},[1099,1549],[1097,10895,3046],{"class":1567},[1097,10897,1689],{"class":1324},[1097,10899,10551],{"class":1320},[1097,10901,1456],{"class":1324},[1097,10903,2607],{"class":1324},[1097,10905,10263],{"class":1120},[1097,10907,2653],{"class":1320},[1097,10909,10910],{"class":1099,"line":1403},[1097,10911,1389],{"emptyLinePlaceholder":21},[1097,10913,10914,10916,10918,10920,10922,10924,10926,10928,10930,10932,10934,10936,10938,10940,10942,10944,10946,10948,10950,10952],{"class":1099,"line":1419},[1097,10915,3046],{"class":1567},[1097,10917,1689],{"class":1324},[1097,10919,6264],{"class":1330},[1097,10921,1334],{"class":1324},[1097,10923,6269],{"class":1320},[1097,10925,1456],{"class":1324},[1097,10927,2607],{"class":1324},[1097,10929,2610],{"class":1310},[1097,10931,6278],{"class":1120},[1097,10933,1321],{"class":1320},[1097,10935,3691],{"class":1324},[1097,10937,6285],{"class":1107},[1097,10939,5400],{"class":1324},[1097,10941,6290],{"class":1320},[1097,10943,1787],{"class":1324},[1097,10945,6295],{"class":1320},[1097,10947,1787],{"class":1324},[1097,10949,1998],{"class":1320},[1097,10951,5409],{"class":1324},[1097,10953,1459],{"class":1320},[1097,10955,10956],{"class":1099,"line":1425},[1097,10957,1389],{"emptyLinePlaceholder":21},[1097,10959,10960,10962,10964,10966,10968,10970,10972],{"class":1099,"line":1430},[1097,10961,6312],{"class":1310},[1097,10963,1930],{"class":1320},[1097,10965,3551],{"class":1324},[1097,10967,6319],{"class":1320},[1097,10969,1787],{"class":1324},[1097,10971,6324],{"class":1320},[1097,10973,1325],{"class":1324},[1097,10975,10976,10978,10980,10982,10984,10986,10988,10990,10992,10994,10996,10998,11000,11002,11004,11006,11008,11010,11012],{"class":1099,"line":1453},[1097,10977,6331],{"class":1310},[1097,10979,2884],{"class":1120},[1097,10981,1321],{"class":1330},[1097,10983,1844],{"class":1324},[1097,10985,3573],{"class":1330},[1097,10987,1334],{"class":1324},[1097,10989,3579],{"class":3578},[1097,10991,1695],{"class":1324},[1097,10993,3584],{"class":1330},[1097,10995,1334],{"class":1324},[1097,10997,1411],{"class":1324},[1097,10999,3591],{"class":1107},[1097,11001,1349],{"class":1324},[1097,11003,1695],{"class":1324},[1097,11005,6360],{"class":1330},[1097,11007,1334],{"class":1324},[1097,11009,4184],{"class":4183},[1097,11011,1711],{"class":1324},[1097,11013,1459],{"class":1330},[1097,11015,11016],{"class":1099,"line":1958},[1097,11017,5416],{"class":1324},[1097,11019,11020],{"class":1099,"line":1985},[1097,11021,1389],{"emptyLinePlaceholder":21},[1097,11023,11024,11026,11028,11030,11032,11034,11036],{"class":1099,"line":2031},[1097,11025,3046],{"class":1567},[1097,11027,5151],{"class":1320},[1097,11029,1571],{"class":1324},[1097,11031,5156],{"class":1120},[1097,11033,1321],{"class":1320},[1097,11035,5161],{"class":1324},[1097,11037,1459],{"class":1320},[1097,11039,11040],{"class":1099,"line":2098},[1097,11041,1389],{"emptyLinePlaceholder":21},[1097,11043,11044,11046,11048,11050,11052,11054,11056],{"class":1099,"line":2168},[1097,11045,3046],{"class":1567},[1097,11047,6409],{"class":1320},[1097,11049,1571],{"class":1324},[1097,11051,1881],{"class":1324},[1097,11053,6182],{"class":1120},[1097,11055,1321],{"class":1320},[1097,11057,1325],{"class":1324},[1097,11059,11060,11062,11064,11066,11068,11070,11072,11074],{"class":1099,"line":2208},[1097,11061,1777],{"class":1330},[1097,11063,1334],{"class":1324},[1097,11065,6429],{"class":1320},[1097,11067,1787],{"class":1324},[1097,11069,3331],{"class":1320},[1097,11071,1787],{"class":1324},[1097,11073,1998],{"class":1320},[1097,11075,1352],{"class":1324},[1097,11077,11078,11080,11082,11084,11086,11088,11090,11092],{"class":1099,"line":2259},[1097,11079,1937],{"class":1330},[1097,11081,1334],{"class":1324},[1097,11083,6429],{"class":1320},[1097,11085,1787],{"class":1324},[1097,11087,3331],{"class":1320},[1097,11089,1787],{"class":1324},[1097,11091,1976],{"class":1320},[1097,11093,1352],{"class":1324},[1097,11095,11096,11098,11100,11102,11104,11106],{"class":1099,"line":2272},[1097,11097,6464],{"class":1330},[1097,11099,1334],{"class":1324},[1097,11101,1881],{"class":1324},[1097,11103,6152],{"class":1120},[1097,11105,1321],{"class":1320},[1097,11107,1325],{"class":1324},[1097,11109,11110,11112,11114,11116,11118,11120,11122,11124,11126,11128,11130,11132],{"class":1099,"line":2302},[1097,11111,6480],{"class":1330},[1097,11113,1334],{"class":1324},[1097,11115,3685],{"class":1324},[1097,11117,6285],{"class":1107},[1097,11119,5400],{"class":1324},[1097,11121,6319],{"class":1320},[1097,11123,1787],{"class":1324},[1097,11125,3331],{"class":1320},[1097,11127,1787],{"class":1324},[1097,11129,1998],{"class":1320},[1097,11131,5409],{"class":1324},[1097,11133,1352],{"class":1324},[1097,11135,11136,11138,11140],{"class":1099,"line":2308},[1097,11137,5298],{"class":1330},[1097,11139,1334],{"class":1324},[1097,11141,1400],{"class":1324},[1097,11143,11145,11147,11149,11151,11153,11155],{"class":11144,"line":2313},[1099,1549],[1097,11146,3668],{"class":1330},[1097,11148,1334],{"class":1324},[1097,11150,3272],{"class":1320},[1097,11152,1787],{"class":1324},[1097,11154,10643],{"class":1320},[1097,11156,11157],{"class":2675},"\u002F\u002F Pass the selected model\n",[1097,11159,11161],{"class":11160,"line":2345},[1099,1549],[1097,11162,4566],{"class":1324},[1097,11164,11166,11168,11170],{"class":11165,"line":2361},[1099,1549],[1097,11167,2398],{"class":1324},[1097,11169,1861],{"class":1320},[1097,11171,1352],{"class":1324},[1097,11173,11174,11176,11178,11180,11182],{"class":1099,"line":2379},[1097,11175,6516],{"class":1330},[1097,11177,1321],{"class":1324},[1097,11179,6521],{"class":1921},[1097,11181,1861],{"class":1324},[1097,11183,1400],{"class":1324},[1097,11185,11186,11188,11190,11192,11194,11196,11198,11200,11202,11204,11206],{"class":1099,"line":2395},[1097,11187,6537],{"class":1310},[1097,11189,1930],{"class":1330},[1097,11191,6521],{"class":1320},[1097,11193,1787],{"class":1324},[1097,11195,6546],{"class":1320},[1097,11197,3358],{"class":1324},[1097,11199,1411],{"class":1324},[1097,11201,4331],{"class":1107},[1097,11203,1349],{"class":1324},[1097,11205,3556],{"class":1330},[1097,11207,1325],{"class":1324},[1097,11209,11210,11212,11214,11216,11218,11220],{"class":1099,"line":2403},[1097,11211,6564],{"class":1120},[1097,11213,1321],{"class":1330},[1097,11215,1349],{"class":1324},[1097,11217,1766],{"class":1107},[1097,11219,1349],{"class":1324},[1097,11221,1459],{"class":1330},[1097,11223,11224],{"class":1099,"line":3383},[1097,11225,4566],{"class":1324},[1097,11227,11228],{"class":1099,"line":3400},[1097,11229,1422],{"class":1324},[1097,11231,11232,11234,11236,11238,11240],{"class":1099,"line":3432},[1097,11233,6590],{"class":1330},[1097,11235,1321],{"class":1324},[1097,11237,6595],{"class":1921},[1097,11239,1861],{"class":1324},[1097,11241,1400],{"class":1324},[1097,11243,11244,11246,11248,11250,11252],{"class":1099,"line":3445},[1097,11245,6605],{"class":1320},[1097,11247,1787],{"class":1324},[1097,11249,6610],{"class":1120},[1097,11251,1321],{"class":1330},[1097,11253,1325],{"class":1324},[1097,11255,11256,11258,11260,11262,11264,11266],{"class":1099,"line":3450},[1097,11257,6620],{"class":1330},[1097,11259,1334],{"class":1324},[1097,11261,1411],{"class":1324},[1097,11263,497],{"class":1107},[1097,11265,1349],{"class":1324},[1097,11267,1352],{"class":1324},[1097,11269,11270,11272,11274,11276,11278,11280],{"class":1099,"line":3456},[1097,11271,6636],{"class":1330},[1097,11273,1334],{"class":1324},[1097,11275,6641],{"class":1320},[1097,11277,1787],{"class":1324},[1097,11279,4483],{"class":1320},[1097,11281,1352],{"class":1324},[1097,11283,11284,11286,11288,11290,11292],{"class":1099,"line":3487},[1097,11285,6653],{"class":1330},[1097,11287,1334],{"class":1324},[1097,11289,1411],{"class":1324},[1097,11291,6595],{"class":1107},[1097,11293,1375],{"class":1324},[1097,11295,11296,11298],{"class":1099,"line":3531},[1097,11297,3386],{"class":1324},[1097,11299,1459],{"class":1330},[1097,11301,11302],{"class":1099,"line":3538},[1097,11303,3603],{"class":1324},[1097,11305,11306,11308],{"class":1099,"line":3543},[1097,11307,1456],{"class":1324},[1097,11309,1459],{"class":1320},[1097,11311,11312],{"class":1099,"line":3561},[1097,11313,1389],{"emptyLinePlaceholder":21},[1097,11315,11316,11318,11320,11322,11324,11326,11328,11330],{"class":1099,"line":3600},[1097,11317,6689],{"class":1567},[1097,11319,6692],{"class":1120},[1097,11321,1321],{"class":1324},[1097,11323,6697],{"class":1921},[1097,11325,1334],{"class":1324},[1097,11327,6702],{"class":1103},[1097,11329,1861],{"class":1324},[1097,11331,1400],{"class":1324},[1097,11333,11334,11336,11338,11340],{"class":1099,"line":3606},[1097,11335,6711],{"class":1320},[1097,11337,1787],{"class":1324},[1097,11339,6716],{"class":1120},[1097,11341,2653],{"class":1330},[1097,11343,11344,11346,11348,11350,11352,11354,11356,11358,11360],{"class":1099,"line":3611},[1097,11345,3546],{"class":1310},[1097,11347,1930],{"class":1330},[1097,11349,5210],{"class":1320},[1097,11351,1787],{"class":1324},[1097,11353,3331],{"class":1320},[1097,11355,1787],{"class":1324},[1097,11357,5219],{"class":1120},[1097,11359,5222],{"class":1330},[1097,11361,1325],{"class":1324},[1097,11363,11364,11366,11368,11370,11372,11374,11376,11378,11380,11382,11384,11386],{"class":1099,"line":3617},[1097,11365,6743],{"class":1320},[1097,11367,1787],{"class":1324},[1097,11369,6748],{"class":1120},[1097,11371,1321],{"class":1330},[1097,11373,1844],{"class":1324},[1097,11375,1698],{"class":1330},[1097,11377,1334],{"class":1324},[1097,11379,5354],{"class":1320},[1097,11381,1787],{"class":1324},[1097,11383,3331],{"class":1320},[1097,11385,1711],{"class":1324},[1097,11387,1459],{"class":1330},[1097,11389,11390,11392,11394,11396,11398],{"class":1099,"line":3637},[1097,11391,6771],{"class":1320},[1097,11393,1787],{"class":1324},[1097,11395,3331],{"class":1320},[1097,11397,2607],{"class":1324},[1097,11399,6780],{"class":1324},[1097,11401,11402],{"class":1099,"line":3665},[1097,11403,3603],{"class":1324},[1097,11405,11406],{"class":1099,"line":3677},[1097,11407,5416],{"class":1324},[1097,11409,11410],{"class":1099,"line":3696},[1097,11411,1389],{"emptyLinePlaceholder":21},[1097,11413,11414,11416,11418,11420,11422],{"class":1099,"line":3724},[1097,11415,6802],{"class":1120},[1097,11417,1321],{"class":1320},[1097,11419,1784],{"class":1324},[1097,11421,1804],{"class":1567},[1097,11423,1400],{"class":1324},[1097,11425,11426,11428,11430,11432,11434,11436,11438,11440,11442,11444,11446,11448,11450],{"class":1099,"line":3731},[1097,11427,3546],{"class":1310},[1097,11429,1930],{"class":1330},[1097,11431,6319],{"class":1320},[1097,11433,1787],{"class":1324},[1097,11435,3331],{"class":1320},[1097,11437,3857],{"class":1324},[1097,11439,1976],{"class":1320},[1097,11441,1787],{"class":1324},[1097,11443,3836],{"class":1320},[1097,11445,3358],{"class":1324},[1097,11447,3842],{"class":3578},[1097,11449,3556],{"class":1330},[1097,11451,1325],{"class":1324},[1097,11453,11454,11456,11458,11460],{"class":1099,"line":3736},[1097,11455,6743],{"class":1320},[1097,11457,1787],{"class":1324},[1097,11459,6847],{"class":1120},[1097,11461,2653],{"class":1330},[1097,11463,11464],{"class":1099,"line":3802},[1097,11465,3603],{"class":1324},[1097,11467,11468,11470],{"class":1099,"line":3807},[1097,11469,1456],{"class":1324},[1097,11471,1459],{"class":1320},[1097,11473,11474,11476,11478],{"class":1099,"line":3812},[1097,11475,1615],{"class":1324},[1097,11477,5128],{"class":1330},[1097,11479,1545],{"class":1324},[1097,11481,11482],{"class":1099,"line":3818},[1097,11483,1389],{"emptyLinePlaceholder":21},[1097,11485,11486,11488,11490],{"class":1099,"line":3847},[1097,11487,1539],{"class":1324},[1097,11489,1542],{"class":1330},[1097,11491,1545],{"class":1324},[1097,11493,11494,11496,11498,11500,11502,11504,11506,11508],{"class":1099,"line":3888},[1097,11495,1552],{"class":1324},[1097,11497,5443],{"class":1330},[1097,11499,5446],{"class":1567},[1097,11501,1571],{"class":1324},[1097,11503,1498],{"class":1324},[1097,11505,5453],{"class":1107},[1097,11507,1498],{"class":1324},[1097,11509,1545],{"class":1324},[1097,11511,11512,11514,11516,11518,11520],{"class":1099,"line":3917},[1097,11513,1561],{"class":1324},[1097,11515,1542],{"class":1330},[1097,11517,5466],{"class":1324},[1097,11519,8686],{"class":1567},[1097,11521,1545],{"class":1324},[1097,11523,11524,11526,11528],{"class":1099,"line":3929},[1097,11525,1585],{"class":1324},[1097,11527,8696],{"class":1330},[1097,11529,1591],{"class":1324},[1097,11531,11532,11534,11536],{"class":1099,"line":3945},[1097,11533,1596],{"class":1324},[1097,11535,1542],{"class":1330},[1097,11537,1545],{"class":1324},[1097,11539,11540,11542,11544,11546,11548],{"class":1099,"line":3959},[1097,11541,1561],{"class":1324},[1097,11543,1542],{"class":1330},[1097,11545,5466],{"class":1324},[1097,11547,5469],{"class":1567},[1097,11549,1545],{"class":1324},[1097,11551,11552,11554,11556,11558,11560,11562,11564,11566],{"class":1099,"line":3966},[1097,11553,1585],{"class":1324},[1097,11555,5478],{"class":1330},[1097,11557,5481],{"class":1567},[1097,11559,1571],{"class":1324},[1097,11561,1498],{"class":1324},[1097,11563,6924],{"class":1107},[1097,11565,1498],{"class":1324},[1097,11567,1545],{"class":1324},[1097,11569,11570,11572],{"class":1099,"line":3971},[1097,11571,5497],{"class":1324},[1097,11573,6935],{"class":1330},[1097,11575,11576,11578,11580,11582,11584],{"class":1099,"line":3976},[1097,11577,6940],{"class":1567},[1097,11579,1571],{"class":1324},[1097,11581,1498],{"class":1324},[1097,11583,6947],{"class":1107},[1097,11585,5554],{"class":1324},[1097,11587,11588,11590,11592,11594,11596],{"class":1099,"line":3982},[1097,11589,5560],{"class":1567},[1097,11591,1571],{"class":1324},[1097,11593,1498],{"class":1324},[1097,11595,6960],{"class":1107},[1097,11597,5554],{"class":1324},[1097,11599,11600],{"class":1099,"line":3999},[1097,11601,6967],{"class":1567},[1097,11603,11604,11606,11608,11610,11612],{"class":1099,"line":4021},[1097,11605,6972],{"class":1567},[1097,11607,1571],{"class":1324},[1097,11609,1498],{"class":1324},[1097,11611,6979],{"class":1107},[1097,11613,5554],{"class":1324},[1097,11615,11616],{"class":1099,"line":4039},[1097,11617,5620],{"class":1324},[1097,11619,11620,11622,11624,11626,11628,11630,11632,11634,11636,11638,11640],{"class":1099,"line":4047},[1097,11621,5626],{"class":1324},[1097,11623,1542],{"class":1330},[1097,11625,5466],{"class":1324},[1097,11627,371],{"class":1567},[1097,11629,1571],{"class":1324},[1097,11631,1498],{"class":1324},[1097,11633,1844],{"class":1324},[1097,11635,7004],{"class":1320},[1097,11637,1456],{"class":1324},[1097,11639,1498],{"class":1324},[1097,11641,1545],{"class":1324},[1097,11643,11644,11646,11648,11650,11652,11654,11656,11658,11660,11662,11664,11666,11668,11670,11672,11674,11676,11678,11680,11682,11684,11686,11688,11690,11692,11694,11696,11698,11700,11702,11704,11706],{"class":1099,"line":4064},[1097,11645,7015],{"class":1324},[1097,11647,1542],{"class":1330},[1097,11649,7020],{"class":1310},[1097,11651,1571],{"class":1324},[1097,11653,1498],{"class":1324},[1097,11655,7027],{"class":1320},[1097,11657,1695],{"class":1324},[1097,11659,7032],{"class":1320},[1097,11661,7035],{"class":1324},[1097,11663,2602],{"class":1320},[1097,11665,1787],{"class":1324},[1097,11667,2182],{"class":1320},[1097,11669,1498],{"class":1324},[1097,11671,7046],{"class":1324},[1097,11673,7049],{"class":1567},[1097,11675,1571],{"class":1324},[1097,11677,7054],{"class":1324},[1097,11679,4483],{"class":1320},[1097,11681,1787],{"class":1324},[1097,11683,1998],{"class":1320},[1097,11685,1456],{"class":1324},[1097,11687,7065],{"class":1107},[1097,11689,5400],{"class":1324},[1097,11691,7070],{"class":1320},[1097,11693,1787],{"class":1324},[1097,11695,6546],{"class":1320},[1097,11697,1456],{"class":1324},[1097,11699,7065],{"class":1107},[1097,11701,5400],{"class":1324},[1097,11703,7083],{"class":1320},[1097,11705,7086],{"class":1324},[1097,11707,1545],{"class":1324},[1097,11709,11710,11712],{"class":1099,"line":4085},[1097,11711,7093],{"class":1324},[1097,11713,7096],{"class":1330},[1097,11715,11716,11718,11720,11722,11724],{"class":1099,"line":4095},[1097,11717,7101],{"class":1567},[1097,11719,1571],{"class":1324},[1097,11721,1498],{"class":1324},[1097,11723,7108],{"class":1107},[1097,11725,5554],{"class":1324},[1097,11727,11728,11730,11732,11734,11736],{"class":1099,"line":4105},[1097,11729,7115],{"class":1567},[1097,11731,1571],{"class":1324},[1097,11733,1498],{"class":1324},[1097,11735,7122],{"class":1107},[1097,11737,5554],{"class":1324},[1097,11739,11740,11742,11744,11746,11748],{"class":1099,"line":4115},[1097,11741,7129],{"class":1567},[1097,11743,1571],{"class":1324},[1097,11745,1498],{"class":1324},[1097,11747,7136],{"class":1107},[1097,11749,5554],{"class":1324},[1097,11751,11752],{"class":1099,"line":4132},[1097,11753,7143],{"class":1324},[1097,11755,11756,11758],{"class":1099,"line":4143},[1097,11757,7148],{"class":1324},[1097,11759,7151],{"class":1330},[1097,11761,11762,11764,11766,11768,11770],{"class":1099,"line":4149},[1097,11763,7156],{"class":1567},[1097,11765,1571],{"class":1324},[1097,11767,1498],{"class":1324},[1097,11769,7122],{"class":1107},[1097,11771,5554],{"class":1324},[1097,11773,11774,11776,11778,11780,11782],{"class":1099,"line":4155},[1097,11775,7169],{"class":1567},[1097,11777,1571],{"class":1324},[1097,11779,1498],{"class":1324},[1097,11781,7136],{"class":1107},[1097,11783,5554],{"class":1324},[1097,11785,11786],{"class":1099,"line":4165},[1097,11787,7182],{"class":1324},[1097,11789,11790,11792,11794],{"class":1099,"line":4175},[1097,11791,7187],{"class":1324},[1097,11793,7190],{"class":1330},[1097,11795,1545],{"class":1324},[1097,11797,11798],{"class":1099,"line":4189},[1097,11799,1389],{"emptyLinePlaceholder":21},[1097,11801,11802,11804,11806,11808,11810,11812,11814,11816,11818],{"class":1099,"line":4204},[1097,11803,7093],{"class":1324},[1097,11805,1542],{"class":1330},[1097,11807,7205],{"class":1310},[1097,11809,1571],{"class":1324},[1097,11811,1498],{"class":1324},[1097,11813,7212],{"class":1120},[1097,11815,7215],{"class":1320},[1097,11817,1498],{"class":1324},[1097,11819,1545],{"class":1324},[1097,11821,11822,11824],{"class":1099,"line":4209},[1097,11823,7148],{"class":1324},[1097,11825,7151],{"class":1330},[1097,11827,11828,11830,11832,11834,11836],{"class":1099,"line":4214},[1097,11829,7230],{"class":1567},[1097,11831,1571],{"class":1324},[1097,11833,1498],{"class":1324},[1097,11835,7237],{"class":1107},[1097,11837,5554],{"class":1324},[1097,11839,11840,11842,11844,11846,11848],{"class":1099,"line":4224},[1097,11841,7156],{"class":1567},[1097,11843,1571],{"class":1324},[1097,11845,1498],{"class":1324},[1097,11847,7122],{"class":1107},[1097,11849,5554],{"class":1324},[1097,11851,11852,11854,11856,11858,11860],{"class":1099,"line":4240},[1097,11853,7169],{"class":1567},[1097,11855,1571],{"class":1324},[1097,11857,1498],{"class":1324},[1097,11859,7136],{"class":1107},[1097,11861,5554],{"class":1324},[1097,11863,11864],{"class":1099,"line":4255},[1097,11865,7182],{"class":1324},[1097,11867,11868,11870,11872,11874,11876,11878,11880,11882,11884,11886,11888,11890,11892],{"class":1099,"line":4261},[1097,11869,7148],{"class":1324},[1097,11871,987],{"class":1330},[1097,11873,7205],{"class":1567},[1097,11875,1571],{"class":1324},[1097,11877,1498],{"class":1324},[1097,11879,7282],{"class":1107},[1097,11881,1498],{"class":1324},[1097,11883,5481],{"class":1567},[1097,11885,1571],{"class":1324},[1097,11887,1498],{"class":1324},[1097,11889,7293],{"class":1107},[1097,11891,1498],{"class":1324},[1097,11893,1545],{"class":1324},[1097,11895,11896],{"class":1099,"line":4267},[1097,11897,7302],{"class":1320},[1097,11899,11900,11902,11904],{"class":1099,"line":4275},[1097,11901,7307],{"class":1324},[1097,11903,987],{"class":1330},[1097,11905,1545],{"class":1324},[1097,11907,11908,11910,11912],{"class":1099,"line":4280},[1097,11909,7187],{"class":1324},[1097,11911,1542],{"class":1330},[1097,11913,1545],{"class":1324},[1097,11915,11916,11918,11920],{"class":1099,"line":4286},[1097,11917,7324],{"class":1324},[1097,11919,1542],{"class":1330},[1097,11921,1545],{"class":1324},[1097,11923,11924,11926,11928],{"class":1099,"line":4306},[1097,11925,7333],{"class":1324},[1097,11927,1542],{"class":1330},[1097,11929,1545],{"class":1324},[1097,11931,11933,11935,11937],{"class":11932,"line":4321},[1099,1549],[1097,11934,5523],{"class":1324},[1097,11936,5099],{"class":1330},[1097,11938,1545],{"class":1324},[1097,11940,11942],{"class":11941,"line":4338},[1099,1549],[1097,11943,1389],{"emptyLinePlaceholder":21},[1097,11945,11947,11949],{"class":11946,"line":4361},[1099,1549],[1097,11948,5497],{"class":1324},[1097,11950,5539],{"class":1330},[1097,11952,11953,11955,11957,11959,11961],{"class":1099,"line":4372},[1097,11954,5545],{"class":1567},[1097,11956,1571],{"class":1324},[1097,11958,1498],{"class":1324},[1097,11960,5210],{"class":1107},[1097,11962,5554],{"class":1324},[1097,11964,11965,11967,11969,11971,11973],{"class":1099,"line":4380},[1097,11966,7372],{"class":1567},[1097,11968,1571],{"class":1324},[1097,11970,1498],{"class":1324},[1097,11972,7379],{"class":1107},[1097,11974,5554],{"class":1324},[1097,11976,11977,11979,11981,11983,11985],{"class":1099,"line":4386},[1097,11978,5575],{"class":1567},[1097,11980,1571],{"class":1324},[1097,11982,1498],{"class":1324},[1097,11984,5582],{"class":1107},[1097,11986,5554],{"class":1324},[1097,11988,11989,11991,11993,11995,11997],{"class":1099,"line":4391},[1097,11990,6972],{"class":1567},[1097,11992,1571],{"class":1324},[1097,11994,1498],{"class":1324},[1097,11996,7404],{"class":1107},[1097,11998,5554],{"class":1324},[1097,12000,12001,12003,12005,12007,12009],{"class":1099,"line":4414},[1097,12002,5605],{"class":1567},[1097,12004,1571],{"class":1324},[1097,12006,1498],{"class":1324},[1097,12008,7417],{"class":1107},[1097,12010,5554],{"class":1324},[1097,12012,12013],{"class":1099,"line":4420},[1097,12014,5620],{"class":1324},[1097,12016,12017,12019,12021,12023,12026],{"class":1099,"line":4440},[1097,12018,5626],{"class":1324},[1097,12020,1542],{"class":1330},[1097,12022,5466],{"class":1324},[1097,12024,12025],{"class":1567},"footer",[1097,12027,1545],{"class":1324},[1097,12029,12030,12032,12035,12038,12040,12042,12044,12046],{"class":1099,"line":4446},[1097,12031,7015],{"class":1324},[1097,12033,12034],{"class":1330},"ModelSelect",[1097,12036,12037],{"class":1567}," v-model",[1097,12039,1571],{"class":1324},[1097,12041,1498],{"class":1324},[1097,12043,4655],{"class":1107},[1097,12045,1498],{"class":1324},[1097,12047,1591],{"class":1324},[1097,12049,12050,12052,12054],{"class":1099,"line":4492},[1097,12051,7333],{"class":1324},[1097,12053,1542],{"class":1330},[1097,12055,1545],{"class":1324},[1097,12057,12058],{"class":1099,"line":4508},[1097,12059,1389],{"emptyLinePlaceholder":21},[1097,12061,12062,12064],{"class":1099,"line":4541},[1097,12063,5626],{"class":1324},[1097,12065,7430],{"class":1330},[1097,12067,12068,12070,12072,12074,12076],{"class":1099,"line":4555},[1097,12069,7435],{"class":1567},[1097,12071,1571],{"class":1324},[1097,12073,1498],{"class":1324},[1097,12075,6960],{"class":1107},[1097,12077,5554],{"class":1324},[1097,12079,12080,12082,12084,12086,12088],{"class":1099,"line":4563},[1097,12081,7448],{"class":1567},[1097,12083,1571],{"class":1324},[1097,12085,1498],{"class":1324},[1097,12087,5639],{"class":1107},[1097,12089,5554],{"class":1324},[1097,12091,12092,12094,12096,12098,12100],{"class":1099,"line":4569},[1097,12093,7461],{"class":1567},[1097,12095,1571],{"class":1324},[1097,12097,1498],{"class":1324},[1097,12099,7468],{"class":1107},[1097,12101,5554],{"class":1324},[1097,12103,12104,12106,12108,12110,12112],{"class":1099,"line":4576},[1097,12105,7475],{"class":1567},[1097,12107,1571],{"class":1324},[1097,12109,1498],{"class":1324},[1097,12111,7482],{"class":1107},[1097,12113,5554],{"class":1324},[1097,12115,12116],{"class":1099,"line":4581},[1097,12117,7489],{"class":1324},[1097,12119,12120,12122,12124],{"class":1099,"line":4599},[1097,12121,5523],{"class":1324},[1097,12123,5093],{"class":1330},[1097,12125,1545],{"class":1324},[1097,12127,12129,12131,12133],{"class":1099,"line":12128},114,[1097,12130,5657],{"class":1324},[1097,12132,5478],{"class":1330},[1097,12134,1545],{"class":1324},[1097,12136,12138,12140,12142],{"class":1099,"line":12137},115,[1097,12139,1596],{"class":1324},[1097,12141,1542],{"class":1330},[1097,12143,1545],{"class":1324},[1097,12145,12147,12149,12151],{"class":1099,"line":12146},116,[1097,12148,1606],{"class":1324},[1097,12150,5443],{"class":1330},[1097,12152,1545],{"class":1324},[1097,12154,12156,12158,12160],{"class":1099,"line":12155},117,[1097,12157,1615],{"class":1324},[1097,12159,1542],{"class":1330},[1097,12161,1545],{"class":1324},[991,12163,12165],{"id":12164},"going-further","Going further",[987,12167,12168],{},"You now have a working AI chatbot with database persistence! To take it further, consider adding:",[987,12170,12171],{},[1005,12172,12173],{},"User Authentication",[987,12175,12176,12177,12182],{},"Add authentication with ",[1041,12178,12181],{"href":12179,"rel":12180},"https:\u002F\u002Fgithub.com\u002Fatinux\u002Fnuxt-auth-utils",[1045],"nuxt-auth-utils"," to let users access their chat history across devices and keep conversations private.",[987,12184,12185],{},[1005,12186,12187],{},"AI Tools",[987,12189,12190,12191,12196],{},"Extend your chatbot with ",[1041,12192,12195],{"href":12193,"rel":12194},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-core\u002Ftools-and-tool-calling",[1045],"AI SDK tools"," that can fetch real-time data, generate charts, or interact with external APIs:",[1088,12198,12200],{"className":1301,"code":12199,"language":1303,"meta":1093,"style":1093},"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",[1047,12201,12202,12221,12239,12243,12258,12274,12291,12322,12330,12350,12355,12390,12394],{"__ignoreMap":1093},[1097,12203,12204,12206,12208,12211,12213,12215,12217,12219],{"class":1099,"line":1100},[1097,12205,1686],{"class":1310},[1097,12207,1689],{"class":1324},[1097,12209,12210],{"class":1320}," tool",[1097,12212,1711],{"class":1324},[1097,12214,1714],{"class":1310},[1097,12216,1411],{"class":1324},[1097,12218,2518],{"class":1107},[1097,12220,1375],{"class":1324},[1097,12222,12223,12225,12227,12229,12231,12233,12235,12237],{"class":1099,"line":1117},[1097,12224,1686],{"class":1310},[1097,12226,1689],{"class":1324},[1097,12228,2553],{"class":1320},[1097,12230,1711],{"class":1324},[1097,12232,1714],{"class":1310},[1097,12234,1411],{"class":1324},[1097,12236,2562],{"class":1107},[1097,12238,1375],{"class":1324},[1097,12240,12241],{"class":1099,"line":1340},[1097,12242,1389],{"emptyLinePlaceholder":21},[1097,12244,12245,12247,12250,12252,12254,12256],{"class":1099,"line":1355},[1097,12246,3046],{"class":1567},[1097,12248,12249],{"class":1320}," weatherTool ",[1097,12251,1571],{"class":1324},[1097,12253,12210],{"class":1120},[1097,12255,1321],{"class":1320},[1097,12257,1325],{"class":1324},[1097,12259,12260,12263,12265,12267,12270,12272],{"class":1099,"line":1367},[1097,12261,12262],{"class":1330},"  description",[1097,12264,1334],{"class":1324},[1097,12266,1411],{"class":1324},[1097,12268,12269],{"class":1107},"Get the current weather for a location",[1097,12271,1349],{"class":1324},[1097,12273,1352],{"class":1324},[1097,12275,12276,12279,12281,12283,12285,12287,12289],{"class":1099,"line":1378},[1097,12277,12278],{"class":1330},"  parameters",[1097,12280,1334],{"class":1324},[1097,12282,2553],{"class":1320},[1097,12284,1787],{"class":1324},[1097,12286,2625],{"class":1120},[1097,12288,1321],{"class":1320},[1097,12290,1325],{"class":1324},[1097,12292,12293,12296,12298,12300,12302,12304,12306,12308,12311,12313,12315,12318,12320],{"class":1099,"line":1386},[1097,12294,12295],{"class":1330},"    location",[1097,12297,1334],{"class":1324},[1097,12299,2553],{"class":1320},[1097,12301,1787],{"class":1324},[1097,12303,3245],{"class":1120},[1097,12305,1784],{"class":1320},[1097,12307,1787],{"class":1324},[1097,12309,12310],{"class":1120},"describe",[1097,12312,1321],{"class":1320},[1097,12314,1349],{"class":1324},[1097,12316,12317],{"class":1107},"The city name",[1097,12319,1349],{"class":1324},[1097,12321,1459],{"class":1320},[1097,12323,12324,12326,12328],{"class":1099,"line":1392},[1097,12325,2398],{"class":1324},[1097,12327,1861],{"class":1320},[1097,12329,1352],{"class":1324},[1097,12331,12332,12335,12337,12339,12341,12344,12346,12348],{"class":1099,"line":1403},[1097,12333,12334],{"class":1120},"  execute",[1097,12336,1334],{"class":1324},[1097,12338,4007],{"class":1567},[1097,12340,1918],{"class":1324},[1097,12342,12343],{"class":1921}," location",[1097,12345,1925],{"class":1324},[1097,12347,1804],{"class":1567},[1097,12349,1400],{"class":1324},[1097,12351,12352],{"class":1099,"line":1419},[1097,12353,12354],{"class":2675},"    \u002F\u002F Fetch weather data from an API\n",[1097,12356,12357,12360,12362,12364,12366,12369,12371,12374,12376,12379,12381,12383,12386,12388],{"class":1099,"line":1425},[1097,12358,12359],{"class":1310},"    return",[1097,12361,1689],{"class":1324},[1097,12363,12343],{"class":1320},[1097,12365,1695],{"class":1324},[1097,12367,12368],{"class":1330}," temperature",[1097,12370,1334],{"class":1324},[1097,12372,12373],{"class":3578}," 22",[1097,12375,1695],{"class":1324},[1097,12377,12378],{"class":1330}," condition",[1097,12380,1334],{"class":1324},[1097,12382,1411],{"class":1324},[1097,12384,12385],{"class":1107},"Sunny",[1097,12387,1349],{"class":1324},[1097,12389,3167],{"class":1324},[1097,12391,12392],{"class":1099,"line":1430},[1097,12393,3603],{"class":1324},[1097,12395,12396,12398],{"class":1099,"line":1453},[1097,12397,1456],{"class":1324},[1097,12399,1459],{"class":1320},[991,12401,12403],{"id":12402},"deploying-to-vercel","Deploying to Vercel",[987,12405,12406],{},"Deploy your chatbot to Vercel with zero configuration:",[1088,12408,12410],{"className":1090,"code":12409,"language":1092,"meta":1093,"style":1093},"npx vercel deploy\n",[1047,12411,12412],{"__ignoreMap":1093},[1097,12413,12414,12416,12419],{"class":1099,"line":1100},[1097,12415,1104],{"class":1103},[1097,12417,12418],{"class":1107}," vercel",[1097,12420,12421],{"class":1107}," deploy\n",[987,12423,12424],{},"Then, in the Vercel dashboard:",[999,12426,12427,12433],{},[1002,12428,12429,12430,12432],{},"Enable ",[1005,12431,4611],{}," and add credits so requests can be processed.",[1002,12434,12435,12436,12439],{},"Add a ",[1005,12437,12438],{},"Turso"," database from the Vercel Marketplace and connect it to your project (it will provision the database and add the required environment variables automatically).",[12441,12442,12443],"blockquote",{},[987,12444,12445,12446,12451,12452,12454],{},"Note: On Vercel, you ",[1005,12447,12448,12449],{},"don’t need to manually add ",[1047,12450,1638],{}," — Vercel handles the gateway configuration for deployments. Keep using ",[1047,12453,1625],{}," locally for development.",[1461,12456,12458],{"to":1076,"target":12457},"_blank",[987,12459,12460,12461,1787],{},"Learn more about setting up AI Gateway in the ",[1005,12462,12463],{},"Vercel AI Gateway documentation",[991,12465,12467],{"id":12466},"conclusion","Conclusion",[987,12469,12470],{},"You've built a complete AI chatbot with:",[999,12472,12473,12479,12485,12491,12496],{},[1002,12474,12475,12478],{},[1005,12476,12477],{},"A complete chat interface"," using Nuxt UI components",[1002,12480,12481,12484],{},[1005,12482,12483],{},"Real-time streaming responses"," with the AI SDK",[1002,12486,12487,12490],{},[1005,12488,12489],{},"Streaming Markdown rendering"," with Comark for rich content display",[1002,12492,12493,12495],{},[1005,12494,1025],{}," via AI Gateway",[1002,12497,12498,12501],{},[1005,12499,12500],{},"Database persistence"," with SQLite (local) \u002F Turso (production) and Drizzle ORM",[987,12503,12504],{},"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.",[987,12506,12507],{},[1005,12508,12509],{},"Resources:",[999,12511,12512,12519,12526,12533,12539,12545],{},[1002,12513,12514],{},[1041,12515,12518],{"href":12516,"rel":12517},"https:\u002F\u002Fui.nuxt.com\u002Fcomponents\u002Fchat",[1045],"Nuxt UI Chat Components",[1002,12520,12521],{},[1041,12522,12525],{"href":12523,"rel":12524},"https:\u002F\u002Fhub.nuxt.com\u002Fdocs\u002Ffeatures\u002Fdatabase",[1045],"NuxtHub Database",[1002,12527,12528],{},[1041,12529,12532],{"href":12530,"rel":12531},"https:\u002F\u002Fai-sdk.dev",[1045],"AI SDK Documentation",[1002,12534,12535],{},[1041,12536,12538],{"href":1076,"rel":12537},[1045],"AI Gateway Documentation",[1002,12540,12541],{},[1041,12542,12544],{"href":1043,"rel":12543},[1045],"Nuxt AI Chat Template",[1002,12546,12547],{},[1041,12548,12550],{"href":1053,"rel":12549},[1045],"Vue AI Chat Template",[987,12552,12553],{},"We're excited to see what you'll build!",[12555,12556,12557],"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 .sRy2g, html code.shiki .sRy2g{--shiki-icon-url: url(https:\u002F\u002Fapi.iconify.design\u002Flucide:plus-square.svg?color=%23000)}html pre.shiki code .sdATh, html code.shiki .sdATh{--shiki-icon-url: url(https:\u002F\u002Fapi.iconify.design\u002Flucide:messages-square.svg?color=%23000)}html pre.shiki code .sh9xi, html code.shiki .sh9xi{--shiki-icon-url: url(https:\u002F\u002Fapi.iconify.design\u002Fsimple-icons:openai.svg?color=%23000)}html pre.shiki code .sNknm, html code.shiki .sNknm{--shiki-icon-url: url(https:\u002F\u002Fapi.iconify.design\u002Fsimple-icons:anthropic.svg?color=%23000)}html pre.shiki code .scZL3, html code.shiki .scZL3{--shiki-icon-url: url(https:\u002F\u002Fapi.iconify.design\u002Fsimple-icons:google.svg?color=%23000)}",{"title":1093,"searchDepth":1117,"depth":1117,"links":12559},[12560,12561,12562,12568,12573,12577,12578,12582,12583,12584,12589,12590,12591],{"id":993,"depth":1117,"text":994},{"id":1061,"depth":1117,"text":1062},{"id":1082,"depth":1117,"text":1083,"children":12563},[12564,12565,12566,12567],{"id":1127,"depth":1340,"text":1128},{"id":1287,"depth":1340,"text":1288},{"id":1516,"depth":1340,"text":1517},{"id":1655,"depth":1340,"text":1656},{"id":2441,"depth":1117,"text":2442,"children":12569},[12570,12571,12572],{"id":2453,"depth":1340,"text":2454},{"id":2837,"depth":1340,"text":2838},{"id":4702,"depth":1340,"text":4703},{"id":5084,"depth":1117,"text":5085,"children":12574},[12575,12576],{"id":5103,"depth":1340,"text":5104},{"id":5720,"depth":1340,"text":5721},{"id":6092,"depth":1117,"text":6093},{"id":7685,"depth":1117,"text":7686,"children":12579},[12580,12581],{"id":7692,"depth":1340,"text":7693},{"id":7852,"depth":1340,"text":7853},{"id":8359,"depth":1117,"text":8360},{"id":8902,"depth":1117,"text":8903},{"id":10224,"depth":1117,"text":10225,"children":12585},[12586,12587,12588],{"id":10235,"depth":1340,"text":10236},{"id":10507,"depth":1340,"text":10508},{"id":10766,"depth":1340,"text":10767},{"id":12164,"depth":1117,"text":12165},{"id":12402,"depth":1117,"text":12403},{"id":12466,"depth":1117,"text":12467},"2025-12-16T10:00:00.000Z","Learn how to build a full-featured AI chatbot with streaming responses, multiple models support, and a beautiful UI using Nuxt, Nuxt UI, and Vercel AI SDK.","md","\u002Fassets\u002Fblog\u002Fbuilding-nuxt-ai-chatbot.png",{"category":12597},"Tutorial","\u002Fblog\u002Fhow-to-build-an-ai-chat",{"title":971,"description":12593},"blog\u002Fhow-to-build-an-ai-chat","niwtEdHQJaUBnPqldgEx0ODg9tOUK75ezMtfPw31Y0Q",1776876644958]