[{"data":1,"prerenderedAt":12591},["ShallowReactive",2],{"navigation":3,"-blog-how-to-build-an-ai-chat":958},[4],{"title":5,"path":6,"stem":7,"children":8,"page":36},"Docs","\u002Fdocs","docs",[9,163,816,857],{"title":10,"path":11,"stem":12,"children":13,"framework":16,"category":16,"description":16,"icon":30},"Get Started","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started\u002F1.index",[14,19,37,47,53,76,141],{"title":15,"path":11,"stem":12,"framework":16,"category":16,"description":17,"icon":18},"Introduction",null,"Nuxt UI is a comprehensive Vue UI component library (Nuxt optional), offering 125+ accessible, Tailwind CSS components for building modern web applications.","i-lucide-house",{"title":20,"framework":16,"category":16,"description":16,"shadow":21,"path":22,"stem":23,"children":24,"page":36},"Installation",true,"\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F1.getting-started\u002F2.installation",[25,31],{"title":20,"path":26,"stem":27,"framework":28,"category":16,"description":29,"icon":30},"\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fnuxt","docs\u002F1.getting-started\u002F2.installation\u002F1.nuxt","nuxt","Learn how to install and configure Nuxt UI in your Nuxt application.","i-lucide-square-play",{"title":20,"path":32,"stem":33,"framework":34,"category":16,"description":35,"icon":30},"\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fvue","docs\u002F1.getting-started\u002F2.installation\u002F2.vue","vue","Learn how to install and configure Nuxt UI in your Vue application, compatible with both plain Vite and Inertia.",false,{"title":38,"framework":16,"category":16,"description":16,"icon":39,"shadow":21,"path":40,"stem":41,"children":42,"page":36},"Migration","i-lucide-arrow-right-left","\u002Fdocs\u002Fgetting-started\u002Fmigration","docs\u002F1.getting-started\u002F3.migration",[43],{"title":38,"path":44,"stem":45,"framework":16,"category":16,"description":46,"icon":39},"\u002Fdocs\u002Fgetting-started\u002Fmigration\u002Fv4","docs\u002F1.getting-started\u002F3.migration\u002F1.v4","A comprehensive guide to migrate your application from Nuxt UI v3 to Nuxt UI v4.",{"title":48,"path":49,"stem":50,"framework":16,"category":16,"description":51,"icon":52},"Contribution","\u002Fdocs\u002Fgetting-started\u002Fcontribution","docs\u002F1.getting-started\u002F4.contribution","A comprehensive guide on contributing to Nuxt UI, including project structure, development workflow, and best practices.","i-lucide-handshake",{"title":54,"path":55,"stem":56,"children":57,"page":36},"Theme","\u002Fdocs\u002Fgetting-started\u002Ftheme","docs\u002F1.getting-started\u002F5.theme",[58,64,70],{"title":59,"path":60,"stem":61,"framework":16,"category":16,"description":62,"icon":63},"Design System","\u002Fdocs\u002Fgetting-started\u002Ftheme\u002Fdesign-system","docs\u002F1.getting-started\u002F5.theme\u002F1.design-system","Nuxt UI's design system uses Tailwind CSS for simple theming and easy customization.","i-lucide-palette",{"title":65,"path":66,"stem":67,"framework":16,"category":16,"description":68,"icon":69},"CSS Variables","\u002Fdocs\u002Fgetting-started\u002Ftheme\u002Fcss-variables","docs\u002F1.getting-started\u002F5.theme\u002F2.css-variables","Nuxt UI uses CSS variables as design tokens for flexible, consistent theming with built-in light and dark mode support.","i-lucide-swatch-book",{"title":71,"path":72,"stem":73,"framework":16,"category":16,"description":74,"icon":75},"Components","\u002Fdocs\u002Fgetting-started\u002Ftheme\u002Fcomponents","docs\u002F1.getting-started\u002F5.theme\u002F3.components","Learn how to customize Nuxt UI components with the Tailwind Variants API for advanced, flexible, and maintainable styling.","i-lucide-layout-grid",{"title":77,"framework":16,"category":16,"description":16,"path":78,"stem":79,"children":80,"page":36},"Integrations","\u002Fdocs\u002Fgetting-started\u002Fintegrations","docs\u002F1.getting-started\u002F6.integrations",[81,95,101,115,129,135],{"title":82,"framework":16,"category":16,"description":16,"shadow":21,"path":83,"stem":84,"children":85,"page":36},"Icons","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ficons","docs\u002F1.getting-started\u002F6.integrations\u002F1.icons",[86,91],{"title":82,"path":87,"stem":88,"framework":28,"category":16,"description":89,"icon":90},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ficons\u002Fnuxt","docs\u002F1.getting-started\u002F6.integrations\u002F1.icons\u002F1.nuxt","Nuxt UI integrates with Nuxt Icon to access over 200,000+ icons from Iconify.","i-lucide-smile",{"title":82,"path":92,"stem":93,"framework":34,"category":16,"description":94,"icon":90},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ficons\u002Fvue","docs\u002F1.getting-started\u002F6.integrations\u002F1.icons\u002F2.vue","Nuxt UI integrates with Iconify to access over 200,000+ icons.",{"title":96,"path":97,"stem":98,"framework":28,"category":16,"description":99,"icon":100},"Fonts","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ffonts","docs\u002F1.getting-started\u002F6.integrations\u002F2.fonts","Nuxt UI integrates with Nuxt Fonts to provide plug-and-play font optimization.","i-lucide-a-large-small",{"title":102,"framework":16,"category":16,"description":16,"shadow":21,"path":103,"stem":104,"children":105,"page":36},"Color Mode","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcolor-mode","docs\u002F1.getting-started\u002F6.integrations\u002F3.color-mode",[106,111],{"title":102,"path":107,"stem":108,"framework":28,"category":16,"description":109,"icon":110},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcolor-mode\u002Fnuxt","docs\u002F1.getting-started\u002F6.integrations\u002F3.color-mode\u002F1.nuxt","Nuxt UI integrates with Nuxt Color Mode to allow for easy switching between light and dark themes.","i-lucide-sun-moon",{"title":102,"path":112,"stem":113,"framework":34,"category":16,"description":114,"icon":110},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcolor-mode\u002Fvue","docs\u002F1.getting-started\u002F6.integrations\u002F3.color-mode\u002F2.vue","Nuxt UI integrates with VueUse to allow for easy switching between light and dark themes.",{"title":116,"framework":16,"category":16,"description":16,"shadow":21,"path":117,"stem":118,"children":119,"page":36},"I18n","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fi18n","docs\u002F1.getting-started\u002F6.integrations\u002F4.i18n",[120,126],{"title":121,"path":122,"stem":123,"framework":28,"category":16,"description":124,"icon":125},"Internationalization (i18n)","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fi18n\u002Fnuxt","docs\u002F1.getting-started\u002F6.integrations\u002F4.i18n\u002F1.nuxt","Nuxt UI supports 50+ locales and multi-directional (LTR\u002FRTL) internationalization.","i-lucide-languages",{"title":121,"path":127,"stem":128,"framework":34,"category":16,"description":124,"icon":125},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fi18n\u002Fvue","docs\u002F1.getting-started\u002F6.integrations\u002F4.i18n\u002F2.vue",{"title":130,"path":131,"stem":132,"framework":28,"category":16,"description":133,"icon":134},"Content","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcontent","docs\u002F1.getting-started\u002F6.integrations\u002F5.content","Nuxt UI integrates with Nuxt Content to deliver beautiful typography and consistent component styling.","i-simple-icons-markdown",{"title":136,"path":137,"stem":138,"framework":34,"category":16,"description":139,"icon":140},"SSR","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fssr","docs\u002F1.getting-started\u002F6.integrations\u002F6.ssr","Nuxt UI has first-party support for Vue SSR. This guide will help you have it fully enabled.","i-lucide-server",{"title":142,"framework":16,"category":16,"description":16,"path":143,"stem":144,"children":145,"page":36},"Agents","\u002Fdocs\u002Fgetting-started\u002Fai","docs\u002F1.getting-started\u002F7.ai",[146,151,157],{"title":147,"path":148,"stem":149,"framework":16,"category":16,"description":150,"icon":140},"MCP Server","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fmcp","docs\u002F1.getting-started\u002F7.ai\u002F1.mcp","Use Nuxt UI components in your AI assistants with Model Context Protocol support.",{"title":152,"path":153,"stem":154,"framework":16,"category":16,"description":155,"icon":156},"LLMs.txt","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fllms-txt","docs\u002F1.getting-started\u002F7.ai\u002F2.llms-txt","How to get AI tools like Cursor, Windsurf, GitHub Copilot, ChatGPT, and Claude to understand Nuxt UI components, theming, and best practices.","i-lucide-bot",{"title":158,"path":159,"stem":160,"framework":16,"category":16,"description":161,"icon":162},"Skills","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fskills","docs\u002F1.getting-started\u002F7.ai\u002F3.skills","Install Nuxt UI skills to give AI coding agents deep knowledge of components, theming, and best practices.","i-lucide-sparkles",{"title":71,"framework":16,"category":16,"description":16,"icon":164,"path":165,"stem":166,"children":167,"page":36},"i-lucide-square-code","\u002Fdocs\u002Fcomponents","docs\u002F2.components",[168,174,180,186,192,197,202,207,212,217,222,228,233,238,243,248,253,258,264,269,274,279,284,289,295,300,305,311,316,321,326,332,337,342,347,352,357,362,367,373,378,383,388,393,399,405,410,415,420,425,430,435,440,445,450,455,460,466,471,476,481,486,491,496,501,506,511,516,521,526,531,536,541,546,551,556,561,566,571,576,581,587,592,597,602,607,612,617,622,627,632,637,642,647,652,657,662,667,672,677,682,687,692,697,702,707,712,717,722,727,732,737,742,747,752,757,762,767,772,777,782,787,791,796,801,806,811],{"title":169,"path":170,"stem":171,"framework":16,"category":172,"description":173},"Accordion","\u002Fdocs\u002Fcomponents\u002Faccordion","docs\u002F2.components\u002Faccordion","data","A stacked set of collapsible panels.",{"title":175,"path":176,"stem":177,"framework":16,"category":178,"description":179},"Alert","\u002Fdocs\u002Fcomponents\u002Falert","docs\u002F2.components\u002Falert","element","A callout to draw user's attention.",{"title":181,"path":182,"stem":183,"framework":16,"category":184,"description":185},"App","\u002Fdocs\u002Fcomponents\u002Fapp","docs\u002F2.components\u002Fapp","layout","Wraps your app to provide global configurations and more.",{"title":187,"path":188,"stem":189,"framework":16,"category":190,"description":191},"AuthForm","\u002Fdocs\u002Fcomponents\u002Fauth-form","docs\u002F2.components\u002Fauth-form","page","A customizable Form to create login, register or password reset forms.",{"title":193,"path":194,"stem":195,"framework":16,"category":178,"description":196},"Avatar","\u002Fdocs\u002Fcomponents\u002Favatar","docs\u002F2.components\u002Favatar","An img element with fallback and Nuxt Image support.",{"title":198,"path":199,"stem":200,"framework":16,"category":178,"description":201},"AvatarGroup","\u002Fdocs\u002Fcomponents\u002Favatar-group","docs\u002F2.components\u002Favatar-group","Stack multiple avatars in a group.",{"title":203,"path":204,"stem":205,"framework":16,"category":178,"description":206},"Badge","\u002Fdocs\u002Fcomponents\u002Fbadge","docs\u002F2.components\u002Fbadge","A short text to represent a status or a category.",{"title":208,"path":209,"stem":210,"framework":16,"category":178,"description":211},"Banner","\u002Fdocs\u002Fcomponents\u002Fbanner","docs\u002F2.components\u002Fbanner","Display a banner at the top of your website to inform users about important information.",{"title":213,"path":214,"stem":215,"framework":16,"category":190,"description":216},"BlogPost","\u002Fdocs\u002Fcomponents\u002Fblog-post","docs\u002F2.components\u002Fblog-post","A customizable article to display in a blog page.",{"title":218,"path":219,"stem":220,"framework":16,"category":190,"description":221},"BlogPosts","\u002Fdocs\u002Fcomponents\u002Fblog-posts","docs\u002F2.components\u002Fblog-posts","Display a list of blog posts in a responsive grid layout.",{"title":223,"path":224,"stem":225,"framework":16,"category":226,"description":227},"Breadcrumb","\u002Fdocs\u002Fcomponents\u002Fbreadcrumb","docs\u002F2.components\u002Fbreadcrumb","navigation","A hierarchy of links to navigate through a website.",{"title":229,"path":230,"stem":231,"framework":16,"category":178,"description":232},"Button","\u002Fdocs\u002Fcomponents\u002Fbutton","docs\u002F2.components\u002Fbutton","A button element that can act as a link or trigger an action.",{"title":234,"path":235,"stem":236,"framework":16,"category":178,"description":237},"Calendar","\u002Fdocs\u002Fcomponents\u002Fcalendar","docs\u002F2.components\u002Fcalendar","A calendar component for selecting single dates, multiple dates or date ranges.",{"title":239,"path":240,"stem":241,"framework":16,"category":178,"description":242},"Card","\u002Fdocs\u002Fcomponents\u002Fcard","docs\u002F2.components\u002Fcard","Display content in a card with a header, body and footer.",{"title":244,"path":245,"stem":246,"framework":16,"category":172,"description":247},"Carousel","\u002Fdocs\u002Fcomponents\u002Fcarousel","docs\u002F2.components\u002Fcarousel","A carousel with motion and swipe built using Embla.",{"title":249,"path":250,"stem":251,"framework":16,"category":190,"description":252},"ChangelogVersion","\u002Fdocs\u002Fcomponents\u002Fchangelog-version","docs\u002F2.components\u002Fchangelog-version","A customizable article to display in a changelog.",{"title":254,"path":255,"stem":256,"framework":16,"category":190,"description":257},"ChangelogVersions","\u002Fdocs\u002Fcomponents\u002Fchangelog-versions","docs\u002F2.components\u002Fchangelog-versions","Display a list of changelog versions in a timeline.",{"title":259,"path":260,"stem":261,"framework":16,"category":262,"description":263},"Chat","\u002Fdocs\u002Fcomponents\u002Fchat","docs\u002F2.components\u002Fchat","chat","Build AI chat interfaces with streaming, reasoning, and tool calling.",{"title":265,"path":266,"stem":267,"framework":16,"category":262,"description":268},"ChatMessage","\u002Fdocs\u002Fcomponents\u002Fchat-message","docs\u002F2.components\u002Fchat-message","Display a chat message with icon, avatar, and actions.",{"title":270,"path":271,"stem":272,"framework":16,"category":262,"description":273},"ChatMessages","\u002Fdocs\u002Fcomponents\u002Fchat-messages","docs\u002F2.components\u002Fchat-messages","Display a list of chat messages, designed to work seamlessly with Vercel AI SDK.",{"title":275,"path":276,"stem":277,"framework":16,"category":262,"description":278},"ChatPalette","\u002Fdocs\u002Fcomponents\u002Fchat-palette","docs\u002F2.components\u002Fchat-palette","A chat palette to create a chatbot interface inside an overlay.",{"title":280,"path":281,"stem":282,"framework":16,"category":262,"description":283},"ChatPrompt","\u002Fdocs\u002Fcomponents\u002Fchat-prompt","docs\u002F2.components\u002Fchat-prompt","An enhanced Textarea for submitting prompts in AI chat interfaces.",{"title":285,"path":286,"stem":287,"framework":16,"category":262,"description":288},"ChatPromptSubmit","\u002Fdocs\u002Fcomponents\u002Fchat-prompt-submit","docs\u002F2.components\u002Fchat-prompt-submit","A Button for submitting chat prompts with automatic status handling.",{"title":290,"path":291,"stem":292,"framework":16,"category":262,"description":293,"badge":294},"ChatReasoning","\u002Fdocs\u002Fcomponents\u002Fchat-reasoning","docs\u002F2.components\u002Fchat-reasoning","Display a collapsible AI reasoning or thinking process.","New",{"title":296,"path":297,"stem":298,"framework":16,"category":262,"description":299,"badge":294},"ChatShimmer","\u002Fdocs\u002Fcomponents\u002Fchat-shimmer","docs\u002F2.components\u002Fchat-shimmer","Display a text shimmer animation effect.",{"title":301,"path":302,"stem":303,"framework":16,"category":262,"description":304,"badge":294},"ChatTool","\u002Fdocs\u002Fcomponents\u002Fchat-tool","docs\u002F2.components\u002Fchat-tool","Display a collapsible AI tool invocation status.",{"title":306,"path":307,"stem":308,"framework":16,"category":309,"description":310},"Checkbox","\u002Fdocs\u002Fcomponents\u002Fcheckbox","docs\u002F2.components\u002Fcheckbox","form","An input element to toggle between checked and unchecked states.",{"title":312,"path":313,"stem":314,"framework":16,"category":309,"description":315},"CheckboxGroup","\u002Fdocs\u002Fcomponents\u002Fcheckbox-group","docs\u002F2.components\u002Fcheckbox-group","A set of checklist buttons to select multiple option from a list.",{"title":317,"path":318,"stem":319,"framework":16,"category":178,"description":320},"Chip","\u002Fdocs\u002Fcomponents\u002Fchip","docs\u002F2.components\u002Fchip","An indicator of a numeric value or a state.",{"title":322,"path":323,"stem":324,"framework":16,"category":178,"description":325},"Collapsible","\u002Fdocs\u002Fcomponents\u002Fcollapsible","docs\u002F2.components\u002Fcollapsible","A collapsible element to toggle visibility of its content.",{"title":327,"path":328,"stem":329,"framework":16,"category":330,"description":331},"ColorModeAvatar","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-avatar","docs\u002F2.components\u002Fcolor-mode-avatar","color-mode","An Avatar with a different source for light and dark mode.",{"title":333,"path":334,"stem":335,"framework":16,"category":330,"description":336},"ColorModeButton","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-button","docs\u002F2.components\u002Fcolor-mode-button","A Button to switch between light and dark mode.",{"title":338,"path":339,"stem":340,"framework":16,"category":330,"description":341},"ColorModeImage","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-image","docs\u002F2.components\u002Fcolor-mode-image","An image element with a different source for light and dark mode.",{"title":343,"path":344,"stem":345,"framework":16,"category":330,"description":346},"ColorModeSelect","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-select","docs\u002F2.components\u002Fcolor-mode-select","A Select to switch between system, dark & light mode.",{"title":348,"path":349,"stem":350,"framework":16,"category":330,"description":351},"ColorModeSwitch","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-switch","docs\u002F2.components\u002Fcolor-mode-switch","A switch to toggle between light and dark mode.",{"title":353,"path":354,"stem":355,"framework":16,"category":309,"description":356},"ColorPicker","\u002Fdocs\u002Fcomponents\u002Fcolor-picker","docs\u002F2.components\u002Fcolor-picker","A component to select a color.",{"title":358,"path":359,"stem":360,"framework":16,"category":226,"description":361},"CommandPalette","\u002Fdocs\u002Fcomponents\u002Fcommand-palette","docs\u002F2.components\u002Fcommand-palette","A command palette with full-text search powered by Fuse.js for efficient fuzzy matching.",{"title":363,"path":364,"stem":365,"framework":16,"category":184,"description":366},"Container","\u002Fdocs\u002Fcomponents\u002Fcontainer","docs\u002F2.components\u002Fcontainer","A container lets you center and constrain the width of your content.",{"title":368,"path":369,"stem":370,"framework":28,"category":371,"description":372},"ContentNavigation","\u002Fdocs\u002Fcomponents\u002Fcontent-navigation","docs\u002F2.components\u002Fcontent-navigation","content","An accordion-style navigation component for organizing page links.",{"title":374,"path":375,"stem":376,"framework":28,"category":371,"description":377},"ContentSearch","\u002Fdocs\u002Fcomponents\u002Fcontent-search","docs\u002F2.components\u002Fcontent-search","A ready to use CommandPalette to add to your documentation.",{"title":379,"path":380,"stem":381,"framework":28,"category":371,"description":382},"ContentSearchButton","\u002Fdocs\u002Fcomponents\u002Fcontent-search-button","docs\u002F2.components\u002Fcontent-search-button","A pre-styled Button to open the ContentSearch modal.",{"title":384,"path":385,"stem":386,"framework":28,"category":371,"description":387},"ContentSurround","\u002Fdocs\u002Fcomponents\u002Fcontent-surround","docs\u002F2.components\u002Fcontent-surround","A pair of prev and next links to navigate between pages.",{"title":389,"path":390,"stem":391,"framework":28,"category":371,"description":392},"ContentToc","\u002Fdocs\u002Fcomponents\u002Fcontent-toc","docs\u002F2.components\u002Fcontent-toc","A sticky Table of Contents with automatic active anchor link highlighting.",{"title":394,"path":395,"stem":396,"framework":16,"category":397,"description":398},"ContextMenu","\u002Fdocs\u002Fcomponents\u002Fcontext-menu","docs\u002F2.components\u002Fcontext-menu","overlay","A menu to display actions when right-clicking on an element.",{"title":400,"path":401,"stem":402,"framework":16,"category":403,"description":404},"DashboardGroup","\u002Fdocs\u002Fcomponents\u002Fdashboard-group","docs\u002F2.components\u002Fdashboard-group","dashboard","A fixed layout component that provides context for dashboard components with sidebar state management and persistence.",{"title":406,"path":407,"stem":408,"framework":16,"category":403,"description":409},"DashboardNavbar","\u002Fdocs\u002Fcomponents\u002Fdashboard-navbar","docs\u002F2.components\u002Fdashboard-navbar","A responsive navbar to display in a dashboard.",{"title":411,"path":412,"stem":413,"framework":16,"category":403,"description":414},"DashboardPanel","\u002Fdocs\u002Fcomponents\u002Fdashboard-panel","docs\u002F2.components\u002Fdashboard-panel","A resizable panel to display in a dashboard.",{"title":416,"path":417,"stem":418,"framework":16,"category":403,"description":419},"DashboardResizeHandle","\u002Fdocs\u002Fcomponents\u002Fdashboard-resize-handle","docs\u002F2.components\u002Fdashboard-resize-handle","A handle to resize a sidebar or panel.",{"title":421,"path":422,"stem":423,"framework":16,"category":403,"description":424},"DashboardSearch","\u002Fdocs\u002Fcomponents\u002Fdashboard-search","docs\u002F2.components\u002Fdashboard-search","A ready to use CommandPalette to add to your dashboard.",{"title":426,"path":427,"stem":428,"framework":16,"category":403,"description":429},"DashboardSearchButton","\u002Fdocs\u002Fcomponents\u002Fdashboard-search-button","docs\u002F2.components\u002Fdashboard-search-button","A pre-styled Button to open the DashboardSearch modal.",{"title":431,"path":432,"stem":433,"framework":16,"category":403,"description":434},"DashboardSidebar","\u002Fdocs\u002Fcomponents\u002Fdashboard-sidebar","docs\u002F2.components\u002Fdashboard-sidebar","A resizable and collapsible sidebar to display in a dashboard.",{"title":436,"path":437,"stem":438,"framework":16,"category":403,"description":439},"DashboardSidebarCollapse","\u002Fdocs\u002Fcomponents\u002Fdashboard-sidebar-collapse","docs\u002F2.components\u002Fdashboard-sidebar-collapse","A Button to collapse the sidebar on desktop.",{"title":441,"path":442,"stem":443,"framework":16,"category":403,"description":444},"DashboardSidebarToggle","\u002Fdocs\u002Fcomponents\u002Fdashboard-sidebar-toggle","docs\u002F2.components\u002Fdashboard-sidebar-toggle","A Button to toggle the sidebar on mobile.",{"title":446,"path":447,"stem":448,"framework":16,"category":403,"description":449},"DashboardToolbar","\u002Fdocs\u002Fcomponents\u002Fdashboard-toolbar","docs\u002F2.components\u002Fdashboard-toolbar","A toolbar to display under the navbar in a dashboard.",{"title":451,"path":452,"stem":453,"framework":16,"category":397,"description":454},"Drawer","\u002Fdocs\u002Fcomponents\u002Fdrawer","docs\u002F2.components\u002Fdrawer","A drawer that smoothly slides in & out of the screen.",{"title":456,"path":457,"stem":458,"framework":16,"category":397,"description":459},"DropdownMenu","\u002Fdocs\u002Fcomponents\u002Fdropdown-menu","docs\u002F2.components\u002Fdropdown-menu","A menu to display actions when clicking on an element.",{"title":461,"path":462,"stem":463,"framework":16,"category":464,"description":465},"Editor","\u002Fdocs\u002Fcomponents\u002Feditor","docs\u002F2.components\u002Feditor","editor","A rich text editor component based on TipTap with support for markdown, HTML, and JSON content types.",{"title":467,"path":468,"stem":469,"framework":16,"category":464,"description":470},"EditorDragHandle","\u002Fdocs\u002Fcomponents\u002Feditor-drag-handle","docs\u002F2.components\u002Feditor-drag-handle","A draggable handle for reordering and selecting blocks in the editor.",{"title":472,"path":473,"stem":474,"framework":16,"category":464,"description":475},"EditorEmojiMenu","\u002Fdocs\u002Fcomponents\u002Feditor-emoji-menu","docs\u002F2.components\u002Feditor-emoji-menu","An emoji picker menu that displays emoji suggestions when typing the : character in the editor.",{"title":477,"path":478,"stem":479,"framework":16,"category":464,"description":480},"EditorMentionMenu","\u002Fdocs\u002Fcomponents\u002Feditor-mention-menu","docs\u002F2.components\u002Feditor-mention-menu","A mention menu that displays user suggestions when typing a trigger character in the editor.",{"title":482,"path":483,"stem":484,"framework":16,"category":464,"description":485},"EditorSuggestionMenu","\u002Fdocs\u002Fcomponents\u002Feditor-suggestion-menu","docs\u002F2.components\u002Feditor-suggestion-menu","A command menu that displays formatting and action suggestions when typing the \u002F character in the editor.",{"title":487,"path":488,"stem":489,"framework":16,"category":464,"description":490},"EditorToolbar","\u002Fdocs\u002Fcomponents\u002Feditor-toolbar","docs\u002F2.components\u002Feditor-toolbar","A customizable toolbar for editor actions that can be displayed as fixed, bubble, or floating menu.",{"title":492,"path":493,"stem":494,"framework":16,"category":172,"description":495},"Empty","\u002Fdocs\u002Fcomponents\u002Fempty","docs\u002F2.components\u002Fempty","A component to display an empty state.",{"title":497,"path":498,"stem":499,"framework":16,"category":184,"description":500},"Error","\u002Fdocs\u002Fcomponents\u002Ferror","docs\u002F2.components\u002Ferror","A pre-built error component with NuxtError support.",{"title":502,"path":503,"stem":504,"framework":16,"category":178,"description":505},"FieldGroup","\u002Fdocs\u002Fcomponents\u002Ffield-group","docs\u002F2.components\u002Ffield-group","Group multiple button-like elements together.",{"title":507,"path":508,"stem":509,"framework":16,"category":309,"description":510},"FileUpload","\u002Fdocs\u002Fcomponents\u002Ffile-upload","docs\u002F2.components\u002Ffile-upload","An input element to upload files.",{"title":512,"path":513,"stem":514,"framework":16,"category":184,"description":515},"Footer","\u002Fdocs\u002Fcomponents\u002Ffooter","docs\u002F2.components\u002Ffooter","A responsive footer component.",{"title":517,"path":518,"stem":519,"framework":16,"category":226,"description":520},"FooterColumns","\u002Fdocs\u002Fcomponents\u002Ffooter-columns","docs\u002F2.components\u002Ffooter-columns","A list of links as columns to display in your Footer.",{"title":522,"path":523,"stem":524,"framework":16,"category":309,"description":525},"Form","\u002Fdocs\u002Fcomponents\u002Fform","docs\u002F2.components\u002Fform","A form component with built-in validation and submission handling.",{"title":527,"path":528,"stem":529,"framework":16,"category":309,"description":530},"FormField","\u002Fdocs\u002Fcomponents\u002Fform-field","docs\u002F2.components\u002Fform-field","A wrapper for form elements that provides validation and error handling.",{"title":532,"path":533,"stem":534,"framework":16,"category":184,"description":535},"Header","\u002Fdocs\u002Fcomponents\u002Fheader","docs\u002F2.components\u002Fheader","A responsive header component.",{"title":537,"path":538,"stem":539,"framework":16,"category":178,"description":540},"Icon","\u002Fdocs\u002Fcomponents\u002Ficon","docs\u002F2.components\u002Ficon","A component to display any icon from Iconify or another component.",{"title":542,"path":543,"stem":544,"framework":16,"category":309,"description":545},"Input","\u002Fdocs\u002Fcomponents\u002Finput","docs\u002F2.components\u002Finput","An input element to enter text.",{"title":547,"path":548,"stem":549,"framework":16,"category":309,"description":550},"InputDate","\u002Fdocs\u002Fcomponents\u002Finput-date","docs\u002F2.components\u002Finput-date","An input component for date selection.",{"title":552,"path":553,"stem":554,"framework":16,"category":309,"description":555},"InputMenu","\u002Fdocs\u002Fcomponents\u002Finput-menu","docs\u002F2.components\u002Finput-menu","An autocomplete input with real-time suggestions.",{"title":557,"path":558,"stem":559,"framework":16,"category":309,"description":560},"InputNumber","\u002Fdocs\u002Fcomponents\u002Finput-number","docs\u002F2.components\u002Finput-number","An input for numerical values with a customizable range.",{"title":562,"path":563,"stem":564,"framework":16,"category":309,"description":565},"InputTags","\u002Fdocs\u002Fcomponents\u002Finput-tags","docs\u002F2.components\u002Finput-tags","An input element that displays interactive tags.",{"title":567,"path":568,"stem":569,"framework":16,"category":309,"description":570},"InputTime","\u002Fdocs\u002Fcomponents\u002Finput-time","docs\u002F2.components\u002Finput-time","An input for selecting a time.",{"title":572,"path":573,"stem":574,"framework":16,"category":178,"description":575},"Kbd","\u002Fdocs\u002Fcomponents\u002Fkbd","docs\u002F2.components\u002Fkbd","A kbd element to display a keyboard key.",{"title":577,"path":578,"stem":579,"framework":16,"category":226,"description":580},"Link","\u002Fdocs\u002Fcomponents\u002Flink","docs\u002F2.components\u002Flink","A wrapper around \u003CNuxtLink> with extra props.",{"title":582,"path":583,"stem":584,"framework":16,"category":585,"description":586},"LocaleSelect","\u002Fdocs\u002Fcomponents\u002Flocale-select","docs\u002F2.components\u002Flocale-select","i18n","A Select to switch between locales.",{"title":588,"path":589,"stem":590,"framework":16,"category":184,"description":591},"Main","\u002Fdocs\u002Fcomponents\u002Fmain","docs\u002F2.components\u002Fmain","A main element that fills the available viewport height.",{"title":593,"path":594,"stem":595,"framework":16,"category":172,"description":596},"Marquee","\u002Fdocs\u002Fcomponents\u002Fmarquee","docs\u002F2.components\u002Fmarquee","A component to create infinite scrolling content.",{"title":598,"path":599,"stem":600,"framework":16,"category":397,"description":601},"Modal","\u002Fdocs\u002Fcomponents\u002Fmodal","docs\u002F2.components\u002Fmodal","A dialog window that can be used to display a message or request user input.",{"title":603,"path":604,"stem":605,"framework":16,"category":226,"description":606},"NavigationMenu","\u002Fdocs\u002Fcomponents\u002Fnavigation-menu","docs\u002F2.components\u002Fnavigation-menu","A list of links that can be displayed horizontally or vertically.",{"title":608,"path":609,"stem":610,"framework":16,"category":190,"description":611},"Page","\u002Fdocs\u002Fcomponents\u002Fpage","docs\u002F2.components\u002Fpage","A grid layout for your pages with left and right columns.",{"title":613,"path":614,"stem":615,"framework":16,"category":190,"description":616},"PageAnchors","\u002Fdocs\u002Fcomponents\u002Fpage-anchors","docs\u002F2.components\u002Fpage-anchors","A list of anchors to be displayed in the page.",{"title":618,"path":619,"stem":620,"framework":16,"category":190,"description":621},"PageAside","\u002Fdocs\u002Fcomponents\u002Fpage-aside","docs\u002F2.components\u002Fpage-aside","A sticky aside to display your page navigation.",{"title":623,"path":624,"stem":625,"framework":16,"category":190,"description":626},"PageBody","\u002Fdocs\u002Fcomponents\u002Fpage-body","docs\u002F2.components\u002Fpage-body","The main content of your page.",{"title":628,"path":629,"stem":630,"framework":16,"category":190,"description":631},"PageCard","\u002Fdocs\u002Fcomponents\u002Fpage-card","docs\u002F2.components\u002Fpage-card","A pre-styled card component that displays a title, description and optional link.",{"title":633,"path":634,"stem":635,"framework":16,"category":190,"description":636},"PageColumns","\u002Fdocs\u002Fcomponents\u002Fpage-columns","docs\u002F2.components\u002Fpage-columns","A responsive multi-column layout system for organizing content side-by-side.",{"title":638,"path":639,"stem":640,"framework":16,"category":190,"description":641},"PageCTA","\u002Fdocs\u002Fcomponents\u002Fpage-cta","docs\u002F2.components\u002Fpage-cta","A call to action section to display in your pages.",{"title":643,"path":644,"stem":645,"framework":16,"category":190,"description":646},"PageFeature","\u002Fdocs\u002Fcomponents\u002Fpage-feature","docs\u002F2.components\u002Fpage-feature","A component to showcase key features of your application.",{"title":648,"path":649,"stem":650,"framework":16,"category":190,"description":651},"PageGrid","\u002Fdocs\u002Fcomponents\u002Fpage-grid","docs\u002F2.components\u002Fpage-grid","A responsive grid system for displaying content in a flexible layout.",{"title":653,"path":654,"stem":655,"framework":16,"category":190,"description":656},"PageHeader","\u002Fdocs\u002Fcomponents\u002Fpage-header","docs\u002F2.components\u002Fpage-header","A responsive header for your pages.",{"title":658,"path":659,"stem":660,"framework":16,"category":190,"description":661},"PageHero","\u002Fdocs\u002Fcomponents\u002Fpage-hero","docs\u002F2.components\u002Fpage-hero","A responsive hero for your pages.",{"title":663,"path":664,"stem":665,"framework":16,"category":190,"description":666},"PageLinks","\u002Fdocs\u002Fcomponents\u002Fpage-links","docs\u002F2.components\u002Fpage-links","A list of links to be displayed in the page.",{"title":668,"path":669,"stem":670,"framework":16,"category":190,"description":671},"PageList","\u002Fdocs\u002Fcomponents\u002Fpage-list","docs\u002F2.components\u002Fpage-list","A vertical list layout for displaying content in a stacked format.",{"title":673,"path":674,"stem":675,"framework":16,"category":190,"description":676},"PageLogos","\u002Fdocs\u002Fcomponents\u002Fpage-logos","docs\u002F2.components\u002Fpage-logos","A list of logos or images to display on your pages.",{"title":678,"path":679,"stem":680,"framework":16,"category":190,"description":681},"PageSection","\u002Fdocs\u002Fcomponents\u002Fpage-section","docs\u002F2.components\u002Fpage-section","A responsive section for your pages.",{"title":683,"path":684,"stem":685,"framework":16,"category":226,"description":686},"Pagination","\u002Fdocs\u002Fcomponents\u002Fpagination","docs\u002F2.components\u002Fpagination","A list of buttons or links to navigate through pages.",{"title":688,"path":689,"stem":690,"framework":16,"category":309,"description":691},"PinInput","\u002Fdocs\u002Fcomponents\u002Fpin-input","docs\u002F2.components\u002Fpin-input","An input element to enter a pin.",{"title":693,"path":694,"stem":695,"framework":16,"category":397,"description":696},"Popover","\u002Fdocs\u002Fcomponents\u002Fpopover","docs\u002F2.components\u002Fpopover","A non-modal dialog that floats around a trigger element.",{"title":698,"path":699,"stem":700,"framework":16,"category":190,"description":701},"PricingPlan","\u002Fdocs\u002Fcomponents\u002Fpricing-plan","docs\u002F2.components\u002Fpricing-plan","A customizable pricing plan to display in a pricing page.",{"title":703,"path":704,"stem":705,"framework":16,"category":190,"description":706},"PricingPlans","\u002Fdocs\u002Fcomponents\u002Fpricing-plans","docs\u002F2.components\u002Fpricing-plans","Display a list of pricing plans in a responsive grid layout.",{"title":708,"path":709,"stem":710,"framework":16,"category":190,"description":711},"PricingTable","\u002Fdocs\u002Fcomponents\u002Fpricing-table","docs\u002F2.components\u002Fpricing-table","A responsive pricing table component that displays tiered pricing plans with feature comparisons.",{"title":713,"path":714,"stem":715,"framework":16,"category":178,"description":716},"Progress","\u002Fdocs\u002Fcomponents\u002Fprogress","docs\u002F2.components\u002Fprogress","An indicator showing the progress of a task.",{"title":718,"path":719,"stem":720,"framework":16,"category":309,"description":721},"RadioGroup","\u002Fdocs\u002Fcomponents\u002Fradio-group","docs\u002F2.components\u002Fradio-group","A set of radio buttons to select a single option from a list.",{"title":723,"path":724,"stem":725,"framework":16,"category":172,"description":726},"ScrollArea","\u002Fdocs\u002Fcomponents\u002Fscroll-area","docs\u002F2.components\u002Fscroll-area","A flexible scroll container with virtualization support.",{"title":728,"path":729,"stem":730,"framework":16,"category":309,"description":731},"Select","\u002Fdocs\u002Fcomponents\u002Fselect","docs\u002F2.components\u002Fselect","A select element to choose from a list of options.",{"title":733,"path":734,"stem":735,"framework":16,"category":309,"description":736},"SelectMenu","\u002Fdocs\u002Fcomponents\u002Fselect-menu","docs\u002F2.components\u002Fselect-menu","An advanced searchable select element.",{"title":738,"path":739,"stem":740,"framework":16,"category":178,"description":741},"Separator","\u002Fdocs\u002Fcomponents\u002Fseparator","docs\u002F2.components\u002Fseparator","Separates content horizontally or vertically.",{"title":743,"path":744,"stem":745,"framework":16,"category":184,"description":746,"badge":294},"Sidebar","\u002Fdocs\u002Fcomponents\u002Fsidebar","docs\u002F2.components\u002Fsidebar","A collapsible sidebar with multiple visual variants.",{"title":748,"path":749,"stem":750,"framework":16,"category":178,"description":751},"Skeleton","\u002Fdocs\u002Fcomponents\u002Fskeleton","docs\u002F2.components\u002Fskeleton","A placeholder to show while content is loading.",{"title":753,"path":754,"stem":755,"framework":16,"category":397,"description":756},"Slideover","\u002Fdocs\u002Fcomponents\u002Fslideover","docs\u002F2.components\u002Fslideover","A dialog that slides in from any side of the screen.",{"title":758,"path":759,"stem":760,"framework":16,"category":309,"description":761},"Slider","\u002Fdocs\u002Fcomponents\u002Fslider","docs\u002F2.components\u002Fslider","An input to select a numeric value within a range.",{"title":763,"path":764,"stem":765,"framework":16,"category":226,"description":766},"Stepper","\u002Fdocs\u002Fcomponents\u002Fstepper","docs\u002F2.components\u002Fstepper","A set of steps that are used to indicate progress through a multi-step process.",{"title":768,"path":769,"stem":770,"framework":16,"category":309,"description":771},"Switch","\u002Fdocs\u002Fcomponents\u002Fswitch","docs\u002F2.components\u002Fswitch","A control that toggles between two states.",{"title":773,"path":774,"stem":775,"framework":16,"category":172,"description":776},"Table","\u002Fdocs\u002Fcomponents\u002Ftable","docs\u002F2.components\u002Ftable","A responsive table element to display data in rows and columns.",{"title":778,"path":779,"stem":780,"framework":16,"category":226,"description":781},"Tabs","\u002Fdocs\u002Fcomponents\u002Ftabs","docs\u002F2.components\u002Ftabs","A set of tab panels that are displayed one at a time.",{"title":783,"path":784,"stem":785,"framework":16,"category":309,"description":786},"Textarea","\u002Fdocs\u002Fcomponents\u002Ftextarea","docs\u002F2.components\u002Ftextarea","A textarea element to input multi-line text.",{"title":54,"path":788,"stem":789,"framework":16,"category":184,"description":790},"\u002Fdocs\u002Fcomponents\u002Ftheme","docs\u002F2.components\u002Ftheme","A headless component to theme child components.",{"title":792,"path":793,"stem":794,"framework":16,"category":172,"description":795},"Timeline","\u002Fdocs\u002Fcomponents\u002Ftimeline","docs\u002F2.components\u002Ftimeline","A component that displays a sequence of events with dates, titles, icons or avatars.",{"title":797,"path":798,"stem":799,"framework":16,"category":397,"description":800},"Toast","\u002Fdocs\u002Fcomponents\u002Ftoast","docs\u002F2.components\u002Ftoast","A succinct message to provide information or feedback to the user.",{"title":802,"path":803,"stem":804,"framework":16,"category":397,"description":805},"Tooltip","\u002Fdocs\u002Fcomponents\u002Ftooltip","docs\u002F2.components\u002Ftooltip","A popup that reveals information when hovering over an element.",{"title":807,"path":808,"stem":809,"framework":16,"category":172,"description":810},"Tree","\u002Fdocs\u002Fcomponents\u002Ftree","docs\u002F2.components\u002Ftree","A tree view component to display and interact with hierarchical data structures.",{"title":812,"path":813,"stem":814,"framework":16,"category":172,"description":815},"User","\u002Fdocs\u002Fcomponents\u002Fuser","docs\u002F2.components\u002Fuser","Display user information with name, description and avatar.",{"title":817,"framework":16,"category":16,"description":16,"icon":818,"path":819,"stem":820,"children":821,"page":36},"Composables","i-lucide-square-function","\u002Fdocs\u002Fcomposables","docs\u002F3.composables",[822,827,832,837,842,847,852],{"title":823,"path":824,"stem":825,"framework":16,"category":16,"description":826},"defineLocale","\u002Fdocs\u002Fcomposables\u002Fdefine-locale","docs\u002F3.composables\u002Fdefine-locale","A utility to create a custom locale for your app.",{"title":828,"path":829,"stem":830,"framework":16,"category":16,"description":831},"defineShortcuts","\u002Fdocs\u002Fcomposables\u002Fdefine-shortcuts","docs\u002F3.composables\u002Fdefine-shortcuts","A composable to define keyboard shortcuts in your app.",{"title":833,"path":834,"stem":835,"framework":16,"category":16,"description":836},"extendLocale","\u002Fdocs\u002Fcomposables\u002Fextend-locale","docs\u002F3.composables\u002Fextend-locale","A utility to extend an existing locale with custom translations.",{"title":838,"path":839,"stem":840,"framework":16,"category":16,"description":841},"extractShortcuts","\u002Fdocs\u002Fcomposables\u002Fextract-shortcuts","docs\u002F3.composables\u002Fextract-shortcuts","A utility to extract keyboard shortcuts from menu items.",{"title":843,"path":844,"stem":845,"framework":16,"category":16,"description":846},"useOverlay","\u002Fdocs\u002Fcomposables\u002Fuse-overlay","docs\u002F3.composables\u002Fuse-overlay","A composable to programmatically control overlays.",{"title":848,"path":849,"stem":850,"framework":16,"category":16,"description":851,"badge":294},"useScrollShadow","\u002Fdocs\u002Fcomposables\u002Fuse-scroll-shadow","docs\u002F3.composables\u002Fuse-scroll-shadow","A composable to apply scroll shadow effects on any scrollable element.",{"title":853,"path":854,"stem":855,"framework":16,"category":16,"description":856},"useToast","\u002Fdocs\u002Fcomposables\u002Fuse-toast","docs\u002F3.composables\u002Fuse-toast","A composable to display toast notifications in your app.",{"title":858,"path":859,"stem":860,"children":861,"framework":16,"category":16,"description":16,"icon":957},"Typography","\u002Fdocs\u002Ftypography","docs\u002F4.typography\u002F1.index",[862,864,869,874,879,884,889,893,898,902,907,912,917,922,927,931,936,940,944,948,953],{"title":15,"path":859,"stem":860,"framework":16,"category":16,"description":863},"Beautiful typography components and utilities to style your content with Nuxt UI.",{"title":865,"path":866,"stem":867,"framework":16,"category":16,"description":868},"Headers and text","\u002Fdocs\u002Ftypography\u002Fheaders-and-text","docs\u002F4.typography\u002F2.headers-and-text","Beautifully styled headings, paragraphs, text formatting, and links for optimal readability.",{"title":870,"path":871,"stem":872,"framework":16,"category":16,"description":873},"Lists and tables","\u002Fdocs\u002Ftypography\u002Flists-and-tables","docs\u002F4.typography\u002F3.lists-and-tables","Organize information with styled lists and responsive tables for clear, consistent readability.",{"title":875,"path":876,"stem":877,"framework":16,"category":16,"description":878},"Images and embeds","\u002Fdocs\u002Ftypography\u002Fimages-and-embeds","docs\u002F4.typography\u002F4.images-and-embeds","Responsive images, videos, and rich media embeds to enhance and illustrate your documentation.",{"title":880,"path":881,"stem":882,"framework":16,"category":16,"description":883},"Code","\u002Fdocs\u002Ftypography\u002Fcode","docs\u002F4.typography\u002F5.code","Display inline code and syntax-highlighted code blocks with copy-to-clipboard support.",{"title":169,"path":885,"stem":886,"framework":16,"category":887,"description":888},"\u002Fdocs\u002Ftypography\u002Faccordion","docs\u002F4.typography\u002Faccordion","components","Create expandable content sections for better information organization.",{"title":203,"path":890,"stem":891,"framework":16,"category":887,"description":892},"\u002Fdocs\u002Ftypography\u002Fbadge","docs\u002F4.typography\u002Fbadge","Display version numbers, status labels, and tags within your content.",{"title":894,"path":895,"stem":896,"framework":16,"category":887,"description":897},"Callout","\u002Fdocs\u002Ftypography\u002Fcallout","docs\u002F4.typography\u002Fcallout","Highlight important information with eye-catching colored boxes and icons.",{"title":239,"path":899,"stem":900,"framework":16,"category":887,"description":901},"\u002Fdocs\u002Ftypography\u002Fcard","docs\u002F4.typography\u002Fcard","Create highlighted content blocks with optional links and navigation.",{"title":903,"path":904,"stem":905,"framework":16,"category":887,"description":906},"CardGroup","\u002Fdocs\u002Ftypography\u002Fcard-group","docs\u002F4.typography\u002Fcard-group","Organize multiple cards in responsive grid layouts for better content presentation.",{"title":908,"path":909,"stem":910,"framework":16,"category":887,"description":911},"CodeCollapse","\u002Fdocs\u002Ftypography\u002Fcode-collapse","docs\u002F4.typography\u002Fcode-collapse","Make long code blocks collapsible to save space and improve readability.",{"title":913,"path":914,"stem":915,"framework":16,"category":887,"description":916},"CodeGroup","\u002Fdocs\u002Ftypography\u002Fcode-group","docs\u002F4.typography\u002Fcode-group","Group multiple code examples in tabbed interfaces for easy comparison.",{"title":918,"path":919,"stem":920,"framework":16,"category":887,"description":921},"CodePreview","\u002Fdocs\u002Ftypography\u002Fcode-preview","docs\u002F4.typography\u002Fcode-preview","Display code examples with a preview and their source for clearer documentation.",{"title":923,"path":924,"stem":925,"framework":16,"category":887,"description":926},"CodeTree","\u002Fdocs\u002Ftypography\u002Fcode-tree","docs\u002F4.typography\u002Fcode-tree","Visualize file and folder structures with syntax-highlighted code.",{"title":322,"path":928,"stem":929,"framework":16,"category":887,"description":930},"\u002Fdocs\u002Ftypography\u002Fcollapsible","docs\u002F4.typography\u002Fcollapsible","Toggle content visibility with smooth expand and collapse animations.",{"title":932,"path":933,"stem":934,"framework":16,"category":887,"description":935},"Field","\u002Fdocs\u002Ftypography\u002Ffield","docs\u002F4.typography\u002Ffield","Document API parameters, props, and configuration options clearly.",{"title":502,"path":937,"stem":938,"framework":16,"category":887,"description":939},"\u002Fdocs\u002Ftypography\u002Ffield-group","docs\u002F4.typography\u002Ffield-group","Group related fields together for comprehensive API documentation.",{"title":537,"path":941,"stem":942,"framework":16,"category":887,"description":943},"\u002Fdocs\u002Ftypography\u002Ficon","docs\u002F4.typography\u002Ficon","Display icons from popular icon libraries to enhance your content.",{"title":572,"path":945,"stem":946,"framework":16,"category":887,"description":947},"\u002Fdocs\u002Ftypography\u002Fkbd","docs\u002F4.typography\u002Fkbd","Display keyboard shortcuts and key combinations with proper styling.",{"title":949,"path":950,"stem":951,"framework":16,"category":887,"description":952},"Steps","\u002Fdocs\u002Ftypography\u002Fsteps","docs\u002F4.typography\u002Fsteps","Transform headings into numbered step-by-step guides and tutorials.",{"title":778,"path":954,"stem":955,"framework":16,"category":887,"description":956},"\u002Fdocs\u002Ftypography\u002Ftabs","docs\u002F4.typography\u002Ftabs","Organize related content in interactive tabbed interfaces.","i-lucide-square-pilcrow",{"id":959,"title":960,"authors":961,"body":972,"date":12581,"description":12582,"extension":12583,"image":12584,"meta":12585,"navigation":36,"path":12587,"seo":12588,"stem":12589,"__hash__":12590},"posts\u002Fblog\u002Fhow-to-build-an-ai-chat.md","Build an AI Chatbot with Nuxt, Nuxt UI, and AI SDK",[962,967],{"name":963,"avatar":964,"to":966},"Hugo Richard",{"src":965},"https:\u002F\u002Fgithub.com\u002Fhugorcd.png","https:\u002F\u002Fx.com\u002Fhugorcd",{"name":968,"avatar":969,"to":971},"Benjamin Canac",{"src":970},"https:\u002F\u002Fgithub.com\u002Fbenjamincanac.png","https:\u002F\u002Fx.com\u002Fbenjamincanac",{"type":973,"value":974,"toc":12547},"minimark",[975,979,984,987,1022,1048,1052,1055,1069,1073,1076,1113,1118,1121,1274,1278,1285,1449,1461,1464,1503,1507,1514,1609,1616,1633,1642,1646,1660,2397,2400,2418,2428,2432,2440,2444,2455,2824,2828,2855,4593,4596,4601,4608,4613,4624,4629,4638,4656,4661,4676,4689,4693,4696,5071,5075,5090,5094,5102,5675,5682,5707,5711,5739,5936,5943,5946,6079,6083,6101,7519,7522,7527,7538,7576,7591,7596,7603,7617,7622,7649,7654,7661,7672,7676,7679,7683,7686,7839,7843,7868,8346,8350,8889,8893,10202,10211,10215,10222,10226,10236,10494,10498,10506,10753,10757,10760,12151,12155,12158,12163,12172,12177,12186,12389,12393,12396,12411,12414,12429,12444,12453,12457,12460,12491,12494,12499,12540,12543],[976,977,978],"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.",[980,981,983],"h2",{"id":982},"what-were-building","What we're building",[976,985,986],{},"By the end of this tutorial, you'll have a fully functional AI chatbot with:",[988,989,990,998,1004,1010,1016],"ul",{},[991,992,993,997],"li",{},[994,995,996],"strong",{},"Streaming responses"," that appear in real-time as the AI generates them",[991,999,1000,1003],{},[994,1001,1002],{},"A beautiful chat interface"," built with Nuxt UI's purpose-built chat components",[991,1005,1006,1009],{},[994,1007,1008],{},"Markdown rendering"," for rich AI responses with code highlighting",[991,1011,1012,1015],{},[994,1013,1014],{},"Multi-model support"," allowing users to switch between OpenAI, Anthropic, and Google models",[991,1017,1018,1021],{},[994,1019,1020],{},"Server-side AI integration"," using Nitro API routes and the AI SDK",[1023,1024,1026],"callout",{"icon":1025},"i-simple-icons-github",[976,1027,1028,1029,1039,1040,1047],{},"Check out the ",[1030,1031,1035],"a",{"href":1032,"rel":1033},"https:\u002F\u002Fgithub.com\u002Fnuxt-ui-templates\u002Fchat",[1034],"nofollow",[1036,1037,1038],"code",{},"Nuxt"," and ",[1030,1041,1044],{"href":1042,"rel":1043},"https:\u002F\u002Fgithub.com\u002Fnuxt-ui-templates\u002Fchat-vue",[1034],[1036,1045,1046],{},"Vue"," AI Chat templates on GitHub for production-ready implementations with authentication, database persistence, and more.",[980,1049,1051],{"id":1050},"prerequisites","Prerequisites",[976,1053,1054],{},"Before we start, make sure you have:",[988,1056,1057,1060],{},[991,1058,1059],{},"Node.js 20+ installed",[991,1061,1062,1063,1068],{},"A ",[1030,1064,1067],{"href":1065,"rel":1066},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fai-gateway",[1034],"Vercel AI Gateway"," API key (provides access to multiple AI providers through a single endpoint)",[980,1070,1072],{"id":1071},"project-setup","Project setup",[976,1074,1075],{},"Start by creating a new Nuxt project:",[1077,1078,1083],"pre",{"className":1079,"code":1080,"language":1081,"meta":1082,"style":1082},"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","",[1036,1084,1085,1104],{"__ignoreMap":1082},[1086,1087,1090,1094,1098,1101],"span",{"class":1088,"line":1089},"line",1,[1086,1091,1093],{"class":1092},"sBMFI","npx",[1086,1095,1097],{"class":1096},"sfazB"," nuxi@latest",[1086,1099,1100],{"class":1096}," init",[1086,1102,1103],{"class":1096}," nuxt-ai-chat\n",[1086,1105,1107,1111],{"class":1088,"line":1106},2,[1086,1108,1110],{"class":1109},"s2Zo4","cd",[1086,1112,1103],{"class":1096},[1114,1115,1117],"h3",{"id":1116},"installing-dependencies","Installing dependencies",[976,1119,1120],{},"Install Nuxt UI and the AI-specific dependencies:",[1122,1123,1125,1171,1205,1240],"code-group",{"sync":1124},"pm",[1077,1126,1129],{"className":1079,"code":1127,"filename":1128,"language":1081,"meta":1082,"style":1082},"pnpm add @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","pnpm",[1036,1130,1131],{"__ignoreMap":1082},[1086,1132,1133,1135,1138,1141,1144,1147,1150,1153,1156,1159,1162,1165,1168],{"class":1088,"line":1089},[1086,1134,1128],{"class":1092},[1086,1136,1137],{"class":1096}," add",[1086,1139,1140],{"class":1096}," @nuxt\u002Fui",[1086,1142,1143],{"class":1096}," tailwindcss",[1086,1145,1146],{"class":1096}," @comark\u002Fnuxt",[1086,1148,1149],{"class":1096}," @shikijs\u002Flangs",[1086,1151,1152],{"class":1096}," @nuxthub\u002Fcore",[1086,1154,1155],{"class":1096}," drizzle-orm",[1086,1157,1158],{"class":1096}," drizzle-kit",[1086,1160,1161],{"class":1096}," @libsql\u002Fclient",[1086,1163,1164],{"class":1096}," ai",[1086,1166,1167],{"class":1096}," @ai-sdk\u002Fvue",[1086,1169,1170],{"class":1096}," zod\n",[1077,1172,1175],{"className":1079,"code":1173,"filename":1174,"language":1081,"meta":1082,"style":1082},"yarn add @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","yarn",[1036,1176,1177],{"__ignoreMap":1082},[1086,1178,1179,1181,1183,1185,1187,1189,1191,1193,1195,1197,1199,1201,1203],{"class":1088,"line":1089},[1086,1180,1174],{"class":1092},[1086,1182,1137],{"class":1096},[1086,1184,1140],{"class":1096},[1086,1186,1143],{"class":1096},[1086,1188,1146],{"class":1096},[1086,1190,1149],{"class":1096},[1086,1192,1152],{"class":1096},[1086,1194,1155],{"class":1096},[1086,1196,1158],{"class":1096},[1086,1198,1161],{"class":1096},[1086,1200,1164],{"class":1096},[1086,1202,1167],{"class":1096},[1086,1204,1170],{"class":1096},[1077,1206,1209],{"className":1079,"code":1207,"filename":1208,"language":1081,"meta":1082,"style":1082},"npm install @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","npm",[1036,1210,1211],{"__ignoreMap":1082},[1086,1212,1213,1215,1218,1220,1222,1224,1226,1228,1230,1232,1234,1236,1238],{"class":1088,"line":1089},[1086,1214,1208],{"class":1092},[1086,1216,1217],{"class":1096}," install",[1086,1219,1140],{"class":1096},[1086,1221,1143],{"class":1096},[1086,1223,1146],{"class":1096},[1086,1225,1149],{"class":1096},[1086,1227,1152],{"class":1096},[1086,1229,1155],{"class":1096},[1086,1231,1158],{"class":1096},[1086,1233,1161],{"class":1096},[1086,1235,1164],{"class":1096},[1086,1237,1167],{"class":1096},[1086,1239,1170],{"class":1096},[1077,1241,1244],{"className":1079,"code":1242,"filename":1243,"language":1081,"meta":1082,"style":1082},"bun add @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","bun",[1036,1245,1246],{"__ignoreMap":1082},[1086,1247,1248,1250,1252,1254,1256,1258,1260,1262,1264,1266,1268,1270,1272],{"class":1088,"line":1089},[1086,1249,1243],{"class":1092},[1086,1251,1137],{"class":1096},[1086,1253,1140],{"class":1096},[1086,1255,1143],{"class":1096},[1086,1257,1146],{"class":1096},[1086,1259,1149],{"class":1096},[1086,1261,1152],{"class":1096},[1086,1263,1155],{"class":1096},[1086,1265,1158],{"class":1096},[1086,1267,1161],{"class":1096},[1086,1269,1164],{"class":1096},[1086,1271,1167],{"class":1096},[1086,1273,1170],{"class":1096},[1114,1275,1277],{"id":1276},"configuration","Configuration",[976,1279,1280,1281,1284],{},"Update your ",[1036,1282,1283],{},"nuxt.config.ts"," to register the modules:",[1286,1287,1288],"code-tree-intersection",{},[1077,1289,1293],{"className":1290,"code":1291,"filename":1283,"language":1292,"meta":1082,"style":1082},"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",[1036,1294,1295,1315,1327,1342,1354,1365,1373,1379,1390,1406,1412,1417,1440],{"__ignoreMap":1082},[1086,1296,1297,1301,1304,1307,1311],{"class":1088,"line":1089},[1086,1298,1300],{"class":1299},"s7zQu","export",[1086,1302,1303],{"class":1299}," default",[1086,1305,1306],{"class":1109}," defineNuxtConfig",[1086,1308,1310],{"class":1309},"sTEyZ","(",[1086,1312,1314],{"class":1313},"sMK4o","{\n",[1086,1316,1317,1321,1324],{"class":1088,"line":1106},[1086,1318,1320],{"class":1319},"swJcz","  modules",[1086,1322,1323],{"class":1313},":",[1086,1325,1326],{"class":1309}," [\n",[1086,1328,1330,1333,1336,1339],{"class":1088,"line":1329},3,[1086,1331,1332],{"class":1313},"    '",[1086,1334,1335],{"class":1096},"@nuxt\u002Fui",[1086,1337,1338],{"class":1313},"'",[1086,1340,1341],{"class":1313},",\n",[1086,1343,1345,1347,1350,1352],{"class":1088,"line":1344},4,[1086,1346,1332],{"class":1313},[1086,1348,1349],{"class":1096},"@comark\u002Fnuxt",[1086,1351,1338],{"class":1313},[1086,1353,1341],{"class":1313},[1086,1355,1357,1359,1362],{"class":1088,"line":1356},5,[1086,1358,1332],{"class":1313},[1086,1360,1361],{"class":1096},"@nuxthub\u002Fcore",[1086,1363,1364],{"class":1313},"'\n",[1086,1366,1368,1371],{"class":1088,"line":1367},6,[1086,1369,1370],{"class":1309},"  ]",[1086,1372,1341],{"class":1313},[1086,1374,1376],{"class":1088,"line":1375},7,[1086,1377,1378],{"emptyLinePlaceholder":21},"\n",[1086,1380,1382,1385,1387],{"class":1088,"line":1381},8,[1086,1383,1384],{"class":1319},"  hub",[1086,1386,1323],{"class":1313},[1086,1388,1389],{"class":1313}," {\n",[1086,1391,1393,1396,1398,1401,1404],{"class":1088,"line":1392},9,[1086,1394,1395],{"class":1319},"    db",[1086,1397,1323],{"class":1313},[1086,1399,1400],{"class":1313}," '",[1086,1402,1403],{"class":1096},"sqlite",[1086,1405,1364],{"class":1313},[1086,1407,1409],{"class":1088,"line":1408},10,[1086,1410,1411],{"class":1313},"  },\n",[1086,1413,1415],{"class":1088,"line":1414},11,[1086,1416,1378],{"emptyLinePlaceholder":21},[1086,1418,1420,1423,1425,1428,1430,1433,1435,1438],{"class":1088,"line":1419},12,[1086,1421,1422],{"class":1319},"  css",[1086,1424,1323],{"class":1313},[1086,1426,1427],{"class":1309}," [",[1086,1429,1338],{"class":1313},[1086,1431,1432],{"class":1096},"~\u002Fassets\u002Fcss\u002Fmain.css",[1086,1434,1338],{"class":1313},[1086,1436,1437],{"class":1309},"]",[1086,1439,1341],{"class":1313},[1086,1441,1443,1446],{"class":1088,"line":1442},13,[1086,1444,1445],{"class":1313},"}",[1086,1447,1448],{"class":1309},")\n",[1450,1451,1452],"note",{"to":859},[976,1453,1454,1456,1457,1460],{},[1036,1455,1349],{}," automatically enables Nuxt UI's ",[1030,1458,1459],{"href":859},"prose components",", so Markdown rendered by Comark is styled to match your theme.",[976,1462,1463],{},"Create the main CSS file to import Tailwind CSS and Nuxt UI:",[1286,1465,1466],{},[1077,1467,1472],{"className":1468,"code":1469,"filename":1470,"language":1471,"meta":1082,"style":1082},"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",[1036,1473,1474,1491],{"__ignoreMap":1082},[1086,1475,1476,1479,1482,1485,1488],{"class":1088,"line":1089},[1086,1477,1478],{"class":1299},"@import",[1086,1480,1481],{"class":1313}," \"",[1086,1483,1484],{"class":1096},"tailwindcss",[1086,1486,1487],{"class":1313},"\"",[1086,1489,1490],{"class":1313},";\n",[1086,1492,1493,1495,1497,1499,1501],{"class":1088,"line":1106},[1086,1494,1478],{"class":1299},[1086,1496,1481],{"class":1313},[1086,1498,1335],{"class":1096},[1086,1500,1487],{"class":1313},[1086,1502,1490],{"class":1313},[1114,1504,1506],{"id":1505},"setting-up-the-app","Setting up the app",[976,1508,1509,1510,1513],{},"Nuxt UI requires wrapping your app with ",[1036,1511,1512],{},"UApp"," for modals, toasts, and overlays to work properly:",[1286,1515,1516],{},[1077,1517,1522],{"className":1518,"code":1519,"filename":1520,"highlights":1521,"language":34,"meta":1082,"style":1082},"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",[1106,1367],[1036,1523,1524,1535,1546,1570,1581,1590,1600],{"__ignoreMap":1082},[1086,1525,1526,1529,1532],{"class":1088,"line":1089},[1086,1527,1528],{"class":1313},"\u003C",[1086,1530,1531],{"class":1319},"template",[1086,1533,1534],{"class":1313},">\n",[1086,1536,1539,1542,1544],{"class":1537,"line":1106},[1088,1538],"highlight",[1086,1540,1541],{"class":1313},"  \u003C",[1086,1543,1512],{"class":1319},[1086,1545,1534],{"class":1313},[1086,1547,1548,1551,1554,1558,1561,1563,1566,1568],{"class":1088,"line":1329},[1086,1549,1550],{"class":1313},"    \u003C",[1086,1552,1553],{"class":1319},"UDashboardGroup",[1086,1555,1557],{"class":1556},"spNyl"," unit",[1086,1559,1560],{"class":1313},"=",[1086,1562,1487],{"class":1313},[1086,1564,1565],{"class":1096},"rem",[1086,1567,1487],{"class":1313},[1086,1569,1534],{"class":1313},[1086,1571,1572,1575,1578],{"class":1088,"line":1344},[1086,1573,1574],{"class":1313},"      \u003C",[1086,1576,1577],{"class":1319},"NuxtPage",[1086,1579,1580],{"class":1313}," \u002F>\n",[1086,1582,1583,1586,1588],{"class":1088,"line":1356},[1086,1584,1585],{"class":1313},"    \u003C\u002F",[1086,1587,1553],{"class":1319},[1086,1589,1534],{"class":1313},[1086,1591,1593,1596,1598],{"class":1592,"line":1367},[1088,1538],[1086,1594,1595],{"class":1313},"  \u003C\u002F",[1086,1597,1512],{"class":1319},[1086,1599,1534],{"class":1313},[1086,1601,1602,1605,1607],{"class":1088,"line":1375},[1086,1603,1604],{"class":1313},"\u003C\u002F",[1086,1606,1531],{"class":1319},[1086,1608,1534],{"class":1313},[976,1610,1611,1612,1615],{},"Create a ",[1036,1613,1614],{},".env"," file with your AI Gateway API key:",[1286,1617,1618],{},[1077,1619,1621],{"className":1079,"code":1620,"filename":1614,"language":1081,"meta":1082,"style":1082},"AI_GATEWAY_API_KEY=your-api-key-here\n",[1036,1622,1623],{"__ignoreMap":1082},[1086,1624,1625,1628,1630],{"class":1088,"line":1089},[1086,1626,1627],{"class":1309},"AI_GATEWAY_API_KEY",[1086,1629,1560],{"class":1313},[1086,1631,1632],{"class":1096},"your-api-key-here\n",[1450,1634,1635],{},[976,1636,1637,1638,1641],{},"With ",[1030,1639,1067],{"href":1065,"rel":1640},[1034],", 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.",[1114,1643,1645],{"id":1644},"setting-up-the-database","Setting up the database",[976,1647,1648,1653,1654,1659],{},[1030,1649,1652],{"href":1650,"rel":1651},"https:\u002F\u002Fhub.nuxt.com",[1034],"NuxtHub"," provides a zero-config database powered by ",[1030,1655,1658],{"href":1656,"rel":1657},"https:\u002F\u002Form.drizzle.team",[1034],"Drizzle ORM",". Here is the schema for the chat application:",[1286,1661,1662],{},[1663,1664,1665],"code-collapse",{},[1077,1666,1669],{"className":1290,"code":1667,"filename":1668,"language":1292,"meta":1082,"style":1082},"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",[1036,1670,1671,1711,1731,1735,1762,1807,1820,1877,1883,1887,1922,1934,1941,1945,1972,2018,2085,2155,2195,2246,2259,2289,2295,2300,2332,2348,2366,2382,2390],{"__ignoreMap":1082},[1086,1672,1673,1676,1679,1682,1685,1688,1690,1693,1695,1698,1701,1704,1706,1709],{"class":1088,"line":1089},[1086,1674,1675],{"class":1299},"import",[1086,1677,1678],{"class":1313}," {",[1086,1680,1681],{"class":1309}," sqliteTable",[1086,1683,1684],{"class":1313},",",[1086,1686,1687],{"class":1309}," text",[1086,1689,1684],{"class":1313},[1086,1691,1692],{"class":1309}," integer",[1086,1694,1684],{"class":1313},[1086,1696,1697],{"class":1309}," index",[1086,1699,1700],{"class":1313}," }",[1086,1702,1703],{"class":1299}," from",[1086,1705,1400],{"class":1313},[1086,1707,1708],{"class":1096},"drizzle-orm\u002Fsqlite-core",[1086,1710,1364],{"class":1313},[1086,1712,1713,1715,1717,1720,1722,1724,1726,1729],{"class":1088,"line":1106},[1086,1714,1675],{"class":1299},[1086,1716,1678],{"class":1313},[1086,1718,1719],{"class":1309}," relations",[1086,1721,1700],{"class":1313},[1086,1723,1703],{"class":1299},[1086,1725,1400],{"class":1313},[1086,1727,1728],{"class":1096},"drizzle-orm",[1086,1730,1364],{"class":1313},[1086,1732,1733],{"class":1088,"line":1329},[1086,1734,1378],{"emptyLinePlaceholder":21},[1086,1736,1737,1739,1742,1745,1747,1749,1751,1753,1756,1758,1760],{"class":1088,"line":1344},[1086,1738,1300],{"class":1299},[1086,1740,1741],{"class":1556}," const",[1086,1743,1744],{"class":1309}," chats ",[1086,1746,1560],{"class":1313},[1086,1748,1681],{"class":1109},[1086,1750,1310],{"class":1309},[1086,1752,1338],{"class":1313},[1086,1754,1755],{"class":1096},"chats",[1086,1757,1338],{"class":1313},[1086,1759,1684],{"class":1313},[1086,1761,1389],{"class":1313},[1086,1763,1764,1767,1769,1771,1774,1777,1780,1782,1784,1787,1789,1791,1794,1797,1799,1802,1805],{"class":1088,"line":1356},[1086,1765,1766],{"class":1319},"  id",[1086,1768,1323],{"class":1313},[1086,1770,1687],{"class":1109},[1086,1772,1773],{"class":1309},"()",[1086,1775,1776],{"class":1313},".",[1086,1778,1779],{"class":1109},"primaryKey",[1086,1781,1773],{"class":1309},[1086,1783,1776],{"class":1313},[1086,1785,1786],{"class":1109},"$defaultFn",[1086,1788,1310],{"class":1309},[1086,1790,1773],{"class":1313},[1086,1792,1793],{"class":1556}," =>",[1086,1795,1796],{"class":1309}," crypto",[1086,1798,1776],{"class":1313},[1086,1800,1801],{"class":1109},"randomUUID",[1086,1803,1804],{"class":1309},"())",[1086,1806,1341],{"class":1313},[1086,1808,1809,1812,1814,1816,1818],{"class":1088,"line":1367},[1086,1810,1811],{"class":1319},"  title",[1086,1813,1323],{"class":1313},[1086,1815,1687],{"class":1109},[1086,1817,1773],{"class":1309},[1086,1819,1341],{"class":1313},[1086,1821,1822,1825,1827,1829,1831,1834,1837,1839,1841,1844,1846,1848,1851,1853,1856,1858,1860,1862,1864,1866,1868,1871,1874],{"class":1088,"line":1375},[1086,1823,1824],{"class":1319},"  createdAt",[1086,1826,1323],{"class":1313},[1086,1828,1692],{"class":1109},[1086,1830,1310],{"class":1309},[1086,1832,1833],{"class":1313},"{",[1086,1835,1836],{"class":1319}," mode",[1086,1838,1323],{"class":1313},[1086,1840,1400],{"class":1313},[1086,1842,1843],{"class":1096},"timestamp",[1086,1845,1338],{"class":1313},[1086,1847,1700],{"class":1313},[1086,1849,1850],{"class":1309},")",[1086,1852,1776],{"class":1313},[1086,1854,1855],{"class":1109},"notNull",[1086,1857,1773],{"class":1309},[1086,1859,1776],{"class":1313},[1086,1861,1786],{"class":1109},[1086,1863,1310],{"class":1309},[1086,1865,1773],{"class":1313},[1086,1867,1793],{"class":1556},[1086,1869,1870],{"class":1313}," new",[1086,1872,1873],{"class":1109}," Date",[1086,1875,1876],{"class":1309},"())\n",[1086,1878,1879,1881],{"class":1088,"line":1381},[1086,1880,1445],{"class":1313},[1086,1882,1448],{"class":1309},[1086,1884,1885],{"class":1088,"line":1392},[1086,1886,1378],{"emptyLinePlaceholder":21},[1086,1888,1889,1891,1893,1896,1898,1900,1903,1905,1908,1912,1915,1917,1920],{"class":1088,"line":1408},[1086,1890,1300],{"class":1299},[1086,1892,1741],{"class":1556},[1086,1894,1895],{"class":1309}," chatsRelations ",[1086,1897,1560],{"class":1313},[1086,1899,1719],{"class":1109},[1086,1901,1902],{"class":1309},"(chats",[1086,1904,1684],{"class":1313},[1086,1906,1907],{"class":1313}," ({",[1086,1909,1911],{"class":1910},"sHdIc"," many",[1086,1913,1914],{"class":1313}," })",[1086,1916,1793],{"class":1556},[1086,1918,1919],{"class":1309}," (",[1086,1921,1314],{"class":1313},[1086,1923,1924,1927,1929,1931],{"class":1088,"line":1414},[1086,1925,1926],{"class":1319},"  messages",[1086,1928,1323],{"class":1313},[1086,1930,1911],{"class":1109},[1086,1932,1933],{"class":1309},"(messages)\n",[1086,1935,1936,1938],{"class":1088,"line":1419},[1086,1937,1445],{"class":1313},[1086,1939,1940],{"class":1309},"))\n",[1086,1942,1943],{"class":1088,"line":1442},[1086,1944,1378],{"emptyLinePlaceholder":21},[1086,1946,1948,1950,1952,1955,1957,1959,1961,1963,1966,1968,1970],{"class":1088,"line":1947},14,[1086,1949,1300],{"class":1299},[1086,1951,1741],{"class":1556},[1086,1953,1954],{"class":1309}," messages ",[1086,1956,1560],{"class":1313},[1086,1958,1681],{"class":1109},[1086,1960,1310],{"class":1309},[1086,1962,1338],{"class":1313},[1086,1964,1965],{"class":1096},"messages",[1086,1967,1338],{"class":1313},[1086,1969,1684],{"class":1313},[1086,1971,1389],{"class":1313},[1086,1973,1975,1977,1979,1981,1983,1985,1988,1990,1992,1994,1996,1998,2000,2002,2004,2006,2008,2010,2012,2014,2016],{"class":1088,"line":1974},15,[1086,1976,1766],{"class":1319},[1086,1978,1323],{"class":1313},[1086,1980,1687],{"class":1109},[1086,1982,1310],{"class":1309},[1086,1984,1338],{"class":1313},[1086,1986,1987],{"class":1096},"id",[1086,1989,1338],{"class":1313},[1086,1991,1850],{"class":1309},[1086,1993,1776],{"class":1313},[1086,1995,1779],{"class":1109},[1086,1997,1773],{"class":1309},[1086,1999,1776],{"class":1313},[1086,2001,1786],{"class":1109},[1086,2003,1310],{"class":1309},[1086,2005,1773],{"class":1313},[1086,2007,1793],{"class":1556},[1086,2009,1796],{"class":1309},[1086,2011,1776],{"class":1313},[1086,2013,1801],{"class":1109},[1086,2015,1804],{"class":1309},[1086,2017,1341],{"class":1313},[1086,2019,2021,2024,2026,2028,2030,2032,2035,2037,2039,2041,2043,2045,2047,2050,2052,2054,2056,2059,2061,2063,2065,2067,2070,2072,2074,2077,2079,2081,2083],{"class":1088,"line":2020},16,[1086,2022,2023],{"class":1319},"  chatId",[1086,2025,1323],{"class":1313},[1086,2027,1687],{"class":1109},[1086,2029,1310],{"class":1309},[1086,2031,1338],{"class":1313},[1086,2033,2034],{"class":1096},"chat_id",[1086,2036,1338],{"class":1313},[1086,2038,1850],{"class":1309},[1086,2040,1776],{"class":1313},[1086,2042,1855],{"class":1109},[1086,2044,1773],{"class":1309},[1086,2046,1776],{"class":1313},[1086,2048,2049],{"class":1109},"references",[1086,2051,1310],{"class":1309},[1086,2053,1773],{"class":1313},[1086,2055,1793],{"class":1556},[1086,2057,2058],{"class":1309}," chats",[1086,2060,1776],{"class":1313},[1086,2062,1987],{"class":1309},[1086,2064,1684],{"class":1313},[1086,2066,1678],{"class":1313},[1086,2068,2069],{"class":1319}," onDelete",[1086,2071,1323],{"class":1313},[1086,2073,1400],{"class":1313},[1086,2075,2076],{"class":1096},"cascade",[1086,2078,1338],{"class":1313},[1086,2080,1700],{"class":1313},[1086,2082,1850],{"class":1309},[1086,2084,1341],{"class":1313},[1086,2086,2088,2091,2093,2095,2097,2099,2102,2104,2106,2108,2111,2113,2115,2117,2120,2122,2124,2126,2129,2131,2133,2135,2138,2140,2143,2145,2147,2149,2151,2153],{"class":1088,"line":2087},17,[1086,2089,2090],{"class":1319},"  role",[1086,2092,1323],{"class":1313},[1086,2094,1687],{"class":1109},[1086,2096,1310],{"class":1309},[1086,2098,1338],{"class":1313},[1086,2100,2101],{"class":1096},"role",[1086,2103,1338],{"class":1313},[1086,2105,1684],{"class":1313},[1086,2107,1678],{"class":1313},[1086,2109,2110],{"class":1319}," enum",[1086,2112,1323],{"class":1313},[1086,2114,1427],{"class":1309},[1086,2116,1338],{"class":1313},[1086,2118,2119],{"class":1096},"user",[1086,2121,1338],{"class":1313},[1086,2123,1684],{"class":1313},[1086,2125,1400],{"class":1313},[1086,2127,2128],{"class":1096},"assistant",[1086,2130,1338],{"class":1313},[1086,2132,1684],{"class":1313},[1086,2134,1400],{"class":1313},[1086,2136,2137],{"class":1096},"system",[1086,2139,1338],{"class":1313},[1086,2141,2142],{"class":1309},"] ",[1086,2144,1445],{"class":1313},[1086,2146,1850],{"class":1309},[1086,2148,1776],{"class":1313},[1086,2150,1855],{"class":1109},[1086,2152,1773],{"class":1309},[1086,2154,1341],{"class":1313},[1086,2156,2158,2161,2163,2165,2167,2169,2172,2174,2176,2178,2180,2182,2184,2187,2189,2191,2193],{"class":1088,"line":2157},18,[1086,2159,2160],{"class":1319},"  parts",[1086,2162,1323],{"class":1313},[1086,2164,1687],{"class":1109},[1086,2166,1310],{"class":1309},[1086,2168,1338],{"class":1313},[1086,2170,2171],{"class":1096},"parts",[1086,2173,1338],{"class":1313},[1086,2175,1684],{"class":1313},[1086,2177,1678],{"class":1313},[1086,2179,1836],{"class":1319},[1086,2181,1323],{"class":1313},[1086,2183,1400],{"class":1313},[1086,2185,2186],{"class":1096},"json",[1086,2188,1338],{"class":1313},[1086,2190,1700],{"class":1313},[1086,2192,1850],{"class":1309},[1086,2194,1341],{"class":1313},[1086,2196,2198,2200,2202,2204,2206,2208,2210,2212,2214,2216,2218,2220,2222,2224,2226,2228,2230,2232,2234,2236,2238,2240,2242,2244],{"class":1088,"line":2197},19,[1086,2199,1824],{"class":1319},[1086,2201,1323],{"class":1313},[1086,2203,1692],{"class":1109},[1086,2205,1310],{"class":1309},[1086,2207,1833],{"class":1313},[1086,2209,1836],{"class":1319},[1086,2211,1323],{"class":1313},[1086,2213,1400],{"class":1313},[1086,2215,1843],{"class":1096},[1086,2217,1338],{"class":1313},[1086,2219,1700],{"class":1313},[1086,2221,1850],{"class":1309},[1086,2223,1776],{"class":1313},[1086,2225,1855],{"class":1109},[1086,2227,1773],{"class":1309},[1086,2229,1776],{"class":1313},[1086,2231,1786],{"class":1109},[1086,2233,1310],{"class":1309},[1086,2235,1773],{"class":1313},[1086,2237,1793],{"class":1556},[1086,2239,1870],{"class":1313},[1086,2241,1873],{"class":1109},[1086,2243,1804],{"class":1309},[1086,2245,1341],{"class":1313},[1086,2247,2249,2252,2255,2257],{"class":1088,"line":2248},20,[1086,2250,2251],{"class":1313},"},",[1086,2253,2254],{"class":1910}," table",[1086,2256,1793],{"class":1556},[1086,2258,1326],{"class":1309},[1086,2260,2262,2265,2267,2269,2272,2274,2276,2278,2281,2284,2286],{"class":1088,"line":2261},21,[1086,2263,2264],{"class":1109},"  index",[1086,2266,1310],{"class":1309},[1086,2268,1338],{"class":1313},[1086,2270,2271],{"class":1096},"messages_chat_id_idx",[1086,2273,1338],{"class":1313},[1086,2275,1850],{"class":1309},[1086,2277,1776],{"class":1313},[1086,2279,2280],{"class":1109},"on",[1086,2282,2283],{"class":1309},"(table",[1086,2285,1776],{"class":1313},[1086,2287,2288],{"class":1309},"chatId)\n",[1086,2290,2292],{"class":1088,"line":2291},22,[1086,2293,2294],{"class":1309},"])\n",[1086,2296,2298],{"class":1088,"line":2297},23,[1086,2299,1378],{"emptyLinePlaceholder":21},[1086,2301,2303,2305,2307,2310,2312,2314,2317,2319,2321,2324,2326,2328,2330],{"class":1088,"line":2302},24,[1086,2304,1300],{"class":1299},[1086,2306,1741],{"class":1556},[1086,2308,2309],{"class":1309}," messagesRelations ",[1086,2311,1560],{"class":1313},[1086,2313,1719],{"class":1109},[1086,2315,2316],{"class":1309},"(messages",[1086,2318,1684],{"class":1313},[1086,2320,1907],{"class":1313},[1086,2322,2323],{"class":1910}," one",[1086,2325,1914],{"class":1313},[1086,2327,1793],{"class":1556},[1086,2329,1919],{"class":1309},[1086,2331,1314],{"class":1313},[1086,2333,2335,2338,2340,2342,2344,2346],{"class":1088,"line":2334},25,[1086,2336,2337],{"class":1319},"  chat",[1086,2339,1323],{"class":1313},[1086,2341,2323],{"class":1109},[1086,2343,1902],{"class":1309},[1086,2345,1684],{"class":1313},[1086,2347,1389],{"class":1313},[1086,2349,2351,2354,2356,2359,2361,2364],{"class":1088,"line":2350},26,[1086,2352,2353],{"class":1319},"    fields",[1086,2355,1323],{"class":1313},[1086,2357,2358],{"class":1309}," [messages",[1086,2360,1776],{"class":1313},[1086,2362,2363],{"class":1309},"chatId]",[1086,2365,1341],{"class":1313},[1086,2367,2369,2372,2374,2377,2379],{"class":1088,"line":2368},27,[1086,2370,2371],{"class":1319},"    references",[1086,2373,1323],{"class":1313},[1086,2375,2376],{"class":1309}," [chats",[1086,2378,1776],{"class":1313},[1086,2380,2381],{"class":1309},"id]\n",[1086,2383,2385,2388],{"class":1088,"line":2384},28,[1086,2386,2387],{"class":1313},"  }",[1086,2389,1448],{"class":1309},[1086,2391,2393,2395],{"class":1088,"line":2392},29,[1086,2394,1445],{"class":1313},[1086,2396,1940],{"class":1309},[976,2398,2399],{},"Generate the database migrations from your schema:",[1077,2401,2403],{"className":1079,"code":2402,"language":1081,"meta":1082,"style":1082},"npx nuxt db generate\n",[1036,2404,2405],{"__ignoreMap":1082},[1086,2406,2407,2409,2412,2415],{"class":1088,"line":1089},[1086,2408,1093],{"class":1092},[1086,2410,2411],{"class":1096}," nuxt",[1086,2413,2414],{"class":1096}," db",[1086,2416,2417],{"class":1096}," generate\n",[2419,2420,2421],"tip",{},[976,2422,2423,2424,2427],{},"Migrations are automatically applied when you start the development server with ",[1036,2425,2426],{},"npx nuxt dev",". NuxtHub uses SQLite locally, so no external database is required during development.",[980,2429,2431],{"id":2430},"building-the-backend","Building the backend",[976,2433,2434,2435,1776],{},"This section covers integrating AI on the server. The following API endpoints handle chat creation, AI streaming, and data persistence using ",[1030,2436,2439],{"href":2437,"rel":2438},"https:\u002F\u002Fnitro.build",[1034],"Nitro",[1114,2441,2443],{"id":2442},"creating-a-chat","Creating a chat",[976,2445,2446,2447,2454],{},"First, create the endpoint that initializes a new chat and saves the first message to the database. This uses the ",[1030,2448,2451],{"href":2449,"rel":2450},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fui-message",[1034],[1036,2452,2453],{},"UIMessage"," type from the AI SDK:",[1286,2456,2457],{},[1077,2458,2461],{"className":1290,"code":2459,"filename":2460,"language":1292,"meta":1082,"style":1082},"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",[1036,2462,2463,2487,2510,2534,2554,2558,2582,2619,2643,2656,2660,2666,2717,2721,2726,2755,2771,2786,2800,2806,2810,2818],{"__ignoreMap":1082},[1086,2464,2465,2467,2469,2472,2474,2477,2479,2481,2483,2485],{"class":1088,"line":1089},[1086,2466,1675],{"class":1299},[1086,2468,1678],{"class":1313},[1086,2470,2471],{"class":1309}," defineEventHandler",[1086,2473,1684],{"class":1313},[1086,2475,2476],{"class":1309}," readValidatedBody",[1086,2478,1700],{"class":1313},[1086,2480,1703],{"class":1299},[1086,2482,1400],{"class":1313},[1086,2484,1114],{"class":1096},[1086,2486,1364],{"class":1313},[1086,2488,2489,2491,2494,2496,2499,2501,2503,2505,2508],{"class":1088,"line":1106},[1086,2490,1675],{"class":1299},[1086,2492,2493],{"class":1299}," type",[1086,2495,1678],{"class":1313},[1086,2497,2498],{"class":1309}," UIMessage",[1086,2500,1700],{"class":1313},[1086,2502,1703],{"class":1299},[1086,2504,1400],{"class":1313},[1086,2506,2507],{"class":1096},"ai",[1086,2509,1364],{"class":1313},[1086,2511,2512,2514,2516,2518,2520,2523,2525,2527,2529,2532],{"class":1088,"line":1329},[1086,2513,1675],{"class":1299},[1086,2515,1678],{"class":1313},[1086,2517,2414],{"class":1309},[1086,2519,1684],{"class":1313},[1086,2521,2522],{"class":1309}," schema",[1086,2524,1700],{"class":1313},[1086,2526,1703],{"class":1299},[1086,2528,1400],{"class":1313},[1086,2530,2531],{"class":1096},"hub:db",[1086,2533,1364],{"class":1313},[1086,2535,2536,2538,2540,2543,2545,2547,2549,2552],{"class":1088,"line":1344},[1086,2537,1675],{"class":1299},[1086,2539,1678],{"class":1313},[1086,2541,2542],{"class":1309}," z",[1086,2544,1700],{"class":1313},[1086,2546,1703],{"class":1299},[1086,2548,1400],{"class":1313},[1086,2550,2551],{"class":1096},"zod",[1086,2553,1364],{"class":1313},[1086,2555,2556],{"class":1088,"line":1356},[1086,2557,1378],{"emptyLinePlaceholder":21},[1086,2559,2560,2562,2564,2566,2568,2571,2573,2576,2578,2580],{"class":1088,"line":1367},[1086,2561,1300],{"class":1299},[1086,2563,1303],{"class":1299},[1086,2565,2471],{"class":1109},[1086,2567,1310],{"class":1309},[1086,2569,2570],{"class":1556},"async",[1086,2572,1919],{"class":1313},[1086,2574,2575],{"class":1910},"event",[1086,2577,1850],{"class":1313},[1086,2579,1793],{"class":1556},[1086,2581,1389],{"class":1313},[1086,2583,2584,2587,2589,2592,2594,2597,2600,2602,2604,2606,2608,2610,2612,2615,2617],{"class":1088,"line":1375},[1086,2585,2586],{"class":1556},"  const",[1086,2588,1678],{"class":1313},[1086,2590,2591],{"class":1309}," message",[1086,2593,1700],{"class":1313},[1086,2595,2596],{"class":1313}," =",[1086,2598,2599],{"class":1299}," await",[1086,2601,2476],{"class":1109},[1086,2603,1310],{"class":1319},[1086,2605,2575],{"class":1309},[1086,2607,1684],{"class":1313},[1086,2609,2542],{"class":1309},[1086,2611,1776],{"class":1313},[1086,2613,2614],{"class":1109},"object",[1086,2616,1310],{"class":1319},[1086,2618,1314],{"class":1313},[1086,2620,2621,2624,2626,2628,2630,2633,2635,2637,2640],{"class":1088,"line":1381},[1086,2622,2623],{"class":1319},"    message",[1086,2625,1323],{"class":1313},[1086,2627,2542],{"class":1309},[1086,2629,1776],{"class":1313},[1086,2631,2632],{"class":1109},"custom",[1086,2634,1528],{"class":1313},[1086,2636,2453],{"class":1092},[1086,2638,2639],{"class":1313},">",[1086,2641,2642],{"class":1319},"()\n",[1086,2644,2645,2647,2649,2651,2654],{"class":1088,"line":1392},[1086,2646,2387],{"class":1313},[1086,2648,1850],{"class":1319},[1086,2650,1776],{"class":1313},[1086,2652,2653],{"class":1309},"parse",[1086,2655,1448],{"class":1319},[1086,2657,2658],{"class":1088,"line":1408},[1086,2659,1378],{"emptyLinePlaceholder":21},[1086,2661,2662],{"class":1088,"line":1414},[1086,2663,2665],{"class":2664},"sHwdD","  \u002F\u002F Create a new chat\n",[1086,2667,2668,2670,2672,2674,2676,2678,2680,2682,2684,2687,2689,2692,2694,2696,2698,2700,2703,2705,2708,2710,2712,2715],{"class":1088,"line":1419},[1086,2669,2586],{"class":1556},[1086,2671,1427],{"class":1313},[1086,2673,262],{"class":1309},[1086,2675,1437],{"class":1313},[1086,2677,2596],{"class":1313},[1086,2679,2599],{"class":1299},[1086,2681,2414],{"class":1309},[1086,2683,1776],{"class":1313},[1086,2685,2686],{"class":1109},"insert",[1086,2688,1310],{"class":1319},[1086,2690,2691],{"class":1309},"schema",[1086,2693,1776],{"class":1313},[1086,2695,1755],{"class":1309},[1086,2697,1850],{"class":1319},[1086,2699,1776],{"class":1313},[1086,2701,2702],{"class":1109},"values",[1086,2704,1310],{"class":1319},[1086,2706,2707],{"class":1313},"{}",[1086,2709,1850],{"class":1319},[1086,2711,1776],{"class":1313},[1086,2713,2714],{"class":1109},"returning",[1086,2716,2642],{"class":1319},[1086,2718,2719],{"class":1088,"line":1442},[1086,2720,1378],{"emptyLinePlaceholder":21},[1086,2722,2723],{"class":1088,"line":1947},[1086,2724,2725],{"class":2664},"  \u002F\u002F Save the first user message\n",[1086,2727,2728,2731,2733,2735,2737,2739,2741,2743,2745,2747,2749,2751,2753],{"class":1088,"line":1974},[1086,2729,2730],{"class":1299},"  await",[1086,2732,2414],{"class":1309},[1086,2734,1776],{"class":1313},[1086,2736,2686],{"class":1109},[1086,2738,1310],{"class":1319},[1086,2740,2691],{"class":1309},[1086,2742,1776],{"class":1313},[1086,2744,1965],{"class":1309},[1086,2746,1850],{"class":1319},[1086,2748,1776],{"class":1313},[1086,2750,2702],{"class":1109},[1086,2752,1310],{"class":1319},[1086,2754,1314],{"class":1313},[1086,2756,2757,2760,2762,2765,2767,2769],{"class":1088,"line":2020},[1086,2758,2759],{"class":1319},"    chatId",[1086,2761,1323],{"class":1313},[1086,2763,2764],{"class":1309}," chat",[1086,2766,1776],{"class":1313},[1086,2768,1987],{"class":1309},[1086,2770,1341],{"class":1313},[1086,2772,2773,2776,2778,2780,2782,2784],{"class":1088,"line":2087},[1086,2774,2775],{"class":1319},"    role",[1086,2777,1323],{"class":1313},[1086,2779,1400],{"class":1313},[1086,2781,2119],{"class":1096},[1086,2783,1338],{"class":1313},[1086,2785,1341],{"class":1313},[1086,2787,2788,2791,2793,2795,2797],{"class":1088,"line":2157},[1086,2789,2790],{"class":1319},"    parts",[1086,2792,1323],{"class":1313},[1086,2794,2591],{"class":1309},[1086,2796,1776],{"class":1313},[1086,2798,2799],{"class":1309},"parts\n",[1086,2801,2802,2804],{"class":1088,"line":2197},[1086,2803,2387],{"class":1313},[1086,2805,1448],{"class":1319},[1086,2807,2808],{"class":1088,"line":2248},[1086,2809,1378],{"emptyLinePlaceholder":21},[1086,2811,2812,2815],{"class":1088,"line":2261},[1086,2813,2814],{"class":1299},"  return",[1086,2816,2817],{"class":1309}," chat\n",[1086,2819,2820,2822],{"class":1088,"line":2291},[1086,2821,1445],{"class":1313},[1086,2823,1448],{"class":1309},[1114,2825,2827],{"id":2826},"streaming-ai-responses","Streaming AI responses",[976,2829,2830,2831,2838,2839,2846,2847,2854],{},"Next, create the endpoint that handles the AI conversation. This endpoint uses ",[1030,2832,2835],{"href":2833,"rel":2834},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-core\u002Fstream-text",[1034],[1036,2836,2837],{},"streamText",", ",[1030,2840,2843],{"href":2841,"rel":2842},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream",[1034],[1036,2844,2845],{},"createUIMessageStream",", and ",[1030,2848,2851],{"href":2849,"rel":2850},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream-response",[1034],[1036,2852,2853],{},"createUIMessageStreamResponse"," from the AI SDK:",[1286,2856,2857],{},[1663,2858,2859],{},[1077,2860,2863],{"className":1290,"code":2861,"filename":2862,"language":1292,"meta":1082,"style":1082},"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",[1036,2864,2865,2897,2916,2938,2956,2962,2969,2976,2983,2990,2995,3007,3027,3031,3048,3052,3063,3097,3126,3157,3162,3166,3188,3221,3237,3249,3253,3296,3356,3370,3387,3419,3432,3437,3443,3474,3518,3525,3530,3548,3587,3593,3598,3604,3624,3652,3664,3683,3711,3718,3723,3789,3794,3799,3805,3834,3875,3904,3916,3932,3946,3953,3958,3963,3969,3986,4008,4026,4034,4051,4072,4082,4092,4102,4119,4130,4136,4142,4152,4162,4176,4191,4196,4201,4211,4227,4242,4248,4254,4262,4267,4273,4293,4308,4325,4348,4359,4367,4373,4378,4401,4407,4427,4433,4479,4495,4528,4542,4550,4556,4563,4568,4586],{"__ignoreMap":1082},[1086,2866,2867,2869,2871,2874,2876,2878,2880,2883,2885,2887,2889,2891,2893,2895],{"class":1088,"line":1089},[1086,2868,1675],{"class":1299},[1086,2870,1678],{"class":1313},[1086,2872,2873],{"class":1309}," createError",[1086,2875,1684],{"class":1313},[1086,2877,2471],{"class":1309},[1086,2879,1684],{"class":1313},[1086,2881,2882],{"class":1309}," getValidatedRouterParams",[1086,2884,1684],{"class":1313},[1086,2886,2476],{"class":1309},[1086,2888,1700],{"class":1313},[1086,2890,1703],{"class":1299},[1086,2892,1400],{"class":1313},[1086,2894,1114],{"class":1096},[1086,2896,1364],{"class":1313},[1086,2898,2899,2901,2903,2906,2908,2910,2912,2914],{"class":1088,"line":1106},[1086,2900,1675],{"class":1299},[1086,2902,1678],{"class":1313},[1086,2904,2905],{"class":1309}," eq",[1086,2907,1700],{"class":1313},[1086,2909,1703],{"class":1299},[1086,2911,1400],{"class":1313},[1086,2913,1728],{"class":1096},[1086,2915,1364],{"class":1313},[1086,2917,2918,2920,2922,2924,2926,2928,2930,2932,2934,2936],{"class":1088,"line":1329},[1086,2919,1675],{"class":1299},[1086,2921,1678],{"class":1313},[1086,2923,2414],{"class":1309},[1086,2925,1684],{"class":1313},[1086,2927,2522],{"class":1309},[1086,2929,1700],{"class":1313},[1086,2931,1703],{"class":1299},[1086,2933,1400],{"class":1313},[1086,2935,2531],{"class":1096},[1086,2937,1364],{"class":1313},[1086,2939,2940,2942,2944,2946,2948,2950,2952,2954],{"class":1088,"line":1344},[1086,2941,1675],{"class":1299},[1086,2943,1678],{"class":1313},[1086,2945,2542],{"class":1309},[1086,2947,1700],{"class":1313},[1086,2949,1703],{"class":1299},[1086,2951,1400],{"class":1313},[1086,2953,2551],{"class":1096},[1086,2955,1364],{"class":1313},[1086,2957,2958,2960],{"class":1088,"line":1356},[1086,2959,1675],{"class":1299},[1086,2961,1389],{"class":1313},[1086,2963,2964,2967],{"class":1088,"line":1367},[1086,2965,2966],{"class":1309},"  convertToModelMessages",[1086,2968,1341],{"class":1313},[1086,2970,2971,2974],{"class":1088,"line":1375},[1086,2972,2973],{"class":1309},"  createUIMessageStream",[1086,2975,1341],{"class":1313},[1086,2977,2978,2981],{"class":1088,"line":1381},[1086,2979,2980],{"class":1309},"  createUIMessageStreamResponse",[1086,2982,1341],{"class":1313},[1086,2984,2985,2988],{"class":1088,"line":1392},[1086,2986,2987],{"class":1309},"  generateText",[1086,2989,1341],{"class":1313},[1086,2991,2992],{"class":1088,"line":1408},[1086,2993,2994],{"class":1309},"  streamText\n",[1086,2996,2997,2999,3001,3003,3005],{"class":1088,"line":1414},[1086,2998,1445],{"class":1313},[1086,3000,1703],{"class":1299},[1086,3002,1400],{"class":1313},[1086,3004,2507],{"class":1096},[1086,3006,1364],{"class":1313},[1086,3008,3009,3011,3013,3015,3017,3019,3021,3023,3025],{"class":1088,"line":1419},[1086,3010,1675],{"class":1299},[1086,3012,2493],{"class":1299},[1086,3014,1678],{"class":1313},[1086,3016,2498],{"class":1309},[1086,3018,1700],{"class":1313},[1086,3020,1703],{"class":1299},[1086,3022,1400],{"class":1313},[1086,3024,2507],{"class":1096},[1086,3026,1364],{"class":1313},[1086,3028,3029],{"class":1088,"line":1442},[1086,3030,1378],{"emptyLinePlaceholder":21},[1086,3032,3033,3036,3039,3041,3043,3046],{"class":1088,"line":1947},[1086,3034,3035],{"class":1556},"const",[1086,3037,3038],{"class":1309}," DEFAULT_MODEL ",[1086,3040,1560],{"class":1313},[1086,3042,1400],{"class":1313},[1086,3044,3045],{"class":1096},"anthropic\u002Fclaude-haiku-4.5",[1086,3047,1364],{"class":1313},[1086,3049,3050],{"class":1088,"line":1974},[1086,3051,1378],{"emptyLinePlaceholder":21},[1086,3053,3054,3056,3059,3061],{"class":1088,"line":2020},[1086,3055,3035],{"class":1556},[1086,3057,3058],{"class":1309}," MODELS ",[1086,3060,1560],{"class":1313},[1086,3062,1326],{"class":1309},[1086,3064,3065,3068,3071,3073,3075,3078,3080,3082,3085,3087,3089,3092,3094],{"class":1088,"line":2087},[1086,3066,3067],{"class":1313},"  {",[1086,3069,3070],{"class":1319}," value",[1086,3072,1323],{"class":1313},[1086,3074,1400],{"class":1313},[1086,3076,3077],{"class":1096},"openai\u002Fgpt-5-nano",[1086,3079,1338],{"class":1313},[1086,3081,1684],{"class":1313},[1086,3083,3084],{"class":1319}," label",[1086,3086,1323],{"class":1313},[1086,3088,1400],{"class":1313},[1086,3090,3091],{"class":1096},"GPT-5 Nano",[1086,3093,1338],{"class":1313},[1086,3095,3096],{"class":1313}," },\n",[1086,3098,3099,3101,3103,3105,3107,3109,3111,3113,3115,3117,3119,3122,3124],{"class":1088,"line":2157},[1086,3100,3067],{"class":1313},[1086,3102,3070],{"class":1319},[1086,3104,1323],{"class":1313},[1086,3106,1400],{"class":1313},[1086,3108,3045],{"class":1096},[1086,3110,1338],{"class":1313},[1086,3112,1684],{"class":1313},[1086,3114,3084],{"class":1319},[1086,3116,1323],{"class":1313},[1086,3118,1400],{"class":1313},[1086,3120,3121],{"class":1096},"Claude Haiku 4.5",[1086,3123,1338],{"class":1313},[1086,3125,3096],{"class":1313},[1086,3127,3128,3130,3132,3134,3136,3139,3141,3143,3145,3147,3149,3152,3154],{"class":1088,"line":2197},[1086,3129,3067],{"class":1313},[1086,3131,3070],{"class":1319},[1086,3133,1323],{"class":1313},[1086,3135,1400],{"class":1313},[1086,3137,3138],{"class":1096},"google\u002Fgemini-3-flash",[1086,3140,1338],{"class":1313},[1086,3142,1684],{"class":1313},[1086,3144,3084],{"class":1319},[1086,3146,1323],{"class":1313},[1086,3148,1400],{"class":1313},[1086,3150,3151],{"class":1096},"Gemini 3 Flash",[1086,3153,1338],{"class":1313},[1086,3155,3156],{"class":1313}," }\n",[1086,3158,3159],{"class":1088,"line":2248},[1086,3160,3161],{"class":1309},"]\n",[1086,3163,3164],{"class":1088,"line":2261},[1086,3165,1378],{"emptyLinePlaceholder":21},[1086,3167,3168,3170,3172,3174,3176,3178,3180,3182,3184,3186],{"class":1088,"line":2291},[1086,3169,1300],{"class":1299},[1086,3171,1303],{"class":1299},[1086,3173,2471],{"class":1109},[1086,3175,1310],{"class":1309},[1086,3177,2570],{"class":1556},[1086,3179,1919],{"class":1313},[1086,3181,2575],{"class":1910},[1086,3183,1850],{"class":1313},[1086,3185,1793],{"class":1556},[1086,3187,1389],{"class":1313},[1086,3189,3190,3192,3194,3197,3199,3201,3203,3205,3207,3209,3211,3213,3215,3217,3219],{"class":1088,"line":2297},[1086,3191,2586],{"class":1556},[1086,3193,1678],{"class":1313},[1086,3195,3196],{"class":1309}," id",[1086,3198,1700],{"class":1313},[1086,3200,2596],{"class":1313},[1086,3202,2599],{"class":1299},[1086,3204,2882],{"class":1109},[1086,3206,1310],{"class":1319},[1086,3208,2575],{"class":1309},[1086,3210,1684],{"class":1313},[1086,3212,2542],{"class":1309},[1086,3214,1776],{"class":1313},[1086,3216,2614],{"class":1109},[1086,3218,1310],{"class":1319},[1086,3220,1314],{"class":1313},[1086,3222,3223,3226,3228,3230,3232,3235],{"class":1088,"line":2302},[1086,3224,3225],{"class":1319},"    id",[1086,3227,1323],{"class":1313},[1086,3229,2542],{"class":1309},[1086,3231,1776],{"class":1313},[1086,3233,3234],{"class":1109},"string",[1086,3236,2642],{"class":1319},[1086,3238,3239,3241,3243,3245,3247],{"class":1088,"line":2334},[1086,3240,2387],{"class":1313},[1086,3242,1850],{"class":1319},[1086,3244,1776],{"class":1313},[1086,3246,2653],{"class":1309},[1086,3248,1448],{"class":1319},[1086,3250,3251],{"class":1088,"line":2350},[1086,3252,1378],{"emptyLinePlaceholder":21},[1086,3254,3255,3257,3259,3262,3264,3267,3269,3272,3274,3276,3278,3280,3282,3284,3286,3288,3290,3292,3294],{"class":1088,"line":2368},[1086,3256,2586],{"class":1556},[1086,3258,1678],{"class":1313},[1086,3260,3261],{"class":1309}," model",[1086,3263,2596],{"class":1313},[1086,3265,3266],{"class":1309}," DEFAULT_MODEL",[1086,3268,1684],{"class":1313},[1086,3270,3271],{"class":1309}," messages",[1086,3273,1700],{"class":1313},[1086,3275,2596],{"class":1313},[1086,3277,2599],{"class":1299},[1086,3279,2476],{"class":1109},[1086,3281,1310],{"class":1319},[1086,3283,2575],{"class":1309},[1086,3285,1684],{"class":1313},[1086,3287,2542],{"class":1309},[1086,3289,1776],{"class":1313},[1086,3291,2614],{"class":1109},[1086,3293,1310],{"class":1319},[1086,3295,1314],{"class":1313},[1086,3297,3298,3301,3303,3305,3307,3309,3311,3313,3316,3318,3321,3323,3326,3328,3331,3333,3336,3338,3341,3343,3345,3348,3350,3352,3354],{"class":1088,"line":2384},[1086,3299,3300],{"class":1319},"    model",[1086,3302,1323],{"class":1313},[1086,3304,2542],{"class":1309},[1086,3306,1776],{"class":1313},[1086,3308,3234],{"class":1109},[1086,3310,1773],{"class":1319},[1086,3312,1776],{"class":1313},[1086,3314,3315],{"class":1109},"refine",[1086,3317,1310],{"class":1319},[1086,3319,3320],{"class":1910},"value",[1086,3322,1793],{"class":1556},[1086,3324,3325],{"class":1309}," MODELS",[1086,3327,1776],{"class":1313},[1086,3329,3330],{"class":1109},"some",[1086,3332,1310],{"class":1319},[1086,3334,3335],{"class":1910},"m",[1086,3337,1793],{"class":1556},[1086,3339,3340],{"class":1309}," m",[1086,3342,1776],{"class":1313},[1086,3344,3320],{"class":1309},[1086,3346,3347],{"class":1313}," ===",[1086,3349,3070],{"class":1309},[1086,3351,1850],{"class":1319},[1086,3353,1684],{"class":1313},[1086,3355,1389],{"class":1313},[1086,3357,3358,3361,3363,3365,3368],{"class":1088,"line":2392},[1086,3359,3360],{"class":1319},"      message",[1086,3362,1323],{"class":1313},[1086,3364,1400],{"class":1313},[1086,3366,3367],{"class":1096},"Invalid model",[1086,3369,1364],{"class":1313},[1086,3371,3373,3376,3378,3380,3383,3385],{"class":1088,"line":3372},30,[1086,3374,3375],{"class":1313},"    }",[1086,3377,1850],{"class":1319},[1086,3379,1776],{"class":1313},[1086,3381,3382],{"class":1109},"optional",[1086,3384,1773],{"class":1319},[1086,3386,1341],{"class":1313},[1086,3388,3390,3393,3395,3397,3399,3402,3404,3407,3409,3411,3413,3415,3417],{"class":1088,"line":3389},31,[1086,3391,3392],{"class":1319},"    messages",[1086,3394,1323],{"class":1313},[1086,3396,2542],{"class":1309},[1086,3398,1776],{"class":1313},[1086,3400,3401],{"class":1109},"array",[1086,3403,1310],{"class":1319},[1086,3405,3406],{"class":1309},"z",[1086,3408,1776],{"class":1313},[1086,3410,2632],{"class":1109},[1086,3412,1528],{"class":1313},[1086,3414,2453],{"class":1092},[1086,3416,2639],{"class":1313},[1086,3418,1876],{"class":1319},[1086,3420,3422,3424,3426,3428,3430],{"class":1088,"line":3421},32,[1086,3423,2387],{"class":1313},[1086,3425,1850],{"class":1319},[1086,3427,1776],{"class":1313},[1086,3429,2653],{"class":1309},[1086,3431,1448],{"class":1319},[1086,3433,3435],{"class":1088,"line":3434},33,[1086,3436,1378],{"emptyLinePlaceholder":21},[1086,3438,3440],{"class":1088,"line":3439},34,[1086,3441,3442],{"class":2664},"  \u002F\u002F Fetch the chat from the database\n",[1086,3444,3446,3448,3450,3452,3454,3456,3458,3461,3463,3465,3467,3470,3472],{"class":1088,"line":3445},35,[1086,3447,2586],{"class":1556},[1086,3449,2764],{"class":1309},[1086,3451,2596],{"class":1313},[1086,3453,2599],{"class":1299},[1086,3455,2414],{"class":1309},[1086,3457,1776],{"class":1313},[1086,3459,3460],{"class":1309},"query",[1086,3462,1776],{"class":1313},[1086,3464,1755],{"class":1309},[1086,3466,1776],{"class":1313},[1086,3468,3469],{"class":1109},"findFirst",[1086,3471,1310],{"class":1319},[1086,3473,1314],{"class":1313},[1086,3475,3477,3480,3482,3484,3486,3488,3490,3492,3494,3496,3498,3500,3502,3504,3506,3508,3510,3513,3516],{"class":1088,"line":3476},36,[1086,3478,3479],{"class":1109},"    where",[1086,3481,1323],{"class":1313},[1086,3483,1919],{"class":1313},[1086,3485,262],{"class":1910},[1086,3487,1684],{"class":1313},[1086,3489,1678],{"class":1313},[1086,3491,2905],{"class":1910},[1086,3493,1914],{"class":1313},[1086,3495,1793],{"class":1556},[1086,3497,2905],{"class":1109},[1086,3499,1310],{"class":1319},[1086,3501,262],{"class":1309},[1086,3503,1776],{"class":1313},[1086,3505,1987],{"class":1309},[1086,3507,1684],{"class":1313},[1086,3509,3196],{"class":1309},[1086,3511,3512],{"class":1299}," as",[1086,3514,3515],{"class":1092}," string",[1086,3517,1448],{"class":1319},[1086,3519,3521,3523],{"class":1088,"line":3520},37,[1086,3522,2387],{"class":1313},[1086,3524,1448],{"class":1319},[1086,3526,3528],{"class":1088,"line":3527},38,[1086,3529,1378],{"emptyLinePlaceholder":21},[1086,3531,3533,3536,3538,3541,3543,3546],{"class":1088,"line":3532},39,[1086,3534,3535],{"class":1299},"  if",[1086,3537,1919],{"class":1319},[1086,3539,3540],{"class":1313},"!",[1086,3542,262],{"class":1309},[1086,3544,3545],{"class":1319},") ",[1086,3547,1314],{"class":1313},[1086,3549,3551,3554,3556,3558,3560,3563,3565,3569,3571,3574,3576,3578,3581,3583,3585],{"class":1088,"line":3550},40,[1086,3552,3553],{"class":1299},"    throw",[1086,3555,2873],{"class":1109},[1086,3557,1310],{"class":1319},[1086,3559,1833],{"class":1313},[1086,3561,3562],{"class":1319}," statusCode",[1086,3564,1323],{"class":1313},[1086,3566,3568],{"class":3567},"sbssI"," 404",[1086,3570,1684],{"class":1313},[1086,3572,3573],{"class":1319}," statusMessage",[1086,3575,1323],{"class":1313},[1086,3577,1400],{"class":1313},[1086,3579,3580],{"class":1096},"Chat not found",[1086,3582,1338],{"class":1313},[1086,3584,1700],{"class":1313},[1086,3586,1448],{"class":1319},[1086,3588,3590],{"class":1088,"line":3589},41,[1086,3591,3592],{"class":1313},"  }\n",[1086,3594,3596],{"class":1088,"line":3595},42,[1086,3597,1378],{"emptyLinePlaceholder":21},[1086,3599,3601],{"class":1088,"line":3600},43,[1086,3602,3603],{"class":2664},"  \u002F\u002F Generate a title for the chat if it doesn't have one\n",[1086,3605,3607,3609,3611,3613,3615,3617,3620,3622],{"class":1088,"line":3606},44,[1086,3608,3535],{"class":1299},[1086,3610,1919],{"class":1319},[1086,3612,3540],{"class":1313},[1086,3614,262],{"class":1309},[1086,3616,1776],{"class":1313},[1086,3618,3619],{"class":1309},"title",[1086,3621,3545],{"class":1319},[1086,3623,1314],{"class":1313},[1086,3625,3627,3630,3632,3634,3636,3639,3641,3643,3645,3648,3650],{"class":1088,"line":3626},45,[1086,3628,3629],{"class":1556},"    const",[1086,3631,1678],{"class":1313},[1086,3633,1687],{"class":1319},[1086,3635,1323],{"class":1313},[1086,3637,3638],{"class":1309}," title",[1086,3640,1700],{"class":1313},[1086,3642,2596],{"class":1313},[1086,3644,2599],{"class":1299},[1086,3646,3647],{"class":1109}," generateText",[1086,3649,1310],{"class":1319},[1086,3651,1314],{"class":1313},[1086,3653,3655,3658,3660,3662],{"class":1088,"line":3654},46,[1086,3656,3657],{"class":1319},"      model",[1086,3659,1323],{"class":1313},[1086,3661,3266],{"class":1309},[1086,3663,1341],{"class":1313},[1086,3665,3667,3670,3672,3675,3678,3681],{"class":1088,"line":3666},47,[1086,3668,3669],{"class":1319},"      system",[1086,3671,1323],{"class":1313},[1086,3673,3674],{"class":1313}," `",[1086,3676,3677],{"class":1096},"Generate a short title (max 30 characters) based on the user's message. No quotes or punctuation.",[1086,3679,3680],{"class":1313},"`",[1086,3682,1341],{"class":1313},[1086,3684,3686,3689,3691,3694,3696,3699,3701,3703,3706,3709],{"class":1088,"line":3685},48,[1086,3687,3688],{"class":1319},"      prompt",[1086,3690,1323],{"class":1313},[1086,3692,3693],{"class":1309}," JSON",[1086,3695,1776],{"class":1313},[1086,3697,3698],{"class":1109},"stringify",[1086,3700,1310],{"class":1319},[1086,3702,1965],{"class":1309},[1086,3704,3705],{"class":1319},"[",[1086,3707,3708],{"class":3567},"0",[1086,3710,2294],{"class":1319},[1086,3712,3714,3716],{"class":1088,"line":3713},49,[1086,3715,3375],{"class":1313},[1086,3717,1448],{"class":1319},[1086,3719,3721],{"class":1088,"line":3720},50,[1086,3722,1378],{"emptyLinePlaceholder":21},[1086,3724,3726,3729,3731,3733,3736,3738,3740,3742,3744,3746,3748,3751,3753,3755,3757,3759,3761,3763,3766,3768,3771,3773,3775,3777,3779,3781,3783,3785,3787],{"class":1088,"line":3725},51,[1086,3727,3728],{"class":1299},"    await",[1086,3730,2414],{"class":1309},[1086,3732,1776],{"class":1313},[1086,3734,3735],{"class":1109},"update",[1086,3737,1310],{"class":1319},[1086,3739,2691],{"class":1309},[1086,3741,1776],{"class":1313},[1086,3743,1755],{"class":1309},[1086,3745,1850],{"class":1319},[1086,3747,1776],{"class":1313},[1086,3749,3750],{"class":1109},"set",[1086,3752,1310],{"class":1319},[1086,3754,1833],{"class":1313},[1086,3756,3638],{"class":1309},[1086,3758,1700],{"class":1313},[1086,3760,1850],{"class":1319},[1086,3762,1776],{"class":1313},[1086,3764,3765],{"class":1109},"where",[1086,3767,1310],{"class":1319},[1086,3769,3770],{"class":1109},"eq",[1086,3772,1310],{"class":1319},[1086,3774,2691],{"class":1309},[1086,3776,1776],{"class":1313},[1086,3778,1755],{"class":1309},[1086,3780,1776],{"class":1313},[1086,3782,1987],{"class":1309},[1086,3784,1684],{"class":1313},[1086,3786,3196],{"class":1309},[1086,3788,1940],{"class":1319},[1086,3790,3792],{"class":1088,"line":3791},52,[1086,3793,3592],{"class":1313},[1086,3795,3797],{"class":1088,"line":3796},53,[1086,3798,1378],{"emptyLinePlaceholder":21},[1086,3800,3802],{"class":1088,"line":3801},54,[1086,3803,3804],{"class":2664},"  \u002F\u002F Save the user message if it's a follow-up\n",[1086,3806,3808,3810,3813,3815,3817,3819,3821,3823,3826,3829,3832],{"class":1088,"line":3807},55,[1086,3809,2586],{"class":1556},[1086,3811,3812],{"class":1309}," lastMessage",[1086,3814,2596],{"class":1313},[1086,3816,3271],{"class":1309},[1086,3818,3705],{"class":1319},[1086,3820,1965],{"class":1309},[1086,3822,1776],{"class":1313},[1086,3824,3825],{"class":1309},"length",[1086,3827,3828],{"class":1313}," -",[1086,3830,3831],{"class":3567}," 1",[1086,3833,3161],{"class":1319},[1086,3835,3837,3839,3841,3844,3847,3849,3851,3853,3855,3857,3860,3862,3864,3866,3869,3871,3873],{"class":1088,"line":3836},56,[1086,3838,3535],{"class":1299},[1086,3840,1919],{"class":1319},[1086,3842,3843],{"class":1309},"lastMessage",[1086,3845,3846],{"class":1313},"?.",[1086,3848,2101],{"class":1309},[1086,3850,3347],{"class":1313},[1086,3852,1400],{"class":1313},[1086,3854,2119],{"class":1096},[1086,3856,1338],{"class":1313},[1086,3858,3859],{"class":1313}," &&",[1086,3861,3271],{"class":1309},[1086,3863,1776],{"class":1313},[1086,3865,3825],{"class":1309},[1086,3867,3868],{"class":1313}," >",[1086,3870,3831],{"class":3567},[1086,3872,3545],{"class":1319},[1086,3874,1314],{"class":1313},[1086,3876,3878,3880,3882,3884,3886,3888,3890,3892,3894,3896,3898,3900,3902],{"class":1088,"line":3877},57,[1086,3879,3728],{"class":1299},[1086,3881,2414],{"class":1309},[1086,3883,1776],{"class":1313},[1086,3885,2686],{"class":1109},[1086,3887,1310],{"class":1319},[1086,3889,2691],{"class":1309},[1086,3891,1776],{"class":1313},[1086,3893,1965],{"class":1309},[1086,3895,1850],{"class":1319},[1086,3897,1776],{"class":1313},[1086,3899,2702],{"class":1109},[1086,3901,1310],{"class":1319},[1086,3903,1314],{"class":1313},[1086,3905,3907,3910,3912,3914],{"class":1088,"line":3906},58,[1086,3908,3909],{"class":1319},"      chatId",[1086,3911,1323],{"class":1313},[1086,3913,3196],{"class":1309},[1086,3915,1341],{"class":1313},[1086,3917,3919,3922,3924,3926,3928,3930],{"class":1088,"line":3918},59,[1086,3920,3921],{"class":1319},"      role",[1086,3923,1323],{"class":1313},[1086,3925,1400],{"class":1313},[1086,3927,2119],{"class":1096},[1086,3929,1338],{"class":1313},[1086,3931,1341],{"class":1313},[1086,3933,3935,3938,3940,3942,3944],{"class":1088,"line":3934},60,[1086,3936,3937],{"class":1319},"      parts",[1086,3939,1323],{"class":1313},[1086,3941,3812],{"class":1309},[1086,3943,1776],{"class":1313},[1086,3945,2799],{"class":1309},[1086,3947,3949,3951],{"class":1088,"line":3948},61,[1086,3950,3375],{"class":1313},[1086,3952,1448],{"class":1319},[1086,3954,3956],{"class":1088,"line":3955},62,[1086,3957,3592],{"class":1313},[1086,3959,3961],{"class":1088,"line":3960},63,[1086,3962,1378],{"emptyLinePlaceholder":21},[1086,3964,3966],{"class":1088,"line":3965},64,[1086,3967,3968],{"class":2664},"  \u002F\u002F Create the streaming response\n",[1086,3970,3972,3974,3977,3979,3982,3984],{"class":1088,"line":3971},65,[1086,3973,2586],{"class":1556},[1086,3975,3976],{"class":1309}," stream",[1086,3978,2596],{"class":1313},[1086,3980,3981],{"class":1109}," createUIMessageStream",[1086,3983,1310],{"class":1319},[1086,3985,1314],{"class":1313},[1086,3987,3989,3992,3994,3997,3999,4002,4004,4006],{"class":1088,"line":3988},66,[1086,3990,3991],{"class":1109},"    execute",[1086,3993,1323],{"class":1313},[1086,3995,3996],{"class":1556}," async",[1086,3998,1907],{"class":1313},[1086,4000,4001],{"class":1910}," writer",[1086,4003,1914],{"class":1313},[1086,4005,1793],{"class":1556},[1086,4007,1389],{"class":1313},[1086,4009,4011,4014,4017,4019,4022,4024],{"class":1088,"line":4010},67,[1086,4012,4013],{"class":1556},"      const",[1086,4015,4016],{"class":1309}," result",[1086,4018,2596],{"class":1313},[1086,4020,4021],{"class":1109}," streamText",[1086,4023,1310],{"class":1319},[1086,4025,1314],{"class":1313},[1086,4027,4029,4032],{"class":1088,"line":4028},68,[1086,4030,4031],{"class":1309},"        model",[1086,4033,1341],{"class":1313},[1086,4035,4037,4040,4042,4044,4047,4049],{"class":1088,"line":4036},69,[1086,4038,4039],{"class":1319},"        system",[1086,4041,1323],{"class":1313},[1086,4043,3674],{"class":1313},[1086,4045,4046],{"class":1096},"You are a helpful AI assistant. Be concise and friendly.",[1086,4048,3680],{"class":1313},[1086,4050,1341],{"class":1313},[1086,4052,4054,4057,4059,4061,4064,4066,4068,4070],{"class":1088,"line":4053},70,[1086,4055,4056],{"class":1319},"        messages",[1086,4058,1323],{"class":1313},[1086,4060,2599],{"class":1299},[1086,4062,4063],{"class":1109}," convertToModelMessages",[1086,4065,1310],{"class":1319},[1086,4067,1965],{"class":1309},[1086,4069,1850],{"class":1319},[1086,4071,1341],{"class":1313},[1086,4073,4075,4078,4080],{"class":1088,"line":4074},71,[1086,4076,4077],{"class":1319},"        providerOptions",[1086,4079,1323],{"class":1313},[1086,4081,1389],{"class":1313},[1086,4083,4085,4088,4090],{"class":1088,"line":4084},72,[1086,4086,4087],{"class":1319},"          anthropic",[1086,4089,1323],{"class":1313},[1086,4091,1389],{"class":1313},[1086,4093,4095,4098,4100],{"class":1088,"line":4094},73,[1086,4096,4097],{"class":1319},"            thinking",[1086,4099,1323],{"class":1313},[1086,4101,1389],{"class":1313},[1086,4103,4105,4108,4110,4112,4115,4117],{"class":1088,"line":4104},74,[1086,4106,4107],{"class":1319},"              type",[1086,4109,1323],{"class":1313},[1086,4111,1400],{"class":1313},[1086,4113,4114],{"class":1096},"enabled",[1086,4116,1338],{"class":1313},[1086,4118,1341],{"class":1313},[1086,4120,4122,4125,4127],{"class":1088,"line":4121},75,[1086,4123,4124],{"class":1319},"              budgetTokens",[1086,4126,1323],{"class":1313},[1086,4128,4129],{"class":3567}," 2048\n",[1086,4131,4133],{"class":1088,"line":4132},76,[1086,4134,4135],{"class":1313},"            }\n",[1086,4137,4139],{"class":1088,"line":4138},77,[1086,4140,4141],{"class":1313},"          },\n",[1086,4143,4145,4148,4150],{"class":1088,"line":4144},78,[1086,4146,4147],{"class":1319},"          google",[1086,4149,1323],{"class":1313},[1086,4151,1389],{"class":1313},[1086,4153,4155,4158,4160],{"class":1088,"line":4154},79,[1086,4156,4157],{"class":1319},"            thinkingConfig",[1086,4159,1323],{"class":1313},[1086,4161,1389],{"class":1313},[1086,4163,4165,4168,4170,4174],{"class":1088,"line":4164},80,[1086,4166,4167],{"class":1319},"              includeThoughts",[1086,4169,1323],{"class":1313},[1086,4171,4173],{"class":4172},"sfNiH"," true",[1086,4175,1341],{"class":1313},[1086,4177,4179,4182,4184,4186,4189],{"class":1088,"line":4178},81,[1086,4180,4181],{"class":1319},"              thinkingLevel",[1086,4183,1323],{"class":1313},[1086,4185,1400],{"class":1313},[1086,4187,4188],{"class":1096},"low",[1086,4190,1364],{"class":1313},[1086,4192,4194],{"class":1088,"line":4193},82,[1086,4195,4135],{"class":1313},[1086,4197,4199],{"class":1088,"line":4198},83,[1086,4200,4141],{"class":1313},[1086,4202,4204,4207,4209],{"class":1088,"line":4203},84,[1086,4205,4206],{"class":1319},"          openai",[1086,4208,1323],{"class":1313},[1086,4210,1389],{"class":1313},[1086,4212,4214,4217,4219,4221,4223,4225],{"class":1088,"line":4213},85,[1086,4215,4216],{"class":1319},"            reasoningEffort",[1086,4218,1323],{"class":1313},[1086,4220,1400],{"class":1313},[1086,4222,4188],{"class":1096},[1086,4224,1338],{"class":1313},[1086,4226,1341],{"class":1313},[1086,4228,4230,4233,4235,4237,4240],{"class":1088,"line":4229},86,[1086,4231,4232],{"class":1319},"            reasoningSummary",[1086,4234,1323],{"class":1313},[1086,4236,1400],{"class":1313},[1086,4238,4239],{"class":1096},"detailed",[1086,4241,1364],{"class":1313},[1086,4243,4245],{"class":1088,"line":4244},87,[1086,4246,4247],{"class":1313},"          }\n",[1086,4249,4251],{"class":1088,"line":4250},88,[1086,4252,4253],{"class":1313},"        }\n",[1086,4255,4257,4260],{"class":1088,"line":4256},89,[1086,4258,4259],{"class":1313},"      }",[1086,4261,1448],{"class":1319},[1086,4263,4265],{"class":1088,"line":4264},90,[1086,4266,1378],{"emptyLinePlaceholder":21},[1086,4268,4270],{"class":1088,"line":4269},91,[1086,4271,4272],{"class":2664},"      \u002F\u002F Notify the client that a title was generated\n",[1086,4274,4276,4279,4281,4283,4285,4287,4289,4291],{"class":1088,"line":4275},92,[1086,4277,4278],{"class":1299},"      if",[1086,4280,1919],{"class":1319},[1086,4282,3540],{"class":1313},[1086,4284,262],{"class":1309},[1086,4286,1776],{"class":1313},[1086,4288,3619],{"class":1309},[1086,4290,3545],{"class":1319},[1086,4292,1314],{"class":1313},[1086,4294,4296,4299,4301,4304,4306],{"class":1088,"line":4295},93,[1086,4297,4298],{"class":1309},"        writer",[1086,4300,1776],{"class":1313},[1086,4302,4303],{"class":1109},"write",[1086,4305,1310],{"class":1319},[1086,4307,1314],{"class":1313},[1086,4309,4311,4314,4316,4318,4321,4323],{"class":1088,"line":4310},94,[1086,4312,4313],{"class":1319},"          type",[1086,4315,1323],{"class":1313},[1086,4317,1400],{"class":1313},[1086,4319,4320],{"class":1096},"data-chat-title",[1086,4322,1338],{"class":1313},[1086,4324,1341],{"class":1313},[1086,4326,4328,4331,4333,4335,4337,4339,4341,4344,4346],{"class":1088,"line":4327},95,[1086,4329,4330],{"class":1319},"          data",[1086,4332,1323],{"class":1313},[1086,4334,1678],{"class":1313},[1086,4336,2591],{"class":1319},[1086,4338,1323],{"class":1313},[1086,4340,1400],{"class":1313},[1086,4342,4343],{"class":1096},"Title generated",[1086,4345,1338],{"class":1313},[1086,4347,3096],{"class":1313},[1086,4349,4351,4354,4356],{"class":1088,"line":4350},96,[1086,4352,4353],{"class":1319},"          transient",[1086,4355,1323],{"class":1313},[1086,4357,4358],{"class":4172}," true\n",[1086,4360,4362,4365],{"class":1088,"line":4361},97,[1086,4363,4364],{"class":1313},"        }",[1086,4366,1448],{"class":1319},[1086,4368,4370],{"class":1088,"line":4369},98,[1086,4371,4372],{"class":1313},"      }\n",[1086,4374,4376],{"class":1088,"line":4375},99,[1086,4377,1378],{"emptyLinePlaceholder":21},[1086,4379,4381,4384,4386,4389,4391,4394,4396,4399],{"class":1088,"line":4380},100,[1086,4382,4383],{"class":1309},"      writer",[1086,4385,1776],{"class":1313},[1086,4387,4388],{"class":1109},"merge",[1086,4390,1310],{"class":1319},[1086,4392,4393],{"class":1309},"result",[1086,4395,1776],{"class":1313},[1086,4397,4398],{"class":1109},"toUIMessageStream",[1086,4400,1876],{"class":1319},[1086,4402,4404],{"class":1088,"line":4403},101,[1086,4405,4406],{"class":1313},"    },\n",[1086,4408,4410,4413,4415,4417,4419,4421,4423,4425],{"class":1088,"line":4409},102,[1086,4411,4412],{"class":1109},"    onFinish",[1086,4414,1323],{"class":1313},[1086,4416,3996],{"class":1556},[1086,4418,1907],{"class":1313},[1086,4420,3271],{"class":1910},[1086,4422,1914],{"class":1313},[1086,4424,1793],{"class":1556},[1086,4426,1389],{"class":1313},[1086,4428,4430],{"class":1088,"line":4429},103,[1086,4431,4432],{"class":2664},"      \u002F\u002F Save the assistant's response to the database\n",[1086,4434,4436,4439,4441,4443,4445,4447,4449,4451,4453,4455,4457,4459,4461,4463,4465,4468,4470,4473,4475,4477],{"class":1088,"line":4435},104,[1086,4437,4438],{"class":1299},"      await",[1086,4440,2414],{"class":1309},[1086,4442,1776],{"class":1313},[1086,4444,2686],{"class":1109},[1086,4446,1310],{"class":1319},[1086,4448,2691],{"class":1309},[1086,4450,1776],{"class":1313},[1086,4452,1965],{"class":1309},[1086,4454,1850],{"class":1319},[1086,4456,1776],{"class":1313},[1086,4458,2702],{"class":1109},[1086,4460,1310],{"class":1319},[1086,4462,1965],{"class":1309},[1086,4464,1776],{"class":1313},[1086,4466,4467],{"class":1109},"map",[1086,4469,1310],{"class":1319},[1086,4471,4472],{"class":1910},"message",[1086,4474,1793],{"class":1556},[1086,4476,1919],{"class":1319},[1086,4478,1314],{"class":1313},[1086,4480,4482,4485,4487,4489,4491,4493],{"class":1088,"line":4481},105,[1086,4483,4484],{"class":1319},"        chatId",[1086,4486,1323],{"class":1313},[1086,4488,2764],{"class":1309},[1086,4490,1776],{"class":1313},[1086,4492,1987],{"class":1309},[1086,4494,1341],{"class":1313},[1086,4496,4498,4501,4503,4505,4507,4509,4511,4513,4515,4517,4520,4522,4524,4526],{"class":1088,"line":4497},106,[1086,4499,4500],{"class":1319},"        role",[1086,4502,1323],{"class":1313},[1086,4504,2591],{"class":1309},[1086,4506,1776],{"class":1313},[1086,4508,2101],{"class":1309},[1086,4510,3512],{"class":1299},[1086,4512,1400],{"class":1313},[1086,4514,2119],{"class":1096},[1086,4516,1338],{"class":1313},[1086,4518,4519],{"class":1313}," |",[1086,4521,1400],{"class":1313},[1086,4523,2128],{"class":1096},[1086,4525,1338],{"class":1313},[1086,4527,1341],{"class":1313},[1086,4529,4531,4534,4536,4538,4540],{"class":1088,"line":4530},107,[1086,4532,4533],{"class":1319},"        parts",[1086,4535,1323],{"class":1313},[1086,4537,2591],{"class":1309},[1086,4539,1776],{"class":1313},[1086,4541,2799],{"class":1309},[1086,4543,4545,4547],{"class":1088,"line":4544},108,[1086,4546,4259],{"class":1313},[1086,4548,4549],{"class":1319},")))\n",[1086,4551,4553],{"class":1088,"line":4552},109,[1086,4554,4555],{"class":1313},"    }\n",[1086,4557,4559,4561],{"class":1088,"line":4558},110,[1086,4560,2387],{"class":1313},[1086,4562,1448],{"class":1319},[1086,4564,4566],{"class":1088,"line":4565},111,[1086,4567,1378],{"emptyLinePlaceholder":21},[1086,4569,4571,4573,4576,4578,4580,4582,4584],{"class":1088,"line":4570},112,[1086,4572,2814],{"class":1299},[1086,4574,4575],{"class":1109}," createUIMessageStreamResponse",[1086,4577,1310],{"class":1319},[1086,4579,1833],{"class":1313},[1086,4581,3976],{"class":1309},[1086,4583,1700],{"class":1313},[1086,4585,1448],{"class":1319},[1086,4587,4589,4591],{"class":1088,"line":4588},113,[1086,4590,1445],{"class":1313},[1086,4592,1448],{"class":1309},[976,4594,4595],{},"Here's what each part does:",[976,4597,4598],{},[994,4599,4600],{},"AI Gateway",[976,4602,4603,4604,4607],{},"Thanks to ",[1030,4605,1067],{"href":1065,"rel":4606},[1034],", we can use any AI model supported by the gateway just by specifying the model name.",[976,4609,4610],{},[994,4611,4612],{},"Automatic Title Generation",[976,4614,4615,4616,4623],{},"When a chat doesn't have a title yet, we use ",[1030,4617,4620],{"href":4618,"rel":4619},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-core\u002Fgenerate-text#generatetext",[1034],[1036,4621,4622],{},"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\".",[976,4625,4626],{},[994,4627,4628],{},"Streaming with streamText",[976,4630,4631,4632,4637],{},"The ",[1030,4633,4635],{"href":2833,"rel":4634},[1034],[1036,4636,2837],{}," function generates a streaming response from the AI model. Key options include:",[988,4639,4640,4646,4651],{},[991,4641,4642,4645],{},[1036,4643,4644],{},"model",": The AI model to use",[991,4647,4648,4650],{},[1036,4649,2137],{},": Instructions that guide the AI's behavior",[991,4652,4653,4655],{},[1036,4654,1965],{},": The conversation history",[976,4657,4658],{},[994,4659,4660],{},"UIMessageStream",[976,4662,4631,4663,1039,4669,4675],{},[1030,4664,4667],{"href":4665,"rel":4666},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream#createuimessagestream",[1034],[1036,4668,2845],{},[1030,4670,4673],{"href":4671,"rel":4672},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream-response#createuimessagestreamresponse",[1034],[1036,4674,2853],{}," 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.",[976,4677,4631,4678,4681,4682,4684,4685,4688],{},[1036,4679,4680],{},"writer.write()"," method allows sending custom data events to the client (like ",[1036,4683,4320],{},"), while ",[1036,4686,4687],{},"onFinish"," is called when streaming completes, perfect for persisting the assistant's response.",[1114,4690,4692],{"id":4691},"fetching-a-chat","Fetching a chat",[976,4694,4695],{},"Add an endpoint to fetch existing chat data from your database:",[1286,4697,4698],{},[1077,4699,4702],{"className":1290,"code":4700,"filename":4701,"language":1292,"meta":1082,"style":1082},"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",[1036,4703,4704,4730,4753,4775,4793,4797,4819,4851,4865,4877,4881,4909,4940,4949,4958,4987,4991,4995,5001,5005,5019,5051,5055,5059,5065],{"__ignoreMap":1082},[1086,4705,4706,4708,4710,4712,4714,4716,4718,4720,4722,4724,4726,4728],{"class":1088,"line":1089},[1086,4707,1675],{"class":1299},[1086,4709,1678],{"class":1313},[1086,4711,2873],{"class":1309},[1086,4713,1684],{"class":1313},[1086,4715,2471],{"class":1309},[1086,4717,1684],{"class":1313},[1086,4719,2882],{"class":1309},[1086,4721,1700],{"class":1313},[1086,4723,1703],{"class":1299},[1086,4725,1400],{"class":1313},[1086,4727,1114],{"class":1096},[1086,4729,1364],{"class":1313},[1086,4731,4732,4734,4736,4739,4741,4743,4745,4747,4749,4751],{"class":1088,"line":1106},[1086,4733,1675],{"class":1299},[1086,4735,1678],{"class":1313},[1086,4737,4738],{"class":1309}," asc",[1086,4740,1684],{"class":1313},[1086,4742,2905],{"class":1309},[1086,4744,1700],{"class":1313},[1086,4746,1703],{"class":1299},[1086,4748,1400],{"class":1313},[1086,4750,1728],{"class":1096},[1086,4752,1364],{"class":1313},[1086,4754,4755,4757,4759,4761,4763,4765,4767,4769,4771,4773],{"class":1088,"line":1329},[1086,4756,1675],{"class":1299},[1086,4758,1678],{"class":1313},[1086,4760,2414],{"class":1309},[1086,4762,1684],{"class":1313},[1086,4764,2522],{"class":1309},[1086,4766,1700],{"class":1313},[1086,4768,1703],{"class":1299},[1086,4770,1400],{"class":1313},[1086,4772,2531],{"class":1096},[1086,4774,1364],{"class":1313},[1086,4776,4777,4779,4781,4783,4785,4787,4789,4791],{"class":1088,"line":1344},[1086,4778,1675],{"class":1299},[1086,4780,1678],{"class":1313},[1086,4782,2542],{"class":1309},[1086,4784,1700],{"class":1313},[1086,4786,1703],{"class":1299},[1086,4788,1400],{"class":1313},[1086,4790,2551],{"class":1096},[1086,4792,1364],{"class":1313},[1086,4794,4795],{"class":1088,"line":1356},[1086,4796,1378],{"emptyLinePlaceholder":21},[1086,4798,4799,4801,4803,4805,4807,4809,4811,4813,4815,4817],{"class":1088,"line":1367},[1086,4800,1300],{"class":1299},[1086,4802,1303],{"class":1299},[1086,4804,2471],{"class":1109},[1086,4806,1310],{"class":1309},[1086,4808,2570],{"class":1556},[1086,4810,1919],{"class":1313},[1086,4812,2575],{"class":1910},[1086,4814,1850],{"class":1313},[1086,4816,1793],{"class":1556},[1086,4818,1389],{"class":1313},[1086,4820,4821,4823,4825,4827,4829,4831,4833,4835,4837,4839,4841,4843,4845,4847,4849],{"class":1088,"line":1375},[1086,4822,2586],{"class":1556},[1086,4824,1678],{"class":1313},[1086,4826,3196],{"class":1309},[1086,4828,1700],{"class":1313},[1086,4830,2596],{"class":1313},[1086,4832,2599],{"class":1299},[1086,4834,2882],{"class":1109},[1086,4836,1310],{"class":1319},[1086,4838,2575],{"class":1309},[1086,4840,1684],{"class":1313},[1086,4842,2542],{"class":1309},[1086,4844,1776],{"class":1313},[1086,4846,2614],{"class":1109},[1086,4848,1310],{"class":1319},[1086,4850,1314],{"class":1313},[1086,4852,4853,4855,4857,4859,4861,4863],{"class":1088,"line":1381},[1086,4854,3225],{"class":1319},[1086,4856,1323],{"class":1313},[1086,4858,2542],{"class":1309},[1086,4860,1776],{"class":1313},[1086,4862,3234],{"class":1109},[1086,4864,2642],{"class":1319},[1086,4866,4867,4869,4871,4873,4875],{"class":1088,"line":1392},[1086,4868,2387],{"class":1313},[1086,4870,1850],{"class":1319},[1086,4872,1776],{"class":1313},[1086,4874,2653],{"class":1309},[1086,4876,1448],{"class":1319},[1086,4878,4879],{"class":1088,"line":1408},[1086,4880,1378],{"emptyLinePlaceholder":21},[1086,4882,4883,4885,4887,4889,4891,4893,4895,4897,4899,4901,4903,4905,4907],{"class":1088,"line":1414},[1086,4884,2586],{"class":1556},[1086,4886,2764],{"class":1309},[1086,4888,2596],{"class":1313},[1086,4890,2599],{"class":1299},[1086,4892,2414],{"class":1309},[1086,4894,1776],{"class":1313},[1086,4896,3460],{"class":1309},[1086,4898,1776],{"class":1313},[1086,4900,1755],{"class":1309},[1086,4902,1776],{"class":1313},[1086,4904,3469],{"class":1109},[1086,4906,1310],{"class":1319},[1086,4908,1314],{"class":1313},[1086,4910,4911,4913,4915,4917,4919,4921,4923,4925,4927,4929,4931,4933,4935,4938],{"class":1088,"line":1419},[1086,4912,3479],{"class":1319},[1086,4914,1323],{"class":1313},[1086,4916,1919],{"class":1319},[1086,4918,3770],{"class":1109},[1086,4920,1310],{"class":1319},[1086,4922,2691],{"class":1309},[1086,4924,1776],{"class":1313},[1086,4926,1755],{"class":1309},[1086,4928,1776],{"class":1313},[1086,4930,1987],{"class":1309},[1086,4932,1684],{"class":1313},[1086,4934,3196],{"class":1309},[1086,4936,4937],{"class":1319},"))",[1086,4939,1341],{"class":1313},[1086,4941,4942,4945,4947],{"class":1088,"line":1442},[1086,4943,4944],{"class":1319},"    with",[1086,4946,1323],{"class":1313},[1086,4948,1389],{"class":1313},[1086,4950,4951,4954,4956],{"class":1088,"line":1947},[1086,4952,4953],{"class":1319},"      messages",[1086,4955,1323],{"class":1313},[1086,4957,1389],{"class":1313},[1086,4959,4960,4963,4965,4968,4970,4972,4974,4976,4978,4980,4982,4985],{"class":1088,"line":1974},[1086,4961,4962],{"class":1109},"        orderBy",[1086,4964,1323],{"class":1313},[1086,4966,4967],{"class":1313}," ()",[1086,4969,1793],{"class":1556},[1086,4971,4738],{"class":1109},[1086,4973,1310],{"class":1319},[1086,4975,2691],{"class":1309},[1086,4977,1776],{"class":1313},[1086,4979,1965],{"class":1309},[1086,4981,1776],{"class":1313},[1086,4983,4984],{"class":1309},"createdAt",[1086,4986,1448],{"class":1319},[1086,4988,4989],{"class":1088,"line":2020},[1086,4990,4372],{"class":1313},[1086,4992,4993],{"class":1088,"line":2087},[1086,4994,4555],{"class":1313},[1086,4996,4997,4999],{"class":1088,"line":2157},[1086,4998,2387],{"class":1313},[1086,5000,1448],{"class":1319},[1086,5002,5003],{"class":1088,"line":2197},[1086,5004,1378],{"emptyLinePlaceholder":21},[1086,5006,5007,5009,5011,5013,5015,5017],{"class":1088,"line":2248},[1086,5008,3535],{"class":1299},[1086,5010,1919],{"class":1319},[1086,5012,3540],{"class":1313},[1086,5014,262],{"class":1309},[1086,5016,3545],{"class":1319},[1086,5018,1314],{"class":1313},[1086,5020,5021,5023,5025,5027,5029,5031,5033,5035,5037,5039,5041,5043,5045,5047,5049],{"class":1088,"line":2261},[1086,5022,3553],{"class":1299},[1086,5024,2873],{"class":1109},[1086,5026,1310],{"class":1319},[1086,5028,1833],{"class":1313},[1086,5030,3562],{"class":1319},[1086,5032,1323],{"class":1313},[1086,5034,3568],{"class":3567},[1086,5036,1684],{"class":1313},[1086,5038,3573],{"class":1319},[1086,5040,1323],{"class":1313},[1086,5042,1400],{"class":1313},[1086,5044,3580],{"class":1096},[1086,5046,1338],{"class":1313},[1086,5048,1700],{"class":1313},[1086,5050,1448],{"class":1319},[1086,5052,5053],{"class":1088,"line":2291},[1086,5054,3592],{"class":1313},[1086,5056,5057],{"class":1088,"line":2297},[1086,5058,1378],{"emptyLinePlaceholder":21},[1086,5060,5061,5063],{"class":1088,"line":2302},[1086,5062,2814],{"class":1299},[1086,5064,2817],{"class":1309},[1086,5066,5067,5069],{"class":1088,"line":2334},[1086,5068,1445],{"class":1313},[1086,5070,1448],{"class":1309},[980,5072,5074],{"id":5073},"wire-up-the-ui","Wire up the UI",[976,5076,5077,5078,5083,5084,5089],{},"Nuxt UI provides purpose-built components for AI chat interfaces: ",[1030,5079,5080],{"href":281},[1036,5081,5082],{},"UChatPrompt"," for the input area and ",[1030,5085,5086],{"href":271},[1036,5087,5088],{},"UChatMessages"," for displaying the conversation.",[1114,5091,5093],{"id":5092},"creating-the-home-page","Creating the home page",[976,5095,5096,5097,5101],{},"The home page is where users start a new conversation. The ",[1030,5098,5099],{"href":281},[1036,5100,5082],{}," component provides a textarea with auto-resize, keyboard shortcuts, and a submit button:",[1286,5103,5104],{},[1077,5105,5109],{"className":1518,"code":5106,"filename":5107,"highlights":5108,"language":34,"meta":1082,"style":1082},"\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",[3439,3445,3476,3520,3527,3532,3550,3589,3595],[1036,5110,5111,5134,5153,5171,5175,5189,5215,5219,5232,5236,5241,5267,5283,5292,5300,5314,5352,5356,5360,5366,5370,5375,5401,5406,5414,5418,5426,5447,5461,5482,5503,5508,5517,5521,5529,5544,5559,5574,5589,5604,5610,5633,5642,5651,5659,5667],{"__ignoreMap":1082},[1086,5112,5113,5115,5118,5121,5124,5126,5128,5130,5132],{"class":1088,"line":1089},[1086,5114,1528],{"class":1313},[1086,5116,5117],{"class":1319},"script",[1086,5119,5120],{"class":1556}," setup",[1086,5122,5123],{"class":1556}," lang",[1086,5125,1560],{"class":1313},[1086,5127,1487],{"class":1313},[1086,5129,1292],{"class":1096},[1086,5131,1487],{"class":1313},[1086,5133,1534],{"class":1313},[1086,5135,5136,5138,5141,5143,5146,5148,5151],{"class":1088,"line":1106},[1086,5137,3035],{"class":1556},[1086,5139,5140],{"class":1309}," input ",[1086,5142,1560],{"class":1313},[1086,5144,5145],{"class":1109}," ref",[1086,5147,1310],{"class":1309},[1086,5149,5150],{"class":1313},"''",[1086,5152,1448],{"class":1309},[1086,5154,5155,5157,5160,5162,5164,5166,5169],{"class":1088,"line":1329},[1086,5156,3035],{"class":1556},[1086,5158,5159],{"class":1309}," loading ",[1086,5161,1560],{"class":1313},[1086,5163,5145],{"class":1109},[1086,5165,1310],{"class":1309},[1086,5167,5168],{"class":4172},"false",[1086,5170,1448],{"class":1309},[1086,5172,5173],{"class":1088,"line":1344},[1086,5174,1378],{"emptyLinePlaceholder":21},[1086,5176,5177,5179,5182,5185,5187],{"class":1088,"line":1356},[1086,5178,2570],{"class":1556},[1086,5180,5181],{"class":1556}," function",[1086,5183,5184],{"class":1109}," createChat",[1086,5186,1773],{"class":1313},[1086,5188,1389],{"class":1313},[1086,5190,5191,5193,5195,5197,5200,5202,5204,5206,5209,5212],{"class":1088,"line":1367},[1086,5192,3535],{"class":1299},[1086,5194,1919],{"class":1319},[1086,5196,3540],{"class":1313},[1086,5198,5199],{"class":1309},"input",[1086,5201,1776],{"class":1313},[1086,5203,3320],{"class":1309},[1086,5205,1776],{"class":1313},[1086,5207,5208],{"class":1109},"trim",[1086,5210,5211],{"class":1319},"()) ",[1086,5213,5214],{"class":1299},"return\n",[1086,5216,5217],{"class":1088,"line":1375},[1086,5218,1378],{"emptyLinePlaceholder":21},[1086,5220,5221,5224,5226,5228,5230],{"class":1088,"line":1381},[1086,5222,5223],{"class":1309},"  loading",[1086,5225,1776],{"class":1313},[1086,5227,3320],{"class":1309},[1086,5229,2596],{"class":1313},[1086,5231,4358],{"class":4172},[1086,5233,5234],{"class":1088,"line":1392},[1086,5235,1378],{"emptyLinePlaceholder":21},[1086,5237,5238],{"class":1088,"line":1408},[1086,5239,5240],{"class":2664},"  \u002F\u002F Create a new chat on the server\n",[1086,5242,5243,5245,5247,5249,5251,5254,5256,5258,5261,5263,5265],{"class":1088,"line":1414},[1086,5244,2586],{"class":1556},[1086,5246,2764],{"class":1309},[1086,5248,2596],{"class":1313},[1086,5250,2599],{"class":1299},[1086,5252,5253],{"class":1109}," $fetch",[1086,5255,1310],{"class":1319},[1086,5257,1338],{"class":1313},[1086,5259,5260],{"class":1096},"\u002Fapi\u002Fchats",[1086,5262,1338],{"class":1313},[1086,5264,1684],{"class":1313},[1086,5266,1389],{"class":1313},[1086,5268,5269,5272,5274,5276,5279,5281],{"class":1088,"line":1419},[1086,5270,5271],{"class":1319},"    method",[1086,5273,1323],{"class":1313},[1086,5275,1400],{"class":1313},[1086,5277,5278],{"class":1096},"POST",[1086,5280,1338],{"class":1313},[1086,5282,1341],{"class":1313},[1086,5284,5285,5288,5290],{"class":1088,"line":1442},[1086,5286,5287],{"class":1319},"    body",[1086,5289,1323],{"class":1313},[1086,5291,1389],{"class":1313},[1086,5293,5294,5296,5298],{"class":1088,"line":1947},[1086,5295,3360],{"class":1319},[1086,5297,1323],{"class":1313},[1086,5299,1389],{"class":1313},[1086,5301,5302,5304,5306,5308,5310,5312],{"class":1088,"line":1974},[1086,5303,4500],{"class":1319},[1086,5305,1323],{"class":1313},[1086,5307,1400],{"class":1313},[1086,5309,2119],{"class":1096},[1086,5311,1338],{"class":1313},[1086,5313,1341],{"class":1313},[1086,5315,5316,5318,5320,5322,5324,5326,5328,5330,5333,5335,5337,5339,5341,5344,5346,5348,5350],{"class":1088,"line":2020},[1086,5317,4533],{"class":1319},[1086,5319,1323],{"class":1313},[1086,5321,1427],{"class":1319},[1086,5323,1833],{"class":1313},[1086,5325,2493],{"class":1319},[1086,5327,1323],{"class":1313},[1086,5329,1400],{"class":1313},[1086,5331,5332],{"class":1096},"text",[1086,5334,1338],{"class":1313},[1086,5336,1684],{"class":1313},[1086,5338,1687],{"class":1319},[1086,5340,1323],{"class":1313},[1086,5342,5343],{"class":1309}," input",[1086,5345,1776],{"class":1313},[1086,5347,3320],{"class":1309},[1086,5349,1700],{"class":1313},[1086,5351,3161],{"class":1319},[1086,5353,5354],{"class":1088,"line":2087},[1086,5355,4372],{"class":1313},[1086,5357,5358],{"class":1088,"line":2157},[1086,5359,4555],{"class":1313},[1086,5361,5362,5364],{"class":1088,"line":2197},[1086,5363,2387],{"class":1313},[1086,5365,1448],{"class":1319},[1086,5367,5368],{"class":1088,"line":2248},[1086,5369,1378],{"emptyLinePlaceholder":21},[1086,5371,5372],{"class":1088,"line":2261},[1086,5373,5374],{"class":2664},"  \u002F\u002F Navigate to the chat page\n",[1086,5376,5377,5380,5382,5384,5387,5390,5392,5394,5396,5399],{"class":1088,"line":2291},[1086,5378,5379],{"class":1109},"  navigateTo",[1086,5381,1310],{"class":1319},[1086,5383,3680],{"class":1313},[1086,5385,5386],{"class":1096},"\u002Fchat\u002F",[1086,5388,5389],{"class":1313},"${",[1086,5391,262],{"class":1309},[1086,5393,1776],{"class":1313},[1086,5395,1987],{"class":1309},[1086,5397,5398],{"class":1313},"}`",[1086,5400,1448],{"class":1319},[1086,5402,5403],{"class":1088,"line":2297},[1086,5404,5405],{"class":1313},"}\n",[1086,5407,5408,5410,5412],{"class":1088,"line":2302},[1086,5409,1604],{"class":1313},[1086,5411,5117],{"class":1319},[1086,5413,1534],{"class":1313},[1086,5415,5416],{"class":1088,"line":2334},[1086,5417,1378],{"emptyLinePlaceholder":21},[1086,5419,5420,5422,5424],{"class":1088,"line":2350},[1086,5421,1528],{"class":1313},[1086,5423,1531],{"class":1319},[1086,5425,1534],{"class":1313},[1086,5427,5428,5430,5433,5436,5438,5440,5443,5445],{"class":1088,"line":2368},[1086,5429,1541],{"class":1313},[1086,5431,5432],{"class":1319},"UDashboardPanel",[1086,5434,5435],{"class":1556}," :ui",[1086,5437,1560],{"class":1313},[1086,5439,1487],{"class":1313},[1086,5441,5442],{"class":1096},"{ body: 'p-0 sm:p-0' }",[1086,5444,1487],{"class":1313},[1086,5446,1534],{"class":1313},[1086,5448,5449,5451,5453,5456,5459],{"class":1088,"line":2384},[1086,5450,1550],{"class":1313},[1086,5452,1531],{"class":1319},[1086,5454,5455],{"class":1313}," #",[1086,5457,5458],{"class":1556},"body",[1086,5460,1534],{"class":1313},[1086,5462,5463,5465,5468,5471,5473,5475,5478,5480],{"class":1088,"line":2392},[1086,5464,1574],{"class":1313},[1086,5466,5467],{"class":1319},"UContainer",[1086,5469,5470],{"class":1556}," class",[1086,5472,1560],{"class":1313},[1086,5474,1487],{"class":1313},[1086,5476,5477],{"class":1096},"min-h-dvh flex flex-col justify-center gap-6 py-8",[1086,5479,1487],{"class":1313},[1086,5481,1534],{"class":1313},[1086,5483,5484,5487,5490,5492,5494,5496,5499,5501],{"class":1088,"line":3372},[1086,5485,5486],{"class":1313},"        \u003C",[1086,5488,5489],{"class":1319},"h1",[1086,5491,5470],{"class":1556},[1086,5493,1560],{"class":1313},[1086,5495,1487],{"class":1313},[1086,5497,5498],{"class":1096},"text-3xl sm:text-4xl text-highlighted font-bold",[1086,5500,1487],{"class":1313},[1086,5502,1534],{"class":1313},[1086,5504,5505],{"class":1088,"line":3389},[1086,5506,5507],{"class":1309},"          How can I help you today?\n",[1086,5509,5510,5513,5515],{"class":1088,"line":3421},[1086,5511,5512],{"class":1313},"        \u003C\u002F",[1086,5514,5489],{"class":1319},[1086,5516,1534],{"class":1313},[1086,5518,5519],{"class":1088,"line":3434},[1086,5520,1378],{"emptyLinePlaceholder":21},[1086,5522,5524,5526],{"class":5523,"line":3439},[1088,1538],[1086,5525,5486],{"class":1313},[1086,5527,5528],{"class":1319},"UChatPrompt\n",[1086,5530,5532,5535,5537,5539,5541],{"class":5531,"line":3445},[1088,1538],[1086,5533,5534],{"class":1556},"          v-model",[1086,5536,1560],{"class":1313},[1086,5538,1487],{"class":1313},[1086,5540,5199],{"class":1096},[1086,5542,5543],{"class":1313},"\"\n",[1086,5545,5547,5550,5552,5554,5557],{"class":5546,"line":3476},[1088,1538],[1086,5548,5549],{"class":1556},"          :status",[1086,5551,1560],{"class":1313},[1086,5553,1487],{"class":1313},[1086,5555,5556],{"class":1096},"loading ? 'streaming' : 'ready'",[1086,5558,5543],{"class":1313},[1086,5560,5562,5565,5567,5569,5572],{"class":5561,"line":3520},[1088,1538],[1086,5563,5564],{"class":1556},"          variant",[1086,5566,1560],{"class":1313},[1086,5568,1487],{"class":1313},[1086,5570,5571],{"class":1096},"subtle",[1086,5573,5543],{"class":1313},[1086,5575,5577,5580,5582,5584,5587],{"class":5576,"line":3527},[1088,1538],[1086,5578,5579],{"class":1556},"          placeholder",[1086,5581,1560],{"class":1313},[1086,5583,1487],{"class":1313},[1086,5585,5586],{"class":1096},"Ask me anything...",[1086,5588,5543],{"class":1313},[1086,5590,5592,5595,5597,5599,5602],{"class":5591,"line":3532},[1088,1538],[1086,5593,5594],{"class":1556},"          @submit",[1086,5596,1560],{"class":1313},[1086,5598,1487],{"class":1313},[1086,5600,5601],{"class":1096},"createChat",[1086,5603,5543],{"class":1313},[1086,5605,5607],{"class":5606,"line":3550},[1088,1538],[1086,5608,5609],{"class":1313},"        >\n",[1086,5611,5613,5616,5619,5622,5624,5626,5629,5631],{"class":5612,"line":3589},[1088,1538],[1086,5614,5615],{"class":1313},"          \u003C",[1086,5617,5618],{"class":1319},"UChatPromptSubmit",[1086,5620,5621],{"class":1556}," color",[1086,5623,1560],{"class":1313},[1086,5625,1487],{"class":1313},[1086,5627,5628],{"class":1096},"neutral",[1086,5630,1487],{"class":1313},[1086,5632,1580],{"class":1313},[1086,5634,5636,5638,5640],{"class":5635,"line":3595},[1088,1538],[1086,5637,5512],{"class":1313},[1086,5639,5082],{"class":1319},[1086,5641,1534],{"class":1313},[1086,5643,5644,5647,5649],{"class":1088,"line":3600},[1086,5645,5646],{"class":1313},"      \u003C\u002F",[1086,5648,5467],{"class":1319},[1086,5650,1534],{"class":1313},[1086,5652,5653,5655,5657],{"class":1088,"line":3606},[1086,5654,1585],{"class":1313},[1086,5656,1531],{"class":1319},[1086,5658,1534],{"class":1313},[1086,5660,5661,5663,5665],{"class":1088,"line":3626},[1086,5662,1595],{"class":1313},[1086,5664,5432],{"class":1319},[1086,5666,1534],{"class":1313},[1086,5668,5669,5671,5673],{"class":1088,"line":3654},[1086,5670,1604],{"class":1313},[1086,5672,1531],{"class":1319},[1086,5674,1534],{"class":1313},[976,5676,4631,5677,5681],{},[1030,5678,5679],{"href":281},[1036,5680,5082],{}," component automatically handles:",[988,5683,5684,5691,5694,5704],{},[991,5685,5686,5687],{},"Form submission when pressing ",[5688,5689],"kbd",{"value":5690},"enter",[991,5692,5693],{},"Auto-resizing as you type",[991,5695,5696,5697,5700,5701],{},"A loading state when ",[1036,5698,5699],{},"status"," is set to ",[1036,5702,5703],{},"streaming",[991,5705,5706],{},"Focus management and keyboard shortcuts",[1114,5708,5710],{"id":5709},"setting-up-markdown-rendering","Setting up Markdown rendering",[976,5712,5713,5714,5721,5722,5729,5730,5732,5733,5738],{},"AI models often respond with Markdown formatting (code blocks, lists, bold text, etc.). Before building the chat page, create a custom ",[1030,5715,5718],{"href":5716,"rel":5717},"https:\u002F\u002Fcomark.dev",[1034],[1036,5719,5720],{},"Comark"," component that will handle streaming Markdown rendering. Using ",[1030,5723,5726],{"href":5724,"rel":5725},"https:\u002F\u002Fcomark.dev\u002Frendering\u002Fvue#code-definecomarkcomponent",[1034],[1036,5727,5728],{},"defineComarkComponent",", you can enable the ",[1036,5731,1538],{}," plugin for syntax highlighting in code blocks and register additional ",[1030,5734,5737],{"href":5735,"rel":5736},"https:\u002F\u002Fshiki.style",[1034],"Shiki"," languages beyond the defaults (TypeScript, JavaScript, Vue, Shell, JSON, YAML, Markdown):",[1286,5740,5741],{},[1077,5742,5745],{"className":1290,"code":5743,"filename":5744,"language":1292,"meta":1082,"style":1082},"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",[1036,5746,5747,5764,5780,5796,5812,5828,5832,5845,5861,5870,5879,5904,5910,5916,5930],{"__ignoreMap":1082},[1086,5748,5749,5751,5754,5757,5759,5762],{"class":1088,"line":1089},[1086,5750,1675],{"class":1299},[1086,5752,5753],{"class":1309}," highlight ",[1086,5755,5756],{"class":1299},"from",[1086,5758,1400],{"class":1313},[1086,5760,5761],{"class":1096},"@comark\u002Fnuxt\u002Fplugins\u002Fhighlight",[1086,5763,1364],{"class":1313},[1086,5765,5766,5768,5771,5773,5775,5778],{"class":1088,"line":1106},[1086,5767,1675],{"class":1299},[1086,5769,5770],{"class":1309}," python ",[1086,5772,5756],{"class":1299},[1086,5774,1400],{"class":1313},[1086,5776,5777],{"class":1096},"@shikijs\u002Flangs\u002Fpython",[1086,5779,1364],{"class":1313},[1086,5781,5782,5784,5787,5789,5791,5794],{"class":1088,"line":1329},[1086,5783,1675],{"class":1299},[1086,5785,5786],{"class":1309}," sql ",[1086,5788,5756],{"class":1299},[1086,5790,1400],{"class":1313},[1086,5792,5793],{"class":1096},"@shikijs\u002Flangs\u002Fsql",[1086,5795,1364],{"class":1313},[1086,5797,5798,5800,5803,5805,5807,5810],{"class":1088,"line":1344},[1086,5799,1675],{"class":1299},[1086,5801,5802],{"class":1309}," go ",[1086,5804,5756],{"class":1299},[1086,5806,1400],{"class":1313},[1086,5808,5809],{"class":1096},"@shikijs\u002Flangs\u002Fgo",[1086,5811,1364],{"class":1313},[1086,5813,5814,5816,5819,5821,5823,5826],{"class":1088,"line":1356},[1086,5815,1675],{"class":1299},[1086,5817,5818],{"class":1309}," rust ",[1086,5820,5756],{"class":1299},[1086,5822,1400],{"class":1313},[1086,5824,5825],{"class":1096},"@shikijs\u002Flangs\u002Frust",[1086,5827,1364],{"class":1313},[1086,5829,5830],{"class":1088,"line":1367},[1086,5831,1378],{"emptyLinePlaceholder":21},[1086,5833,5834,5836,5838,5841,5843],{"class":1088,"line":1375},[1086,5835,1300],{"class":1299},[1086,5837,1303],{"class":1299},[1086,5839,5840],{"class":1109}," defineComarkComponent",[1086,5842,1310],{"class":1309},[1086,5844,1314],{"class":1313},[1086,5846,5847,5850,5852,5854,5857,5859],{"class":1088,"line":1381},[1086,5848,5849],{"class":1319},"  name",[1086,5851,1323],{"class":1313},[1086,5853,1400],{"class":1313},[1086,5855,5856],{"class":1096},"ChatComark",[1086,5858,1338],{"class":1313},[1086,5860,1341],{"class":1313},[1086,5862,5863,5866,5868],{"class":1088,"line":1392},[1086,5864,5865],{"class":1319},"  plugins",[1086,5867,1323],{"class":1313},[1086,5869,1326],{"class":1309},[1086,5871,5872,5875,5877],{"class":1088,"line":1408},[1086,5873,5874],{"class":1109},"    highlight",[1086,5876,1310],{"class":1309},[1086,5878,1314],{"class":1313},[1086,5880,5881,5884,5886,5889,5891,5894,5896,5899,5901],{"class":1088,"line":1414},[1086,5882,5883],{"class":1319},"      languages",[1086,5885,1323],{"class":1313},[1086,5887,5888],{"class":1309}," [python",[1086,5890,1684],{"class":1313},[1086,5892,5893],{"class":1309}," sql",[1086,5895,1684],{"class":1313},[1086,5897,5898],{"class":1309}," go",[1086,5900,1684],{"class":1313},[1086,5902,5903],{"class":1309}," rust]\n",[1086,5905,5906,5908],{"class":1088,"line":1419},[1086,5907,3375],{"class":1313},[1086,5909,1448],{"class":1309},[1086,5911,5912,5914],{"class":1088,"line":1442},[1086,5913,1370],{"class":1309},[1086,5915,1341],{"class":1313},[1086,5917,5918,5921,5923,5925,5928],{"class":1088,"line":1947},[1086,5919,5920],{"class":1319},"  class",[1086,5922,1323],{"class":1313},[1086,5924,1400],{"class":1313},[1086,5926,5927],{"class":1096},"*:first:mt-0 *:last:mb-0",[1086,5929,1364],{"class":1313},[1086,5931,5932,5934],{"class":1088,"line":1974},[1086,5933,1445],{"class":1313},[1086,5935,1448],{"class":1309},[976,5937,5938,5939,5942],{},"This creates a ",[1036,5940,5941],{},"\u003CChatComark>"," component we'll use in the chat page to render assistant messages and reasoning content.",[976,5944,5945],{},"Since Comark uses Shiki with dual themes, you need to add the following CSS to your stylesheet for dark mode support:",[1077,5947,5949],{"className":1468,"code":5948,"filename":1470,"language":1471,"meta":1082,"style":1082},"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",[1036,5950,5951,5972,5995,6015,6035,6055,6075],{"__ignoreMap":1082},[1086,5952,5953,5956,5958,5961,5964,5967,5970],{"class":1088,"line":1089},[1086,5954,5955],{"class":1092},"html",[1086,5957,1776],{"class":1313},[1086,5959,5960],{"class":1092},"dark",[1086,5962,5963],{"class":1313}," .",[1086,5965,5966],{"class":1092},"shiki",[1086,5968,5969],{"class":1092}," span",[1086,5971,1389],{"class":1313},[1086,5973,5974,5978,5980,5983,5985,5988,5990,5993],{"class":1088,"line":1106},[1086,5975,5977],{"class":5976},"sqsOY","  color",[1086,5979,1323],{"class":1313},[1086,5981,5982],{"class":1109}," var",[1086,5984,1310],{"class":1313},[1086,5986,5987],{"class":1309},"--shiki-dark",[1086,5989,1850],{"class":1313},[1086,5991,5992],{"class":3567}," !important",[1086,5994,1490],{"class":1313},[1086,5996,5997,6000,6002,6004,6006,6009,6011,6013],{"class":1088,"line":1329},[1086,5998,5999],{"class":5976},"  background-color",[1086,6001,1323],{"class":1313},[1086,6003,5982],{"class":1109},[1086,6005,1310],{"class":1313},[1086,6007,6008],{"class":1309},"--shiki-dark-bg",[1086,6010,1850],{"class":1313},[1086,6012,5992],{"class":3567},[1086,6014,1490],{"class":1313},[1086,6016,6017,6020,6022,6024,6026,6029,6031,6033],{"class":1088,"line":1344},[1086,6018,6019],{"class":5976},"  font-style",[1086,6021,1323],{"class":1313},[1086,6023,5982],{"class":1109},[1086,6025,1310],{"class":1313},[1086,6027,6028],{"class":1309},"--shiki-dark-font-style",[1086,6030,1850],{"class":1313},[1086,6032,5992],{"class":3567},[1086,6034,1490],{"class":1313},[1086,6036,6037,6040,6042,6044,6046,6049,6051,6053],{"class":1088,"line":1356},[1086,6038,6039],{"class":5976},"  font-weight",[1086,6041,1323],{"class":1313},[1086,6043,5982],{"class":1109},[1086,6045,1310],{"class":1313},[1086,6047,6048],{"class":1309},"--shiki-dark-font-weight",[1086,6050,1850],{"class":1313},[1086,6052,5992],{"class":3567},[1086,6054,1490],{"class":1313},[1086,6056,6057,6060,6062,6064,6066,6069,6071,6073],{"class":1088,"line":1367},[1086,6058,6059],{"class":5976},"  text-decoration",[1086,6061,1323],{"class":1313},[1086,6063,5982],{"class":1109},[1086,6065,1310],{"class":1313},[1086,6067,6068],{"class":1309},"--shiki-dark-text-decoration",[1086,6070,1850],{"class":1313},[1086,6072,5992],{"class":3567},[1086,6074,1490],{"class":1313},[1086,6076,6077],{"class":1088,"line":1375},[1086,6078,5405],{"class":1313},[980,6080,6082],{"id":6081},"creating-the-chat-page","Creating the chat page",[976,6084,6085,6086,6092,6093,6100],{},"The chat page is where the actual conversation happens. It integrates the AI SDK's ",[1030,6087,6090],{"href":6088,"rel":6089},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fchat",[1034],[1036,6091,259],{}," class and ",[1030,6094,6097],{"href":6095,"rel":6096},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fdefault-chat-transport",[1034],[1036,6098,6099],{},"DefaultChatTransport"," for real-time streaming.",[1286,6102,6103],{},[1663,6104,6105],{},[1077,6106,6110],{"className":1518,"code":6107,"filename":6108,"highlights":6109,"language":34,"meta":1082,"style":1082},"\u003Cscript setup lang=\"ts\">\nimport { DefaultChatTransport, isReasoningUIPart, isTextUIPart } from 'ai'\nimport { Chat } from '@ai-sdk\u002Fvue'\nimport { isPartStreaming } from '@nuxt\u002Fui\u002Futils\u002Fai'\n\nconst route = useRoute()\nconst toast = useToast()\n\n\u002F\u002F Fetch existing chat data\nconst { data: chatData } = await useFetch(`\u002Fapi\u002Fchats\u002F${route.params.id}`)\n\nif (!chatData.value) {\n  throw createError({ statusCode: 404, statusMessage: 'Chat not found', fatal: true })\n}\n\nconst input = ref('')\n\n\u002F\u002F Initialize the Chat class from AI SDK\nconst chat = new Chat({\n  id: chatData.value.id,\n  messages: chatData.value.messages,\n  transport: new DefaultChatTransport({\n    api: `\u002Fapi\u002Fchats\u002F${chatData.value.id}`\n  }),\n  onData(dataPart) {\n    \u002F\u002F Refresh the chat list when a title is generated\n    if (dataPart.type === 'data-chat-title') {\n      refreshNuxtData('chats')\n    }\n  },\n  onError(error) {\n    toast.add({\n      title: 'Error',\n      description: error.message,\n      color: 'error'\n    })\n  }\n})\n\nfunction handleSubmit(e: Event) {\n  e.preventDefault()\n  if (input.value.trim()) {\n    chat.sendMessage({ text: input.value })\n    input.value = ''\n  }\n}\n\n\u002F\u002F Auto-generate response for first message\nonMounted(() => {\n  if (chatData.value?.messages.length === 1) {\n    chat.regenerate()\n  }\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CUDashboardPanel :ui=\"{ body: 'p-0 sm:p-0' }\">\n    \u003Ctemplate #body>\n      \u003CUContainer class=\"min-h-dvh flex flex-col py-4 sm:py-6\">\n        \u003CUChatMessages\n          :messages=\"chat.messages\"\n          :status=\"chat.status\"\n          should-auto-scroll\n          class=\"flex-1\"\n        >\n          \u003Ctemplate #content=\"{ message }\">\n            \u003Ctemplate v-for=\"(part, index) in message.parts\" :key=\"`${message.id}-${part.type}-${index}`\">\n              \u003CUChatReasoning\n                v-if=\"isReasoningUIPart(part)\"\n                :text=\"part.text\"\n                :streaming=\"isPartStreaming(part)\"\n              >\n                \u003CChatComark\n                  :markdown=\"part.text\"\n                  :streaming=\"isPartStreaming(part)\"\n                \u002F>\n              \u003C\u002FUChatReasoning>\n\n              \u003Ctemplate v-else-if=\"isTextUIPart(part)\">\n                \u003CChatComark\n                  v-if=\"message.role === 'assistant'\"\n                  :markdown=\"part.text\"\n                  :streaming=\"isPartStreaming(part)\"\n                \u002F>\n                \u003Cp v-else-if=\"message.role === 'user'\" class=\"whitespace-pre-wrap\">\n                  {{ part.text }}\n                \u003C\u002Fp>\n              \u003C\u002Ftemplate>\n            \u003C\u002Ftemplate>\n          \u003C\u002Ftemplate>\n        \u003C\u002FUChatMessages>\n\n        \u003CUChatPrompt\n          v-model=\"input\"\n          :error=\"chat.error\"\n          variant=\"subtle\"\n          class=\"sticky bottom-0\"\n          @submit=\"handleSubmit\"\n        >\n          \u003CUChatPromptSubmit\n            :status=\"chat.status\"\n            color=\"neutral\"\n            @stop=\"chat.stop()\"\n            @reload=\"chat.regenerate()\"\n          \u002F>\n        \u003C\u002FUChatPrompt>\n      \u003C\u002FUContainer>\n    \u003C\u002Ftemplate>\n  \u003C\u002FUDashboardPanel>\n\u003C\u002Ftemplate>\n","app\u002Fpages\u002Fchat\u002F[id].vue",[1106,1329,1344,2197,2248,2261,2291,2297,2302,2334,2350,2368,2384,2392,3372,3389,3421,3434,3439,3445,3476,3520,3527],[1036,6111,6112,6132,6162,6183,6204,6208,6222,6236,6240,6245,6293,6297,6316,6358,6362,6366,6382,6386,6391,6409,6429,6448,6464,6491,6500,6515,6521,6548,6564,6569,6574,6589,6604,6620,6637,6651,6658,6663,6670,6674,6696,6708,6728,6756,6770,6774,6778,6782,6787,6800,6828,6839,6843,6849,6857,6861,6869,6887,6899,6918,6925,6939,6952,6957,6971,6975,7000,7078,7086,7100,7114,7128,7133,7141,7154,7167,7172,7182,7186,7209,7215,7229,7241,7253,7257,7287,7292,7301,7309,7318,7327,7335,7339,7345,7357,7371,7383,7396,7409,7413,7420,7433,7446,7460,7474,7479,7487,7495,7503,7511],{"__ignoreMap":1082},[1086,6113,6114,6116,6118,6120,6122,6124,6126,6128,6130],{"class":1088,"line":1089},[1086,6115,1528],{"class":1313},[1086,6117,5117],{"class":1319},[1086,6119,5120],{"class":1556},[1086,6121,5123],{"class":1556},[1086,6123,1560],{"class":1313},[1086,6125,1487],{"class":1313},[1086,6127,1292],{"class":1096},[1086,6129,1487],{"class":1313},[1086,6131,1534],{"class":1313},[1086,6133,6135,6137,6139,6142,6144,6147,6149,6152,6154,6156,6158,6160],{"class":6134,"line":1106},[1088,1538],[1086,6136,1675],{"class":1299},[1086,6138,1678],{"class":1313},[1086,6140,6141],{"class":1309}," DefaultChatTransport",[1086,6143,1684],{"class":1313},[1086,6145,6146],{"class":1309}," isReasoningUIPart",[1086,6148,1684],{"class":1313},[1086,6150,6151],{"class":1309}," isTextUIPart",[1086,6153,1700],{"class":1313},[1086,6155,1703],{"class":1299},[1086,6157,1400],{"class":1313},[1086,6159,2507],{"class":1096},[1086,6161,1364],{"class":1313},[1086,6163,6165,6167,6169,6172,6174,6176,6178,6181],{"class":6164,"line":1329},[1088,1538],[1086,6166,1675],{"class":1299},[1086,6168,1678],{"class":1313},[1086,6170,6171],{"class":1309}," Chat",[1086,6173,1700],{"class":1313},[1086,6175,1703],{"class":1299},[1086,6177,1400],{"class":1313},[1086,6179,6180],{"class":1096},"@ai-sdk\u002Fvue",[1086,6182,1364],{"class":1313},[1086,6184,6186,6188,6190,6193,6195,6197,6199,6202],{"class":6185,"line":1344},[1088,1538],[1086,6187,1675],{"class":1299},[1086,6189,1678],{"class":1313},[1086,6191,6192],{"class":1309}," isPartStreaming",[1086,6194,1700],{"class":1313},[1086,6196,1703],{"class":1299},[1086,6198,1400],{"class":1313},[1086,6200,6201],{"class":1096},"@nuxt\u002Fui\u002Futils\u002Fai",[1086,6203,1364],{"class":1313},[1086,6205,6206],{"class":1088,"line":1356},[1086,6207,1378],{"emptyLinePlaceholder":21},[1086,6209,6210,6212,6215,6217,6220],{"class":1088,"line":1367},[1086,6211,3035],{"class":1556},[1086,6213,6214],{"class":1309}," route ",[1086,6216,1560],{"class":1313},[1086,6218,6219],{"class":1109}," useRoute",[1086,6221,2642],{"class":1309},[1086,6223,6224,6226,6229,6231,6234],{"class":1088,"line":1375},[1086,6225,3035],{"class":1556},[1086,6227,6228],{"class":1309}," toast ",[1086,6230,1560],{"class":1313},[1086,6232,6233],{"class":1109}," useToast",[1086,6235,2642],{"class":1309},[1086,6237,6238],{"class":1088,"line":1381},[1086,6239,1378],{"emptyLinePlaceholder":21},[1086,6241,6242],{"class":1088,"line":1392},[1086,6243,6244],{"class":2664},"\u002F\u002F Fetch existing chat data\n",[1086,6246,6247,6249,6251,6254,6256,6259,6261,6263,6265,6268,6270,6272,6275,6277,6280,6282,6285,6287,6289,6291],{"class":1088,"line":1408},[1086,6248,3035],{"class":1556},[1086,6250,1678],{"class":1313},[1086,6252,6253],{"class":1319}," data",[1086,6255,1323],{"class":1313},[1086,6257,6258],{"class":1309}," chatData ",[1086,6260,1445],{"class":1313},[1086,6262,2596],{"class":1313},[1086,6264,2599],{"class":1299},[1086,6266,6267],{"class":1109}," useFetch",[1086,6269,1310],{"class":1309},[1086,6271,3680],{"class":1313},[1086,6273,6274],{"class":1096},"\u002Fapi\u002Fchats\u002F",[1086,6276,5389],{"class":1313},[1086,6278,6279],{"class":1309},"route",[1086,6281,1776],{"class":1313},[1086,6283,6284],{"class":1309},"params",[1086,6286,1776],{"class":1313},[1086,6288,1987],{"class":1309},[1086,6290,5398],{"class":1313},[1086,6292,1448],{"class":1309},[1086,6294,6295],{"class":1088,"line":1414},[1086,6296,1378],{"emptyLinePlaceholder":21},[1086,6298,6299,6302,6304,6306,6309,6311,6314],{"class":1088,"line":1419},[1086,6300,6301],{"class":1299},"if",[1086,6303,1919],{"class":1309},[1086,6305,3540],{"class":1313},[1086,6307,6308],{"class":1309},"chatData",[1086,6310,1776],{"class":1313},[1086,6312,6313],{"class":1309},"value) ",[1086,6315,1314],{"class":1313},[1086,6317,6318,6321,6323,6325,6327,6329,6331,6333,6335,6337,6339,6341,6343,6345,6347,6350,6352,6354,6356],{"class":1088,"line":1442},[1086,6319,6320],{"class":1299},"  throw",[1086,6322,2873],{"class":1109},[1086,6324,1310],{"class":1319},[1086,6326,1833],{"class":1313},[1086,6328,3562],{"class":1319},[1086,6330,1323],{"class":1313},[1086,6332,3568],{"class":3567},[1086,6334,1684],{"class":1313},[1086,6336,3573],{"class":1319},[1086,6338,1323],{"class":1313},[1086,6340,1400],{"class":1313},[1086,6342,3580],{"class":1096},[1086,6344,1338],{"class":1313},[1086,6346,1684],{"class":1313},[1086,6348,6349],{"class":1319}," fatal",[1086,6351,1323],{"class":1313},[1086,6353,4173],{"class":4172},[1086,6355,1700],{"class":1313},[1086,6357,1448],{"class":1319},[1086,6359,6360],{"class":1088,"line":1947},[1086,6361,5405],{"class":1313},[1086,6363,6364],{"class":1088,"line":1974},[1086,6365,1378],{"emptyLinePlaceholder":21},[1086,6367,6368,6370,6372,6374,6376,6378,6380],{"class":1088,"line":2020},[1086,6369,3035],{"class":1556},[1086,6371,5140],{"class":1309},[1086,6373,1560],{"class":1313},[1086,6375,5145],{"class":1109},[1086,6377,1310],{"class":1309},[1086,6379,5150],{"class":1313},[1086,6381,1448],{"class":1309},[1086,6383,6384],{"class":1088,"line":2087},[1086,6385,1378],{"emptyLinePlaceholder":21},[1086,6387,6388],{"class":1088,"line":2157},[1086,6389,6390],{"class":2664},"\u002F\u002F Initialize the Chat class from AI SDK\n",[1086,6392,6394,6396,6399,6401,6403,6405,6407],{"class":6393,"line":2197},[1088,1538],[1086,6395,3035],{"class":1556},[1086,6397,6398],{"class":1309}," chat ",[1086,6400,1560],{"class":1313},[1086,6402,1870],{"class":1313},[1086,6404,6171],{"class":1109},[1086,6406,1310],{"class":1309},[1086,6408,1314],{"class":1313},[1086,6410,6412,6414,6416,6419,6421,6423,6425,6427],{"class":6411,"line":2248},[1088,1538],[1086,6413,1766],{"class":1319},[1086,6415,1323],{"class":1313},[1086,6417,6418],{"class":1309}," chatData",[1086,6420,1776],{"class":1313},[1086,6422,3320],{"class":1309},[1086,6424,1776],{"class":1313},[1086,6426,1987],{"class":1309},[1086,6428,1341],{"class":1313},[1086,6430,6432,6434,6436,6438,6440,6442,6444,6446],{"class":6431,"line":2261},[1088,1538],[1086,6433,1926],{"class":1319},[1086,6435,1323],{"class":1313},[1086,6437,6418],{"class":1309},[1086,6439,1776],{"class":1313},[1086,6441,3320],{"class":1309},[1086,6443,1776],{"class":1313},[1086,6445,1965],{"class":1309},[1086,6447,1341],{"class":1313},[1086,6449,6451,6454,6456,6458,6460,6462],{"class":6450,"line":2291},[1088,1538],[1086,6452,6453],{"class":1319},"  transport",[1086,6455,1323],{"class":1313},[1086,6457,1870],{"class":1313},[1086,6459,6141],{"class":1109},[1086,6461,1310],{"class":1309},[1086,6463,1314],{"class":1313},[1086,6465,6467,6470,6472,6474,6476,6478,6480,6482,6484,6486,6488],{"class":6466,"line":2297},[1088,1538],[1086,6468,6469],{"class":1319},"    api",[1086,6471,1323],{"class":1313},[1086,6473,3674],{"class":1313},[1086,6475,6274],{"class":1096},[1086,6477,5389],{"class":1313},[1086,6479,6308],{"class":1309},[1086,6481,1776],{"class":1313},[1086,6483,3320],{"class":1309},[1086,6485,1776],{"class":1313},[1086,6487,1987],{"class":1309},[1086,6489,6490],{"class":1313},"}`\n",[1086,6492,6494,6496,6498],{"class":6493,"line":2302},[1088,1538],[1086,6495,2387],{"class":1313},[1086,6497,1850],{"class":1309},[1086,6499,1341],{"class":1313},[1086,6501,6503,6506,6508,6511,6513],{"class":6502,"line":2334},[1088,1538],[1086,6504,6505],{"class":1319},"  onData",[1086,6507,1310],{"class":1313},[1086,6509,6510],{"class":1910},"dataPart",[1086,6512,1850],{"class":1313},[1086,6514,1389],{"class":1313},[1086,6516,6518],{"class":6517,"line":2350},[1088,1538],[1086,6519,6520],{"class":2664},"    \u002F\u002F Refresh the chat list when a title is generated\n",[1086,6522,6524,6527,6529,6531,6533,6536,6538,6540,6542,6544,6546],{"class":6523,"line":2368},[1088,1538],[1086,6525,6526],{"class":1299},"    if",[1086,6528,1919],{"class":1319},[1086,6530,6510],{"class":1309},[1086,6532,1776],{"class":1313},[1086,6534,6535],{"class":1309},"type",[1086,6537,3347],{"class":1313},[1086,6539,1400],{"class":1313},[1086,6541,4320],{"class":1096},[1086,6543,1338],{"class":1313},[1086,6545,3545],{"class":1319},[1086,6547,1314],{"class":1313},[1086,6549,6551,6554,6556,6558,6560,6562],{"class":6550,"line":2384},[1088,1538],[1086,6552,6553],{"class":1109},"      refreshNuxtData",[1086,6555,1310],{"class":1319},[1086,6557,1338],{"class":1313},[1086,6559,1755],{"class":1096},[1086,6561,1338],{"class":1313},[1086,6563,1448],{"class":1319},[1086,6565,6567],{"class":6566,"line":2392},[1088,1538],[1086,6568,4555],{"class":1313},[1086,6570,6572],{"class":6571,"line":3372},[1088,1538],[1086,6573,1411],{"class":1313},[1086,6575,6577,6580,6582,6585,6587],{"class":6576,"line":3389},[1088,1538],[1086,6578,6579],{"class":1319},"  onError",[1086,6581,1310],{"class":1313},[1086,6583,6584],{"class":1910},"error",[1086,6586,1850],{"class":1313},[1086,6588,1389],{"class":1313},[1086,6590,6592,6595,6597,6600,6602],{"class":6591,"line":3421},[1088,1538],[1086,6593,6594],{"class":1309},"    toast",[1086,6596,1776],{"class":1313},[1086,6598,6599],{"class":1109},"add",[1086,6601,1310],{"class":1319},[1086,6603,1314],{"class":1313},[1086,6605,6607,6610,6612,6614,6616,6618],{"class":6606,"line":3434},[1088,1538],[1086,6608,6609],{"class":1319},"      title",[1086,6611,1323],{"class":1313},[1086,6613,1400],{"class":1313},[1086,6615,497],{"class":1096},[1086,6617,1338],{"class":1313},[1086,6619,1341],{"class":1313},[1086,6621,6623,6626,6628,6631,6633,6635],{"class":6622,"line":3439},[1088,1538],[1086,6624,6625],{"class":1319},"      description",[1086,6627,1323],{"class":1313},[1086,6629,6630],{"class":1309}," error",[1086,6632,1776],{"class":1313},[1086,6634,4472],{"class":1309},[1086,6636,1341],{"class":1313},[1086,6638,6640,6643,6645,6647,6649],{"class":6639,"line":3445},[1088,1538],[1086,6641,6642],{"class":1319},"      color",[1086,6644,1323],{"class":1313},[1086,6646,1400],{"class":1313},[1086,6648,6584],{"class":1096},[1086,6650,1364],{"class":1313},[1086,6652,6654,6656],{"class":6653,"line":3476},[1088,1538],[1086,6655,3375],{"class":1313},[1086,6657,1448],{"class":1319},[1086,6659,6661],{"class":6660,"line":3520},[1088,1538],[1086,6662,3592],{"class":1313},[1086,6664,6666,6668],{"class":6665,"line":3527},[1088,1538],[1086,6667,1445],{"class":1313},[1086,6669,1448],{"class":1309},[1086,6671,6672],{"class":1088,"line":3532},[1086,6673,1378],{"emptyLinePlaceholder":21},[1086,6675,6676,6679,6682,6684,6687,6689,6692,6694],{"class":1088,"line":3550},[1086,6677,6678],{"class":1556},"function",[1086,6680,6681],{"class":1109}," handleSubmit",[1086,6683,1310],{"class":1313},[1086,6685,6686],{"class":1910},"e",[1086,6688,1323],{"class":1313},[1086,6690,6691],{"class":1092}," Event",[1086,6693,1850],{"class":1313},[1086,6695,1389],{"class":1313},[1086,6697,6698,6701,6703,6706],{"class":1088,"line":3589},[1086,6699,6700],{"class":1309},"  e",[1086,6702,1776],{"class":1313},[1086,6704,6705],{"class":1109},"preventDefault",[1086,6707,2642],{"class":1319},[1086,6709,6710,6712,6714,6716,6718,6720,6722,6724,6726],{"class":1088,"line":3595},[1086,6711,3535],{"class":1299},[1086,6713,1919],{"class":1319},[1086,6715,5199],{"class":1309},[1086,6717,1776],{"class":1313},[1086,6719,3320],{"class":1309},[1086,6721,1776],{"class":1313},[1086,6723,5208],{"class":1109},[1086,6725,5211],{"class":1319},[1086,6727,1314],{"class":1313},[1086,6729,6730,6733,6735,6738,6740,6742,6744,6746,6748,6750,6752,6754],{"class":1088,"line":3600},[1086,6731,6732],{"class":1309},"    chat",[1086,6734,1776],{"class":1313},[1086,6736,6737],{"class":1109},"sendMessage",[1086,6739,1310],{"class":1319},[1086,6741,1833],{"class":1313},[1086,6743,1687],{"class":1319},[1086,6745,1323],{"class":1313},[1086,6747,5343],{"class":1309},[1086,6749,1776],{"class":1313},[1086,6751,3320],{"class":1309},[1086,6753,1700],{"class":1313},[1086,6755,1448],{"class":1319},[1086,6757,6758,6761,6763,6765,6767],{"class":1088,"line":3606},[1086,6759,6760],{"class":1309},"    input",[1086,6762,1776],{"class":1313},[1086,6764,3320],{"class":1309},[1086,6766,2596],{"class":1313},[1086,6768,6769],{"class":1313}," ''\n",[1086,6771,6772],{"class":1088,"line":3626},[1086,6773,3592],{"class":1313},[1086,6775,6776],{"class":1088,"line":3654},[1086,6777,5405],{"class":1313},[1086,6779,6780],{"class":1088,"line":3666},[1086,6781,1378],{"emptyLinePlaceholder":21},[1086,6783,6784],{"class":1088,"line":3685},[1086,6785,6786],{"class":2664},"\u002F\u002F Auto-generate response for first message\n",[1086,6788,6789,6792,6794,6796,6798],{"class":1088,"line":3713},[1086,6790,6791],{"class":1109},"onMounted",[1086,6793,1310],{"class":1309},[1086,6795,1773],{"class":1313},[1086,6797,1793],{"class":1556},[1086,6799,1389],{"class":1313},[1086,6801,6802,6804,6806,6808,6810,6812,6814,6816,6818,6820,6822,6824,6826],{"class":1088,"line":3720},[1086,6803,3535],{"class":1299},[1086,6805,1919],{"class":1319},[1086,6807,6308],{"class":1309},[1086,6809,1776],{"class":1313},[1086,6811,3320],{"class":1309},[1086,6813,3846],{"class":1313},[1086,6815,1965],{"class":1309},[1086,6817,1776],{"class":1313},[1086,6819,3825],{"class":1309},[1086,6821,3347],{"class":1313},[1086,6823,3831],{"class":3567},[1086,6825,3545],{"class":1319},[1086,6827,1314],{"class":1313},[1086,6829,6830,6832,6834,6837],{"class":1088,"line":3725},[1086,6831,6732],{"class":1309},[1086,6833,1776],{"class":1313},[1086,6835,6836],{"class":1109},"regenerate",[1086,6838,2642],{"class":1319},[1086,6840,6841],{"class":1088,"line":3791},[1086,6842,3592],{"class":1313},[1086,6844,6845,6847],{"class":1088,"line":3796},[1086,6846,1445],{"class":1313},[1086,6848,1448],{"class":1309},[1086,6850,6851,6853,6855],{"class":1088,"line":3801},[1086,6852,1604],{"class":1313},[1086,6854,5117],{"class":1319},[1086,6856,1534],{"class":1313},[1086,6858,6859],{"class":1088,"line":3807},[1086,6860,1378],{"emptyLinePlaceholder":21},[1086,6862,6863,6865,6867],{"class":1088,"line":3836},[1086,6864,1528],{"class":1313},[1086,6866,1531],{"class":1319},[1086,6868,1534],{"class":1313},[1086,6870,6871,6873,6875,6877,6879,6881,6883,6885],{"class":1088,"line":3877},[1086,6872,1541],{"class":1313},[1086,6874,5432],{"class":1319},[1086,6876,5435],{"class":1556},[1086,6878,1560],{"class":1313},[1086,6880,1487],{"class":1313},[1086,6882,5442],{"class":1096},[1086,6884,1487],{"class":1313},[1086,6886,1534],{"class":1313},[1086,6888,6889,6891,6893,6895,6897],{"class":1088,"line":3906},[1086,6890,1550],{"class":1313},[1086,6892,1531],{"class":1319},[1086,6894,5455],{"class":1313},[1086,6896,5458],{"class":1556},[1086,6898,1534],{"class":1313},[1086,6900,6901,6903,6905,6907,6909,6911,6914,6916],{"class":1088,"line":3918},[1086,6902,1574],{"class":1313},[1086,6904,5467],{"class":1319},[1086,6906,5470],{"class":1556},[1086,6908,1560],{"class":1313},[1086,6910,1487],{"class":1313},[1086,6912,6913],{"class":1096},"min-h-dvh flex flex-col py-4 sm:py-6",[1086,6915,1487],{"class":1313},[1086,6917,1534],{"class":1313},[1086,6919,6920,6922],{"class":1088,"line":3934},[1086,6921,5486],{"class":1313},[1086,6923,6924],{"class":1319},"UChatMessages\n",[1086,6926,6927,6930,6932,6934,6937],{"class":1088,"line":3948},[1086,6928,6929],{"class":1556},"          :messages",[1086,6931,1560],{"class":1313},[1086,6933,1487],{"class":1313},[1086,6935,6936],{"class":1096},"chat.messages",[1086,6938,5543],{"class":1313},[1086,6940,6941,6943,6945,6947,6950],{"class":1088,"line":3955},[1086,6942,5549],{"class":1556},[1086,6944,1560],{"class":1313},[1086,6946,1487],{"class":1313},[1086,6948,6949],{"class":1096},"chat.status",[1086,6951,5543],{"class":1313},[1086,6953,6954],{"class":1088,"line":3960},[1086,6955,6956],{"class":1556},"          should-auto-scroll\n",[1086,6958,6959,6962,6964,6966,6969],{"class":1088,"line":3965},[1086,6960,6961],{"class":1556},"          class",[1086,6963,1560],{"class":1313},[1086,6965,1487],{"class":1313},[1086,6967,6968],{"class":1096},"flex-1",[1086,6970,5543],{"class":1313},[1086,6972,6973],{"class":1088,"line":3971},[1086,6974,5609],{"class":1313},[1086,6976,6977,6979,6981,6983,6985,6987,6989,6991,6994,6996,6998],{"class":1088,"line":3988},[1086,6978,5615],{"class":1313},[1086,6980,1531],{"class":1319},[1086,6982,5455],{"class":1313},[1086,6984,371],{"class":1556},[1086,6986,1560],{"class":1313},[1086,6988,1487],{"class":1313},[1086,6990,1833],{"class":1313},[1086,6992,6993],{"class":1309}," message ",[1086,6995,1445],{"class":1313},[1086,6997,1487],{"class":1313},[1086,6999,1534],{"class":1313},[1086,7001,7002,7005,7007,7010,7012,7014,7017,7019,7022,7025,7027,7029,7031,7033,7036,7039,7041,7044,7046,7048,7050,7052,7055,7057,7060,7062,7064,7066,7068,7070,7073,7076],{"class":1088,"line":4010},[1086,7003,7004],{"class":1313},"            \u003C",[1086,7006,1531],{"class":1319},[1086,7008,7009],{"class":1299}," v-for",[1086,7011,1560],{"class":1313},[1086,7013,1487],{"class":1313},[1086,7015,7016],{"class":1309},"(part",[1086,7018,1684],{"class":1313},[1086,7020,7021],{"class":1309}," index) ",[1086,7023,7024],{"class":1313},"in",[1086,7026,2591],{"class":1309},[1086,7028,1776],{"class":1313},[1086,7030,2171],{"class":1309},[1086,7032,1487],{"class":1313},[1086,7034,7035],{"class":1313}," :",[1086,7037,7038],{"class":1556},"key",[1086,7040,1560],{"class":1313},[1086,7042,7043],{"class":1313},"\"`${",[1086,7045,4472],{"class":1309},[1086,7047,1776],{"class":1313},[1086,7049,1987],{"class":1309},[1086,7051,1445],{"class":1313},[1086,7053,7054],{"class":1096},"-",[1086,7056,5389],{"class":1313},[1086,7058,7059],{"class":1309},"part",[1086,7061,1776],{"class":1313},[1086,7063,6535],{"class":1309},[1086,7065,1445],{"class":1313},[1086,7067,7054],{"class":1096},[1086,7069,5389],{"class":1313},[1086,7071,7072],{"class":1309},"index",[1086,7074,7075],{"class":1313},"}`\"",[1086,7077,1534],{"class":1313},[1086,7079,7080,7083],{"class":1088,"line":4028},[1086,7081,7082],{"class":1313},"              \u003C",[1086,7084,7085],{"class":1319},"UChatReasoning\n",[1086,7087,7088,7091,7093,7095,7098],{"class":1088,"line":4036},[1086,7089,7090],{"class":1556},"                v-if",[1086,7092,1560],{"class":1313},[1086,7094,1487],{"class":1313},[1086,7096,7097],{"class":1096},"isReasoningUIPart(part)",[1086,7099,5543],{"class":1313},[1086,7101,7102,7105,7107,7109,7112],{"class":1088,"line":4053},[1086,7103,7104],{"class":1556},"                :text",[1086,7106,1560],{"class":1313},[1086,7108,1487],{"class":1313},[1086,7110,7111],{"class":1096},"part.text",[1086,7113,5543],{"class":1313},[1086,7115,7116,7119,7121,7123,7126],{"class":1088,"line":4074},[1086,7117,7118],{"class":1556},"                :streaming",[1086,7120,1560],{"class":1313},[1086,7122,1487],{"class":1313},[1086,7124,7125],{"class":1096},"isPartStreaming(part)",[1086,7127,5543],{"class":1313},[1086,7129,7130],{"class":1088,"line":4084},[1086,7131,7132],{"class":1313},"              >\n",[1086,7134,7135,7138],{"class":1088,"line":4094},[1086,7136,7137],{"class":1313},"                \u003C",[1086,7139,7140],{"class":1319},"ChatComark\n",[1086,7142,7143,7146,7148,7150,7152],{"class":1088,"line":4104},[1086,7144,7145],{"class":1556},"                  :markdown",[1086,7147,1560],{"class":1313},[1086,7149,1487],{"class":1313},[1086,7151,7111],{"class":1096},[1086,7153,5543],{"class":1313},[1086,7155,7156,7159,7161,7163,7165],{"class":1088,"line":4121},[1086,7157,7158],{"class":1556},"                  :streaming",[1086,7160,1560],{"class":1313},[1086,7162,1487],{"class":1313},[1086,7164,7125],{"class":1096},[1086,7166,5543],{"class":1313},[1086,7168,7169],{"class":1088,"line":4132},[1086,7170,7171],{"class":1313},"                \u002F>\n",[1086,7173,7174,7177,7180],{"class":1088,"line":4138},[1086,7175,7176],{"class":1313},"              \u003C\u002F",[1086,7178,7179],{"class":1319},"UChatReasoning",[1086,7181,1534],{"class":1313},[1086,7183,7184],{"class":1088,"line":4144},[1086,7185,1378],{"emptyLinePlaceholder":21},[1086,7187,7188,7190,7192,7195,7197,7199,7202,7205,7207],{"class":1088,"line":4154},[1086,7189,7082],{"class":1313},[1086,7191,1531],{"class":1319},[1086,7193,7194],{"class":1299}," v-else-if",[1086,7196,1560],{"class":1313},[1086,7198,1487],{"class":1313},[1086,7200,7201],{"class":1109},"isTextUIPart",[1086,7203,7204],{"class":1309},"(part)",[1086,7206,1487],{"class":1313},[1086,7208,1534],{"class":1313},[1086,7210,7211,7213],{"class":1088,"line":4164},[1086,7212,7137],{"class":1313},[1086,7214,7140],{"class":1319},[1086,7216,7217,7220,7222,7224,7227],{"class":1088,"line":4178},[1086,7218,7219],{"class":1556},"                  v-if",[1086,7221,1560],{"class":1313},[1086,7223,1487],{"class":1313},[1086,7225,7226],{"class":1096},"message.role === 'assistant'",[1086,7228,5543],{"class":1313},[1086,7230,7231,7233,7235,7237,7239],{"class":1088,"line":4193},[1086,7232,7145],{"class":1556},[1086,7234,1560],{"class":1313},[1086,7236,1487],{"class":1313},[1086,7238,7111],{"class":1096},[1086,7240,5543],{"class":1313},[1086,7242,7243,7245,7247,7249,7251],{"class":1088,"line":4198},[1086,7244,7158],{"class":1556},[1086,7246,1560],{"class":1313},[1086,7248,1487],{"class":1313},[1086,7250,7125],{"class":1096},[1086,7252,5543],{"class":1313},[1086,7254,7255],{"class":1088,"line":4203},[1086,7256,7171],{"class":1313},[1086,7258,7259,7261,7263,7265,7267,7269,7272,7274,7276,7278,7280,7283,7285],{"class":1088,"line":4213},[1086,7260,7137],{"class":1313},[1086,7262,976],{"class":1319},[1086,7264,7194],{"class":1556},[1086,7266,1560],{"class":1313},[1086,7268,1487],{"class":1313},[1086,7270,7271],{"class":1096},"message.role === 'user'",[1086,7273,1487],{"class":1313},[1086,7275,5470],{"class":1556},[1086,7277,1560],{"class":1313},[1086,7279,1487],{"class":1313},[1086,7281,7282],{"class":1096},"whitespace-pre-wrap",[1086,7284,1487],{"class":1313},[1086,7286,1534],{"class":1313},[1086,7288,7289],{"class":1088,"line":4229},[1086,7290,7291],{"class":1309},"                  {{ part.text }}\n",[1086,7293,7294,7297,7299],{"class":1088,"line":4244},[1086,7295,7296],{"class":1313},"                \u003C\u002F",[1086,7298,976],{"class":1319},[1086,7300,1534],{"class":1313},[1086,7302,7303,7305,7307],{"class":1088,"line":4250},[1086,7304,7176],{"class":1313},[1086,7306,1531],{"class":1319},[1086,7308,1534],{"class":1313},[1086,7310,7311,7314,7316],{"class":1088,"line":4256},[1086,7312,7313],{"class":1313},"            \u003C\u002F",[1086,7315,1531],{"class":1319},[1086,7317,1534],{"class":1313},[1086,7319,7320,7323,7325],{"class":1088,"line":4264},[1086,7321,7322],{"class":1313},"          \u003C\u002F",[1086,7324,1531],{"class":1319},[1086,7326,1534],{"class":1313},[1086,7328,7329,7331,7333],{"class":1088,"line":4269},[1086,7330,5512],{"class":1313},[1086,7332,5088],{"class":1319},[1086,7334,1534],{"class":1313},[1086,7336,7337],{"class":1088,"line":4275},[1086,7338,1378],{"emptyLinePlaceholder":21},[1086,7340,7341,7343],{"class":1088,"line":4295},[1086,7342,5486],{"class":1313},[1086,7344,5528],{"class":1319},[1086,7346,7347,7349,7351,7353,7355],{"class":1088,"line":4310},[1086,7348,5534],{"class":1556},[1086,7350,1560],{"class":1313},[1086,7352,1487],{"class":1313},[1086,7354,5199],{"class":1096},[1086,7356,5543],{"class":1313},[1086,7358,7359,7362,7364,7366,7369],{"class":1088,"line":4327},[1086,7360,7361],{"class":1556},"          :error",[1086,7363,1560],{"class":1313},[1086,7365,1487],{"class":1313},[1086,7367,7368],{"class":1096},"chat.error",[1086,7370,5543],{"class":1313},[1086,7372,7373,7375,7377,7379,7381],{"class":1088,"line":4350},[1086,7374,5564],{"class":1556},[1086,7376,1560],{"class":1313},[1086,7378,1487],{"class":1313},[1086,7380,5571],{"class":1096},[1086,7382,5543],{"class":1313},[1086,7384,7385,7387,7389,7391,7394],{"class":1088,"line":4361},[1086,7386,6961],{"class":1556},[1086,7388,1560],{"class":1313},[1086,7390,1487],{"class":1313},[1086,7392,7393],{"class":1096},"sticky bottom-0",[1086,7395,5543],{"class":1313},[1086,7397,7398,7400,7402,7404,7407],{"class":1088,"line":4369},[1086,7399,5594],{"class":1556},[1086,7401,1560],{"class":1313},[1086,7403,1487],{"class":1313},[1086,7405,7406],{"class":1096},"handleSubmit",[1086,7408,5543],{"class":1313},[1086,7410,7411],{"class":1088,"line":4375},[1086,7412,5609],{"class":1313},[1086,7414,7415,7417],{"class":1088,"line":4380},[1086,7416,5615],{"class":1313},[1086,7418,7419],{"class":1319},"UChatPromptSubmit\n",[1086,7421,7422,7425,7427,7429,7431],{"class":1088,"line":4403},[1086,7423,7424],{"class":1556},"            :status",[1086,7426,1560],{"class":1313},[1086,7428,1487],{"class":1313},[1086,7430,6949],{"class":1096},[1086,7432,5543],{"class":1313},[1086,7434,7435,7438,7440,7442,7444],{"class":1088,"line":4409},[1086,7436,7437],{"class":1556},"            color",[1086,7439,1560],{"class":1313},[1086,7441,1487],{"class":1313},[1086,7443,5628],{"class":1096},[1086,7445,5543],{"class":1313},[1086,7447,7448,7451,7453,7455,7458],{"class":1088,"line":4429},[1086,7449,7450],{"class":1556},"            @stop",[1086,7452,1560],{"class":1313},[1086,7454,1487],{"class":1313},[1086,7456,7457],{"class":1096},"chat.stop()",[1086,7459,5543],{"class":1313},[1086,7461,7462,7465,7467,7469,7472],{"class":1088,"line":4435},[1086,7463,7464],{"class":1556},"            @reload",[1086,7466,1560],{"class":1313},[1086,7468,1487],{"class":1313},[1086,7470,7471],{"class":1096},"chat.regenerate()",[1086,7473,5543],{"class":1313},[1086,7475,7476],{"class":1088,"line":4481},[1086,7477,7478],{"class":1313},"          \u002F>\n",[1086,7480,7481,7483,7485],{"class":1088,"line":4497},[1086,7482,5512],{"class":1313},[1086,7484,5082],{"class":1319},[1086,7486,1534],{"class":1313},[1086,7488,7489,7491,7493],{"class":1088,"line":4530},[1086,7490,5646],{"class":1313},[1086,7492,5467],{"class":1319},[1086,7494,1534],{"class":1313},[1086,7496,7497,7499,7501],{"class":1088,"line":4544},[1086,7498,1585],{"class":1313},[1086,7500,1531],{"class":1319},[1086,7502,1534],{"class":1313},[1086,7504,7505,7507,7509],{"class":1088,"line":4552},[1086,7506,1595],{"class":1313},[1086,7508,5432],{"class":1319},[1086,7510,1534],{"class":1313},[1086,7512,7513,7515,7517],{"class":1088,"line":4558},[1086,7514,1604],{"class":1313},[1086,7516,1531],{"class":1319},[1086,7518,1534],{"class":1313},[976,7520,7521],{},"Here's a breakdown of the key parts:",[976,7523,7524],{},[994,7525,7526],{},"The Chat Class",[976,7528,4631,7529,7534,7535,7537],{},[1030,7530,7532],{"href":6088,"rel":7531},[1034],[1036,7533,259],{}," class from ",[1036,7536,6180],{}," manages the entire conversation state. It handles:",[988,7539,7540,7545,7560,7566,7571],{},[991,7541,7542,7543],{},"Message history with ",[1036,7544,6936],{},[991,7546,7547,7548,1919,7550,2838,7553,2838,7556,2838,7558,1850],{},"Connection status with ",[1036,7549,6949],{},[1036,7551,7552],{},"ready",[1036,7554,7555],{},"submitted",[1036,7557,5703],{},[1036,7559,6584],{},[991,7561,7562,7563],{},"Sending messages with ",[1036,7564,7565],{},"chat.sendMessage()",[991,7567,7568,7569],{},"Stopping generation with ",[1036,7570,7457],{},[991,7572,7573,7574],{},"Regenerating responses with ",[1036,7575,7471],{},[976,7577,4631,7578,7581,7582,7587,7588,7590],{},[1036,7579,7580],{},"onData"," callback receives ",[1030,7583,7586],{"href":7584,"rel":7585},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-ui\u002Fstreaming-data",[1034],"custom data events"," from the server (like ",[1036,7589,4320],{},"), allowing you to react to server-side events during streaming.",[976,7592,7593],{},[994,7594,7595],{},"UChatMessages Component",[976,7597,4631,7598,7602],{},[1030,7599,7600],{"href":271},[1036,7601,5088],{}," component is purpose-built for AI chatbots with:",[988,7604,7605,7608,7611,7614],{},[991,7606,7607],{},"Auto-scroll to bottom on load",[991,7609,7610],{},"Continuous scrolling as messages stream in",[991,7612,7613],{},"A loading indicator while the assistant processes",[991,7615,7616],{},"An \"Auto scroll\" button when scrolled up",[976,7618,7619],{},[994,7620,7621],{},"Rendering Message Parts",[976,7623,7624,7625,7627,7628,1039,7630,7633,7634,7636,7637,7641,7642,7645,7646,7648],{},"We iterate over message ",[1036,7626,2171],{}," using AI SDK helpers like ",[1036,7629,7201],{},[1036,7631,7632],{},"isReasoningUIPart",", rendering assistant text with the ",[1036,7635,5941],{}," component we created earlier and reasoning content with ",[1030,7638,7639],{"href":291},[1036,7640,7179],{},". The ",[1036,7643,7644],{},"isPartStreaming"," utility from ",[1036,7647,6201],{}," detects if a part is currently being streamed.",[976,7650,7651],{},[994,7652,7653],{},"UChatPromptSubmit Component",[976,7655,4631,7656,7660],{},[1030,7657,7658],{"href":286},[1036,7659,5618],{}," component adapts based on the chat status:",[988,7662,7663,7666,7669],{},[991,7664,7665],{},"Shows a send button when ready",[991,7667,7668],{},"Shows a stop button while streaming",[991,7670,7671],{},"Shows a reload button after an error",[980,7673,7675],{"id":7674},"adding-chat-history","Adding chat history",[976,7677,7678],{},"This section adds a dropdown menu to list previous chats and navigate between them.",[1114,7680,7682],{"id":7681},"listing-chats-api","Listing chats API",[976,7684,7685],{},"First, create an endpoint to fetch all chats:",[1286,7687,7688],{},[1077,7689,7692],{"className":1290,"code":7690,"filename":7691,"language":1292,"meta":1082,"style":1082},"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",[1036,7693,7694,7712,7734,7753,7757,7775,7800,7827,7833],{"__ignoreMap":1082},[1086,7695,7696,7698,7700,7702,7704,7706,7708,7710],{"class":1088,"line":1089},[1086,7697,1675],{"class":1299},[1086,7699,1678],{"class":1313},[1086,7701,2471],{"class":1309},[1086,7703,1700],{"class":1313},[1086,7705,1703],{"class":1299},[1086,7707,1400],{"class":1313},[1086,7709,1114],{"class":1096},[1086,7711,1364],{"class":1313},[1086,7713,7714,7716,7718,7720,7722,7724,7726,7728,7730,7732],{"class":1088,"line":1106},[1086,7715,1675],{"class":1299},[1086,7717,1678],{"class":1313},[1086,7719,2414],{"class":1309},[1086,7721,1684],{"class":1313},[1086,7723,2522],{"class":1309},[1086,7725,1700],{"class":1313},[1086,7727,1703],{"class":1299},[1086,7729,1400],{"class":1313},[1086,7731,2531],{"class":1096},[1086,7733,1364],{"class":1313},[1086,7735,7736,7738,7740,7743,7745,7747,7749,7751],{"class":1088,"line":1329},[1086,7737,1675],{"class":1299},[1086,7739,1678],{"class":1313},[1086,7741,7742],{"class":1309}," desc",[1086,7744,1700],{"class":1313},[1086,7746,1703],{"class":1299},[1086,7748,1400],{"class":1313},[1086,7750,1728],{"class":1096},[1086,7752,1364],{"class":1313},[1086,7754,7755],{"class":1088,"line":1344},[1086,7756,1378],{"emptyLinePlaceholder":21},[1086,7758,7759,7761,7763,7765,7767,7769,7771,7773],{"class":1088,"line":1356},[1086,7760,1300],{"class":1299},[1086,7762,1303],{"class":1299},[1086,7764,2471],{"class":1109},[1086,7766,1310],{"class":1309},[1086,7768,2570],{"class":1556},[1086,7770,4967],{"class":1313},[1086,7772,1793],{"class":1556},[1086,7774,1389],{"class":1313},[1086,7776,7777,7779,7781,7783,7785,7787,7789,7791,7793,7796,7798],{"class":1088,"line":1367},[1086,7778,2814],{"class":1299},[1086,7780,2599],{"class":1299},[1086,7782,2414],{"class":1309},[1086,7784,1776],{"class":1313},[1086,7786,3460],{"class":1309},[1086,7788,1776],{"class":1313},[1086,7790,1755],{"class":1309},[1086,7792,1776],{"class":1313},[1086,7794,7795],{"class":1109},"findMany",[1086,7797,1310],{"class":1319},[1086,7799,1314],{"class":1313},[1086,7801,7802,7805,7807,7809,7811,7813,7815,7817,7819,7821,7823,7825],{"class":1088,"line":1375},[1086,7803,7804],{"class":1109},"    orderBy",[1086,7806,1323],{"class":1313},[1086,7808,4967],{"class":1313},[1086,7810,1793],{"class":1556},[1086,7812,7742],{"class":1109},[1086,7814,1310],{"class":1319},[1086,7816,2691],{"class":1309},[1086,7818,1776],{"class":1313},[1086,7820,1755],{"class":1309},[1086,7822,1776],{"class":1313},[1086,7824,4984],{"class":1309},[1086,7826,1448],{"class":1319},[1086,7828,7829,7831],{"class":1088,"line":1381},[1086,7830,2387],{"class":1313},[1086,7832,1448],{"class":1319},[1086,7834,7835,7837],{"class":1088,"line":1392},[1086,7836,1445],{"class":1313},[1086,7838,1448],{"class":1309},[1114,7840,7842],{"id":7841},"building-the-chats-history-dropdown","Building the chats history dropdown",[976,7844,7845,7846,7851,7852,7857,7858,7851,7865,7867],{},"The component uses ",[1030,7847,7848],{"href":457},[1036,7849,7850],{},"UDropdownMenu"," with a ",[1030,7853,7854],{"href":230},[1036,7855,7856],{},"UButton"," as trigger. Use ",[1030,7859,7862],{"href":7860,"rel":7861},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-fetch",[1034],[1036,7863,7864],{},"useFetch",[1036,7866,7038],{}," to fetch and cache the chat list:",[1286,7869,7870],{},[1077,7871,7874],{"className":1518,"code":7872,"filename":7873,"language":34,"meta":1082,"style":1082},"\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",[1036,7875,7876,7896,7908,7912,7944,7959,7973,7979,7983,8003,8008,8024,8040,8060,8084,8088,8113,8138,8160,8186,8192,8196,8204,8208,8216,8247,8254,8271,8285,8299,8311,8325,8330,8338],{"__ignoreMap":1082},[1086,7877,7878,7880,7882,7884,7886,7888,7890,7892,7894],{"class":1088,"line":1089},[1086,7879,1528],{"class":1313},[1086,7881,5117],{"class":1319},[1086,7883,5120],{"class":1556},[1086,7885,5123],{"class":1556},[1086,7887,1560],{"class":1313},[1086,7889,1487],{"class":1313},[1086,7891,1292],{"class":1096},[1086,7893,1487],{"class":1313},[1086,7895,1534],{"class":1313},[1086,7897,7898,7900,7902,7904,7906],{"class":1088,"line":1106},[1086,7899,3035],{"class":1556},[1086,7901,6214],{"class":1309},[1086,7903,1560],{"class":1313},[1086,7905,6219],{"class":1109},[1086,7907,2642],{"class":1309},[1086,7909,7910],{"class":1088,"line":1329},[1086,7911,1378],{"emptyLinePlaceholder":21},[1086,7913,7914,7916,7918,7920,7922,7924,7926,7928,7930,7932,7934,7936,7938,7940,7942],{"class":1088,"line":1344},[1086,7915,3035],{"class":1556},[1086,7917,1678],{"class":1313},[1086,7919,6253],{"class":1319},[1086,7921,1323],{"class":1313},[1086,7923,1744],{"class":1309},[1086,7925,1445],{"class":1313},[1086,7927,2596],{"class":1313},[1086,7929,2599],{"class":1299},[1086,7931,6267],{"class":1109},[1086,7933,1310],{"class":1309},[1086,7935,1338],{"class":1313},[1086,7937,5260],{"class":1096},[1086,7939,1338],{"class":1313},[1086,7941,1684],{"class":1313},[1086,7943,1389],{"class":1313},[1086,7945,7946,7949,7951,7953,7955,7957],{"class":1088,"line":1356},[1086,7947,7948],{"class":1319},"  key",[1086,7950,1323],{"class":1313},[1086,7952,1400],{"class":1313},[1086,7954,1755],{"class":1096},[1086,7956,1338],{"class":1313},[1086,7958,1341],{"class":1313},[1086,7960,7961,7964,7966,7968,7970],{"class":1088,"line":1367},[1086,7962,7963],{"class":1109},"  default",[1086,7965,1323],{"class":1313},[1086,7967,4967],{"class":1313},[1086,7969,1793],{"class":1556},[1086,7971,7972],{"class":1309}," []\n",[1086,7974,7975,7977],{"class":1088,"line":1375},[1086,7976,1445],{"class":1313},[1086,7978,1448],{"class":1309},[1086,7980,7981],{"class":1088,"line":1381},[1086,7982,1378],{"emptyLinePlaceholder":21},[1086,7984,7985,7987,7990,7992,7995,7997,7999,8001],{"class":1088,"line":1392},[1086,7986,3035],{"class":1556},[1086,7988,7989],{"class":1309}," items ",[1086,7991,1560],{"class":1313},[1086,7993,7994],{"class":1109}," computed",[1086,7996,1310],{"class":1309},[1086,7998,1773],{"class":1313},[1086,8000,1793],{"class":1556},[1086,8002,1326],{"class":1309},[1086,8004,8005],{"class":1088,"line":1408},[1086,8006,8007],{"class":1313},"  {\n",[1086,8009,8010,8013,8015,8017,8020,8022],{"class":1088,"line":1414},[1086,8011,8012],{"class":1319},"    label",[1086,8014,1323],{"class":1313},[1086,8016,1400],{"class":1313},[1086,8018,8019],{"class":1096},"New chat",[1086,8021,1338],{"class":1313},[1086,8023,1341],{"class":1313},[1086,8025,8026,8029,8031,8033,8036,8038],{"class":1088,"line":1419},[1086,8027,8028],{"class":1319},"    to",[1086,8030,1323],{"class":1313},[1086,8032,1400],{"class":1313},[1086,8034,8035],{"class":1096},"\u002F",[1086,8037,1338],{"class":1313},[1086,8039,1341],{"class":1313},[1086,8041,8042,8045,8047,8049,8056,8058],{"class":1088,"line":1442},[1086,8043,8044],{"class":1319},"    icon",[1086,8046,1323],{"class":1313},[1086,8048,1400],{"class":1313},[1086,8050,8051,8055],{"class":1096},[8052,8053],"i",{"class":8054},"shiki-icon-highlight sRy2g","i-lucide-plus-square",[1086,8057,1338],{"class":1313},[1086,8059,1341],{"class":1313},[1086,8061,8062,8065,8067,8070,8072,8075,8078,8080,8082],{"class":1088,"line":1947},[1086,8063,8064],{"class":1319},"    active",[1086,8066,1323],{"class":1313},[1086,8068,8069],{"class":1309}," route",[1086,8071,1776],{"class":1313},[1086,8073,8074],{"class":1309},"name ",[1086,8076,8077],{"class":1313},"===",[1086,8079,1400],{"class":1313},[1086,8081,7072],{"class":1096},[1086,8083,1364],{"class":1313},[1086,8085,8086],{"class":1088,"line":1974},[1086,8087,1411],{"class":1313},[1086,8089,8090,8093,8095,8097,8099,8101,8103,8105,8107,8109,8111],{"class":1088,"line":2020},[1086,8091,8092],{"class":1313},"  ...",[1086,8094,1755],{"class":1309},[1086,8096,1776],{"class":1313},[1086,8098,3320],{"class":1309},[1086,8100,1776],{"class":1313},[1086,8102,4467],{"class":1109},[1086,8104,1310],{"class":1309},[1086,8106,262],{"class":1910},[1086,8108,1793],{"class":1556},[1086,8110,1919],{"class":1309},[1086,8112,1314],{"class":1313},[1086,8114,8115,8117,8119,8121,8123,8126,8129,8131,8134,8136],{"class":1088,"line":2087},[1086,8116,8012],{"class":1319},[1086,8118,1323],{"class":1313},[1086,8120,2764],{"class":1309},[1086,8122,1776],{"class":1313},[1086,8124,8125],{"class":1309},"title ",[1086,8127,8128],{"class":1313},"||",[1086,8130,1400],{"class":1313},[1086,8132,8133],{"class":1096},"Untitled",[1086,8135,1338],{"class":1313},[1086,8137,1341],{"class":1313},[1086,8139,8140,8142,8144,8146,8148,8150,8152,8154,8156,8158],{"class":1088,"line":2157},[1086,8141,8028],{"class":1319},[1086,8143,1323],{"class":1313},[1086,8145,3674],{"class":1313},[1086,8147,5386],{"class":1096},[1086,8149,5389],{"class":1313},[1086,8151,262],{"class":1309},[1086,8153,1776],{"class":1313},[1086,8155,1987],{"class":1309},[1086,8157,5398],{"class":1313},[1086,8159,1341],{"class":1313},[1086,8161,8162,8164,8166,8168,8170,8172,8174,8177,8179,8181,8183],{"class":1088,"line":2197},[1086,8163,8064],{"class":1319},[1086,8165,1323],{"class":1313},[1086,8167,8069],{"class":1309},[1086,8169,1776],{"class":1313},[1086,8171,6284],{"class":1309},[1086,8173,1776],{"class":1313},[1086,8175,8176],{"class":1309},"id ",[1086,8178,8077],{"class":1313},[1086,8180,2764],{"class":1309},[1086,8182,1776],{"class":1313},[1086,8184,8185],{"class":1309},"id\n",[1086,8187,8188,8190],{"class":1088,"line":2248},[1086,8189,2387],{"class":1313},[1086,8191,1940],{"class":1309},[1086,8193,8194],{"class":1088,"line":2261},[1086,8195,2294],{"class":1309},[1086,8197,8198,8200,8202],{"class":1088,"line":2291},[1086,8199,1604],{"class":1313},[1086,8201,5117],{"class":1319},[1086,8203,1534],{"class":1313},[1086,8205,8206],{"class":1088,"line":2297},[1086,8207,1378],{"emptyLinePlaceholder":21},[1086,8209,8210,8212,8214],{"class":1088,"line":2302},[1086,8211,1528],{"class":1313},[1086,8213,1531],{"class":1319},[1086,8215,1534],{"class":1313},[1086,8217,8218,8220,8222,8225,8227,8229,8232,8234,8236,8238,8240,8243,8245],{"class":1088,"line":2334},[1086,8219,1541],{"class":1313},[1086,8221,7850],{"class":1319},[1086,8223,8224],{"class":1556}," :items",[1086,8226,1560],{"class":1313},[1086,8228,1487],{"class":1313},[1086,8230,8231],{"class":1096},"items",[1086,8233,1487],{"class":1313},[1086,8235,5470],{"class":1556},[1086,8237,1560],{"class":1313},[1086,8239,1487],{"class":1313},[1086,8241,8242],{"class":1096},"m-2",[1086,8244,1487],{"class":1313},[1086,8246,1534],{"class":1313},[1086,8248,8249,8251],{"class":1088,"line":2350},[1086,8250,1550],{"class":1313},[1086,8252,8253],{"class":1319},"UButton\n",[1086,8255,8256,8259,8261,8263,8269],{"class":1088,"line":2368},[1086,8257,8258],{"class":1556},"      icon",[1086,8260,1560],{"class":1313},[1086,8262,1487],{"class":1313},[1086,8264,8265,8268],{"class":1096},[8052,8266],{"class":8267},"shiki-icon-highlight sdATh","i-lucide-messages-square",[1086,8270,5543],{"class":1313},[1086,8272,8273,8276,8278,8280,8283],{"class":1088,"line":2384},[1086,8274,8275],{"class":1556},"      variant",[1086,8277,1560],{"class":1313},[1086,8279,1487],{"class":1313},[1086,8281,8282],{"class":1096},"ghost",[1086,8284,5543],{"class":1313},[1086,8286,8287,8290,8292,8294,8297],{"class":1088,"line":2392},[1086,8288,8289],{"class":1556},"      label",[1086,8291,1560],{"class":1313},[1086,8293,1487],{"class":1313},[1086,8295,8296],{"class":1096},"Chats History",[1086,8298,5543],{"class":1313},[1086,8300,8301,8303,8305,8307,8309],{"class":1088,"line":3372},[1086,8302,6642],{"class":1556},[1086,8304,1560],{"class":1313},[1086,8306,1487],{"class":1313},[1086,8308,5628],{"class":1096},[1086,8310,5543],{"class":1313},[1086,8312,8313,8316,8318,8320,8323],{"class":1088,"line":3389},[1086,8314,8315],{"class":1556},"      class",[1086,8317,1560],{"class":1313},[1086,8319,1487],{"class":1313},[1086,8321,8322],{"class":1096},"w-fit",[1086,8324,5543],{"class":1313},[1086,8326,8327],{"class":1088,"line":3421},[1086,8328,8329],{"class":1313},"    \u002F>\n",[1086,8331,8332,8334,8336],{"class":1088,"line":3434},[1086,8333,1595],{"class":1313},[1086,8335,7850],{"class":1319},[1086,8337,1534],{"class":1313},[1086,8339,8340,8342,8344],{"class":1088,"line":3439},[1086,8341,1604],{"class":1313},[1086,8343,1531],{"class":1319},[1086,8345,1534],{"class":1313},[980,8347,8349],{"id":8348},"integrating-history-in-the-home-page","Integrating history in the home page",[1286,8351,8352],{},[1663,8353,8354],{},[1077,8355,8358],{"className":1518,"code":8356,"filename":5107,"highlights":8357,"language":34,"meta":1082,"style":1082},"\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",[2384,2392,3372],[1036,8359,8360,8380,8396,8412,8416,8428,8450,8454,8466,8470,8474,8498,8512,8520,8528,8542,8578,8582,8586,8592,8596,8600,8622,8626,8634,8638,8646,8664,8678,8688,8697,8709,8727,8745,8749,8757,8761,8767,8779,8791,8803,8815,8827,8831,8849,8857,8865,8873,8881],{"__ignoreMap":1082},[1086,8361,8362,8364,8366,8368,8370,8372,8374,8376,8378],{"class":1088,"line":1089},[1086,8363,1528],{"class":1313},[1086,8365,5117],{"class":1319},[1086,8367,5120],{"class":1556},[1086,8369,5123],{"class":1556},[1086,8371,1560],{"class":1313},[1086,8373,1487],{"class":1313},[1086,8375,1292],{"class":1096},[1086,8377,1487],{"class":1313},[1086,8379,1534],{"class":1313},[1086,8381,8382,8384,8386,8388,8390,8392,8394],{"class":1088,"line":1106},[1086,8383,3035],{"class":1556},[1086,8385,5140],{"class":1309},[1086,8387,1560],{"class":1313},[1086,8389,5145],{"class":1109},[1086,8391,1310],{"class":1309},[1086,8393,5150],{"class":1313},[1086,8395,1448],{"class":1309},[1086,8397,8398,8400,8402,8404,8406,8408,8410],{"class":1088,"line":1329},[1086,8399,3035],{"class":1556},[1086,8401,5159],{"class":1309},[1086,8403,1560],{"class":1313},[1086,8405,5145],{"class":1109},[1086,8407,1310],{"class":1309},[1086,8409,5168],{"class":4172},[1086,8411,1448],{"class":1309},[1086,8413,8414],{"class":1088,"line":1344},[1086,8415,1378],{"emptyLinePlaceholder":21},[1086,8417,8418,8420,8422,8424,8426],{"class":1088,"line":1356},[1086,8419,2570],{"class":1556},[1086,8421,5181],{"class":1556},[1086,8423,5184],{"class":1109},[1086,8425,1773],{"class":1313},[1086,8427,1389],{"class":1313},[1086,8429,8430,8432,8434,8436,8438,8440,8442,8444,8446,8448],{"class":1088,"line":1367},[1086,8431,3535],{"class":1299},[1086,8433,1919],{"class":1319},[1086,8435,3540],{"class":1313},[1086,8437,5199],{"class":1309},[1086,8439,1776],{"class":1313},[1086,8441,3320],{"class":1309},[1086,8443,1776],{"class":1313},[1086,8445,5208],{"class":1109},[1086,8447,5211],{"class":1319},[1086,8449,5214],{"class":1299},[1086,8451,8452],{"class":1088,"line":1375},[1086,8453,1378],{"emptyLinePlaceholder":21},[1086,8455,8456,8458,8460,8462,8464],{"class":1088,"line":1381},[1086,8457,5223],{"class":1309},[1086,8459,1776],{"class":1313},[1086,8461,3320],{"class":1309},[1086,8463,2596],{"class":1313},[1086,8465,4358],{"class":4172},[1086,8467,8468],{"class":1088,"line":1392},[1086,8469,1378],{"emptyLinePlaceholder":21},[1086,8471,8472],{"class":1088,"line":1408},[1086,8473,5240],{"class":2664},[1086,8475,8476,8478,8480,8482,8484,8486,8488,8490,8492,8494,8496],{"class":1088,"line":1414},[1086,8477,2586],{"class":1556},[1086,8479,2764],{"class":1309},[1086,8481,2596],{"class":1313},[1086,8483,2599],{"class":1299},[1086,8485,5253],{"class":1109},[1086,8487,1310],{"class":1319},[1086,8489,1338],{"class":1313},[1086,8491,5260],{"class":1096},[1086,8493,1338],{"class":1313},[1086,8495,1684],{"class":1313},[1086,8497,1389],{"class":1313},[1086,8499,8500,8502,8504,8506,8508,8510],{"class":1088,"line":1419},[1086,8501,5271],{"class":1319},[1086,8503,1323],{"class":1313},[1086,8505,1400],{"class":1313},[1086,8507,5278],{"class":1096},[1086,8509,1338],{"class":1313},[1086,8511,1341],{"class":1313},[1086,8513,8514,8516,8518],{"class":1088,"line":1442},[1086,8515,5287],{"class":1319},[1086,8517,1323],{"class":1313},[1086,8519,1389],{"class":1313},[1086,8521,8522,8524,8526],{"class":1088,"line":1947},[1086,8523,3360],{"class":1319},[1086,8525,1323],{"class":1313},[1086,8527,1389],{"class":1313},[1086,8529,8530,8532,8534,8536,8538,8540],{"class":1088,"line":1974},[1086,8531,4500],{"class":1319},[1086,8533,1323],{"class":1313},[1086,8535,1400],{"class":1313},[1086,8537,2119],{"class":1096},[1086,8539,1338],{"class":1313},[1086,8541,1341],{"class":1313},[1086,8543,8544,8546,8548,8550,8552,8554,8556,8558,8560,8562,8564,8566,8568,8570,8572,8574,8576],{"class":1088,"line":2020},[1086,8545,4533],{"class":1319},[1086,8547,1323],{"class":1313},[1086,8549,1427],{"class":1319},[1086,8551,1833],{"class":1313},[1086,8553,2493],{"class":1319},[1086,8555,1323],{"class":1313},[1086,8557,1400],{"class":1313},[1086,8559,5332],{"class":1096},[1086,8561,1338],{"class":1313},[1086,8563,1684],{"class":1313},[1086,8565,1687],{"class":1319},[1086,8567,1323],{"class":1313},[1086,8569,5343],{"class":1309},[1086,8571,1776],{"class":1313},[1086,8573,3320],{"class":1309},[1086,8575,1700],{"class":1313},[1086,8577,3161],{"class":1319},[1086,8579,8580],{"class":1088,"line":2087},[1086,8581,4372],{"class":1313},[1086,8583,8584],{"class":1088,"line":2157},[1086,8585,4555],{"class":1313},[1086,8587,8588,8590],{"class":1088,"line":2197},[1086,8589,2387],{"class":1313},[1086,8591,1448],{"class":1319},[1086,8593,8594],{"class":1088,"line":2248},[1086,8595,1378],{"emptyLinePlaceholder":21},[1086,8597,8598],{"class":1088,"line":2261},[1086,8599,5374],{"class":2664},[1086,8601,8602,8604,8606,8608,8610,8612,8614,8616,8618,8620],{"class":1088,"line":2291},[1086,8603,5379],{"class":1109},[1086,8605,1310],{"class":1319},[1086,8607,3680],{"class":1313},[1086,8609,5386],{"class":1096},[1086,8611,5389],{"class":1313},[1086,8613,262],{"class":1309},[1086,8615,1776],{"class":1313},[1086,8617,1987],{"class":1309},[1086,8619,5398],{"class":1313},[1086,8621,1448],{"class":1319},[1086,8623,8624],{"class":1088,"line":2297},[1086,8625,5405],{"class":1313},[1086,8627,8628,8630,8632],{"class":1088,"line":2302},[1086,8629,1604],{"class":1313},[1086,8631,5117],{"class":1319},[1086,8633,1534],{"class":1313},[1086,8635,8636],{"class":1088,"line":2334},[1086,8637,1378],{"emptyLinePlaceholder":21},[1086,8639,8640,8642,8644],{"class":1088,"line":2350},[1086,8641,1528],{"class":1313},[1086,8643,1531],{"class":1319},[1086,8645,1534],{"class":1313},[1086,8647,8648,8650,8652,8654,8656,8658,8660,8662],{"class":1088,"line":2368},[1086,8649,1541],{"class":1313},[1086,8651,5432],{"class":1319},[1086,8653,5435],{"class":1556},[1086,8655,1560],{"class":1313},[1086,8657,1487],{"class":1313},[1086,8659,5442],{"class":1096},[1086,8661,1487],{"class":1313},[1086,8663,1534],{"class":1313},[1086,8665,8667,8669,8671,8673,8676],{"class":8666,"line":2384},[1088,1538],[1086,8668,1550],{"class":1313},[1086,8670,1531],{"class":1319},[1086,8672,5455],{"class":1313},[1086,8674,8675],{"class":1556},"header",[1086,8677,1534],{"class":1313},[1086,8679,8681,8683,8686],{"class":8680,"line":2392},[1088,1538],[1086,8682,1574],{"class":1313},[1086,8684,8685],{"class":1319},"ChatsHistory",[1086,8687,1580],{"class":1313},[1086,8689,8691,8693,8695],{"class":8690,"line":3372},[1088,1538],[1086,8692,1585],{"class":1313},[1086,8694,1531],{"class":1319},[1086,8696,1534],{"class":1313},[1086,8698,8699,8701,8703,8705,8707],{"class":1088,"line":3389},[1086,8700,1550],{"class":1313},[1086,8702,1531],{"class":1319},[1086,8704,5455],{"class":1313},[1086,8706,5458],{"class":1556},[1086,8708,1534],{"class":1313},[1086,8710,8711,8713,8715,8717,8719,8721,8723,8725],{"class":1088,"line":3421},[1086,8712,1574],{"class":1313},[1086,8714,5467],{"class":1319},[1086,8716,5470],{"class":1556},[1086,8718,1560],{"class":1313},[1086,8720,1487],{"class":1313},[1086,8722,5477],{"class":1096},[1086,8724,1487],{"class":1313},[1086,8726,1534],{"class":1313},[1086,8728,8729,8731,8733,8735,8737,8739,8741,8743],{"class":1088,"line":3434},[1086,8730,5486],{"class":1313},[1086,8732,5489],{"class":1319},[1086,8734,5470],{"class":1556},[1086,8736,1560],{"class":1313},[1086,8738,1487],{"class":1313},[1086,8740,5498],{"class":1096},[1086,8742,1487],{"class":1313},[1086,8744,1534],{"class":1313},[1086,8746,8747],{"class":1088,"line":3439},[1086,8748,5507],{"class":1309},[1086,8750,8751,8753,8755],{"class":1088,"line":3445},[1086,8752,5512],{"class":1313},[1086,8754,5489],{"class":1319},[1086,8756,1534],{"class":1313},[1086,8758,8759],{"class":1088,"line":3476},[1086,8760,1378],{"emptyLinePlaceholder":21},[1086,8762,8763,8765],{"class":1088,"line":3520},[1086,8764,5486],{"class":1313},[1086,8766,5528],{"class":1319},[1086,8768,8769,8771,8773,8775,8777],{"class":1088,"line":3527},[1086,8770,5534],{"class":1556},[1086,8772,1560],{"class":1313},[1086,8774,1487],{"class":1313},[1086,8776,5199],{"class":1096},[1086,8778,5543],{"class":1313},[1086,8780,8781,8783,8785,8787,8789],{"class":1088,"line":3532},[1086,8782,5549],{"class":1556},[1086,8784,1560],{"class":1313},[1086,8786,1487],{"class":1313},[1086,8788,5556],{"class":1096},[1086,8790,5543],{"class":1313},[1086,8792,8793,8795,8797,8799,8801],{"class":1088,"line":3550},[1086,8794,5564],{"class":1556},[1086,8796,1560],{"class":1313},[1086,8798,1487],{"class":1313},[1086,8800,5571],{"class":1096},[1086,8802,5543],{"class":1313},[1086,8804,8805,8807,8809,8811,8813],{"class":1088,"line":3589},[1086,8806,5579],{"class":1556},[1086,8808,1560],{"class":1313},[1086,8810,1487],{"class":1313},[1086,8812,5586],{"class":1096},[1086,8814,5543],{"class":1313},[1086,8816,8817,8819,8821,8823,8825],{"class":1088,"line":3595},[1086,8818,5594],{"class":1556},[1086,8820,1560],{"class":1313},[1086,8822,1487],{"class":1313},[1086,8824,5601],{"class":1096},[1086,8826,5543],{"class":1313},[1086,8828,8829],{"class":1088,"line":3600},[1086,8830,5609],{"class":1313},[1086,8832,8833,8835,8837,8839,8841,8843,8845,8847],{"class":1088,"line":3606},[1086,8834,5615],{"class":1313},[1086,8836,5618],{"class":1319},[1086,8838,5621],{"class":1556},[1086,8840,1560],{"class":1313},[1086,8842,1487],{"class":1313},[1086,8844,5628],{"class":1096},[1086,8846,1487],{"class":1313},[1086,8848,1580],{"class":1313},[1086,8850,8851,8853,8855],{"class":1088,"line":3626},[1086,8852,5512],{"class":1313},[1086,8854,5082],{"class":1319},[1086,8856,1534],{"class":1313},[1086,8858,8859,8861,8863],{"class":1088,"line":3654},[1086,8860,5646],{"class":1313},[1086,8862,5467],{"class":1319},[1086,8864,1534],{"class":1313},[1086,8866,8867,8869,8871],{"class":1088,"line":3666},[1086,8868,1585],{"class":1313},[1086,8870,1531],{"class":1319},[1086,8872,1534],{"class":1313},[1086,8874,8875,8877,8879],{"class":1088,"line":3685},[1086,8876,1595],{"class":1313},[1086,8878,5432],{"class":1319},[1086,8880,1534],{"class":1313},[1086,8882,8883,8885,8887],{"class":1088,"line":3713},[1086,8884,1604],{"class":1313},[1086,8886,1531],{"class":1319},[1086,8888,1534],{"class":1313},[980,8890,8892],{"id":8891},"integrating-history-in-the-chat-page","Integrating history in the chat page",[1286,8894,8895],{},[1663,8896,8897],{},[1077,8898,8901],{"className":1518,"code":8899,"filename":6108,"highlights":8900,"language":34,"meta":1082,"style":1082},"\u003Cscript setup lang=\"ts\">\nimport { DefaultChatTransport, isReasoningUIPart, isTextUIPart } from 'ai'\nimport { Chat } from '@ai-sdk\u002Fvue'\nimport { isPartStreaming } from '@nuxt\u002Fui\u002Futils\u002Fai'\n\nconst route = useRoute()\nconst toast = useToast()\n\n\u002F\u002F Fetch existing chat data\nconst { data: chatData } = await useFetch(`\u002Fapi\u002Fchats\u002F${route.params.id}`)\n\nif (!chatData.value) {\n  throw createError({ statusCode: 404, statusMessage: 'Chat not found', fatal: true })\n}\n\nconst input = ref('')\n\n\u002F\u002F Initialize the Chat class from AI SDK\nconst chat = new Chat({\n  id: chatData.value.id,\n  messages: chatData.value.messages,\n  transport: new DefaultChatTransport({\n    api: `\u002Fapi\u002Fchats\u002F${chatData.value.id}`\n  }),\n  onData(dataPart) {\n    \u002F\u002F Refresh the chat list when a title is generated\n    if (dataPart.type === 'data-chat-title') {\n      refreshNuxtData('chats')\n    }\n  },\n  onError(error) {\n    toast.add({\n      title: 'Error',\n      description: error.message,\n      color: 'error'\n    })\n  }\n})\n\nfunction handleSubmit(e: Event) {\n  e.preventDefault()\n  if (input.value.trim()) {\n    chat.sendMessage({ text: input.value })\n    input.value = ''\n  }\n}\n\n\u002F\u002F Auto-generate response for first message\nonMounted(() => {\n  if (chatData.value?.messages.length === 1) {\n    chat.regenerate()\n  }\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CUDashboardPanel :ui=\"{ body: 'p-0 sm:p-0' }\">\n    \u003Ctemplate #header>\n      \u003CChatsHistory \u002F>\n    \u003C\u002Ftemplate>\n    \u003Ctemplate #body>\n      \u003CUContainer class=\"min-h-dvh flex flex-col py-4 sm:py-6\">\n        \u003CUChatMessages\n          :messages=\"chat.messages\"\n          :status=\"chat.status\"\n          should-auto-scroll\n          class=\"flex-1\"\n        >\n          \u003Ctemplate #content=\"{ message }\">\n            \u003Ctemplate v-for=\"(part, index) in message.parts\" :key=\"`${message.id}-${part.type}-${index}`\">\n              \u003CUChatReasoning\n                v-if=\"isReasoningUIPart(part)\"\n                :text=\"part.text\"\n                :streaming=\"isPartStreaming(part)\"\n              >\n                \u003CChatComark\n                  :markdown=\"part.text\"\n                  :streaming=\"isPartStreaming(part)\"\n                \u002F>\n              \u003C\u002FUChatReasoning>\n\n              \u003Ctemplate v-else-if=\"isTextUIPart(part)\">\n                \u003CChatComark\n                  v-if=\"message.role === 'assistant'\"\n                  :markdown=\"part.text\"\n                  :streaming=\"isPartStreaming(part)\"\n                \u002F>\n                \u003Cp v-else-if=\"message.role === 'user'\" class=\"whitespace-pre-wrap\">\n                  {{ part.text }}\n                \u003C\u002Fp>\n              \u003C\u002Ftemplate>\n            \u003C\u002Ftemplate>\n          \u003C\u002Ftemplate>\n        \u003C\u002FUChatMessages>\n\n        \u003CUChatPrompt\n          v-model=\"input\"\n          :error=\"chat.error\"\n          variant=\"subtle\"\n          class=\"sticky bottom-0\"\n          @submit=\"handleSubmit\"\n        >\n          \u003CUChatPromptSubmit\n            :status=\"chat.status\"\n            color=\"neutral\"\n            @stop=\"chat.stop()\"\n            @reload=\"chat.regenerate()\"\n          \u002F>\n        \u003C\u002FUChatPrompt>\n      \u003C\u002FUContainer>\n    \u003C\u002Ftemplate>\n  \u003C\u002FUDashboardPanel>\n\u003C\u002Ftemplate>\n",[3955,3960,3965],[1036,8902,8903,8923,8949,8967,8985,8989,9001,9013,9017,9021,9063,9067,9083,9123,9127,9131,9147,9151,9155,9171,9189,9207,9221,9245,9253,9265,9269,9293,9307,9311,9315,9327,9339,9353,9367,9379,9385,9389,9395,9399,9417,9427,9447,9473,9485,9489,9493,9497,9501,9513,9541,9551,9555,9561,9569,9573,9581,9599,9611,9619,9627,9639,9658,9665,9678,9690,9694,9706,9710,9734,9800,9806,9818,9830,9842,9846,9852,9864,9876,9880,9888,9892,9912,9918,9930,9942,9954,9958,9986,9990,9998,10006,10014,10022,10030,10034,10040,10052,10064,10076,10088,10100,10104,10110,10122,10134,10146,10158,10162,10170,10178,10186,10194],{"__ignoreMap":1082},[1086,8904,8905,8907,8909,8911,8913,8915,8917,8919,8921],{"class":1088,"line":1089},[1086,8906,1528],{"class":1313},[1086,8908,5117],{"class":1319},[1086,8910,5120],{"class":1556},[1086,8912,5123],{"class":1556},[1086,8914,1560],{"class":1313},[1086,8916,1487],{"class":1313},[1086,8918,1292],{"class":1096},[1086,8920,1487],{"class":1313},[1086,8922,1534],{"class":1313},[1086,8924,8925,8927,8929,8931,8933,8935,8937,8939,8941,8943,8945,8947],{"class":1088,"line":1106},[1086,8926,1675],{"class":1299},[1086,8928,1678],{"class":1313},[1086,8930,6141],{"class":1309},[1086,8932,1684],{"class":1313},[1086,8934,6146],{"class":1309},[1086,8936,1684],{"class":1313},[1086,8938,6151],{"class":1309},[1086,8940,1700],{"class":1313},[1086,8942,1703],{"class":1299},[1086,8944,1400],{"class":1313},[1086,8946,2507],{"class":1096},[1086,8948,1364],{"class":1313},[1086,8950,8951,8953,8955,8957,8959,8961,8963,8965],{"class":1088,"line":1329},[1086,8952,1675],{"class":1299},[1086,8954,1678],{"class":1313},[1086,8956,6171],{"class":1309},[1086,8958,1700],{"class":1313},[1086,8960,1703],{"class":1299},[1086,8962,1400],{"class":1313},[1086,8964,6180],{"class":1096},[1086,8966,1364],{"class":1313},[1086,8968,8969,8971,8973,8975,8977,8979,8981,8983],{"class":1088,"line":1344},[1086,8970,1675],{"class":1299},[1086,8972,1678],{"class":1313},[1086,8974,6192],{"class":1309},[1086,8976,1700],{"class":1313},[1086,8978,1703],{"class":1299},[1086,8980,1400],{"class":1313},[1086,8982,6201],{"class":1096},[1086,8984,1364],{"class":1313},[1086,8986,8987],{"class":1088,"line":1356},[1086,8988,1378],{"emptyLinePlaceholder":21},[1086,8990,8991,8993,8995,8997,8999],{"class":1088,"line":1367},[1086,8992,3035],{"class":1556},[1086,8994,6214],{"class":1309},[1086,8996,1560],{"class":1313},[1086,8998,6219],{"class":1109},[1086,9000,2642],{"class":1309},[1086,9002,9003,9005,9007,9009,9011],{"class":1088,"line":1375},[1086,9004,3035],{"class":1556},[1086,9006,6228],{"class":1309},[1086,9008,1560],{"class":1313},[1086,9010,6233],{"class":1109},[1086,9012,2642],{"class":1309},[1086,9014,9015],{"class":1088,"line":1381},[1086,9016,1378],{"emptyLinePlaceholder":21},[1086,9018,9019],{"class":1088,"line":1392},[1086,9020,6244],{"class":2664},[1086,9022,9023,9025,9027,9029,9031,9033,9035,9037,9039,9041,9043,9045,9047,9049,9051,9053,9055,9057,9059,9061],{"class":1088,"line":1408},[1086,9024,3035],{"class":1556},[1086,9026,1678],{"class":1313},[1086,9028,6253],{"class":1319},[1086,9030,1323],{"class":1313},[1086,9032,6258],{"class":1309},[1086,9034,1445],{"class":1313},[1086,9036,2596],{"class":1313},[1086,9038,2599],{"class":1299},[1086,9040,6267],{"class":1109},[1086,9042,1310],{"class":1309},[1086,9044,3680],{"class":1313},[1086,9046,6274],{"class":1096},[1086,9048,5389],{"class":1313},[1086,9050,6279],{"class":1309},[1086,9052,1776],{"class":1313},[1086,9054,6284],{"class":1309},[1086,9056,1776],{"class":1313},[1086,9058,1987],{"class":1309},[1086,9060,5398],{"class":1313},[1086,9062,1448],{"class":1309},[1086,9064,9065],{"class":1088,"line":1414},[1086,9066,1378],{"emptyLinePlaceholder":21},[1086,9068,9069,9071,9073,9075,9077,9079,9081],{"class":1088,"line":1419},[1086,9070,6301],{"class":1299},[1086,9072,1919],{"class":1309},[1086,9074,3540],{"class":1313},[1086,9076,6308],{"class":1309},[1086,9078,1776],{"class":1313},[1086,9080,6313],{"class":1309},[1086,9082,1314],{"class":1313},[1086,9084,9085,9087,9089,9091,9093,9095,9097,9099,9101,9103,9105,9107,9109,9111,9113,9115,9117,9119,9121],{"class":1088,"line":1442},[1086,9086,6320],{"class":1299},[1086,9088,2873],{"class":1109},[1086,9090,1310],{"class":1319},[1086,9092,1833],{"class":1313},[1086,9094,3562],{"class":1319},[1086,9096,1323],{"class":1313},[1086,9098,3568],{"class":3567},[1086,9100,1684],{"class":1313},[1086,9102,3573],{"class":1319},[1086,9104,1323],{"class":1313},[1086,9106,1400],{"class":1313},[1086,9108,3580],{"class":1096},[1086,9110,1338],{"class":1313},[1086,9112,1684],{"class":1313},[1086,9114,6349],{"class":1319},[1086,9116,1323],{"class":1313},[1086,9118,4173],{"class":4172},[1086,9120,1700],{"class":1313},[1086,9122,1448],{"class":1319},[1086,9124,9125],{"class":1088,"line":1947},[1086,9126,5405],{"class":1313},[1086,9128,9129],{"class":1088,"line":1974},[1086,9130,1378],{"emptyLinePlaceholder":21},[1086,9132,9133,9135,9137,9139,9141,9143,9145],{"class":1088,"line":2020},[1086,9134,3035],{"class":1556},[1086,9136,5140],{"class":1309},[1086,9138,1560],{"class":1313},[1086,9140,5145],{"class":1109},[1086,9142,1310],{"class":1309},[1086,9144,5150],{"class":1313},[1086,9146,1448],{"class":1309},[1086,9148,9149],{"class":1088,"line":2087},[1086,9150,1378],{"emptyLinePlaceholder":21},[1086,9152,9153],{"class":1088,"line":2157},[1086,9154,6390],{"class":2664},[1086,9156,9157,9159,9161,9163,9165,9167,9169],{"class":1088,"line":2197},[1086,9158,3035],{"class":1556},[1086,9160,6398],{"class":1309},[1086,9162,1560],{"class":1313},[1086,9164,1870],{"class":1313},[1086,9166,6171],{"class":1109},[1086,9168,1310],{"class":1309},[1086,9170,1314],{"class":1313},[1086,9172,9173,9175,9177,9179,9181,9183,9185,9187],{"class":1088,"line":2248},[1086,9174,1766],{"class":1319},[1086,9176,1323],{"class":1313},[1086,9178,6418],{"class":1309},[1086,9180,1776],{"class":1313},[1086,9182,3320],{"class":1309},[1086,9184,1776],{"class":1313},[1086,9186,1987],{"class":1309},[1086,9188,1341],{"class":1313},[1086,9190,9191,9193,9195,9197,9199,9201,9203,9205],{"class":1088,"line":2261},[1086,9192,1926],{"class":1319},[1086,9194,1323],{"class":1313},[1086,9196,6418],{"class":1309},[1086,9198,1776],{"class":1313},[1086,9200,3320],{"class":1309},[1086,9202,1776],{"class":1313},[1086,9204,1965],{"class":1309},[1086,9206,1341],{"class":1313},[1086,9208,9209,9211,9213,9215,9217,9219],{"class":1088,"line":2291},[1086,9210,6453],{"class":1319},[1086,9212,1323],{"class":1313},[1086,9214,1870],{"class":1313},[1086,9216,6141],{"class":1109},[1086,9218,1310],{"class":1309},[1086,9220,1314],{"class":1313},[1086,9222,9223,9225,9227,9229,9231,9233,9235,9237,9239,9241,9243],{"class":1088,"line":2297},[1086,9224,6469],{"class":1319},[1086,9226,1323],{"class":1313},[1086,9228,3674],{"class":1313},[1086,9230,6274],{"class":1096},[1086,9232,5389],{"class":1313},[1086,9234,6308],{"class":1309},[1086,9236,1776],{"class":1313},[1086,9238,3320],{"class":1309},[1086,9240,1776],{"class":1313},[1086,9242,1987],{"class":1309},[1086,9244,6490],{"class":1313},[1086,9246,9247,9249,9251],{"class":1088,"line":2302},[1086,9248,2387],{"class":1313},[1086,9250,1850],{"class":1309},[1086,9252,1341],{"class":1313},[1086,9254,9255,9257,9259,9261,9263],{"class":1088,"line":2334},[1086,9256,6505],{"class":1319},[1086,9258,1310],{"class":1313},[1086,9260,6510],{"class":1910},[1086,9262,1850],{"class":1313},[1086,9264,1389],{"class":1313},[1086,9266,9267],{"class":1088,"line":2350},[1086,9268,6520],{"class":2664},[1086,9270,9271,9273,9275,9277,9279,9281,9283,9285,9287,9289,9291],{"class":1088,"line":2368},[1086,9272,6526],{"class":1299},[1086,9274,1919],{"class":1319},[1086,9276,6510],{"class":1309},[1086,9278,1776],{"class":1313},[1086,9280,6535],{"class":1309},[1086,9282,3347],{"class":1313},[1086,9284,1400],{"class":1313},[1086,9286,4320],{"class":1096},[1086,9288,1338],{"class":1313},[1086,9290,3545],{"class":1319},[1086,9292,1314],{"class":1313},[1086,9294,9295,9297,9299,9301,9303,9305],{"class":1088,"line":2384},[1086,9296,6553],{"class":1109},[1086,9298,1310],{"class":1319},[1086,9300,1338],{"class":1313},[1086,9302,1755],{"class":1096},[1086,9304,1338],{"class":1313},[1086,9306,1448],{"class":1319},[1086,9308,9309],{"class":1088,"line":2392},[1086,9310,4555],{"class":1313},[1086,9312,9313],{"class":1088,"line":3372},[1086,9314,1411],{"class":1313},[1086,9316,9317,9319,9321,9323,9325],{"class":1088,"line":3389},[1086,9318,6579],{"class":1319},[1086,9320,1310],{"class":1313},[1086,9322,6584],{"class":1910},[1086,9324,1850],{"class":1313},[1086,9326,1389],{"class":1313},[1086,9328,9329,9331,9333,9335,9337],{"class":1088,"line":3421},[1086,9330,6594],{"class":1309},[1086,9332,1776],{"class":1313},[1086,9334,6599],{"class":1109},[1086,9336,1310],{"class":1319},[1086,9338,1314],{"class":1313},[1086,9340,9341,9343,9345,9347,9349,9351],{"class":1088,"line":3434},[1086,9342,6609],{"class":1319},[1086,9344,1323],{"class":1313},[1086,9346,1400],{"class":1313},[1086,9348,497],{"class":1096},[1086,9350,1338],{"class":1313},[1086,9352,1341],{"class":1313},[1086,9354,9355,9357,9359,9361,9363,9365],{"class":1088,"line":3439},[1086,9356,6625],{"class":1319},[1086,9358,1323],{"class":1313},[1086,9360,6630],{"class":1309},[1086,9362,1776],{"class":1313},[1086,9364,4472],{"class":1309},[1086,9366,1341],{"class":1313},[1086,9368,9369,9371,9373,9375,9377],{"class":1088,"line":3445},[1086,9370,6642],{"class":1319},[1086,9372,1323],{"class":1313},[1086,9374,1400],{"class":1313},[1086,9376,6584],{"class":1096},[1086,9378,1364],{"class":1313},[1086,9380,9381,9383],{"class":1088,"line":3476},[1086,9382,3375],{"class":1313},[1086,9384,1448],{"class":1319},[1086,9386,9387],{"class":1088,"line":3520},[1086,9388,3592],{"class":1313},[1086,9390,9391,9393],{"class":1088,"line":3527},[1086,9392,1445],{"class":1313},[1086,9394,1448],{"class":1309},[1086,9396,9397],{"class":1088,"line":3532},[1086,9398,1378],{"emptyLinePlaceholder":21},[1086,9400,9401,9403,9405,9407,9409,9411,9413,9415],{"class":1088,"line":3550},[1086,9402,6678],{"class":1556},[1086,9404,6681],{"class":1109},[1086,9406,1310],{"class":1313},[1086,9408,6686],{"class":1910},[1086,9410,1323],{"class":1313},[1086,9412,6691],{"class":1092},[1086,9414,1850],{"class":1313},[1086,9416,1389],{"class":1313},[1086,9418,9419,9421,9423,9425],{"class":1088,"line":3589},[1086,9420,6700],{"class":1309},[1086,9422,1776],{"class":1313},[1086,9424,6705],{"class":1109},[1086,9426,2642],{"class":1319},[1086,9428,9429,9431,9433,9435,9437,9439,9441,9443,9445],{"class":1088,"line":3595},[1086,9430,3535],{"class":1299},[1086,9432,1919],{"class":1319},[1086,9434,5199],{"class":1309},[1086,9436,1776],{"class":1313},[1086,9438,3320],{"class":1309},[1086,9440,1776],{"class":1313},[1086,9442,5208],{"class":1109},[1086,9444,5211],{"class":1319},[1086,9446,1314],{"class":1313},[1086,9448,9449,9451,9453,9455,9457,9459,9461,9463,9465,9467,9469,9471],{"class":1088,"line":3600},[1086,9450,6732],{"class":1309},[1086,9452,1776],{"class":1313},[1086,9454,6737],{"class":1109},[1086,9456,1310],{"class":1319},[1086,9458,1833],{"class":1313},[1086,9460,1687],{"class":1319},[1086,9462,1323],{"class":1313},[1086,9464,5343],{"class":1309},[1086,9466,1776],{"class":1313},[1086,9468,3320],{"class":1309},[1086,9470,1700],{"class":1313},[1086,9472,1448],{"class":1319},[1086,9474,9475,9477,9479,9481,9483],{"class":1088,"line":3606},[1086,9476,6760],{"class":1309},[1086,9478,1776],{"class":1313},[1086,9480,3320],{"class":1309},[1086,9482,2596],{"class":1313},[1086,9484,6769],{"class":1313},[1086,9486,9487],{"class":1088,"line":3626},[1086,9488,3592],{"class":1313},[1086,9490,9491],{"class":1088,"line":3654},[1086,9492,5405],{"class":1313},[1086,9494,9495],{"class":1088,"line":3666},[1086,9496,1378],{"emptyLinePlaceholder":21},[1086,9498,9499],{"class":1088,"line":3685},[1086,9500,6786],{"class":2664},[1086,9502,9503,9505,9507,9509,9511],{"class":1088,"line":3713},[1086,9504,6791],{"class":1109},[1086,9506,1310],{"class":1309},[1086,9508,1773],{"class":1313},[1086,9510,1793],{"class":1556},[1086,9512,1389],{"class":1313},[1086,9514,9515,9517,9519,9521,9523,9525,9527,9529,9531,9533,9535,9537,9539],{"class":1088,"line":3720},[1086,9516,3535],{"class":1299},[1086,9518,1919],{"class":1319},[1086,9520,6308],{"class":1309},[1086,9522,1776],{"class":1313},[1086,9524,3320],{"class":1309},[1086,9526,3846],{"class":1313},[1086,9528,1965],{"class":1309},[1086,9530,1776],{"class":1313},[1086,9532,3825],{"class":1309},[1086,9534,3347],{"class":1313},[1086,9536,3831],{"class":3567},[1086,9538,3545],{"class":1319},[1086,9540,1314],{"class":1313},[1086,9542,9543,9545,9547,9549],{"class":1088,"line":3725},[1086,9544,6732],{"class":1309},[1086,9546,1776],{"class":1313},[1086,9548,6836],{"class":1109},[1086,9550,2642],{"class":1319},[1086,9552,9553],{"class":1088,"line":3791},[1086,9554,3592],{"class":1313},[1086,9556,9557,9559],{"class":1088,"line":3796},[1086,9558,1445],{"class":1313},[1086,9560,1448],{"class":1309},[1086,9562,9563,9565,9567],{"class":1088,"line":3801},[1086,9564,1604],{"class":1313},[1086,9566,5117],{"class":1319},[1086,9568,1534],{"class":1313},[1086,9570,9571],{"class":1088,"line":3807},[1086,9572,1378],{"emptyLinePlaceholder":21},[1086,9574,9575,9577,9579],{"class":1088,"line":3836},[1086,9576,1528],{"class":1313},[1086,9578,1531],{"class":1319},[1086,9580,1534],{"class":1313},[1086,9582,9583,9585,9587,9589,9591,9593,9595,9597],{"class":1088,"line":3877},[1086,9584,1541],{"class":1313},[1086,9586,5432],{"class":1319},[1086,9588,5435],{"class":1556},[1086,9590,1560],{"class":1313},[1086,9592,1487],{"class":1313},[1086,9594,5442],{"class":1096},[1086,9596,1487],{"class":1313},[1086,9598,1534],{"class":1313},[1086,9600,9601,9603,9605,9607,9609],{"class":1088,"line":3906},[1086,9602,1550],{"class":1313},[1086,9604,1531],{"class":1319},[1086,9606,5455],{"class":1313},[1086,9608,8675],{"class":1556},[1086,9610,1534],{"class":1313},[1086,9612,9613,9615,9617],{"class":1088,"line":3918},[1086,9614,1574],{"class":1313},[1086,9616,8685],{"class":1319},[1086,9618,1580],{"class":1313},[1086,9620,9621,9623,9625],{"class":1088,"line":3934},[1086,9622,1585],{"class":1313},[1086,9624,1531],{"class":1319},[1086,9626,1534],{"class":1313},[1086,9628,9629,9631,9633,9635,9637],{"class":1088,"line":3948},[1086,9630,1550],{"class":1313},[1086,9632,1531],{"class":1319},[1086,9634,5455],{"class":1313},[1086,9636,5458],{"class":1556},[1086,9638,1534],{"class":1313},[1086,9640,9642,9644,9646,9648,9650,9652,9654,9656],{"class":9641,"line":3955},[1088,1538],[1086,9643,1574],{"class":1313},[1086,9645,5467],{"class":1319},[1086,9647,5470],{"class":1556},[1086,9649,1560],{"class":1313},[1086,9651,1487],{"class":1313},[1086,9653,6913],{"class":1096},[1086,9655,1487],{"class":1313},[1086,9657,1534],{"class":1313},[1086,9659,9661,9663],{"class":9660,"line":3960},[1088,1538],[1086,9662,5486],{"class":1313},[1086,9664,6924],{"class":1319},[1086,9666,9668,9670,9672,9674,9676],{"class":9667,"line":3965},[1088,1538],[1086,9669,6929],{"class":1556},[1086,9671,1560],{"class":1313},[1086,9673,1487],{"class":1313},[1086,9675,6936],{"class":1096},[1086,9677,5543],{"class":1313},[1086,9679,9680,9682,9684,9686,9688],{"class":1088,"line":3971},[1086,9681,5549],{"class":1556},[1086,9683,1560],{"class":1313},[1086,9685,1487],{"class":1313},[1086,9687,6949],{"class":1096},[1086,9689,5543],{"class":1313},[1086,9691,9692],{"class":1088,"line":3988},[1086,9693,6956],{"class":1556},[1086,9695,9696,9698,9700,9702,9704],{"class":1088,"line":4010},[1086,9697,6961],{"class":1556},[1086,9699,1560],{"class":1313},[1086,9701,1487],{"class":1313},[1086,9703,6968],{"class":1096},[1086,9705,5543],{"class":1313},[1086,9707,9708],{"class":1088,"line":4028},[1086,9709,5609],{"class":1313},[1086,9711,9712,9714,9716,9718,9720,9722,9724,9726,9728,9730,9732],{"class":1088,"line":4036},[1086,9713,5615],{"class":1313},[1086,9715,1531],{"class":1319},[1086,9717,5455],{"class":1313},[1086,9719,371],{"class":1556},[1086,9721,1560],{"class":1313},[1086,9723,1487],{"class":1313},[1086,9725,1833],{"class":1313},[1086,9727,6993],{"class":1309},[1086,9729,1445],{"class":1313},[1086,9731,1487],{"class":1313},[1086,9733,1534],{"class":1313},[1086,9735,9736,9738,9740,9742,9744,9746,9748,9750,9752,9754,9756,9758,9760,9762,9764,9766,9768,9770,9772,9774,9776,9778,9780,9782,9784,9786,9788,9790,9792,9794,9796,9798],{"class":1088,"line":4053},[1086,9737,7004],{"class":1313},[1086,9739,1531],{"class":1319},[1086,9741,7009],{"class":1299},[1086,9743,1560],{"class":1313},[1086,9745,1487],{"class":1313},[1086,9747,7016],{"class":1309},[1086,9749,1684],{"class":1313},[1086,9751,7021],{"class":1309},[1086,9753,7024],{"class":1313},[1086,9755,2591],{"class":1309},[1086,9757,1776],{"class":1313},[1086,9759,2171],{"class":1309},[1086,9761,1487],{"class":1313},[1086,9763,7035],{"class":1313},[1086,9765,7038],{"class":1556},[1086,9767,1560],{"class":1313},[1086,9769,7043],{"class":1313},[1086,9771,4472],{"class":1309},[1086,9773,1776],{"class":1313},[1086,9775,1987],{"class":1309},[1086,9777,1445],{"class":1313},[1086,9779,7054],{"class":1096},[1086,9781,5389],{"class":1313},[1086,9783,7059],{"class":1309},[1086,9785,1776],{"class":1313},[1086,9787,6535],{"class":1309},[1086,9789,1445],{"class":1313},[1086,9791,7054],{"class":1096},[1086,9793,5389],{"class":1313},[1086,9795,7072],{"class":1309},[1086,9797,7075],{"class":1313},[1086,9799,1534],{"class":1313},[1086,9801,9802,9804],{"class":1088,"line":4074},[1086,9803,7082],{"class":1313},[1086,9805,7085],{"class":1319},[1086,9807,9808,9810,9812,9814,9816],{"class":1088,"line":4084},[1086,9809,7090],{"class":1556},[1086,9811,1560],{"class":1313},[1086,9813,1487],{"class":1313},[1086,9815,7097],{"class":1096},[1086,9817,5543],{"class":1313},[1086,9819,9820,9822,9824,9826,9828],{"class":1088,"line":4094},[1086,9821,7104],{"class":1556},[1086,9823,1560],{"class":1313},[1086,9825,1487],{"class":1313},[1086,9827,7111],{"class":1096},[1086,9829,5543],{"class":1313},[1086,9831,9832,9834,9836,9838,9840],{"class":1088,"line":4104},[1086,9833,7118],{"class":1556},[1086,9835,1560],{"class":1313},[1086,9837,1487],{"class":1313},[1086,9839,7125],{"class":1096},[1086,9841,5543],{"class":1313},[1086,9843,9844],{"class":1088,"line":4121},[1086,9845,7132],{"class":1313},[1086,9847,9848,9850],{"class":1088,"line":4132},[1086,9849,7137],{"class":1313},[1086,9851,7140],{"class":1319},[1086,9853,9854,9856,9858,9860,9862],{"class":1088,"line":4138},[1086,9855,7145],{"class":1556},[1086,9857,1560],{"class":1313},[1086,9859,1487],{"class":1313},[1086,9861,7111],{"class":1096},[1086,9863,5543],{"class":1313},[1086,9865,9866,9868,9870,9872,9874],{"class":1088,"line":4144},[1086,9867,7158],{"class":1556},[1086,9869,1560],{"class":1313},[1086,9871,1487],{"class":1313},[1086,9873,7125],{"class":1096},[1086,9875,5543],{"class":1313},[1086,9877,9878],{"class":1088,"line":4154},[1086,9879,7171],{"class":1313},[1086,9881,9882,9884,9886],{"class":1088,"line":4164},[1086,9883,7176],{"class":1313},[1086,9885,7179],{"class":1319},[1086,9887,1534],{"class":1313},[1086,9889,9890],{"class":1088,"line":4178},[1086,9891,1378],{"emptyLinePlaceholder":21},[1086,9893,9894,9896,9898,9900,9902,9904,9906,9908,9910],{"class":1088,"line":4193},[1086,9895,7082],{"class":1313},[1086,9897,1531],{"class":1319},[1086,9899,7194],{"class":1299},[1086,9901,1560],{"class":1313},[1086,9903,1487],{"class":1313},[1086,9905,7201],{"class":1109},[1086,9907,7204],{"class":1309},[1086,9909,1487],{"class":1313},[1086,9911,1534],{"class":1313},[1086,9913,9914,9916],{"class":1088,"line":4198},[1086,9915,7137],{"class":1313},[1086,9917,7140],{"class":1319},[1086,9919,9920,9922,9924,9926,9928],{"class":1088,"line":4203},[1086,9921,7219],{"class":1556},[1086,9923,1560],{"class":1313},[1086,9925,1487],{"class":1313},[1086,9927,7226],{"class":1096},[1086,9929,5543],{"class":1313},[1086,9931,9932,9934,9936,9938,9940],{"class":1088,"line":4213},[1086,9933,7145],{"class":1556},[1086,9935,1560],{"class":1313},[1086,9937,1487],{"class":1313},[1086,9939,7111],{"class":1096},[1086,9941,5543],{"class":1313},[1086,9943,9944,9946,9948,9950,9952],{"class":1088,"line":4229},[1086,9945,7158],{"class":1556},[1086,9947,1560],{"class":1313},[1086,9949,1487],{"class":1313},[1086,9951,7125],{"class":1096},[1086,9953,5543],{"class":1313},[1086,9955,9956],{"class":1088,"line":4244},[1086,9957,7171],{"class":1313},[1086,9959,9960,9962,9964,9966,9968,9970,9972,9974,9976,9978,9980,9982,9984],{"class":1088,"line":4250},[1086,9961,7137],{"class":1313},[1086,9963,976],{"class":1319},[1086,9965,7194],{"class":1556},[1086,9967,1560],{"class":1313},[1086,9969,1487],{"class":1313},[1086,9971,7271],{"class":1096},[1086,9973,1487],{"class":1313},[1086,9975,5470],{"class":1556},[1086,9977,1560],{"class":1313},[1086,9979,1487],{"class":1313},[1086,9981,7282],{"class":1096},[1086,9983,1487],{"class":1313},[1086,9985,1534],{"class":1313},[1086,9987,9988],{"class":1088,"line":4256},[1086,9989,7291],{"class":1309},[1086,9991,9992,9994,9996],{"class":1088,"line":4264},[1086,9993,7296],{"class":1313},[1086,9995,976],{"class":1319},[1086,9997,1534],{"class":1313},[1086,9999,10000,10002,10004],{"class":1088,"line":4269},[1086,10001,7176],{"class":1313},[1086,10003,1531],{"class":1319},[1086,10005,1534],{"class":1313},[1086,10007,10008,10010,10012],{"class":1088,"line":4275},[1086,10009,7313],{"class":1313},[1086,10011,1531],{"class":1319},[1086,10013,1534],{"class":1313},[1086,10015,10016,10018,10020],{"class":1088,"line":4295},[1086,10017,7322],{"class":1313},[1086,10019,1531],{"class":1319},[1086,10021,1534],{"class":1313},[1086,10023,10024,10026,10028],{"class":1088,"line":4310},[1086,10025,5512],{"class":1313},[1086,10027,5088],{"class":1319},[1086,10029,1534],{"class":1313},[1086,10031,10032],{"class":1088,"line":4327},[1086,10033,1378],{"emptyLinePlaceholder":21},[1086,10035,10036,10038],{"class":1088,"line":4350},[1086,10037,5486],{"class":1313},[1086,10039,5528],{"class":1319},[1086,10041,10042,10044,10046,10048,10050],{"class":1088,"line":4361},[1086,10043,5534],{"class":1556},[1086,10045,1560],{"class":1313},[1086,10047,1487],{"class":1313},[1086,10049,5199],{"class":1096},[1086,10051,5543],{"class":1313},[1086,10053,10054,10056,10058,10060,10062],{"class":1088,"line":4369},[1086,10055,7361],{"class":1556},[1086,10057,1560],{"class":1313},[1086,10059,1487],{"class":1313},[1086,10061,7368],{"class":1096},[1086,10063,5543],{"class":1313},[1086,10065,10066,10068,10070,10072,10074],{"class":1088,"line":4375},[1086,10067,5564],{"class":1556},[1086,10069,1560],{"class":1313},[1086,10071,1487],{"class":1313},[1086,10073,5571],{"class":1096},[1086,10075,5543],{"class":1313},[1086,10077,10078,10080,10082,10084,10086],{"class":1088,"line":4380},[1086,10079,6961],{"class":1556},[1086,10081,1560],{"class":1313},[1086,10083,1487],{"class":1313},[1086,10085,7393],{"class":1096},[1086,10087,5543],{"class":1313},[1086,10089,10090,10092,10094,10096,10098],{"class":1088,"line":4403},[1086,10091,5594],{"class":1556},[1086,10093,1560],{"class":1313},[1086,10095,1487],{"class":1313},[1086,10097,7406],{"class":1096},[1086,10099,5543],{"class":1313},[1086,10101,10102],{"class":1088,"line":4409},[1086,10103,5609],{"class":1313},[1086,10105,10106,10108],{"class":1088,"line":4429},[1086,10107,5615],{"class":1313},[1086,10109,7419],{"class":1319},[1086,10111,10112,10114,10116,10118,10120],{"class":1088,"line":4435},[1086,10113,7424],{"class":1556},[1086,10115,1560],{"class":1313},[1086,10117,1487],{"class":1313},[1086,10119,6949],{"class":1096},[1086,10121,5543],{"class":1313},[1086,10123,10124,10126,10128,10130,10132],{"class":1088,"line":4481},[1086,10125,7437],{"class":1556},[1086,10127,1560],{"class":1313},[1086,10129,1487],{"class":1313},[1086,10131,5628],{"class":1096},[1086,10133,5543],{"class":1313},[1086,10135,10136,10138,10140,10142,10144],{"class":1088,"line":4497},[1086,10137,7450],{"class":1556},[1086,10139,1560],{"class":1313},[1086,10141,1487],{"class":1313},[1086,10143,7457],{"class":1096},[1086,10145,5543],{"class":1313},[1086,10147,10148,10150,10152,10154,10156],{"class":1088,"line":4530},[1086,10149,7464],{"class":1556},[1086,10151,1560],{"class":1313},[1086,10153,1487],{"class":1313},[1086,10155,7471],{"class":1096},[1086,10157,5543],{"class":1313},[1086,10159,10160],{"class":1088,"line":4544},[1086,10161,7478],{"class":1313},[1086,10163,10164,10166,10168],{"class":1088,"line":4552},[1086,10165,5512],{"class":1313},[1086,10167,5082],{"class":1319},[1086,10169,1534],{"class":1313},[1086,10171,10172,10174,10176],{"class":1088,"line":4558},[1086,10173,5646],{"class":1313},[1086,10175,5467],{"class":1319},[1086,10177,1534],{"class":1313},[1086,10179,10180,10182,10184],{"class":1088,"line":4565},[1086,10181,1585],{"class":1313},[1086,10183,1531],{"class":1319},[1086,10185,1534],{"class":1313},[1086,10187,10188,10190,10192],{"class":1088,"line":4570},[1086,10189,1595],{"class":1313},[1086,10191,5432],{"class":1319},[1086,10193,1534],{"class":1313},[1086,10195,10196,10198,10200],{"class":1088,"line":4588},[1086,10197,1604],{"class":1313},[1086,10199,1531],{"class":1319},[1086,10201,1534],{"class":1313},[976,10203,4631,10204,10207,10208,10210],{},[1036,10205,10206],{},"refreshNuxtData('chats')"," call in the chat page's ",[1036,10209,7580],{}," callback (as shown earlier) ensures the chat list updates automatically when a new title is generated.",[980,10212,10214],{"id":10213},"adding-multi-model-support","Adding multi-model support",[976,10216,10217,10218,10221],{},"One of the benefits of using ",[1030,10219,4600],{"href":1065,"rel":10220},[1034]," is the ability to switch between models seamlessly. This section adds a model selector to the chat.",[1114,10223,10225],{"id":10224},"creating-a-models-composable","Creating a models composable",[976,10227,10228,10229,1323],{},"Define the available models and persist the user's selection using ",[1030,10230,10233],{"href":10231,"rel":10232},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-cookie",[1034],[1036,10234,10235],{},"useCookie",[1286,10237,10238],{},[1077,10239,10242],{"className":1290,"code":10240,"filename":10241,"language":1292,"meta":1082,"style":1082},"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",[1036,10243,10244,10257,10268,10314,10358,10402,10407,10411,10441,10458,10464,10468,10474,10481,10486,10490],{"__ignoreMap":1082},[1086,10245,10246,10248,10250,10253,10255],{"class":1088,"line":1089},[1086,10247,1300],{"class":1299},[1086,10249,5181],{"class":1556},[1086,10251,10252],{"class":1109}," useModels",[1086,10254,1773],{"class":1313},[1086,10256,1389],{"class":1313},[1086,10258,10259,10261,10264,10266],{"class":1088,"line":1106},[1086,10260,2586],{"class":1556},[1086,10262,10263],{"class":1309}," models",[1086,10265,2596],{"class":1313},[1086,10267,1326],{"class":1319},[1086,10269,10270,10273,10275,10277,10279,10281,10283,10285,10287,10289,10291,10293,10295,10297,10300,10302,10304,10310,10312],{"class":1088,"line":1329},[1086,10271,10272],{"class":1313},"    {",[1086,10274,3084],{"class":1319},[1086,10276,1323],{"class":1313},[1086,10278,1400],{"class":1313},[1086,10280,3091],{"class":1096},[1086,10282,1338],{"class":1313},[1086,10284,1684],{"class":1313},[1086,10286,3070],{"class":1319},[1086,10288,1323],{"class":1313},[1086,10290,1400],{"class":1313},[1086,10292,3077],{"class":1096},[1086,10294,1338],{"class":1313},[1086,10296,1684],{"class":1313},[1086,10298,10299],{"class":1319}," icon",[1086,10301,1323],{"class":1313},[1086,10303,1400],{"class":1313},[1086,10305,10306,10309],{"class":1096},[8052,10307],{"class":10308},"shiki-icon-highlight sh9xi","i-simple-icons-openai",[1086,10311,1338],{"class":1313},[1086,10313,3096],{"class":1313},[1086,10315,10316,10318,10320,10322,10324,10326,10328,10330,10332,10334,10336,10338,10340,10342,10344,10346,10348,10354,10356],{"class":1088,"line":1344},[1086,10317,10272],{"class":1313},[1086,10319,3084],{"class":1319},[1086,10321,1323],{"class":1313},[1086,10323,1400],{"class":1313},[1086,10325,3121],{"class":1096},[1086,10327,1338],{"class":1313},[1086,10329,1684],{"class":1313},[1086,10331,3070],{"class":1319},[1086,10333,1323],{"class":1313},[1086,10335,1400],{"class":1313},[1086,10337,3045],{"class":1096},[1086,10339,1338],{"class":1313},[1086,10341,1684],{"class":1313},[1086,10343,10299],{"class":1319},[1086,10345,1323],{"class":1313},[1086,10347,1400],{"class":1313},[1086,10349,10350,10353],{"class":1096},[8052,10351],{"class":10352},"shiki-icon-highlight sNknm","i-simple-icons-anthropic",[1086,10355,1338],{"class":1313},[1086,10357,3096],{"class":1313},[1086,10359,10360,10362,10364,10366,10368,10370,10372,10374,10376,10378,10380,10382,10384,10386,10388,10390,10392,10398,10400],{"class":1088,"line":1356},[1086,10361,10272],{"class":1313},[1086,10363,3084],{"class":1319},[1086,10365,1323],{"class":1313},[1086,10367,1400],{"class":1313},[1086,10369,3151],{"class":1096},[1086,10371,1338],{"class":1313},[1086,10373,1684],{"class":1313},[1086,10375,3070],{"class":1319},[1086,10377,1323],{"class":1313},[1086,10379,1400],{"class":1313},[1086,10381,3138],{"class":1096},[1086,10383,1338],{"class":1313},[1086,10385,1684],{"class":1313},[1086,10387,10299],{"class":1319},[1086,10389,1323],{"class":1313},[1086,10391,1400],{"class":1313},[1086,10393,10394,10397],{"class":1096},[8052,10395],{"class":10396},"shiki-icon-highlight scZL3","i-simple-icons-google",[1086,10399,1338],{"class":1313},[1086,10401,3156],{"class":1313},[1086,10403,10404],{"class":1088,"line":1367},[1086,10405,10406],{"class":1319},"  ]\n",[1086,10408,10409],{"class":1088,"line":1375},[1086,10410,1378],{"emptyLinePlaceholder":21},[1086,10412,10413,10415,10417,10419,10422,10424,10426,10428,10430,10432,10435,10437,10439],{"class":1088,"line":1381},[1086,10414,2586],{"class":1556},[1086,10416,3261],{"class":1309},[1086,10418,2596],{"class":1313},[1086,10420,10421],{"class":1109}," useCookie",[1086,10423,1528],{"class":1313},[1086,10425,3234],{"class":1092},[1086,10427,2639],{"class":1313},[1086,10429,1310],{"class":1319},[1086,10431,1338],{"class":1313},[1086,10433,10434],{"class":1096},"ai-model",[1086,10436,1338],{"class":1313},[1086,10438,1684],{"class":1313},[1086,10440,1389],{"class":1313},[1086,10442,10443,10446,10448,10450,10452,10454,10456],{"class":1088,"line":1392},[1086,10444,10445],{"class":1109},"    default",[1086,10447,1323],{"class":1313},[1086,10449,4967],{"class":1313},[1086,10451,1793],{"class":1556},[1086,10453,1400],{"class":1313},[1086,10455,3045],{"class":1096},[1086,10457,1364],{"class":1313},[1086,10459,10460,10462],{"class":1088,"line":1408},[1086,10461,2387],{"class":1313},[1086,10463,1448],{"class":1319},[1086,10465,10466],{"class":1088,"line":1414},[1086,10467,1378],{"emptyLinePlaceholder":21},[1086,10469,10470,10472],{"class":1088,"line":1419},[1086,10471,2814],{"class":1299},[1086,10473,1389],{"class":1313},[1086,10475,10476,10479],{"class":1088,"line":1442},[1086,10477,10478],{"class":1309},"    models",[1086,10480,1341],{"class":1313},[1086,10482,10483],{"class":1088,"line":1947},[1086,10484,10485],{"class":1309},"    model\n",[1086,10487,10488],{"class":1088,"line":1974},[1086,10489,3592],{"class":1313},[1086,10491,10492],{"class":1088,"line":2020},[1086,10493,5405],{"class":1313},[1114,10495,10497],{"id":10496},"building-the-model-selector","Building the model selector",[976,10499,1611,10500,10505],{},[1030,10501,10502],{"href":734},[1036,10503,10504],{},"USelectMenu"," component that displays the available models:",[1286,10507,10508],{},[1077,10509,10512],{"className":1518,"code":10510,"filename":10511,"language":34,"meta":1082,"style":1082},"\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",[1036,10513,10514,10534,10567,10571,10588,10592,10610,10642,10646,10654,10658,10666,10673,10686,10700,10714,10727,10740,10745],{"__ignoreMap":1082},[1086,10515,10516,10518,10520,10522,10524,10526,10528,10530,10532],{"class":1088,"line":1089},[1086,10517,1528],{"class":1313},[1086,10519,5117],{"class":1319},[1086,10521,5120],{"class":1556},[1086,10523,5123],{"class":1556},[1086,10525,1560],{"class":1313},[1086,10527,1487],{"class":1313},[1086,10529,1292],{"class":1096},[1086,10531,1487],{"class":1313},[1086,10533,1534],{"class":1313},[1086,10535,10536,10538,10541,10543,10546,10548,10550,10552,10554,10556,10559,10561,10563,10565],{"class":1088,"line":1106},[1086,10537,3035],{"class":1556},[1086,10539,10540],{"class":1309}," model ",[1086,10542,1560],{"class":1313},[1086,10544,10545],{"class":1109}," defineModel",[1086,10547,1528],{"class":1313},[1086,10549,3234],{"class":1092},[1086,10551,2639],{"class":1313},[1086,10553,1310],{"class":1309},[1086,10555,1833],{"class":1313},[1086,10557,10558],{"class":1319}," required",[1086,10560,1323],{"class":1313},[1086,10562,4173],{"class":4172},[1086,10564,1700],{"class":1313},[1086,10566,1448],{"class":1309},[1086,10568,10569],{"class":1088,"line":1329},[1086,10570,1378],{"emptyLinePlaceholder":21},[1086,10572,10573,10575,10577,10580,10582,10584,10586],{"class":1088,"line":1344},[1086,10574,3035],{"class":1556},[1086,10576,1678],{"class":1313},[1086,10578,10579],{"class":1309}," models ",[1086,10581,1445],{"class":1313},[1086,10583,2596],{"class":1313},[1086,10585,10252],{"class":1109},[1086,10587,2642],{"class":1309},[1086,10589,10590],{"class":1088,"line":1356},[1086,10591,1378],{"emptyLinePlaceholder":21},[1086,10593,10594,10596,10599,10601,10603,10605,10607],{"class":1088,"line":1367},[1086,10595,3035],{"class":1556},[1086,10597,10598],{"class":1309}," selectedModel ",[1086,10600,1560],{"class":1313},[1086,10602,7994],{"class":1109},[1086,10604,1310],{"class":1309},[1086,10606,1773],{"class":1313},[1086,10608,10609],{"class":1556}," =>\n",[1086,10611,10612,10615,10617,10620,10622,10624,10626,10628,10630,10633,10635,10637,10639],{"class":1088,"line":1375},[1086,10613,10614],{"class":1309},"  models",[1086,10616,1776],{"class":1313},[1086,10618,10619],{"class":1109},"find",[1086,10621,1310],{"class":1309},[1086,10623,3335],{"class":1910},[1086,10625,1793],{"class":1556},[1086,10627,3340],{"class":1309},[1086,10629,1776],{"class":1313},[1086,10631,10632],{"class":1309},"value ",[1086,10634,8077],{"class":1313},[1086,10636,3261],{"class":1309},[1086,10638,1776],{"class":1313},[1086,10640,10641],{"class":1309},"value)\n",[1086,10643,10644],{"class":1088,"line":1381},[1086,10645,1448],{"class":1309},[1086,10647,10648,10650,10652],{"class":1088,"line":1392},[1086,10649,1604],{"class":1313},[1086,10651,5117],{"class":1319},[1086,10653,1534],{"class":1313},[1086,10655,10656],{"class":1088,"line":1408},[1086,10657,1378],{"emptyLinePlaceholder":21},[1086,10659,10660,10662,10664],{"class":1088,"line":1414},[1086,10661,1528],{"class":1313},[1086,10663,1531],{"class":1319},[1086,10665,1534],{"class":1313},[1086,10667,10668,10670],{"class":1088,"line":1419},[1086,10669,1541],{"class":1313},[1086,10671,10672],{"class":1319},"USelectMenu\n",[1086,10674,10675,10678,10680,10682,10684],{"class":1088,"line":1442},[1086,10676,10677],{"class":1556},"    v-model",[1086,10679,1560],{"class":1313},[1086,10681,1487],{"class":1313},[1086,10683,4644],{"class":1096},[1086,10685,5543],{"class":1313},[1086,10687,10688,10691,10693,10695,10698],{"class":1088,"line":1947},[1086,10689,10690],{"class":1556},"    :items",[1086,10692,1560],{"class":1313},[1086,10694,1487],{"class":1313},[1086,10696,10697],{"class":1096},"models",[1086,10699,5543],{"class":1313},[1086,10701,10702,10705,10707,10709,10712],{"class":1088,"line":1974},[1086,10703,10704],{"class":1556},"    :icon",[1086,10706,1560],{"class":1313},[1086,10708,1487],{"class":1313},[1086,10710,10711],{"class":1096},"selectedModel?.icon",[1086,10713,5543],{"class":1313},[1086,10715,10716,10719,10721,10723,10725],{"class":1088,"line":2020},[1086,10717,10718],{"class":1556},"    variant",[1086,10720,1560],{"class":1313},[1086,10722,1487],{"class":1313},[1086,10724,8282],{"class":1096},[1086,10726,5543],{"class":1313},[1086,10728,10729,10732,10734,10736,10738],{"class":1088,"line":2087},[1086,10730,10731],{"class":1556},"    value-key",[1086,10733,1560],{"class":1313},[1086,10735,1487],{"class":1313},[1086,10737,3320],{"class":1096},[1086,10739,5543],{"class":1313},[1086,10741,10742],{"class":1088,"line":2157},[1086,10743,10744],{"class":1313},"  \u002F>\n",[1086,10746,10747,10749,10751],{"class":1088,"line":2197},[1086,10748,1604],{"class":1313},[1086,10750,1531],{"class":1319},[1086,10752,1534],{"class":1313},[1114,10754,10756],{"id":10755},"integrating-with-the-chat","Integrating with the chat",[976,10758,10759],{},"Update the chat page to include the model selector and pass the selected model to the server:",[1286,10761,10762],{},[1663,10763,10764],{},[1077,10765,10768],{"className":1518,"code":10766,"filename":6108,"highlights":10767,"language":34,"meta":1082,"style":1082},"\u003Cscript setup lang=\"ts\">\nimport { DefaultChatTransport, isReasoningUIPart, isTextUIPart } from 'ai'\nimport { Chat } from '@ai-sdk\u002Fvue'\nimport { isPartStreaming } from '@nuxt\u002Fui\u002Futils\u002Fai'\n\nconst route = useRoute()\nconst toast = useToast()\nconst { model } = useModels()\n\nconst { data: chatData } = await useFetch(`\u002Fapi\u002Fchats\u002F${route.params.id}`)\n\nif (!chatData.value) {\n  throw createError({ statusCode: 404, statusMessage: 'Chat not found', fatal: true })\n}\n\nconst input = ref('')\n\nconst chat = new Chat({\n  id: chatData.value.id,\n  messages: chatData.value.messages,\n  transport: new DefaultChatTransport({\n    api: `\u002Fapi\u002Fchats\u002F${chatData.value.id}`,\n    body: {\n      model: model.value \u002F\u002F Pass the selected model\n    }\n  }),\n  onData(dataPart) {\n    if (dataPart.type === 'data-chat-title') {\n      refreshNuxtData('chats')\n    }\n  },\n  onError(error) {\n    toast.add({\n      title: 'Error',\n      description: error.message,\n      color: 'error'\n    })\n  }\n})\n\nfunction handleSubmit(e: Event) {\n  e.preventDefault()\n  if (input.value.trim()) {\n    chat.sendMessage({ text: input.value })\n    input.value = ''\n  }\n}\n\nonMounted(() => {\n  if (chatData.value?.messages.length === 1) {\n    chat.regenerate()\n  }\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CUDashboardPanel :ui=\"{ body: 'p-0 sm:p-0' }\">\n    \u003Ctemplate #header>\n      \u003CChatsHistory \u002F>\n    \u003C\u002Ftemplate>\n    \u003Ctemplate #body>\n      \u003CUContainer class=\"min-h-dvh flex flex-col py-4 sm:py-6\">\n        \u003CUChatMessages\n          :messages=\"chat.messages\"\n          :status=\"chat.status\"\n          should-auto-scroll\n          class=\"flex-1\"\n        >\n          \u003Ctemplate #content=\"{ message }\">\n            \u003Ctemplate v-for=\"(part, index) in message.parts\" :key=\"`${message.id}-${part.type}-${index}`\">\n              \u003CUChatReasoning\n                v-if=\"isReasoningUIPart(part)\"\n                :text=\"part.text\"\n                :streaming=\"isPartStreaming(part)\"\n              >\n                \u003CChatComark\n                  :markdown=\"part.text\"\n                  :streaming=\"isPartStreaming(part)\"\n                \u002F>\n              \u003C\u002FUChatReasoning>\n\n              \u003Ctemplate v-else-if=\"isTextUIPart(part)\">\n                \u003CChatComark\n                  v-if=\"message.role === 'assistant'\"\n                  :markdown=\"part.text\"\n                  :streaming=\"isPartStreaming(part)\"\n                \u002F>\n                \u003Cp v-else-if=\"message.role === 'user'\" class=\"whitespace-pre-wrap\">\n                  {{ part.text }}\n                \u003C\u002Fp>\n              \u003C\u002Ftemplate>\n            \u003C\u002Ftemplate>\n          \u003C\u002Ftemplate>\n        \u003C\u002FUChatMessages>\n\n        \u003CUChatPrompt\n          v-model=\"input\"\n          :error=\"chat.error\"\n          variant=\"subtle\"\n          class=\"sticky bottom-0\"\n          @submit=\"handleSubmit\"\n        >\n          \u003Ctemplate #footer>\n            \u003CModelSelect v-model=\"model\" \u002F>\n          \u003C\u002Ftemplate>\n\n          \u003CUChatPromptSubmit\n            :status=\"chat.status\"\n            color=\"neutral\"\n            @stop=\"chat.stop()\"\n            @reload=\"chat.regenerate()\"\n          \u002F>\n        \u003C\u002FUChatPrompt>\n      \u003C\u002FUContainer>\n    \u003C\u002Ftemplate>\n  \u003C\u002FUDashboardPanel>\n\u003C\u002Ftemplate>\n",[1381,2302,2334,2350,4310,4327,4350],[1036,10769,10770,10790,10816,10834,10852,10856,10868,10880,10897,10901,10943,10947,10963,11003,11007,11011,11027,11031,11047,11065,11083,11097,11123,11131,11147,11152,11161,11173,11197,11211,11215,11219,11231,11243,11257,11271,11283,11289,11293,11299,11303,11321,11331,11351,11377,11389,11393,11397,11401,11413,11441,11451,11455,11461,11469,11473,11481,11499,11511,11519,11527,11539,11557,11563,11575,11587,11591,11603,11607,11631,11697,11703,11715,11727,11739,11743,11749,11761,11773,11777,11785,11789,11809,11815,11827,11839,11851,11855,11883,11887,11895,11903,11911,11919,11928,11933,11940,11952,11964,11976,11988,12000,12004,12017,12037,12045,12049,12055,12067,12079,12091,12103,12107,12115,12124,12133,12142],{"__ignoreMap":1082},[1086,10771,10772,10774,10776,10778,10780,10782,10784,10786,10788],{"class":1088,"line":1089},[1086,10773,1528],{"class":1313},[1086,10775,5117],{"class":1319},[1086,10777,5120],{"class":1556},[1086,10779,5123],{"class":1556},[1086,10781,1560],{"class":1313},[1086,10783,1487],{"class":1313},[1086,10785,1292],{"class":1096},[1086,10787,1487],{"class":1313},[1086,10789,1534],{"class":1313},[1086,10791,10792,10794,10796,10798,10800,10802,10804,10806,10808,10810,10812,10814],{"class":1088,"line":1106},[1086,10793,1675],{"class":1299},[1086,10795,1678],{"class":1313},[1086,10797,6141],{"class":1309},[1086,10799,1684],{"class":1313},[1086,10801,6146],{"class":1309},[1086,10803,1684],{"class":1313},[1086,10805,6151],{"class":1309},[1086,10807,1700],{"class":1313},[1086,10809,1703],{"class":1299},[1086,10811,1400],{"class":1313},[1086,10813,2507],{"class":1096},[1086,10815,1364],{"class":1313},[1086,10817,10818,10820,10822,10824,10826,10828,10830,10832],{"class":1088,"line":1329},[1086,10819,1675],{"class":1299},[1086,10821,1678],{"class":1313},[1086,10823,6171],{"class":1309},[1086,10825,1700],{"class":1313},[1086,10827,1703],{"class":1299},[1086,10829,1400],{"class":1313},[1086,10831,6180],{"class":1096},[1086,10833,1364],{"class":1313},[1086,10835,10836,10838,10840,10842,10844,10846,10848,10850],{"class":1088,"line":1344},[1086,10837,1675],{"class":1299},[1086,10839,1678],{"class":1313},[1086,10841,6192],{"class":1309},[1086,10843,1700],{"class":1313},[1086,10845,1703],{"class":1299},[1086,10847,1400],{"class":1313},[1086,10849,6201],{"class":1096},[1086,10851,1364],{"class":1313},[1086,10853,10854],{"class":1088,"line":1356},[1086,10855,1378],{"emptyLinePlaceholder":21},[1086,10857,10858,10860,10862,10864,10866],{"class":1088,"line":1367},[1086,10859,3035],{"class":1556},[1086,10861,6214],{"class":1309},[1086,10863,1560],{"class":1313},[1086,10865,6219],{"class":1109},[1086,10867,2642],{"class":1309},[1086,10869,10870,10872,10874,10876,10878],{"class":1088,"line":1375},[1086,10871,3035],{"class":1556},[1086,10873,6228],{"class":1309},[1086,10875,1560],{"class":1313},[1086,10877,6233],{"class":1109},[1086,10879,2642],{"class":1309},[1086,10881,10883,10885,10887,10889,10891,10893,10895],{"class":10882,"line":1381},[1088,1538],[1086,10884,3035],{"class":1556},[1086,10886,1678],{"class":1313},[1086,10888,10540],{"class":1309},[1086,10890,1445],{"class":1313},[1086,10892,2596],{"class":1313},[1086,10894,10252],{"class":1109},[1086,10896,2642],{"class":1309},[1086,10898,10899],{"class":1088,"line":1392},[1086,10900,1378],{"emptyLinePlaceholder":21},[1086,10902,10903,10905,10907,10909,10911,10913,10915,10917,10919,10921,10923,10925,10927,10929,10931,10933,10935,10937,10939,10941],{"class":1088,"line":1408},[1086,10904,3035],{"class":1556},[1086,10906,1678],{"class":1313},[1086,10908,6253],{"class":1319},[1086,10910,1323],{"class":1313},[1086,10912,6258],{"class":1309},[1086,10914,1445],{"class":1313},[1086,10916,2596],{"class":1313},[1086,10918,2599],{"class":1299},[1086,10920,6267],{"class":1109},[1086,10922,1310],{"class":1309},[1086,10924,3680],{"class":1313},[1086,10926,6274],{"class":1096},[1086,10928,5389],{"class":1313},[1086,10930,6279],{"class":1309},[1086,10932,1776],{"class":1313},[1086,10934,6284],{"class":1309},[1086,10936,1776],{"class":1313},[1086,10938,1987],{"class":1309},[1086,10940,5398],{"class":1313},[1086,10942,1448],{"class":1309},[1086,10944,10945],{"class":1088,"line":1414},[1086,10946,1378],{"emptyLinePlaceholder":21},[1086,10948,10949,10951,10953,10955,10957,10959,10961],{"class":1088,"line":1419},[1086,10950,6301],{"class":1299},[1086,10952,1919],{"class":1309},[1086,10954,3540],{"class":1313},[1086,10956,6308],{"class":1309},[1086,10958,1776],{"class":1313},[1086,10960,6313],{"class":1309},[1086,10962,1314],{"class":1313},[1086,10964,10965,10967,10969,10971,10973,10975,10977,10979,10981,10983,10985,10987,10989,10991,10993,10995,10997,10999,11001],{"class":1088,"line":1442},[1086,10966,6320],{"class":1299},[1086,10968,2873],{"class":1109},[1086,10970,1310],{"class":1319},[1086,10972,1833],{"class":1313},[1086,10974,3562],{"class":1319},[1086,10976,1323],{"class":1313},[1086,10978,3568],{"class":3567},[1086,10980,1684],{"class":1313},[1086,10982,3573],{"class":1319},[1086,10984,1323],{"class":1313},[1086,10986,1400],{"class":1313},[1086,10988,3580],{"class":1096},[1086,10990,1338],{"class":1313},[1086,10992,1684],{"class":1313},[1086,10994,6349],{"class":1319},[1086,10996,1323],{"class":1313},[1086,10998,4173],{"class":4172},[1086,11000,1700],{"class":1313},[1086,11002,1448],{"class":1319},[1086,11004,11005],{"class":1088,"line":1947},[1086,11006,5405],{"class":1313},[1086,11008,11009],{"class":1088,"line":1974},[1086,11010,1378],{"emptyLinePlaceholder":21},[1086,11012,11013,11015,11017,11019,11021,11023,11025],{"class":1088,"line":2020},[1086,11014,3035],{"class":1556},[1086,11016,5140],{"class":1309},[1086,11018,1560],{"class":1313},[1086,11020,5145],{"class":1109},[1086,11022,1310],{"class":1309},[1086,11024,5150],{"class":1313},[1086,11026,1448],{"class":1309},[1086,11028,11029],{"class":1088,"line":2087},[1086,11030,1378],{"emptyLinePlaceholder":21},[1086,11032,11033,11035,11037,11039,11041,11043,11045],{"class":1088,"line":2157},[1086,11034,3035],{"class":1556},[1086,11036,6398],{"class":1309},[1086,11038,1560],{"class":1313},[1086,11040,1870],{"class":1313},[1086,11042,6171],{"class":1109},[1086,11044,1310],{"class":1309},[1086,11046,1314],{"class":1313},[1086,11048,11049,11051,11053,11055,11057,11059,11061,11063],{"class":1088,"line":2197},[1086,11050,1766],{"class":1319},[1086,11052,1323],{"class":1313},[1086,11054,6418],{"class":1309},[1086,11056,1776],{"class":1313},[1086,11058,3320],{"class":1309},[1086,11060,1776],{"class":1313},[1086,11062,1987],{"class":1309},[1086,11064,1341],{"class":1313},[1086,11066,11067,11069,11071,11073,11075,11077,11079,11081],{"class":1088,"line":2248},[1086,11068,1926],{"class":1319},[1086,11070,1323],{"class":1313},[1086,11072,6418],{"class":1309},[1086,11074,1776],{"class":1313},[1086,11076,3320],{"class":1309},[1086,11078,1776],{"class":1313},[1086,11080,1965],{"class":1309},[1086,11082,1341],{"class":1313},[1086,11084,11085,11087,11089,11091,11093,11095],{"class":1088,"line":2261},[1086,11086,6453],{"class":1319},[1086,11088,1323],{"class":1313},[1086,11090,1870],{"class":1313},[1086,11092,6141],{"class":1109},[1086,11094,1310],{"class":1309},[1086,11096,1314],{"class":1313},[1086,11098,11099,11101,11103,11105,11107,11109,11111,11113,11115,11117,11119,11121],{"class":1088,"line":2291},[1086,11100,6469],{"class":1319},[1086,11102,1323],{"class":1313},[1086,11104,3674],{"class":1313},[1086,11106,6274],{"class":1096},[1086,11108,5389],{"class":1313},[1086,11110,6308],{"class":1309},[1086,11112,1776],{"class":1313},[1086,11114,3320],{"class":1309},[1086,11116,1776],{"class":1313},[1086,11118,1987],{"class":1309},[1086,11120,5398],{"class":1313},[1086,11122,1341],{"class":1313},[1086,11124,11125,11127,11129],{"class":1088,"line":2297},[1086,11126,5287],{"class":1319},[1086,11128,1323],{"class":1313},[1086,11130,1389],{"class":1313},[1086,11132,11134,11136,11138,11140,11142,11144],{"class":11133,"line":2302},[1088,1538],[1086,11135,3657],{"class":1319},[1086,11137,1323],{"class":1313},[1086,11139,3261],{"class":1309},[1086,11141,1776],{"class":1313},[1086,11143,10632],{"class":1309},[1086,11145,11146],{"class":2664},"\u002F\u002F Pass the selected model\n",[1086,11148,11150],{"class":11149,"line":2334},[1088,1538],[1086,11151,4555],{"class":1313},[1086,11153,11155,11157,11159],{"class":11154,"line":2350},[1088,1538],[1086,11156,2387],{"class":1313},[1086,11158,1850],{"class":1309},[1086,11160,1341],{"class":1313},[1086,11162,11163,11165,11167,11169,11171],{"class":1088,"line":2368},[1086,11164,6505],{"class":1319},[1086,11166,1310],{"class":1313},[1086,11168,6510],{"class":1910},[1086,11170,1850],{"class":1313},[1086,11172,1389],{"class":1313},[1086,11174,11175,11177,11179,11181,11183,11185,11187,11189,11191,11193,11195],{"class":1088,"line":2384},[1086,11176,6526],{"class":1299},[1086,11178,1919],{"class":1319},[1086,11180,6510],{"class":1309},[1086,11182,1776],{"class":1313},[1086,11184,6535],{"class":1309},[1086,11186,3347],{"class":1313},[1086,11188,1400],{"class":1313},[1086,11190,4320],{"class":1096},[1086,11192,1338],{"class":1313},[1086,11194,3545],{"class":1319},[1086,11196,1314],{"class":1313},[1086,11198,11199,11201,11203,11205,11207,11209],{"class":1088,"line":2392},[1086,11200,6553],{"class":1109},[1086,11202,1310],{"class":1319},[1086,11204,1338],{"class":1313},[1086,11206,1755],{"class":1096},[1086,11208,1338],{"class":1313},[1086,11210,1448],{"class":1319},[1086,11212,11213],{"class":1088,"line":3372},[1086,11214,4555],{"class":1313},[1086,11216,11217],{"class":1088,"line":3389},[1086,11218,1411],{"class":1313},[1086,11220,11221,11223,11225,11227,11229],{"class":1088,"line":3421},[1086,11222,6579],{"class":1319},[1086,11224,1310],{"class":1313},[1086,11226,6584],{"class":1910},[1086,11228,1850],{"class":1313},[1086,11230,1389],{"class":1313},[1086,11232,11233,11235,11237,11239,11241],{"class":1088,"line":3434},[1086,11234,6594],{"class":1309},[1086,11236,1776],{"class":1313},[1086,11238,6599],{"class":1109},[1086,11240,1310],{"class":1319},[1086,11242,1314],{"class":1313},[1086,11244,11245,11247,11249,11251,11253,11255],{"class":1088,"line":3439},[1086,11246,6609],{"class":1319},[1086,11248,1323],{"class":1313},[1086,11250,1400],{"class":1313},[1086,11252,497],{"class":1096},[1086,11254,1338],{"class":1313},[1086,11256,1341],{"class":1313},[1086,11258,11259,11261,11263,11265,11267,11269],{"class":1088,"line":3445},[1086,11260,6625],{"class":1319},[1086,11262,1323],{"class":1313},[1086,11264,6630],{"class":1309},[1086,11266,1776],{"class":1313},[1086,11268,4472],{"class":1309},[1086,11270,1341],{"class":1313},[1086,11272,11273,11275,11277,11279,11281],{"class":1088,"line":3476},[1086,11274,6642],{"class":1319},[1086,11276,1323],{"class":1313},[1086,11278,1400],{"class":1313},[1086,11280,6584],{"class":1096},[1086,11282,1364],{"class":1313},[1086,11284,11285,11287],{"class":1088,"line":3520},[1086,11286,3375],{"class":1313},[1086,11288,1448],{"class":1319},[1086,11290,11291],{"class":1088,"line":3527},[1086,11292,3592],{"class":1313},[1086,11294,11295,11297],{"class":1088,"line":3532},[1086,11296,1445],{"class":1313},[1086,11298,1448],{"class":1309},[1086,11300,11301],{"class":1088,"line":3550},[1086,11302,1378],{"emptyLinePlaceholder":21},[1086,11304,11305,11307,11309,11311,11313,11315,11317,11319],{"class":1088,"line":3589},[1086,11306,6678],{"class":1556},[1086,11308,6681],{"class":1109},[1086,11310,1310],{"class":1313},[1086,11312,6686],{"class":1910},[1086,11314,1323],{"class":1313},[1086,11316,6691],{"class":1092},[1086,11318,1850],{"class":1313},[1086,11320,1389],{"class":1313},[1086,11322,11323,11325,11327,11329],{"class":1088,"line":3595},[1086,11324,6700],{"class":1309},[1086,11326,1776],{"class":1313},[1086,11328,6705],{"class":1109},[1086,11330,2642],{"class":1319},[1086,11332,11333,11335,11337,11339,11341,11343,11345,11347,11349],{"class":1088,"line":3600},[1086,11334,3535],{"class":1299},[1086,11336,1919],{"class":1319},[1086,11338,5199],{"class":1309},[1086,11340,1776],{"class":1313},[1086,11342,3320],{"class":1309},[1086,11344,1776],{"class":1313},[1086,11346,5208],{"class":1109},[1086,11348,5211],{"class":1319},[1086,11350,1314],{"class":1313},[1086,11352,11353,11355,11357,11359,11361,11363,11365,11367,11369,11371,11373,11375],{"class":1088,"line":3606},[1086,11354,6732],{"class":1309},[1086,11356,1776],{"class":1313},[1086,11358,6737],{"class":1109},[1086,11360,1310],{"class":1319},[1086,11362,1833],{"class":1313},[1086,11364,1687],{"class":1319},[1086,11366,1323],{"class":1313},[1086,11368,5343],{"class":1309},[1086,11370,1776],{"class":1313},[1086,11372,3320],{"class":1309},[1086,11374,1700],{"class":1313},[1086,11376,1448],{"class":1319},[1086,11378,11379,11381,11383,11385,11387],{"class":1088,"line":3626},[1086,11380,6760],{"class":1309},[1086,11382,1776],{"class":1313},[1086,11384,3320],{"class":1309},[1086,11386,2596],{"class":1313},[1086,11388,6769],{"class":1313},[1086,11390,11391],{"class":1088,"line":3654},[1086,11392,3592],{"class":1313},[1086,11394,11395],{"class":1088,"line":3666},[1086,11396,5405],{"class":1313},[1086,11398,11399],{"class":1088,"line":3685},[1086,11400,1378],{"emptyLinePlaceholder":21},[1086,11402,11403,11405,11407,11409,11411],{"class":1088,"line":3713},[1086,11404,6791],{"class":1109},[1086,11406,1310],{"class":1309},[1086,11408,1773],{"class":1313},[1086,11410,1793],{"class":1556},[1086,11412,1389],{"class":1313},[1086,11414,11415,11417,11419,11421,11423,11425,11427,11429,11431,11433,11435,11437,11439],{"class":1088,"line":3720},[1086,11416,3535],{"class":1299},[1086,11418,1919],{"class":1319},[1086,11420,6308],{"class":1309},[1086,11422,1776],{"class":1313},[1086,11424,3320],{"class":1309},[1086,11426,3846],{"class":1313},[1086,11428,1965],{"class":1309},[1086,11430,1776],{"class":1313},[1086,11432,3825],{"class":1309},[1086,11434,3347],{"class":1313},[1086,11436,3831],{"class":3567},[1086,11438,3545],{"class":1319},[1086,11440,1314],{"class":1313},[1086,11442,11443,11445,11447,11449],{"class":1088,"line":3725},[1086,11444,6732],{"class":1309},[1086,11446,1776],{"class":1313},[1086,11448,6836],{"class":1109},[1086,11450,2642],{"class":1319},[1086,11452,11453],{"class":1088,"line":3791},[1086,11454,3592],{"class":1313},[1086,11456,11457,11459],{"class":1088,"line":3796},[1086,11458,1445],{"class":1313},[1086,11460,1448],{"class":1309},[1086,11462,11463,11465,11467],{"class":1088,"line":3801},[1086,11464,1604],{"class":1313},[1086,11466,5117],{"class":1319},[1086,11468,1534],{"class":1313},[1086,11470,11471],{"class":1088,"line":3807},[1086,11472,1378],{"emptyLinePlaceholder":21},[1086,11474,11475,11477,11479],{"class":1088,"line":3836},[1086,11476,1528],{"class":1313},[1086,11478,1531],{"class":1319},[1086,11480,1534],{"class":1313},[1086,11482,11483,11485,11487,11489,11491,11493,11495,11497],{"class":1088,"line":3877},[1086,11484,1541],{"class":1313},[1086,11486,5432],{"class":1319},[1086,11488,5435],{"class":1556},[1086,11490,1560],{"class":1313},[1086,11492,1487],{"class":1313},[1086,11494,5442],{"class":1096},[1086,11496,1487],{"class":1313},[1086,11498,1534],{"class":1313},[1086,11500,11501,11503,11505,11507,11509],{"class":1088,"line":3906},[1086,11502,1550],{"class":1313},[1086,11504,1531],{"class":1319},[1086,11506,5455],{"class":1313},[1086,11508,8675],{"class":1556},[1086,11510,1534],{"class":1313},[1086,11512,11513,11515,11517],{"class":1088,"line":3918},[1086,11514,1574],{"class":1313},[1086,11516,8685],{"class":1319},[1086,11518,1580],{"class":1313},[1086,11520,11521,11523,11525],{"class":1088,"line":3934},[1086,11522,1585],{"class":1313},[1086,11524,1531],{"class":1319},[1086,11526,1534],{"class":1313},[1086,11528,11529,11531,11533,11535,11537],{"class":1088,"line":3948},[1086,11530,1550],{"class":1313},[1086,11532,1531],{"class":1319},[1086,11534,5455],{"class":1313},[1086,11536,5458],{"class":1556},[1086,11538,1534],{"class":1313},[1086,11540,11541,11543,11545,11547,11549,11551,11553,11555],{"class":1088,"line":3955},[1086,11542,1574],{"class":1313},[1086,11544,5467],{"class":1319},[1086,11546,5470],{"class":1556},[1086,11548,1560],{"class":1313},[1086,11550,1487],{"class":1313},[1086,11552,6913],{"class":1096},[1086,11554,1487],{"class":1313},[1086,11556,1534],{"class":1313},[1086,11558,11559,11561],{"class":1088,"line":3960},[1086,11560,5486],{"class":1313},[1086,11562,6924],{"class":1319},[1086,11564,11565,11567,11569,11571,11573],{"class":1088,"line":3965},[1086,11566,6929],{"class":1556},[1086,11568,1560],{"class":1313},[1086,11570,1487],{"class":1313},[1086,11572,6936],{"class":1096},[1086,11574,5543],{"class":1313},[1086,11576,11577,11579,11581,11583,11585],{"class":1088,"line":3971},[1086,11578,5549],{"class":1556},[1086,11580,1560],{"class":1313},[1086,11582,1487],{"class":1313},[1086,11584,6949],{"class":1096},[1086,11586,5543],{"class":1313},[1086,11588,11589],{"class":1088,"line":3988},[1086,11590,6956],{"class":1556},[1086,11592,11593,11595,11597,11599,11601],{"class":1088,"line":4010},[1086,11594,6961],{"class":1556},[1086,11596,1560],{"class":1313},[1086,11598,1487],{"class":1313},[1086,11600,6968],{"class":1096},[1086,11602,5543],{"class":1313},[1086,11604,11605],{"class":1088,"line":4028},[1086,11606,5609],{"class":1313},[1086,11608,11609,11611,11613,11615,11617,11619,11621,11623,11625,11627,11629],{"class":1088,"line":4036},[1086,11610,5615],{"class":1313},[1086,11612,1531],{"class":1319},[1086,11614,5455],{"class":1313},[1086,11616,371],{"class":1556},[1086,11618,1560],{"class":1313},[1086,11620,1487],{"class":1313},[1086,11622,1833],{"class":1313},[1086,11624,6993],{"class":1309},[1086,11626,1445],{"class":1313},[1086,11628,1487],{"class":1313},[1086,11630,1534],{"class":1313},[1086,11632,11633,11635,11637,11639,11641,11643,11645,11647,11649,11651,11653,11655,11657,11659,11661,11663,11665,11667,11669,11671,11673,11675,11677,11679,11681,11683,11685,11687,11689,11691,11693,11695],{"class":1088,"line":4053},[1086,11634,7004],{"class":1313},[1086,11636,1531],{"class":1319},[1086,11638,7009],{"class":1299},[1086,11640,1560],{"class":1313},[1086,11642,1487],{"class":1313},[1086,11644,7016],{"class":1309},[1086,11646,1684],{"class":1313},[1086,11648,7021],{"class":1309},[1086,11650,7024],{"class":1313},[1086,11652,2591],{"class":1309},[1086,11654,1776],{"class":1313},[1086,11656,2171],{"class":1309},[1086,11658,1487],{"class":1313},[1086,11660,7035],{"class":1313},[1086,11662,7038],{"class":1556},[1086,11664,1560],{"class":1313},[1086,11666,7043],{"class":1313},[1086,11668,4472],{"class":1309},[1086,11670,1776],{"class":1313},[1086,11672,1987],{"class":1309},[1086,11674,1445],{"class":1313},[1086,11676,7054],{"class":1096},[1086,11678,5389],{"class":1313},[1086,11680,7059],{"class":1309},[1086,11682,1776],{"class":1313},[1086,11684,6535],{"class":1309},[1086,11686,1445],{"class":1313},[1086,11688,7054],{"class":1096},[1086,11690,5389],{"class":1313},[1086,11692,7072],{"class":1309},[1086,11694,7075],{"class":1313},[1086,11696,1534],{"class":1313},[1086,11698,11699,11701],{"class":1088,"line":4074},[1086,11700,7082],{"class":1313},[1086,11702,7085],{"class":1319},[1086,11704,11705,11707,11709,11711,11713],{"class":1088,"line":4084},[1086,11706,7090],{"class":1556},[1086,11708,1560],{"class":1313},[1086,11710,1487],{"class":1313},[1086,11712,7097],{"class":1096},[1086,11714,5543],{"class":1313},[1086,11716,11717,11719,11721,11723,11725],{"class":1088,"line":4094},[1086,11718,7104],{"class":1556},[1086,11720,1560],{"class":1313},[1086,11722,1487],{"class":1313},[1086,11724,7111],{"class":1096},[1086,11726,5543],{"class":1313},[1086,11728,11729,11731,11733,11735,11737],{"class":1088,"line":4104},[1086,11730,7118],{"class":1556},[1086,11732,1560],{"class":1313},[1086,11734,1487],{"class":1313},[1086,11736,7125],{"class":1096},[1086,11738,5543],{"class":1313},[1086,11740,11741],{"class":1088,"line":4121},[1086,11742,7132],{"class":1313},[1086,11744,11745,11747],{"class":1088,"line":4132},[1086,11746,7137],{"class":1313},[1086,11748,7140],{"class":1319},[1086,11750,11751,11753,11755,11757,11759],{"class":1088,"line":4138},[1086,11752,7145],{"class":1556},[1086,11754,1560],{"class":1313},[1086,11756,1487],{"class":1313},[1086,11758,7111],{"class":1096},[1086,11760,5543],{"class":1313},[1086,11762,11763,11765,11767,11769,11771],{"class":1088,"line":4144},[1086,11764,7158],{"class":1556},[1086,11766,1560],{"class":1313},[1086,11768,1487],{"class":1313},[1086,11770,7125],{"class":1096},[1086,11772,5543],{"class":1313},[1086,11774,11775],{"class":1088,"line":4154},[1086,11776,7171],{"class":1313},[1086,11778,11779,11781,11783],{"class":1088,"line":4164},[1086,11780,7176],{"class":1313},[1086,11782,7179],{"class":1319},[1086,11784,1534],{"class":1313},[1086,11786,11787],{"class":1088,"line":4178},[1086,11788,1378],{"emptyLinePlaceholder":21},[1086,11790,11791,11793,11795,11797,11799,11801,11803,11805,11807],{"class":1088,"line":4193},[1086,11792,7082],{"class":1313},[1086,11794,1531],{"class":1319},[1086,11796,7194],{"class":1299},[1086,11798,1560],{"class":1313},[1086,11800,1487],{"class":1313},[1086,11802,7201],{"class":1109},[1086,11804,7204],{"class":1309},[1086,11806,1487],{"class":1313},[1086,11808,1534],{"class":1313},[1086,11810,11811,11813],{"class":1088,"line":4198},[1086,11812,7137],{"class":1313},[1086,11814,7140],{"class":1319},[1086,11816,11817,11819,11821,11823,11825],{"class":1088,"line":4203},[1086,11818,7219],{"class":1556},[1086,11820,1560],{"class":1313},[1086,11822,1487],{"class":1313},[1086,11824,7226],{"class":1096},[1086,11826,5543],{"class":1313},[1086,11828,11829,11831,11833,11835,11837],{"class":1088,"line":4213},[1086,11830,7145],{"class":1556},[1086,11832,1560],{"class":1313},[1086,11834,1487],{"class":1313},[1086,11836,7111],{"class":1096},[1086,11838,5543],{"class":1313},[1086,11840,11841,11843,11845,11847,11849],{"class":1088,"line":4229},[1086,11842,7158],{"class":1556},[1086,11844,1560],{"class":1313},[1086,11846,1487],{"class":1313},[1086,11848,7125],{"class":1096},[1086,11850,5543],{"class":1313},[1086,11852,11853],{"class":1088,"line":4244},[1086,11854,7171],{"class":1313},[1086,11856,11857,11859,11861,11863,11865,11867,11869,11871,11873,11875,11877,11879,11881],{"class":1088,"line":4250},[1086,11858,7137],{"class":1313},[1086,11860,976],{"class":1319},[1086,11862,7194],{"class":1556},[1086,11864,1560],{"class":1313},[1086,11866,1487],{"class":1313},[1086,11868,7271],{"class":1096},[1086,11870,1487],{"class":1313},[1086,11872,5470],{"class":1556},[1086,11874,1560],{"class":1313},[1086,11876,1487],{"class":1313},[1086,11878,7282],{"class":1096},[1086,11880,1487],{"class":1313},[1086,11882,1534],{"class":1313},[1086,11884,11885],{"class":1088,"line":4256},[1086,11886,7291],{"class":1309},[1086,11888,11889,11891,11893],{"class":1088,"line":4264},[1086,11890,7296],{"class":1313},[1086,11892,976],{"class":1319},[1086,11894,1534],{"class":1313},[1086,11896,11897,11899,11901],{"class":1088,"line":4269},[1086,11898,7176],{"class":1313},[1086,11900,1531],{"class":1319},[1086,11902,1534],{"class":1313},[1086,11904,11905,11907,11909],{"class":1088,"line":4275},[1086,11906,7313],{"class":1313},[1086,11908,1531],{"class":1319},[1086,11910,1534],{"class":1313},[1086,11912,11913,11915,11917],{"class":1088,"line":4295},[1086,11914,7322],{"class":1313},[1086,11916,1531],{"class":1319},[1086,11918,1534],{"class":1313},[1086,11920,11922,11924,11926],{"class":11921,"line":4310},[1088,1538],[1086,11923,5512],{"class":1313},[1086,11925,5088],{"class":1319},[1086,11927,1534],{"class":1313},[1086,11929,11931],{"class":11930,"line":4327},[1088,1538],[1086,11932,1378],{"emptyLinePlaceholder":21},[1086,11934,11936,11938],{"class":11935,"line":4350},[1088,1538],[1086,11937,5486],{"class":1313},[1086,11939,5528],{"class":1319},[1086,11941,11942,11944,11946,11948,11950],{"class":1088,"line":4361},[1086,11943,5534],{"class":1556},[1086,11945,1560],{"class":1313},[1086,11947,1487],{"class":1313},[1086,11949,5199],{"class":1096},[1086,11951,5543],{"class":1313},[1086,11953,11954,11956,11958,11960,11962],{"class":1088,"line":4369},[1086,11955,7361],{"class":1556},[1086,11957,1560],{"class":1313},[1086,11959,1487],{"class":1313},[1086,11961,7368],{"class":1096},[1086,11963,5543],{"class":1313},[1086,11965,11966,11968,11970,11972,11974],{"class":1088,"line":4375},[1086,11967,5564],{"class":1556},[1086,11969,1560],{"class":1313},[1086,11971,1487],{"class":1313},[1086,11973,5571],{"class":1096},[1086,11975,5543],{"class":1313},[1086,11977,11978,11980,11982,11984,11986],{"class":1088,"line":4380},[1086,11979,6961],{"class":1556},[1086,11981,1560],{"class":1313},[1086,11983,1487],{"class":1313},[1086,11985,7393],{"class":1096},[1086,11987,5543],{"class":1313},[1086,11989,11990,11992,11994,11996,11998],{"class":1088,"line":4403},[1086,11991,5594],{"class":1556},[1086,11993,1560],{"class":1313},[1086,11995,1487],{"class":1313},[1086,11997,7406],{"class":1096},[1086,11999,5543],{"class":1313},[1086,12001,12002],{"class":1088,"line":4409},[1086,12003,5609],{"class":1313},[1086,12005,12006,12008,12010,12012,12015],{"class":1088,"line":4429},[1086,12007,5615],{"class":1313},[1086,12009,1531],{"class":1319},[1086,12011,5455],{"class":1313},[1086,12013,12014],{"class":1556},"footer",[1086,12016,1534],{"class":1313},[1086,12018,12019,12021,12024,12027,12029,12031,12033,12035],{"class":1088,"line":4435},[1086,12020,7004],{"class":1313},[1086,12022,12023],{"class":1319},"ModelSelect",[1086,12025,12026],{"class":1556}," v-model",[1086,12028,1560],{"class":1313},[1086,12030,1487],{"class":1313},[1086,12032,4644],{"class":1096},[1086,12034,1487],{"class":1313},[1086,12036,1580],{"class":1313},[1086,12038,12039,12041,12043],{"class":1088,"line":4481},[1086,12040,7322],{"class":1313},[1086,12042,1531],{"class":1319},[1086,12044,1534],{"class":1313},[1086,12046,12047],{"class":1088,"line":4497},[1086,12048,1378],{"emptyLinePlaceholder":21},[1086,12050,12051,12053],{"class":1088,"line":4530},[1086,12052,5615],{"class":1313},[1086,12054,7419],{"class":1319},[1086,12056,12057,12059,12061,12063,12065],{"class":1088,"line":4544},[1086,12058,7424],{"class":1556},[1086,12060,1560],{"class":1313},[1086,12062,1487],{"class":1313},[1086,12064,6949],{"class":1096},[1086,12066,5543],{"class":1313},[1086,12068,12069,12071,12073,12075,12077],{"class":1088,"line":4552},[1086,12070,7437],{"class":1556},[1086,12072,1560],{"class":1313},[1086,12074,1487],{"class":1313},[1086,12076,5628],{"class":1096},[1086,12078,5543],{"class":1313},[1086,12080,12081,12083,12085,12087,12089],{"class":1088,"line":4558},[1086,12082,7450],{"class":1556},[1086,12084,1560],{"class":1313},[1086,12086,1487],{"class":1313},[1086,12088,7457],{"class":1096},[1086,12090,5543],{"class":1313},[1086,12092,12093,12095,12097,12099,12101],{"class":1088,"line":4565},[1086,12094,7464],{"class":1556},[1086,12096,1560],{"class":1313},[1086,12098,1487],{"class":1313},[1086,12100,7471],{"class":1096},[1086,12102,5543],{"class":1313},[1086,12104,12105],{"class":1088,"line":4570},[1086,12106,7478],{"class":1313},[1086,12108,12109,12111,12113],{"class":1088,"line":4588},[1086,12110,5512],{"class":1313},[1086,12112,5082],{"class":1319},[1086,12114,1534],{"class":1313},[1086,12116,12118,12120,12122],{"class":1088,"line":12117},114,[1086,12119,5646],{"class":1313},[1086,12121,5467],{"class":1319},[1086,12123,1534],{"class":1313},[1086,12125,12127,12129,12131],{"class":1088,"line":12126},115,[1086,12128,1585],{"class":1313},[1086,12130,1531],{"class":1319},[1086,12132,1534],{"class":1313},[1086,12134,12136,12138,12140],{"class":1088,"line":12135},116,[1086,12137,1595],{"class":1313},[1086,12139,5432],{"class":1319},[1086,12141,1534],{"class":1313},[1086,12143,12145,12147,12149],{"class":1088,"line":12144},117,[1086,12146,1604],{"class":1313},[1086,12148,1531],{"class":1319},[1086,12150,1534],{"class":1313},[980,12152,12154],{"id":12153},"going-further","Going further",[976,12156,12157],{},"You now have a working AI chatbot with database persistence! To take it further, consider adding:",[976,12159,12160],{},[994,12161,12162],{},"User Authentication",[976,12164,12165,12166,12171],{},"Add authentication with ",[1030,12167,12170],{"href":12168,"rel":12169},"https:\u002F\u002Fgithub.com\u002Fatinux\u002Fnuxt-auth-utils",[1034],"nuxt-auth-utils"," to let users access their chat history across devices and keep conversations private.",[976,12173,12174],{},[994,12175,12176],{},"AI Tools",[976,12178,12179,12180,12185],{},"Extend your chatbot with ",[1030,12181,12184],{"href":12182,"rel":12183},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-core\u002Ftools-and-tool-calling",[1034],"AI SDK tools"," that can fetch real-time data, generate charts, or interact with external APIs:",[1077,12187,12189],{"className":1290,"code":12188,"language":1292,"meta":1082,"style":1082},"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",[1036,12190,12191,12210,12228,12232,12247,12263,12280,12311,12319,12339,12344,12379,12383],{"__ignoreMap":1082},[1086,12192,12193,12195,12197,12200,12202,12204,12206,12208],{"class":1088,"line":1089},[1086,12194,1675],{"class":1299},[1086,12196,1678],{"class":1313},[1086,12198,12199],{"class":1309}," tool",[1086,12201,1700],{"class":1313},[1086,12203,1703],{"class":1299},[1086,12205,1400],{"class":1313},[1086,12207,2507],{"class":1096},[1086,12209,1364],{"class":1313},[1086,12211,12212,12214,12216,12218,12220,12222,12224,12226],{"class":1088,"line":1106},[1086,12213,1675],{"class":1299},[1086,12215,1678],{"class":1313},[1086,12217,2542],{"class":1309},[1086,12219,1700],{"class":1313},[1086,12221,1703],{"class":1299},[1086,12223,1400],{"class":1313},[1086,12225,2551],{"class":1096},[1086,12227,1364],{"class":1313},[1086,12229,12230],{"class":1088,"line":1329},[1086,12231,1378],{"emptyLinePlaceholder":21},[1086,12233,12234,12236,12239,12241,12243,12245],{"class":1088,"line":1344},[1086,12235,3035],{"class":1556},[1086,12237,12238],{"class":1309}," weatherTool ",[1086,12240,1560],{"class":1313},[1086,12242,12199],{"class":1109},[1086,12244,1310],{"class":1309},[1086,12246,1314],{"class":1313},[1086,12248,12249,12252,12254,12256,12259,12261],{"class":1088,"line":1356},[1086,12250,12251],{"class":1319},"  description",[1086,12253,1323],{"class":1313},[1086,12255,1400],{"class":1313},[1086,12257,12258],{"class":1096},"Get the current weather for a location",[1086,12260,1338],{"class":1313},[1086,12262,1341],{"class":1313},[1086,12264,12265,12268,12270,12272,12274,12276,12278],{"class":1088,"line":1367},[1086,12266,12267],{"class":1319},"  parameters",[1086,12269,1323],{"class":1313},[1086,12271,2542],{"class":1309},[1086,12273,1776],{"class":1313},[1086,12275,2614],{"class":1109},[1086,12277,1310],{"class":1309},[1086,12279,1314],{"class":1313},[1086,12281,12282,12285,12287,12289,12291,12293,12295,12297,12300,12302,12304,12307,12309],{"class":1088,"line":1375},[1086,12283,12284],{"class":1319},"    location",[1086,12286,1323],{"class":1313},[1086,12288,2542],{"class":1309},[1086,12290,1776],{"class":1313},[1086,12292,3234],{"class":1109},[1086,12294,1773],{"class":1309},[1086,12296,1776],{"class":1313},[1086,12298,12299],{"class":1109},"describe",[1086,12301,1310],{"class":1309},[1086,12303,1338],{"class":1313},[1086,12305,12306],{"class":1096},"The city name",[1086,12308,1338],{"class":1313},[1086,12310,1448],{"class":1309},[1086,12312,12313,12315,12317],{"class":1088,"line":1381},[1086,12314,2387],{"class":1313},[1086,12316,1850],{"class":1309},[1086,12318,1341],{"class":1313},[1086,12320,12321,12324,12326,12328,12330,12333,12335,12337],{"class":1088,"line":1392},[1086,12322,12323],{"class":1109},"  execute",[1086,12325,1323],{"class":1313},[1086,12327,3996],{"class":1556},[1086,12329,1907],{"class":1313},[1086,12331,12332],{"class":1910}," location",[1086,12334,1914],{"class":1313},[1086,12336,1793],{"class":1556},[1086,12338,1389],{"class":1313},[1086,12340,12341],{"class":1088,"line":1408},[1086,12342,12343],{"class":2664},"    \u002F\u002F Fetch weather data from an API\n",[1086,12345,12346,12349,12351,12353,12355,12358,12360,12363,12365,12368,12370,12372,12375,12377],{"class":1088,"line":1414},[1086,12347,12348],{"class":1299},"    return",[1086,12350,1678],{"class":1313},[1086,12352,12332],{"class":1309},[1086,12354,1684],{"class":1313},[1086,12356,12357],{"class":1319}," temperature",[1086,12359,1323],{"class":1313},[1086,12361,12362],{"class":3567}," 22",[1086,12364,1684],{"class":1313},[1086,12366,12367],{"class":1319}," condition",[1086,12369,1323],{"class":1313},[1086,12371,1400],{"class":1313},[1086,12373,12374],{"class":1096},"Sunny",[1086,12376,1338],{"class":1313},[1086,12378,3156],{"class":1313},[1086,12380,12381],{"class":1088,"line":1419},[1086,12382,3592],{"class":1313},[1086,12384,12385,12387],{"class":1088,"line":1442},[1086,12386,1445],{"class":1313},[1086,12388,1448],{"class":1309},[980,12390,12392],{"id":12391},"deploying-to-vercel","Deploying to Vercel",[976,12394,12395],{},"Deploy your chatbot to Vercel with zero configuration:",[1077,12397,12399],{"className":1079,"code":12398,"language":1081,"meta":1082,"style":1082},"npx vercel deploy\n",[1036,12400,12401],{"__ignoreMap":1082},[1086,12402,12403,12405,12408],{"class":1088,"line":1089},[1086,12404,1093],{"class":1092},[1086,12406,12407],{"class":1096}," vercel",[1086,12409,12410],{"class":1096}," deploy\n",[976,12412,12413],{},"Then, in the Vercel dashboard:",[988,12415,12416,12422],{},[991,12417,12418,12419,12421],{},"Enable ",[994,12420,4600],{}," and add credits so requests can be processed.",[991,12423,12424,12425,12428],{},"Add a ",[994,12426,12427],{},"Turso"," database from the Vercel Marketplace and connect it to your project (it will provision the database and add the required environment variables automatically).",[12430,12431,12432],"blockquote",{},[976,12433,12434,12435,12440,12441,12443],{},"Note: On Vercel, you ",[994,12436,12437,12438],{},"don’t need to manually add ",[1036,12439,1627],{}," — Vercel handles the gateway configuration for deployments. Keep using ",[1036,12442,1614],{}," locally for development.",[1450,12445,12447],{"to":1065,"target":12446},"_blank",[976,12448,12449,12450,1776],{},"Learn more about setting up AI Gateway in the ",[994,12451,12452],{},"Vercel AI Gateway documentation",[980,12454,12456],{"id":12455},"conclusion","Conclusion",[976,12458,12459],{},"You've built a complete AI chatbot with:",[988,12461,12462,12468,12474,12480,12485],{},[991,12463,12464,12467],{},[994,12465,12466],{},"A complete chat interface"," using Nuxt UI components",[991,12469,12470,12473],{},[994,12471,12472],{},"Real-time streaming responses"," with the AI SDK",[991,12475,12476,12479],{},[994,12477,12478],{},"Streaming Markdown rendering"," with Comark for rich content display",[991,12481,12482,12484],{},[994,12483,1014],{}," via AI Gateway",[991,12486,12487,12490],{},[994,12488,12489],{},"Database persistence"," with SQLite (local) \u002F Turso (production) and Drizzle ORM",[976,12492,12493],{},"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.",[976,12495,12496],{},[994,12497,12498],{},"Resources:",[988,12500,12501,12508,12515,12522,12528,12534],{},[991,12502,12503],{},[1030,12504,12507],{"href":12505,"rel":12506},"https:\u002F\u002Fui.nuxt.com\u002Fcomponents\u002Fchat",[1034],"Nuxt UI Chat Components",[991,12509,12510],{},[1030,12511,12514],{"href":12512,"rel":12513},"https:\u002F\u002Fhub.nuxt.com\u002Fdocs\u002Ffeatures\u002Fdatabase",[1034],"NuxtHub Database",[991,12516,12517],{},[1030,12518,12521],{"href":12519,"rel":12520},"https:\u002F\u002Fai-sdk.dev",[1034],"AI SDK Documentation",[991,12523,12524],{},[1030,12525,12527],{"href":1065,"rel":12526},[1034],"AI Gateway Documentation",[991,12529,12530],{},[1030,12531,12533],{"href":1032,"rel":12532},[1034],"Nuxt AI Chat Template",[991,12535,12536],{},[1030,12537,12539],{"href":1042,"rel":12538},[1034],"Vue AI Chat Template",[976,12541,12542],{},"We're excited to see what you'll build!",[12544,12545,12546],"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":1082,"searchDepth":1106,"depth":1106,"links":12548},[12549,12550,12551,12557,12562,12566,12567,12571,12572,12573,12578,12579,12580],{"id":982,"depth":1106,"text":983},{"id":1050,"depth":1106,"text":1051},{"id":1071,"depth":1106,"text":1072,"children":12552},[12553,12554,12555,12556],{"id":1116,"depth":1329,"text":1117},{"id":1276,"depth":1329,"text":1277},{"id":1505,"depth":1329,"text":1506},{"id":1644,"depth":1329,"text":1645},{"id":2430,"depth":1106,"text":2431,"children":12558},[12559,12560,12561],{"id":2442,"depth":1329,"text":2443},{"id":2826,"depth":1329,"text":2827},{"id":4691,"depth":1329,"text":4692},{"id":5073,"depth":1106,"text":5074,"children":12563},[12564,12565],{"id":5092,"depth":1329,"text":5093},{"id":5709,"depth":1329,"text":5710},{"id":6081,"depth":1106,"text":6082},{"id":7674,"depth":1106,"text":7675,"children":12568},[12569,12570],{"id":7681,"depth":1329,"text":7682},{"id":7841,"depth":1329,"text":7842},{"id":8348,"depth":1106,"text":8349},{"id":8891,"depth":1106,"text":8892},{"id":10213,"depth":1106,"text":10214,"children":12574},[12575,12576,12577],{"id":10224,"depth":1329,"text":10225},{"id":10496,"depth":1329,"text":10497},{"id":10755,"depth":1329,"text":10756},{"id":12153,"depth":1106,"text":12154},{"id":12391,"depth":1106,"text":12392},{"id":12455,"depth":1106,"text":12456},"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":12586},"Tutorial","\u002Fblog\u002Fhow-to-build-an-ai-chat",{"title":960,"description":12582},"blog\u002Fhow-to-build-an-ai-chat","niwtEdHQJaUBnPqldgEx0ODg9tOUK75ezMtfPw31Y0Q",1776346480323]