[{"data":1,"prerenderedAt":12604},["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":12594,"description":12595,"extension":12596,"image":12597,"meta":12598,"navigation":36,"path":12600,"seo":12601,"stem":12602,"__hash__":12603},"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":12560},"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,7532,7535,7540,7551,7589,7604,7609,7616,7630,7635,7662,7667,7674,7685,7689,7692,7696,7699,7852,7856,7881,8359,8363,8902,8906,10215,10224,10228,10235,10239,10249,10507,10511,10519,10766,10770,10773,12164,12168,12171,12176,12185,12190,12199,12402,12406,12409,12424,12427,12442,12457,12466,12470,12473,12504,12507,12512,12553,12556],[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=\"{ id, role, parts }\">\n            \u003Ctemplate v-for=\"(part, index) in parts\" :key=\"`${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=\"role === 'assistant'\"\n                  :markdown=\"part.text\"\n                  :streaming=\"isPartStreaming(part)\"\n                \u002F>\n                \u003Cp v-else-if=\"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,7020,7091,7099,7113,7127,7141,7146,7154,7167,7180,7185,7195,7199,7222,7228,7242,7254,7266,7270,7300,7305,7314,7322,7331,7340,7348,7352,7358,7370,7384,7396,7409,7422,7426,7433,7446,7459,7473,7487,7492,7500,7508,7516,7524],{"__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,7004,7006,7009,7011,7014,7016,7018],{"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,3207],{"class":1320},[1097,7005,1695],{"class":1324},[1097,7007,7008],{"class":1320}," role",[1097,7010,1695],{"class":1324},[1097,7012,7013],{"class":1320}," parts ",[1097,7015,1456],{"class":1324},[1097,7017,1498],{"class":1324},[1097,7019,1545],{"class":1324},[1097,7021,7022,7025,7027,7030,7032,7034,7037,7039,7042,7045,7048,7050,7053,7056,7058,7061,7063,7065,7068,7070,7073,7075,7077,7079,7081,7083,7086,7089],{"class":1099,"line":4021},[1097,7023,7024],{"class":1324},"            \u003C",[1097,7026,1542],{"class":1330},[1097,7028,7029],{"class":1310}," v-for",[1097,7031,1571],{"class":1324},[1097,7033,1498],{"class":1324},[1097,7035,7036],{"class":1320},"(part",[1097,7038,1695],{"class":1324},[1097,7040,7041],{"class":1320}," index) ",[1097,7043,7044],{"class":1324},"in",[1097,7046,7047],{"class":1320}," parts",[1097,7049,1498],{"class":1324},[1097,7051,7052],{"class":1324}," :",[1097,7054,7055],{"class":1567},"key",[1097,7057,1571],{"class":1324},[1097,7059,7060],{"class":1324},"\"`${",[1097,7062,1998],{"class":1320},[1097,7064,1456],{"class":1324},[1097,7066,7067],{"class":1107},"-",[1097,7069,5400],{"class":1324},[1097,7071,7072],{"class":1320},"part",[1097,7074,1787],{"class":1324},[1097,7076,6546],{"class":1320},[1097,7078,1456],{"class":1324},[1097,7080,7067],{"class":1107},[1097,7082,5400],{"class":1324},[1097,7084,7085],{"class":1320},"index",[1097,7087,7088],{"class":1324},"}`\"",[1097,7090,1545],{"class":1324},[1097,7092,7093,7096],{"class":1099,"line":4039},[1097,7094,7095],{"class":1324},"              \u003C",[1097,7097,7098],{"class":1330},"UChatReasoning\n",[1097,7100,7101,7104,7106,7108,7111],{"class":1099,"line":4047},[1097,7102,7103],{"class":1567},"                v-if",[1097,7105,1571],{"class":1324},[1097,7107,1498],{"class":1324},[1097,7109,7110],{"class":1107},"isReasoningUIPart(part)",[1097,7112,5554],{"class":1324},[1097,7114,7115,7118,7120,7122,7125],{"class":1099,"line":4064},[1097,7116,7117],{"class":1567},"                :text",[1097,7119,1571],{"class":1324},[1097,7121,1498],{"class":1324},[1097,7123,7124],{"class":1107},"part.text",[1097,7126,5554],{"class":1324},[1097,7128,7129,7132,7134,7136,7139],{"class":1099,"line":4085},[1097,7130,7131],{"class":1567},"                :streaming",[1097,7133,1571],{"class":1324},[1097,7135,1498],{"class":1324},[1097,7137,7138],{"class":1107},"isPartStreaming(part)",[1097,7140,5554],{"class":1324},[1097,7142,7143],{"class":1099,"line":4095},[1097,7144,7145],{"class":1324},"              >\n",[1097,7147,7148,7151],{"class":1099,"line":4105},[1097,7149,7150],{"class":1324},"                \u003C",[1097,7152,7153],{"class":1330},"ChatComark\n",[1097,7155,7156,7159,7161,7163,7165],{"class":1099,"line":4115},[1097,7157,7158],{"class":1567},"                  :markdown",[1097,7160,1571],{"class":1324},[1097,7162,1498],{"class":1324},[1097,7164,7124],{"class":1107},[1097,7166,5554],{"class":1324},[1097,7168,7169,7172,7174,7176,7178],{"class":1099,"line":4132},[1097,7170,7171],{"class":1567},"                  :streaming",[1097,7173,1571],{"class":1324},[1097,7175,1498],{"class":1324},[1097,7177,7138],{"class":1107},[1097,7179,5554],{"class":1324},[1097,7181,7182],{"class":1099,"line":4143},[1097,7183,7184],{"class":1324},"                \u002F>\n",[1097,7186,7187,7190,7193],{"class":1099,"line":4149},[1097,7188,7189],{"class":1324},"              \u003C\u002F",[1097,7191,7192],{"class":1330},"UChatReasoning",[1097,7194,1545],{"class":1324},[1097,7196,7197],{"class":1099,"line":4155},[1097,7198,1389],{"emptyLinePlaceholder":21},[1097,7200,7201,7203,7205,7208,7210,7212,7215,7218,7220],{"class":1099,"line":4165},[1097,7202,7095],{"class":1324},[1097,7204,1542],{"class":1330},[1097,7206,7207],{"class":1310}," v-else-if",[1097,7209,1571],{"class":1324},[1097,7211,1498],{"class":1324},[1097,7213,7214],{"class":1120},"isTextUIPart",[1097,7216,7217],{"class":1320},"(part)",[1097,7219,1498],{"class":1324},[1097,7221,1545],{"class":1324},[1097,7223,7224,7226],{"class":1099,"line":4175},[1097,7225,7150],{"class":1324},[1097,7227,7153],{"class":1330},[1097,7229,7230,7233,7235,7237,7240],{"class":1099,"line":4189},[1097,7231,7232],{"class":1567},"                  v-if",[1097,7234,1571],{"class":1324},[1097,7236,1498],{"class":1324},[1097,7238,7239],{"class":1107},"role === 'assistant'",[1097,7241,5554],{"class":1324},[1097,7243,7244,7246,7248,7250,7252],{"class":1099,"line":4204},[1097,7245,7158],{"class":1567},[1097,7247,1571],{"class":1324},[1097,7249,1498],{"class":1324},[1097,7251,7124],{"class":1107},[1097,7253,5554],{"class":1324},[1097,7255,7256,7258,7260,7262,7264],{"class":1099,"line":4209},[1097,7257,7171],{"class":1567},[1097,7259,1571],{"class":1324},[1097,7261,1498],{"class":1324},[1097,7263,7138],{"class":1107},[1097,7265,5554],{"class":1324},[1097,7267,7268],{"class":1099,"line":4214},[1097,7269,7184],{"class":1324},[1097,7271,7272,7274,7276,7278,7280,7282,7285,7287,7289,7291,7293,7296,7298],{"class":1099,"line":4224},[1097,7273,7150],{"class":1324},[1097,7275,987],{"class":1330},[1097,7277,7207],{"class":1567},[1097,7279,1571],{"class":1324},[1097,7281,1498],{"class":1324},[1097,7283,7284],{"class":1107},"role === 'user'",[1097,7286,1498],{"class":1324},[1097,7288,5481],{"class":1567},[1097,7290,1571],{"class":1324},[1097,7292,1498],{"class":1324},[1097,7294,7295],{"class":1107},"whitespace-pre-wrap",[1097,7297,1498],{"class":1324},[1097,7299,1545],{"class":1324},[1097,7301,7302],{"class":1099,"line":4240},[1097,7303,7304],{"class":1320},"                  {{ part.text }}\n",[1097,7306,7307,7310,7312],{"class":1099,"line":4255},[1097,7308,7309],{"class":1324},"                \u003C\u002F",[1097,7311,987],{"class":1330},[1097,7313,1545],{"class":1324},[1097,7315,7316,7318,7320],{"class":1099,"line":4261},[1097,7317,7189],{"class":1324},[1097,7319,1542],{"class":1330},[1097,7321,1545],{"class":1324},[1097,7323,7324,7327,7329],{"class":1099,"line":4267},[1097,7325,7326],{"class":1324},"            \u003C\u002F",[1097,7328,1542],{"class":1330},[1097,7330,1545],{"class":1324},[1097,7332,7333,7336,7338],{"class":1099,"line":4275},[1097,7334,7335],{"class":1324},"          \u003C\u002F",[1097,7337,1542],{"class":1330},[1097,7339,1545],{"class":1324},[1097,7341,7342,7344,7346],{"class":1099,"line":4280},[1097,7343,5523],{"class":1324},[1097,7345,5099],{"class":1330},[1097,7347,1545],{"class":1324},[1097,7349,7350],{"class":1099,"line":4286},[1097,7351,1389],{"emptyLinePlaceholder":21},[1097,7353,7354,7356],{"class":1099,"line":4306},[1097,7355,5497],{"class":1324},[1097,7357,5539],{"class":1330},[1097,7359,7360,7362,7364,7366,7368],{"class":1099,"line":4321},[1097,7361,5545],{"class":1567},[1097,7363,1571],{"class":1324},[1097,7365,1498],{"class":1324},[1097,7367,5210],{"class":1107},[1097,7369,5554],{"class":1324},[1097,7371,7372,7375,7377,7379,7382],{"class":1099,"line":4338},[1097,7373,7374],{"class":1567},"          :error",[1097,7376,1571],{"class":1324},[1097,7378,1498],{"class":1324},[1097,7380,7381],{"class":1107},"chat.error",[1097,7383,5554],{"class":1324},[1097,7385,7386,7388,7390,7392,7394],{"class":1099,"line":4361},[1097,7387,5575],{"class":1567},[1097,7389,1571],{"class":1324},[1097,7391,1498],{"class":1324},[1097,7393,5582],{"class":1107},[1097,7395,5554],{"class":1324},[1097,7397,7398,7400,7402,7404,7407],{"class":1099,"line":4372},[1097,7399,6972],{"class":1567},[1097,7401,1571],{"class":1324},[1097,7403,1498],{"class":1324},[1097,7405,7406],{"class":1107},"sticky bottom-0",[1097,7408,5554],{"class":1324},[1097,7410,7411,7413,7415,7417,7420],{"class":1099,"line":4380},[1097,7412,5605],{"class":1567},[1097,7414,1571],{"class":1324},[1097,7416,1498],{"class":1324},[1097,7418,7419],{"class":1107},"handleSubmit",[1097,7421,5554],{"class":1324},[1097,7423,7424],{"class":1099,"line":4386},[1097,7425,5620],{"class":1324},[1097,7427,7428,7430],{"class":1099,"line":4391},[1097,7429,5626],{"class":1324},[1097,7431,7432],{"class":1330},"UChatPromptSubmit\n",[1097,7434,7435,7438,7440,7442,7444],{"class":1099,"line":4414},[1097,7436,7437],{"class":1567},"            :status",[1097,7439,1571],{"class":1324},[1097,7441,1498],{"class":1324},[1097,7443,6960],{"class":1107},[1097,7445,5554],{"class":1324},[1097,7447,7448,7451,7453,7455,7457],{"class":1099,"line":4420},[1097,7449,7450],{"class":1567},"            color",[1097,7452,1571],{"class":1324},[1097,7454,1498],{"class":1324},[1097,7456,5639],{"class":1107},[1097,7458,5554],{"class":1324},[1097,7460,7461,7464,7466,7468,7471],{"class":1099,"line":4440},[1097,7462,7463],{"class":1567},"            @stop",[1097,7465,1571],{"class":1324},[1097,7467,1498],{"class":1324},[1097,7469,7470],{"class":1107},"chat.stop()",[1097,7472,5554],{"class":1324},[1097,7474,7475,7478,7480,7482,7485],{"class":1099,"line":4446},[1097,7476,7477],{"class":1567},"            @reload",[1097,7479,1571],{"class":1324},[1097,7481,1498],{"class":1324},[1097,7483,7484],{"class":1107},"chat.regenerate()",[1097,7486,5554],{"class":1324},[1097,7488,7489],{"class":1099,"line":4492},[1097,7490,7491],{"class":1324},"          \u002F>\n",[1097,7493,7494,7496,7498],{"class":1099,"line":4508},[1097,7495,5523],{"class":1324},[1097,7497,5093],{"class":1330},[1097,7499,1545],{"class":1324},[1097,7501,7502,7504,7506],{"class":1099,"line":4541},[1097,7503,5657],{"class":1324},[1097,7505,5478],{"class":1330},[1097,7507,1545],{"class":1324},[1097,7509,7510,7512,7514],{"class":1099,"line":4555},[1097,7511,1596],{"class":1324},[1097,7513,1542],{"class":1330},[1097,7515,1545],{"class":1324},[1097,7517,7518,7520,7522],{"class":1099,"line":4563},[1097,7519,1606],{"class":1324},[1097,7521,5443],{"class":1330},[1097,7523,1545],{"class":1324},[1097,7525,7526,7528,7530],{"class":1099,"line":4569},[1097,7527,1615],{"class":1324},[1097,7529,1542],{"class":1330},[1097,7531,1545],{"class":1324},[987,7533,7534],{},"Here's a breakdown of the key parts:",[987,7536,7537],{},[1005,7538,7539],{},"The Chat Class",[987,7541,4642,7542,7547,7548,7550],{},[1041,7543,7545],{"href":6099,"rel":7544},[1045],[1047,7546,259],{}," class from ",[1047,7549,6191],{}," manages the entire conversation state. It handles:",[999,7552,7553,7558,7573,7579,7584],{},[1002,7554,7555,7556],{},"Message history with ",[1047,7557,6947],{},[1002,7559,7560,7561,1930,7563,2849,7566,2849,7569,2849,7571,1861],{},"Connection status with ",[1047,7562,6960],{},[1047,7564,7565],{},"ready",[1047,7567,7568],{},"submitted",[1047,7570,5714],{},[1047,7572,6595],{},[1002,7574,7575,7576],{},"Sending messages with ",[1047,7577,7578],{},"chat.sendMessage()",[1002,7580,7581,7582],{},"Stopping generation with ",[1047,7583,7470],{},[1002,7585,7586,7587],{},"Regenerating responses with ",[1047,7588,7484],{},[987,7590,4642,7591,7594,7595,7600,7601,7603],{},[1047,7592,7593],{},"onData"," callback receives ",[1041,7596,7599],{"href":7597,"rel":7598},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-ui\u002Fstreaming-data",[1045],"custom data events"," from the server (like ",[1047,7602,4331],{},"), allowing you to react to server-side events during streaming.",[987,7605,7606],{},[1005,7607,7608],{},"UChatMessages Component",[987,7610,4642,7611,7615],{},[1041,7612,7613],{"href":271},[1047,7614,5099],{}," component is purpose-built for AI chatbots with:",[999,7617,7618,7621,7624,7627],{},[1002,7619,7620],{},"Auto-scroll to bottom on load",[1002,7622,7623],{},"Continuous scrolling as messages stream in",[1002,7625,7626],{},"A loading indicator while the assistant processes",[1002,7628,7629],{},"An \"Auto scroll\" button when scrolled up",[987,7631,7632],{},[1005,7633,7634],{},"Rendering Message Parts",[987,7636,7637,7638,7640,7641,1050,7643,7646,7647,7649,7650,7654,7655,7658,7659,7661],{},"We iterate over message ",[1047,7639,2182],{}," using AI SDK helpers like ",[1047,7642,7214],{},[1047,7644,7645],{},"isReasoningUIPart",", rendering assistant text with the ",[1047,7648,5952],{}," component we created earlier and reasoning content with ",[1041,7651,7652],{"href":291},[1047,7653,7192],{},". The ",[1047,7656,7657],{},"isPartStreaming"," utility from ",[1047,7660,6212],{}," detects if a part is currently being streamed.",[987,7663,7664],{},[1005,7665,7666],{},"UChatPromptSubmit Component",[987,7668,4642,7669,7673],{},[1041,7670,7671],{"href":286},[1047,7672,5629],{}," component adapts based on the chat status:",[999,7675,7676,7679,7682],{},[1002,7677,7678],{},"Shows a send button when ready",[1002,7680,7681],{},"Shows a stop button while streaming",[1002,7683,7684],{},"Shows a reload button after an error",[991,7686,7688],{"id":7687},"adding-chat-history","Adding chat history",[987,7690,7691],{},"This section adds a dropdown menu to list previous chats and navigate between them.",[1125,7693,7695],{"id":7694},"listing-chats-api","Listing chats API",[987,7697,7698],{},"First, create an endpoint to fetch all chats:",[1297,7700,7701],{},[1088,7702,7705],{"className":1301,"code":7703,"filename":7704,"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,7706,7707,7725,7747,7766,7770,7788,7813,7840,7846],{"__ignoreMap":1093},[1097,7708,7709,7711,7713,7715,7717,7719,7721,7723],{"class":1099,"line":1100},[1097,7710,1686],{"class":1310},[1097,7712,1689],{"class":1324},[1097,7714,2482],{"class":1320},[1097,7716,1711],{"class":1324},[1097,7718,1714],{"class":1310},[1097,7720,1411],{"class":1324},[1097,7722,1125],{"class":1107},[1097,7724,1375],{"class":1324},[1097,7726,7727,7729,7731,7733,7735,7737,7739,7741,7743,7745],{"class":1099,"line":1117},[1097,7728,1686],{"class":1310},[1097,7730,1689],{"class":1324},[1097,7732,2425],{"class":1320},[1097,7734,1695],{"class":1324},[1097,7736,2533],{"class":1320},[1097,7738,1711],{"class":1324},[1097,7740,1714],{"class":1310},[1097,7742,1411],{"class":1324},[1097,7744,2542],{"class":1107},[1097,7746,1375],{"class":1324},[1097,7748,7749,7751,7753,7756,7758,7760,7762,7764],{"class":1099,"line":1340},[1097,7750,1686],{"class":1310},[1097,7752,1689],{"class":1324},[1097,7754,7755],{"class":1320}," desc",[1097,7757,1711],{"class":1324},[1097,7759,1714],{"class":1310},[1097,7761,1411],{"class":1324},[1097,7763,1739],{"class":1107},[1097,7765,1375],{"class":1324},[1097,7767,7768],{"class":1099,"line":1355},[1097,7769,1389],{"emptyLinePlaceholder":21},[1097,7771,7772,7774,7776,7778,7780,7782,7784,7786],{"class":1099,"line":1367},[1097,7773,1311],{"class":1310},[1097,7775,1314],{"class":1310},[1097,7777,2482],{"class":1120},[1097,7779,1321],{"class":1320},[1097,7781,2581],{"class":1567},[1097,7783,4978],{"class":1324},[1097,7785,1804],{"class":1567},[1097,7787,1400],{"class":1324},[1097,7789,7790,7792,7794,7796,7798,7800,7802,7804,7806,7809,7811],{"class":1099,"line":1378},[1097,7791,2825],{"class":1310},[1097,7793,2610],{"class":1310},[1097,7795,2425],{"class":1320},[1097,7797,1787],{"class":1324},[1097,7799,3471],{"class":1320},[1097,7801,1787],{"class":1324},[1097,7803,1766],{"class":1320},[1097,7805,1787],{"class":1324},[1097,7807,7808],{"class":1120},"findMany",[1097,7810,1321],{"class":1330},[1097,7812,1325],{"class":1324},[1097,7814,7815,7818,7820,7822,7824,7826,7828,7830,7832,7834,7836,7838],{"class":1099,"line":1386},[1097,7816,7817],{"class":1120},"    orderBy",[1097,7819,1334],{"class":1324},[1097,7821,4978],{"class":1324},[1097,7823,1804],{"class":1567},[1097,7825,7755],{"class":1120},[1097,7827,1321],{"class":1330},[1097,7829,2702],{"class":1320},[1097,7831,1787],{"class":1324},[1097,7833,1766],{"class":1320},[1097,7835,1787],{"class":1324},[1097,7837,4995],{"class":1320},[1097,7839,1459],{"class":1330},[1097,7841,7842,7844],{"class":1099,"line":1392},[1097,7843,2398],{"class":1324},[1097,7845,1459],{"class":1330},[1097,7847,7848,7850],{"class":1099,"line":1403},[1097,7849,1456],{"class":1324},[1097,7851,1459],{"class":1320},[1125,7853,7855],{"id":7854},"building-the-chats-history-dropdown","Building the chats history dropdown",[987,7857,7858,7859,7864,7865,7870,7871,7864,7878,7880],{},"The component uses ",[1041,7860,7861],{"href":457},[1047,7862,7863],{},"UDropdownMenu"," with a ",[1041,7866,7867],{"href":230},[1047,7868,7869],{},"UButton"," as trigger. Use ",[1041,7872,7875],{"href":7873,"rel":7874},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-fetch",[1045],[1047,7876,7877],{},"useFetch",[1047,7879,7055],{}," to fetch and cache the chat list:",[1297,7882,7883],{},[1088,7884,7887],{"className":1529,"code":7885,"filename":7886,"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,7888,7889,7909,7921,7925,7957,7972,7986,7992,7996,8016,8021,8037,8053,8073,8097,8101,8126,8151,8173,8199,8205,8209,8217,8221,8229,8260,8267,8284,8298,8312,8324,8338,8343,8351],{"__ignoreMap":1093},[1097,7890,7891,7893,7895,7897,7899,7901,7903,7905,7907],{"class":1099,"line":1100},[1097,7892,1539],{"class":1324},[1097,7894,5128],{"class":1330},[1097,7896,5131],{"class":1567},[1097,7898,5134],{"class":1567},[1097,7900,1571],{"class":1324},[1097,7902,1498],{"class":1324},[1097,7904,1303],{"class":1107},[1097,7906,1498],{"class":1324},[1097,7908,1545],{"class":1324},[1097,7910,7911,7913,7915,7917,7919],{"class":1099,"line":1117},[1097,7912,3046],{"class":1567},[1097,7914,6225],{"class":1320},[1097,7916,1571],{"class":1324},[1097,7918,6230],{"class":1120},[1097,7920,2653],{"class":1320},[1097,7922,7923],{"class":1099,"line":1340},[1097,7924,1389],{"emptyLinePlaceholder":21},[1097,7926,7927,7929,7931,7933,7935,7937,7939,7941,7943,7945,7947,7949,7951,7953,7955],{"class":1099,"line":1355},[1097,7928,3046],{"class":1567},[1097,7930,1689],{"class":1324},[1097,7932,6264],{"class":1330},[1097,7934,1334],{"class":1324},[1097,7936,1755],{"class":1320},[1097,7938,1456],{"class":1324},[1097,7940,2607],{"class":1324},[1097,7942,2610],{"class":1310},[1097,7944,6278],{"class":1120},[1097,7946,1321],{"class":1320},[1097,7948,1349],{"class":1324},[1097,7950,5271],{"class":1107},[1097,7952,1349],{"class":1324},[1097,7954,1695],{"class":1324},[1097,7956,1400],{"class":1324},[1097,7958,7959,7962,7964,7966,7968,7970],{"class":1099,"line":1367},[1097,7960,7961],{"class":1330},"  key",[1097,7963,1334],{"class":1324},[1097,7965,1411],{"class":1324},[1097,7967,1766],{"class":1107},[1097,7969,1349],{"class":1324},[1097,7971,1352],{"class":1324},[1097,7973,7974,7977,7979,7981,7983],{"class":1099,"line":1378},[1097,7975,7976],{"class":1120},"  default",[1097,7978,1334],{"class":1324},[1097,7980,4978],{"class":1324},[1097,7982,1804],{"class":1567},[1097,7984,7985],{"class":1320}," []\n",[1097,7987,7988,7990],{"class":1099,"line":1386},[1097,7989,1456],{"class":1324},[1097,7991,1459],{"class":1320},[1097,7993,7994],{"class":1099,"line":1392},[1097,7995,1389],{"emptyLinePlaceholder":21},[1097,7997,7998,8000,8003,8005,8008,8010,8012,8014],{"class":1099,"line":1403},[1097,7999,3046],{"class":1567},[1097,8001,8002],{"class":1320}," items ",[1097,8004,1571],{"class":1324},[1097,8006,8007],{"class":1120}," computed",[1097,8009,1321],{"class":1320},[1097,8011,1784],{"class":1324},[1097,8013,1804],{"class":1567},[1097,8015,1337],{"class":1320},[1097,8017,8018],{"class":1099,"line":1419},[1097,8019,8020],{"class":1324},"  {\n",[1097,8022,8023,8026,8028,8030,8033,8035],{"class":1099,"line":1425},[1097,8024,8025],{"class":1330},"    label",[1097,8027,1334],{"class":1324},[1097,8029,1411],{"class":1324},[1097,8031,8032],{"class":1107},"New chat",[1097,8034,1349],{"class":1324},[1097,8036,1352],{"class":1324},[1097,8038,8039,8042,8044,8046,8049,8051],{"class":1099,"line":1430},[1097,8040,8041],{"class":1330},"    to",[1097,8043,1334],{"class":1324},[1097,8045,1411],{"class":1324},[1097,8047,8048],{"class":1107},"\u002F",[1097,8050,1349],{"class":1324},[1097,8052,1352],{"class":1324},[1097,8054,8055,8058,8060,8062,8069,8071],{"class":1099,"line":1453},[1097,8056,8057],{"class":1330},"    icon",[1097,8059,1334],{"class":1324},[1097,8061,1411],{"class":1324},[1097,8063,8064,8068],{"class":1107},[8065,8066],"i",{"class":8067},"shiki-icon-highlight sRy2g","i-lucide-plus-square",[1097,8070,1349],{"class":1324},[1097,8072,1352],{"class":1324},[1097,8074,8075,8078,8080,8083,8085,8088,8091,8093,8095],{"class":1099,"line":1958},[1097,8076,8077],{"class":1330},"    active",[1097,8079,1334],{"class":1324},[1097,8081,8082],{"class":1320}," route",[1097,8084,1787],{"class":1324},[1097,8086,8087],{"class":1320},"name ",[1097,8089,8090],{"class":1324},"===",[1097,8092,1411],{"class":1324},[1097,8094,7085],{"class":1107},[1097,8096,1375],{"class":1324},[1097,8098,8099],{"class":1099,"line":1985},[1097,8100,1422],{"class":1324},[1097,8102,8103,8106,8108,8110,8112,8114,8116,8118,8120,8122,8124],{"class":1099,"line":2031},[1097,8104,8105],{"class":1324},"  ...",[1097,8107,1766],{"class":1320},[1097,8109,1787],{"class":1324},[1097,8111,3331],{"class":1320},[1097,8113,1787],{"class":1324},[1097,8115,4478],{"class":1120},[1097,8117,1321],{"class":1320},[1097,8119,262],{"class":1921},[1097,8121,1804],{"class":1567},[1097,8123,1930],{"class":1320},[1097,8125,1325],{"class":1324},[1097,8127,8128,8130,8132,8134,8136,8139,8142,8144,8147,8149],{"class":1099,"line":2098},[1097,8129,8025],{"class":1330},[1097,8131,1334],{"class":1324},[1097,8133,2775],{"class":1320},[1097,8135,1787],{"class":1324},[1097,8137,8138],{"class":1320},"title ",[1097,8140,8141],{"class":1324},"||",[1097,8143,1411],{"class":1324},[1097,8145,8146],{"class":1107},"Untitled",[1097,8148,1349],{"class":1324},[1097,8150,1352],{"class":1324},[1097,8152,8153,8155,8157,8159,8161,8163,8165,8167,8169,8171],{"class":1099,"line":2168},[1097,8154,8041],{"class":1330},[1097,8156,1334],{"class":1324},[1097,8158,3685],{"class":1324},[1097,8160,5397],{"class":1107},[1097,8162,5400],{"class":1324},[1097,8164,262],{"class":1320},[1097,8166,1787],{"class":1324},[1097,8168,1998],{"class":1320},[1097,8170,5409],{"class":1324},[1097,8172,1352],{"class":1324},[1097,8174,8175,8177,8179,8181,8183,8185,8187,8190,8192,8194,8196],{"class":1099,"line":2208},[1097,8176,8077],{"class":1330},[1097,8178,1334],{"class":1324},[1097,8180,8082],{"class":1320},[1097,8182,1787],{"class":1324},[1097,8184,6295],{"class":1320},[1097,8186,1787],{"class":1324},[1097,8188,8189],{"class":1320},"id ",[1097,8191,8090],{"class":1324},[1097,8193,2775],{"class":1320},[1097,8195,1787],{"class":1324},[1097,8197,8198],{"class":1320},"id\n",[1097,8200,8201,8203],{"class":1099,"line":2259},[1097,8202,2398],{"class":1324},[1097,8204,1951],{"class":1320},[1097,8206,8207],{"class":1099,"line":2272},[1097,8208,2305],{"class":1320},[1097,8210,8211,8213,8215],{"class":1099,"line":2302},[1097,8212,1615],{"class":1324},[1097,8214,5128],{"class":1330},[1097,8216,1545],{"class":1324},[1097,8218,8219],{"class":1099,"line":2308},[1097,8220,1389],{"emptyLinePlaceholder":21},[1097,8222,8223,8225,8227],{"class":1099,"line":2313},[1097,8224,1539],{"class":1324},[1097,8226,1542],{"class":1330},[1097,8228,1545],{"class":1324},[1097,8230,8231,8233,8235,8238,8240,8242,8245,8247,8249,8251,8253,8256,8258],{"class":1099,"line":2345},[1097,8232,1552],{"class":1324},[1097,8234,7863],{"class":1330},[1097,8236,8237],{"class":1567}," :items",[1097,8239,1571],{"class":1324},[1097,8241,1498],{"class":1324},[1097,8243,8244],{"class":1107},"items",[1097,8246,1498],{"class":1324},[1097,8248,5481],{"class":1567},[1097,8250,1571],{"class":1324},[1097,8252,1498],{"class":1324},[1097,8254,8255],{"class":1107},"m-2",[1097,8257,1498],{"class":1324},[1097,8259,1545],{"class":1324},[1097,8261,8262,8264],{"class":1099,"line":2361},[1097,8263,1561],{"class":1324},[1097,8265,8266],{"class":1330},"UButton\n",[1097,8268,8269,8272,8274,8276,8282],{"class":1099,"line":2379},[1097,8270,8271],{"class":1567},"      icon",[1097,8273,1571],{"class":1324},[1097,8275,1498],{"class":1324},[1097,8277,8278,8281],{"class":1107},[8065,8279],{"class":8280},"shiki-icon-highlight sdATh","i-lucide-messages-square",[1097,8283,5554],{"class":1324},[1097,8285,8286,8289,8291,8293,8296],{"class":1099,"line":2395},[1097,8287,8288],{"class":1567},"      variant",[1097,8290,1571],{"class":1324},[1097,8292,1498],{"class":1324},[1097,8294,8295],{"class":1107},"ghost",[1097,8297,5554],{"class":1324},[1097,8299,8300,8303,8305,8307,8310],{"class":1099,"line":2403},[1097,8301,8302],{"class":1567},"      label",[1097,8304,1571],{"class":1324},[1097,8306,1498],{"class":1324},[1097,8308,8309],{"class":1107},"Chats History",[1097,8311,5554],{"class":1324},[1097,8313,8314,8316,8318,8320,8322],{"class":1099,"line":3383},[1097,8315,6653],{"class":1567},[1097,8317,1571],{"class":1324},[1097,8319,1498],{"class":1324},[1097,8321,5639],{"class":1107},[1097,8323,5554],{"class":1324},[1097,8325,8326,8329,8331,8333,8336],{"class":1099,"line":3400},[1097,8327,8328],{"class":1567},"      class",[1097,8330,1571],{"class":1324},[1097,8332,1498],{"class":1324},[1097,8334,8335],{"class":1107},"w-fit",[1097,8337,5554],{"class":1324},[1097,8339,8340],{"class":1099,"line":3432},[1097,8341,8342],{"class":1324},"    \u002F>\n",[1097,8344,8345,8347,8349],{"class":1099,"line":3445},[1097,8346,1606],{"class":1324},[1097,8348,7863],{"class":1330},[1097,8350,1545],{"class":1324},[1097,8352,8353,8355,8357],{"class":1099,"line":3450},[1097,8354,1615],{"class":1324},[1097,8356,1542],{"class":1330},[1097,8358,1545],{"class":1324},[991,8360,8362],{"id":8361},"integrating-history-in-the-home-page","Integrating history in the home page",[1297,8364,8365],{},[1674,8366,8367],{},[1088,8368,8371],{"className":1529,"code":8369,"filename":5118,"highlights":8370,"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,8372,8373,8393,8409,8425,8429,8441,8463,8467,8479,8483,8487,8511,8525,8533,8541,8555,8591,8595,8599,8605,8609,8613,8635,8639,8647,8651,8659,8677,8691,8701,8710,8722,8740,8758,8762,8770,8774,8780,8792,8804,8816,8828,8840,8844,8862,8870,8878,8886,8894],{"__ignoreMap":1093},[1097,8374,8375,8377,8379,8381,8383,8385,8387,8389,8391],{"class":1099,"line":1100},[1097,8376,1539],{"class":1324},[1097,8378,5128],{"class":1330},[1097,8380,5131],{"class":1567},[1097,8382,5134],{"class":1567},[1097,8384,1571],{"class":1324},[1097,8386,1498],{"class":1324},[1097,8388,1303],{"class":1107},[1097,8390,1498],{"class":1324},[1097,8392,1545],{"class":1324},[1097,8394,8395,8397,8399,8401,8403,8405,8407],{"class":1099,"line":1117},[1097,8396,3046],{"class":1567},[1097,8398,5151],{"class":1320},[1097,8400,1571],{"class":1324},[1097,8402,5156],{"class":1120},[1097,8404,1321],{"class":1320},[1097,8406,5161],{"class":1324},[1097,8408,1459],{"class":1320},[1097,8410,8411,8413,8415,8417,8419,8421,8423],{"class":1099,"line":1340},[1097,8412,3046],{"class":1567},[1097,8414,5170],{"class":1320},[1097,8416,1571],{"class":1324},[1097,8418,5156],{"class":1120},[1097,8420,1321],{"class":1320},[1097,8422,5179],{"class":4183},[1097,8424,1459],{"class":1320},[1097,8426,8427],{"class":1099,"line":1355},[1097,8428,1389],{"emptyLinePlaceholder":21},[1097,8430,8431,8433,8435,8437,8439],{"class":1099,"line":1367},[1097,8432,2581],{"class":1567},[1097,8434,5192],{"class":1567},[1097,8436,5195],{"class":1120},[1097,8438,1784],{"class":1324},[1097,8440,1400],{"class":1324},[1097,8442,8443,8445,8447,8449,8451,8453,8455,8457,8459,8461],{"class":1099,"line":1378},[1097,8444,3546],{"class":1310},[1097,8446,1930],{"class":1330},[1097,8448,3551],{"class":1324},[1097,8450,5210],{"class":1320},[1097,8452,1787],{"class":1324},[1097,8454,3331],{"class":1320},[1097,8456,1787],{"class":1324},[1097,8458,5219],{"class":1120},[1097,8460,5222],{"class":1330},[1097,8462,5225],{"class":1310},[1097,8464,8465],{"class":1099,"line":1386},[1097,8466,1389],{"emptyLinePlaceholder":21},[1097,8468,8469,8471,8473,8475,8477],{"class":1099,"line":1392},[1097,8470,5234],{"class":1320},[1097,8472,1787],{"class":1324},[1097,8474,3331],{"class":1320},[1097,8476,2607],{"class":1324},[1097,8478,4369],{"class":4183},[1097,8480,8481],{"class":1099,"line":1403},[1097,8482,1389],{"emptyLinePlaceholder":21},[1097,8484,8485],{"class":1099,"line":1419},[1097,8486,5251],{"class":2675},[1097,8488,8489,8491,8493,8495,8497,8499,8501,8503,8505,8507,8509],{"class":1099,"line":1425},[1097,8490,2597],{"class":1567},[1097,8492,2775],{"class":1320},[1097,8494,2607],{"class":1324},[1097,8496,2610],{"class":1310},[1097,8498,5264],{"class":1120},[1097,8500,1321],{"class":1330},[1097,8502,1349],{"class":1324},[1097,8504,5271],{"class":1107},[1097,8506,1349],{"class":1324},[1097,8508,1695],{"class":1324},[1097,8510,1400],{"class":1324},[1097,8512,8513,8515,8517,8519,8521,8523],{"class":1099,"line":1430},[1097,8514,5282],{"class":1330},[1097,8516,1334],{"class":1324},[1097,8518,1411],{"class":1324},[1097,8520,5289],{"class":1107},[1097,8522,1349],{"class":1324},[1097,8524,1352],{"class":1324},[1097,8526,8527,8529,8531],{"class":1099,"line":1453},[1097,8528,5298],{"class":1330},[1097,8530,1334],{"class":1324},[1097,8532,1400],{"class":1324},[1097,8534,8535,8537,8539],{"class":1099,"line":1958},[1097,8536,3371],{"class":1330},[1097,8538,1334],{"class":1324},[1097,8540,1400],{"class":1324},[1097,8542,8543,8545,8547,8549,8551,8553],{"class":1099,"line":1985},[1097,8544,4511],{"class":1330},[1097,8546,1334],{"class":1324},[1097,8548,1411],{"class":1324},[1097,8550,2130],{"class":1107},[1097,8552,1349],{"class":1324},[1097,8554,1352],{"class":1324},[1097,8556,8557,8559,8561,8563,8565,8567,8569,8571,8573,8575,8577,8579,8581,8583,8585,8587,8589],{"class":1099,"line":2031},[1097,8558,4544],{"class":1330},[1097,8560,1334],{"class":1324},[1097,8562,1438],{"class":1330},[1097,8564,1844],{"class":1324},[1097,8566,2504],{"class":1330},[1097,8568,1334],{"class":1324},[1097,8570,1411],{"class":1324},[1097,8572,5343],{"class":1107},[1097,8574,1349],{"class":1324},[1097,8576,1695],{"class":1324},[1097,8578,1698],{"class":1330},[1097,8580,1334],{"class":1324},[1097,8582,5354],{"class":1320},[1097,8584,1787],{"class":1324},[1097,8586,3331],{"class":1320},[1097,8588,1711],{"class":1324},[1097,8590,3172],{"class":1330},[1097,8592,8593],{"class":1099,"line":2098},[1097,8594,4383],{"class":1324},[1097,8596,8597],{"class":1099,"line":2168},[1097,8598,4566],{"class":1324},[1097,8600,8601,8603],{"class":1099,"line":2208},[1097,8602,2398],{"class":1324},[1097,8604,1459],{"class":1330},[1097,8606,8607],{"class":1099,"line":2259},[1097,8608,1389],{"emptyLinePlaceholder":21},[1097,8610,8611],{"class":1099,"line":2272},[1097,8612,5385],{"class":2675},[1097,8614,8615,8617,8619,8621,8623,8625,8627,8629,8631,8633],{"class":1099,"line":2302},[1097,8616,5390],{"class":1120},[1097,8618,1321],{"class":1330},[1097,8620,3691],{"class":1324},[1097,8622,5397],{"class":1107},[1097,8624,5400],{"class":1324},[1097,8626,262],{"class":1320},[1097,8628,1787],{"class":1324},[1097,8630,1998],{"class":1320},[1097,8632,5409],{"class":1324},[1097,8634,1459],{"class":1330},[1097,8636,8637],{"class":1099,"line":2308},[1097,8638,5416],{"class":1324},[1097,8640,8641,8643,8645],{"class":1099,"line":2313},[1097,8642,1615],{"class":1324},[1097,8644,5128],{"class":1330},[1097,8646,1545],{"class":1324},[1097,8648,8649],{"class":1099,"line":2345},[1097,8650,1389],{"emptyLinePlaceholder":21},[1097,8652,8653,8655,8657],{"class":1099,"line":2361},[1097,8654,1539],{"class":1324},[1097,8656,1542],{"class":1330},[1097,8658,1545],{"class":1324},[1097,8660,8661,8663,8665,8667,8669,8671,8673,8675],{"class":1099,"line":2379},[1097,8662,1552],{"class":1324},[1097,8664,5443],{"class":1330},[1097,8666,5446],{"class":1567},[1097,8668,1571],{"class":1324},[1097,8670,1498],{"class":1324},[1097,8672,5453],{"class":1107},[1097,8674,1498],{"class":1324},[1097,8676,1545],{"class":1324},[1097,8678,8680,8682,8684,8686,8689],{"class":8679,"line":2395},[1099,1549],[1097,8681,1561],{"class":1324},[1097,8683,1542],{"class":1330},[1097,8685,5466],{"class":1324},[1097,8687,8688],{"class":1567},"header",[1097,8690,1545],{"class":1324},[1097,8692,8694,8696,8699],{"class":8693,"line":2403},[1099,1549],[1097,8695,1585],{"class":1324},[1097,8697,8698],{"class":1330},"ChatsHistory",[1097,8700,1591],{"class":1324},[1097,8702,8704,8706,8708],{"class":8703,"line":3383},[1099,1549],[1097,8705,1596],{"class":1324},[1097,8707,1542],{"class":1330},[1097,8709,1545],{"class":1324},[1097,8711,8712,8714,8716,8718,8720],{"class":1099,"line":3400},[1097,8713,1561],{"class":1324},[1097,8715,1542],{"class":1330},[1097,8717,5466],{"class":1324},[1097,8719,5469],{"class":1567},[1097,8721,1545],{"class":1324},[1097,8723,8724,8726,8728,8730,8732,8734,8736,8738],{"class":1099,"line":3432},[1097,8725,1585],{"class":1324},[1097,8727,5478],{"class":1330},[1097,8729,5481],{"class":1567},[1097,8731,1571],{"class":1324},[1097,8733,1498],{"class":1324},[1097,8735,5488],{"class":1107},[1097,8737,1498],{"class":1324},[1097,8739,1545],{"class":1324},[1097,8741,8742,8744,8746,8748,8750,8752,8754,8756],{"class":1099,"line":3445},[1097,8743,5497],{"class":1324},[1097,8745,5500],{"class":1330},[1097,8747,5481],{"class":1567},[1097,8749,1571],{"class":1324},[1097,8751,1498],{"class":1324},[1097,8753,5509],{"class":1107},[1097,8755,1498],{"class":1324},[1097,8757,1545],{"class":1324},[1097,8759,8760],{"class":1099,"line":3450},[1097,8761,5518],{"class":1320},[1097,8763,8764,8766,8768],{"class":1099,"line":3456},[1097,8765,5523],{"class":1324},[1097,8767,5500],{"class":1330},[1097,8769,1545],{"class":1324},[1097,8771,8772],{"class":1099,"line":3487},[1097,8773,1389],{"emptyLinePlaceholder":21},[1097,8775,8776,8778],{"class":1099,"line":3531},[1097,8777,5497],{"class":1324},[1097,8779,5539],{"class":1330},[1097,8781,8782,8784,8786,8788,8790],{"class":1099,"line":3538},[1097,8783,5545],{"class":1567},[1097,8785,1571],{"class":1324},[1097,8787,1498],{"class":1324},[1097,8789,5210],{"class":1107},[1097,8791,5554],{"class":1324},[1097,8793,8794,8796,8798,8800,8802],{"class":1099,"line":3543},[1097,8795,5560],{"class":1567},[1097,8797,1571],{"class":1324},[1097,8799,1498],{"class":1324},[1097,8801,5567],{"class":1107},[1097,8803,5554],{"class":1324},[1097,8805,8806,8808,8810,8812,8814],{"class":1099,"line":3561},[1097,8807,5575],{"class":1567},[1097,8809,1571],{"class":1324},[1097,8811,1498],{"class":1324},[1097,8813,5582],{"class":1107},[1097,8815,5554],{"class":1324},[1097,8817,8818,8820,8822,8824,8826],{"class":1099,"line":3600},[1097,8819,5590],{"class":1567},[1097,8821,1571],{"class":1324},[1097,8823,1498],{"class":1324},[1097,8825,5597],{"class":1107},[1097,8827,5554],{"class":1324},[1097,8829,8830,8832,8834,8836,8838],{"class":1099,"line":3606},[1097,8831,5605],{"class":1567},[1097,8833,1571],{"class":1324},[1097,8835,1498],{"class":1324},[1097,8837,5612],{"class":1107},[1097,8839,5554],{"class":1324},[1097,8841,8842],{"class":1099,"line":3611},[1097,8843,5620],{"class":1324},[1097,8845,8846,8848,8850,8852,8854,8856,8858,8860],{"class":1099,"line":3617},[1097,8847,5626],{"class":1324},[1097,8849,5629],{"class":1330},[1097,8851,5632],{"class":1567},[1097,8853,1571],{"class":1324},[1097,8855,1498],{"class":1324},[1097,8857,5639],{"class":1107},[1097,8859,1498],{"class":1324},[1097,8861,1591],{"class":1324},[1097,8863,8864,8866,8868],{"class":1099,"line":3637},[1097,8865,5523],{"class":1324},[1097,8867,5093],{"class":1330},[1097,8869,1545],{"class":1324},[1097,8871,8872,8874,8876],{"class":1099,"line":3665},[1097,8873,5657],{"class":1324},[1097,8875,5478],{"class":1330},[1097,8877,1545],{"class":1324},[1097,8879,8880,8882,8884],{"class":1099,"line":3677},[1097,8881,1596],{"class":1324},[1097,8883,1542],{"class":1330},[1097,8885,1545],{"class":1324},[1097,8887,8888,8890,8892],{"class":1099,"line":3696},[1097,8889,1606],{"class":1324},[1097,8891,5443],{"class":1330},[1097,8893,1545],{"class":1324},[1097,8895,8896,8898,8900],{"class":1099,"line":3724},[1097,8897,1615],{"class":1324},[1097,8899,1542],{"class":1330},[1097,8901,1545],{"class":1324},[991,8903,8905],{"id":8904},"integrating-history-in-the-chat-page","Integrating history in the chat page",[1297,8907,8908],{},[1674,8909,8910],{},[1088,8911,8914],{"className":1529,"code":8912,"filename":6119,"highlights":8913,"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=\"{ id, role, parts }\">\n            \u003Ctemplate v-for=\"(part, index) in parts\" :key=\"`${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=\"role === 'assistant'\"\n                  :markdown=\"part.text\"\n                  :streaming=\"isPartStreaming(part)\"\n                \u002F>\n                \u003Cp v-else-if=\"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,8915,8916,8936,8962,8980,8998,9002,9014,9026,9030,9034,9076,9080,9096,9136,9140,9144,9160,9164,9168,9184,9202,9220,9234,9258,9266,9278,9282,9306,9320,9324,9328,9340,9352,9366,9380,9392,9398,9402,9408,9412,9430,9440,9460,9486,9498,9502,9506,9510,9514,9526,9554,9564,9568,9574,9582,9586,9594,9612,9624,9632,9640,9652,9671,9678,9691,9703,9707,9719,9723,9755,9813,9819,9831,9843,9855,9859,9865,9877,9889,9893,9901,9905,9925,9931,9943,9955,9967,9971,9999,10003,10011,10019,10027,10035,10043,10047,10053,10065,10077,10089,10101,10113,10117,10123,10135,10147,10159,10171,10175,10183,10191,10199,10207],{"__ignoreMap":1093},[1097,8917,8918,8920,8922,8924,8926,8928,8930,8932,8934],{"class":1099,"line":1100},[1097,8919,1539],{"class":1324},[1097,8921,5128],{"class":1330},[1097,8923,5131],{"class":1567},[1097,8925,5134],{"class":1567},[1097,8927,1571],{"class":1324},[1097,8929,1498],{"class":1324},[1097,8931,1303],{"class":1107},[1097,8933,1498],{"class":1324},[1097,8935,1545],{"class":1324},[1097,8937,8938,8940,8942,8944,8946,8948,8950,8952,8954,8956,8958,8960],{"class":1099,"line":1117},[1097,8939,1686],{"class":1310},[1097,8941,1689],{"class":1324},[1097,8943,6152],{"class":1320},[1097,8945,1695],{"class":1324},[1097,8947,6157],{"class":1320},[1097,8949,1695],{"class":1324},[1097,8951,6162],{"class":1320},[1097,8953,1711],{"class":1324},[1097,8955,1714],{"class":1310},[1097,8957,1411],{"class":1324},[1097,8959,2518],{"class":1107},[1097,8961,1375],{"class":1324},[1097,8963,8964,8966,8968,8970,8972,8974,8976,8978],{"class":1099,"line":1340},[1097,8965,1686],{"class":1310},[1097,8967,1689],{"class":1324},[1097,8969,6182],{"class":1320},[1097,8971,1711],{"class":1324},[1097,8973,1714],{"class":1310},[1097,8975,1411],{"class":1324},[1097,8977,6191],{"class":1107},[1097,8979,1375],{"class":1324},[1097,8981,8982,8984,8986,8988,8990,8992,8994,8996],{"class":1099,"line":1355},[1097,8983,1686],{"class":1310},[1097,8985,1689],{"class":1324},[1097,8987,6203],{"class":1320},[1097,8989,1711],{"class":1324},[1097,8991,1714],{"class":1310},[1097,8993,1411],{"class":1324},[1097,8995,6212],{"class":1107},[1097,8997,1375],{"class":1324},[1097,8999,9000],{"class":1099,"line":1367},[1097,9001,1389],{"emptyLinePlaceholder":21},[1097,9003,9004,9006,9008,9010,9012],{"class":1099,"line":1378},[1097,9005,3046],{"class":1567},[1097,9007,6225],{"class":1320},[1097,9009,1571],{"class":1324},[1097,9011,6230],{"class":1120},[1097,9013,2653],{"class":1320},[1097,9015,9016,9018,9020,9022,9024],{"class":1099,"line":1386},[1097,9017,3046],{"class":1567},[1097,9019,6239],{"class":1320},[1097,9021,1571],{"class":1324},[1097,9023,6244],{"class":1120},[1097,9025,2653],{"class":1320},[1097,9027,9028],{"class":1099,"line":1392},[1097,9029,1389],{"emptyLinePlaceholder":21},[1097,9031,9032],{"class":1099,"line":1403},[1097,9033,6255],{"class":2675},[1097,9035,9036,9038,9040,9042,9044,9046,9048,9050,9052,9054,9056,9058,9060,9062,9064,9066,9068,9070,9072,9074],{"class":1099,"line":1419},[1097,9037,3046],{"class":1567},[1097,9039,1689],{"class":1324},[1097,9041,6264],{"class":1330},[1097,9043,1334],{"class":1324},[1097,9045,6269],{"class":1320},[1097,9047,1456],{"class":1324},[1097,9049,2607],{"class":1324},[1097,9051,2610],{"class":1310},[1097,9053,6278],{"class":1120},[1097,9055,1321],{"class":1320},[1097,9057,3691],{"class":1324},[1097,9059,6285],{"class":1107},[1097,9061,5400],{"class":1324},[1097,9063,6290],{"class":1320},[1097,9065,1787],{"class":1324},[1097,9067,6295],{"class":1320},[1097,9069,1787],{"class":1324},[1097,9071,1998],{"class":1320},[1097,9073,5409],{"class":1324},[1097,9075,1459],{"class":1320},[1097,9077,9078],{"class":1099,"line":1425},[1097,9079,1389],{"emptyLinePlaceholder":21},[1097,9081,9082,9084,9086,9088,9090,9092,9094],{"class":1099,"line":1430},[1097,9083,6312],{"class":1310},[1097,9085,1930],{"class":1320},[1097,9087,3551],{"class":1324},[1097,9089,6319],{"class":1320},[1097,9091,1787],{"class":1324},[1097,9093,6324],{"class":1320},[1097,9095,1325],{"class":1324},[1097,9097,9098,9100,9102,9104,9106,9108,9110,9112,9114,9116,9118,9120,9122,9124,9126,9128,9130,9132,9134],{"class":1099,"line":1453},[1097,9099,6331],{"class":1310},[1097,9101,2884],{"class":1120},[1097,9103,1321],{"class":1330},[1097,9105,1844],{"class":1324},[1097,9107,3573],{"class":1330},[1097,9109,1334],{"class":1324},[1097,9111,3579],{"class":3578},[1097,9113,1695],{"class":1324},[1097,9115,3584],{"class":1330},[1097,9117,1334],{"class":1324},[1097,9119,1411],{"class":1324},[1097,9121,3591],{"class":1107},[1097,9123,1349],{"class":1324},[1097,9125,1695],{"class":1324},[1097,9127,6360],{"class":1330},[1097,9129,1334],{"class":1324},[1097,9131,4184],{"class":4183},[1097,9133,1711],{"class":1324},[1097,9135,1459],{"class":1330},[1097,9137,9138],{"class":1099,"line":1958},[1097,9139,5416],{"class":1324},[1097,9141,9142],{"class":1099,"line":1985},[1097,9143,1389],{"emptyLinePlaceholder":21},[1097,9145,9146,9148,9150,9152,9154,9156,9158],{"class":1099,"line":2031},[1097,9147,3046],{"class":1567},[1097,9149,5151],{"class":1320},[1097,9151,1571],{"class":1324},[1097,9153,5156],{"class":1120},[1097,9155,1321],{"class":1320},[1097,9157,5161],{"class":1324},[1097,9159,1459],{"class":1320},[1097,9161,9162],{"class":1099,"line":2098},[1097,9163,1389],{"emptyLinePlaceholder":21},[1097,9165,9166],{"class":1099,"line":2168},[1097,9167,6401],{"class":2675},[1097,9169,9170,9172,9174,9176,9178,9180,9182],{"class":1099,"line":2208},[1097,9171,3046],{"class":1567},[1097,9173,6409],{"class":1320},[1097,9175,1571],{"class":1324},[1097,9177,1881],{"class":1324},[1097,9179,6182],{"class":1120},[1097,9181,1321],{"class":1320},[1097,9183,1325],{"class":1324},[1097,9185,9186,9188,9190,9192,9194,9196,9198,9200],{"class":1099,"line":2259},[1097,9187,1777],{"class":1330},[1097,9189,1334],{"class":1324},[1097,9191,6429],{"class":1320},[1097,9193,1787],{"class":1324},[1097,9195,3331],{"class":1320},[1097,9197,1787],{"class":1324},[1097,9199,1998],{"class":1320},[1097,9201,1352],{"class":1324},[1097,9203,9204,9206,9208,9210,9212,9214,9216,9218],{"class":1099,"line":2272},[1097,9205,1937],{"class":1330},[1097,9207,1334],{"class":1324},[1097,9209,6429],{"class":1320},[1097,9211,1787],{"class":1324},[1097,9213,3331],{"class":1320},[1097,9215,1787],{"class":1324},[1097,9217,1976],{"class":1320},[1097,9219,1352],{"class":1324},[1097,9221,9222,9224,9226,9228,9230,9232],{"class":1099,"line":2302},[1097,9223,6464],{"class":1330},[1097,9225,1334],{"class":1324},[1097,9227,1881],{"class":1324},[1097,9229,6152],{"class":1120},[1097,9231,1321],{"class":1320},[1097,9233,1325],{"class":1324},[1097,9235,9236,9238,9240,9242,9244,9246,9248,9250,9252,9254,9256],{"class":1099,"line":2308},[1097,9237,6480],{"class":1330},[1097,9239,1334],{"class":1324},[1097,9241,3685],{"class":1324},[1097,9243,6285],{"class":1107},[1097,9245,5400],{"class":1324},[1097,9247,6319],{"class":1320},[1097,9249,1787],{"class":1324},[1097,9251,3331],{"class":1320},[1097,9253,1787],{"class":1324},[1097,9255,1998],{"class":1320},[1097,9257,6501],{"class":1324},[1097,9259,9260,9262,9264],{"class":1099,"line":2313},[1097,9261,2398],{"class":1324},[1097,9263,1861],{"class":1320},[1097,9265,1352],{"class":1324},[1097,9267,9268,9270,9272,9274,9276],{"class":1099,"line":2345},[1097,9269,6516],{"class":1330},[1097,9271,1321],{"class":1324},[1097,9273,6521],{"class":1921},[1097,9275,1861],{"class":1324},[1097,9277,1400],{"class":1324},[1097,9279,9280],{"class":1099,"line":2361},[1097,9281,6531],{"class":2675},[1097,9283,9284,9286,9288,9290,9292,9294,9296,9298,9300,9302,9304],{"class":1099,"line":2379},[1097,9285,6537],{"class":1310},[1097,9287,1930],{"class":1330},[1097,9289,6521],{"class":1320},[1097,9291,1787],{"class":1324},[1097,9293,6546],{"class":1320},[1097,9295,3358],{"class":1324},[1097,9297,1411],{"class":1324},[1097,9299,4331],{"class":1107},[1097,9301,1349],{"class":1324},[1097,9303,3556],{"class":1330},[1097,9305,1325],{"class":1324},[1097,9307,9308,9310,9312,9314,9316,9318],{"class":1099,"line":2395},[1097,9309,6564],{"class":1120},[1097,9311,1321],{"class":1330},[1097,9313,1349],{"class":1324},[1097,9315,1766],{"class":1107},[1097,9317,1349],{"class":1324},[1097,9319,1459],{"class":1330},[1097,9321,9322],{"class":1099,"line":2403},[1097,9323,4566],{"class":1324},[1097,9325,9326],{"class":1099,"line":3383},[1097,9327,1422],{"class":1324},[1097,9329,9330,9332,9334,9336,9338],{"class":1099,"line":3400},[1097,9331,6590],{"class":1330},[1097,9333,1321],{"class":1324},[1097,9335,6595],{"class":1921},[1097,9337,1861],{"class":1324},[1097,9339,1400],{"class":1324},[1097,9341,9342,9344,9346,9348,9350],{"class":1099,"line":3432},[1097,9343,6605],{"class":1320},[1097,9345,1787],{"class":1324},[1097,9347,6610],{"class":1120},[1097,9349,1321],{"class":1330},[1097,9351,1325],{"class":1324},[1097,9353,9354,9356,9358,9360,9362,9364],{"class":1099,"line":3445},[1097,9355,6620],{"class":1330},[1097,9357,1334],{"class":1324},[1097,9359,1411],{"class":1324},[1097,9361,497],{"class":1107},[1097,9363,1349],{"class":1324},[1097,9365,1352],{"class":1324},[1097,9367,9368,9370,9372,9374,9376,9378],{"class":1099,"line":3450},[1097,9369,6636],{"class":1330},[1097,9371,1334],{"class":1324},[1097,9373,6641],{"class":1320},[1097,9375,1787],{"class":1324},[1097,9377,4483],{"class":1320},[1097,9379,1352],{"class":1324},[1097,9381,9382,9384,9386,9388,9390],{"class":1099,"line":3456},[1097,9383,6653],{"class":1330},[1097,9385,1334],{"class":1324},[1097,9387,1411],{"class":1324},[1097,9389,6595],{"class":1107},[1097,9391,1375],{"class":1324},[1097,9393,9394,9396],{"class":1099,"line":3487},[1097,9395,3386],{"class":1324},[1097,9397,1459],{"class":1330},[1097,9399,9400],{"class":1099,"line":3531},[1097,9401,3603],{"class":1324},[1097,9403,9404,9406],{"class":1099,"line":3538},[1097,9405,1456],{"class":1324},[1097,9407,1459],{"class":1320},[1097,9409,9410],{"class":1099,"line":3543},[1097,9411,1389],{"emptyLinePlaceholder":21},[1097,9413,9414,9416,9418,9420,9422,9424,9426,9428],{"class":1099,"line":3561},[1097,9415,6689],{"class":1567},[1097,9417,6692],{"class":1120},[1097,9419,1321],{"class":1324},[1097,9421,6697],{"class":1921},[1097,9423,1334],{"class":1324},[1097,9425,6702],{"class":1103},[1097,9427,1861],{"class":1324},[1097,9429,1400],{"class":1324},[1097,9431,9432,9434,9436,9438],{"class":1099,"line":3600},[1097,9433,6711],{"class":1320},[1097,9435,1787],{"class":1324},[1097,9437,6716],{"class":1120},[1097,9439,2653],{"class":1330},[1097,9441,9442,9444,9446,9448,9450,9452,9454,9456,9458],{"class":1099,"line":3606},[1097,9443,3546],{"class":1310},[1097,9445,1930],{"class":1330},[1097,9447,5210],{"class":1320},[1097,9449,1787],{"class":1324},[1097,9451,3331],{"class":1320},[1097,9453,1787],{"class":1324},[1097,9455,5219],{"class":1120},[1097,9457,5222],{"class":1330},[1097,9459,1325],{"class":1324},[1097,9461,9462,9464,9466,9468,9470,9472,9474,9476,9478,9480,9482,9484],{"class":1099,"line":3611},[1097,9463,6743],{"class":1320},[1097,9465,1787],{"class":1324},[1097,9467,6748],{"class":1120},[1097,9469,1321],{"class":1330},[1097,9471,1844],{"class":1324},[1097,9473,1698],{"class":1330},[1097,9475,1334],{"class":1324},[1097,9477,5354],{"class":1320},[1097,9479,1787],{"class":1324},[1097,9481,3331],{"class":1320},[1097,9483,1711],{"class":1324},[1097,9485,1459],{"class":1330},[1097,9487,9488,9490,9492,9494,9496],{"class":1099,"line":3617},[1097,9489,6771],{"class":1320},[1097,9491,1787],{"class":1324},[1097,9493,3331],{"class":1320},[1097,9495,2607],{"class":1324},[1097,9497,6780],{"class":1324},[1097,9499,9500],{"class":1099,"line":3637},[1097,9501,3603],{"class":1324},[1097,9503,9504],{"class":1099,"line":3665},[1097,9505,5416],{"class":1324},[1097,9507,9508],{"class":1099,"line":3677},[1097,9509,1389],{"emptyLinePlaceholder":21},[1097,9511,9512],{"class":1099,"line":3696},[1097,9513,6797],{"class":2675},[1097,9515,9516,9518,9520,9522,9524],{"class":1099,"line":3724},[1097,9517,6802],{"class":1120},[1097,9519,1321],{"class":1320},[1097,9521,1784],{"class":1324},[1097,9523,1804],{"class":1567},[1097,9525,1400],{"class":1324},[1097,9527,9528,9530,9532,9534,9536,9538,9540,9542,9544,9546,9548,9550,9552],{"class":1099,"line":3731},[1097,9529,3546],{"class":1310},[1097,9531,1930],{"class":1330},[1097,9533,6319],{"class":1320},[1097,9535,1787],{"class":1324},[1097,9537,3331],{"class":1320},[1097,9539,3857],{"class":1324},[1097,9541,1976],{"class":1320},[1097,9543,1787],{"class":1324},[1097,9545,3836],{"class":1320},[1097,9547,3358],{"class":1324},[1097,9549,3842],{"class":3578},[1097,9551,3556],{"class":1330},[1097,9553,1325],{"class":1324},[1097,9555,9556,9558,9560,9562],{"class":1099,"line":3736},[1097,9557,6743],{"class":1320},[1097,9559,1787],{"class":1324},[1097,9561,6847],{"class":1120},[1097,9563,2653],{"class":1330},[1097,9565,9566],{"class":1099,"line":3802},[1097,9567,3603],{"class":1324},[1097,9569,9570,9572],{"class":1099,"line":3807},[1097,9571,1456],{"class":1324},[1097,9573,1459],{"class":1320},[1097,9575,9576,9578,9580],{"class":1099,"line":3812},[1097,9577,1615],{"class":1324},[1097,9579,5128],{"class":1330},[1097,9581,1545],{"class":1324},[1097,9583,9584],{"class":1099,"line":3818},[1097,9585,1389],{"emptyLinePlaceholder":21},[1097,9587,9588,9590,9592],{"class":1099,"line":3847},[1097,9589,1539],{"class":1324},[1097,9591,1542],{"class":1330},[1097,9593,1545],{"class":1324},[1097,9595,9596,9598,9600,9602,9604,9606,9608,9610],{"class":1099,"line":3888},[1097,9597,1552],{"class":1324},[1097,9599,5443],{"class":1330},[1097,9601,5446],{"class":1567},[1097,9603,1571],{"class":1324},[1097,9605,1498],{"class":1324},[1097,9607,5453],{"class":1107},[1097,9609,1498],{"class":1324},[1097,9611,1545],{"class":1324},[1097,9613,9614,9616,9618,9620,9622],{"class":1099,"line":3917},[1097,9615,1561],{"class":1324},[1097,9617,1542],{"class":1330},[1097,9619,5466],{"class":1324},[1097,9621,8688],{"class":1567},[1097,9623,1545],{"class":1324},[1097,9625,9626,9628,9630],{"class":1099,"line":3929},[1097,9627,1585],{"class":1324},[1097,9629,8698],{"class":1330},[1097,9631,1591],{"class":1324},[1097,9633,9634,9636,9638],{"class":1099,"line":3945},[1097,9635,1596],{"class":1324},[1097,9637,1542],{"class":1330},[1097,9639,1545],{"class":1324},[1097,9641,9642,9644,9646,9648,9650],{"class":1099,"line":3959},[1097,9643,1561],{"class":1324},[1097,9645,1542],{"class":1330},[1097,9647,5466],{"class":1324},[1097,9649,5469],{"class":1567},[1097,9651,1545],{"class":1324},[1097,9653,9655,9657,9659,9661,9663,9665,9667,9669],{"class":9654,"line":3966},[1099,1549],[1097,9656,1585],{"class":1324},[1097,9658,5478],{"class":1330},[1097,9660,5481],{"class":1567},[1097,9662,1571],{"class":1324},[1097,9664,1498],{"class":1324},[1097,9666,6924],{"class":1107},[1097,9668,1498],{"class":1324},[1097,9670,1545],{"class":1324},[1097,9672,9674,9676],{"class":9673,"line":3971},[1099,1549],[1097,9675,5497],{"class":1324},[1097,9677,6935],{"class":1330},[1097,9679,9681,9683,9685,9687,9689],{"class":9680,"line":3976},[1099,1549],[1097,9682,6940],{"class":1567},[1097,9684,1571],{"class":1324},[1097,9686,1498],{"class":1324},[1097,9688,6947],{"class":1107},[1097,9690,5554],{"class":1324},[1097,9692,9693,9695,9697,9699,9701],{"class":1099,"line":3982},[1097,9694,5560],{"class":1567},[1097,9696,1571],{"class":1324},[1097,9698,1498],{"class":1324},[1097,9700,6960],{"class":1107},[1097,9702,5554],{"class":1324},[1097,9704,9705],{"class":1099,"line":3999},[1097,9706,6967],{"class":1567},[1097,9708,9709,9711,9713,9715,9717],{"class":1099,"line":4021},[1097,9710,6972],{"class":1567},[1097,9712,1571],{"class":1324},[1097,9714,1498],{"class":1324},[1097,9716,6979],{"class":1107},[1097,9718,5554],{"class":1324},[1097,9720,9721],{"class":1099,"line":4039},[1097,9722,5620],{"class":1324},[1097,9724,9725,9727,9729,9731,9733,9735,9737,9739,9741,9743,9745,9747,9749,9751,9753],{"class":1099,"line":4047},[1097,9726,5626],{"class":1324},[1097,9728,1542],{"class":1330},[1097,9730,5466],{"class":1324},[1097,9732,371],{"class":1567},[1097,9734,1571],{"class":1324},[1097,9736,1498],{"class":1324},[1097,9738,1844],{"class":1324},[1097,9740,3207],{"class":1320},[1097,9742,1695],{"class":1324},[1097,9744,7008],{"class":1320},[1097,9746,1695],{"class":1324},[1097,9748,7013],{"class":1320},[1097,9750,1456],{"class":1324},[1097,9752,1498],{"class":1324},[1097,9754,1545],{"class":1324},[1097,9756,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,9811],{"class":1099,"line":4064},[1097,9758,7024],{"class":1324},[1097,9760,1542],{"class":1330},[1097,9762,7029],{"class":1310},[1097,9764,1571],{"class":1324},[1097,9766,1498],{"class":1324},[1097,9768,7036],{"class":1320},[1097,9770,1695],{"class":1324},[1097,9772,7041],{"class":1320},[1097,9774,7044],{"class":1324},[1097,9776,7047],{"class":1320},[1097,9778,1498],{"class":1324},[1097,9780,7052],{"class":1324},[1097,9782,7055],{"class":1567},[1097,9784,1571],{"class":1324},[1097,9786,7060],{"class":1324},[1097,9788,1998],{"class":1320},[1097,9790,1456],{"class":1324},[1097,9792,7067],{"class":1107},[1097,9794,5400],{"class":1324},[1097,9796,7072],{"class":1320},[1097,9798,1787],{"class":1324},[1097,9800,6546],{"class":1320},[1097,9802,1456],{"class":1324},[1097,9804,7067],{"class":1107},[1097,9806,5400],{"class":1324},[1097,9808,7085],{"class":1320},[1097,9810,7088],{"class":1324},[1097,9812,1545],{"class":1324},[1097,9814,9815,9817],{"class":1099,"line":4085},[1097,9816,7095],{"class":1324},[1097,9818,7098],{"class":1330},[1097,9820,9821,9823,9825,9827,9829],{"class":1099,"line":4095},[1097,9822,7103],{"class":1567},[1097,9824,1571],{"class":1324},[1097,9826,1498],{"class":1324},[1097,9828,7110],{"class":1107},[1097,9830,5554],{"class":1324},[1097,9832,9833,9835,9837,9839,9841],{"class":1099,"line":4105},[1097,9834,7117],{"class":1567},[1097,9836,1571],{"class":1324},[1097,9838,1498],{"class":1324},[1097,9840,7124],{"class":1107},[1097,9842,5554],{"class":1324},[1097,9844,9845,9847,9849,9851,9853],{"class":1099,"line":4115},[1097,9846,7131],{"class":1567},[1097,9848,1571],{"class":1324},[1097,9850,1498],{"class":1324},[1097,9852,7138],{"class":1107},[1097,9854,5554],{"class":1324},[1097,9856,9857],{"class":1099,"line":4132},[1097,9858,7145],{"class":1324},[1097,9860,9861,9863],{"class":1099,"line":4143},[1097,9862,7150],{"class":1324},[1097,9864,7153],{"class":1330},[1097,9866,9867,9869,9871,9873,9875],{"class":1099,"line":4149},[1097,9868,7158],{"class":1567},[1097,9870,1571],{"class":1324},[1097,9872,1498],{"class":1324},[1097,9874,7124],{"class":1107},[1097,9876,5554],{"class":1324},[1097,9878,9879,9881,9883,9885,9887],{"class":1099,"line":4155},[1097,9880,7171],{"class":1567},[1097,9882,1571],{"class":1324},[1097,9884,1498],{"class":1324},[1097,9886,7138],{"class":1107},[1097,9888,5554],{"class":1324},[1097,9890,9891],{"class":1099,"line":4165},[1097,9892,7184],{"class":1324},[1097,9894,9895,9897,9899],{"class":1099,"line":4175},[1097,9896,7189],{"class":1324},[1097,9898,7192],{"class":1330},[1097,9900,1545],{"class":1324},[1097,9902,9903],{"class":1099,"line":4189},[1097,9904,1389],{"emptyLinePlaceholder":21},[1097,9906,9907,9909,9911,9913,9915,9917,9919,9921,9923],{"class":1099,"line":4204},[1097,9908,7095],{"class":1324},[1097,9910,1542],{"class":1330},[1097,9912,7207],{"class":1310},[1097,9914,1571],{"class":1324},[1097,9916,1498],{"class":1324},[1097,9918,7214],{"class":1120},[1097,9920,7217],{"class":1320},[1097,9922,1498],{"class":1324},[1097,9924,1545],{"class":1324},[1097,9926,9927,9929],{"class":1099,"line":4209},[1097,9928,7150],{"class":1324},[1097,9930,7153],{"class":1330},[1097,9932,9933,9935,9937,9939,9941],{"class":1099,"line":4214},[1097,9934,7232],{"class":1567},[1097,9936,1571],{"class":1324},[1097,9938,1498],{"class":1324},[1097,9940,7239],{"class":1107},[1097,9942,5554],{"class":1324},[1097,9944,9945,9947,9949,9951,9953],{"class":1099,"line":4224},[1097,9946,7158],{"class":1567},[1097,9948,1571],{"class":1324},[1097,9950,1498],{"class":1324},[1097,9952,7124],{"class":1107},[1097,9954,5554],{"class":1324},[1097,9956,9957,9959,9961,9963,9965],{"class":1099,"line":4240},[1097,9958,7171],{"class":1567},[1097,9960,1571],{"class":1324},[1097,9962,1498],{"class":1324},[1097,9964,7138],{"class":1107},[1097,9966,5554],{"class":1324},[1097,9968,9969],{"class":1099,"line":4255},[1097,9970,7184],{"class":1324},[1097,9972,9973,9975,9977,9979,9981,9983,9985,9987,9989,9991,9993,9995,9997],{"class":1099,"line":4261},[1097,9974,7150],{"class":1324},[1097,9976,987],{"class":1330},[1097,9978,7207],{"class":1567},[1097,9980,1571],{"class":1324},[1097,9982,1498],{"class":1324},[1097,9984,7284],{"class":1107},[1097,9986,1498],{"class":1324},[1097,9988,5481],{"class":1567},[1097,9990,1571],{"class":1324},[1097,9992,1498],{"class":1324},[1097,9994,7295],{"class":1107},[1097,9996,1498],{"class":1324},[1097,9998,1545],{"class":1324},[1097,10000,10001],{"class":1099,"line":4267},[1097,10002,7304],{"class":1320},[1097,10004,10005,10007,10009],{"class":1099,"line":4275},[1097,10006,7309],{"class":1324},[1097,10008,987],{"class":1330},[1097,10010,1545],{"class":1324},[1097,10012,10013,10015,10017],{"class":1099,"line":4280},[1097,10014,7189],{"class":1324},[1097,10016,1542],{"class":1330},[1097,10018,1545],{"class":1324},[1097,10020,10021,10023,10025],{"class":1099,"line":4286},[1097,10022,7326],{"class":1324},[1097,10024,1542],{"class":1330},[1097,10026,1545],{"class":1324},[1097,10028,10029,10031,10033],{"class":1099,"line":4306},[1097,10030,7335],{"class":1324},[1097,10032,1542],{"class":1330},[1097,10034,1545],{"class":1324},[1097,10036,10037,10039,10041],{"class":1099,"line":4321},[1097,10038,5523],{"class":1324},[1097,10040,5099],{"class":1330},[1097,10042,1545],{"class":1324},[1097,10044,10045],{"class":1099,"line":4338},[1097,10046,1389],{"emptyLinePlaceholder":21},[1097,10048,10049,10051],{"class":1099,"line":4361},[1097,10050,5497],{"class":1324},[1097,10052,5539],{"class":1330},[1097,10054,10055,10057,10059,10061,10063],{"class":1099,"line":4372},[1097,10056,5545],{"class":1567},[1097,10058,1571],{"class":1324},[1097,10060,1498],{"class":1324},[1097,10062,5210],{"class":1107},[1097,10064,5554],{"class":1324},[1097,10066,10067,10069,10071,10073,10075],{"class":1099,"line":4380},[1097,10068,7374],{"class":1567},[1097,10070,1571],{"class":1324},[1097,10072,1498],{"class":1324},[1097,10074,7381],{"class":1107},[1097,10076,5554],{"class":1324},[1097,10078,10079,10081,10083,10085,10087],{"class":1099,"line":4386},[1097,10080,5575],{"class":1567},[1097,10082,1571],{"class":1324},[1097,10084,1498],{"class":1324},[1097,10086,5582],{"class":1107},[1097,10088,5554],{"class":1324},[1097,10090,10091,10093,10095,10097,10099],{"class":1099,"line":4391},[1097,10092,6972],{"class":1567},[1097,10094,1571],{"class":1324},[1097,10096,1498],{"class":1324},[1097,10098,7406],{"class":1107},[1097,10100,5554],{"class":1324},[1097,10102,10103,10105,10107,10109,10111],{"class":1099,"line":4414},[1097,10104,5605],{"class":1567},[1097,10106,1571],{"class":1324},[1097,10108,1498],{"class":1324},[1097,10110,7419],{"class":1107},[1097,10112,5554],{"class":1324},[1097,10114,10115],{"class":1099,"line":4420},[1097,10116,5620],{"class":1324},[1097,10118,10119,10121],{"class":1099,"line":4440},[1097,10120,5626],{"class":1324},[1097,10122,7432],{"class":1330},[1097,10124,10125,10127,10129,10131,10133],{"class":1099,"line":4446},[1097,10126,7437],{"class":1567},[1097,10128,1571],{"class":1324},[1097,10130,1498],{"class":1324},[1097,10132,6960],{"class":1107},[1097,10134,5554],{"class":1324},[1097,10136,10137,10139,10141,10143,10145],{"class":1099,"line":4492},[1097,10138,7450],{"class":1567},[1097,10140,1571],{"class":1324},[1097,10142,1498],{"class":1324},[1097,10144,5639],{"class":1107},[1097,10146,5554],{"class":1324},[1097,10148,10149,10151,10153,10155,10157],{"class":1099,"line":4508},[1097,10150,7463],{"class":1567},[1097,10152,1571],{"class":1324},[1097,10154,1498],{"class":1324},[1097,10156,7470],{"class":1107},[1097,10158,5554],{"class":1324},[1097,10160,10161,10163,10165,10167,10169],{"class":1099,"line":4541},[1097,10162,7477],{"class":1567},[1097,10164,1571],{"class":1324},[1097,10166,1498],{"class":1324},[1097,10168,7484],{"class":1107},[1097,10170,5554],{"class":1324},[1097,10172,10173],{"class":1099,"line":4555},[1097,10174,7491],{"class":1324},[1097,10176,10177,10179,10181],{"class":1099,"line":4563},[1097,10178,5523],{"class":1324},[1097,10180,5093],{"class":1330},[1097,10182,1545],{"class":1324},[1097,10184,10185,10187,10189],{"class":1099,"line":4569},[1097,10186,5657],{"class":1324},[1097,10188,5478],{"class":1330},[1097,10190,1545],{"class":1324},[1097,10192,10193,10195,10197],{"class":1099,"line":4576},[1097,10194,1596],{"class":1324},[1097,10196,1542],{"class":1330},[1097,10198,1545],{"class":1324},[1097,10200,10201,10203,10205],{"class":1099,"line":4581},[1097,10202,1606],{"class":1324},[1097,10204,5443],{"class":1330},[1097,10206,1545],{"class":1324},[1097,10208,10209,10211,10213],{"class":1099,"line":4599},[1097,10210,1615],{"class":1324},[1097,10212,1542],{"class":1330},[1097,10214,1545],{"class":1324},[987,10216,4642,10217,10220,10221,10223],{},[1047,10218,10219],{},"refreshNuxtData('chats')"," call in the chat page's ",[1047,10222,7593],{}," callback (as shown earlier) ensures the chat list updates automatically when a new title is generated.",[991,10225,10227],{"id":10226},"adding-multi-model-support","Adding multi-model support",[987,10229,10230,10231,10234],{},"One of the benefits of using ",[1041,10232,4611],{"href":1076,"rel":10233},[1045]," is the ability to switch between models seamlessly. This section adds a model selector to the chat.",[1125,10236,10238],{"id":10237},"creating-a-models-composable","Creating a models composable",[987,10240,10241,10242,1334],{},"Define the available models and persist the user's selection using ",[1041,10243,10246],{"href":10244,"rel":10245},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-cookie",[1045],[1047,10247,10248],{},"useCookie",[1297,10250,10251],{},[1088,10252,10255],{"className":1301,"code":10253,"filename":10254,"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,10256,10257,10270,10281,10327,10371,10415,10420,10424,10454,10471,10477,10481,10487,10494,10499,10503],{"__ignoreMap":1093},[1097,10258,10259,10261,10263,10266,10268],{"class":1099,"line":1100},[1097,10260,1311],{"class":1310},[1097,10262,5192],{"class":1567},[1097,10264,10265],{"class":1120}," useModels",[1097,10267,1784],{"class":1324},[1097,10269,1400],{"class":1324},[1097,10271,10272,10274,10277,10279],{"class":1099,"line":1117},[1097,10273,2597],{"class":1567},[1097,10275,10276],{"class":1320}," models",[1097,10278,2607],{"class":1324},[1097,10280,1337],{"class":1330},[1097,10282,10283,10286,10288,10290,10292,10294,10296,10298,10300,10302,10304,10306,10308,10310,10313,10315,10317,10323,10325],{"class":1099,"line":1340},[1097,10284,10285],{"class":1324},"    {",[1097,10287,3095],{"class":1330},[1097,10289,1334],{"class":1324},[1097,10291,1411],{"class":1324},[1097,10293,3102],{"class":1107},[1097,10295,1349],{"class":1324},[1097,10297,1695],{"class":1324},[1097,10299,3081],{"class":1330},[1097,10301,1334],{"class":1324},[1097,10303,1411],{"class":1324},[1097,10305,3088],{"class":1107},[1097,10307,1349],{"class":1324},[1097,10309,1695],{"class":1324},[1097,10311,10312],{"class":1330}," icon",[1097,10314,1334],{"class":1324},[1097,10316,1411],{"class":1324},[1097,10318,10319,10322],{"class":1107},[8065,10320],{"class":10321},"shiki-icon-highlight sh9xi","i-simple-icons-openai",[1097,10324,1349],{"class":1324},[1097,10326,3107],{"class":1324},[1097,10328,10329,10331,10333,10335,10337,10339,10341,10343,10345,10347,10349,10351,10353,10355,10357,10359,10361,10367,10369],{"class":1099,"line":1355},[1097,10330,10285],{"class":1324},[1097,10332,3095],{"class":1330},[1097,10334,1334],{"class":1324},[1097,10336,1411],{"class":1324},[1097,10338,3132],{"class":1107},[1097,10340,1349],{"class":1324},[1097,10342,1695],{"class":1324},[1097,10344,3081],{"class":1330},[1097,10346,1334],{"class":1324},[1097,10348,1411],{"class":1324},[1097,10350,3056],{"class":1107},[1097,10352,1349],{"class":1324},[1097,10354,1695],{"class":1324},[1097,10356,10312],{"class":1330},[1097,10358,1334],{"class":1324},[1097,10360,1411],{"class":1324},[1097,10362,10363,10366],{"class":1107},[8065,10364],{"class":10365},"shiki-icon-highlight sNknm","i-simple-icons-anthropic",[1097,10368,1349],{"class":1324},[1097,10370,3107],{"class":1324},[1097,10372,10373,10375,10377,10379,10381,10383,10385,10387,10389,10391,10393,10395,10397,10399,10401,10403,10405,10411,10413],{"class":1099,"line":1367},[1097,10374,10285],{"class":1324},[1097,10376,3095],{"class":1330},[1097,10378,1334],{"class":1324},[1097,10380,1411],{"class":1324},[1097,10382,3162],{"class":1107},[1097,10384,1349],{"class":1324},[1097,10386,1695],{"class":1324},[1097,10388,3081],{"class":1330},[1097,10390,1334],{"class":1324},[1097,10392,1411],{"class":1324},[1097,10394,3149],{"class":1107},[1097,10396,1349],{"class":1324},[1097,10398,1695],{"class":1324},[1097,10400,10312],{"class":1330},[1097,10402,1334],{"class":1324},[1097,10404,1411],{"class":1324},[1097,10406,10407,10410],{"class":1107},[8065,10408],{"class":10409},"shiki-icon-highlight scZL3","i-simple-icons-google",[1097,10412,1349],{"class":1324},[1097,10414,3167],{"class":1324},[1097,10416,10417],{"class":1099,"line":1378},[1097,10418,10419],{"class":1330},"  ]\n",[1097,10421,10422],{"class":1099,"line":1386},[1097,10423,1389],{"emptyLinePlaceholder":21},[1097,10425,10426,10428,10430,10432,10435,10437,10439,10441,10443,10445,10448,10450,10452],{"class":1099,"line":1392},[1097,10427,2597],{"class":1567},[1097,10429,3272],{"class":1320},[1097,10431,2607],{"class":1324},[1097,10433,10434],{"class":1120}," useCookie",[1097,10436,1539],{"class":1324},[1097,10438,3245],{"class":1103},[1097,10440,2650],{"class":1324},[1097,10442,1321],{"class":1330},[1097,10444,1349],{"class":1324},[1097,10446,10447],{"class":1107},"ai-model",[1097,10449,1349],{"class":1324},[1097,10451,1695],{"class":1324},[1097,10453,1400],{"class":1324},[1097,10455,10456,10459,10461,10463,10465,10467,10469],{"class":1099,"line":1403},[1097,10457,10458],{"class":1120},"    default",[1097,10460,1334],{"class":1324},[1097,10462,4978],{"class":1324},[1097,10464,1804],{"class":1567},[1097,10466,1411],{"class":1324},[1097,10468,3056],{"class":1107},[1097,10470,1375],{"class":1324},[1097,10472,10473,10475],{"class":1099,"line":1419},[1097,10474,2398],{"class":1324},[1097,10476,1459],{"class":1330},[1097,10478,10479],{"class":1099,"line":1425},[1097,10480,1389],{"emptyLinePlaceholder":21},[1097,10482,10483,10485],{"class":1099,"line":1430},[1097,10484,2825],{"class":1310},[1097,10486,1400],{"class":1324},[1097,10488,10489,10492],{"class":1099,"line":1453},[1097,10490,10491],{"class":1320},"    models",[1097,10493,1352],{"class":1324},[1097,10495,10496],{"class":1099,"line":1958},[1097,10497,10498],{"class":1320},"    model\n",[1097,10500,10501],{"class":1099,"line":1985},[1097,10502,3603],{"class":1324},[1097,10504,10505],{"class":1099,"line":2031},[1097,10506,5416],{"class":1324},[1125,10508,10510],{"id":10509},"building-the-model-selector","Building the model selector",[987,10512,1622,10513,10518],{},[1041,10514,10515],{"href":740},[1047,10516,10517],{},"USelectMenu"," component that displays the available models:",[1297,10520,10521],{},[1088,10522,10525],{"className":1529,"code":10523,"filename":10524,"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,10526,10527,10547,10580,10584,10601,10605,10623,10655,10659,10667,10671,10679,10686,10699,10713,10727,10740,10753,10758],{"__ignoreMap":1093},[1097,10528,10529,10531,10533,10535,10537,10539,10541,10543,10545],{"class":1099,"line":1100},[1097,10530,1539],{"class":1324},[1097,10532,5128],{"class":1330},[1097,10534,5131],{"class":1567},[1097,10536,5134],{"class":1567},[1097,10538,1571],{"class":1324},[1097,10540,1498],{"class":1324},[1097,10542,1303],{"class":1107},[1097,10544,1498],{"class":1324},[1097,10546,1545],{"class":1324},[1097,10548,10549,10551,10554,10556,10559,10561,10563,10565,10567,10569,10572,10574,10576,10578],{"class":1099,"line":1117},[1097,10550,3046],{"class":1567},[1097,10552,10553],{"class":1320}," model ",[1097,10555,1571],{"class":1324},[1097,10557,10558],{"class":1120}," defineModel",[1097,10560,1539],{"class":1324},[1097,10562,3245],{"class":1103},[1097,10564,2650],{"class":1324},[1097,10566,1321],{"class":1320},[1097,10568,1844],{"class":1324},[1097,10570,10571],{"class":1330}," required",[1097,10573,1334],{"class":1324},[1097,10575,4184],{"class":4183},[1097,10577,1711],{"class":1324},[1097,10579,1459],{"class":1320},[1097,10581,10582],{"class":1099,"line":1340},[1097,10583,1389],{"emptyLinePlaceholder":21},[1097,10585,10586,10588,10590,10593,10595,10597,10599],{"class":1099,"line":1355},[1097,10587,3046],{"class":1567},[1097,10589,1689],{"class":1324},[1097,10591,10592],{"class":1320}," models ",[1097,10594,1456],{"class":1324},[1097,10596,2607],{"class":1324},[1097,10598,10265],{"class":1120},[1097,10600,2653],{"class":1320},[1097,10602,10603],{"class":1099,"line":1367},[1097,10604,1389],{"emptyLinePlaceholder":21},[1097,10606,10607,10609,10612,10614,10616,10618,10620],{"class":1099,"line":1378},[1097,10608,3046],{"class":1567},[1097,10610,10611],{"class":1320}," selectedModel ",[1097,10613,1571],{"class":1324},[1097,10615,8007],{"class":1120},[1097,10617,1321],{"class":1320},[1097,10619,1784],{"class":1324},[1097,10621,10622],{"class":1567}," =>\n",[1097,10624,10625,10628,10630,10633,10635,10637,10639,10641,10643,10646,10648,10650,10652],{"class":1099,"line":1386},[1097,10626,10627],{"class":1320},"  models",[1097,10629,1787],{"class":1324},[1097,10631,10632],{"class":1120},"find",[1097,10634,1321],{"class":1320},[1097,10636,3346],{"class":1921},[1097,10638,1804],{"class":1567},[1097,10640,3351],{"class":1320},[1097,10642,1787],{"class":1324},[1097,10644,10645],{"class":1320},"value ",[1097,10647,8090],{"class":1324},[1097,10649,3272],{"class":1320},[1097,10651,1787],{"class":1324},[1097,10653,10654],{"class":1320},"value)\n",[1097,10656,10657],{"class":1099,"line":1392},[1097,10658,1459],{"class":1320},[1097,10660,10661,10663,10665],{"class":1099,"line":1403},[1097,10662,1615],{"class":1324},[1097,10664,5128],{"class":1330},[1097,10666,1545],{"class":1324},[1097,10668,10669],{"class":1099,"line":1419},[1097,10670,1389],{"emptyLinePlaceholder":21},[1097,10672,10673,10675,10677],{"class":1099,"line":1425},[1097,10674,1539],{"class":1324},[1097,10676,1542],{"class":1330},[1097,10678,1545],{"class":1324},[1097,10680,10681,10683],{"class":1099,"line":1430},[1097,10682,1552],{"class":1324},[1097,10684,10685],{"class":1330},"USelectMenu\n",[1097,10687,10688,10691,10693,10695,10697],{"class":1099,"line":1453},[1097,10689,10690],{"class":1567},"    v-model",[1097,10692,1571],{"class":1324},[1097,10694,1498],{"class":1324},[1097,10696,4655],{"class":1107},[1097,10698,5554],{"class":1324},[1097,10700,10701,10704,10706,10708,10711],{"class":1099,"line":1958},[1097,10702,10703],{"class":1567},"    :items",[1097,10705,1571],{"class":1324},[1097,10707,1498],{"class":1324},[1097,10709,10710],{"class":1107},"models",[1097,10712,5554],{"class":1324},[1097,10714,10715,10718,10720,10722,10725],{"class":1099,"line":1985},[1097,10716,10717],{"class":1567},"    :icon",[1097,10719,1571],{"class":1324},[1097,10721,1498],{"class":1324},[1097,10723,10724],{"class":1107},"selectedModel?.icon",[1097,10726,5554],{"class":1324},[1097,10728,10729,10732,10734,10736,10738],{"class":1099,"line":2031},[1097,10730,10731],{"class":1567},"    variant",[1097,10733,1571],{"class":1324},[1097,10735,1498],{"class":1324},[1097,10737,8295],{"class":1107},[1097,10739,5554],{"class":1324},[1097,10741,10742,10745,10747,10749,10751],{"class":1099,"line":2098},[1097,10743,10744],{"class":1567},"    value-key",[1097,10746,1571],{"class":1324},[1097,10748,1498],{"class":1324},[1097,10750,3331],{"class":1107},[1097,10752,5554],{"class":1324},[1097,10754,10755],{"class":1099,"line":2168},[1097,10756,10757],{"class":1324},"  \u002F>\n",[1097,10759,10760,10762,10764],{"class":1099,"line":2208},[1097,10761,1615],{"class":1324},[1097,10763,1542],{"class":1330},[1097,10765,1545],{"class":1324},[1125,10767,10769],{"id":10768},"integrating-with-the-chat","Integrating with the chat",[987,10771,10772],{},"Update the chat page to include the model selector and pass the selected model to the server:",[1297,10774,10775],{},[1674,10776,10777],{},[1088,10778,10781],{"className":1529,"code":10779,"filename":6119,"highlights":10780,"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=\"{ id, role, parts }\">\n            \u003Ctemplate v-for=\"(part, index) in parts\" :key=\"`${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=\"role === 'assistant'\"\n                  :markdown=\"part.text\"\n                  :streaming=\"isPartStreaming(part)\"\n                \u002F>\n                \u003Cp v-else-if=\"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,10782,10783,10803,10829,10847,10865,10869,10881,10893,10910,10914,10956,10960,10976,11016,11020,11024,11040,11044,11060,11078,11096,11110,11136,11144,11160,11165,11174,11186,11210,11224,11228,11232,11244,11256,11270,11284,11296,11302,11306,11312,11316,11334,11344,11364,11390,11402,11406,11410,11414,11426,11454,11464,11468,11474,11482,11486,11494,11512,11524,11532,11540,11552,11570,11576,11588,11600,11604,11616,11620,11652,11710,11716,11728,11740,11752,11756,11762,11774,11786,11790,11798,11802,11822,11828,11840,11852,11864,11868,11896,11900,11908,11916,11924,11932,11941,11946,11953,11965,11977,11989,12001,12013,12017,12030,12050,12058,12062,12068,12080,12092,12104,12116,12120,12128,12137,12146,12155],{"__ignoreMap":1093},[1097,10784,10785,10787,10789,10791,10793,10795,10797,10799,10801],{"class":1099,"line":1100},[1097,10786,1539],{"class":1324},[1097,10788,5128],{"class":1330},[1097,10790,5131],{"class":1567},[1097,10792,5134],{"class":1567},[1097,10794,1571],{"class":1324},[1097,10796,1498],{"class":1324},[1097,10798,1303],{"class":1107},[1097,10800,1498],{"class":1324},[1097,10802,1545],{"class":1324},[1097,10804,10805,10807,10809,10811,10813,10815,10817,10819,10821,10823,10825,10827],{"class":1099,"line":1117},[1097,10806,1686],{"class":1310},[1097,10808,1689],{"class":1324},[1097,10810,6152],{"class":1320},[1097,10812,1695],{"class":1324},[1097,10814,6157],{"class":1320},[1097,10816,1695],{"class":1324},[1097,10818,6162],{"class":1320},[1097,10820,1711],{"class":1324},[1097,10822,1714],{"class":1310},[1097,10824,1411],{"class":1324},[1097,10826,2518],{"class":1107},[1097,10828,1375],{"class":1324},[1097,10830,10831,10833,10835,10837,10839,10841,10843,10845],{"class":1099,"line":1340},[1097,10832,1686],{"class":1310},[1097,10834,1689],{"class":1324},[1097,10836,6182],{"class":1320},[1097,10838,1711],{"class":1324},[1097,10840,1714],{"class":1310},[1097,10842,1411],{"class":1324},[1097,10844,6191],{"class":1107},[1097,10846,1375],{"class":1324},[1097,10848,10849,10851,10853,10855,10857,10859,10861,10863],{"class":1099,"line":1355},[1097,10850,1686],{"class":1310},[1097,10852,1689],{"class":1324},[1097,10854,6203],{"class":1320},[1097,10856,1711],{"class":1324},[1097,10858,1714],{"class":1310},[1097,10860,1411],{"class":1324},[1097,10862,6212],{"class":1107},[1097,10864,1375],{"class":1324},[1097,10866,10867],{"class":1099,"line":1367},[1097,10868,1389],{"emptyLinePlaceholder":21},[1097,10870,10871,10873,10875,10877,10879],{"class":1099,"line":1378},[1097,10872,3046],{"class":1567},[1097,10874,6225],{"class":1320},[1097,10876,1571],{"class":1324},[1097,10878,6230],{"class":1120},[1097,10880,2653],{"class":1320},[1097,10882,10883,10885,10887,10889,10891],{"class":1099,"line":1386},[1097,10884,3046],{"class":1567},[1097,10886,6239],{"class":1320},[1097,10888,1571],{"class":1324},[1097,10890,6244],{"class":1120},[1097,10892,2653],{"class":1320},[1097,10894,10896,10898,10900,10902,10904,10906,10908],{"class":10895,"line":1392},[1099,1549],[1097,10897,3046],{"class":1567},[1097,10899,1689],{"class":1324},[1097,10901,10553],{"class":1320},[1097,10903,1456],{"class":1324},[1097,10905,2607],{"class":1324},[1097,10907,10265],{"class":1120},[1097,10909,2653],{"class":1320},[1097,10911,10912],{"class":1099,"line":1403},[1097,10913,1389],{"emptyLinePlaceholder":21},[1097,10915,10916,10918,10920,10922,10924,10926,10928,10930,10932,10934,10936,10938,10940,10942,10944,10946,10948,10950,10952,10954],{"class":1099,"line":1419},[1097,10917,3046],{"class":1567},[1097,10919,1689],{"class":1324},[1097,10921,6264],{"class":1330},[1097,10923,1334],{"class":1324},[1097,10925,6269],{"class":1320},[1097,10927,1456],{"class":1324},[1097,10929,2607],{"class":1324},[1097,10931,2610],{"class":1310},[1097,10933,6278],{"class":1120},[1097,10935,1321],{"class":1320},[1097,10937,3691],{"class":1324},[1097,10939,6285],{"class":1107},[1097,10941,5400],{"class":1324},[1097,10943,6290],{"class":1320},[1097,10945,1787],{"class":1324},[1097,10947,6295],{"class":1320},[1097,10949,1787],{"class":1324},[1097,10951,1998],{"class":1320},[1097,10953,5409],{"class":1324},[1097,10955,1459],{"class":1320},[1097,10957,10958],{"class":1099,"line":1425},[1097,10959,1389],{"emptyLinePlaceholder":21},[1097,10961,10962,10964,10966,10968,10970,10972,10974],{"class":1099,"line":1430},[1097,10963,6312],{"class":1310},[1097,10965,1930],{"class":1320},[1097,10967,3551],{"class":1324},[1097,10969,6319],{"class":1320},[1097,10971,1787],{"class":1324},[1097,10973,6324],{"class":1320},[1097,10975,1325],{"class":1324},[1097,10977,10978,10980,10982,10984,10986,10988,10990,10992,10994,10996,10998,11000,11002,11004,11006,11008,11010,11012,11014],{"class":1099,"line":1453},[1097,10979,6331],{"class":1310},[1097,10981,2884],{"class":1120},[1097,10983,1321],{"class":1330},[1097,10985,1844],{"class":1324},[1097,10987,3573],{"class":1330},[1097,10989,1334],{"class":1324},[1097,10991,3579],{"class":3578},[1097,10993,1695],{"class":1324},[1097,10995,3584],{"class":1330},[1097,10997,1334],{"class":1324},[1097,10999,1411],{"class":1324},[1097,11001,3591],{"class":1107},[1097,11003,1349],{"class":1324},[1097,11005,1695],{"class":1324},[1097,11007,6360],{"class":1330},[1097,11009,1334],{"class":1324},[1097,11011,4184],{"class":4183},[1097,11013,1711],{"class":1324},[1097,11015,1459],{"class":1330},[1097,11017,11018],{"class":1099,"line":1958},[1097,11019,5416],{"class":1324},[1097,11021,11022],{"class":1099,"line":1985},[1097,11023,1389],{"emptyLinePlaceholder":21},[1097,11025,11026,11028,11030,11032,11034,11036,11038],{"class":1099,"line":2031},[1097,11027,3046],{"class":1567},[1097,11029,5151],{"class":1320},[1097,11031,1571],{"class":1324},[1097,11033,5156],{"class":1120},[1097,11035,1321],{"class":1320},[1097,11037,5161],{"class":1324},[1097,11039,1459],{"class":1320},[1097,11041,11042],{"class":1099,"line":2098},[1097,11043,1389],{"emptyLinePlaceholder":21},[1097,11045,11046,11048,11050,11052,11054,11056,11058],{"class":1099,"line":2168},[1097,11047,3046],{"class":1567},[1097,11049,6409],{"class":1320},[1097,11051,1571],{"class":1324},[1097,11053,1881],{"class":1324},[1097,11055,6182],{"class":1120},[1097,11057,1321],{"class":1320},[1097,11059,1325],{"class":1324},[1097,11061,11062,11064,11066,11068,11070,11072,11074,11076],{"class":1099,"line":2208},[1097,11063,1777],{"class":1330},[1097,11065,1334],{"class":1324},[1097,11067,6429],{"class":1320},[1097,11069,1787],{"class":1324},[1097,11071,3331],{"class":1320},[1097,11073,1787],{"class":1324},[1097,11075,1998],{"class":1320},[1097,11077,1352],{"class":1324},[1097,11079,11080,11082,11084,11086,11088,11090,11092,11094],{"class":1099,"line":2259},[1097,11081,1937],{"class":1330},[1097,11083,1334],{"class":1324},[1097,11085,6429],{"class":1320},[1097,11087,1787],{"class":1324},[1097,11089,3331],{"class":1320},[1097,11091,1787],{"class":1324},[1097,11093,1976],{"class":1320},[1097,11095,1352],{"class":1324},[1097,11097,11098,11100,11102,11104,11106,11108],{"class":1099,"line":2272},[1097,11099,6464],{"class":1330},[1097,11101,1334],{"class":1324},[1097,11103,1881],{"class":1324},[1097,11105,6152],{"class":1120},[1097,11107,1321],{"class":1320},[1097,11109,1325],{"class":1324},[1097,11111,11112,11114,11116,11118,11120,11122,11124,11126,11128,11130,11132,11134],{"class":1099,"line":2302},[1097,11113,6480],{"class":1330},[1097,11115,1334],{"class":1324},[1097,11117,3685],{"class":1324},[1097,11119,6285],{"class":1107},[1097,11121,5400],{"class":1324},[1097,11123,6319],{"class":1320},[1097,11125,1787],{"class":1324},[1097,11127,3331],{"class":1320},[1097,11129,1787],{"class":1324},[1097,11131,1998],{"class":1320},[1097,11133,5409],{"class":1324},[1097,11135,1352],{"class":1324},[1097,11137,11138,11140,11142],{"class":1099,"line":2308},[1097,11139,5298],{"class":1330},[1097,11141,1334],{"class":1324},[1097,11143,1400],{"class":1324},[1097,11145,11147,11149,11151,11153,11155,11157],{"class":11146,"line":2313},[1099,1549],[1097,11148,3668],{"class":1330},[1097,11150,1334],{"class":1324},[1097,11152,3272],{"class":1320},[1097,11154,1787],{"class":1324},[1097,11156,10645],{"class":1320},[1097,11158,11159],{"class":2675},"\u002F\u002F Pass the selected model\n",[1097,11161,11163],{"class":11162,"line":2345},[1099,1549],[1097,11164,4566],{"class":1324},[1097,11166,11168,11170,11172],{"class":11167,"line":2361},[1099,1549],[1097,11169,2398],{"class":1324},[1097,11171,1861],{"class":1320},[1097,11173,1352],{"class":1324},[1097,11175,11176,11178,11180,11182,11184],{"class":1099,"line":2379},[1097,11177,6516],{"class":1330},[1097,11179,1321],{"class":1324},[1097,11181,6521],{"class":1921},[1097,11183,1861],{"class":1324},[1097,11185,1400],{"class":1324},[1097,11187,11188,11190,11192,11194,11196,11198,11200,11202,11204,11206,11208],{"class":1099,"line":2395},[1097,11189,6537],{"class":1310},[1097,11191,1930],{"class":1330},[1097,11193,6521],{"class":1320},[1097,11195,1787],{"class":1324},[1097,11197,6546],{"class":1320},[1097,11199,3358],{"class":1324},[1097,11201,1411],{"class":1324},[1097,11203,4331],{"class":1107},[1097,11205,1349],{"class":1324},[1097,11207,3556],{"class":1330},[1097,11209,1325],{"class":1324},[1097,11211,11212,11214,11216,11218,11220,11222],{"class":1099,"line":2403},[1097,11213,6564],{"class":1120},[1097,11215,1321],{"class":1330},[1097,11217,1349],{"class":1324},[1097,11219,1766],{"class":1107},[1097,11221,1349],{"class":1324},[1097,11223,1459],{"class":1330},[1097,11225,11226],{"class":1099,"line":3383},[1097,11227,4566],{"class":1324},[1097,11229,11230],{"class":1099,"line":3400},[1097,11231,1422],{"class":1324},[1097,11233,11234,11236,11238,11240,11242],{"class":1099,"line":3432},[1097,11235,6590],{"class":1330},[1097,11237,1321],{"class":1324},[1097,11239,6595],{"class":1921},[1097,11241,1861],{"class":1324},[1097,11243,1400],{"class":1324},[1097,11245,11246,11248,11250,11252,11254],{"class":1099,"line":3445},[1097,11247,6605],{"class":1320},[1097,11249,1787],{"class":1324},[1097,11251,6610],{"class":1120},[1097,11253,1321],{"class":1330},[1097,11255,1325],{"class":1324},[1097,11257,11258,11260,11262,11264,11266,11268],{"class":1099,"line":3450},[1097,11259,6620],{"class":1330},[1097,11261,1334],{"class":1324},[1097,11263,1411],{"class":1324},[1097,11265,497],{"class":1107},[1097,11267,1349],{"class":1324},[1097,11269,1352],{"class":1324},[1097,11271,11272,11274,11276,11278,11280,11282],{"class":1099,"line":3456},[1097,11273,6636],{"class":1330},[1097,11275,1334],{"class":1324},[1097,11277,6641],{"class":1320},[1097,11279,1787],{"class":1324},[1097,11281,4483],{"class":1320},[1097,11283,1352],{"class":1324},[1097,11285,11286,11288,11290,11292,11294],{"class":1099,"line":3487},[1097,11287,6653],{"class":1330},[1097,11289,1334],{"class":1324},[1097,11291,1411],{"class":1324},[1097,11293,6595],{"class":1107},[1097,11295,1375],{"class":1324},[1097,11297,11298,11300],{"class":1099,"line":3531},[1097,11299,3386],{"class":1324},[1097,11301,1459],{"class":1330},[1097,11303,11304],{"class":1099,"line":3538},[1097,11305,3603],{"class":1324},[1097,11307,11308,11310],{"class":1099,"line":3543},[1097,11309,1456],{"class":1324},[1097,11311,1459],{"class":1320},[1097,11313,11314],{"class":1099,"line":3561},[1097,11315,1389],{"emptyLinePlaceholder":21},[1097,11317,11318,11320,11322,11324,11326,11328,11330,11332],{"class":1099,"line":3600},[1097,11319,6689],{"class":1567},[1097,11321,6692],{"class":1120},[1097,11323,1321],{"class":1324},[1097,11325,6697],{"class":1921},[1097,11327,1334],{"class":1324},[1097,11329,6702],{"class":1103},[1097,11331,1861],{"class":1324},[1097,11333,1400],{"class":1324},[1097,11335,11336,11338,11340,11342],{"class":1099,"line":3606},[1097,11337,6711],{"class":1320},[1097,11339,1787],{"class":1324},[1097,11341,6716],{"class":1120},[1097,11343,2653],{"class":1330},[1097,11345,11346,11348,11350,11352,11354,11356,11358,11360,11362],{"class":1099,"line":3611},[1097,11347,3546],{"class":1310},[1097,11349,1930],{"class":1330},[1097,11351,5210],{"class":1320},[1097,11353,1787],{"class":1324},[1097,11355,3331],{"class":1320},[1097,11357,1787],{"class":1324},[1097,11359,5219],{"class":1120},[1097,11361,5222],{"class":1330},[1097,11363,1325],{"class":1324},[1097,11365,11366,11368,11370,11372,11374,11376,11378,11380,11382,11384,11386,11388],{"class":1099,"line":3617},[1097,11367,6743],{"class":1320},[1097,11369,1787],{"class":1324},[1097,11371,6748],{"class":1120},[1097,11373,1321],{"class":1330},[1097,11375,1844],{"class":1324},[1097,11377,1698],{"class":1330},[1097,11379,1334],{"class":1324},[1097,11381,5354],{"class":1320},[1097,11383,1787],{"class":1324},[1097,11385,3331],{"class":1320},[1097,11387,1711],{"class":1324},[1097,11389,1459],{"class":1330},[1097,11391,11392,11394,11396,11398,11400],{"class":1099,"line":3637},[1097,11393,6771],{"class":1320},[1097,11395,1787],{"class":1324},[1097,11397,3331],{"class":1320},[1097,11399,2607],{"class":1324},[1097,11401,6780],{"class":1324},[1097,11403,11404],{"class":1099,"line":3665},[1097,11405,3603],{"class":1324},[1097,11407,11408],{"class":1099,"line":3677},[1097,11409,5416],{"class":1324},[1097,11411,11412],{"class":1099,"line":3696},[1097,11413,1389],{"emptyLinePlaceholder":21},[1097,11415,11416,11418,11420,11422,11424],{"class":1099,"line":3724},[1097,11417,6802],{"class":1120},[1097,11419,1321],{"class":1320},[1097,11421,1784],{"class":1324},[1097,11423,1804],{"class":1567},[1097,11425,1400],{"class":1324},[1097,11427,11428,11430,11432,11434,11436,11438,11440,11442,11444,11446,11448,11450,11452],{"class":1099,"line":3731},[1097,11429,3546],{"class":1310},[1097,11431,1930],{"class":1330},[1097,11433,6319],{"class":1320},[1097,11435,1787],{"class":1324},[1097,11437,3331],{"class":1320},[1097,11439,3857],{"class":1324},[1097,11441,1976],{"class":1320},[1097,11443,1787],{"class":1324},[1097,11445,3836],{"class":1320},[1097,11447,3358],{"class":1324},[1097,11449,3842],{"class":3578},[1097,11451,3556],{"class":1330},[1097,11453,1325],{"class":1324},[1097,11455,11456,11458,11460,11462],{"class":1099,"line":3736},[1097,11457,6743],{"class":1320},[1097,11459,1787],{"class":1324},[1097,11461,6847],{"class":1120},[1097,11463,2653],{"class":1330},[1097,11465,11466],{"class":1099,"line":3802},[1097,11467,3603],{"class":1324},[1097,11469,11470,11472],{"class":1099,"line":3807},[1097,11471,1456],{"class":1324},[1097,11473,1459],{"class":1320},[1097,11475,11476,11478,11480],{"class":1099,"line":3812},[1097,11477,1615],{"class":1324},[1097,11479,5128],{"class":1330},[1097,11481,1545],{"class":1324},[1097,11483,11484],{"class":1099,"line":3818},[1097,11485,1389],{"emptyLinePlaceholder":21},[1097,11487,11488,11490,11492],{"class":1099,"line":3847},[1097,11489,1539],{"class":1324},[1097,11491,1542],{"class":1330},[1097,11493,1545],{"class":1324},[1097,11495,11496,11498,11500,11502,11504,11506,11508,11510],{"class":1099,"line":3888},[1097,11497,1552],{"class":1324},[1097,11499,5443],{"class":1330},[1097,11501,5446],{"class":1567},[1097,11503,1571],{"class":1324},[1097,11505,1498],{"class":1324},[1097,11507,5453],{"class":1107},[1097,11509,1498],{"class":1324},[1097,11511,1545],{"class":1324},[1097,11513,11514,11516,11518,11520,11522],{"class":1099,"line":3917},[1097,11515,1561],{"class":1324},[1097,11517,1542],{"class":1330},[1097,11519,5466],{"class":1324},[1097,11521,8688],{"class":1567},[1097,11523,1545],{"class":1324},[1097,11525,11526,11528,11530],{"class":1099,"line":3929},[1097,11527,1585],{"class":1324},[1097,11529,8698],{"class":1330},[1097,11531,1591],{"class":1324},[1097,11533,11534,11536,11538],{"class":1099,"line":3945},[1097,11535,1596],{"class":1324},[1097,11537,1542],{"class":1330},[1097,11539,1545],{"class":1324},[1097,11541,11542,11544,11546,11548,11550],{"class":1099,"line":3959},[1097,11543,1561],{"class":1324},[1097,11545,1542],{"class":1330},[1097,11547,5466],{"class":1324},[1097,11549,5469],{"class":1567},[1097,11551,1545],{"class":1324},[1097,11553,11554,11556,11558,11560,11562,11564,11566,11568],{"class":1099,"line":3966},[1097,11555,1585],{"class":1324},[1097,11557,5478],{"class":1330},[1097,11559,5481],{"class":1567},[1097,11561,1571],{"class":1324},[1097,11563,1498],{"class":1324},[1097,11565,6924],{"class":1107},[1097,11567,1498],{"class":1324},[1097,11569,1545],{"class":1324},[1097,11571,11572,11574],{"class":1099,"line":3971},[1097,11573,5497],{"class":1324},[1097,11575,6935],{"class":1330},[1097,11577,11578,11580,11582,11584,11586],{"class":1099,"line":3976},[1097,11579,6940],{"class":1567},[1097,11581,1571],{"class":1324},[1097,11583,1498],{"class":1324},[1097,11585,6947],{"class":1107},[1097,11587,5554],{"class":1324},[1097,11589,11590,11592,11594,11596,11598],{"class":1099,"line":3982},[1097,11591,5560],{"class":1567},[1097,11593,1571],{"class":1324},[1097,11595,1498],{"class":1324},[1097,11597,6960],{"class":1107},[1097,11599,5554],{"class":1324},[1097,11601,11602],{"class":1099,"line":3999},[1097,11603,6967],{"class":1567},[1097,11605,11606,11608,11610,11612,11614],{"class":1099,"line":4021},[1097,11607,6972],{"class":1567},[1097,11609,1571],{"class":1324},[1097,11611,1498],{"class":1324},[1097,11613,6979],{"class":1107},[1097,11615,5554],{"class":1324},[1097,11617,11618],{"class":1099,"line":4039},[1097,11619,5620],{"class":1324},[1097,11621,11622,11624,11626,11628,11630,11632,11634,11636,11638,11640,11642,11644,11646,11648,11650],{"class":1099,"line":4047},[1097,11623,5626],{"class":1324},[1097,11625,1542],{"class":1330},[1097,11627,5466],{"class":1324},[1097,11629,371],{"class":1567},[1097,11631,1571],{"class":1324},[1097,11633,1498],{"class":1324},[1097,11635,1844],{"class":1324},[1097,11637,3207],{"class":1320},[1097,11639,1695],{"class":1324},[1097,11641,7008],{"class":1320},[1097,11643,1695],{"class":1324},[1097,11645,7013],{"class":1320},[1097,11647,1456],{"class":1324},[1097,11649,1498],{"class":1324},[1097,11651,1545],{"class":1324},[1097,11653,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,11708],{"class":1099,"line":4064},[1097,11655,7024],{"class":1324},[1097,11657,1542],{"class":1330},[1097,11659,7029],{"class":1310},[1097,11661,1571],{"class":1324},[1097,11663,1498],{"class":1324},[1097,11665,7036],{"class":1320},[1097,11667,1695],{"class":1324},[1097,11669,7041],{"class":1320},[1097,11671,7044],{"class":1324},[1097,11673,7047],{"class":1320},[1097,11675,1498],{"class":1324},[1097,11677,7052],{"class":1324},[1097,11679,7055],{"class":1567},[1097,11681,1571],{"class":1324},[1097,11683,7060],{"class":1324},[1097,11685,1998],{"class":1320},[1097,11687,1456],{"class":1324},[1097,11689,7067],{"class":1107},[1097,11691,5400],{"class":1324},[1097,11693,7072],{"class":1320},[1097,11695,1787],{"class":1324},[1097,11697,6546],{"class":1320},[1097,11699,1456],{"class":1324},[1097,11701,7067],{"class":1107},[1097,11703,5400],{"class":1324},[1097,11705,7085],{"class":1320},[1097,11707,7088],{"class":1324},[1097,11709,1545],{"class":1324},[1097,11711,11712,11714],{"class":1099,"line":4085},[1097,11713,7095],{"class":1324},[1097,11715,7098],{"class":1330},[1097,11717,11718,11720,11722,11724,11726],{"class":1099,"line":4095},[1097,11719,7103],{"class":1567},[1097,11721,1571],{"class":1324},[1097,11723,1498],{"class":1324},[1097,11725,7110],{"class":1107},[1097,11727,5554],{"class":1324},[1097,11729,11730,11732,11734,11736,11738],{"class":1099,"line":4105},[1097,11731,7117],{"class":1567},[1097,11733,1571],{"class":1324},[1097,11735,1498],{"class":1324},[1097,11737,7124],{"class":1107},[1097,11739,5554],{"class":1324},[1097,11741,11742,11744,11746,11748,11750],{"class":1099,"line":4115},[1097,11743,7131],{"class":1567},[1097,11745,1571],{"class":1324},[1097,11747,1498],{"class":1324},[1097,11749,7138],{"class":1107},[1097,11751,5554],{"class":1324},[1097,11753,11754],{"class":1099,"line":4132},[1097,11755,7145],{"class":1324},[1097,11757,11758,11760],{"class":1099,"line":4143},[1097,11759,7150],{"class":1324},[1097,11761,7153],{"class":1330},[1097,11763,11764,11766,11768,11770,11772],{"class":1099,"line":4149},[1097,11765,7158],{"class":1567},[1097,11767,1571],{"class":1324},[1097,11769,1498],{"class":1324},[1097,11771,7124],{"class":1107},[1097,11773,5554],{"class":1324},[1097,11775,11776,11778,11780,11782,11784],{"class":1099,"line":4155},[1097,11777,7171],{"class":1567},[1097,11779,1571],{"class":1324},[1097,11781,1498],{"class":1324},[1097,11783,7138],{"class":1107},[1097,11785,5554],{"class":1324},[1097,11787,11788],{"class":1099,"line":4165},[1097,11789,7184],{"class":1324},[1097,11791,11792,11794,11796],{"class":1099,"line":4175},[1097,11793,7189],{"class":1324},[1097,11795,7192],{"class":1330},[1097,11797,1545],{"class":1324},[1097,11799,11800],{"class":1099,"line":4189},[1097,11801,1389],{"emptyLinePlaceholder":21},[1097,11803,11804,11806,11808,11810,11812,11814,11816,11818,11820],{"class":1099,"line":4204},[1097,11805,7095],{"class":1324},[1097,11807,1542],{"class":1330},[1097,11809,7207],{"class":1310},[1097,11811,1571],{"class":1324},[1097,11813,1498],{"class":1324},[1097,11815,7214],{"class":1120},[1097,11817,7217],{"class":1320},[1097,11819,1498],{"class":1324},[1097,11821,1545],{"class":1324},[1097,11823,11824,11826],{"class":1099,"line":4209},[1097,11825,7150],{"class":1324},[1097,11827,7153],{"class":1330},[1097,11829,11830,11832,11834,11836,11838],{"class":1099,"line":4214},[1097,11831,7232],{"class":1567},[1097,11833,1571],{"class":1324},[1097,11835,1498],{"class":1324},[1097,11837,7239],{"class":1107},[1097,11839,5554],{"class":1324},[1097,11841,11842,11844,11846,11848,11850],{"class":1099,"line":4224},[1097,11843,7158],{"class":1567},[1097,11845,1571],{"class":1324},[1097,11847,1498],{"class":1324},[1097,11849,7124],{"class":1107},[1097,11851,5554],{"class":1324},[1097,11853,11854,11856,11858,11860,11862],{"class":1099,"line":4240},[1097,11855,7171],{"class":1567},[1097,11857,1571],{"class":1324},[1097,11859,1498],{"class":1324},[1097,11861,7138],{"class":1107},[1097,11863,5554],{"class":1324},[1097,11865,11866],{"class":1099,"line":4255},[1097,11867,7184],{"class":1324},[1097,11869,11870,11872,11874,11876,11878,11880,11882,11884,11886,11888,11890,11892,11894],{"class":1099,"line":4261},[1097,11871,7150],{"class":1324},[1097,11873,987],{"class":1330},[1097,11875,7207],{"class":1567},[1097,11877,1571],{"class":1324},[1097,11879,1498],{"class":1324},[1097,11881,7284],{"class":1107},[1097,11883,1498],{"class":1324},[1097,11885,5481],{"class":1567},[1097,11887,1571],{"class":1324},[1097,11889,1498],{"class":1324},[1097,11891,7295],{"class":1107},[1097,11893,1498],{"class":1324},[1097,11895,1545],{"class":1324},[1097,11897,11898],{"class":1099,"line":4267},[1097,11899,7304],{"class":1320},[1097,11901,11902,11904,11906],{"class":1099,"line":4275},[1097,11903,7309],{"class":1324},[1097,11905,987],{"class":1330},[1097,11907,1545],{"class":1324},[1097,11909,11910,11912,11914],{"class":1099,"line":4280},[1097,11911,7189],{"class":1324},[1097,11913,1542],{"class":1330},[1097,11915,1545],{"class":1324},[1097,11917,11918,11920,11922],{"class":1099,"line":4286},[1097,11919,7326],{"class":1324},[1097,11921,1542],{"class":1330},[1097,11923,1545],{"class":1324},[1097,11925,11926,11928,11930],{"class":1099,"line":4306},[1097,11927,7335],{"class":1324},[1097,11929,1542],{"class":1330},[1097,11931,1545],{"class":1324},[1097,11933,11935,11937,11939],{"class":11934,"line":4321},[1099,1549],[1097,11936,5523],{"class":1324},[1097,11938,5099],{"class":1330},[1097,11940,1545],{"class":1324},[1097,11942,11944],{"class":11943,"line":4338},[1099,1549],[1097,11945,1389],{"emptyLinePlaceholder":21},[1097,11947,11949,11951],{"class":11948,"line":4361},[1099,1549],[1097,11950,5497],{"class":1324},[1097,11952,5539],{"class":1330},[1097,11954,11955,11957,11959,11961,11963],{"class":1099,"line":4372},[1097,11956,5545],{"class":1567},[1097,11958,1571],{"class":1324},[1097,11960,1498],{"class":1324},[1097,11962,5210],{"class":1107},[1097,11964,5554],{"class":1324},[1097,11966,11967,11969,11971,11973,11975],{"class":1099,"line":4380},[1097,11968,7374],{"class":1567},[1097,11970,1571],{"class":1324},[1097,11972,1498],{"class":1324},[1097,11974,7381],{"class":1107},[1097,11976,5554],{"class":1324},[1097,11978,11979,11981,11983,11985,11987],{"class":1099,"line":4386},[1097,11980,5575],{"class":1567},[1097,11982,1571],{"class":1324},[1097,11984,1498],{"class":1324},[1097,11986,5582],{"class":1107},[1097,11988,5554],{"class":1324},[1097,11990,11991,11993,11995,11997,11999],{"class":1099,"line":4391},[1097,11992,6972],{"class":1567},[1097,11994,1571],{"class":1324},[1097,11996,1498],{"class":1324},[1097,11998,7406],{"class":1107},[1097,12000,5554],{"class":1324},[1097,12002,12003,12005,12007,12009,12011],{"class":1099,"line":4414},[1097,12004,5605],{"class":1567},[1097,12006,1571],{"class":1324},[1097,12008,1498],{"class":1324},[1097,12010,7419],{"class":1107},[1097,12012,5554],{"class":1324},[1097,12014,12015],{"class":1099,"line":4420},[1097,12016,5620],{"class":1324},[1097,12018,12019,12021,12023,12025,12028],{"class":1099,"line":4440},[1097,12020,5626],{"class":1324},[1097,12022,1542],{"class":1330},[1097,12024,5466],{"class":1324},[1097,12026,12027],{"class":1567},"footer",[1097,12029,1545],{"class":1324},[1097,12031,12032,12034,12037,12040,12042,12044,12046,12048],{"class":1099,"line":4446},[1097,12033,7024],{"class":1324},[1097,12035,12036],{"class":1330},"ModelSelect",[1097,12038,12039],{"class":1567}," v-model",[1097,12041,1571],{"class":1324},[1097,12043,1498],{"class":1324},[1097,12045,4655],{"class":1107},[1097,12047,1498],{"class":1324},[1097,12049,1591],{"class":1324},[1097,12051,12052,12054,12056],{"class":1099,"line":4492},[1097,12053,7335],{"class":1324},[1097,12055,1542],{"class":1330},[1097,12057,1545],{"class":1324},[1097,12059,12060],{"class":1099,"line":4508},[1097,12061,1389],{"emptyLinePlaceholder":21},[1097,12063,12064,12066],{"class":1099,"line":4541},[1097,12065,5626],{"class":1324},[1097,12067,7432],{"class":1330},[1097,12069,12070,12072,12074,12076,12078],{"class":1099,"line":4555},[1097,12071,7437],{"class":1567},[1097,12073,1571],{"class":1324},[1097,12075,1498],{"class":1324},[1097,12077,6960],{"class":1107},[1097,12079,5554],{"class":1324},[1097,12081,12082,12084,12086,12088,12090],{"class":1099,"line":4563},[1097,12083,7450],{"class":1567},[1097,12085,1571],{"class":1324},[1097,12087,1498],{"class":1324},[1097,12089,5639],{"class":1107},[1097,12091,5554],{"class":1324},[1097,12093,12094,12096,12098,12100,12102],{"class":1099,"line":4569},[1097,12095,7463],{"class":1567},[1097,12097,1571],{"class":1324},[1097,12099,1498],{"class":1324},[1097,12101,7470],{"class":1107},[1097,12103,5554],{"class":1324},[1097,12105,12106,12108,12110,12112,12114],{"class":1099,"line":4576},[1097,12107,7477],{"class":1567},[1097,12109,1571],{"class":1324},[1097,12111,1498],{"class":1324},[1097,12113,7484],{"class":1107},[1097,12115,5554],{"class":1324},[1097,12117,12118],{"class":1099,"line":4581},[1097,12119,7491],{"class":1324},[1097,12121,12122,12124,12126],{"class":1099,"line":4599},[1097,12123,5523],{"class":1324},[1097,12125,5093],{"class":1330},[1097,12127,1545],{"class":1324},[1097,12129,12131,12133,12135],{"class":1099,"line":12130},114,[1097,12132,5657],{"class":1324},[1097,12134,5478],{"class":1330},[1097,12136,1545],{"class":1324},[1097,12138,12140,12142,12144],{"class":1099,"line":12139},115,[1097,12141,1596],{"class":1324},[1097,12143,1542],{"class":1330},[1097,12145,1545],{"class":1324},[1097,12147,12149,12151,12153],{"class":1099,"line":12148},116,[1097,12150,1606],{"class":1324},[1097,12152,5443],{"class":1330},[1097,12154,1545],{"class":1324},[1097,12156,12158,12160,12162],{"class":1099,"line":12157},117,[1097,12159,1615],{"class":1324},[1097,12161,1542],{"class":1330},[1097,12163,1545],{"class":1324},[991,12165,12167],{"id":12166},"going-further","Going further",[987,12169,12170],{},"You now have a working AI chatbot with database persistence! To take it further, consider adding:",[987,12172,12173],{},[1005,12174,12175],{},"User Authentication",[987,12177,12178,12179,12184],{},"Add authentication with ",[1041,12180,12183],{"href":12181,"rel":12182},"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,12186,12187],{},[1005,12188,12189],{},"AI Tools",[987,12191,12192,12193,12198],{},"Extend your chatbot with ",[1041,12194,12197],{"href":12195,"rel":12196},"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,12200,12202],{"className":1301,"code":12201,"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,12203,12204,12223,12241,12245,12260,12276,12293,12324,12332,12352,12357,12392,12396],{"__ignoreMap":1093},[1097,12205,12206,12208,12210,12213,12215,12217,12219,12221],{"class":1099,"line":1100},[1097,12207,1686],{"class":1310},[1097,12209,1689],{"class":1324},[1097,12211,12212],{"class":1320}," tool",[1097,12214,1711],{"class":1324},[1097,12216,1714],{"class":1310},[1097,12218,1411],{"class":1324},[1097,12220,2518],{"class":1107},[1097,12222,1375],{"class":1324},[1097,12224,12225,12227,12229,12231,12233,12235,12237,12239],{"class":1099,"line":1117},[1097,12226,1686],{"class":1310},[1097,12228,1689],{"class":1324},[1097,12230,2553],{"class":1320},[1097,12232,1711],{"class":1324},[1097,12234,1714],{"class":1310},[1097,12236,1411],{"class":1324},[1097,12238,2562],{"class":1107},[1097,12240,1375],{"class":1324},[1097,12242,12243],{"class":1099,"line":1340},[1097,12244,1389],{"emptyLinePlaceholder":21},[1097,12246,12247,12249,12252,12254,12256,12258],{"class":1099,"line":1355},[1097,12248,3046],{"class":1567},[1097,12250,12251],{"class":1320}," weatherTool ",[1097,12253,1571],{"class":1324},[1097,12255,12212],{"class":1120},[1097,12257,1321],{"class":1320},[1097,12259,1325],{"class":1324},[1097,12261,12262,12265,12267,12269,12272,12274],{"class":1099,"line":1367},[1097,12263,12264],{"class":1330},"  description",[1097,12266,1334],{"class":1324},[1097,12268,1411],{"class":1324},[1097,12270,12271],{"class":1107},"Get the current weather for a location",[1097,12273,1349],{"class":1324},[1097,12275,1352],{"class":1324},[1097,12277,12278,12281,12283,12285,12287,12289,12291],{"class":1099,"line":1378},[1097,12279,12280],{"class":1330},"  parameters",[1097,12282,1334],{"class":1324},[1097,12284,2553],{"class":1320},[1097,12286,1787],{"class":1324},[1097,12288,2625],{"class":1120},[1097,12290,1321],{"class":1320},[1097,12292,1325],{"class":1324},[1097,12294,12295,12298,12300,12302,12304,12306,12308,12310,12313,12315,12317,12320,12322],{"class":1099,"line":1386},[1097,12296,12297],{"class":1330},"    location",[1097,12299,1334],{"class":1324},[1097,12301,2553],{"class":1320},[1097,12303,1787],{"class":1324},[1097,12305,3245],{"class":1120},[1097,12307,1784],{"class":1320},[1097,12309,1787],{"class":1324},[1097,12311,12312],{"class":1120},"describe",[1097,12314,1321],{"class":1320},[1097,12316,1349],{"class":1324},[1097,12318,12319],{"class":1107},"The city name",[1097,12321,1349],{"class":1324},[1097,12323,1459],{"class":1320},[1097,12325,12326,12328,12330],{"class":1099,"line":1392},[1097,12327,2398],{"class":1324},[1097,12329,1861],{"class":1320},[1097,12331,1352],{"class":1324},[1097,12333,12334,12337,12339,12341,12343,12346,12348,12350],{"class":1099,"line":1403},[1097,12335,12336],{"class":1120},"  execute",[1097,12338,1334],{"class":1324},[1097,12340,4007],{"class":1567},[1097,12342,1918],{"class":1324},[1097,12344,12345],{"class":1921}," location",[1097,12347,1925],{"class":1324},[1097,12349,1804],{"class":1567},[1097,12351,1400],{"class":1324},[1097,12353,12354],{"class":1099,"line":1419},[1097,12355,12356],{"class":2675},"    \u002F\u002F Fetch weather data from an API\n",[1097,12358,12359,12362,12364,12366,12368,12371,12373,12376,12378,12381,12383,12385,12388,12390],{"class":1099,"line":1425},[1097,12360,12361],{"class":1310},"    return",[1097,12363,1689],{"class":1324},[1097,12365,12345],{"class":1320},[1097,12367,1695],{"class":1324},[1097,12369,12370],{"class":1330}," temperature",[1097,12372,1334],{"class":1324},[1097,12374,12375],{"class":3578}," 22",[1097,12377,1695],{"class":1324},[1097,12379,12380],{"class":1330}," condition",[1097,12382,1334],{"class":1324},[1097,12384,1411],{"class":1324},[1097,12386,12387],{"class":1107},"Sunny",[1097,12389,1349],{"class":1324},[1097,12391,3167],{"class":1324},[1097,12393,12394],{"class":1099,"line":1430},[1097,12395,3603],{"class":1324},[1097,12397,12398,12400],{"class":1099,"line":1453},[1097,12399,1456],{"class":1324},[1097,12401,1459],{"class":1320},[991,12403,12405],{"id":12404},"deploying-to-vercel","Deploying to Vercel",[987,12407,12408],{},"Deploy your chatbot to Vercel with zero configuration:",[1088,12410,12412],{"className":1090,"code":12411,"language":1092,"meta":1093,"style":1093},"npx vercel deploy\n",[1047,12413,12414],{"__ignoreMap":1093},[1097,12415,12416,12418,12421],{"class":1099,"line":1100},[1097,12417,1104],{"class":1103},[1097,12419,12420],{"class":1107}," vercel",[1097,12422,12423],{"class":1107}," deploy\n",[987,12425,12426],{},"Then, in the Vercel dashboard:",[999,12428,12429,12435],{},[1002,12430,12431,12432,12434],{},"Enable ",[1005,12433,4611],{}," and add credits so requests can be processed.",[1002,12436,12437,12438,12441],{},"Add a ",[1005,12439,12440],{},"Turso"," database from the Vercel Marketplace and connect it to your project (it will provision the database and add the required environment variables automatically).",[12443,12444,12445],"blockquote",{},[987,12446,12447,12448,12453,12454,12456],{},"Note: On Vercel, you ",[1005,12449,12450,12451],{},"don’t need to manually add ",[1047,12452,1638],{}," — Vercel handles the gateway configuration for deployments. Keep using ",[1047,12455,1625],{}," locally for development.",[1461,12458,12460],{"to":1076,"target":12459},"_blank",[987,12461,12462,12463,1787],{},"Learn more about setting up AI Gateway in the ",[1005,12464,12465],{},"Vercel AI Gateway documentation",[991,12467,12469],{"id":12468},"conclusion","Conclusion",[987,12471,12472],{},"You've built a complete AI chatbot with:",[999,12474,12475,12481,12487,12493,12498],{},[1002,12476,12477,12480],{},[1005,12478,12479],{},"A complete chat interface"," using Nuxt UI components",[1002,12482,12483,12486],{},[1005,12484,12485],{},"Real-time streaming responses"," with the AI SDK",[1002,12488,12489,12492],{},[1005,12490,12491],{},"Streaming Markdown rendering"," with Comark for rich content display",[1002,12494,12495,12497],{},[1005,12496,1025],{}," via AI Gateway",[1002,12499,12500,12503],{},[1005,12501,12502],{},"Database persistence"," with SQLite (local) \u002F Turso (production) and Drizzle ORM",[987,12505,12506],{},"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,12508,12509],{},[1005,12510,12511],{},"Resources:",[999,12513,12514,12521,12528,12535,12541,12547],{},[1002,12515,12516],{},[1041,12517,12520],{"href":12518,"rel":12519},"https:\u002F\u002Fui.nuxt.com\u002Fcomponents\u002Fchat",[1045],"Nuxt UI Chat Components",[1002,12522,12523],{},[1041,12524,12527],{"href":12525,"rel":12526},"https:\u002F\u002Fhub.nuxt.com\u002Fdocs\u002Ffeatures\u002Fdatabase",[1045],"NuxtHub Database",[1002,12529,12530],{},[1041,12531,12534],{"href":12532,"rel":12533},"https:\u002F\u002Fai-sdk.dev",[1045],"AI SDK Documentation",[1002,12536,12537],{},[1041,12538,12540],{"href":1076,"rel":12539},[1045],"AI Gateway Documentation",[1002,12542,12543],{},[1041,12544,12546],{"href":1043,"rel":12545},[1045],"Nuxt AI Chat Template",[1002,12548,12549],{},[1041,12550,12552],{"href":1053,"rel":12551},[1045],"Vue AI Chat Template",[987,12554,12555],{},"We're excited to see what you'll build!",[12557,12558,12559],"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":12561},[12562,12563,12564,12570,12575,12579,12580,12584,12585,12586,12591,12592,12593],{"id":993,"depth":1117,"text":994},{"id":1061,"depth":1117,"text":1062},{"id":1082,"depth":1117,"text":1083,"children":12565},[12566,12567,12568,12569],{"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":12571},[12572,12573,12574],{"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":12576},[12577,12578],{"id":5103,"depth":1340,"text":5104},{"id":5720,"depth":1340,"text":5721},{"id":6092,"depth":1117,"text":6093},{"id":7687,"depth":1117,"text":7688,"children":12581},[12582,12583],{"id":7694,"depth":1340,"text":7695},{"id":7854,"depth":1340,"text":7855},{"id":8361,"depth":1117,"text":8362},{"id":8904,"depth":1117,"text":8905},{"id":10226,"depth":1117,"text":10227,"children":12587},[12588,12589,12590],{"id":10237,"depth":1340,"text":10238},{"id":10509,"depth":1340,"text":10510},{"id":10768,"depth":1340,"text":10769},{"id":12166,"depth":1117,"text":12167},{"id":12404,"depth":1117,"text":12405},{"id":12468,"depth":1117,"text":12469},"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":12599},"Tutorial","\u002Fblog\u002Fhow-to-build-an-ai-chat",{"title":971,"description":12595},"blog\u002Fhow-to-build-an-ai-chat","72F5TZLouO24SfaJHn8xqXCf_NZWcXu9KM2G70FvH0I",1776957393172]