[{"data":1,"prerenderedAt":12597},["ShallowReactive",2],{"navigation":3,"-blog-how-to-build-an-ai-chat":964},[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":963},"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,954,959],{"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,"badge":953},"Prompt","\u002Fdocs\u002Ftypography\u002Fprompt","docs\u002F4.typography\u002Fprompt","Display pre-built AI prompts with one-click copy and IDE integration.","Soon",{"title":955,"path":956,"stem":957,"framework":16,"category":887,"description":958},"Steps","\u002Fdocs\u002Ftypography\u002Fsteps","docs\u002F4.typography\u002Fsteps","Transform headings into numbered step-by-step guides and tutorials.",{"title":778,"path":960,"stem":961,"framework":16,"category":887,"description":962},"\u002Fdocs\u002Ftypography\u002Ftabs","docs\u002F4.typography\u002Ftabs","Organize related content in interactive tabbed interfaces.","i-lucide-square-pilcrow",{"id":965,"title":966,"authors":967,"body":978,"date":12587,"description":12588,"extension":12589,"image":12590,"meta":12591,"navigation":36,"path":12593,"seo":12594,"stem":12595,"__hash__":12596},"posts\u002Fblog\u002Fhow-to-build-an-ai-chat.md","Build an AI Chatbot with Nuxt, Nuxt UI, and AI SDK",[968,973],{"name":969,"avatar":970,"to":972},"Hugo Richard",{"src":971},"https:\u002F\u002Fgithub.com\u002Fhugorcd.png","https:\u002F\u002Fx.com\u002Fhugorcd",{"name":974,"avatar":975,"to":977},"Benjamin Canac",{"src":976},"https:\u002F\u002Fgithub.com\u002Fbenjamincanac.png","https:\u002F\u002Fx.com\u002Fbenjamincanac",{"type":979,"value":980,"toc":12553},"minimark",[981,985,990,993,1028,1054,1058,1061,1075,1079,1082,1119,1124,1127,1280,1284,1291,1455,1467,1470,1509,1513,1520,1615,1622,1639,1648,1652,1666,2403,2406,2424,2434,2438,2446,2450,2461,2830,2834,2861,4599,4602,4607,4614,4619,4630,4635,4644,4662,4667,4682,4695,4699,4702,5077,5081,5096,5100,5108,5681,5688,5713,5717,5745,5942,5949,5952,6085,6089,6107,7525,7528,7533,7544,7582,7597,7602,7609,7623,7628,7655,7660,7667,7678,7682,7685,7689,7692,7845,7849,7874,8352,8356,8895,8899,10208,10217,10221,10228,10232,10242,10500,10504,10512,10759,10763,10766,12157,12161,12164,12169,12178,12183,12192,12395,12399,12402,12417,12420,12435,12450,12459,12463,12466,12497,12500,12505,12546,12549],[982,983,984],"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.",[986,987,989],"h2",{"id":988},"what-were-building","What we're building",[982,991,992],{},"By the end of this tutorial, you'll have a fully functional AI chatbot with:",[994,995,996,1004,1010,1016,1022],"ul",{},[997,998,999,1003],"li",{},[1000,1001,1002],"strong",{},"Streaming responses"," that appear in real-time as the AI generates them",[997,1005,1006,1009],{},[1000,1007,1008],{},"A beautiful chat interface"," built with Nuxt UI's purpose-built chat components",[997,1011,1012,1015],{},[1000,1013,1014],{},"Markdown rendering"," for rich AI responses with code highlighting",[997,1017,1018,1021],{},[1000,1019,1020],{},"Multi-model support"," allowing users to switch between OpenAI, Anthropic, and Google models",[997,1023,1024,1027],{},[1000,1025,1026],{},"Server-side AI integration"," using Nitro API routes and the AI SDK",[1029,1030,1032],"callout",{"icon":1031},"i-simple-icons-github",[982,1033,1034,1035,1045,1046,1053],{},"Check out the ",[1036,1037,1041],"a",{"href":1038,"rel":1039},"https:\u002F\u002Fgithub.com\u002Fnuxt-ui-templates\u002Fchat",[1040],"nofollow",[1042,1043,1044],"code",{},"Nuxt"," and ",[1036,1047,1050],{"href":1048,"rel":1049},"https:\u002F\u002Fgithub.com\u002Fnuxt-ui-templates\u002Fchat-vue",[1040],[1042,1051,1052],{},"Vue"," AI Chat templates on GitHub for production-ready implementations with authentication, database persistence, and more.",[986,1055,1057],{"id":1056},"prerequisites","Prerequisites",[982,1059,1060],{},"Before we start, make sure you have:",[994,1062,1063,1066],{},[997,1064,1065],{},"Node.js 20+ installed",[997,1067,1068,1069,1074],{},"A ",[1036,1070,1073],{"href":1071,"rel":1072},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fai-gateway",[1040],"Vercel AI Gateway"," API key (provides access to multiple AI providers through a single endpoint)",[986,1076,1078],{"id":1077},"project-setup","Project setup",[982,1080,1081],{},"Start by creating a new Nuxt project:",[1083,1084,1089],"pre",{"className":1085,"code":1086,"language":1087,"meta":1088,"style":1088},"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","",[1042,1090,1091,1110],{"__ignoreMap":1088},[1092,1093,1096,1100,1104,1107],"span",{"class":1094,"line":1095},"line",1,[1092,1097,1099],{"class":1098},"sBMFI","npx",[1092,1101,1103],{"class":1102},"sfazB"," nuxi@latest",[1092,1105,1106],{"class":1102}," init",[1092,1108,1109],{"class":1102}," nuxt-ai-chat\n",[1092,1111,1113,1117],{"class":1094,"line":1112},2,[1092,1114,1116],{"class":1115},"s2Zo4","cd",[1092,1118,1109],{"class":1102},[1120,1121,1123],"h3",{"id":1122},"installing-dependencies","Installing dependencies",[982,1125,1126],{},"Install Nuxt UI and the AI-specific dependencies:",[1128,1129,1131,1177,1211,1246],"code-group",{"sync":1130},"pm",[1083,1132,1135],{"className":1085,"code":1133,"filename":1134,"language":1087,"meta":1088,"style":1088},"pnpm add @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","pnpm",[1042,1136,1137],{"__ignoreMap":1088},[1092,1138,1139,1141,1144,1147,1150,1153,1156,1159,1162,1165,1168,1171,1174],{"class":1094,"line":1095},[1092,1140,1134],{"class":1098},[1092,1142,1143],{"class":1102}," add",[1092,1145,1146],{"class":1102}," @nuxt\u002Fui",[1092,1148,1149],{"class":1102}," tailwindcss",[1092,1151,1152],{"class":1102}," @comark\u002Fnuxt",[1092,1154,1155],{"class":1102}," @shikijs\u002Flangs",[1092,1157,1158],{"class":1102}," @nuxthub\u002Fcore",[1092,1160,1161],{"class":1102}," drizzle-orm",[1092,1163,1164],{"class":1102}," drizzle-kit",[1092,1166,1167],{"class":1102}," @libsql\u002Fclient",[1092,1169,1170],{"class":1102}," ai",[1092,1172,1173],{"class":1102}," @ai-sdk\u002Fvue",[1092,1175,1176],{"class":1102}," zod\n",[1083,1178,1181],{"className":1085,"code":1179,"filename":1180,"language":1087,"meta":1088,"style":1088},"yarn add @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","yarn",[1042,1182,1183],{"__ignoreMap":1088},[1092,1184,1185,1187,1189,1191,1193,1195,1197,1199,1201,1203,1205,1207,1209],{"class":1094,"line":1095},[1092,1186,1180],{"class":1098},[1092,1188,1143],{"class":1102},[1092,1190,1146],{"class":1102},[1092,1192,1149],{"class":1102},[1092,1194,1152],{"class":1102},[1092,1196,1155],{"class":1102},[1092,1198,1158],{"class":1102},[1092,1200,1161],{"class":1102},[1092,1202,1164],{"class":1102},[1092,1204,1167],{"class":1102},[1092,1206,1170],{"class":1102},[1092,1208,1173],{"class":1102},[1092,1210,1176],{"class":1102},[1083,1212,1215],{"className":1085,"code":1213,"filename":1214,"language":1087,"meta":1088,"style":1088},"npm install @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","npm",[1042,1216,1217],{"__ignoreMap":1088},[1092,1218,1219,1221,1224,1226,1228,1230,1232,1234,1236,1238,1240,1242,1244],{"class":1094,"line":1095},[1092,1220,1214],{"class":1098},[1092,1222,1223],{"class":1102}," install",[1092,1225,1146],{"class":1102},[1092,1227,1149],{"class":1102},[1092,1229,1152],{"class":1102},[1092,1231,1155],{"class":1102},[1092,1233,1158],{"class":1102},[1092,1235,1161],{"class":1102},[1092,1237,1164],{"class":1102},[1092,1239,1167],{"class":1102},[1092,1241,1170],{"class":1102},[1092,1243,1173],{"class":1102},[1092,1245,1176],{"class":1102},[1083,1247,1250],{"className":1085,"code":1248,"filename":1249,"language":1087,"meta":1088,"style":1088},"bun add @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","bun",[1042,1251,1252],{"__ignoreMap":1088},[1092,1253,1254,1256,1258,1260,1262,1264,1266,1268,1270,1272,1274,1276,1278],{"class":1094,"line":1095},[1092,1255,1249],{"class":1098},[1092,1257,1143],{"class":1102},[1092,1259,1146],{"class":1102},[1092,1261,1149],{"class":1102},[1092,1263,1152],{"class":1102},[1092,1265,1155],{"class":1102},[1092,1267,1158],{"class":1102},[1092,1269,1161],{"class":1102},[1092,1271,1164],{"class":1102},[1092,1273,1167],{"class":1102},[1092,1275,1170],{"class":1102},[1092,1277,1173],{"class":1102},[1092,1279,1176],{"class":1102},[1120,1281,1283],{"id":1282},"configuration","Configuration",[982,1285,1286,1287,1290],{},"Update your ",[1042,1288,1289],{},"nuxt.config.ts"," to register the modules:",[1292,1293,1294],"code-tree-intersection",{},[1083,1295,1299],{"className":1296,"code":1297,"filename":1289,"language":1298,"meta":1088,"style":1088},"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",[1042,1300,1301,1321,1333,1348,1360,1371,1379,1385,1396,1412,1418,1423,1446],{"__ignoreMap":1088},[1092,1302,1303,1307,1310,1313,1317],{"class":1094,"line":1095},[1092,1304,1306],{"class":1305},"s7zQu","export",[1092,1308,1309],{"class":1305}," default",[1092,1311,1312],{"class":1115}," defineNuxtConfig",[1092,1314,1316],{"class":1315},"sTEyZ","(",[1092,1318,1320],{"class":1319},"sMK4o","{\n",[1092,1322,1323,1327,1330],{"class":1094,"line":1112},[1092,1324,1326],{"class":1325},"swJcz","  modules",[1092,1328,1329],{"class":1319},":",[1092,1331,1332],{"class":1315}," [\n",[1092,1334,1336,1339,1342,1345],{"class":1094,"line":1335},3,[1092,1337,1338],{"class":1319},"    '",[1092,1340,1341],{"class":1102},"@nuxt\u002Fui",[1092,1343,1344],{"class":1319},"'",[1092,1346,1347],{"class":1319},",\n",[1092,1349,1351,1353,1356,1358],{"class":1094,"line":1350},4,[1092,1352,1338],{"class":1319},[1092,1354,1355],{"class":1102},"@comark\u002Fnuxt",[1092,1357,1344],{"class":1319},[1092,1359,1347],{"class":1319},[1092,1361,1363,1365,1368],{"class":1094,"line":1362},5,[1092,1364,1338],{"class":1319},[1092,1366,1367],{"class":1102},"@nuxthub\u002Fcore",[1092,1369,1370],{"class":1319},"'\n",[1092,1372,1374,1377],{"class":1094,"line":1373},6,[1092,1375,1376],{"class":1315},"  ]",[1092,1378,1347],{"class":1319},[1092,1380,1382],{"class":1094,"line":1381},7,[1092,1383,1384],{"emptyLinePlaceholder":21},"\n",[1092,1386,1388,1391,1393],{"class":1094,"line":1387},8,[1092,1389,1390],{"class":1325},"  hub",[1092,1392,1329],{"class":1319},[1092,1394,1395],{"class":1319}," {\n",[1092,1397,1399,1402,1404,1407,1410],{"class":1094,"line":1398},9,[1092,1400,1401],{"class":1325},"    db",[1092,1403,1329],{"class":1319},[1092,1405,1406],{"class":1319}," '",[1092,1408,1409],{"class":1102},"sqlite",[1092,1411,1370],{"class":1319},[1092,1413,1415],{"class":1094,"line":1414},10,[1092,1416,1417],{"class":1319},"  },\n",[1092,1419,1421],{"class":1094,"line":1420},11,[1092,1422,1384],{"emptyLinePlaceholder":21},[1092,1424,1426,1429,1431,1434,1436,1439,1441,1444],{"class":1094,"line":1425},12,[1092,1427,1428],{"class":1325},"  css",[1092,1430,1329],{"class":1319},[1092,1432,1433],{"class":1315}," [",[1092,1435,1344],{"class":1319},[1092,1437,1438],{"class":1102},"~\u002Fassets\u002Fcss\u002Fmain.css",[1092,1440,1344],{"class":1319},[1092,1442,1443],{"class":1315},"]",[1092,1445,1347],{"class":1319},[1092,1447,1449,1452],{"class":1094,"line":1448},13,[1092,1450,1451],{"class":1319},"}",[1092,1453,1454],{"class":1315},")\n",[1456,1457,1458],"note",{"to":859},[982,1459,1460,1462,1463,1466],{},[1042,1461,1355],{}," automatically enables Nuxt UI's ",[1036,1464,1465],{"href":859},"prose components",", so Markdown rendered by Comark is styled to match your theme.",[982,1468,1469],{},"Create the main CSS file to import Tailwind CSS and Nuxt UI:",[1292,1471,1472],{},[1083,1473,1478],{"className":1474,"code":1475,"filename":1476,"language":1477,"meta":1088,"style":1088},"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",[1042,1479,1480,1497],{"__ignoreMap":1088},[1092,1481,1482,1485,1488,1491,1494],{"class":1094,"line":1095},[1092,1483,1484],{"class":1305},"@import",[1092,1486,1487],{"class":1319}," \"",[1092,1489,1490],{"class":1102},"tailwindcss",[1092,1492,1493],{"class":1319},"\"",[1092,1495,1496],{"class":1319},";\n",[1092,1498,1499,1501,1503,1505,1507],{"class":1094,"line":1112},[1092,1500,1484],{"class":1305},[1092,1502,1487],{"class":1319},[1092,1504,1341],{"class":1102},[1092,1506,1493],{"class":1319},[1092,1508,1496],{"class":1319},[1120,1510,1512],{"id":1511},"setting-up-the-app","Setting up the app",[982,1514,1515,1516,1519],{},"Nuxt UI requires wrapping your app with ",[1042,1517,1518],{},"UApp"," for modals, toasts, and overlays to work properly:",[1292,1521,1522],{},[1083,1523,1528],{"className":1524,"code":1525,"filename":1526,"highlights":1527,"language":34,"meta":1088,"style":1088},"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",[1112,1373],[1042,1529,1530,1541,1552,1576,1587,1596,1606],{"__ignoreMap":1088},[1092,1531,1532,1535,1538],{"class":1094,"line":1095},[1092,1533,1534],{"class":1319},"\u003C",[1092,1536,1537],{"class":1325},"template",[1092,1539,1540],{"class":1319},">\n",[1092,1542,1545,1548,1550],{"class":1543,"line":1112},[1094,1544],"highlight",[1092,1546,1547],{"class":1319},"  \u003C",[1092,1549,1518],{"class":1325},[1092,1551,1540],{"class":1319},[1092,1553,1554,1557,1560,1564,1567,1569,1572,1574],{"class":1094,"line":1335},[1092,1555,1556],{"class":1319},"    \u003C",[1092,1558,1559],{"class":1325},"UDashboardGroup",[1092,1561,1563],{"class":1562},"spNyl"," unit",[1092,1565,1566],{"class":1319},"=",[1092,1568,1493],{"class":1319},[1092,1570,1571],{"class":1102},"rem",[1092,1573,1493],{"class":1319},[1092,1575,1540],{"class":1319},[1092,1577,1578,1581,1584],{"class":1094,"line":1350},[1092,1579,1580],{"class":1319},"      \u003C",[1092,1582,1583],{"class":1325},"NuxtPage",[1092,1585,1586],{"class":1319}," \u002F>\n",[1092,1588,1589,1592,1594],{"class":1094,"line":1362},[1092,1590,1591],{"class":1319},"    \u003C\u002F",[1092,1593,1559],{"class":1325},[1092,1595,1540],{"class":1319},[1092,1597,1599,1602,1604],{"class":1598,"line":1373},[1094,1544],[1092,1600,1601],{"class":1319},"  \u003C\u002F",[1092,1603,1518],{"class":1325},[1092,1605,1540],{"class":1319},[1092,1607,1608,1611,1613],{"class":1094,"line":1381},[1092,1609,1610],{"class":1319},"\u003C\u002F",[1092,1612,1537],{"class":1325},[1092,1614,1540],{"class":1319},[982,1616,1617,1618,1621],{},"Create a ",[1042,1619,1620],{},".env"," file with your AI Gateway API key:",[1292,1623,1624],{},[1083,1625,1627],{"className":1085,"code":1626,"filename":1620,"language":1087,"meta":1088,"style":1088},"AI_GATEWAY_API_KEY=your-api-key-here\n",[1042,1628,1629],{"__ignoreMap":1088},[1092,1630,1631,1634,1636],{"class":1094,"line":1095},[1092,1632,1633],{"class":1315},"AI_GATEWAY_API_KEY",[1092,1635,1566],{"class":1319},[1092,1637,1638],{"class":1102},"your-api-key-here\n",[1456,1640,1641],{},[982,1642,1643,1644,1647],{},"With ",[1036,1645,1073],{"href":1071,"rel":1646},[1040],", 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.",[1120,1649,1651],{"id":1650},"setting-up-the-database","Setting up the database",[982,1653,1654,1659,1660,1665],{},[1036,1655,1658],{"href":1656,"rel":1657},"https:\u002F\u002Fhub.nuxt.com",[1040],"NuxtHub"," provides a zero-config database powered by ",[1036,1661,1664],{"href":1662,"rel":1663},"https:\u002F\u002Form.drizzle.team",[1040],"Drizzle ORM",". Here is the schema for the chat application:",[1292,1667,1668],{},[1669,1670,1671],"code-collapse",{},[1083,1672,1675],{"className":1296,"code":1673,"filename":1674,"language":1298,"meta":1088,"style":1088},"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",[1042,1676,1677,1717,1737,1741,1768,1813,1826,1883,1889,1893,1928,1940,1947,1951,1978,2024,2091,2161,2201,2252,2265,2295,2301,2306,2338,2354,2372,2388,2396],{"__ignoreMap":1088},[1092,1678,1679,1682,1685,1688,1691,1694,1696,1699,1701,1704,1707,1710,1712,1715],{"class":1094,"line":1095},[1092,1680,1681],{"class":1305},"import",[1092,1683,1684],{"class":1319}," {",[1092,1686,1687],{"class":1315}," sqliteTable",[1092,1689,1690],{"class":1319},",",[1092,1692,1693],{"class":1315}," text",[1092,1695,1690],{"class":1319},[1092,1697,1698],{"class":1315}," integer",[1092,1700,1690],{"class":1319},[1092,1702,1703],{"class":1315}," index",[1092,1705,1706],{"class":1319}," }",[1092,1708,1709],{"class":1305}," from",[1092,1711,1406],{"class":1319},[1092,1713,1714],{"class":1102},"drizzle-orm\u002Fsqlite-core",[1092,1716,1370],{"class":1319},[1092,1718,1719,1721,1723,1726,1728,1730,1732,1735],{"class":1094,"line":1112},[1092,1720,1681],{"class":1305},[1092,1722,1684],{"class":1319},[1092,1724,1725],{"class":1315}," relations",[1092,1727,1706],{"class":1319},[1092,1729,1709],{"class":1305},[1092,1731,1406],{"class":1319},[1092,1733,1734],{"class":1102},"drizzle-orm",[1092,1736,1370],{"class":1319},[1092,1738,1739],{"class":1094,"line":1335},[1092,1740,1384],{"emptyLinePlaceholder":21},[1092,1742,1743,1745,1748,1751,1753,1755,1757,1759,1762,1764,1766],{"class":1094,"line":1350},[1092,1744,1306],{"class":1305},[1092,1746,1747],{"class":1562}," const",[1092,1749,1750],{"class":1315}," chats ",[1092,1752,1566],{"class":1319},[1092,1754,1687],{"class":1115},[1092,1756,1316],{"class":1315},[1092,1758,1344],{"class":1319},[1092,1760,1761],{"class":1102},"chats",[1092,1763,1344],{"class":1319},[1092,1765,1690],{"class":1319},[1092,1767,1395],{"class":1319},[1092,1769,1770,1773,1775,1777,1780,1783,1786,1788,1790,1793,1795,1797,1800,1803,1805,1808,1811],{"class":1094,"line":1362},[1092,1771,1772],{"class":1325},"  id",[1092,1774,1329],{"class":1319},[1092,1776,1693],{"class":1115},[1092,1778,1779],{"class":1315},"()",[1092,1781,1782],{"class":1319},".",[1092,1784,1785],{"class":1115},"primaryKey",[1092,1787,1779],{"class":1315},[1092,1789,1782],{"class":1319},[1092,1791,1792],{"class":1115},"$defaultFn",[1092,1794,1316],{"class":1315},[1092,1796,1779],{"class":1319},[1092,1798,1799],{"class":1562}," =>",[1092,1801,1802],{"class":1315}," crypto",[1092,1804,1782],{"class":1319},[1092,1806,1807],{"class":1115},"randomUUID",[1092,1809,1810],{"class":1315},"())",[1092,1812,1347],{"class":1319},[1092,1814,1815,1818,1820,1822,1824],{"class":1094,"line":1373},[1092,1816,1817],{"class":1325},"  title",[1092,1819,1329],{"class":1319},[1092,1821,1693],{"class":1115},[1092,1823,1779],{"class":1315},[1092,1825,1347],{"class":1319},[1092,1827,1828,1831,1833,1835,1837,1840,1843,1845,1847,1850,1852,1854,1857,1859,1862,1864,1866,1868,1870,1872,1874,1877,1880],{"class":1094,"line":1381},[1092,1829,1830],{"class":1325},"  createdAt",[1092,1832,1329],{"class":1319},[1092,1834,1698],{"class":1115},[1092,1836,1316],{"class":1315},[1092,1838,1839],{"class":1319},"{",[1092,1841,1842],{"class":1325}," mode",[1092,1844,1329],{"class":1319},[1092,1846,1406],{"class":1319},[1092,1848,1849],{"class":1102},"timestamp",[1092,1851,1344],{"class":1319},[1092,1853,1706],{"class":1319},[1092,1855,1856],{"class":1315},")",[1092,1858,1782],{"class":1319},[1092,1860,1861],{"class":1115},"notNull",[1092,1863,1779],{"class":1315},[1092,1865,1782],{"class":1319},[1092,1867,1792],{"class":1115},[1092,1869,1316],{"class":1315},[1092,1871,1779],{"class":1319},[1092,1873,1799],{"class":1562},[1092,1875,1876],{"class":1319}," new",[1092,1878,1879],{"class":1115}," Date",[1092,1881,1882],{"class":1315},"())\n",[1092,1884,1885,1887],{"class":1094,"line":1387},[1092,1886,1451],{"class":1319},[1092,1888,1454],{"class":1315},[1092,1890,1891],{"class":1094,"line":1398},[1092,1892,1384],{"emptyLinePlaceholder":21},[1092,1894,1895,1897,1899,1902,1904,1906,1909,1911,1914,1918,1921,1923,1926],{"class":1094,"line":1414},[1092,1896,1306],{"class":1305},[1092,1898,1747],{"class":1562},[1092,1900,1901],{"class":1315}," chatsRelations ",[1092,1903,1566],{"class":1319},[1092,1905,1725],{"class":1115},[1092,1907,1908],{"class":1315},"(chats",[1092,1910,1690],{"class":1319},[1092,1912,1913],{"class":1319}," ({",[1092,1915,1917],{"class":1916},"sHdIc"," many",[1092,1919,1920],{"class":1319}," })",[1092,1922,1799],{"class":1562},[1092,1924,1925],{"class":1315}," (",[1092,1927,1320],{"class":1319},[1092,1929,1930,1933,1935,1937],{"class":1094,"line":1420},[1092,1931,1932],{"class":1325},"  messages",[1092,1934,1329],{"class":1319},[1092,1936,1917],{"class":1115},[1092,1938,1939],{"class":1315},"(messages)\n",[1092,1941,1942,1944],{"class":1094,"line":1425},[1092,1943,1451],{"class":1319},[1092,1945,1946],{"class":1315},"))\n",[1092,1948,1949],{"class":1094,"line":1448},[1092,1950,1384],{"emptyLinePlaceholder":21},[1092,1952,1954,1956,1958,1961,1963,1965,1967,1969,1972,1974,1976],{"class":1094,"line":1953},14,[1092,1955,1306],{"class":1305},[1092,1957,1747],{"class":1562},[1092,1959,1960],{"class":1315}," messages ",[1092,1962,1566],{"class":1319},[1092,1964,1687],{"class":1115},[1092,1966,1316],{"class":1315},[1092,1968,1344],{"class":1319},[1092,1970,1971],{"class":1102},"messages",[1092,1973,1344],{"class":1319},[1092,1975,1690],{"class":1319},[1092,1977,1395],{"class":1319},[1092,1979,1981,1983,1985,1987,1989,1991,1994,1996,1998,2000,2002,2004,2006,2008,2010,2012,2014,2016,2018,2020,2022],{"class":1094,"line":1980},15,[1092,1982,1772],{"class":1325},[1092,1984,1329],{"class":1319},[1092,1986,1693],{"class":1115},[1092,1988,1316],{"class":1315},[1092,1990,1344],{"class":1319},[1092,1992,1993],{"class":1102},"id",[1092,1995,1344],{"class":1319},[1092,1997,1856],{"class":1315},[1092,1999,1782],{"class":1319},[1092,2001,1785],{"class":1115},[1092,2003,1779],{"class":1315},[1092,2005,1782],{"class":1319},[1092,2007,1792],{"class":1115},[1092,2009,1316],{"class":1315},[1092,2011,1779],{"class":1319},[1092,2013,1799],{"class":1562},[1092,2015,1802],{"class":1315},[1092,2017,1782],{"class":1319},[1092,2019,1807],{"class":1115},[1092,2021,1810],{"class":1315},[1092,2023,1347],{"class":1319},[1092,2025,2027,2030,2032,2034,2036,2038,2041,2043,2045,2047,2049,2051,2053,2056,2058,2060,2062,2065,2067,2069,2071,2073,2076,2078,2080,2083,2085,2087,2089],{"class":1094,"line":2026},16,[1092,2028,2029],{"class":1325},"  chatId",[1092,2031,1329],{"class":1319},[1092,2033,1693],{"class":1115},[1092,2035,1316],{"class":1315},[1092,2037,1344],{"class":1319},[1092,2039,2040],{"class":1102},"chat_id",[1092,2042,1344],{"class":1319},[1092,2044,1856],{"class":1315},[1092,2046,1782],{"class":1319},[1092,2048,1861],{"class":1115},[1092,2050,1779],{"class":1315},[1092,2052,1782],{"class":1319},[1092,2054,2055],{"class":1115},"references",[1092,2057,1316],{"class":1315},[1092,2059,1779],{"class":1319},[1092,2061,1799],{"class":1562},[1092,2063,2064],{"class":1315}," chats",[1092,2066,1782],{"class":1319},[1092,2068,1993],{"class":1315},[1092,2070,1690],{"class":1319},[1092,2072,1684],{"class":1319},[1092,2074,2075],{"class":1325}," onDelete",[1092,2077,1329],{"class":1319},[1092,2079,1406],{"class":1319},[1092,2081,2082],{"class":1102},"cascade",[1092,2084,1344],{"class":1319},[1092,2086,1706],{"class":1319},[1092,2088,1856],{"class":1315},[1092,2090,1347],{"class":1319},[1092,2092,2094,2097,2099,2101,2103,2105,2108,2110,2112,2114,2117,2119,2121,2123,2126,2128,2130,2132,2135,2137,2139,2141,2144,2146,2149,2151,2153,2155,2157,2159],{"class":1094,"line":2093},17,[1092,2095,2096],{"class":1325},"  role",[1092,2098,1329],{"class":1319},[1092,2100,1693],{"class":1115},[1092,2102,1316],{"class":1315},[1092,2104,1344],{"class":1319},[1092,2106,2107],{"class":1102},"role",[1092,2109,1344],{"class":1319},[1092,2111,1690],{"class":1319},[1092,2113,1684],{"class":1319},[1092,2115,2116],{"class":1325}," enum",[1092,2118,1329],{"class":1319},[1092,2120,1433],{"class":1315},[1092,2122,1344],{"class":1319},[1092,2124,2125],{"class":1102},"user",[1092,2127,1344],{"class":1319},[1092,2129,1690],{"class":1319},[1092,2131,1406],{"class":1319},[1092,2133,2134],{"class":1102},"assistant",[1092,2136,1344],{"class":1319},[1092,2138,1690],{"class":1319},[1092,2140,1406],{"class":1319},[1092,2142,2143],{"class":1102},"system",[1092,2145,1344],{"class":1319},[1092,2147,2148],{"class":1315},"] ",[1092,2150,1451],{"class":1319},[1092,2152,1856],{"class":1315},[1092,2154,1782],{"class":1319},[1092,2156,1861],{"class":1115},[1092,2158,1779],{"class":1315},[1092,2160,1347],{"class":1319},[1092,2162,2164,2167,2169,2171,2173,2175,2178,2180,2182,2184,2186,2188,2190,2193,2195,2197,2199],{"class":1094,"line":2163},18,[1092,2165,2166],{"class":1325},"  parts",[1092,2168,1329],{"class":1319},[1092,2170,1693],{"class":1115},[1092,2172,1316],{"class":1315},[1092,2174,1344],{"class":1319},[1092,2176,2177],{"class":1102},"parts",[1092,2179,1344],{"class":1319},[1092,2181,1690],{"class":1319},[1092,2183,1684],{"class":1319},[1092,2185,1842],{"class":1325},[1092,2187,1329],{"class":1319},[1092,2189,1406],{"class":1319},[1092,2191,2192],{"class":1102},"json",[1092,2194,1344],{"class":1319},[1092,2196,1706],{"class":1319},[1092,2198,1856],{"class":1315},[1092,2200,1347],{"class":1319},[1092,2202,2204,2206,2208,2210,2212,2214,2216,2218,2220,2222,2224,2226,2228,2230,2232,2234,2236,2238,2240,2242,2244,2246,2248,2250],{"class":1094,"line":2203},19,[1092,2205,1830],{"class":1325},[1092,2207,1329],{"class":1319},[1092,2209,1698],{"class":1115},[1092,2211,1316],{"class":1315},[1092,2213,1839],{"class":1319},[1092,2215,1842],{"class":1325},[1092,2217,1329],{"class":1319},[1092,2219,1406],{"class":1319},[1092,2221,1849],{"class":1102},[1092,2223,1344],{"class":1319},[1092,2225,1706],{"class":1319},[1092,2227,1856],{"class":1315},[1092,2229,1782],{"class":1319},[1092,2231,1861],{"class":1115},[1092,2233,1779],{"class":1315},[1092,2235,1782],{"class":1319},[1092,2237,1792],{"class":1115},[1092,2239,1316],{"class":1315},[1092,2241,1779],{"class":1319},[1092,2243,1799],{"class":1562},[1092,2245,1876],{"class":1319},[1092,2247,1879],{"class":1115},[1092,2249,1810],{"class":1315},[1092,2251,1347],{"class":1319},[1092,2253,2255,2258,2261,2263],{"class":1094,"line":2254},20,[1092,2256,2257],{"class":1319},"},",[1092,2259,2260],{"class":1916}," table",[1092,2262,1799],{"class":1562},[1092,2264,1332],{"class":1315},[1092,2266,2268,2271,2273,2275,2278,2280,2282,2284,2287,2290,2292],{"class":1094,"line":2267},21,[1092,2269,2270],{"class":1115},"  index",[1092,2272,1316],{"class":1315},[1092,2274,1344],{"class":1319},[1092,2276,2277],{"class":1102},"messages_chat_id_idx",[1092,2279,1344],{"class":1319},[1092,2281,1856],{"class":1315},[1092,2283,1782],{"class":1319},[1092,2285,2286],{"class":1115},"on",[1092,2288,2289],{"class":1315},"(table",[1092,2291,1782],{"class":1319},[1092,2293,2294],{"class":1315},"chatId)\n",[1092,2296,2298],{"class":1094,"line":2297},22,[1092,2299,2300],{"class":1315},"])\n",[1092,2302,2304],{"class":1094,"line":2303},23,[1092,2305,1384],{"emptyLinePlaceholder":21},[1092,2307,2309,2311,2313,2316,2318,2320,2323,2325,2327,2330,2332,2334,2336],{"class":1094,"line":2308},24,[1092,2310,1306],{"class":1305},[1092,2312,1747],{"class":1562},[1092,2314,2315],{"class":1315}," messagesRelations ",[1092,2317,1566],{"class":1319},[1092,2319,1725],{"class":1115},[1092,2321,2322],{"class":1315},"(messages",[1092,2324,1690],{"class":1319},[1092,2326,1913],{"class":1319},[1092,2328,2329],{"class":1916}," one",[1092,2331,1920],{"class":1319},[1092,2333,1799],{"class":1562},[1092,2335,1925],{"class":1315},[1092,2337,1320],{"class":1319},[1092,2339,2341,2344,2346,2348,2350,2352],{"class":1094,"line":2340},25,[1092,2342,2343],{"class":1325},"  chat",[1092,2345,1329],{"class":1319},[1092,2347,2329],{"class":1115},[1092,2349,1908],{"class":1315},[1092,2351,1690],{"class":1319},[1092,2353,1395],{"class":1319},[1092,2355,2357,2360,2362,2365,2367,2370],{"class":1094,"line":2356},26,[1092,2358,2359],{"class":1325},"    fields",[1092,2361,1329],{"class":1319},[1092,2363,2364],{"class":1315}," [messages",[1092,2366,1782],{"class":1319},[1092,2368,2369],{"class":1315},"chatId]",[1092,2371,1347],{"class":1319},[1092,2373,2375,2378,2380,2383,2385],{"class":1094,"line":2374},27,[1092,2376,2377],{"class":1325},"    references",[1092,2379,1329],{"class":1319},[1092,2381,2382],{"class":1315}," [chats",[1092,2384,1782],{"class":1319},[1092,2386,2387],{"class":1315},"id]\n",[1092,2389,2391,2394],{"class":1094,"line":2390},28,[1092,2392,2393],{"class":1319},"  }",[1092,2395,1454],{"class":1315},[1092,2397,2399,2401],{"class":1094,"line":2398},29,[1092,2400,1451],{"class":1319},[1092,2402,1946],{"class":1315},[982,2404,2405],{},"Generate the database migrations from your schema:",[1083,2407,2409],{"className":1085,"code":2408,"language":1087,"meta":1088,"style":1088},"npx nuxt db generate\n",[1042,2410,2411],{"__ignoreMap":1088},[1092,2412,2413,2415,2418,2421],{"class":1094,"line":1095},[1092,2414,1099],{"class":1098},[1092,2416,2417],{"class":1102}," nuxt",[1092,2419,2420],{"class":1102}," db",[1092,2422,2423],{"class":1102}," generate\n",[2425,2426,2427],"tip",{},[982,2428,2429,2430,2433],{},"Migrations are automatically applied when you start the development server with ",[1042,2431,2432],{},"npx nuxt dev",". NuxtHub uses SQLite locally, so no external database is required during development.",[986,2435,2437],{"id":2436},"building-the-backend","Building the backend",[982,2439,2440,2441,1782],{},"This section covers integrating AI on the server. The following API endpoints handle chat creation, AI streaming, and data persistence using ",[1036,2442,2445],{"href":2443,"rel":2444},"https:\u002F\u002Fnitro.build",[1040],"Nitro",[1120,2447,2449],{"id":2448},"creating-a-chat","Creating a chat",[982,2451,2452,2453,2460],{},"First, create the endpoint that initializes a new chat and saves the first message to the database. This uses the ",[1036,2454,2457],{"href":2455,"rel":2456},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fui-message",[1040],[1042,2458,2459],{},"UIMessage"," type from the AI SDK:",[1292,2462,2463],{},[1083,2464,2467],{"className":1296,"code":2465,"filename":2466,"language":1298,"meta":1088,"style":1088},"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",[1042,2468,2469,2493,2516,2540,2560,2564,2588,2625,2649,2662,2666,2672,2723,2727,2732,2761,2777,2792,2806,2812,2816,2824],{"__ignoreMap":1088},[1092,2470,2471,2473,2475,2478,2480,2483,2485,2487,2489,2491],{"class":1094,"line":1095},[1092,2472,1681],{"class":1305},[1092,2474,1684],{"class":1319},[1092,2476,2477],{"class":1315}," defineEventHandler",[1092,2479,1690],{"class":1319},[1092,2481,2482],{"class":1315}," readValidatedBody",[1092,2484,1706],{"class":1319},[1092,2486,1709],{"class":1305},[1092,2488,1406],{"class":1319},[1092,2490,1120],{"class":1102},[1092,2492,1370],{"class":1319},[1092,2494,2495,2497,2500,2502,2505,2507,2509,2511,2514],{"class":1094,"line":1112},[1092,2496,1681],{"class":1305},[1092,2498,2499],{"class":1305}," type",[1092,2501,1684],{"class":1319},[1092,2503,2504],{"class":1315}," UIMessage",[1092,2506,1706],{"class":1319},[1092,2508,1709],{"class":1305},[1092,2510,1406],{"class":1319},[1092,2512,2513],{"class":1102},"ai",[1092,2515,1370],{"class":1319},[1092,2517,2518,2520,2522,2524,2526,2529,2531,2533,2535,2538],{"class":1094,"line":1335},[1092,2519,1681],{"class":1305},[1092,2521,1684],{"class":1319},[1092,2523,2420],{"class":1315},[1092,2525,1690],{"class":1319},[1092,2527,2528],{"class":1315}," schema",[1092,2530,1706],{"class":1319},[1092,2532,1709],{"class":1305},[1092,2534,1406],{"class":1319},[1092,2536,2537],{"class":1102},"hub:db",[1092,2539,1370],{"class":1319},[1092,2541,2542,2544,2546,2549,2551,2553,2555,2558],{"class":1094,"line":1350},[1092,2543,1681],{"class":1305},[1092,2545,1684],{"class":1319},[1092,2547,2548],{"class":1315}," z",[1092,2550,1706],{"class":1319},[1092,2552,1709],{"class":1305},[1092,2554,1406],{"class":1319},[1092,2556,2557],{"class":1102},"zod",[1092,2559,1370],{"class":1319},[1092,2561,2562],{"class":1094,"line":1362},[1092,2563,1384],{"emptyLinePlaceholder":21},[1092,2565,2566,2568,2570,2572,2574,2577,2579,2582,2584,2586],{"class":1094,"line":1373},[1092,2567,1306],{"class":1305},[1092,2569,1309],{"class":1305},[1092,2571,2477],{"class":1115},[1092,2573,1316],{"class":1315},[1092,2575,2576],{"class":1562},"async",[1092,2578,1925],{"class":1319},[1092,2580,2581],{"class":1916},"event",[1092,2583,1856],{"class":1319},[1092,2585,1799],{"class":1562},[1092,2587,1395],{"class":1319},[1092,2589,2590,2593,2595,2598,2600,2603,2606,2608,2610,2612,2614,2616,2618,2621,2623],{"class":1094,"line":1381},[1092,2591,2592],{"class":1562},"  const",[1092,2594,1684],{"class":1319},[1092,2596,2597],{"class":1315}," message",[1092,2599,1706],{"class":1319},[1092,2601,2602],{"class":1319}," =",[1092,2604,2605],{"class":1305}," await",[1092,2607,2482],{"class":1115},[1092,2609,1316],{"class":1325},[1092,2611,2581],{"class":1315},[1092,2613,1690],{"class":1319},[1092,2615,2548],{"class":1315},[1092,2617,1782],{"class":1319},[1092,2619,2620],{"class":1115},"object",[1092,2622,1316],{"class":1325},[1092,2624,1320],{"class":1319},[1092,2626,2627,2630,2632,2634,2636,2639,2641,2643,2646],{"class":1094,"line":1387},[1092,2628,2629],{"class":1325},"    message",[1092,2631,1329],{"class":1319},[1092,2633,2548],{"class":1315},[1092,2635,1782],{"class":1319},[1092,2637,2638],{"class":1115},"custom",[1092,2640,1534],{"class":1319},[1092,2642,2459],{"class":1098},[1092,2644,2645],{"class":1319},">",[1092,2647,2648],{"class":1325},"()\n",[1092,2650,2651,2653,2655,2657,2660],{"class":1094,"line":1398},[1092,2652,2393],{"class":1319},[1092,2654,1856],{"class":1325},[1092,2656,1782],{"class":1319},[1092,2658,2659],{"class":1315},"parse",[1092,2661,1454],{"class":1325},[1092,2663,2664],{"class":1094,"line":1414},[1092,2665,1384],{"emptyLinePlaceholder":21},[1092,2667,2668],{"class":1094,"line":1420},[1092,2669,2671],{"class":2670},"sHwdD","  \u002F\u002F Create a new chat\n",[1092,2673,2674,2676,2678,2680,2682,2684,2686,2688,2690,2693,2695,2698,2700,2702,2704,2706,2709,2711,2714,2716,2718,2721],{"class":1094,"line":1425},[1092,2675,2592],{"class":1562},[1092,2677,1433],{"class":1319},[1092,2679,262],{"class":1315},[1092,2681,1443],{"class":1319},[1092,2683,2602],{"class":1319},[1092,2685,2605],{"class":1305},[1092,2687,2420],{"class":1315},[1092,2689,1782],{"class":1319},[1092,2691,2692],{"class":1115},"insert",[1092,2694,1316],{"class":1325},[1092,2696,2697],{"class":1315},"schema",[1092,2699,1782],{"class":1319},[1092,2701,1761],{"class":1315},[1092,2703,1856],{"class":1325},[1092,2705,1782],{"class":1319},[1092,2707,2708],{"class":1115},"values",[1092,2710,1316],{"class":1325},[1092,2712,2713],{"class":1319},"{}",[1092,2715,1856],{"class":1325},[1092,2717,1782],{"class":1319},[1092,2719,2720],{"class":1115},"returning",[1092,2722,2648],{"class":1325},[1092,2724,2725],{"class":1094,"line":1448},[1092,2726,1384],{"emptyLinePlaceholder":21},[1092,2728,2729],{"class":1094,"line":1953},[1092,2730,2731],{"class":2670},"  \u002F\u002F Save the first user message\n",[1092,2733,2734,2737,2739,2741,2743,2745,2747,2749,2751,2753,2755,2757,2759],{"class":1094,"line":1980},[1092,2735,2736],{"class":1305},"  await",[1092,2738,2420],{"class":1315},[1092,2740,1782],{"class":1319},[1092,2742,2692],{"class":1115},[1092,2744,1316],{"class":1325},[1092,2746,2697],{"class":1315},[1092,2748,1782],{"class":1319},[1092,2750,1971],{"class":1315},[1092,2752,1856],{"class":1325},[1092,2754,1782],{"class":1319},[1092,2756,2708],{"class":1115},[1092,2758,1316],{"class":1325},[1092,2760,1320],{"class":1319},[1092,2762,2763,2766,2768,2771,2773,2775],{"class":1094,"line":2026},[1092,2764,2765],{"class":1325},"    chatId",[1092,2767,1329],{"class":1319},[1092,2769,2770],{"class":1315}," chat",[1092,2772,1782],{"class":1319},[1092,2774,1993],{"class":1315},[1092,2776,1347],{"class":1319},[1092,2778,2779,2782,2784,2786,2788,2790],{"class":1094,"line":2093},[1092,2780,2781],{"class":1325},"    role",[1092,2783,1329],{"class":1319},[1092,2785,1406],{"class":1319},[1092,2787,2125],{"class":1102},[1092,2789,1344],{"class":1319},[1092,2791,1347],{"class":1319},[1092,2793,2794,2797,2799,2801,2803],{"class":1094,"line":2163},[1092,2795,2796],{"class":1325},"    parts",[1092,2798,1329],{"class":1319},[1092,2800,2597],{"class":1315},[1092,2802,1782],{"class":1319},[1092,2804,2805],{"class":1315},"parts\n",[1092,2807,2808,2810],{"class":1094,"line":2203},[1092,2809,2393],{"class":1319},[1092,2811,1454],{"class":1325},[1092,2813,2814],{"class":1094,"line":2254},[1092,2815,1384],{"emptyLinePlaceholder":21},[1092,2817,2818,2821],{"class":1094,"line":2267},[1092,2819,2820],{"class":1305},"  return",[1092,2822,2823],{"class":1315}," chat\n",[1092,2825,2826,2828],{"class":1094,"line":2297},[1092,2827,1451],{"class":1319},[1092,2829,1454],{"class":1315},[1120,2831,2833],{"id":2832},"streaming-ai-responses","Streaming AI responses",[982,2835,2836,2837,2844,2845,2852,2853,2860],{},"Next, create the endpoint that handles the AI conversation. This endpoint uses ",[1036,2838,2841],{"href":2839,"rel":2840},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-core\u002Fstream-text",[1040],[1042,2842,2843],{},"streamText",", ",[1036,2846,2849],{"href":2847,"rel":2848},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream",[1040],[1042,2850,2851],{},"createUIMessageStream",", and ",[1036,2854,2857],{"href":2855,"rel":2856},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream-response",[1040],[1042,2858,2859],{},"createUIMessageStreamResponse"," from the AI SDK:",[1292,2862,2863],{},[1669,2864,2865],{},[1083,2866,2869],{"className":1296,"code":2867,"filename":2868,"language":1298,"meta":1088,"style":1088},"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",[1042,2870,2871,2903,2922,2944,2962,2968,2975,2982,2989,2996,3001,3013,3033,3037,3054,3058,3069,3103,3132,3163,3168,3172,3194,3227,3243,3255,3259,3302,3362,3376,3393,3425,3438,3443,3449,3480,3524,3531,3536,3554,3593,3599,3604,3610,3630,3658,3670,3689,3717,3724,3729,3795,3800,3805,3811,3840,3881,3910,3922,3938,3952,3959,3964,3969,3975,3992,4014,4032,4040,4057,4078,4088,4098,4108,4125,4136,4142,4148,4158,4168,4182,4197,4202,4207,4217,4233,4248,4254,4260,4268,4273,4279,4299,4314,4331,4354,4365,4373,4379,4384,4407,4413,4433,4439,4485,4501,4534,4548,4556,4562,4569,4574,4592],{"__ignoreMap":1088},[1092,2872,2873,2875,2877,2880,2882,2884,2886,2889,2891,2893,2895,2897,2899,2901],{"class":1094,"line":1095},[1092,2874,1681],{"class":1305},[1092,2876,1684],{"class":1319},[1092,2878,2879],{"class":1315}," createError",[1092,2881,1690],{"class":1319},[1092,2883,2477],{"class":1315},[1092,2885,1690],{"class":1319},[1092,2887,2888],{"class":1315}," getValidatedRouterParams",[1092,2890,1690],{"class":1319},[1092,2892,2482],{"class":1315},[1092,2894,1706],{"class":1319},[1092,2896,1709],{"class":1305},[1092,2898,1406],{"class":1319},[1092,2900,1120],{"class":1102},[1092,2902,1370],{"class":1319},[1092,2904,2905,2907,2909,2912,2914,2916,2918,2920],{"class":1094,"line":1112},[1092,2906,1681],{"class":1305},[1092,2908,1684],{"class":1319},[1092,2910,2911],{"class":1315}," eq",[1092,2913,1706],{"class":1319},[1092,2915,1709],{"class":1305},[1092,2917,1406],{"class":1319},[1092,2919,1734],{"class":1102},[1092,2921,1370],{"class":1319},[1092,2923,2924,2926,2928,2930,2932,2934,2936,2938,2940,2942],{"class":1094,"line":1335},[1092,2925,1681],{"class":1305},[1092,2927,1684],{"class":1319},[1092,2929,2420],{"class":1315},[1092,2931,1690],{"class":1319},[1092,2933,2528],{"class":1315},[1092,2935,1706],{"class":1319},[1092,2937,1709],{"class":1305},[1092,2939,1406],{"class":1319},[1092,2941,2537],{"class":1102},[1092,2943,1370],{"class":1319},[1092,2945,2946,2948,2950,2952,2954,2956,2958,2960],{"class":1094,"line":1350},[1092,2947,1681],{"class":1305},[1092,2949,1684],{"class":1319},[1092,2951,2548],{"class":1315},[1092,2953,1706],{"class":1319},[1092,2955,1709],{"class":1305},[1092,2957,1406],{"class":1319},[1092,2959,2557],{"class":1102},[1092,2961,1370],{"class":1319},[1092,2963,2964,2966],{"class":1094,"line":1362},[1092,2965,1681],{"class":1305},[1092,2967,1395],{"class":1319},[1092,2969,2970,2973],{"class":1094,"line":1373},[1092,2971,2972],{"class":1315},"  convertToModelMessages",[1092,2974,1347],{"class":1319},[1092,2976,2977,2980],{"class":1094,"line":1381},[1092,2978,2979],{"class":1315},"  createUIMessageStream",[1092,2981,1347],{"class":1319},[1092,2983,2984,2987],{"class":1094,"line":1387},[1092,2985,2986],{"class":1315},"  createUIMessageStreamResponse",[1092,2988,1347],{"class":1319},[1092,2990,2991,2994],{"class":1094,"line":1398},[1092,2992,2993],{"class":1315},"  generateText",[1092,2995,1347],{"class":1319},[1092,2997,2998],{"class":1094,"line":1414},[1092,2999,3000],{"class":1315},"  streamText\n",[1092,3002,3003,3005,3007,3009,3011],{"class":1094,"line":1420},[1092,3004,1451],{"class":1319},[1092,3006,1709],{"class":1305},[1092,3008,1406],{"class":1319},[1092,3010,2513],{"class":1102},[1092,3012,1370],{"class":1319},[1092,3014,3015,3017,3019,3021,3023,3025,3027,3029,3031],{"class":1094,"line":1425},[1092,3016,1681],{"class":1305},[1092,3018,2499],{"class":1305},[1092,3020,1684],{"class":1319},[1092,3022,2504],{"class":1315},[1092,3024,1706],{"class":1319},[1092,3026,1709],{"class":1305},[1092,3028,1406],{"class":1319},[1092,3030,2513],{"class":1102},[1092,3032,1370],{"class":1319},[1092,3034,3035],{"class":1094,"line":1448},[1092,3036,1384],{"emptyLinePlaceholder":21},[1092,3038,3039,3042,3045,3047,3049,3052],{"class":1094,"line":1953},[1092,3040,3041],{"class":1562},"const",[1092,3043,3044],{"class":1315}," DEFAULT_MODEL ",[1092,3046,1566],{"class":1319},[1092,3048,1406],{"class":1319},[1092,3050,3051],{"class":1102},"anthropic\u002Fclaude-haiku-4.5",[1092,3053,1370],{"class":1319},[1092,3055,3056],{"class":1094,"line":1980},[1092,3057,1384],{"emptyLinePlaceholder":21},[1092,3059,3060,3062,3065,3067],{"class":1094,"line":2026},[1092,3061,3041],{"class":1562},[1092,3063,3064],{"class":1315}," MODELS ",[1092,3066,1566],{"class":1319},[1092,3068,1332],{"class":1315},[1092,3070,3071,3074,3077,3079,3081,3084,3086,3088,3091,3093,3095,3098,3100],{"class":1094,"line":2093},[1092,3072,3073],{"class":1319},"  {",[1092,3075,3076],{"class":1325}," value",[1092,3078,1329],{"class":1319},[1092,3080,1406],{"class":1319},[1092,3082,3083],{"class":1102},"openai\u002Fgpt-5-nano",[1092,3085,1344],{"class":1319},[1092,3087,1690],{"class":1319},[1092,3089,3090],{"class":1325}," label",[1092,3092,1329],{"class":1319},[1092,3094,1406],{"class":1319},[1092,3096,3097],{"class":1102},"GPT-5 Nano",[1092,3099,1344],{"class":1319},[1092,3101,3102],{"class":1319}," },\n",[1092,3104,3105,3107,3109,3111,3113,3115,3117,3119,3121,3123,3125,3128,3130],{"class":1094,"line":2163},[1092,3106,3073],{"class":1319},[1092,3108,3076],{"class":1325},[1092,3110,1329],{"class":1319},[1092,3112,1406],{"class":1319},[1092,3114,3051],{"class":1102},[1092,3116,1344],{"class":1319},[1092,3118,1690],{"class":1319},[1092,3120,3090],{"class":1325},[1092,3122,1329],{"class":1319},[1092,3124,1406],{"class":1319},[1092,3126,3127],{"class":1102},"Claude Haiku 4.5",[1092,3129,1344],{"class":1319},[1092,3131,3102],{"class":1319},[1092,3133,3134,3136,3138,3140,3142,3145,3147,3149,3151,3153,3155,3158,3160],{"class":1094,"line":2203},[1092,3135,3073],{"class":1319},[1092,3137,3076],{"class":1325},[1092,3139,1329],{"class":1319},[1092,3141,1406],{"class":1319},[1092,3143,3144],{"class":1102},"google\u002Fgemini-3-flash",[1092,3146,1344],{"class":1319},[1092,3148,1690],{"class":1319},[1092,3150,3090],{"class":1325},[1092,3152,1329],{"class":1319},[1092,3154,1406],{"class":1319},[1092,3156,3157],{"class":1102},"Gemini 3 Flash",[1092,3159,1344],{"class":1319},[1092,3161,3162],{"class":1319}," }\n",[1092,3164,3165],{"class":1094,"line":2254},[1092,3166,3167],{"class":1315},"]\n",[1092,3169,3170],{"class":1094,"line":2267},[1092,3171,1384],{"emptyLinePlaceholder":21},[1092,3173,3174,3176,3178,3180,3182,3184,3186,3188,3190,3192],{"class":1094,"line":2297},[1092,3175,1306],{"class":1305},[1092,3177,1309],{"class":1305},[1092,3179,2477],{"class":1115},[1092,3181,1316],{"class":1315},[1092,3183,2576],{"class":1562},[1092,3185,1925],{"class":1319},[1092,3187,2581],{"class":1916},[1092,3189,1856],{"class":1319},[1092,3191,1799],{"class":1562},[1092,3193,1395],{"class":1319},[1092,3195,3196,3198,3200,3203,3205,3207,3209,3211,3213,3215,3217,3219,3221,3223,3225],{"class":1094,"line":2303},[1092,3197,2592],{"class":1562},[1092,3199,1684],{"class":1319},[1092,3201,3202],{"class":1315}," id",[1092,3204,1706],{"class":1319},[1092,3206,2602],{"class":1319},[1092,3208,2605],{"class":1305},[1092,3210,2888],{"class":1115},[1092,3212,1316],{"class":1325},[1092,3214,2581],{"class":1315},[1092,3216,1690],{"class":1319},[1092,3218,2548],{"class":1315},[1092,3220,1782],{"class":1319},[1092,3222,2620],{"class":1115},[1092,3224,1316],{"class":1325},[1092,3226,1320],{"class":1319},[1092,3228,3229,3232,3234,3236,3238,3241],{"class":1094,"line":2308},[1092,3230,3231],{"class":1325},"    id",[1092,3233,1329],{"class":1319},[1092,3235,2548],{"class":1315},[1092,3237,1782],{"class":1319},[1092,3239,3240],{"class":1115},"string",[1092,3242,2648],{"class":1325},[1092,3244,3245,3247,3249,3251,3253],{"class":1094,"line":2340},[1092,3246,2393],{"class":1319},[1092,3248,1856],{"class":1325},[1092,3250,1782],{"class":1319},[1092,3252,2659],{"class":1315},[1092,3254,1454],{"class":1325},[1092,3256,3257],{"class":1094,"line":2356},[1092,3258,1384],{"emptyLinePlaceholder":21},[1092,3260,3261,3263,3265,3268,3270,3273,3275,3278,3280,3282,3284,3286,3288,3290,3292,3294,3296,3298,3300],{"class":1094,"line":2374},[1092,3262,2592],{"class":1562},[1092,3264,1684],{"class":1319},[1092,3266,3267],{"class":1315}," model",[1092,3269,2602],{"class":1319},[1092,3271,3272],{"class":1315}," DEFAULT_MODEL",[1092,3274,1690],{"class":1319},[1092,3276,3277],{"class":1315}," messages",[1092,3279,1706],{"class":1319},[1092,3281,2602],{"class":1319},[1092,3283,2605],{"class":1305},[1092,3285,2482],{"class":1115},[1092,3287,1316],{"class":1325},[1092,3289,2581],{"class":1315},[1092,3291,1690],{"class":1319},[1092,3293,2548],{"class":1315},[1092,3295,1782],{"class":1319},[1092,3297,2620],{"class":1115},[1092,3299,1316],{"class":1325},[1092,3301,1320],{"class":1319},[1092,3303,3304,3307,3309,3311,3313,3315,3317,3319,3322,3324,3327,3329,3332,3334,3337,3339,3342,3344,3347,3349,3351,3354,3356,3358,3360],{"class":1094,"line":2390},[1092,3305,3306],{"class":1325},"    model",[1092,3308,1329],{"class":1319},[1092,3310,2548],{"class":1315},[1092,3312,1782],{"class":1319},[1092,3314,3240],{"class":1115},[1092,3316,1779],{"class":1325},[1092,3318,1782],{"class":1319},[1092,3320,3321],{"class":1115},"refine",[1092,3323,1316],{"class":1325},[1092,3325,3326],{"class":1916},"value",[1092,3328,1799],{"class":1562},[1092,3330,3331],{"class":1315}," MODELS",[1092,3333,1782],{"class":1319},[1092,3335,3336],{"class":1115},"some",[1092,3338,1316],{"class":1325},[1092,3340,3341],{"class":1916},"m",[1092,3343,1799],{"class":1562},[1092,3345,3346],{"class":1315}," m",[1092,3348,1782],{"class":1319},[1092,3350,3326],{"class":1315},[1092,3352,3353],{"class":1319}," ===",[1092,3355,3076],{"class":1315},[1092,3357,1856],{"class":1325},[1092,3359,1690],{"class":1319},[1092,3361,1395],{"class":1319},[1092,3363,3364,3367,3369,3371,3374],{"class":1094,"line":2398},[1092,3365,3366],{"class":1325},"      message",[1092,3368,1329],{"class":1319},[1092,3370,1406],{"class":1319},[1092,3372,3373],{"class":1102},"Invalid model",[1092,3375,1370],{"class":1319},[1092,3377,3379,3382,3384,3386,3389,3391],{"class":1094,"line":3378},30,[1092,3380,3381],{"class":1319},"    }",[1092,3383,1856],{"class":1325},[1092,3385,1782],{"class":1319},[1092,3387,3388],{"class":1115},"optional",[1092,3390,1779],{"class":1325},[1092,3392,1347],{"class":1319},[1092,3394,3396,3399,3401,3403,3405,3408,3410,3413,3415,3417,3419,3421,3423],{"class":1094,"line":3395},31,[1092,3397,3398],{"class":1325},"    messages",[1092,3400,1329],{"class":1319},[1092,3402,2548],{"class":1315},[1092,3404,1782],{"class":1319},[1092,3406,3407],{"class":1115},"array",[1092,3409,1316],{"class":1325},[1092,3411,3412],{"class":1315},"z",[1092,3414,1782],{"class":1319},[1092,3416,2638],{"class":1115},[1092,3418,1534],{"class":1319},[1092,3420,2459],{"class":1098},[1092,3422,2645],{"class":1319},[1092,3424,1882],{"class":1325},[1092,3426,3428,3430,3432,3434,3436],{"class":1094,"line":3427},32,[1092,3429,2393],{"class":1319},[1092,3431,1856],{"class":1325},[1092,3433,1782],{"class":1319},[1092,3435,2659],{"class":1315},[1092,3437,1454],{"class":1325},[1092,3439,3441],{"class":1094,"line":3440},33,[1092,3442,1384],{"emptyLinePlaceholder":21},[1092,3444,3446],{"class":1094,"line":3445},34,[1092,3447,3448],{"class":2670},"  \u002F\u002F Fetch the chat from the database\n",[1092,3450,3452,3454,3456,3458,3460,3462,3464,3467,3469,3471,3473,3476,3478],{"class":1094,"line":3451},35,[1092,3453,2592],{"class":1562},[1092,3455,2770],{"class":1315},[1092,3457,2602],{"class":1319},[1092,3459,2605],{"class":1305},[1092,3461,2420],{"class":1315},[1092,3463,1782],{"class":1319},[1092,3465,3466],{"class":1315},"query",[1092,3468,1782],{"class":1319},[1092,3470,1761],{"class":1315},[1092,3472,1782],{"class":1319},[1092,3474,3475],{"class":1115},"findFirst",[1092,3477,1316],{"class":1325},[1092,3479,1320],{"class":1319},[1092,3481,3483,3486,3488,3490,3492,3494,3496,3498,3500,3502,3504,3506,3508,3510,3512,3514,3516,3519,3522],{"class":1094,"line":3482},36,[1092,3484,3485],{"class":1115},"    where",[1092,3487,1329],{"class":1319},[1092,3489,1925],{"class":1319},[1092,3491,262],{"class":1916},[1092,3493,1690],{"class":1319},[1092,3495,1684],{"class":1319},[1092,3497,2911],{"class":1916},[1092,3499,1920],{"class":1319},[1092,3501,1799],{"class":1562},[1092,3503,2911],{"class":1115},[1092,3505,1316],{"class":1325},[1092,3507,262],{"class":1315},[1092,3509,1782],{"class":1319},[1092,3511,1993],{"class":1315},[1092,3513,1690],{"class":1319},[1092,3515,3202],{"class":1315},[1092,3517,3518],{"class":1305}," as",[1092,3520,3521],{"class":1098}," string",[1092,3523,1454],{"class":1325},[1092,3525,3527,3529],{"class":1094,"line":3526},37,[1092,3528,2393],{"class":1319},[1092,3530,1454],{"class":1325},[1092,3532,3534],{"class":1094,"line":3533},38,[1092,3535,1384],{"emptyLinePlaceholder":21},[1092,3537,3539,3542,3544,3547,3549,3552],{"class":1094,"line":3538},39,[1092,3540,3541],{"class":1305},"  if",[1092,3543,1925],{"class":1325},[1092,3545,3546],{"class":1319},"!",[1092,3548,262],{"class":1315},[1092,3550,3551],{"class":1325},") ",[1092,3553,1320],{"class":1319},[1092,3555,3557,3560,3562,3564,3566,3569,3571,3575,3577,3580,3582,3584,3587,3589,3591],{"class":1094,"line":3556},40,[1092,3558,3559],{"class":1305},"    throw",[1092,3561,2879],{"class":1115},[1092,3563,1316],{"class":1325},[1092,3565,1839],{"class":1319},[1092,3567,3568],{"class":1325}," statusCode",[1092,3570,1329],{"class":1319},[1092,3572,3574],{"class":3573},"sbssI"," 404",[1092,3576,1690],{"class":1319},[1092,3578,3579],{"class":1325}," statusMessage",[1092,3581,1329],{"class":1319},[1092,3583,1406],{"class":1319},[1092,3585,3586],{"class":1102},"Chat not found",[1092,3588,1344],{"class":1319},[1092,3590,1706],{"class":1319},[1092,3592,1454],{"class":1325},[1092,3594,3596],{"class":1094,"line":3595},41,[1092,3597,3598],{"class":1319},"  }\n",[1092,3600,3602],{"class":1094,"line":3601},42,[1092,3603,1384],{"emptyLinePlaceholder":21},[1092,3605,3607],{"class":1094,"line":3606},43,[1092,3608,3609],{"class":2670},"  \u002F\u002F Generate a title for the chat if it doesn't have one\n",[1092,3611,3613,3615,3617,3619,3621,3623,3626,3628],{"class":1094,"line":3612},44,[1092,3614,3541],{"class":1305},[1092,3616,1925],{"class":1325},[1092,3618,3546],{"class":1319},[1092,3620,262],{"class":1315},[1092,3622,1782],{"class":1319},[1092,3624,3625],{"class":1315},"title",[1092,3627,3551],{"class":1325},[1092,3629,1320],{"class":1319},[1092,3631,3633,3636,3638,3640,3642,3645,3647,3649,3651,3654,3656],{"class":1094,"line":3632},45,[1092,3634,3635],{"class":1562},"    const",[1092,3637,1684],{"class":1319},[1092,3639,1693],{"class":1325},[1092,3641,1329],{"class":1319},[1092,3643,3644],{"class":1315}," title",[1092,3646,1706],{"class":1319},[1092,3648,2602],{"class":1319},[1092,3650,2605],{"class":1305},[1092,3652,3653],{"class":1115}," generateText",[1092,3655,1316],{"class":1325},[1092,3657,1320],{"class":1319},[1092,3659,3661,3664,3666,3668],{"class":1094,"line":3660},46,[1092,3662,3663],{"class":1325},"      model",[1092,3665,1329],{"class":1319},[1092,3667,3272],{"class":1315},[1092,3669,1347],{"class":1319},[1092,3671,3673,3676,3678,3681,3684,3687],{"class":1094,"line":3672},47,[1092,3674,3675],{"class":1325},"      system",[1092,3677,1329],{"class":1319},[1092,3679,3680],{"class":1319}," `",[1092,3682,3683],{"class":1102},"Generate a short title (max 30 characters) based on the user's message. No quotes or punctuation.",[1092,3685,3686],{"class":1319},"`",[1092,3688,1347],{"class":1319},[1092,3690,3692,3695,3697,3700,3702,3705,3707,3709,3712,3715],{"class":1094,"line":3691},48,[1092,3693,3694],{"class":1325},"      prompt",[1092,3696,1329],{"class":1319},[1092,3698,3699],{"class":1315}," JSON",[1092,3701,1782],{"class":1319},[1092,3703,3704],{"class":1115},"stringify",[1092,3706,1316],{"class":1325},[1092,3708,1971],{"class":1315},[1092,3710,3711],{"class":1325},"[",[1092,3713,3714],{"class":3573},"0",[1092,3716,2300],{"class":1325},[1092,3718,3720,3722],{"class":1094,"line":3719},49,[1092,3721,3381],{"class":1319},[1092,3723,1454],{"class":1325},[1092,3725,3727],{"class":1094,"line":3726},50,[1092,3728,1384],{"emptyLinePlaceholder":21},[1092,3730,3732,3735,3737,3739,3742,3744,3746,3748,3750,3752,3754,3757,3759,3761,3763,3765,3767,3769,3772,3774,3777,3779,3781,3783,3785,3787,3789,3791,3793],{"class":1094,"line":3731},51,[1092,3733,3734],{"class":1305},"    await",[1092,3736,2420],{"class":1315},[1092,3738,1782],{"class":1319},[1092,3740,3741],{"class":1115},"update",[1092,3743,1316],{"class":1325},[1092,3745,2697],{"class":1315},[1092,3747,1782],{"class":1319},[1092,3749,1761],{"class":1315},[1092,3751,1856],{"class":1325},[1092,3753,1782],{"class":1319},[1092,3755,3756],{"class":1115},"set",[1092,3758,1316],{"class":1325},[1092,3760,1839],{"class":1319},[1092,3762,3644],{"class":1315},[1092,3764,1706],{"class":1319},[1092,3766,1856],{"class":1325},[1092,3768,1782],{"class":1319},[1092,3770,3771],{"class":1115},"where",[1092,3773,1316],{"class":1325},[1092,3775,3776],{"class":1115},"eq",[1092,3778,1316],{"class":1325},[1092,3780,2697],{"class":1315},[1092,3782,1782],{"class":1319},[1092,3784,1761],{"class":1315},[1092,3786,1782],{"class":1319},[1092,3788,1993],{"class":1315},[1092,3790,1690],{"class":1319},[1092,3792,3202],{"class":1315},[1092,3794,1946],{"class":1325},[1092,3796,3798],{"class":1094,"line":3797},52,[1092,3799,3598],{"class":1319},[1092,3801,3803],{"class":1094,"line":3802},53,[1092,3804,1384],{"emptyLinePlaceholder":21},[1092,3806,3808],{"class":1094,"line":3807},54,[1092,3809,3810],{"class":2670},"  \u002F\u002F Save the user message if it's a follow-up\n",[1092,3812,3814,3816,3819,3821,3823,3825,3827,3829,3832,3835,3838],{"class":1094,"line":3813},55,[1092,3815,2592],{"class":1562},[1092,3817,3818],{"class":1315}," lastMessage",[1092,3820,2602],{"class":1319},[1092,3822,3277],{"class":1315},[1092,3824,3711],{"class":1325},[1092,3826,1971],{"class":1315},[1092,3828,1782],{"class":1319},[1092,3830,3831],{"class":1315},"length",[1092,3833,3834],{"class":1319}," -",[1092,3836,3837],{"class":3573}," 1",[1092,3839,3167],{"class":1325},[1092,3841,3843,3845,3847,3850,3853,3855,3857,3859,3861,3863,3866,3868,3870,3872,3875,3877,3879],{"class":1094,"line":3842},56,[1092,3844,3541],{"class":1305},[1092,3846,1925],{"class":1325},[1092,3848,3849],{"class":1315},"lastMessage",[1092,3851,3852],{"class":1319},"?.",[1092,3854,2107],{"class":1315},[1092,3856,3353],{"class":1319},[1092,3858,1406],{"class":1319},[1092,3860,2125],{"class":1102},[1092,3862,1344],{"class":1319},[1092,3864,3865],{"class":1319}," &&",[1092,3867,3277],{"class":1315},[1092,3869,1782],{"class":1319},[1092,3871,3831],{"class":1315},[1092,3873,3874],{"class":1319}," >",[1092,3876,3837],{"class":3573},[1092,3878,3551],{"class":1325},[1092,3880,1320],{"class":1319},[1092,3882,3884,3886,3888,3890,3892,3894,3896,3898,3900,3902,3904,3906,3908],{"class":1094,"line":3883},57,[1092,3885,3734],{"class":1305},[1092,3887,2420],{"class":1315},[1092,3889,1782],{"class":1319},[1092,3891,2692],{"class":1115},[1092,3893,1316],{"class":1325},[1092,3895,2697],{"class":1315},[1092,3897,1782],{"class":1319},[1092,3899,1971],{"class":1315},[1092,3901,1856],{"class":1325},[1092,3903,1782],{"class":1319},[1092,3905,2708],{"class":1115},[1092,3907,1316],{"class":1325},[1092,3909,1320],{"class":1319},[1092,3911,3913,3916,3918,3920],{"class":1094,"line":3912},58,[1092,3914,3915],{"class":1325},"      chatId",[1092,3917,1329],{"class":1319},[1092,3919,3202],{"class":1315},[1092,3921,1347],{"class":1319},[1092,3923,3925,3928,3930,3932,3934,3936],{"class":1094,"line":3924},59,[1092,3926,3927],{"class":1325},"      role",[1092,3929,1329],{"class":1319},[1092,3931,1406],{"class":1319},[1092,3933,2125],{"class":1102},[1092,3935,1344],{"class":1319},[1092,3937,1347],{"class":1319},[1092,3939,3941,3944,3946,3948,3950],{"class":1094,"line":3940},60,[1092,3942,3943],{"class":1325},"      parts",[1092,3945,1329],{"class":1319},[1092,3947,3818],{"class":1315},[1092,3949,1782],{"class":1319},[1092,3951,2805],{"class":1315},[1092,3953,3955,3957],{"class":1094,"line":3954},61,[1092,3956,3381],{"class":1319},[1092,3958,1454],{"class":1325},[1092,3960,3962],{"class":1094,"line":3961},62,[1092,3963,3598],{"class":1319},[1092,3965,3967],{"class":1094,"line":3966},63,[1092,3968,1384],{"emptyLinePlaceholder":21},[1092,3970,3972],{"class":1094,"line":3971},64,[1092,3973,3974],{"class":2670},"  \u002F\u002F Create the streaming response\n",[1092,3976,3978,3980,3983,3985,3988,3990],{"class":1094,"line":3977},65,[1092,3979,2592],{"class":1562},[1092,3981,3982],{"class":1315}," stream",[1092,3984,2602],{"class":1319},[1092,3986,3987],{"class":1115}," createUIMessageStream",[1092,3989,1316],{"class":1325},[1092,3991,1320],{"class":1319},[1092,3993,3995,3998,4000,4003,4005,4008,4010,4012],{"class":1094,"line":3994},66,[1092,3996,3997],{"class":1115},"    execute",[1092,3999,1329],{"class":1319},[1092,4001,4002],{"class":1562}," async",[1092,4004,1913],{"class":1319},[1092,4006,4007],{"class":1916}," writer",[1092,4009,1920],{"class":1319},[1092,4011,1799],{"class":1562},[1092,4013,1395],{"class":1319},[1092,4015,4017,4020,4023,4025,4028,4030],{"class":1094,"line":4016},67,[1092,4018,4019],{"class":1562},"      const",[1092,4021,4022],{"class":1315}," result",[1092,4024,2602],{"class":1319},[1092,4026,4027],{"class":1115}," streamText",[1092,4029,1316],{"class":1325},[1092,4031,1320],{"class":1319},[1092,4033,4035,4038],{"class":1094,"line":4034},68,[1092,4036,4037],{"class":1315},"        model",[1092,4039,1347],{"class":1319},[1092,4041,4043,4046,4048,4050,4053,4055],{"class":1094,"line":4042},69,[1092,4044,4045],{"class":1325},"        system",[1092,4047,1329],{"class":1319},[1092,4049,3680],{"class":1319},[1092,4051,4052],{"class":1102},"You are a helpful AI assistant. Be concise and friendly.",[1092,4054,3686],{"class":1319},[1092,4056,1347],{"class":1319},[1092,4058,4060,4063,4065,4067,4070,4072,4074,4076],{"class":1094,"line":4059},70,[1092,4061,4062],{"class":1325},"        messages",[1092,4064,1329],{"class":1319},[1092,4066,2605],{"class":1305},[1092,4068,4069],{"class":1115}," convertToModelMessages",[1092,4071,1316],{"class":1325},[1092,4073,1971],{"class":1315},[1092,4075,1856],{"class":1325},[1092,4077,1347],{"class":1319},[1092,4079,4081,4084,4086],{"class":1094,"line":4080},71,[1092,4082,4083],{"class":1325},"        providerOptions",[1092,4085,1329],{"class":1319},[1092,4087,1395],{"class":1319},[1092,4089,4091,4094,4096],{"class":1094,"line":4090},72,[1092,4092,4093],{"class":1325},"          anthropic",[1092,4095,1329],{"class":1319},[1092,4097,1395],{"class":1319},[1092,4099,4101,4104,4106],{"class":1094,"line":4100},73,[1092,4102,4103],{"class":1325},"            thinking",[1092,4105,1329],{"class":1319},[1092,4107,1395],{"class":1319},[1092,4109,4111,4114,4116,4118,4121,4123],{"class":1094,"line":4110},74,[1092,4112,4113],{"class":1325},"              type",[1092,4115,1329],{"class":1319},[1092,4117,1406],{"class":1319},[1092,4119,4120],{"class":1102},"enabled",[1092,4122,1344],{"class":1319},[1092,4124,1347],{"class":1319},[1092,4126,4128,4131,4133],{"class":1094,"line":4127},75,[1092,4129,4130],{"class":1325},"              budgetTokens",[1092,4132,1329],{"class":1319},[1092,4134,4135],{"class":3573}," 2048\n",[1092,4137,4139],{"class":1094,"line":4138},76,[1092,4140,4141],{"class":1319},"            }\n",[1092,4143,4145],{"class":1094,"line":4144},77,[1092,4146,4147],{"class":1319},"          },\n",[1092,4149,4151,4154,4156],{"class":1094,"line":4150},78,[1092,4152,4153],{"class":1325},"          google",[1092,4155,1329],{"class":1319},[1092,4157,1395],{"class":1319},[1092,4159,4161,4164,4166],{"class":1094,"line":4160},79,[1092,4162,4163],{"class":1325},"            thinkingConfig",[1092,4165,1329],{"class":1319},[1092,4167,1395],{"class":1319},[1092,4169,4171,4174,4176,4180],{"class":1094,"line":4170},80,[1092,4172,4173],{"class":1325},"              includeThoughts",[1092,4175,1329],{"class":1319},[1092,4177,4179],{"class":4178},"sfNiH"," true",[1092,4181,1347],{"class":1319},[1092,4183,4185,4188,4190,4192,4195],{"class":1094,"line":4184},81,[1092,4186,4187],{"class":1325},"              thinkingLevel",[1092,4189,1329],{"class":1319},[1092,4191,1406],{"class":1319},[1092,4193,4194],{"class":1102},"low",[1092,4196,1370],{"class":1319},[1092,4198,4200],{"class":1094,"line":4199},82,[1092,4201,4141],{"class":1319},[1092,4203,4205],{"class":1094,"line":4204},83,[1092,4206,4147],{"class":1319},[1092,4208,4210,4213,4215],{"class":1094,"line":4209},84,[1092,4211,4212],{"class":1325},"          openai",[1092,4214,1329],{"class":1319},[1092,4216,1395],{"class":1319},[1092,4218,4220,4223,4225,4227,4229,4231],{"class":1094,"line":4219},85,[1092,4221,4222],{"class":1325},"            reasoningEffort",[1092,4224,1329],{"class":1319},[1092,4226,1406],{"class":1319},[1092,4228,4194],{"class":1102},[1092,4230,1344],{"class":1319},[1092,4232,1347],{"class":1319},[1092,4234,4236,4239,4241,4243,4246],{"class":1094,"line":4235},86,[1092,4237,4238],{"class":1325},"            reasoningSummary",[1092,4240,1329],{"class":1319},[1092,4242,1406],{"class":1319},[1092,4244,4245],{"class":1102},"detailed",[1092,4247,1370],{"class":1319},[1092,4249,4251],{"class":1094,"line":4250},87,[1092,4252,4253],{"class":1319},"          }\n",[1092,4255,4257],{"class":1094,"line":4256},88,[1092,4258,4259],{"class":1319},"        }\n",[1092,4261,4263,4266],{"class":1094,"line":4262},89,[1092,4264,4265],{"class":1319},"      }",[1092,4267,1454],{"class":1325},[1092,4269,4271],{"class":1094,"line":4270},90,[1092,4272,1384],{"emptyLinePlaceholder":21},[1092,4274,4276],{"class":1094,"line":4275},91,[1092,4277,4278],{"class":2670},"      \u002F\u002F Notify the client that a title was generated\n",[1092,4280,4282,4285,4287,4289,4291,4293,4295,4297],{"class":1094,"line":4281},92,[1092,4283,4284],{"class":1305},"      if",[1092,4286,1925],{"class":1325},[1092,4288,3546],{"class":1319},[1092,4290,262],{"class":1315},[1092,4292,1782],{"class":1319},[1092,4294,3625],{"class":1315},[1092,4296,3551],{"class":1325},[1092,4298,1320],{"class":1319},[1092,4300,4302,4305,4307,4310,4312],{"class":1094,"line":4301},93,[1092,4303,4304],{"class":1315},"        writer",[1092,4306,1782],{"class":1319},[1092,4308,4309],{"class":1115},"write",[1092,4311,1316],{"class":1325},[1092,4313,1320],{"class":1319},[1092,4315,4317,4320,4322,4324,4327,4329],{"class":1094,"line":4316},94,[1092,4318,4319],{"class":1325},"          type",[1092,4321,1329],{"class":1319},[1092,4323,1406],{"class":1319},[1092,4325,4326],{"class":1102},"data-chat-title",[1092,4328,1344],{"class":1319},[1092,4330,1347],{"class":1319},[1092,4332,4334,4337,4339,4341,4343,4345,4347,4350,4352],{"class":1094,"line":4333},95,[1092,4335,4336],{"class":1325},"          data",[1092,4338,1329],{"class":1319},[1092,4340,1684],{"class":1319},[1092,4342,2597],{"class":1325},[1092,4344,1329],{"class":1319},[1092,4346,1406],{"class":1319},[1092,4348,4349],{"class":1102},"Title generated",[1092,4351,1344],{"class":1319},[1092,4353,3102],{"class":1319},[1092,4355,4357,4360,4362],{"class":1094,"line":4356},96,[1092,4358,4359],{"class":1325},"          transient",[1092,4361,1329],{"class":1319},[1092,4363,4364],{"class":4178}," true\n",[1092,4366,4368,4371],{"class":1094,"line":4367},97,[1092,4369,4370],{"class":1319},"        }",[1092,4372,1454],{"class":1325},[1092,4374,4376],{"class":1094,"line":4375},98,[1092,4377,4378],{"class":1319},"      }\n",[1092,4380,4382],{"class":1094,"line":4381},99,[1092,4383,1384],{"emptyLinePlaceholder":21},[1092,4385,4387,4390,4392,4395,4397,4400,4402,4405],{"class":1094,"line":4386},100,[1092,4388,4389],{"class":1315},"      writer",[1092,4391,1782],{"class":1319},[1092,4393,4394],{"class":1115},"merge",[1092,4396,1316],{"class":1325},[1092,4398,4399],{"class":1315},"result",[1092,4401,1782],{"class":1319},[1092,4403,4404],{"class":1115},"toUIMessageStream",[1092,4406,1882],{"class":1325},[1092,4408,4410],{"class":1094,"line":4409},101,[1092,4411,4412],{"class":1319},"    },\n",[1092,4414,4416,4419,4421,4423,4425,4427,4429,4431],{"class":1094,"line":4415},102,[1092,4417,4418],{"class":1115},"    onFinish",[1092,4420,1329],{"class":1319},[1092,4422,4002],{"class":1562},[1092,4424,1913],{"class":1319},[1092,4426,3277],{"class":1916},[1092,4428,1920],{"class":1319},[1092,4430,1799],{"class":1562},[1092,4432,1395],{"class":1319},[1092,4434,4436],{"class":1094,"line":4435},103,[1092,4437,4438],{"class":2670},"      \u002F\u002F Save the assistant's response to the database\n",[1092,4440,4442,4445,4447,4449,4451,4453,4455,4457,4459,4461,4463,4465,4467,4469,4471,4474,4476,4479,4481,4483],{"class":1094,"line":4441},104,[1092,4443,4444],{"class":1305},"      await",[1092,4446,2420],{"class":1315},[1092,4448,1782],{"class":1319},[1092,4450,2692],{"class":1115},[1092,4452,1316],{"class":1325},[1092,4454,2697],{"class":1315},[1092,4456,1782],{"class":1319},[1092,4458,1971],{"class":1315},[1092,4460,1856],{"class":1325},[1092,4462,1782],{"class":1319},[1092,4464,2708],{"class":1115},[1092,4466,1316],{"class":1325},[1092,4468,1971],{"class":1315},[1092,4470,1782],{"class":1319},[1092,4472,4473],{"class":1115},"map",[1092,4475,1316],{"class":1325},[1092,4477,4478],{"class":1916},"message",[1092,4480,1799],{"class":1562},[1092,4482,1925],{"class":1325},[1092,4484,1320],{"class":1319},[1092,4486,4488,4491,4493,4495,4497,4499],{"class":1094,"line":4487},105,[1092,4489,4490],{"class":1325},"        chatId",[1092,4492,1329],{"class":1319},[1092,4494,2770],{"class":1315},[1092,4496,1782],{"class":1319},[1092,4498,1993],{"class":1315},[1092,4500,1347],{"class":1319},[1092,4502,4504,4507,4509,4511,4513,4515,4517,4519,4521,4523,4526,4528,4530,4532],{"class":1094,"line":4503},106,[1092,4505,4506],{"class":1325},"        role",[1092,4508,1329],{"class":1319},[1092,4510,2597],{"class":1315},[1092,4512,1782],{"class":1319},[1092,4514,2107],{"class":1315},[1092,4516,3518],{"class":1305},[1092,4518,1406],{"class":1319},[1092,4520,2125],{"class":1102},[1092,4522,1344],{"class":1319},[1092,4524,4525],{"class":1319}," |",[1092,4527,1406],{"class":1319},[1092,4529,2134],{"class":1102},[1092,4531,1344],{"class":1319},[1092,4533,1347],{"class":1319},[1092,4535,4537,4540,4542,4544,4546],{"class":1094,"line":4536},107,[1092,4538,4539],{"class":1325},"        parts",[1092,4541,1329],{"class":1319},[1092,4543,2597],{"class":1315},[1092,4545,1782],{"class":1319},[1092,4547,2805],{"class":1315},[1092,4549,4551,4553],{"class":1094,"line":4550},108,[1092,4552,4265],{"class":1319},[1092,4554,4555],{"class":1325},")))\n",[1092,4557,4559],{"class":1094,"line":4558},109,[1092,4560,4561],{"class":1319},"    }\n",[1092,4563,4565,4567],{"class":1094,"line":4564},110,[1092,4566,2393],{"class":1319},[1092,4568,1454],{"class":1325},[1092,4570,4572],{"class":1094,"line":4571},111,[1092,4573,1384],{"emptyLinePlaceholder":21},[1092,4575,4577,4579,4582,4584,4586,4588,4590],{"class":1094,"line":4576},112,[1092,4578,2820],{"class":1305},[1092,4580,4581],{"class":1115}," createUIMessageStreamResponse",[1092,4583,1316],{"class":1325},[1092,4585,1839],{"class":1319},[1092,4587,3982],{"class":1315},[1092,4589,1706],{"class":1319},[1092,4591,1454],{"class":1325},[1092,4593,4595,4597],{"class":1094,"line":4594},113,[1092,4596,1451],{"class":1319},[1092,4598,1454],{"class":1315},[982,4600,4601],{},"Here's what each part does:",[982,4603,4604],{},[1000,4605,4606],{},"AI Gateway",[982,4608,4609,4610,4613],{},"Thanks to ",[1036,4611,1073],{"href":1071,"rel":4612},[1040],", we can use any AI model supported by the gateway just by specifying the model name.",[982,4615,4616],{},[1000,4617,4618],{},"Automatic Title Generation",[982,4620,4621,4622,4629],{},"When a chat doesn't have a title yet, we use ",[1036,4623,4626],{"href":4624,"rel":4625},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-core\u002Fgenerate-text#generatetext",[1040],[1042,4627,4628],{},"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\".",[982,4631,4632],{},[1000,4633,4634],{},"Streaming with streamText",[982,4636,4637,4638,4643],{},"The ",[1036,4639,4641],{"href":2839,"rel":4640},[1040],[1042,4642,2843],{}," function generates a streaming response from the AI model. Key options include:",[994,4645,4646,4652,4657],{},[997,4647,4648,4651],{},[1042,4649,4650],{},"model",": The AI model to use",[997,4653,4654,4656],{},[1042,4655,2143],{},": Instructions that guide the AI's behavior",[997,4658,4659,4661],{},[1042,4660,1971],{},": The conversation history",[982,4663,4664],{},[1000,4665,4666],{},"UIMessageStream",[982,4668,4637,4669,1045,4675,4681],{},[1036,4670,4673],{"href":4671,"rel":4672},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream#createuimessagestream",[1040],[1042,4674,2851],{},[1036,4676,4679],{"href":4677,"rel":4678},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream-response#createuimessagestreamresponse",[1040],[1042,4680,2859],{}," 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.",[982,4683,4637,4684,4687,4688,4690,4691,4694],{},[1042,4685,4686],{},"writer.write()"," method allows sending custom data events to the client (like ",[1042,4689,4326],{},"), while ",[1042,4692,4693],{},"onFinish"," is called when streaming completes, perfect for persisting the assistant's response.",[1120,4696,4698],{"id":4697},"fetching-a-chat","Fetching a chat",[982,4700,4701],{},"Add an endpoint to fetch existing chat data from your database:",[1292,4703,4704],{},[1083,4705,4708],{"className":1296,"code":4706,"filename":4707,"language":1298,"meta":1088,"style":1088},"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",[1042,4709,4710,4736,4759,4781,4799,4803,4825,4857,4871,4883,4887,4915,4946,4955,4964,4993,4997,5001,5007,5011,5025,5057,5061,5065,5071],{"__ignoreMap":1088},[1092,4711,4712,4714,4716,4718,4720,4722,4724,4726,4728,4730,4732,4734],{"class":1094,"line":1095},[1092,4713,1681],{"class":1305},[1092,4715,1684],{"class":1319},[1092,4717,2879],{"class":1315},[1092,4719,1690],{"class":1319},[1092,4721,2477],{"class":1315},[1092,4723,1690],{"class":1319},[1092,4725,2888],{"class":1315},[1092,4727,1706],{"class":1319},[1092,4729,1709],{"class":1305},[1092,4731,1406],{"class":1319},[1092,4733,1120],{"class":1102},[1092,4735,1370],{"class":1319},[1092,4737,4738,4740,4742,4745,4747,4749,4751,4753,4755,4757],{"class":1094,"line":1112},[1092,4739,1681],{"class":1305},[1092,4741,1684],{"class":1319},[1092,4743,4744],{"class":1315}," asc",[1092,4746,1690],{"class":1319},[1092,4748,2911],{"class":1315},[1092,4750,1706],{"class":1319},[1092,4752,1709],{"class":1305},[1092,4754,1406],{"class":1319},[1092,4756,1734],{"class":1102},[1092,4758,1370],{"class":1319},[1092,4760,4761,4763,4765,4767,4769,4771,4773,4775,4777,4779],{"class":1094,"line":1335},[1092,4762,1681],{"class":1305},[1092,4764,1684],{"class":1319},[1092,4766,2420],{"class":1315},[1092,4768,1690],{"class":1319},[1092,4770,2528],{"class":1315},[1092,4772,1706],{"class":1319},[1092,4774,1709],{"class":1305},[1092,4776,1406],{"class":1319},[1092,4778,2537],{"class":1102},[1092,4780,1370],{"class":1319},[1092,4782,4783,4785,4787,4789,4791,4793,4795,4797],{"class":1094,"line":1350},[1092,4784,1681],{"class":1305},[1092,4786,1684],{"class":1319},[1092,4788,2548],{"class":1315},[1092,4790,1706],{"class":1319},[1092,4792,1709],{"class":1305},[1092,4794,1406],{"class":1319},[1092,4796,2557],{"class":1102},[1092,4798,1370],{"class":1319},[1092,4800,4801],{"class":1094,"line":1362},[1092,4802,1384],{"emptyLinePlaceholder":21},[1092,4804,4805,4807,4809,4811,4813,4815,4817,4819,4821,4823],{"class":1094,"line":1373},[1092,4806,1306],{"class":1305},[1092,4808,1309],{"class":1305},[1092,4810,2477],{"class":1115},[1092,4812,1316],{"class":1315},[1092,4814,2576],{"class":1562},[1092,4816,1925],{"class":1319},[1092,4818,2581],{"class":1916},[1092,4820,1856],{"class":1319},[1092,4822,1799],{"class":1562},[1092,4824,1395],{"class":1319},[1092,4826,4827,4829,4831,4833,4835,4837,4839,4841,4843,4845,4847,4849,4851,4853,4855],{"class":1094,"line":1381},[1092,4828,2592],{"class":1562},[1092,4830,1684],{"class":1319},[1092,4832,3202],{"class":1315},[1092,4834,1706],{"class":1319},[1092,4836,2602],{"class":1319},[1092,4838,2605],{"class":1305},[1092,4840,2888],{"class":1115},[1092,4842,1316],{"class":1325},[1092,4844,2581],{"class":1315},[1092,4846,1690],{"class":1319},[1092,4848,2548],{"class":1315},[1092,4850,1782],{"class":1319},[1092,4852,2620],{"class":1115},[1092,4854,1316],{"class":1325},[1092,4856,1320],{"class":1319},[1092,4858,4859,4861,4863,4865,4867,4869],{"class":1094,"line":1387},[1092,4860,3231],{"class":1325},[1092,4862,1329],{"class":1319},[1092,4864,2548],{"class":1315},[1092,4866,1782],{"class":1319},[1092,4868,3240],{"class":1115},[1092,4870,2648],{"class":1325},[1092,4872,4873,4875,4877,4879,4881],{"class":1094,"line":1398},[1092,4874,2393],{"class":1319},[1092,4876,1856],{"class":1325},[1092,4878,1782],{"class":1319},[1092,4880,2659],{"class":1315},[1092,4882,1454],{"class":1325},[1092,4884,4885],{"class":1094,"line":1414},[1092,4886,1384],{"emptyLinePlaceholder":21},[1092,4888,4889,4891,4893,4895,4897,4899,4901,4903,4905,4907,4909,4911,4913],{"class":1094,"line":1420},[1092,4890,2592],{"class":1562},[1092,4892,2770],{"class":1315},[1092,4894,2602],{"class":1319},[1092,4896,2605],{"class":1305},[1092,4898,2420],{"class":1315},[1092,4900,1782],{"class":1319},[1092,4902,3466],{"class":1315},[1092,4904,1782],{"class":1319},[1092,4906,1761],{"class":1315},[1092,4908,1782],{"class":1319},[1092,4910,3475],{"class":1115},[1092,4912,1316],{"class":1325},[1092,4914,1320],{"class":1319},[1092,4916,4917,4919,4921,4923,4925,4927,4929,4931,4933,4935,4937,4939,4941,4944],{"class":1094,"line":1425},[1092,4918,3485],{"class":1325},[1092,4920,1329],{"class":1319},[1092,4922,1925],{"class":1325},[1092,4924,3776],{"class":1115},[1092,4926,1316],{"class":1325},[1092,4928,2697],{"class":1315},[1092,4930,1782],{"class":1319},[1092,4932,1761],{"class":1315},[1092,4934,1782],{"class":1319},[1092,4936,1993],{"class":1315},[1092,4938,1690],{"class":1319},[1092,4940,3202],{"class":1315},[1092,4942,4943],{"class":1325},"))",[1092,4945,1347],{"class":1319},[1092,4947,4948,4951,4953],{"class":1094,"line":1448},[1092,4949,4950],{"class":1325},"    with",[1092,4952,1329],{"class":1319},[1092,4954,1395],{"class":1319},[1092,4956,4957,4960,4962],{"class":1094,"line":1953},[1092,4958,4959],{"class":1325},"      messages",[1092,4961,1329],{"class":1319},[1092,4963,1395],{"class":1319},[1092,4965,4966,4969,4971,4974,4976,4978,4980,4982,4984,4986,4988,4991],{"class":1094,"line":1980},[1092,4967,4968],{"class":1115},"        orderBy",[1092,4970,1329],{"class":1319},[1092,4972,4973],{"class":1319}," ()",[1092,4975,1799],{"class":1562},[1092,4977,4744],{"class":1115},[1092,4979,1316],{"class":1325},[1092,4981,2697],{"class":1315},[1092,4983,1782],{"class":1319},[1092,4985,1971],{"class":1315},[1092,4987,1782],{"class":1319},[1092,4989,4990],{"class":1315},"createdAt",[1092,4992,1454],{"class":1325},[1092,4994,4995],{"class":1094,"line":2026},[1092,4996,4378],{"class":1319},[1092,4998,4999],{"class":1094,"line":2093},[1092,5000,4561],{"class":1319},[1092,5002,5003,5005],{"class":1094,"line":2163},[1092,5004,2393],{"class":1319},[1092,5006,1454],{"class":1325},[1092,5008,5009],{"class":1094,"line":2203},[1092,5010,1384],{"emptyLinePlaceholder":21},[1092,5012,5013,5015,5017,5019,5021,5023],{"class":1094,"line":2254},[1092,5014,3541],{"class":1305},[1092,5016,1925],{"class":1325},[1092,5018,3546],{"class":1319},[1092,5020,262],{"class":1315},[1092,5022,3551],{"class":1325},[1092,5024,1320],{"class":1319},[1092,5026,5027,5029,5031,5033,5035,5037,5039,5041,5043,5045,5047,5049,5051,5053,5055],{"class":1094,"line":2267},[1092,5028,3559],{"class":1305},[1092,5030,2879],{"class":1115},[1092,5032,1316],{"class":1325},[1092,5034,1839],{"class":1319},[1092,5036,3568],{"class":1325},[1092,5038,1329],{"class":1319},[1092,5040,3574],{"class":3573},[1092,5042,1690],{"class":1319},[1092,5044,3579],{"class":1325},[1092,5046,1329],{"class":1319},[1092,5048,1406],{"class":1319},[1092,5050,3586],{"class":1102},[1092,5052,1344],{"class":1319},[1092,5054,1706],{"class":1319},[1092,5056,1454],{"class":1325},[1092,5058,5059],{"class":1094,"line":2297},[1092,5060,3598],{"class":1319},[1092,5062,5063],{"class":1094,"line":2303},[1092,5064,1384],{"emptyLinePlaceholder":21},[1092,5066,5067,5069],{"class":1094,"line":2308},[1092,5068,2820],{"class":1305},[1092,5070,2823],{"class":1315},[1092,5072,5073,5075],{"class":1094,"line":2340},[1092,5074,1451],{"class":1319},[1092,5076,1454],{"class":1315},[986,5078,5080],{"id":5079},"wire-up-the-ui","Wire up the UI",[982,5082,5083,5084,5089,5090,5095],{},"Nuxt UI provides purpose-built components for AI chat interfaces: ",[1036,5085,5086],{"href":281},[1042,5087,5088],{},"UChatPrompt"," for the input area and ",[1036,5091,5092],{"href":271},[1042,5093,5094],{},"UChatMessages"," for displaying the conversation.",[1120,5097,5099],{"id":5098},"creating-the-home-page","Creating the home page",[982,5101,5102,5103,5107],{},"The home page is where users start a new conversation. The ",[1036,5104,5105],{"href":281},[1042,5106,5088],{}," component provides a textarea with auto-resize, keyboard shortcuts, and a submit button:",[1292,5109,5110],{},[1083,5111,5115],{"className":1524,"code":5112,"filename":5113,"highlights":5114,"language":34,"meta":1088,"style":1088},"\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",[3445,3451,3482,3526,3533,3538,3556,3595,3601],[1042,5116,5117,5140,5159,5177,5181,5195,5221,5225,5238,5242,5247,5273,5289,5298,5306,5320,5358,5362,5366,5372,5376,5381,5407,5412,5420,5424,5432,5453,5467,5488,5509,5514,5523,5527,5535,5550,5565,5580,5595,5610,5616,5639,5648,5657,5665,5673],{"__ignoreMap":1088},[1092,5118,5119,5121,5124,5127,5130,5132,5134,5136,5138],{"class":1094,"line":1095},[1092,5120,1534],{"class":1319},[1092,5122,5123],{"class":1325},"script",[1092,5125,5126],{"class":1562}," setup",[1092,5128,5129],{"class":1562}," lang",[1092,5131,1566],{"class":1319},[1092,5133,1493],{"class":1319},[1092,5135,1298],{"class":1102},[1092,5137,1493],{"class":1319},[1092,5139,1540],{"class":1319},[1092,5141,5142,5144,5147,5149,5152,5154,5157],{"class":1094,"line":1112},[1092,5143,3041],{"class":1562},[1092,5145,5146],{"class":1315}," input ",[1092,5148,1566],{"class":1319},[1092,5150,5151],{"class":1115}," ref",[1092,5153,1316],{"class":1315},[1092,5155,5156],{"class":1319},"''",[1092,5158,1454],{"class":1315},[1092,5160,5161,5163,5166,5168,5170,5172,5175],{"class":1094,"line":1335},[1092,5162,3041],{"class":1562},[1092,5164,5165],{"class":1315}," loading ",[1092,5167,1566],{"class":1319},[1092,5169,5151],{"class":1115},[1092,5171,1316],{"class":1315},[1092,5173,5174],{"class":4178},"false",[1092,5176,1454],{"class":1315},[1092,5178,5179],{"class":1094,"line":1350},[1092,5180,1384],{"emptyLinePlaceholder":21},[1092,5182,5183,5185,5188,5191,5193],{"class":1094,"line":1362},[1092,5184,2576],{"class":1562},[1092,5186,5187],{"class":1562}," function",[1092,5189,5190],{"class":1115}," createChat",[1092,5192,1779],{"class":1319},[1092,5194,1395],{"class":1319},[1092,5196,5197,5199,5201,5203,5206,5208,5210,5212,5215,5218],{"class":1094,"line":1373},[1092,5198,3541],{"class":1305},[1092,5200,1925],{"class":1325},[1092,5202,3546],{"class":1319},[1092,5204,5205],{"class":1315},"input",[1092,5207,1782],{"class":1319},[1092,5209,3326],{"class":1315},[1092,5211,1782],{"class":1319},[1092,5213,5214],{"class":1115},"trim",[1092,5216,5217],{"class":1325},"()) ",[1092,5219,5220],{"class":1305},"return\n",[1092,5222,5223],{"class":1094,"line":1381},[1092,5224,1384],{"emptyLinePlaceholder":21},[1092,5226,5227,5230,5232,5234,5236],{"class":1094,"line":1387},[1092,5228,5229],{"class":1315},"  loading",[1092,5231,1782],{"class":1319},[1092,5233,3326],{"class":1315},[1092,5235,2602],{"class":1319},[1092,5237,4364],{"class":4178},[1092,5239,5240],{"class":1094,"line":1398},[1092,5241,1384],{"emptyLinePlaceholder":21},[1092,5243,5244],{"class":1094,"line":1414},[1092,5245,5246],{"class":2670},"  \u002F\u002F Create a new chat on the server\n",[1092,5248,5249,5251,5253,5255,5257,5260,5262,5264,5267,5269,5271],{"class":1094,"line":1420},[1092,5250,2592],{"class":1562},[1092,5252,2770],{"class":1315},[1092,5254,2602],{"class":1319},[1092,5256,2605],{"class":1305},[1092,5258,5259],{"class":1115}," $fetch",[1092,5261,1316],{"class":1325},[1092,5263,1344],{"class":1319},[1092,5265,5266],{"class":1102},"\u002Fapi\u002Fchats",[1092,5268,1344],{"class":1319},[1092,5270,1690],{"class":1319},[1092,5272,1395],{"class":1319},[1092,5274,5275,5278,5280,5282,5285,5287],{"class":1094,"line":1425},[1092,5276,5277],{"class":1325},"    method",[1092,5279,1329],{"class":1319},[1092,5281,1406],{"class":1319},[1092,5283,5284],{"class":1102},"POST",[1092,5286,1344],{"class":1319},[1092,5288,1347],{"class":1319},[1092,5290,5291,5294,5296],{"class":1094,"line":1448},[1092,5292,5293],{"class":1325},"    body",[1092,5295,1329],{"class":1319},[1092,5297,1395],{"class":1319},[1092,5299,5300,5302,5304],{"class":1094,"line":1953},[1092,5301,3366],{"class":1325},[1092,5303,1329],{"class":1319},[1092,5305,1395],{"class":1319},[1092,5307,5308,5310,5312,5314,5316,5318],{"class":1094,"line":1980},[1092,5309,4506],{"class":1325},[1092,5311,1329],{"class":1319},[1092,5313,1406],{"class":1319},[1092,5315,2125],{"class":1102},[1092,5317,1344],{"class":1319},[1092,5319,1347],{"class":1319},[1092,5321,5322,5324,5326,5328,5330,5332,5334,5336,5339,5341,5343,5345,5347,5350,5352,5354,5356],{"class":1094,"line":2026},[1092,5323,4539],{"class":1325},[1092,5325,1329],{"class":1319},[1092,5327,1433],{"class":1325},[1092,5329,1839],{"class":1319},[1092,5331,2499],{"class":1325},[1092,5333,1329],{"class":1319},[1092,5335,1406],{"class":1319},[1092,5337,5338],{"class":1102},"text",[1092,5340,1344],{"class":1319},[1092,5342,1690],{"class":1319},[1092,5344,1693],{"class":1325},[1092,5346,1329],{"class":1319},[1092,5348,5349],{"class":1315}," input",[1092,5351,1782],{"class":1319},[1092,5353,3326],{"class":1315},[1092,5355,1706],{"class":1319},[1092,5357,3167],{"class":1325},[1092,5359,5360],{"class":1094,"line":2093},[1092,5361,4378],{"class":1319},[1092,5363,5364],{"class":1094,"line":2163},[1092,5365,4561],{"class":1319},[1092,5367,5368,5370],{"class":1094,"line":2203},[1092,5369,2393],{"class":1319},[1092,5371,1454],{"class":1325},[1092,5373,5374],{"class":1094,"line":2254},[1092,5375,1384],{"emptyLinePlaceholder":21},[1092,5377,5378],{"class":1094,"line":2267},[1092,5379,5380],{"class":2670},"  \u002F\u002F Navigate to the chat page\n",[1092,5382,5383,5386,5388,5390,5393,5396,5398,5400,5402,5405],{"class":1094,"line":2297},[1092,5384,5385],{"class":1115},"  navigateTo",[1092,5387,1316],{"class":1325},[1092,5389,3686],{"class":1319},[1092,5391,5392],{"class":1102},"\u002Fchat\u002F",[1092,5394,5395],{"class":1319},"${",[1092,5397,262],{"class":1315},[1092,5399,1782],{"class":1319},[1092,5401,1993],{"class":1315},[1092,5403,5404],{"class":1319},"}`",[1092,5406,1454],{"class":1325},[1092,5408,5409],{"class":1094,"line":2303},[1092,5410,5411],{"class":1319},"}\n",[1092,5413,5414,5416,5418],{"class":1094,"line":2308},[1092,5415,1610],{"class":1319},[1092,5417,5123],{"class":1325},[1092,5419,1540],{"class":1319},[1092,5421,5422],{"class":1094,"line":2340},[1092,5423,1384],{"emptyLinePlaceholder":21},[1092,5425,5426,5428,5430],{"class":1094,"line":2356},[1092,5427,1534],{"class":1319},[1092,5429,1537],{"class":1325},[1092,5431,1540],{"class":1319},[1092,5433,5434,5436,5439,5442,5444,5446,5449,5451],{"class":1094,"line":2374},[1092,5435,1547],{"class":1319},[1092,5437,5438],{"class":1325},"UDashboardPanel",[1092,5440,5441],{"class":1562}," :ui",[1092,5443,1566],{"class":1319},[1092,5445,1493],{"class":1319},[1092,5447,5448],{"class":1102},"{ body: 'p-0 sm:p-0' }",[1092,5450,1493],{"class":1319},[1092,5452,1540],{"class":1319},[1092,5454,5455,5457,5459,5462,5465],{"class":1094,"line":2390},[1092,5456,1556],{"class":1319},[1092,5458,1537],{"class":1325},[1092,5460,5461],{"class":1319}," #",[1092,5463,5464],{"class":1562},"body",[1092,5466,1540],{"class":1319},[1092,5468,5469,5471,5474,5477,5479,5481,5484,5486],{"class":1094,"line":2398},[1092,5470,1580],{"class":1319},[1092,5472,5473],{"class":1325},"UContainer",[1092,5475,5476],{"class":1562}," class",[1092,5478,1566],{"class":1319},[1092,5480,1493],{"class":1319},[1092,5482,5483],{"class":1102},"min-h-dvh flex flex-col justify-center gap-6 py-8",[1092,5485,1493],{"class":1319},[1092,5487,1540],{"class":1319},[1092,5489,5490,5493,5496,5498,5500,5502,5505,5507],{"class":1094,"line":3378},[1092,5491,5492],{"class":1319},"        \u003C",[1092,5494,5495],{"class":1325},"h1",[1092,5497,5476],{"class":1562},[1092,5499,1566],{"class":1319},[1092,5501,1493],{"class":1319},[1092,5503,5504],{"class":1102},"text-3xl sm:text-4xl text-highlighted font-bold",[1092,5506,1493],{"class":1319},[1092,5508,1540],{"class":1319},[1092,5510,5511],{"class":1094,"line":3395},[1092,5512,5513],{"class":1315},"          How can I help you today?\n",[1092,5515,5516,5519,5521],{"class":1094,"line":3427},[1092,5517,5518],{"class":1319},"        \u003C\u002F",[1092,5520,5495],{"class":1325},[1092,5522,1540],{"class":1319},[1092,5524,5525],{"class":1094,"line":3440},[1092,5526,1384],{"emptyLinePlaceholder":21},[1092,5528,5530,5532],{"class":5529,"line":3445},[1094,1544],[1092,5531,5492],{"class":1319},[1092,5533,5534],{"class":1325},"UChatPrompt\n",[1092,5536,5538,5541,5543,5545,5547],{"class":5537,"line":3451},[1094,1544],[1092,5539,5540],{"class":1562},"          v-model",[1092,5542,1566],{"class":1319},[1092,5544,1493],{"class":1319},[1092,5546,5205],{"class":1102},[1092,5548,5549],{"class":1319},"\"\n",[1092,5551,5553,5556,5558,5560,5563],{"class":5552,"line":3482},[1094,1544],[1092,5554,5555],{"class":1562},"          :status",[1092,5557,1566],{"class":1319},[1092,5559,1493],{"class":1319},[1092,5561,5562],{"class":1102},"loading ? 'streaming' : 'ready'",[1092,5564,5549],{"class":1319},[1092,5566,5568,5571,5573,5575,5578],{"class":5567,"line":3526},[1094,1544],[1092,5569,5570],{"class":1562},"          variant",[1092,5572,1566],{"class":1319},[1092,5574,1493],{"class":1319},[1092,5576,5577],{"class":1102},"subtle",[1092,5579,5549],{"class":1319},[1092,5581,5583,5586,5588,5590,5593],{"class":5582,"line":3533},[1094,1544],[1092,5584,5585],{"class":1562},"          placeholder",[1092,5587,1566],{"class":1319},[1092,5589,1493],{"class":1319},[1092,5591,5592],{"class":1102},"Ask me anything...",[1092,5594,5549],{"class":1319},[1092,5596,5598,5601,5603,5605,5608],{"class":5597,"line":3538},[1094,1544],[1092,5599,5600],{"class":1562},"          @submit",[1092,5602,1566],{"class":1319},[1092,5604,1493],{"class":1319},[1092,5606,5607],{"class":1102},"createChat",[1092,5609,5549],{"class":1319},[1092,5611,5613],{"class":5612,"line":3556},[1094,1544],[1092,5614,5615],{"class":1319},"        >\n",[1092,5617,5619,5622,5625,5628,5630,5632,5635,5637],{"class":5618,"line":3595},[1094,1544],[1092,5620,5621],{"class":1319},"          \u003C",[1092,5623,5624],{"class":1325},"UChatPromptSubmit",[1092,5626,5627],{"class":1562}," color",[1092,5629,1566],{"class":1319},[1092,5631,1493],{"class":1319},[1092,5633,5634],{"class":1102},"neutral",[1092,5636,1493],{"class":1319},[1092,5638,1586],{"class":1319},[1092,5640,5642,5644,5646],{"class":5641,"line":3601},[1094,1544],[1092,5643,5518],{"class":1319},[1092,5645,5088],{"class":1325},[1092,5647,1540],{"class":1319},[1092,5649,5650,5653,5655],{"class":1094,"line":3606},[1092,5651,5652],{"class":1319},"      \u003C\u002F",[1092,5654,5473],{"class":1325},[1092,5656,1540],{"class":1319},[1092,5658,5659,5661,5663],{"class":1094,"line":3612},[1092,5660,1591],{"class":1319},[1092,5662,1537],{"class":1325},[1092,5664,1540],{"class":1319},[1092,5666,5667,5669,5671],{"class":1094,"line":3632},[1092,5668,1601],{"class":1319},[1092,5670,5438],{"class":1325},[1092,5672,1540],{"class":1319},[1092,5674,5675,5677,5679],{"class":1094,"line":3660},[1092,5676,1610],{"class":1319},[1092,5678,1537],{"class":1325},[1092,5680,1540],{"class":1319},[982,5682,4637,5683,5687],{},[1036,5684,5685],{"href":281},[1042,5686,5088],{}," component automatically handles:",[994,5689,5690,5697,5700,5710],{},[997,5691,5692,5693],{},"Form submission when pressing ",[5694,5695],"kbd",{"value":5696},"enter",[997,5698,5699],{},"Auto-resizing as you type",[997,5701,5702,5703,5706,5707],{},"A loading state when ",[1042,5704,5705],{},"status"," is set to ",[1042,5708,5709],{},"streaming",[997,5711,5712],{},"Focus management and keyboard shortcuts",[1120,5714,5716],{"id":5715},"setting-up-markdown-rendering","Setting up Markdown rendering",[982,5718,5719,5720,5727,5728,5735,5736,5738,5739,5744],{},"AI models often respond with Markdown formatting (code blocks, lists, bold text, etc.). Before building the chat page, create a custom ",[1036,5721,5724],{"href":5722,"rel":5723},"https:\u002F\u002Fcomark.dev",[1040],[1042,5725,5726],{},"Comark"," component that will handle streaming Markdown rendering. Using ",[1036,5729,5732],{"href":5730,"rel":5731},"https:\u002F\u002Fcomark.dev\u002Frendering\u002Fvue#code-definecomarkcomponent",[1040],[1042,5733,5734],{},"defineComarkComponent",", you can enable the ",[1042,5737,1544],{}," plugin for syntax highlighting in code blocks and register additional ",[1036,5740,5743],{"href":5741,"rel":5742},"https:\u002F\u002Fshiki.style",[1040],"Shiki"," languages beyond the defaults (TypeScript, JavaScript, Vue, Shell, JSON, YAML, Markdown):",[1292,5746,5747],{},[1083,5748,5751],{"className":1296,"code":5749,"filename":5750,"language":1298,"meta":1088,"style":1088},"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",[1042,5752,5753,5770,5786,5802,5818,5834,5838,5851,5867,5876,5885,5910,5916,5922,5936],{"__ignoreMap":1088},[1092,5754,5755,5757,5760,5763,5765,5768],{"class":1094,"line":1095},[1092,5756,1681],{"class":1305},[1092,5758,5759],{"class":1315}," highlight ",[1092,5761,5762],{"class":1305},"from",[1092,5764,1406],{"class":1319},[1092,5766,5767],{"class":1102},"@comark\u002Fnuxt\u002Fplugins\u002Fhighlight",[1092,5769,1370],{"class":1319},[1092,5771,5772,5774,5777,5779,5781,5784],{"class":1094,"line":1112},[1092,5773,1681],{"class":1305},[1092,5775,5776],{"class":1315}," python ",[1092,5778,5762],{"class":1305},[1092,5780,1406],{"class":1319},[1092,5782,5783],{"class":1102},"@shikijs\u002Flangs\u002Fpython",[1092,5785,1370],{"class":1319},[1092,5787,5788,5790,5793,5795,5797,5800],{"class":1094,"line":1335},[1092,5789,1681],{"class":1305},[1092,5791,5792],{"class":1315}," sql ",[1092,5794,5762],{"class":1305},[1092,5796,1406],{"class":1319},[1092,5798,5799],{"class":1102},"@shikijs\u002Flangs\u002Fsql",[1092,5801,1370],{"class":1319},[1092,5803,5804,5806,5809,5811,5813,5816],{"class":1094,"line":1350},[1092,5805,1681],{"class":1305},[1092,5807,5808],{"class":1315}," go ",[1092,5810,5762],{"class":1305},[1092,5812,1406],{"class":1319},[1092,5814,5815],{"class":1102},"@shikijs\u002Flangs\u002Fgo",[1092,5817,1370],{"class":1319},[1092,5819,5820,5822,5825,5827,5829,5832],{"class":1094,"line":1362},[1092,5821,1681],{"class":1305},[1092,5823,5824],{"class":1315}," rust ",[1092,5826,5762],{"class":1305},[1092,5828,1406],{"class":1319},[1092,5830,5831],{"class":1102},"@shikijs\u002Flangs\u002Frust",[1092,5833,1370],{"class":1319},[1092,5835,5836],{"class":1094,"line":1373},[1092,5837,1384],{"emptyLinePlaceholder":21},[1092,5839,5840,5842,5844,5847,5849],{"class":1094,"line":1381},[1092,5841,1306],{"class":1305},[1092,5843,1309],{"class":1305},[1092,5845,5846],{"class":1115}," defineComarkComponent",[1092,5848,1316],{"class":1315},[1092,5850,1320],{"class":1319},[1092,5852,5853,5856,5858,5860,5863,5865],{"class":1094,"line":1387},[1092,5854,5855],{"class":1325},"  name",[1092,5857,1329],{"class":1319},[1092,5859,1406],{"class":1319},[1092,5861,5862],{"class":1102},"ChatComark",[1092,5864,1344],{"class":1319},[1092,5866,1347],{"class":1319},[1092,5868,5869,5872,5874],{"class":1094,"line":1398},[1092,5870,5871],{"class":1325},"  plugins",[1092,5873,1329],{"class":1319},[1092,5875,1332],{"class":1315},[1092,5877,5878,5881,5883],{"class":1094,"line":1414},[1092,5879,5880],{"class":1115},"    highlight",[1092,5882,1316],{"class":1315},[1092,5884,1320],{"class":1319},[1092,5886,5887,5890,5892,5895,5897,5900,5902,5905,5907],{"class":1094,"line":1420},[1092,5888,5889],{"class":1325},"      languages",[1092,5891,1329],{"class":1319},[1092,5893,5894],{"class":1315}," [python",[1092,5896,1690],{"class":1319},[1092,5898,5899],{"class":1315}," sql",[1092,5901,1690],{"class":1319},[1092,5903,5904],{"class":1315}," go",[1092,5906,1690],{"class":1319},[1092,5908,5909],{"class":1315}," rust]\n",[1092,5911,5912,5914],{"class":1094,"line":1425},[1092,5913,3381],{"class":1319},[1092,5915,1454],{"class":1315},[1092,5917,5918,5920],{"class":1094,"line":1448},[1092,5919,1376],{"class":1315},[1092,5921,1347],{"class":1319},[1092,5923,5924,5927,5929,5931,5934],{"class":1094,"line":1953},[1092,5925,5926],{"class":1325},"  class",[1092,5928,1329],{"class":1319},[1092,5930,1406],{"class":1319},[1092,5932,5933],{"class":1102},"*:first:mt-0 *:last:mb-0",[1092,5935,1370],{"class":1319},[1092,5937,5938,5940],{"class":1094,"line":1980},[1092,5939,1451],{"class":1319},[1092,5941,1454],{"class":1315},[982,5943,5944,5945,5948],{},"This creates a ",[1042,5946,5947],{},"\u003CChatComark>"," component we'll use in the chat page to render assistant messages and reasoning content.",[982,5950,5951],{},"Since Comark uses Shiki with dual themes, you need to add the following CSS to your stylesheet for dark mode support:",[1083,5953,5955],{"className":1474,"code":5954,"filename":1476,"language":1477,"meta":1088,"style":1088},"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",[1042,5956,5957,5978,6001,6021,6041,6061,6081],{"__ignoreMap":1088},[1092,5958,5959,5962,5964,5967,5970,5973,5976],{"class":1094,"line":1095},[1092,5960,5961],{"class":1098},"html",[1092,5963,1782],{"class":1319},[1092,5965,5966],{"class":1098},"dark",[1092,5968,5969],{"class":1319}," .",[1092,5971,5972],{"class":1098},"shiki",[1092,5974,5975],{"class":1098}," span",[1092,5977,1395],{"class":1319},[1092,5979,5980,5984,5986,5989,5991,5994,5996,5999],{"class":1094,"line":1112},[1092,5981,5983],{"class":5982},"sqsOY","  color",[1092,5985,1329],{"class":1319},[1092,5987,5988],{"class":1115}," var",[1092,5990,1316],{"class":1319},[1092,5992,5993],{"class":1315},"--shiki-dark",[1092,5995,1856],{"class":1319},[1092,5997,5998],{"class":3573}," !important",[1092,6000,1496],{"class":1319},[1092,6002,6003,6006,6008,6010,6012,6015,6017,6019],{"class":1094,"line":1335},[1092,6004,6005],{"class":5982},"  background-color",[1092,6007,1329],{"class":1319},[1092,6009,5988],{"class":1115},[1092,6011,1316],{"class":1319},[1092,6013,6014],{"class":1315},"--shiki-dark-bg",[1092,6016,1856],{"class":1319},[1092,6018,5998],{"class":3573},[1092,6020,1496],{"class":1319},[1092,6022,6023,6026,6028,6030,6032,6035,6037,6039],{"class":1094,"line":1350},[1092,6024,6025],{"class":5982},"  font-style",[1092,6027,1329],{"class":1319},[1092,6029,5988],{"class":1115},[1092,6031,1316],{"class":1319},[1092,6033,6034],{"class":1315},"--shiki-dark-font-style",[1092,6036,1856],{"class":1319},[1092,6038,5998],{"class":3573},[1092,6040,1496],{"class":1319},[1092,6042,6043,6046,6048,6050,6052,6055,6057,6059],{"class":1094,"line":1362},[1092,6044,6045],{"class":5982},"  font-weight",[1092,6047,1329],{"class":1319},[1092,6049,5988],{"class":1115},[1092,6051,1316],{"class":1319},[1092,6053,6054],{"class":1315},"--shiki-dark-font-weight",[1092,6056,1856],{"class":1319},[1092,6058,5998],{"class":3573},[1092,6060,1496],{"class":1319},[1092,6062,6063,6066,6068,6070,6072,6075,6077,6079],{"class":1094,"line":1373},[1092,6064,6065],{"class":5982},"  text-decoration",[1092,6067,1329],{"class":1319},[1092,6069,5988],{"class":1115},[1092,6071,1316],{"class":1319},[1092,6073,6074],{"class":1315},"--shiki-dark-text-decoration",[1092,6076,1856],{"class":1319},[1092,6078,5998],{"class":3573},[1092,6080,1496],{"class":1319},[1092,6082,6083],{"class":1094,"line":1381},[1092,6084,5411],{"class":1319},[986,6086,6088],{"id":6087},"creating-the-chat-page","Creating the chat page",[982,6090,6091,6092,6098,6099,6106],{},"The chat page is where the actual conversation happens. It integrates the AI SDK's ",[1036,6093,6096],{"href":6094,"rel":6095},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fchat",[1040],[1042,6097,259],{}," class and ",[1036,6100,6103],{"href":6101,"rel":6102},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fdefault-chat-transport",[1040],[1042,6104,6105],{},"DefaultChatTransport"," for real-time streaming.",[1292,6108,6109],{},[1669,6110,6111],{},[1083,6112,6116],{"className":1524,"code":6113,"filename":6114,"highlights":6115,"language":34,"meta":1088,"style":1088},"\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",[1112,1335,1350,2203,2254,2267,2297,2303,2308,2340,2356,2374,2390,2398,3378,3395,3427,3440,3445,3451,3482,3526,3533],[1042,6117,6118,6138,6168,6189,6210,6214,6228,6242,6246,6251,6299,6303,6322,6364,6368,6372,6388,6392,6397,6415,6435,6454,6470,6497,6506,6521,6527,6554,6570,6575,6580,6595,6610,6626,6643,6657,6664,6669,6676,6680,6702,6714,6734,6762,6776,6780,6784,6788,6793,6806,6834,6845,6849,6855,6863,6867,6875,6893,6905,6924,6931,6945,6958,6963,6977,6981,7006,7084,7092,7106,7120,7134,7139,7147,7160,7173,7178,7188,7192,7215,7221,7235,7247,7259,7263,7293,7298,7307,7315,7324,7333,7341,7345,7351,7363,7377,7389,7402,7415,7419,7426,7439,7452,7466,7480,7485,7493,7501,7509,7517],{"__ignoreMap":1088},[1092,6119,6120,6122,6124,6126,6128,6130,6132,6134,6136],{"class":1094,"line":1095},[1092,6121,1534],{"class":1319},[1092,6123,5123],{"class":1325},[1092,6125,5126],{"class":1562},[1092,6127,5129],{"class":1562},[1092,6129,1566],{"class":1319},[1092,6131,1493],{"class":1319},[1092,6133,1298],{"class":1102},[1092,6135,1493],{"class":1319},[1092,6137,1540],{"class":1319},[1092,6139,6141,6143,6145,6148,6150,6153,6155,6158,6160,6162,6164,6166],{"class":6140,"line":1112},[1094,1544],[1092,6142,1681],{"class":1305},[1092,6144,1684],{"class":1319},[1092,6146,6147],{"class":1315}," DefaultChatTransport",[1092,6149,1690],{"class":1319},[1092,6151,6152],{"class":1315}," isReasoningUIPart",[1092,6154,1690],{"class":1319},[1092,6156,6157],{"class":1315}," isTextUIPart",[1092,6159,1706],{"class":1319},[1092,6161,1709],{"class":1305},[1092,6163,1406],{"class":1319},[1092,6165,2513],{"class":1102},[1092,6167,1370],{"class":1319},[1092,6169,6171,6173,6175,6178,6180,6182,6184,6187],{"class":6170,"line":1335},[1094,1544],[1092,6172,1681],{"class":1305},[1092,6174,1684],{"class":1319},[1092,6176,6177],{"class":1315}," Chat",[1092,6179,1706],{"class":1319},[1092,6181,1709],{"class":1305},[1092,6183,1406],{"class":1319},[1092,6185,6186],{"class":1102},"@ai-sdk\u002Fvue",[1092,6188,1370],{"class":1319},[1092,6190,6192,6194,6196,6199,6201,6203,6205,6208],{"class":6191,"line":1350},[1094,1544],[1092,6193,1681],{"class":1305},[1092,6195,1684],{"class":1319},[1092,6197,6198],{"class":1315}," isPartStreaming",[1092,6200,1706],{"class":1319},[1092,6202,1709],{"class":1305},[1092,6204,1406],{"class":1319},[1092,6206,6207],{"class":1102},"@nuxt\u002Fui\u002Futils\u002Fai",[1092,6209,1370],{"class":1319},[1092,6211,6212],{"class":1094,"line":1362},[1092,6213,1384],{"emptyLinePlaceholder":21},[1092,6215,6216,6218,6221,6223,6226],{"class":1094,"line":1373},[1092,6217,3041],{"class":1562},[1092,6219,6220],{"class":1315}," route ",[1092,6222,1566],{"class":1319},[1092,6224,6225],{"class":1115}," useRoute",[1092,6227,2648],{"class":1315},[1092,6229,6230,6232,6235,6237,6240],{"class":1094,"line":1381},[1092,6231,3041],{"class":1562},[1092,6233,6234],{"class":1315}," toast ",[1092,6236,1566],{"class":1319},[1092,6238,6239],{"class":1115}," useToast",[1092,6241,2648],{"class":1315},[1092,6243,6244],{"class":1094,"line":1387},[1092,6245,1384],{"emptyLinePlaceholder":21},[1092,6247,6248],{"class":1094,"line":1398},[1092,6249,6250],{"class":2670},"\u002F\u002F Fetch existing chat data\n",[1092,6252,6253,6255,6257,6260,6262,6265,6267,6269,6271,6274,6276,6278,6281,6283,6286,6288,6291,6293,6295,6297],{"class":1094,"line":1414},[1092,6254,3041],{"class":1562},[1092,6256,1684],{"class":1319},[1092,6258,6259],{"class":1325}," data",[1092,6261,1329],{"class":1319},[1092,6263,6264],{"class":1315}," chatData ",[1092,6266,1451],{"class":1319},[1092,6268,2602],{"class":1319},[1092,6270,2605],{"class":1305},[1092,6272,6273],{"class":1115}," useFetch",[1092,6275,1316],{"class":1315},[1092,6277,3686],{"class":1319},[1092,6279,6280],{"class":1102},"\u002Fapi\u002Fchats\u002F",[1092,6282,5395],{"class":1319},[1092,6284,6285],{"class":1315},"route",[1092,6287,1782],{"class":1319},[1092,6289,6290],{"class":1315},"params",[1092,6292,1782],{"class":1319},[1092,6294,1993],{"class":1315},[1092,6296,5404],{"class":1319},[1092,6298,1454],{"class":1315},[1092,6300,6301],{"class":1094,"line":1420},[1092,6302,1384],{"emptyLinePlaceholder":21},[1092,6304,6305,6308,6310,6312,6315,6317,6320],{"class":1094,"line":1425},[1092,6306,6307],{"class":1305},"if",[1092,6309,1925],{"class":1315},[1092,6311,3546],{"class":1319},[1092,6313,6314],{"class":1315},"chatData",[1092,6316,1782],{"class":1319},[1092,6318,6319],{"class":1315},"value) ",[1092,6321,1320],{"class":1319},[1092,6323,6324,6327,6329,6331,6333,6335,6337,6339,6341,6343,6345,6347,6349,6351,6353,6356,6358,6360,6362],{"class":1094,"line":1448},[1092,6325,6326],{"class":1305},"  throw",[1092,6328,2879],{"class":1115},[1092,6330,1316],{"class":1325},[1092,6332,1839],{"class":1319},[1092,6334,3568],{"class":1325},[1092,6336,1329],{"class":1319},[1092,6338,3574],{"class":3573},[1092,6340,1690],{"class":1319},[1092,6342,3579],{"class":1325},[1092,6344,1329],{"class":1319},[1092,6346,1406],{"class":1319},[1092,6348,3586],{"class":1102},[1092,6350,1344],{"class":1319},[1092,6352,1690],{"class":1319},[1092,6354,6355],{"class":1325}," fatal",[1092,6357,1329],{"class":1319},[1092,6359,4179],{"class":4178},[1092,6361,1706],{"class":1319},[1092,6363,1454],{"class":1325},[1092,6365,6366],{"class":1094,"line":1953},[1092,6367,5411],{"class":1319},[1092,6369,6370],{"class":1094,"line":1980},[1092,6371,1384],{"emptyLinePlaceholder":21},[1092,6373,6374,6376,6378,6380,6382,6384,6386],{"class":1094,"line":2026},[1092,6375,3041],{"class":1562},[1092,6377,5146],{"class":1315},[1092,6379,1566],{"class":1319},[1092,6381,5151],{"class":1115},[1092,6383,1316],{"class":1315},[1092,6385,5156],{"class":1319},[1092,6387,1454],{"class":1315},[1092,6389,6390],{"class":1094,"line":2093},[1092,6391,1384],{"emptyLinePlaceholder":21},[1092,6393,6394],{"class":1094,"line":2163},[1092,6395,6396],{"class":2670},"\u002F\u002F Initialize the Chat class from AI SDK\n",[1092,6398,6400,6402,6405,6407,6409,6411,6413],{"class":6399,"line":2203},[1094,1544],[1092,6401,3041],{"class":1562},[1092,6403,6404],{"class":1315}," chat ",[1092,6406,1566],{"class":1319},[1092,6408,1876],{"class":1319},[1092,6410,6177],{"class":1115},[1092,6412,1316],{"class":1315},[1092,6414,1320],{"class":1319},[1092,6416,6418,6420,6422,6425,6427,6429,6431,6433],{"class":6417,"line":2254},[1094,1544],[1092,6419,1772],{"class":1325},[1092,6421,1329],{"class":1319},[1092,6423,6424],{"class":1315}," chatData",[1092,6426,1782],{"class":1319},[1092,6428,3326],{"class":1315},[1092,6430,1782],{"class":1319},[1092,6432,1993],{"class":1315},[1092,6434,1347],{"class":1319},[1092,6436,6438,6440,6442,6444,6446,6448,6450,6452],{"class":6437,"line":2267},[1094,1544],[1092,6439,1932],{"class":1325},[1092,6441,1329],{"class":1319},[1092,6443,6424],{"class":1315},[1092,6445,1782],{"class":1319},[1092,6447,3326],{"class":1315},[1092,6449,1782],{"class":1319},[1092,6451,1971],{"class":1315},[1092,6453,1347],{"class":1319},[1092,6455,6457,6460,6462,6464,6466,6468],{"class":6456,"line":2297},[1094,1544],[1092,6458,6459],{"class":1325},"  transport",[1092,6461,1329],{"class":1319},[1092,6463,1876],{"class":1319},[1092,6465,6147],{"class":1115},[1092,6467,1316],{"class":1315},[1092,6469,1320],{"class":1319},[1092,6471,6473,6476,6478,6480,6482,6484,6486,6488,6490,6492,6494],{"class":6472,"line":2303},[1094,1544],[1092,6474,6475],{"class":1325},"    api",[1092,6477,1329],{"class":1319},[1092,6479,3680],{"class":1319},[1092,6481,6280],{"class":1102},[1092,6483,5395],{"class":1319},[1092,6485,6314],{"class":1315},[1092,6487,1782],{"class":1319},[1092,6489,3326],{"class":1315},[1092,6491,1782],{"class":1319},[1092,6493,1993],{"class":1315},[1092,6495,6496],{"class":1319},"}`\n",[1092,6498,6500,6502,6504],{"class":6499,"line":2308},[1094,1544],[1092,6501,2393],{"class":1319},[1092,6503,1856],{"class":1315},[1092,6505,1347],{"class":1319},[1092,6507,6509,6512,6514,6517,6519],{"class":6508,"line":2340},[1094,1544],[1092,6510,6511],{"class":1325},"  onData",[1092,6513,1316],{"class":1319},[1092,6515,6516],{"class":1916},"dataPart",[1092,6518,1856],{"class":1319},[1092,6520,1395],{"class":1319},[1092,6522,6524],{"class":6523,"line":2356},[1094,1544],[1092,6525,6526],{"class":2670},"    \u002F\u002F Refresh the chat list when a title is generated\n",[1092,6528,6530,6533,6535,6537,6539,6542,6544,6546,6548,6550,6552],{"class":6529,"line":2374},[1094,1544],[1092,6531,6532],{"class":1305},"    if",[1092,6534,1925],{"class":1325},[1092,6536,6516],{"class":1315},[1092,6538,1782],{"class":1319},[1092,6540,6541],{"class":1315},"type",[1092,6543,3353],{"class":1319},[1092,6545,1406],{"class":1319},[1092,6547,4326],{"class":1102},[1092,6549,1344],{"class":1319},[1092,6551,3551],{"class":1325},[1092,6553,1320],{"class":1319},[1092,6555,6557,6560,6562,6564,6566,6568],{"class":6556,"line":2390},[1094,1544],[1092,6558,6559],{"class":1115},"      refreshNuxtData",[1092,6561,1316],{"class":1325},[1092,6563,1344],{"class":1319},[1092,6565,1761],{"class":1102},[1092,6567,1344],{"class":1319},[1092,6569,1454],{"class":1325},[1092,6571,6573],{"class":6572,"line":2398},[1094,1544],[1092,6574,4561],{"class":1319},[1092,6576,6578],{"class":6577,"line":3378},[1094,1544],[1092,6579,1417],{"class":1319},[1092,6581,6583,6586,6588,6591,6593],{"class":6582,"line":3395},[1094,1544],[1092,6584,6585],{"class":1325},"  onError",[1092,6587,1316],{"class":1319},[1092,6589,6590],{"class":1916},"error",[1092,6592,1856],{"class":1319},[1092,6594,1395],{"class":1319},[1092,6596,6598,6601,6603,6606,6608],{"class":6597,"line":3427},[1094,1544],[1092,6599,6600],{"class":1315},"    toast",[1092,6602,1782],{"class":1319},[1092,6604,6605],{"class":1115},"add",[1092,6607,1316],{"class":1325},[1092,6609,1320],{"class":1319},[1092,6611,6613,6616,6618,6620,6622,6624],{"class":6612,"line":3440},[1094,1544],[1092,6614,6615],{"class":1325},"      title",[1092,6617,1329],{"class":1319},[1092,6619,1406],{"class":1319},[1092,6621,497],{"class":1102},[1092,6623,1344],{"class":1319},[1092,6625,1347],{"class":1319},[1092,6627,6629,6632,6634,6637,6639,6641],{"class":6628,"line":3445},[1094,1544],[1092,6630,6631],{"class":1325},"      description",[1092,6633,1329],{"class":1319},[1092,6635,6636],{"class":1315}," error",[1092,6638,1782],{"class":1319},[1092,6640,4478],{"class":1315},[1092,6642,1347],{"class":1319},[1092,6644,6646,6649,6651,6653,6655],{"class":6645,"line":3451},[1094,1544],[1092,6647,6648],{"class":1325},"      color",[1092,6650,1329],{"class":1319},[1092,6652,1406],{"class":1319},[1092,6654,6590],{"class":1102},[1092,6656,1370],{"class":1319},[1092,6658,6660,6662],{"class":6659,"line":3482},[1094,1544],[1092,6661,3381],{"class":1319},[1092,6663,1454],{"class":1325},[1092,6665,6667],{"class":6666,"line":3526},[1094,1544],[1092,6668,3598],{"class":1319},[1092,6670,6672,6674],{"class":6671,"line":3533},[1094,1544],[1092,6673,1451],{"class":1319},[1092,6675,1454],{"class":1315},[1092,6677,6678],{"class":1094,"line":3538},[1092,6679,1384],{"emptyLinePlaceholder":21},[1092,6681,6682,6685,6688,6690,6693,6695,6698,6700],{"class":1094,"line":3556},[1092,6683,6684],{"class":1562},"function",[1092,6686,6687],{"class":1115}," handleSubmit",[1092,6689,1316],{"class":1319},[1092,6691,6692],{"class":1916},"e",[1092,6694,1329],{"class":1319},[1092,6696,6697],{"class":1098}," Event",[1092,6699,1856],{"class":1319},[1092,6701,1395],{"class":1319},[1092,6703,6704,6707,6709,6712],{"class":1094,"line":3595},[1092,6705,6706],{"class":1315},"  e",[1092,6708,1782],{"class":1319},[1092,6710,6711],{"class":1115},"preventDefault",[1092,6713,2648],{"class":1325},[1092,6715,6716,6718,6720,6722,6724,6726,6728,6730,6732],{"class":1094,"line":3601},[1092,6717,3541],{"class":1305},[1092,6719,1925],{"class":1325},[1092,6721,5205],{"class":1315},[1092,6723,1782],{"class":1319},[1092,6725,3326],{"class":1315},[1092,6727,1782],{"class":1319},[1092,6729,5214],{"class":1115},[1092,6731,5217],{"class":1325},[1092,6733,1320],{"class":1319},[1092,6735,6736,6739,6741,6744,6746,6748,6750,6752,6754,6756,6758,6760],{"class":1094,"line":3606},[1092,6737,6738],{"class":1315},"    chat",[1092,6740,1782],{"class":1319},[1092,6742,6743],{"class":1115},"sendMessage",[1092,6745,1316],{"class":1325},[1092,6747,1839],{"class":1319},[1092,6749,1693],{"class":1325},[1092,6751,1329],{"class":1319},[1092,6753,5349],{"class":1315},[1092,6755,1782],{"class":1319},[1092,6757,3326],{"class":1315},[1092,6759,1706],{"class":1319},[1092,6761,1454],{"class":1325},[1092,6763,6764,6767,6769,6771,6773],{"class":1094,"line":3612},[1092,6765,6766],{"class":1315},"    input",[1092,6768,1782],{"class":1319},[1092,6770,3326],{"class":1315},[1092,6772,2602],{"class":1319},[1092,6774,6775],{"class":1319}," ''\n",[1092,6777,6778],{"class":1094,"line":3632},[1092,6779,3598],{"class":1319},[1092,6781,6782],{"class":1094,"line":3660},[1092,6783,5411],{"class":1319},[1092,6785,6786],{"class":1094,"line":3672},[1092,6787,1384],{"emptyLinePlaceholder":21},[1092,6789,6790],{"class":1094,"line":3691},[1092,6791,6792],{"class":2670},"\u002F\u002F Auto-generate response for first message\n",[1092,6794,6795,6798,6800,6802,6804],{"class":1094,"line":3719},[1092,6796,6797],{"class":1115},"onMounted",[1092,6799,1316],{"class":1315},[1092,6801,1779],{"class":1319},[1092,6803,1799],{"class":1562},[1092,6805,1395],{"class":1319},[1092,6807,6808,6810,6812,6814,6816,6818,6820,6822,6824,6826,6828,6830,6832],{"class":1094,"line":3726},[1092,6809,3541],{"class":1305},[1092,6811,1925],{"class":1325},[1092,6813,6314],{"class":1315},[1092,6815,1782],{"class":1319},[1092,6817,3326],{"class":1315},[1092,6819,3852],{"class":1319},[1092,6821,1971],{"class":1315},[1092,6823,1782],{"class":1319},[1092,6825,3831],{"class":1315},[1092,6827,3353],{"class":1319},[1092,6829,3837],{"class":3573},[1092,6831,3551],{"class":1325},[1092,6833,1320],{"class":1319},[1092,6835,6836,6838,6840,6843],{"class":1094,"line":3731},[1092,6837,6738],{"class":1315},[1092,6839,1782],{"class":1319},[1092,6841,6842],{"class":1115},"regenerate",[1092,6844,2648],{"class":1325},[1092,6846,6847],{"class":1094,"line":3797},[1092,6848,3598],{"class":1319},[1092,6850,6851,6853],{"class":1094,"line":3802},[1092,6852,1451],{"class":1319},[1092,6854,1454],{"class":1315},[1092,6856,6857,6859,6861],{"class":1094,"line":3807},[1092,6858,1610],{"class":1319},[1092,6860,5123],{"class":1325},[1092,6862,1540],{"class":1319},[1092,6864,6865],{"class":1094,"line":3813},[1092,6866,1384],{"emptyLinePlaceholder":21},[1092,6868,6869,6871,6873],{"class":1094,"line":3842},[1092,6870,1534],{"class":1319},[1092,6872,1537],{"class":1325},[1092,6874,1540],{"class":1319},[1092,6876,6877,6879,6881,6883,6885,6887,6889,6891],{"class":1094,"line":3883},[1092,6878,1547],{"class":1319},[1092,6880,5438],{"class":1325},[1092,6882,5441],{"class":1562},[1092,6884,1566],{"class":1319},[1092,6886,1493],{"class":1319},[1092,6888,5448],{"class":1102},[1092,6890,1493],{"class":1319},[1092,6892,1540],{"class":1319},[1092,6894,6895,6897,6899,6901,6903],{"class":1094,"line":3912},[1092,6896,1556],{"class":1319},[1092,6898,1537],{"class":1325},[1092,6900,5461],{"class":1319},[1092,6902,5464],{"class":1562},[1092,6904,1540],{"class":1319},[1092,6906,6907,6909,6911,6913,6915,6917,6920,6922],{"class":1094,"line":3924},[1092,6908,1580],{"class":1319},[1092,6910,5473],{"class":1325},[1092,6912,5476],{"class":1562},[1092,6914,1566],{"class":1319},[1092,6916,1493],{"class":1319},[1092,6918,6919],{"class":1102},"min-h-dvh flex flex-col py-4 sm:py-6",[1092,6921,1493],{"class":1319},[1092,6923,1540],{"class":1319},[1092,6925,6926,6928],{"class":1094,"line":3940},[1092,6927,5492],{"class":1319},[1092,6929,6930],{"class":1325},"UChatMessages\n",[1092,6932,6933,6936,6938,6940,6943],{"class":1094,"line":3954},[1092,6934,6935],{"class":1562},"          :messages",[1092,6937,1566],{"class":1319},[1092,6939,1493],{"class":1319},[1092,6941,6942],{"class":1102},"chat.messages",[1092,6944,5549],{"class":1319},[1092,6946,6947,6949,6951,6953,6956],{"class":1094,"line":3961},[1092,6948,5555],{"class":1562},[1092,6950,1566],{"class":1319},[1092,6952,1493],{"class":1319},[1092,6954,6955],{"class":1102},"chat.status",[1092,6957,5549],{"class":1319},[1092,6959,6960],{"class":1094,"line":3966},[1092,6961,6962],{"class":1562},"          should-auto-scroll\n",[1092,6964,6965,6968,6970,6972,6975],{"class":1094,"line":3971},[1092,6966,6967],{"class":1562},"          class",[1092,6969,1566],{"class":1319},[1092,6971,1493],{"class":1319},[1092,6973,6974],{"class":1102},"flex-1",[1092,6976,5549],{"class":1319},[1092,6978,6979],{"class":1094,"line":3977},[1092,6980,5615],{"class":1319},[1092,6982,6983,6985,6987,6989,6991,6993,6995,6997,7000,7002,7004],{"class":1094,"line":3994},[1092,6984,5621],{"class":1319},[1092,6986,1537],{"class":1325},[1092,6988,5461],{"class":1319},[1092,6990,371],{"class":1562},[1092,6992,1566],{"class":1319},[1092,6994,1493],{"class":1319},[1092,6996,1839],{"class":1319},[1092,6998,6999],{"class":1315}," message ",[1092,7001,1451],{"class":1319},[1092,7003,1493],{"class":1319},[1092,7005,1540],{"class":1319},[1092,7007,7008,7011,7013,7016,7018,7020,7023,7025,7028,7031,7033,7035,7037,7039,7042,7045,7047,7050,7052,7054,7056,7058,7061,7063,7066,7068,7070,7072,7074,7076,7079,7082],{"class":1094,"line":4016},[1092,7009,7010],{"class":1319},"            \u003C",[1092,7012,1537],{"class":1325},[1092,7014,7015],{"class":1305}," v-for",[1092,7017,1566],{"class":1319},[1092,7019,1493],{"class":1319},[1092,7021,7022],{"class":1315},"(part",[1092,7024,1690],{"class":1319},[1092,7026,7027],{"class":1315}," index) ",[1092,7029,7030],{"class":1319},"in",[1092,7032,2597],{"class":1315},[1092,7034,1782],{"class":1319},[1092,7036,2177],{"class":1315},[1092,7038,1493],{"class":1319},[1092,7040,7041],{"class":1319}," :",[1092,7043,7044],{"class":1562},"key",[1092,7046,1566],{"class":1319},[1092,7048,7049],{"class":1319},"\"`${",[1092,7051,4478],{"class":1315},[1092,7053,1782],{"class":1319},[1092,7055,1993],{"class":1315},[1092,7057,1451],{"class":1319},[1092,7059,7060],{"class":1102},"-",[1092,7062,5395],{"class":1319},[1092,7064,7065],{"class":1315},"part",[1092,7067,1782],{"class":1319},[1092,7069,6541],{"class":1315},[1092,7071,1451],{"class":1319},[1092,7073,7060],{"class":1102},[1092,7075,5395],{"class":1319},[1092,7077,7078],{"class":1315},"index",[1092,7080,7081],{"class":1319},"}`\"",[1092,7083,1540],{"class":1319},[1092,7085,7086,7089],{"class":1094,"line":4034},[1092,7087,7088],{"class":1319},"              \u003C",[1092,7090,7091],{"class":1325},"UChatReasoning\n",[1092,7093,7094,7097,7099,7101,7104],{"class":1094,"line":4042},[1092,7095,7096],{"class":1562},"                v-if",[1092,7098,1566],{"class":1319},[1092,7100,1493],{"class":1319},[1092,7102,7103],{"class":1102},"isReasoningUIPart(part)",[1092,7105,5549],{"class":1319},[1092,7107,7108,7111,7113,7115,7118],{"class":1094,"line":4059},[1092,7109,7110],{"class":1562},"                :text",[1092,7112,1566],{"class":1319},[1092,7114,1493],{"class":1319},[1092,7116,7117],{"class":1102},"part.text",[1092,7119,5549],{"class":1319},[1092,7121,7122,7125,7127,7129,7132],{"class":1094,"line":4080},[1092,7123,7124],{"class":1562},"                :streaming",[1092,7126,1566],{"class":1319},[1092,7128,1493],{"class":1319},[1092,7130,7131],{"class":1102},"isPartStreaming(part)",[1092,7133,5549],{"class":1319},[1092,7135,7136],{"class":1094,"line":4090},[1092,7137,7138],{"class":1319},"              >\n",[1092,7140,7141,7144],{"class":1094,"line":4100},[1092,7142,7143],{"class":1319},"                \u003C",[1092,7145,7146],{"class":1325},"ChatComark\n",[1092,7148,7149,7152,7154,7156,7158],{"class":1094,"line":4110},[1092,7150,7151],{"class":1562},"                  :markdown",[1092,7153,1566],{"class":1319},[1092,7155,1493],{"class":1319},[1092,7157,7117],{"class":1102},[1092,7159,5549],{"class":1319},[1092,7161,7162,7165,7167,7169,7171],{"class":1094,"line":4127},[1092,7163,7164],{"class":1562},"                  :streaming",[1092,7166,1566],{"class":1319},[1092,7168,1493],{"class":1319},[1092,7170,7131],{"class":1102},[1092,7172,5549],{"class":1319},[1092,7174,7175],{"class":1094,"line":4138},[1092,7176,7177],{"class":1319},"                \u002F>\n",[1092,7179,7180,7183,7186],{"class":1094,"line":4144},[1092,7181,7182],{"class":1319},"              \u003C\u002F",[1092,7184,7185],{"class":1325},"UChatReasoning",[1092,7187,1540],{"class":1319},[1092,7189,7190],{"class":1094,"line":4150},[1092,7191,1384],{"emptyLinePlaceholder":21},[1092,7193,7194,7196,7198,7201,7203,7205,7208,7211,7213],{"class":1094,"line":4160},[1092,7195,7088],{"class":1319},[1092,7197,1537],{"class":1325},[1092,7199,7200],{"class":1305}," v-else-if",[1092,7202,1566],{"class":1319},[1092,7204,1493],{"class":1319},[1092,7206,7207],{"class":1115},"isTextUIPart",[1092,7209,7210],{"class":1315},"(part)",[1092,7212,1493],{"class":1319},[1092,7214,1540],{"class":1319},[1092,7216,7217,7219],{"class":1094,"line":4170},[1092,7218,7143],{"class":1319},[1092,7220,7146],{"class":1325},[1092,7222,7223,7226,7228,7230,7233],{"class":1094,"line":4184},[1092,7224,7225],{"class":1562},"                  v-if",[1092,7227,1566],{"class":1319},[1092,7229,1493],{"class":1319},[1092,7231,7232],{"class":1102},"message.role === 'assistant'",[1092,7234,5549],{"class":1319},[1092,7236,7237,7239,7241,7243,7245],{"class":1094,"line":4199},[1092,7238,7151],{"class":1562},[1092,7240,1566],{"class":1319},[1092,7242,1493],{"class":1319},[1092,7244,7117],{"class":1102},[1092,7246,5549],{"class":1319},[1092,7248,7249,7251,7253,7255,7257],{"class":1094,"line":4204},[1092,7250,7164],{"class":1562},[1092,7252,1566],{"class":1319},[1092,7254,1493],{"class":1319},[1092,7256,7131],{"class":1102},[1092,7258,5549],{"class":1319},[1092,7260,7261],{"class":1094,"line":4209},[1092,7262,7177],{"class":1319},[1092,7264,7265,7267,7269,7271,7273,7275,7278,7280,7282,7284,7286,7289,7291],{"class":1094,"line":4219},[1092,7266,7143],{"class":1319},[1092,7268,982],{"class":1325},[1092,7270,7200],{"class":1562},[1092,7272,1566],{"class":1319},[1092,7274,1493],{"class":1319},[1092,7276,7277],{"class":1102},"message.role === 'user'",[1092,7279,1493],{"class":1319},[1092,7281,5476],{"class":1562},[1092,7283,1566],{"class":1319},[1092,7285,1493],{"class":1319},[1092,7287,7288],{"class":1102},"whitespace-pre-wrap",[1092,7290,1493],{"class":1319},[1092,7292,1540],{"class":1319},[1092,7294,7295],{"class":1094,"line":4235},[1092,7296,7297],{"class":1315},"                  {{ part.text }}\n",[1092,7299,7300,7303,7305],{"class":1094,"line":4250},[1092,7301,7302],{"class":1319},"                \u003C\u002F",[1092,7304,982],{"class":1325},[1092,7306,1540],{"class":1319},[1092,7308,7309,7311,7313],{"class":1094,"line":4256},[1092,7310,7182],{"class":1319},[1092,7312,1537],{"class":1325},[1092,7314,1540],{"class":1319},[1092,7316,7317,7320,7322],{"class":1094,"line":4262},[1092,7318,7319],{"class":1319},"            \u003C\u002F",[1092,7321,1537],{"class":1325},[1092,7323,1540],{"class":1319},[1092,7325,7326,7329,7331],{"class":1094,"line":4270},[1092,7327,7328],{"class":1319},"          \u003C\u002F",[1092,7330,1537],{"class":1325},[1092,7332,1540],{"class":1319},[1092,7334,7335,7337,7339],{"class":1094,"line":4275},[1092,7336,5518],{"class":1319},[1092,7338,5094],{"class":1325},[1092,7340,1540],{"class":1319},[1092,7342,7343],{"class":1094,"line":4281},[1092,7344,1384],{"emptyLinePlaceholder":21},[1092,7346,7347,7349],{"class":1094,"line":4301},[1092,7348,5492],{"class":1319},[1092,7350,5534],{"class":1325},[1092,7352,7353,7355,7357,7359,7361],{"class":1094,"line":4316},[1092,7354,5540],{"class":1562},[1092,7356,1566],{"class":1319},[1092,7358,1493],{"class":1319},[1092,7360,5205],{"class":1102},[1092,7362,5549],{"class":1319},[1092,7364,7365,7368,7370,7372,7375],{"class":1094,"line":4333},[1092,7366,7367],{"class":1562},"          :error",[1092,7369,1566],{"class":1319},[1092,7371,1493],{"class":1319},[1092,7373,7374],{"class":1102},"chat.error",[1092,7376,5549],{"class":1319},[1092,7378,7379,7381,7383,7385,7387],{"class":1094,"line":4356},[1092,7380,5570],{"class":1562},[1092,7382,1566],{"class":1319},[1092,7384,1493],{"class":1319},[1092,7386,5577],{"class":1102},[1092,7388,5549],{"class":1319},[1092,7390,7391,7393,7395,7397,7400],{"class":1094,"line":4367},[1092,7392,6967],{"class":1562},[1092,7394,1566],{"class":1319},[1092,7396,1493],{"class":1319},[1092,7398,7399],{"class":1102},"sticky bottom-0",[1092,7401,5549],{"class":1319},[1092,7403,7404,7406,7408,7410,7413],{"class":1094,"line":4375},[1092,7405,5600],{"class":1562},[1092,7407,1566],{"class":1319},[1092,7409,1493],{"class":1319},[1092,7411,7412],{"class":1102},"handleSubmit",[1092,7414,5549],{"class":1319},[1092,7416,7417],{"class":1094,"line":4381},[1092,7418,5615],{"class":1319},[1092,7420,7421,7423],{"class":1094,"line":4386},[1092,7422,5621],{"class":1319},[1092,7424,7425],{"class":1325},"UChatPromptSubmit\n",[1092,7427,7428,7431,7433,7435,7437],{"class":1094,"line":4409},[1092,7429,7430],{"class":1562},"            :status",[1092,7432,1566],{"class":1319},[1092,7434,1493],{"class":1319},[1092,7436,6955],{"class":1102},[1092,7438,5549],{"class":1319},[1092,7440,7441,7444,7446,7448,7450],{"class":1094,"line":4415},[1092,7442,7443],{"class":1562},"            color",[1092,7445,1566],{"class":1319},[1092,7447,1493],{"class":1319},[1092,7449,5634],{"class":1102},[1092,7451,5549],{"class":1319},[1092,7453,7454,7457,7459,7461,7464],{"class":1094,"line":4435},[1092,7455,7456],{"class":1562},"            @stop",[1092,7458,1566],{"class":1319},[1092,7460,1493],{"class":1319},[1092,7462,7463],{"class":1102},"chat.stop()",[1092,7465,5549],{"class":1319},[1092,7467,7468,7471,7473,7475,7478],{"class":1094,"line":4441},[1092,7469,7470],{"class":1562},"            @reload",[1092,7472,1566],{"class":1319},[1092,7474,1493],{"class":1319},[1092,7476,7477],{"class":1102},"chat.regenerate()",[1092,7479,5549],{"class":1319},[1092,7481,7482],{"class":1094,"line":4487},[1092,7483,7484],{"class":1319},"          \u002F>\n",[1092,7486,7487,7489,7491],{"class":1094,"line":4503},[1092,7488,5518],{"class":1319},[1092,7490,5088],{"class":1325},[1092,7492,1540],{"class":1319},[1092,7494,7495,7497,7499],{"class":1094,"line":4536},[1092,7496,5652],{"class":1319},[1092,7498,5473],{"class":1325},[1092,7500,1540],{"class":1319},[1092,7502,7503,7505,7507],{"class":1094,"line":4550},[1092,7504,1591],{"class":1319},[1092,7506,1537],{"class":1325},[1092,7508,1540],{"class":1319},[1092,7510,7511,7513,7515],{"class":1094,"line":4558},[1092,7512,1601],{"class":1319},[1092,7514,5438],{"class":1325},[1092,7516,1540],{"class":1319},[1092,7518,7519,7521,7523],{"class":1094,"line":4564},[1092,7520,1610],{"class":1319},[1092,7522,1537],{"class":1325},[1092,7524,1540],{"class":1319},[982,7526,7527],{},"Here's a breakdown of the key parts:",[982,7529,7530],{},[1000,7531,7532],{},"The Chat Class",[982,7534,4637,7535,7540,7541,7543],{},[1036,7536,7538],{"href":6094,"rel":7537},[1040],[1042,7539,259],{}," class from ",[1042,7542,6186],{}," manages the entire conversation state. It handles:",[994,7545,7546,7551,7566,7572,7577],{},[997,7547,7548,7549],{},"Message history with ",[1042,7550,6942],{},[997,7552,7553,7554,1925,7556,2844,7559,2844,7562,2844,7564,1856],{},"Connection status with ",[1042,7555,6955],{},[1042,7557,7558],{},"ready",[1042,7560,7561],{},"submitted",[1042,7563,5709],{},[1042,7565,6590],{},[997,7567,7568,7569],{},"Sending messages with ",[1042,7570,7571],{},"chat.sendMessage()",[997,7573,7574,7575],{},"Stopping generation with ",[1042,7576,7463],{},[997,7578,7579,7580],{},"Regenerating responses with ",[1042,7581,7477],{},[982,7583,4637,7584,7587,7588,7593,7594,7596],{},[1042,7585,7586],{},"onData"," callback receives ",[1036,7589,7592],{"href":7590,"rel":7591},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-ui\u002Fstreaming-data",[1040],"custom data events"," from the server (like ",[1042,7595,4326],{},"), allowing you to react to server-side events during streaming.",[982,7598,7599],{},[1000,7600,7601],{},"UChatMessages Component",[982,7603,4637,7604,7608],{},[1036,7605,7606],{"href":271},[1042,7607,5094],{}," component is purpose-built for AI chatbots with:",[994,7610,7611,7614,7617,7620],{},[997,7612,7613],{},"Auto-scroll to bottom on load",[997,7615,7616],{},"Continuous scrolling as messages stream in",[997,7618,7619],{},"A loading indicator while the assistant processes",[997,7621,7622],{},"An \"Auto scroll\" button when scrolled up",[982,7624,7625],{},[1000,7626,7627],{},"Rendering Message Parts",[982,7629,7630,7631,7633,7634,1045,7636,7639,7640,7642,7643,7647,7648,7651,7652,7654],{},"We iterate over message ",[1042,7632,2177],{}," using AI SDK helpers like ",[1042,7635,7207],{},[1042,7637,7638],{},"isReasoningUIPart",", rendering assistant text with the ",[1042,7641,5947],{}," component we created earlier and reasoning content with ",[1036,7644,7645],{"href":291},[1042,7646,7185],{},". The ",[1042,7649,7650],{},"isPartStreaming"," utility from ",[1042,7653,6207],{}," detects if a part is currently being streamed.",[982,7656,7657],{},[1000,7658,7659],{},"UChatPromptSubmit Component",[982,7661,4637,7662,7666],{},[1036,7663,7664],{"href":286},[1042,7665,5624],{}," component adapts based on the chat status:",[994,7668,7669,7672,7675],{},[997,7670,7671],{},"Shows a send button when ready",[997,7673,7674],{},"Shows a stop button while streaming",[997,7676,7677],{},"Shows a reload button after an error",[986,7679,7681],{"id":7680},"adding-chat-history","Adding chat history",[982,7683,7684],{},"This section adds a dropdown menu to list previous chats and navigate between them.",[1120,7686,7688],{"id":7687},"listing-chats-api","Listing chats API",[982,7690,7691],{},"First, create an endpoint to fetch all chats:",[1292,7693,7694],{},[1083,7695,7698],{"className":1296,"code":7696,"filename":7697,"language":1298,"meta":1088,"style":1088},"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",[1042,7699,7700,7718,7740,7759,7763,7781,7806,7833,7839],{"__ignoreMap":1088},[1092,7701,7702,7704,7706,7708,7710,7712,7714,7716],{"class":1094,"line":1095},[1092,7703,1681],{"class":1305},[1092,7705,1684],{"class":1319},[1092,7707,2477],{"class":1315},[1092,7709,1706],{"class":1319},[1092,7711,1709],{"class":1305},[1092,7713,1406],{"class":1319},[1092,7715,1120],{"class":1102},[1092,7717,1370],{"class":1319},[1092,7719,7720,7722,7724,7726,7728,7730,7732,7734,7736,7738],{"class":1094,"line":1112},[1092,7721,1681],{"class":1305},[1092,7723,1684],{"class":1319},[1092,7725,2420],{"class":1315},[1092,7727,1690],{"class":1319},[1092,7729,2528],{"class":1315},[1092,7731,1706],{"class":1319},[1092,7733,1709],{"class":1305},[1092,7735,1406],{"class":1319},[1092,7737,2537],{"class":1102},[1092,7739,1370],{"class":1319},[1092,7741,7742,7744,7746,7749,7751,7753,7755,7757],{"class":1094,"line":1335},[1092,7743,1681],{"class":1305},[1092,7745,1684],{"class":1319},[1092,7747,7748],{"class":1315}," desc",[1092,7750,1706],{"class":1319},[1092,7752,1709],{"class":1305},[1092,7754,1406],{"class":1319},[1092,7756,1734],{"class":1102},[1092,7758,1370],{"class":1319},[1092,7760,7761],{"class":1094,"line":1350},[1092,7762,1384],{"emptyLinePlaceholder":21},[1092,7764,7765,7767,7769,7771,7773,7775,7777,7779],{"class":1094,"line":1362},[1092,7766,1306],{"class":1305},[1092,7768,1309],{"class":1305},[1092,7770,2477],{"class":1115},[1092,7772,1316],{"class":1315},[1092,7774,2576],{"class":1562},[1092,7776,4973],{"class":1319},[1092,7778,1799],{"class":1562},[1092,7780,1395],{"class":1319},[1092,7782,7783,7785,7787,7789,7791,7793,7795,7797,7799,7802,7804],{"class":1094,"line":1373},[1092,7784,2820],{"class":1305},[1092,7786,2605],{"class":1305},[1092,7788,2420],{"class":1315},[1092,7790,1782],{"class":1319},[1092,7792,3466],{"class":1315},[1092,7794,1782],{"class":1319},[1092,7796,1761],{"class":1315},[1092,7798,1782],{"class":1319},[1092,7800,7801],{"class":1115},"findMany",[1092,7803,1316],{"class":1325},[1092,7805,1320],{"class":1319},[1092,7807,7808,7811,7813,7815,7817,7819,7821,7823,7825,7827,7829,7831],{"class":1094,"line":1381},[1092,7809,7810],{"class":1115},"    orderBy",[1092,7812,1329],{"class":1319},[1092,7814,4973],{"class":1319},[1092,7816,1799],{"class":1562},[1092,7818,7748],{"class":1115},[1092,7820,1316],{"class":1325},[1092,7822,2697],{"class":1315},[1092,7824,1782],{"class":1319},[1092,7826,1761],{"class":1315},[1092,7828,1782],{"class":1319},[1092,7830,4990],{"class":1315},[1092,7832,1454],{"class":1325},[1092,7834,7835,7837],{"class":1094,"line":1387},[1092,7836,2393],{"class":1319},[1092,7838,1454],{"class":1325},[1092,7840,7841,7843],{"class":1094,"line":1398},[1092,7842,1451],{"class":1319},[1092,7844,1454],{"class":1315},[1120,7846,7848],{"id":7847},"building-the-chats-history-dropdown","Building the chats history dropdown",[982,7850,7851,7852,7857,7858,7863,7864,7857,7871,7873],{},"The component uses ",[1036,7853,7854],{"href":457},[1042,7855,7856],{},"UDropdownMenu"," with a ",[1036,7859,7860],{"href":230},[1042,7861,7862],{},"UButton"," as trigger. Use ",[1036,7865,7868],{"href":7866,"rel":7867},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-fetch",[1040],[1042,7869,7870],{},"useFetch",[1042,7872,7044],{}," to fetch and cache the chat list:",[1292,7875,7876],{},[1083,7877,7880],{"className":1524,"code":7878,"filename":7879,"language":34,"meta":1088,"style":1088},"\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",[1042,7881,7882,7902,7914,7918,7950,7965,7979,7985,7989,8009,8014,8030,8046,8066,8090,8094,8119,8144,8166,8192,8198,8202,8210,8214,8222,8253,8260,8277,8291,8305,8317,8331,8336,8344],{"__ignoreMap":1088},[1092,7883,7884,7886,7888,7890,7892,7894,7896,7898,7900],{"class":1094,"line":1095},[1092,7885,1534],{"class":1319},[1092,7887,5123],{"class":1325},[1092,7889,5126],{"class":1562},[1092,7891,5129],{"class":1562},[1092,7893,1566],{"class":1319},[1092,7895,1493],{"class":1319},[1092,7897,1298],{"class":1102},[1092,7899,1493],{"class":1319},[1092,7901,1540],{"class":1319},[1092,7903,7904,7906,7908,7910,7912],{"class":1094,"line":1112},[1092,7905,3041],{"class":1562},[1092,7907,6220],{"class":1315},[1092,7909,1566],{"class":1319},[1092,7911,6225],{"class":1115},[1092,7913,2648],{"class":1315},[1092,7915,7916],{"class":1094,"line":1335},[1092,7917,1384],{"emptyLinePlaceholder":21},[1092,7919,7920,7922,7924,7926,7928,7930,7932,7934,7936,7938,7940,7942,7944,7946,7948],{"class":1094,"line":1350},[1092,7921,3041],{"class":1562},[1092,7923,1684],{"class":1319},[1092,7925,6259],{"class":1325},[1092,7927,1329],{"class":1319},[1092,7929,1750],{"class":1315},[1092,7931,1451],{"class":1319},[1092,7933,2602],{"class":1319},[1092,7935,2605],{"class":1305},[1092,7937,6273],{"class":1115},[1092,7939,1316],{"class":1315},[1092,7941,1344],{"class":1319},[1092,7943,5266],{"class":1102},[1092,7945,1344],{"class":1319},[1092,7947,1690],{"class":1319},[1092,7949,1395],{"class":1319},[1092,7951,7952,7955,7957,7959,7961,7963],{"class":1094,"line":1362},[1092,7953,7954],{"class":1325},"  key",[1092,7956,1329],{"class":1319},[1092,7958,1406],{"class":1319},[1092,7960,1761],{"class":1102},[1092,7962,1344],{"class":1319},[1092,7964,1347],{"class":1319},[1092,7966,7967,7970,7972,7974,7976],{"class":1094,"line":1373},[1092,7968,7969],{"class":1115},"  default",[1092,7971,1329],{"class":1319},[1092,7973,4973],{"class":1319},[1092,7975,1799],{"class":1562},[1092,7977,7978],{"class":1315}," []\n",[1092,7980,7981,7983],{"class":1094,"line":1381},[1092,7982,1451],{"class":1319},[1092,7984,1454],{"class":1315},[1092,7986,7987],{"class":1094,"line":1387},[1092,7988,1384],{"emptyLinePlaceholder":21},[1092,7990,7991,7993,7996,7998,8001,8003,8005,8007],{"class":1094,"line":1398},[1092,7992,3041],{"class":1562},[1092,7994,7995],{"class":1315}," items ",[1092,7997,1566],{"class":1319},[1092,7999,8000],{"class":1115}," computed",[1092,8002,1316],{"class":1315},[1092,8004,1779],{"class":1319},[1092,8006,1799],{"class":1562},[1092,8008,1332],{"class":1315},[1092,8010,8011],{"class":1094,"line":1414},[1092,8012,8013],{"class":1319},"  {\n",[1092,8015,8016,8019,8021,8023,8026,8028],{"class":1094,"line":1420},[1092,8017,8018],{"class":1325},"    label",[1092,8020,1329],{"class":1319},[1092,8022,1406],{"class":1319},[1092,8024,8025],{"class":1102},"New chat",[1092,8027,1344],{"class":1319},[1092,8029,1347],{"class":1319},[1092,8031,8032,8035,8037,8039,8042,8044],{"class":1094,"line":1425},[1092,8033,8034],{"class":1325},"    to",[1092,8036,1329],{"class":1319},[1092,8038,1406],{"class":1319},[1092,8040,8041],{"class":1102},"\u002F",[1092,8043,1344],{"class":1319},[1092,8045,1347],{"class":1319},[1092,8047,8048,8051,8053,8055,8062,8064],{"class":1094,"line":1448},[1092,8049,8050],{"class":1325},"    icon",[1092,8052,1329],{"class":1319},[1092,8054,1406],{"class":1319},[1092,8056,8057,8061],{"class":1102},[8058,8059],"i",{"class":8060},"shiki-icon-highlight sRy2g","i-lucide-plus-square",[1092,8063,1344],{"class":1319},[1092,8065,1347],{"class":1319},[1092,8067,8068,8071,8073,8076,8078,8081,8084,8086,8088],{"class":1094,"line":1953},[1092,8069,8070],{"class":1325},"    active",[1092,8072,1329],{"class":1319},[1092,8074,8075],{"class":1315}," route",[1092,8077,1782],{"class":1319},[1092,8079,8080],{"class":1315},"name ",[1092,8082,8083],{"class":1319},"===",[1092,8085,1406],{"class":1319},[1092,8087,7078],{"class":1102},[1092,8089,1370],{"class":1319},[1092,8091,8092],{"class":1094,"line":1980},[1092,8093,1417],{"class":1319},[1092,8095,8096,8099,8101,8103,8105,8107,8109,8111,8113,8115,8117],{"class":1094,"line":2026},[1092,8097,8098],{"class":1319},"  ...",[1092,8100,1761],{"class":1315},[1092,8102,1782],{"class":1319},[1092,8104,3326],{"class":1315},[1092,8106,1782],{"class":1319},[1092,8108,4473],{"class":1115},[1092,8110,1316],{"class":1315},[1092,8112,262],{"class":1916},[1092,8114,1799],{"class":1562},[1092,8116,1925],{"class":1315},[1092,8118,1320],{"class":1319},[1092,8120,8121,8123,8125,8127,8129,8132,8135,8137,8140,8142],{"class":1094,"line":2093},[1092,8122,8018],{"class":1325},[1092,8124,1329],{"class":1319},[1092,8126,2770],{"class":1315},[1092,8128,1782],{"class":1319},[1092,8130,8131],{"class":1315},"title ",[1092,8133,8134],{"class":1319},"||",[1092,8136,1406],{"class":1319},[1092,8138,8139],{"class":1102},"Untitled",[1092,8141,1344],{"class":1319},[1092,8143,1347],{"class":1319},[1092,8145,8146,8148,8150,8152,8154,8156,8158,8160,8162,8164],{"class":1094,"line":2163},[1092,8147,8034],{"class":1325},[1092,8149,1329],{"class":1319},[1092,8151,3680],{"class":1319},[1092,8153,5392],{"class":1102},[1092,8155,5395],{"class":1319},[1092,8157,262],{"class":1315},[1092,8159,1782],{"class":1319},[1092,8161,1993],{"class":1315},[1092,8163,5404],{"class":1319},[1092,8165,1347],{"class":1319},[1092,8167,8168,8170,8172,8174,8176,8178,8180,8183,8185,8187,8189],{"class":1094,"line":2203},[1092,8169,8070],{"class":1325},[1092,8171,1329],{"class":1319},[1092,8173,8075],{"class":1315},[1092,8175,1782],{"class":1319},[1092,8177,6290],{"class":1315},[1092,8179,1782],{"class":1319},[1092,8181,8182],{"class":1315},"id ",[1092,8184,8083],{"class":1319},[1092,8186,2770],{"class":1315},[1092,8188,1782],{"class":1319},[1092,8190,8191],{"class":1315},"id\n",[1092,8193,8194,8196],{"class":1094,"line":2254},[1092,8195,2393],{"class":1319},[1092,8197,1946],{"class":1315},[1092,8199,8200],{"class":1094,"line":2267},[1092,8201,2300],{"class":1315},[1092,8203,8204,8206,8208],{"class":1094,"line":2297},[1092,8205,1610],{"class":1319},[1092,8207,5123],{"class":1325},[1092,8209,1540],{"class":1319},[1092,8211,8212],{"class":1094,"line":2303},[1092,8213,1384],{"emptyLinePlaceholder":21},[1092,8215,8216,8218,8220],{"class":1094,"line":2308},[1092,8217,1534],{"class":1319},[1092,8219,1537],{"class":1325},[1092,8221,1540],{"class":1319},[1092,8223,8224,8226,8228,8231,8233,8235,8238,8240,8242,8244,8246,8249,8251],{"class":1094,"line":2340},[1092,8225,1547],{"class":1319},[1092,8227,7856],{"class":1325},[1092,8229,8230],{"class":1562}," :items",[1092,8232,1566],{"class":1319},[1092,8234,1493],{"class":1319},[1092,8236,8237],{"class":1102},"items",[1092,8239,1493],{"class":1319},[1092,8241,5476],{"class":1562},[1092,8243,1566],{"class":1319},[1092,8245,1493],{"class":1319},[1092,8247,8248],{"class":1102},"m-2",[1092,8250,1493],{"class":1319},[1092,8252,1540],{"class":1319},[1092,8254,8255,8257],{"class":1094,"line":2356},[1092,8256,1556],{"class":1319},[1092,8258,8259],{"class":1325},"UButton\n",[1092,8261,8262,8265,8267,8269,8275],{"class":1094,"line":2374},[1092,8263,8264],{"class":1562},"      icon",[1092,8266,1566],{"class":1319},[1092,8268,1493],{"class":1319},[1092,8270,8271,8274],{"class":1102},[8058,8272],{"class":8273},"shiki-icon-highlight sdATh","i-lucide-messages-square",[1092,8276,5549],{"class":1319},[1092,8278,8279,8282,8284,8286,8289],{"class":1094,"line":2390},[1092,8280,8281],{"class":1562},"      variant",[1092,8283,1566],{"class":1319},[1092,8285,1493],{"class":1319},[1092,8287,8288],{"class":1102},"ghost",[1092,8290,5549],{"class":1319},[1092,8292,8293,8296,8298,8300,8303],{"class":1094,"line":2398},[1092,8294,8295],{"class":1562},"      label",[1092,8297,1566],{"class":1319},[1092,8299,1493],{"class":1319},[1092,8301,8302],{"class":1102},"Chats History",[1092,8304,5549],{"class":1319},[1092,8306,8307,8309,8311,8313,8315],{"class":1094,"line":3378},[1092,8308,6648],{"class":1562},[1092,8310,1566],{"class":1319},[1092,8312,1493],{"class":1319},[1092,8314,5634],{"class":1102},[1092,8316,5549],{"class":1319},[1092,8318,8319,8322,8324,8326,8329],{"class":1094,"line":3395},[1092,8320,8321],{"class":1562},"      class",[1092,8323,1566],{"class":1319},[1092,8325,1493],{"class":1319},[1092,8327,8328],{"class":1102},"w-fit",[1092,8330,5549],{"class":1319},[1092,8332,8333],{"class":1094,"line":3427},[1092,8334,8335],{"class":1319},"    \u002F>\n",[1092,8337,8338,8340,8342],{"class":1094,"line":3440},[1092,8339,1601],{"class":1319},[1092,8341,7856],{"class":1325},[1092,8343,1540],{"class":1319},[1092,8345,8346,8348,8350],{"class":1094,"line":3445},[1092,8347,1610],{"class":1319},[1092,8349,1537],{"class":1325},[1092,8351,1540],{"class":1319},[986,8353,8355],{"id":8354},"integrating-history-in-the-home-page","Integrating history in the home page",[1292,8357,8358],{},[1669,8359,8360],{},[1083,8361,8364],{"className":1524,"code":8362,"filename":5113,"highlights":8363,"language":34,"meta":1088,"style":1088},"\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",[2390,2398,3378],[1042,8365,8366,8386,8402,8418,8422,8434,8456,8460,8472,8476,8480,8504,8518,8526,8534,8548,8584,8588,8592,8598,8602,8606,8628,8632,8640,8644,8652,8670,8684,8694,8703,8715,8733,8751,8755,8763,8767,8773,8785,8797,8809,8821,8833,8837,8855,8863,8871,8879,8887],{"__ignoreMap":1088},[1092,8367,8368,8370,8372,8374,8376,8378,8380,8382,8384],{"class":1094,"line":1095},[1092,8369,1534],{"class":1319},[1092,8371,5123],{"class":1325},[1092,8373,5126],{"class":1562},[1092,8375,5129],{"class":1562},[1092,8377,1566],{"class":1319},[1092,8379,1493],{"class":1319},[1092,8381,1298],{"class":1102},[1092,8383,1493],{"class":1319},[1092,8385,1540],{"class":1319},[1092,8387,8388,8390,8392,8394,8396,8398,8400],{"class":1094,"line":1112},[1092,8389,3041],{"class":1562},[1092,8391,5146],{"class":1315},[1092,8393,1566],{"class":1319},[1092,8395,5151],{"class":1115},[1092,8397,1316],{"class":1315},[1092,8399,5156],{"class":1319},[1092,8401,1454],{"class":1315},[1092,8403,8404,8406,8408,8410,8412,8414,8416],{"class":1094,"line":1335},[1092,8405,3041],{"class":1562},[1092,8407,5165],{"class":1315},[1092,8409,1566],{"class":1319},[1092,8411,5151],{"class":1115},[1092,8413,1316],{"class":1315},[1092,8415,5174],{"class":4178},[1092,8417,1454],{"class":1315},[1092,8419,8420],{"class":1094,"line":1350},[1092,8421,1384],{"emptyLinePlaceholder":21},[1092,8423,8424,8426,8428,8430,8432],{"class":1094,"line":1362},[1092,8425,2576],{"class":1562},[1092,8427,5187],{"class":1562},[1092,8429,5190],{"class":1115},[1092,8431,1779],{"class":1319},[1092,8433,1395],{"class":1319},[1092,8435,8436,8438,8440,8442,8444,8446,8448,8450,8452,8454],{"class":1094,"line":1373},[1092,8437,3541],{"class":1305},[1092,8439,1925],{"class":1325},[1092,8441,3546],{"class":1319},[1092,8443,5205],{"class":1315},[1092,8445,1782],{"class":1319},[1092,8447,3326],{"class":1315},[1092,8449,1782],{"class":1319},[1092,8451,5214],{"class":1115},[1092,8453,5217],{"class":1325},[1092,8455,5220],{"class":1305},[1092,8457,8458],{"class":1094,"line":1381},[1092,8459,1384],{"emptyLinePlaceholder":21},[1092,8461,8462,8464,8466,8468,8470],{"class":1094,"line":1387},[1092,8463,5229],{"class":1315},[1092,8465,1782],{"class":1319},[1092,8467,3326],{"class":1315},[1092,8469,2602],{"class":1319},[1092,8471,4364],{"class":4178},[1092,8473,8474],{"class":1094,"line":1398},[1092,8475,1384],{"emptyLinePlaceholder":21},[1092,8477,8478],{"class":1094,"line":1414},[1092,8479,5246],{"class":2670},[1092,8481,8482,8484,8486,8488,8490,8492,8494,8496,8498,8500,8502],{"class":1094,"line":1420},[1092,8483,2592],{"class":1562},[1092,8485,2770],{"class":1315},[1092,8487,2602],{"class":1319},[1092,8489,2605],{"class":1305},[1092,8491,5259],{"class":1115},[1092,8493,1316],{"class":1325},[1092,8495,1344],{"class":1319},[1092,8497,5266],{"class":1102},[1092,8499,1344],{"class":1319},[1092,8501,1690],{"class":1319},[1092,8503,1395],{"class":1319},[1092,8505,8506,8508,8510,8512,8514,8516],{"class":1094,"line":1425},[1092,8507,5277],{"class":1325},[1092,8509,1329],{"class":1319},[1092,8511,1406],{"class":1319},[1092,8513,5284],{"class":1102},[1092,8515,1344],{"class":1319},[1092,8517,1347],{"class":1319},[1092,8519,8520,8522,8524],{"class":1094,"line":1448},[1092,8521,5293],{"class":1325},[1092,8523,1329],{"class":1319},[1092,8525,1395],{"class":1319},[1092,8527,8528,8530,8532],{"class":1094,"line":1953},[1092,8529,3366],{"class":1325},[1092,8531,1329],{"class":1319},[1092,8533,1395],{"class":1319},[1092,8535,8536,8538,8540,8542,8544,8546],{"class":1094,"line":1980},[1092,8537,4506],{"class":1325},[1092,8539,1329],{"class":1319},[1092,8541,1406],{"class":1319},[1092,8543,2125],{"class":1102},[1092,8545,1344],{"class":1319},[1092,8547,1347],{"class":1319},[1092,8549,8550,8552,8554,8556,8558,8560,8562,8564,8566,8568,8570,8572,8574,8576,8578,8580,8582],{"class":1094,"line":2026},[1092,8551,4539],{"class":1325},[1092,8553,1329],{"class":1319},[1092,8555,1433],{"class":1325},[1092,8557,1839],{"class":1319},[1092,8559,2499],{"class":1325},[1092,8561,1329],{"class":1319},[1092,8563,1406],{"class":1319},[1092,8565,5338],{"class":1102},[1092,8567,1344],{"class":1319},[1092,8569,1690],{"class":1319},[1092,8571,1693],{"class":1325},[1092,8573,1329],{"class":1319},[1092,8575,5349],{"class":1315},[1092,8577,1782],{"class":1319},[1092,8579,3326],{"class":1315},[1092,8581,1706],{"class":1319},[1092,8583,3167],{"class":1325},[1092,8585,8586],{"class":1094,"line":2093},[1092,8587,4378],{"class":1319},[1092,8589,8590],{"class":1094,"line":2163},[1092,8591,4561],{"class":1319},[1092,8593,8594,8596],{"class":1094,"line":2203},[1092,8595,2393],{"class":1319},[1092,8597,1454],{"class":1325},[1092,8599,8600],{"class":1094,"line":2254},[1092,8601,1384],{"emptyLinePlaceholder":21},[1092,8603,8604],{"class":1094,"line":2267},[1092,8605,5380],{"class":2670},[1092,8607,8608,8610,8612,8614,8616,8618,8620,8622,8624,8626],{"class":1094,"line":2297},[1092,8609,5385],{"class":1115},[1092,8611,1316],{"class":1325},[1092,8613,3686],{"class":1319},[1092,8615,5392],{"class":1102},[1092,8617,5395],{"class":1319},[1092,8619,262],{"class":1315},[1092,8621,1782],{"class":1319},[1092,8623,1993],{"class":1315},[1092,8625,5404],{"class":1319},[1092,8627,1454],{"class":1325},[1092,8629,8630],{"class":1094,"line":2303},[1092,8631,5411],{"class":1319},[1092,8633,8634,8636,8638],{"class":1094,"line":2308},[1092,8635,1610],{"class":1319},[1092,8637,5123],{"class":1325},[1092,8639,1540],{"class":1319},[1092,8641,8642],{"class":1094,"line":2340},[1092,8643,1384],{"emptyLinePlaceholder":21},[1092,8645,8646,8648,8650],{"class":1094,"line":2356},[1092,8647,1534],{"class":1319},[1092,8649,1537],{"class":1325},[1092,8651,1540],{"class":1319},[1092,8653,8654,8656,8658,8660,8662,8664,8666,8668],{"class":1094,"line":2374},[1092,8655,1547],{"class":1319},[1092,8657,5438],{"class":1325},[1092,8659,5441],{"class":1562},[1092,8661,1566],{"class":1319},[1092,8663,1493],{"class":1319},[1092,8665,5448],{"class":1102},[1092,8667,1493],{"class":1319},[1092,8669,1540],{"class":1319},[1092,8671,8673,8675,8677,8679,8682],{"class":8672,"line":2390},[1094,1544],[1092,8674,1556],{"class":1319},[1092,8676,1537],{"class":1325},[1092,8678,5461],{"class":1319},[1092,8680,8681],{"class":1562},"header",[1092,8683,1540],{"class":1319},[1092,8685,8687,8689,8692],{"class":8686,"line":2398},[1094,1544],[1092,8688,1580],{"class":1319},[1092,8690,8691],{"class":1325},"ChatsHistory",[1092,8693,1586],{"class":1319},[1092,8695,8697,8699,8701],{"class":8696,"line":3378},[1094,1544],[1092,8698,1591],{"class":1319},[1092,8700,1537],{"class":1325},[1092,8702,1540],{"class":1319},[1092,8704,8705,8707,8709,8711,8713],{"class":1094,"line":3395},[1092,8706,1556],{"class":1319},[1092,8708,1537],{"class":1325},[1092,8710,5461],{"class":1319},[1092,8712,5464],{"class":1562},[1092,8714,1540],{"class":1319},[1092,8716,8717,8719,8721,8723,8725,8727,8729,8731],{"class":1094,"line":3427},[1092,8718,1580],{"class":1319},[1092,8720,5473],{"class":1325},[1092,8722,5476],{"class":1562},[1092,8724,1566],{"class":1319},[1092,8726,1493],{"class":1319},[1092,8728,5483],{"class":1102},[1092,8730,1493],{"class":1319},[1092,8732,1540],{"class":1319},[1092,8734,8735,8737,8739,8741,8743,8745,8747,8749],{"class":1094,"line":3440},[1092,8736,5492],{"class":1319},[1092,8738,5495],{"class":1325},[1092,8740,5476],{"class":1562},[1092,8742,1566],{"class":1319},[1092,8744,1493],{"class":1319},[1092,8746,5504],{"class":1102},[1092,8748,1493],{"class":1319},[1092,8750,1540],{"class":1319},[1092,8752,8753],{"class":1094,"line":3445},[1092,8754,5513],{"class":1315},[1092,8756,8757,8759,8761],{"class":1094,"line":3451},[1092,8758,5518],{"class":1319},[1092,8760,5495],{"class":1325},[1092,8762,1540],{"class":1319},[1092,8764,8765],{"class":1094,"line":3482},[1092,8766,1384],{"emptyLinePlaceholder":21},[1092,8768,8769,8771],{"class":1094,"line":3526},[1092,8770,5492],{"class":1319},[1092,8772,5534],{"class":1325},[1092,8774,8775,8777,8779,8781,8783],{"class":1094,"line":3533},[1092,8776,5540],{"class":1562},[1092,8778,1566],{"class":1319},[1092,8780,1493],{"class":1319},[1092,8782,5205],{"class":1102},[1092,8784,5549],{"class":1319},[1092,8786,8787,8789,8791,8793,8795],{"class":1094,"line":3538},[1092,8788,5555],{"class":1562},[1092,8790,1566],{"class":1319},[1092,8792,1493],{"class":1319},[1092,8794,5562],{"class":1102},[1092,8796,5549],{"class":1319},[1092,8798,8799,8801,8803,8805,8807],{"class":1094,"line":3556},[1092,8800,5570],{"class":1562},[1092,8802,1566],{"class":1319},[1092,8804,1493],{"class":1319},[1092,8806,5577],{"class":1102},[1092,8808,5549],{"class":1319},[1092,8810,8811,8813,8815,8817,8819],{"class":1094,"line":3595},[1092,8812,5585],{"class":1562},[1092,8814,1566],{"class":1319},[1092,8816,1493],{"class":1319},[1092,8818,5592],{"class":1102},[1092,8820,5549],{"class":1319},[1092,8822,8823,8825,8827,8829,8831],{"class":1094,"line":3601},[1092,8824,5600],{"class":1562},[1092,8826,1566],{"class":1319},[1092,8828,1493],{"class":1319},[1092,8830,5607],{"class":1102},[1092,8832,5549],{"class":1319},[1092,8834,8835],{"class":1094,"line":3606},[1092,8836,5615],{"class":1319},[1092,8838,8839,8841,8843,8845,8847,8849,8851,8853],{"class":1094,"line":3612},[1092,8840,5621],{"class":1319},[1092,8842,5624],{"class":1325},[1092,8844,5627],{"class":1562},[1092,8846,1566],{"class":1319},[1092,8848,1493],{"class":1319},[1092,8850,5634],{"class":1102},[1092,8852,1493],{"class":1319},[1092,8854,1586],{"class":1319},[1092,8856,8857,8859,8861],{"class":1094,"line":3632},[1092,8858,5518],{"class":1319},[1092,8860,5088],{"class":1325},[1092,8862,1540],{"class":1319},[1092,8864,8865,8867,8869],{"class":1094,"line":3660},[1092,8866,5652],{"class":1319},[1092,8868,5473],{"class":1325},[1092,8870,1540],{"class":1319},[1092,8872,8873,8875,8877],{"class":1094,"line":3672},[1092,8874,1591],{"class":1319},[1092,8876,1537],{"class":1325},[1092,8878,1540],{"class":1319},[1092,8880,8881,8883,8885],{"class":1094,"line":3691},[1092,8882,1601],{"class":1319},[1092,8884,5438],{"class":1325},[1092,8886,1540],{"class":1319},[1092,8888,8889,8891,8893],{"class":1094,"line":3719},[1092,8890,1610],{"class":1319},[1092,8892,1537],{"class":1325},[1092,8894,1540],{"class":1319},[986,8896,8898],{"id":8897},"integrating-history-in-the-chat-page","Integrating history in the chat page",[1292,8900,8901],{},[1669,8902,8903],{},[1083,8904,8907],{"className":1524,"code":8905,"filename":6114,"highlights":8906,"language":34,"meta":1088,"style":1088},"\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",[3961,3966,3971],[1042,8908,8909,8929,8955,8973,8991,8995,9007,9019,9023,9027,9069,9073,9089,9129,9133,9137,9153,9157,9161,9177,9195,9213,9227,9251,9259,9271,9275,9299,9313,9317,9321,9333,9345,9359,9373,9385,9391,9395,9401,9405,9423,9433,9453,9479,9491,9495,9499,9503,9507,9519,9547,9557,9561,9567,9575,9579,9587,9605,9617,9625,9633,9645,9664,9671,9684,9696,9700,9712,9716,9740,9806,9812,9824,9836,9848,9852,9858,9870,9882,9886,9894,9898,9918,9924,9936,9948,9960,9964,9992,9996,10004,10012,10020,10028,10036,10040,10046,10058,10070,10082,10094,10106,10110,10116,10128,10140,10152,10164,10168,10176,10184,10192,10200],{"__ignoreMap":1088},[1092,8910,8911,8913,8915,8917,8919,8921,8923,8925,8927],{"class":1094,"line":1095},[1092,8912,1534],{"class":1319},[1092,8914,5123],{"class":1325},[1092,8916,5126],{"class":1562},[1092,8918,5129],{"class":1562},[1092,8920,1566],{"class":1319},[1092,8922,1493],{"class":1319},[1092,8924,1298],{"class":1102},[1092,8926,1493],{"class":1319},[1092,8928,1540],{"class":1319},[1092,8930,8931,8933,8935,8937,8939,8941,8943,8945,8947,8949,8951,8953],{"class":1094,"line":1112},[1092,8932,1681],{"class":1305},[1092,8934,1684],{"class":1319},[1092,8936,6147],{"class":1315},[1092,8938,1690],{"class":1319},[1092,8940,6152],{"class":1315},[1092,8942,1690],{"class":1319},[1092,8944,6157],{"class":1315},[1092,8946,1706],{"class":1319},[1092,8948,1709],{"class":1305},[1092,8950,1406],{"class":1319},[1092,8952,2513],{"class":1102},[1092,8954,1370],{"class":1319},[1092,8956,8957,8959,8961,8963,8965,8967,8969,8971],{"class":1094,"line":1335},[1092,8958,1681],{"class":1305},[1092,8960,1684],{"class":1319},[1092,8962,6177],{"class":1315},[1092,8964,1706],{"class":1319},[1092,8966,1709],{"class":1305},[1092,8968,1406],{"class":1319},[1092,8970,6186],{"class":1102},[1092,8972,1370],{"class":1319},[1092,8974,8975,8977,8979,8981,8983,8985,8987,8989],{"class":1094,"line":1350},[1092,8976,1681],{"class":1305},[1092,8978,1684],{"class":1319},[1092,8980,6198],{"class":1315},[1092,8982,1706],{"class":1319},[1092,8984,1709],{"class":1305},[1092,8986,1406],{"class":1319},[1092,8988,6207],{"class":1102},[1092,8990,1370],{"class":1319},[1092,8992,8993],{"class":1094,"line":1362},[1092,8994,1384],{"emptyLinePlaceholder":21},[1092,8996,8997,8999,9001,9003,9005],{"class":1094,"line":1373},[1092,8998,3041],{"class":1562},[1092,9000,6220],{"class":1315},[1092,9002,1566],{"class":1319},[1092,9004,6225],{"class":1115},[1092,9006,2648],{"class":1315},[1092,9008,9009,9011,9013,9015,9017],{"class":1094,"line":1381},[1092,9010,3041],{"class":1562},[1092,9012,6234],{"class":1315},[1092,9014,1566],{"class":1319},[1092,9016,6239],{"class":1115},[1092,9018,2648],{"class":1315},[1092,9020,9021],{"class":1094,"line":1387},[1092,9022,1384],{"emptyLinePlaceholder":21},[1092,9024,9025],{"class":1094,"line":1398},[1092,9026,6250],{"class":2670},[1092,9028,9029,9031,9033,9035,9037,9039,9041,9043,9045,9047,9049,9051,9053,9055,9057,9059,9061,9063,9065,9067],{"class":1094,"line":1414},[1092,9030,3041],{"class":1562},[1092,9032,1684],{"class":1319},[1092,9034,6259],{"class":1325},[1092,9036,1329],{"class":1319},[1092,9038,6264],{"class":1315},[1092,9040,1451],{"class":1319},[1092,9042,2602],{"class":1319},[1092,9044,2605],{"class":1305},[1092,9046,6273],{"class":1115},[1092,9048,1316],{"class":1315},[1092,9050,3686],{"class":1319},[1092,9052,6280],{"class":1102},[1092,9054,5395],{"class":1319},[1092,9056,6285],{"class":1315},[1092,9058,1782],{"class":1319},[1092,9060,6290],{"class":1315},[1092,9062,1782],{"class":1319},[1092,9064,1993],{"class":1315},[1092,9066,5404],{"class":1319},[1092,9068,1454],{"class":1315},[1092,9070,9071],{"class":1094,"line":1420},[1092,9072,1384],{"emptyLinePlaceholder":21},[1092,9074,9075,9077,9079,9081,9083,9085,9087],{"class":1094,"line":1425},[1092,9076,6307],{"class":1305},[1092,9078,1925],{"class":1315},[1092,9080,3546],{"class":1319},[1092,9082,6314],{"class":1315},[1092,9084,1782],{"class":1319},[1092,9086,6319],{"class":1315},[1092,9088,1320],{"class":1319},[1092,9090,9091,9093,9095,9097,9099,9101,9103,9105,9107,9109,9111,9113,9115,9117,9119,9121,9123,9125,9127],{"class":1094,"line":1448},[1092,9092,6326],{"class":1305},[1092,9094,2879],{"class":1115},[1092,9096,1316],{"class":1325},[1092,9098,1839],{"class":1319},[1092,9100,3568],{"class":1325},[1092,9102,1329],{"class":1319},[1092,9104,3574],{"class":3573},[1092,9106,1690],{"class":1319},[1092,9108,3579],{"class":1325},[1092,9110,1329],{"class":1319},[1092,9112,1406],{"class":1319},[1092,9114,3586],{"class":1102},[1092,9116,1344],{"class":1319},[1092,9118,1690],{"class":1319},[1092,9120,6355],{"class":1325},[1092,9122,1329],{"class":1319},[1092,9124,4179],{"class":4178},[1092,9126,1706],{"class":1319},[1092,9128,1454],{"class":1325},[1092,9130,9131],{"class":1094,"line":1953},[1092,9132,5411],{"class":1319},[1092,9134,9135],{"class":1094,"line":1980},[1092,9136,1384],{"emptyLinePlaceholder":21},[1092,9138,9139,9141,9143,9145,9147,9149,9151],{"class":1094,"line":2026},[1092,9140,3041],{"class":1562},[1092,9142,5146],{"class":1315},[1092,9144,1566],{"class":1319},[1092,9146,5151],{"class":1115},[1092,9148,1316],{"class":1315},[1092,9150,5156],{"class":1319},[1092,9152,1454],{"class":1315},[1092,9154,9155],{"class":1094,"line":2093},[1092,9156,1384],{"emptyLinePlaceholder":21},[1092,9158,9159],{"class":1094,"line":2163},[1092,9160,6396],{"class":2670},[1092,9162,9163,9165,9167,9169,9171,9173,9175],{"class":1094,"line":2203},[1092,9164,3041],{"class":1562},[1092,9166,6404],{"class":1315},[1092,9168,1566],{"class":1319},[1092,9170,1876],{"class":1319},[1092,9172,6177],{"class":1115},[1092,9174,1316],{"class":1315},[1092,9176,1320],{"class":1319},[1092,9178,9179,9181,9183,9185,9187,9189,9191,9193],{"class":1094,"line":2254},[1092,9180,1772],{"class":1325},[1092,9182,1329],{"class":1319},[1092,9184,6424],{"class":1315},[1092,9186,1782],{"class":1319},[1092,9188,3326],{"class":1315},[1092,9190,1782],{"class":1319},[1092,9192,1993],{"class":1315},[1092,9194,1347],{"class":1319},[1092,9196,9197,9199,9201,9203,9205,9207,9209,9211],{"class":1094,"line":2267},[1092,9198,1932],{"class":1325},[1092,9200,1329],{"class":1319},[1092,9202,6424],{"class":1315},[1092,9204,1782],{"class":1319},[1092,9206,3326],{"class":1315},[1092,9208,1782],{"class":1319},[1092,9210,1971],{"class":1315},[1092,9212,1347],{"class":1319},[1092,9214,9215,9217,9219,9221,9223,9225],{"class":1094,"line":2297},[1092,9216,6459],{"class":1325},[1092,9218,1329],{"class":1319},[1092,9220,1876],{"class":1319},[1092,9222,6147],{"class":1115},[1092,9224,1316],{"class":1315},[1092,9226,1320],{"class":1319},[1092,9228,9229,9231,9233,9235,9237,9239,9241,9243,9245,9247,9249],{"class":1094,"line":2303},[1092,9230,6475],{"class":1325},[1092,9232,1329],{"class":1319},[1092,9234,3680],{"class":1319},[1092,9236,6280],{"class":1102},[1092,9238,5395],{"class":1319},[1092,9240,6314],{"class":1315},[1092,9242,1782],{"class":1319},[1092,9244,3326],{"class":1315},[1092,9246,1782],{"class":1319},[1092,9248,1993],{"class":1315},[1092,9250,6496],{"class":1319},[1092,9252,9253,9255,9257],{"class":1094,"line":2308},[1092,9254,2393],{"class":1319},[1092,9256,1856],{"class":1315},[1092,9258,1347],{"class":1319},[1092,9260,9261,9263,9265,9267,9269],{"class":1094,"line":2340},[1092,9262,6511],{"class":1325},[1092,9264,1316],{"class":1319},[1092,9266,6516],{"class":1916},[1092,9268,1856],{"class":1319},[1092,9270,1395],{"class":1319},[1092,9272,9273],{"class":1094,"line":2356},[1092,9274,6526],{"class":2670},[1092,9276,9277,9279,9281,9283,9285,9287,9289,9291,9293,9295,9297],{"class":1094,"line":2374},[1092,9278,6532],{"class":1305},[1092,9280,1925],{"class":1325},[1092,9282,6516],{"class":1315},[1092,9284,1782],{"class":1319},[1092,9286,6541],{"class":1315},[1092,9288,3353],{"class":1319},[1092,9290,1406],{"class":1319},[1092,9292,4326],{"class":1102},[1092,9294,1344],{"class":1319},[1092,9296,3551],{"class":1325},[1092,9298,1320],{"class":1319},[1092,9300,9301,9303,9305,9307,9309,9311],{"class":1094,"line":2390},[1092,9302,6559],{"class":1115},[1092,9304,1316],{"class":1325},[1092,9306,1344],{"class":1319},[1092,9308,1761],{"class":1102},[1092,9310,1344],{"class":1319},[1092,9312,1454],{"class":1325},[1092,9314,9315],{"class":1094,"line":2398},[1092,9316,4561],{"class":1319},[1092,9318,9319],{"class":1094,"line":3378},[1092,9320,1417],{"class":1319},[1092,9322,9323,9325,9327,9329,9331],{"class":1094,"line":3395},[1092,9324,6585],{"class":1325},[1092,9326,1316],{"class":1319},[1092,9328,6590],{"class":1916},[1092,9330,1856],{"class":1319},[1092,9332,1395],{"class":1319},[1092,9334,9335,9337,9339,9341,9343],{"class":1094,"line":3427},[1092,9336,6600],{"class":1315},[1092,9338,1782],{"class":1319},[1092,9340,6605],{"class":1115},[1092,9342,1316],{"class":1325},[1092,9344,1320],{"class":1319},[1092,9346,9347,9349,9351,9353,9355,9357],{"class":1094,"line":3440},[1092,9348,6615],{"class":1325},[1092,9350,1329],{"class":1319},[1092,9352,1406],{"class":1319},[1092,9354,497],{"class":1102},[1092,9356,1344],{"class":1319},[1092,9358,1347],{"class":1319},[1092,9360,9361,9363,9365,9367,9369,9371],{"class":1094,"line":3445},[1092,9362,6631],{"class":1325},[1092,9364,1329],{"class":1319},[1092,9366,6636],{"class":1315},[1092,9368,1782],{"class":1319},[1092,9370,4478],{"class":1315},[1092,9372,1347],{"class":1319},[1092,9374,9375,9377,9379,9381,9383],{"class":1094,"line":3451},[1092,9376,6648],{"class":1325},[1092,9378,1329],{"class":1319},[1092,9380,1406],{"class":1319},[1092,9382,6590],{"class":1102},[1092,9384,1370],{"class":1319},[1092,9386,9387,9389],{"class":1094,"line":3482},[1092,9388,3381],{"class":1319},[1092,9390,1454],{"class":1325},[1092,9392,9393],{"class":1094,"line":3526},[1092,9394,3598],{"class":1319},[1092,9396,9397,9399],{"class":1094,"line":3533},[1092,9398,1451],{"class":1319},[1092,9400,1454],{"class":1315},[1092,9402,9403],{"class":1094,"line":3538},[1092,9404,1384],{"emptyLinePlaceholder":21},[1092,9406,9407,9409,9411,9413,9415,9417,9419,9421],{"class":1094,"line":3556},[1092,9408,6684],{"class":1562},[1092,9410,6687],{"class":1115},[1092,9412,1316],{"class":1319},[1092,9414,6692],{"class":1916},[1092,9416,1329],{"class":1319},[1092,9418,6697],{"class":1098},[1092,9420,1856],{"class":1319},[1092,9422,1395],{"class":1319},[1092,9424,9425,9427,9429,9431],{"class":1094,"line":3595},[1092,9426,6706],{"class":1315},[1092,9428,1782],{"class":1319},[1092,9430,6711],{"class":1115},[1092,9432,2648],{"class":1325},[1092,9434,9435,9437,9439,9441,9443,9445,9447,9449,9451],{"class":1094,"line":3601},[1092,9436,3541],{"class":1305},[1092,9438,1925],{"class":1325},[1092,9440,5205],{"class":1315},[1092,9442,1782],{"class":1319},[1092,9444,3326],{"class":1315},[1092,9446,1782],{"class":1319},[1092,9448,5214],{"class":1115},[1092,9450,5217],{"class":1325},[1092,9452,1320],{"class":1319},[1092,9454,9455,9457,9459,9461,9463,9465,9467,9469,9471,9473,9475,9477],{"class":1094,"line":3606},[1092,9456,6738],{"class":1315},[1092,9458,1782],{"class":1319},[1092,9460,6743],{"class":1115},[1092,9462,1316],{"class":1325},[1092,9464,1839],{"class":1319},[1092,9466,1693],{"class":1325},[1092,9468,1329],{"class":1319},[1092,9470,5349],{"class":1315},[1092,9472,1782],{"class":1319},[1092,9474,3326],{"class":1315},[1092,9476,1706],{"class":1319},[1092,9478,1454],{"class":1325},[1092,9480,9481,9483,9485,9487,9489],{"class":1094,"line":3612},[1092,9482,6766],{"class":1315},[1092,9484,1782],{"class":1319},[1092,9486,3326],{"class":1315},[1092,9488,2602],{"class":1319},[1092,9490,6775],{"class":1319},[1092,9492,9493],{"class":1094,"line":3632},[1092,9494,3598],{"class":1319},[1092,9496,9497],{"class":1094,"line":3660},[1092,9498,5411],{"class":1319},[1092,9500,9501],{"class":1094,"line":3672},[1092,9502,1384],{"emptyLinePlaceholder":21},[1092,9504,9505],{"class":1094,"line":3691},[1092,9506,6792],{"class":2670},[1092,9508,9509,9511,9513,9515,9517],{"class":1094,"line":3719},[1092,9510,6797],{"class":1115},[1092,9512,1316],{"class":1315},[1092,9514,1779],{"class":1319},[1092,9516,1799],{"class":1562},[1092,9518,1395],{"class":1319},[1092,9520,9521,9523,9525,9527,9529,9531,9533,9535,9537,9539,9541,9543,9545],{"class":1094,"line":3726},[1092,9522,3541],{"class":1305},[1092,9524,1925],{"class":1325},[1092,9526,6314],{"class":1315},[1092,9528,1782],{"class":1319},[1092,9530,3326],{"class":1315},[1092,9532,3852],{"class":1319},[1092,9534,1971],{"class":1315},[1092,9536,1782],{"class":1319},[1092,9538,3831],{"class":1315},[1092,9540,3353],{"class":1319},[1092,9542,3837],{"class":3573},[1092,9544,3551],{"class":1325},[1092,9546,1320],{"class":1319},[1092,9548,9549,9551,9553,9555],{"class":1094,"line":3731},[1092,9550,6738],{"class":1315},[1092,9552,1782],{"class":1319},[1092,9554,6842],{"class":1115},[1092,9556,2648],{"class":1325},[1092,9558,9559],{"class":1094,"line":3797},[1092,9560,3598],{"class":1319},[1092,9562,9563,9565],{"class":1094,"line":3802},[1092,9564,1451],{"class":1319},[1092,9566,1454],{"class":1315},[1092,9568,9569,9571,9573],{"class":1094,"line":3807},[1092,9570,1610],{"class":1319},[1092,9572,5123],{"class":1325},[1092,9574,1540],{"class":1319},[1092,9576,9577],{"class":1094,"line":3813},[1092,9578,1384],{"emptyLinePlaceholder":21},[1092,9580,9581,9583,9585],{"class":1094,"line":3842},[1092,9582,1534],{"class":1319},[1092,9584,1537],{"class":1325},[1092,9586,1540],{"class":1319},[1092,9588,9589,9591,9593,9595,9597,9599,9601,9603],{"class":1094,"line":3883},[1092,9590,1547],{"class":1319},[1092,9592,5438],{"class":1325},[1092,9594,5441],{"class":1562},[1092,9596,1566],{"class":1319},[1092,9598,1493],{"class":1319},[1092,9600,5448],{"class":1102},[1092,9602,1493],{"class":1319},[1092,9604,1540],{"class":1319},[1092,9606,9607,9609,9611,9613,9615],{"class":1094,"line":3912},[1092,9608,1556],{"class":1319},[1092,9610,1537],{"class":1325},[1092,9612,5461],{"class":1319},[1092,9614,8681],{"class":1562},[1092,9616,1540],{"class":1319},[1092,9618,9619,9621,9623],{"class":1094,"line":3924},[1092,9620,1580],{"class":1319},[1092,9622,8691],{"class":1325},[1092,9624,1586],{"class":1319},[1092,9626,9627,9629,9631],{"class":1094,"line":3940},[1092,9628,1591],{"class":1319},[1092,9630,1537],{"class":1325},[1092,9632,1540],{"class":1319},[1092,9634,9635,9637,9639,9641,9643],{"class":1094,"line":3954},[1092,9636,1556],{"class":1319},[1092,9638,1537],{"class":1325},[1092,9640,5461],{"class":1319},[1092,9642,5464],{"class":1562},[1092,9644,1540],{"class":1319},[1092,9646,9648,9650,9652,9654,9656,9658,9660,9662],{"class":9647,"line":3961},[1094,1544],[1092,9649,1580],{"class":1319},[1092,9651,5473],{"class":1325},[1092,9653,5476],{"class":1562},[1092,9655,1566],{"class":1319},[1092,9657,1493],{"class":1319},[1092,9659,6919],{"class":1102},[1092,9661,1493],{"class":1319},[1092,9663,1540],{"class":1319},[1092,9665,9667,9669],{"class":9666,"line":3966},[1094,1544],[1092,9668,5492],{"class":1319},[1092,9670,6930],{"class":1325},[1092,9672,9674,9676,9678,9680,9682],{"class":9673,"line":3971},[1094,1544],[1092,9675,6935],{"class":1562},[1092,9677,1566],{"class":1319},[1092,9679,1493],{"class":1319},[1092,9681,6942],{"class":1102},[1092,9683,5549],{"class":1319},[1092,9685,9686,9688,9690,9692,9694],{"class":1094,"line":3977},[1092,9687,5555],{"class":1562},[1092,9689,1566],{"class":1319},[1092,9691,1493],{"class":1319},[1092,9693,6955],{"class":1102},[1092,9695,5549],{"class":1319},[1092,9697,9698],{"class":1094,"line":3994},[1092,9699,6962],{"class":1562},[1092,9701,9702,9704,9706,9708,9710],{"class":1094,"line":4016},[1092,9703,6967],{"class":1562},[1092,9705,1566],{"class":1319},[1092,9707,1493],{"class":1319},[1092,9709,6974],{"class":1102},[1092,9711,5549],{"class":1319},[1092,9713,9714],{"class":1094,"line":4034},[1092,9715,5615],{"class":1319},[1092,9717,9718,9720,9722,9724,9726,9728,9730,9732,9734,9736,9738],{"class":1094,"line":4042},[1092,9719,5621],{"class":1319},[1092,9721,1537],{"class":1325},[1092,9723,5461],{"class":1319},[1092,9725,371],{"class":1562},[1092,9727,1566],{"class":1319},[1092,9729,1493],{"class":1319},[1092,9731,1839],{"class":1319},[1092,9733,6999],{"class":1315},[1092,9735,1451],{"class":1319},[1092,9737,1493],{"class":1319},[1092,9739,1540],{"class":1319},[1092,9741,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,9800,9802,9804],{"class":1094,"line":4059},[1092,9743,7010],{"class":1319},[1092,9745,1537],{"class":1325},[1092,9747,7015],{"class":1305},[1092,9749,1566],{"class":1319},[1092,9751,1493],{"class":1319},[1092,9753,7022],{"class":1315},[1092,9755,1690],{"class":1319},[1092,9757,7027],{"class":1315},[1092,9759,7030],{"class":1319},[1092,9761,2597],{"class":1315},[1092,9763,1782],{"class":1319},[1092,9765,2177],{"class":1315},[1092,9767,1493],{"class":1319},[1092,9769,7041],{"class":1319},[1092,9771,7044],{"class":1562},[1092,9773,1566],{"class":1319},[1092,9775,7049],{"class":1319},[1092,9777,4478],{"class":1315},[1092,9779,1782],{"class":1319},[1092,9781,1993],{"class":1315},[1092,9783,1451],{"class":1319},[1092,9785,7060],{"class":1102},[1092,9787,5395],{"class":1319},[1092,9789,7065],{"class":1315},[1092,9791,1782],{"class":1319},[1092,9793,6541],{"class":1315},[1092,9795,1451],{"class":1319},[1092,9797,7060],{"class":1102},[1092,9799,5395],{"class":1319},[1092,9801,7078],{"class":1315},[1092,9803,7081],{"class":1319},[1092,9805,1540],{"class":1319},[1092,9807,9808,9810],{"class":1094,"line":4080},[1092,9809,7088],{"class":1319},[1092,9811,7091],{"class":1325},[1092,9813,9814,9816,9818,9820,9822],{"class":1094,"line":4090},[1092,9815,7096],{"class":1562},[1092,9817,1566],{"class":1319},[1092,9819,1493],{"class":1319},[1092,9821,7103],{"class":1102},[1092,9823,5549],{"class":1319},[1092,9825,9826,9828,9830,9832,9834],{"class":1094,"line":4100},[1092,9827,7110],{"class":1562},[1092,9829,1566],{"class":1319},[1092,9831,1493],{"class":1319},[1092,9833,7117],{"class":1102},[1092,9835,5549],{"class":1319},[1092,9837,9838,9840,9842,9844,9846],{"class":1094,"line":4110},[1092,9839,7124],{"class":1562},[1092,9841,1566],{"class":1319},[1092,9843,1493],{"class":1319},[1092,9845,7131],{"class":1102},[1092,9847,5549],{"class":1319},[1092,9849,9850],{"class":1094,"line":4127},[1092,9851,7138],{"class":1319},[1092,9853,9854,9856],{"class":1094,"line":4138},[1092,9855,7143],{"class":1319},[1092,9857,7146],{"class":1325},[1092,9859,9860,9862,9864,9866,9868],{"class":1094,"line":4144},[1092,9861,7151],{"class":1562},[1092,9863,1566],{"class":1319},[1092,9865,1493],{"class":1319},[1092,9867,7117],{"class":1102},[1092,9869,5549],{"class":1319},[1092,9871,9872,9874,9876,9878,9880],{"class":1094,"line":4150},[1092,9873,7164],{"class":1562},[1092,9875,1566],{"class":1319},[1092,9877,1493],{"class":1319},[1092,9879,7131],{"class":1102},[1092,9881,5549],{"class":1319},[1092,9883,9884],{"class":1094,"line":4160},[1092,9885,7177],{"class":1319},[1092,9887,9888,9890,9892],{"class":1094,"line":4170},[1092,9889,7182],{"class":1319},[1092,9891,7185],{"class":1325},[1092,9893,1540],{"class":1319},[1092,9895,9896],{"class":1094,"line":4184},[1092,9897,1384],{"emptyLinePlaceholder":21},[1092,9899,9900,9902,9904,9906,9908,9910,9912,9914,9916],{"class":1094,"line":4199},[1092,9901,7088],{"class":1319},[1092,9903,1537],{"class":1325},[1092,9905,7200],{"class":1305},[1092,9907,1566],{"class":1319},[1092,9909,1493],{"class":1319},[1092,9911,7207],{"class":1115},[1092,9913,7210],{"class":1315},[1092,9915,1493],{"class":1319},[1092,9917,1540],{"class":1319},[1092,9919,9920,9922],{"class":1094,"line":4204},[1092,9921,7143],{"class":1319},[1092,9923,7146],{"class":1325},[1092,9925,9926,9928,9930,9932,9934],{"class":1094,"line":4209},[1092,9927,7225],{"class":1562},[1092,9929,1566],{"class":1319},[1092,9931,1493],{"class":1319},[1092,9933,7232],{"class":1102},[1092,9935,5549],{"class":1319},[1092,9937,9938,9940,9942,9944,9946],{"class":1094,"line":4219},[1092,9939,7151],{"class":1562},[1092,9941,1566],{"class":1319},[1092,9943,1493],{"class":1319},[1092,9945,7117],{"class":1102},[1092,9947,5549],{"class":1319},[1092,9949,9950,9952,9954,9956,9958],{"class":1094,"line":4235},[1092,9951,7164],{"class":1562},[1092,9953,1566],{"class":1319},[1092,9955,1493],{"class":1319},[1092,9957,7131],{"class":1102},[1092,9959,5549],{"class":1319},[1092,9961,9962],{"class":1094,"line":4250},[1092,9963,7177],{"class":1319},[1092,9965,9966,9968,9970,9972,9974,9976,9978,9980,9982,9984,9986,9988,9990],{"class":1094,"line":4256},[1092,9967,7143],{"class":1319},[1092,9969,982],{"class":1325},[1092,9971,7200],{"class":1562},[1092,9973,1566],{"class":1319},[1092,9975,1493],{"class":1319},[1092,9977,7277],{"class":1102},[1092,9979,1493],{"class":1319},[1092,9981,5476],{"class":1562},[1092,9983,1566],{"class":1319},[1092,9985,1493],{"class":1319},[1092,9987,7288],{"class":1102},[1092,9989,1493],{"class":1319},[1092,9991,1540],{"class":1319},[1092,9993,9994],{"class":1094,"line":4262},[1092,9995,7297],{"class":1315},[1092,9997,9998,10000,10002],{"class":1094,"line":4270},[1092,9999,7302],{"class":1319},[1092,10001,982],{"class":1325},[1092,10003,1540],{"class":1319},[1092,10005,10006,10008,10010],{"class":1094,"line":4275},[1092,10007,7182],{"class":1319},[1092,10009,1537],{"class":1325},[1092,10011,1540],{"class":1319},[1092,10013,10014,10016,10018],{"class":1094,"line":4281},[1092,10015,7319],{"class":1319},[1092,10017,1537],{"class":1325},[1092,10019,1540],{"class":1319},[1092,10021,10022,10024,10026],{"class":1094,"line":4301},[1092,10023,7328],{"class":1319},[1092,10025,1537],{"class":1325},[1092,10027,1540],{"class":1319},[1092,10029,10030,10032,10034],{"class":1094,"line":4316},[1092,10031,5518],{"class":1319},[1092,10033,5094],{"class":1325},[1092,10035,1540],{"class":1319},[1092,10037,10038],{"class":1094,"line":4333},[1092,10039,1384],{"emptyLinePlaceholder":21},[1092,10041,10042,10044],{"class":1094,"line":4356},[1092,10043,5492],{"class":1319},[1092,10045,5534],{"class":1325},[1092,10047,10048,10050,10052,10054,10056],{"class":1094,"line":4367},[1092,10049,5540],{"class":1562},[1092,10051,1566],{"class":1319},[1092,10053,1493],{"class":1319},[1092,10055,5205],{"class":1102},[1092,10057,5549],{"class":1319},[1092,10059,10060,10062,10064,10066,10068],{"class":1094,"line":4375},[1092,10061,7367],{"class":1562},[1092,10063,1566],{"class":1319},[1092,10065,1493],{"class":1319},[1092,10067,7374],{"class":1102},[1092,10069,5549],{"class":1319},[1092,10071,10072,10074,10076,10078,10080],{"class":1094,"line":4381},[1092,10073,5570],{"class":1562},[1092,10075,1566],{"class":1319},[1092,10077,1493],{"class":1319},[1092,10079,5577],{"class":1102},[1092,10081,5549],{"class":1319},[1092,10083,10084,10086,10088,10090,10092],{"class":1094,"line":4386},[1092,10085,6967],{"class":1562},[1092,10087,1566],{"class":1319},[1092,10089,1493],{"class":1319},[1092,10091,7399],{"class":1102},[1092,10093,5549],{"class":1319},[1092,10095,10096,10098,10100,10102,10104],{"class":1094,"line":4409},[1092,10097,5600],{"class":1562},[1092,10099,1566],{"class":1319},[1092,10101,1493],{"class":1319},[1092,10103,7412],{"class":1102},[1092,10105,5549],{"class":1319},[1092,10107,10108],{"class":1094,"line":4415},[1092,10109,5615],{"class":1319},[1092,10111,10112,10114],{"class":1094,"line":4435},[1092,10113,5621],{"class":1319},[1092,10115,7425],{"class":1325},[1092,10117,10118,10120,10122,10124,10126],{"class":1094,"line":4441},[1092,10119,7430],{"class":1562},[1092,10121,1566],{"class":1319},[1092,10123,1493],{"class":1319},[1092,10125,6955],{"class":1102},[1092,10127,5549],{"class":1319},[1092,10129,10130,10132,10134,10136,10138],{"class":1094,"line":4487},[1092,10131,7443],{"class":1562},[1092,10133,1566],{"class":1319},[1092,10135,1493],{"class":1319},[1092,10137,5634],{"class":1102},[1092,10139,5549],{"class":1319},[1092,10141,10142,10144,10146,10148,10150],{"class":1094,"line":4503},[1092,10143,7456],{"class":1562},[1092,10145,1566],{"class":1319},[1092,10147,1493],{"class":1319},[1092,10149,7463],{"class":1102},[1092,10151,5549],{"class":1319},[1092,10153,10154,10156,10158,10160,10162],{"class":1094,"line":4536},[1092,10155,7470],{"class":1562},[1092,10157,1566],{"class":1319},[1092,10159,1493],{"class":1319},[1092,10161,7477],{"class":1102},[1092,10163,5549],{"class":1319},[1092,10165,10166],{"class":1094,"line":4550},[1092,10167,7484],{"class":1319},[1092,10169,10170,10172,10174],{"class":1094,"line":4558},[1092,10171,5518],{"class":1319},[1092,10173,5088],{"class":1325},[1092,10175,1540],{"class":1319},[1092,10177,10178,10180,10182],{"class":1094,"line":4564},[1092,10179,5652],{"class":1319},[1092,10181,5473],{"class":1325},[1092,10183,1540],{"class":1319},[1092,10185,10186,10188,10190],{"class":1094,"line":4571},[1092,10187,1591],{"class":1319},[1092,10189,1537],{"class":1325},[1092,10191,1540],{"class":1319},[1092,10193,10194,10196,10198],{"class":1094,"line":4576},[1092,10195,1601],{"class":1319},[1092,10197,5438],{"class":1325},[1092,10199,1540],{"class":1319},[1092,10201,10202,10204,10206],{"class":1094,"line":4594},[1092,10203,1610],{"class":1319},[1092,10205,1537],{"class":1325},[1092,10207,1540],{"class":1319},[982,10209,4637,10210,10213,10214,10216],{},[1042,10211,10212],{},"refreshNuxtData('chats')"," call in the chat page's ",[1042,10215,7586],{}," callback (as shown earlier) ensures the chat list updates automatically when a new title is generated.",[986,10218,10220],{"id":10219},"adding-multi-model-support","Adding multi-model support",[982,10222,10223,10224,10227],{},"One of the benefits of using ",[1036,10225,4606],{"href":1071,"rel":10226},[1040]," is the ability to switch between models seamlessly. This section adds a model selector to the chat.",[1120,10229,10231],{"id":10230},"creating-a-models-composable","Creating a models composable",[982,10233,10234,10235,1329],{},"Define the available models and persist the user's selection using ",[1036,10236,10239],{"href":10237,"rel":10238},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-cookie",[1040],[1042,10240,10241],{},"useCookie",[1292,10243,10244],{},[1083,10245,10248],{"className":1296,"code":10246,"filename":10247,"language":1298,"meta":1088,"style":1088},"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",[1042,10249,10250,10263,10274,10320,10364,10408,10413,10417,10447,10464,10470,10474,10480,10487,10492,10496],{"__ignoreMap":1088},[1092,10251,10252,10254,10256,10259,10261],{"class":1094,"line":1095},[1092,10253,1306],{"class":1305},[1092,10255,5187],{"class":1562},[1092,10257,10258],{"class":1115}," useModels",[1092,10260,1779],{"class":1319},[1092,10262,1395],{"class":1319},[1092,10264,10265,10267,10270,10272],{"class":1094,"line":1112},[1092,10266,2592],{"class":1562},[1092,10268,10269],{"class":1315}," models",[1092,10271,2602],{"class":1319},[1092,10273,1332],{"class":1325},[1092,10275,10276,10279,10281,10283,10285,10287,10289,10291,10293,10295,10297,10299,10301,10303,10306,10308,10310,10316,10318],{"class":1094,"line":1335},[1092,10277,10278],{"class":1319},"    {",[1092,10280,3090],{"class":1325},[1092,10282,1329],{"class":1319},[1092,10284,1406],{"class":1319},[1092,10286,3097],{"class":1102},[1092,10288,1344],{"class":1319},[1092,10290,1690],{"class":1319},[1092,10292,3076],{"class":1325},[1092,10294,1329],{"class":1319},[1092,10296,1406],{"class":1319},[1092,10298,3083],{"class":1102},[1092,10300,1344],{"class":1319},[1092,10302,1690],{"class":1319},[1092,10304,10305],{"class":1325}," icon",[1092,10307,1329],{"class":1319},[1092,10309,1406],{"class":1319},[1092,10311,10312,10315],{"class":1102},[8058,10313],{"class":10314},"shiki-icon-highlight sh9xi","i-simple-icons-openai",[1092,10317,1344],{"class":1319},[1092,10319,3102],{"class":1319},[1092,10321,10322,10324,10326,10328,10330,10332,10334,10336,10338,10340,10342,10344,10346,10348,10350,10352,10354,10360,10362],{"class":1094,"line":1350},[1092,10323,10278],{"class":1319},[1092,10325,3090],{"class":1325},[1092,10327,1329],{"class":1319},[1092,10329,1406],{"class":1319},[1092,10331,3127],{"class":1102},[1092,10333,1344],{"class":1319},[1092,10335,1690],{"class":1319},[1092,10337,3076],{"class":1325},[1092,10339,1329],{"class":1319},[1092,10341,1406],{"class":1319},[1092,10343,3051],{"class":1102},[1092,10345,1344],{"class":1319},[1092,10347,1690],{"class":1319},[1092,10349,10305],{"class":1325},[1092,10351,1329],{"class":1319},[1092,10353,1406],{"class":1319},[1092,10355,10356,10359],{"class":1102},[8058,10357],{"class":10358},"shiki-icon-highlight sNknm","i-simple-icons-anthropic",[1092,10361,1344],{"class":1319},[1092,10363,3102],{"class":1319},[1092,10365,10366,10368,10370,10372,10374,10376,10378,10380,10382,10384,10386,10388,10390,10392,10394,10396,10398,10404,10406],{"class":1094,"line":1362},[1092,10367,10278],{"class":1319},[1092,10369,3090],{"class":1325},[1092,10371,1329],{"class":1319},[1092,10373,1406],{"class":1319},[1092,10375,3157],{"class":1102},[1092,10377,1344],{"class":1319},[1092,10379,1690],{"class":1319},[1092,10381,3076],{"class":1325},[1092,10383,1329],{"class":1319},[1092,10385,1406],{"class":1319},[1092,10387,3144],{"class":1102},[1092,10389,1344],{"class":1319},[1092,10391,1690],{"class":1319},[1092,10393,10305],{"class":1325},[1092,10395,1329],{"class":1319},[1092,10397,1406],{"class":1319},[1092,10399,10400,10403],{"class":1102},[8058,10401],{"class":10402},"shiki-icon-highlight scZL3","i-simple-icons-google",[1092,10405,1344],{"class":1319},[1092,10407,3162],{"class":1319},[1092,10409,10410],{"class":1094,"line":1373},[1092,10411,10412],{"class":1325},"  ]\n",[1092,10414,10415],{"class":1094,"line":1381},[1092,10416,1384],{"emptyLinePlaceholder":21},[1092,10418,10419,10421,10423,10425,10428,10430,10432,10434,10436,10438,10441,10443,10445],{"class":1094,"line":1387},[1092,10420,2592],{"class":1562},[1092,10422,3267],{"class":1315},[1092,10424,2602],{"class":1319},[1092,10426,10427],{"class":1115}," useCookie",[1092,10429,1534],{"class":1319},[1092,10431,3240],{"class":1098},[1092,10433,2645],{"class":1319},[1092,10435,1316],{"class":1325},[1092,10437,1344],{"class":1319},[1092,10439,10440],{"class":1102},"ai-model",[1092,10442,1344],{"class":1319},[1092,10444,1690],{"class":1319},[1092,10446,1395],{"class":1319},[1092,10448,10449,10452,10454,10456,10458,10460,10462],{"class":1094,"line":1398},[1092,10450,10451],{"class":1115},"    default",[1092,10453,1329],{"class":1319},[1092,10455,4973],{"class":1319},[1092,10457,1799],{"class":1562},[1092,10459,1406],{"class":1319},[1092,10461,3051],{"class":1102},[1092,10463,1370],{"class":1319},[1092,10465,10466,10468],{"class":1094,"line":1414},[1092,10467,2393],{"class":1319},[1092,10469,1454],{"class":1325},[1092,10471,10472],{"class":1094,"line":1420},[1092,10473,1384],{"emptyLinePlaceholder":21},[1092,10475,10476,10478],{"class":1094,"line":1425},[1092,10477,2820],{"class":1305},[1092,10479,1395],{"class":1319},[1092,10481,10482,10485],{"class":1094,"line":1448},[1092,10483,10484],{"class":1315},"    models",[1092,10486,1347],{"class":1319},[1092,10488,10489],{"class":1094,"line":1953},[1092,10490,10491],{"class":1315},"    model\n",[1092,10493,10494],{"class":1094,"line":1980},[1092,10495,3598],{"class":1319},[1092,10497,10498],{"class":1094,"line":2026},[1092,10499,5411],{"class":1319},[1120,10501,10503],{"id":10502},"building-the-model-selector","Building the model selector",[982,10505,1617,10506,10511],{},[1036,10507,10508],{"href":734},[1042,10509,10510],{},"USelectMenu"," component that displays the available models:",[1292,10513,10514],{},[1083,10515,10518],{"className":1524,"code":10516,"filename":10517,"language":34,"meta":1088,"style":1088},"\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",[1042,10519,10520,10540,10573,10577,10594,10598,10616,10648,10652,10660,10664,10672,10679,10692,10706,10720,10733,10746,10751],{"__ignoreMap":1088},[1092,10521,10522,10524,10526,10528,10530,10532,10534,10536,10538],{"class":1094,"line":1095},[1092,10523,1534],{"class":1319},[1092,10525,5123],{"class":1325},[1092,10527,5126],{"class":1562},[1092,10529,5129],{"class":1562},[1092,10531,1566],{"class":1319},[1092,10533,1493],{"class":1319},[1092,10535,1298],{"class":1102},[1092,10537,1493],{"class":1319},[1092,10539,1540],{"class":1319},[1092,10541,10542,10544,10547,10549,10552,10554,10556,10558,10560,10562,10565,10567,10569,10571],{"class":1094,"line":1112},[1092,10543,3041],{"class":1562},[1092,10545,10546],{"class":1315}," model ",[1092,10548,1566],{"class":1319},[1092,10550,10551],{"class":1115}," defineModel",[1092,10553,1534],{"class":1319},[1092,10555,3240],{"class":1098},[1092,10557,2645],{"class":1319},[1092,10559,1316],{"class":1315},[1092,10561,1839],{"class":1319},[1092,10563,10564],{"class":1325}," required",[1092,10566,1329],{"class":1319},[1092,10568,4179],{"class":4178},[1092,10570,1706],{"class":1319},[1092,10572,1454],{"class":1315},[1092,10574,10575],{"class":1094,"line":1335},[1092,10576,1384],{"emptyLinePlaceholder":21},[1092,10578,10579,10581,10583,10586,10588,10590,10592],{"class":1094,"line":1350},[1092,10580,3041],{"class":1562},[1092,10582,1684],{"class":1319},[1092,10584,10585],{"class":1315}," models ",[1092,10587,1451],{"class":1319},[1092,10589,2602],{"class":1319},[1092,10591,10258],{"class":1115},[1092,10593,2648],{"class":1315},[1092,10595,10596],{"class":1094,"line":1362},[1092,10597,1384],{"emptyLinePlaceholder":21},[1092,10599,10600,10602,10605,10607,10609,10611,10613],{"class":1094,"line":1373},[1092,10601,3041],{"class":1562},[1092,10603,10604],{"class":1315}," selectedModel ",[1092,10606,1566],{"class":1319},[1092,10608,8000],{"class":1115},[1092,10610,1316],{"class":1315},[1092,10612,1779],{"class":1319},[1092,10614,10615],{"class":1562}," =>\n",[1092,10617,10618,10621,10623,10626,10628,10630,10632,10634,10636,10639,10641,10643,10645],{"class":1094,"line":1381},[1092,10619,10620],{"class":1315},"  models",[1092,10622,1782],{"class":1319},[1092,10624,10625],{"class":1115},"find",[1092,10627,1316],{"class":1315},[1092,10629,3341],{"class":1916},[1092,10631,1799],{"class":1562},[1092,10633,3346],{"class":1315},[1092,10635,1782],{"class":1319},[1092,10637,10638],{"class":1315},"value ",[1092,10640,8083],{"class":1319},[1092,10642,3267],{"class":1315},[1092,10644,1782],{"class":1319},[1092,10646,10647],{"class":1315},"value)\n",[1092,10649,10650],{"class":1094,"line":1387},[1092,10651,1454],{"class":1315},[1092,10653,10654,10656,10658],{"class":1094,"line":1398},[1092,10655,1610],{"class":1319},[1092,10657,5123],{"class":1325},[1092,10659,1540],{"class":1319},[1092,10661,10662],{"class":1094,"line":1414},[1092,10663,1384],{"emptyLinePlaceholder":21},[1092,10665,10666,10668,10670],{"class":1094,"line":1420},[1092,10667,1534],{"class":1319},[1092,10669,1537],{"class":1325},[1092,10671,1540],{"class":1319},[1092,10673,10674,10676],{"class":1094,"line":1425},[1092,10675,1547],{"class":1319},[1092,10677,10678],{"class":1325},"USelectMenu\n",[1092,10680,10681,10684,10686,10688,10690],{"class":1094,"line":1448},[1092,10682,10683],{"class":1562},"    v-model",[1092,10685,1566],{"class":1319},[1092,10687,1493],{"class":1319},[1092,10689,4650],{"class":1102},[1092,10691,5549],{"class":1319},[1092,10693,10694,10697,10699,10701,10704],{"class":1094,"line":1953},[1092,10695,10696],{"class":1562},"    :items",[1092,10698,1566],{"class":1319},[1092,10700,1493],{"class":1319},[1092,10702,10703],{"class":1102},"models",[1092,10705,5549],{"class":1319},[1092,10707,10708,10711,10713,10715,10718],{"class":1094,"line":1980},[1092,10709,10710],{"class":1562},"    :icon",[1092,10712,1566],{"class":1319},[1092,10714,1493],{"class":1319},[1092,10716,10717],{"class":1102},"selectedModel?.icon",[1092,10719,5549],{"class":1319},[1092,10721,10722,10725,10727,10729,10731],{"class":1094,"line":2026},[1092,10723,10724],{"class":1562},"    variant",[1092,10726,1566],{"class":1319},[1092,10728,1493],{"class":1319},[1092,10730,8288],{"class":1102},[1092,10732,5549],{"class":1319},[1092,10734,10735,10738,10740,10742,10744],{"class":1094,"line":2093},[1092,10736,10737],{"class":1562},"    value-key",[1092,10739,1566],{"class":1319},[1092,10741,1493],{"class":1319},[1092,10743,3326],{"class":1102},[1092,10745,5549],{"class":1319},[1092,10747,10748],{"class":1094,"line":2163},[1092,10749,10750],{"class":1319},"  \u002F>\n",[1092,10752,10753,10755,10757],{"class":1094,"line":2203},[1092,10754,1610],{"class":1319},[1092,10756,1537],{"class":1325},[1092,10758,1540],{"class":1319},[1120,10760,10762],{"id":10761},"integrating-with-the-chat","Integrating with the chat",[982,10764,10765],{},"Update the chat page to include the model selector and pass the selected model to the server:",[1292,10767,10768],{},[1669,10769,10770],{},[1083,10771,10774],{"className":1524,"code":10772,"filename":6114,"highlights":10773,"language":34,"meta":1088,"style":1088},"\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",[1387,2308,2340,2356,4316,4333,4356],[1042,10775,10776,10796,10822,10840,10858,10862,10874,10886,10903,10907,10949,10953,10969,11009,11013,11017,11033,11037,11053,11071,11089,11103,11129,11137,11153,11158,11167,11179,11203,11217,11221,11225,11237,11249,11263,11277,11289,11295,11299,11305,11309,11327,11337,11357,11383,11395,11399,11403,11407,11419,11447,11457,11461,11467,11475,11479,11487,11505,11517,11525,11533,11545,11563,11569,11581,11593,11597,11609,11613,11637,11703,11709,11721,11733,11745,11749,11755,11767,11779,11783,11791,11795,11815,11821,11833,11845,11857,11861,11889,11893,11901,11909,11917,11925,11934,11939,11946,11958,11970,11982,11994,12006,12010,12023,12043,12051,12055,12061,12073,12085,12097,12109,12113,12121,12130,12139,12148],{"__ignoreMap":1088},[1092,10777,10778,10780,10782,10784,10786,10788,10790,10792,10794],{"class":1094,"line":1095},[1092,10779,1534],{"class":1319},[1092,10781,5123],{"class":1325},[1092,10783,5126],{"class":1562},[1092,10785,5129],{"class":1562},[1092,10787,1566],{"class":1319},[1092,10789,1493],{"class":1319},[1092,10791,1298],{"class":1102},[1092,10793,1493],{"class":1319},[1092,10795,1540],{"class":1319},[1092,10797,10798,10800,10802,10804,10806,10808,10810,10812,10814,10816,10818,10820],{"class":1094,"line":1112},[1092,10799,1681],{"class":1305},[1092,10801,1684],{"class":1319},[1092,10803,6147],{"class":1315},[1092,10805,1690],{"class":1319},[1092,10807,6152],{"class":1315},[1092,10809,1690],{"class":1319},[1092,10811,6157],{"class":1315},[1092,10813,1706],{"class":1319},[1092,10815,1709],{"class":1305},[1092,10817,1406],{"class":1319},[1092,10819,2513],{"class":1102},[1092,10821,1370],{"class":1319},[1092,10823,10824,10826,10828,10830,10832,10834,10836,10838],{"class":1094,"line":1335},[1092,10825,1681],{"class":1305},[1092,10827,1684],{"class":1319},[1092,10829,6177],{"class":1315},[1092,10831,1706],{"class":1319},[1092,10833,1709],{"class":1305},[1092,10835,1406],{"class":1319},[1092,10837,6186],{"class":1102},[1092,10839,1370],{"class":1319},[1092,10841,10842,10844,10846,10848,10850,10852,10854,10856],{"class":1094,"line":1350},[1092,10843,1681],{"class":1305},[1092,10845,1684],{"class":1319},[1092,10847,6198],{"class":1315},[1092,10849,1706],{"class":1319},[1092,10851,1709],{"class":1305},[1092,10853,1406],{"class":1319},[1092,10855,6207],{"class":1102},[1092,10857,1370],{"class":1319},[1092,10859,10860],{"class":1094,"line":1362},[1092,10861,1384],{"emptyLinePlaceholder":21},[1092,10863,10864,10866,10868,10870,10872],{"class":1094,"line":1373},[1092,10865,3041],{"class":1562},[1092,10867,6220],{"class":1315},[1092,10869,1566],{"class":1319},[1092,10871,6225],{"class":1115},[1092,10873,2648],{"class":1315},[1092,10875,10876,10878,10880,10882,10884],{"class":1094,"line":1381},[1092,10877,3041],{"class":1562},[1092,10879,6234],{"class":1315},[1092,10881,1566],{"class":1319},[1092,10883,6239],{"class":1115},[1092,10885,2648],{"class":1315},[1092,10887,10889,10891,10893,10895,10897,10899,10901],{"class":10888,"line":1387},[1094,1544],[1092,10890,3041],{"class":1562},[1092,10892,1684],{"class":1319},[1092,10894,10546],{"class":1315},[1092,10896,1451],{"class":1319},[1092,10898,2602],{"class":1319},[1092,10900,10258],{"class":1115},[1092,10902,2648],{"class":1315},[1092,10904,10905],{"class":1094,"line":1398},[1092,10906,1384],{"emptyLinePlaceholder":21},[1092,10908,10909,10911,10913,10915,10917,10919,10921,10923,10925,10927,10929,10931,10933,10935,10937,10939,10941,10943,10945,10947],{"class":1094,"line":1414},[1092,10910,3041],{"class":1562},[1092,10912,1684],{"class":1319},[1092,10914,6259],{"class":1325},[1092,10916,1329],{"class":1319},[1092,10918,6264],{"class":1315},[1092,10920,1451],{"class":1319},[1092,10922,2602],{"class":1319},[1092,10924,2605],{"class":1305},[1092,10926,6273],{"class":1115},[1092,10928,1316],{"class":1315},[1092,10930,3686],{"class":1319},[1092,10932,6280],{"class":1102},[1092,10934,5395],{"class":1319},[1092,10936,6285],{"class":1315},[1092,10938,1782],{"class":1319},[1092,10940,6290],{"class":1315},[1092,10942,1782],{"class":1319},[1092,10944,1993],{"class":1315},[1092,10946,5404],{"class":1319},[1092,10948,1454],{"class":1315},[1092,10950,10951],{"class":1094,"line":1420},[1092,10952,1384],{"emptyLinePlaceholder":21},[1092,10954,10955,10957,10959,10961,10963,10965,10967],{"class":1094,"line":1425},[1092,10956,6307],{"class":1305},[1092,10958,1925],{"class":1315},[1092,10960,3546],{"class":1319},[1092,10962,6314],{"class":1315},[1092,10964,1782],{"class":1319},[1092,10966,6319],{"class":1315},[1092,10968,1320],{"class":1319},[1092,10970,10971,10973,10975,10977,10979,10981,10983,10985,10987,10989,10991,10993,10995,10997,10999,11001,11003,11005,11007],{"class":1094,"line":1448},[1092,10972,6326],{"class":1305},[1092,10974,2879],{"class":1115},[1092,10976,1316],{"class":1325},[1092,10978,1839],{"class":1319},[1092,10980,3568],{"class":1325},[1092,10982,1329],{"class":1319},[1092,10984,3574],{"class":3573},[1092,10986,1690],{"class":1319},[1092,10988,3579],{"class":1325},[1092,10990,1329],{"class":1319},[1092,10992,1406],{"class":1319},[1092,10994,3586],{"class":1102},[1092,10996,1344],{"class":1319},[1092,10998,1690],{"class":1319},[1092,11000,6355],{"class":1325},[1092,11002,1329],{"class":1319},[1092,11004,4179],{"class":4178},[1092,11006,1706],{"class":1319},[1092,11008,1454],{"class":1325},[1092,11010,11011],{"class":1094,"line":1953},[1092,11012,5411],{"class":1319},[1092,11014,11015],{"class":1094,"line":1980},[1092,11016,1384],{"emptyLinePlaceholder":21},[1092,11018,11019,11021,11023,11025,11027,11029,11031],{"class":1094,"line":2026},[1092,11020,3041],{"class":1562},[1092,11022,5146],{"class":1315},[1092,11024,1566],{"class":1319},[1092,11026,5151],{"class":1115},[1092,11028,1316],{"class":1315},[1092,11030,5156],{"class":1319},[1092,11032,1454],{"class":1315},[1092,11034,11035],{"class":1094,"line":2093},[1092,11036,1384],{"emptyLinePlaceholder":21},[1092,11038,11039,11041,11043,11045,11047,11049,11051],{"class":1094,"line":2163},[1092,11040,3041],{"class":1562},[1092,11042,6404],{"class":1315},[1092,11044,1566],{"class":1319},[1092,11046,1876],{"class":1319},[1092,11048,6177],{"class":1115},[1092,11050,1316],{"class":1315},[1092,11052,1320],{"class":1319},[1092,11054,11055,11057,11059,11061,11063,11065,11067,11069],{"class":1094,"line":2203},[1092,11056,1772],{"class":1325},[1092,11058,1329],{"class":1319},[1092,11060,6424],{"class":1315},[1092,11062,1782],{"class":1319},[1092,11064,3326],{"class":1315},[1092,11066,1782],{"class":1319},[1092,11068,1993],{"class":1315},[1092,11070,1347],{"class":1319},[1092,11072,11073,11075,11077,11079,11081,11083,11085,11087],{"class":1094,"line":2254},[1092,11074,1932],{"class":1325},[1092,11076,1329],{"class":1319},[1092,11078,6424],{"class":1315},[1092,11080,1782],{"class":1319},[1092,11082,3326],{"class":1315},[1092,11084,1782],{"class":1319},[1092,11086,1971],{"class":1315},[1092,11088,1347],{"class":1319},[1092,11090,11091,11093,11095,11097,11099,11101],{"class":1094,"line":2267},[1092,11092,6459],{"class":1325},[1092,11094,1329],{"class":1319},[1092,11096,1876],{"class":1319},[1092,11098,6147],{"class":1115},[1092,11100,1316],{"class":1315},[1092,11102,1320],{"class":1319},[1092,11104,11105,11107,11109,11111,11113,11115,11117,11119,11121,11123,11125,11127],{"class":1094,"line":2297},[1092,11106,6475],{"class":1325},[1092,11108,1329],{"class":1319},[1092,11110,3680],{"class":1319},[1092,11112,6280],{"class":1102},[1092,11114,5395],{"class":1319},[1092,11116,6314],{"class":1315},[1092,11118,1782],{"class":1319},[1092,11120,3326],{"class":1315},[1092,11122,1782],{"class":1319},[1092,11124,1993],{"class":1315},[1092,11126,5404],{"class":1319},[1092,11128,1347],{"class":1319},[1092,11130,11131,11133,11135],{"class":1094,"line":2303},[1092,11132,5293],{"class":1325},[1092,11134,1329],{"class":1319},[1092,11136,1395],{"class":1319},[1092,11138,11140,11142,11144,11146,11148,11150],{"class":11139,"line":2308},[1094,1544],[1092,11141,3663],{"class":1325},[1092,11143,1329],{"class":1319},[1092,11145,3267],{"class":1315},[1092,11147,1782],{"class":1319},[1092,11149,10638],{"class":1315},[1092,11151,11152],{"class":2670},"\u002F\u002F Pass the selected model\n",[1092,11154,11156],{"class":11155,"line":2340},[1094,1544],[1092,11157,4561],{"class":1319},[1092,11159,11161,11163,11165],{"class":11160,"line":2356},[1094,1544],[1092,11162,2393],{"class":1319},[1092,11164,1856],{"class":1315},[1092,11166,1347],{"class":1319},[1092,11168,11169,11171,11173,11175,11177],{"class":1094,"line":2374},[1092,11170,6511],{"class":1325},[1092,11172,1316],{"class":1319},[1092,11174,6516],{"class":1916},[1092,11176,1856],{"class":1319},[1092,11178,1395],{"class":1319},[1092,11180,11181,11183,11185,11187,11189,11191,11193,11195,11197,11199,11201],{"class":1094,"line":2390},[1092,11182,6532],{"class":1305},[1092,11184,1925],{"class":1325},[1092,11186,6516],{"class":1315},[1092,11188,1782],{"class":1319},[1092,11190,6541],{"class":1315},[1092,11192,3353],{"class":1319},[1092,11194,1406],{"class":1319},[1092,11196,4326],{"class":1102},[1092,11198,1344],{"class":1319},[1092,11200,3551],{"class":1325},[1092,11202,1320],{"class":1319},[1092,11204,11205,11207,11209,11211,11213,11215],{"class":1094,"line":2398},[1092,11206,6559],{"class":1115},[1092,11208,1316],{"class":1325},[1092,11210,1344],{"class":1319},[1092,11212,1761],{"class":1102},[1092,11214,1344],{"class":1319},[1092,11216,1454],{"class":1325},[1092,11218,11219],{"class":1094,"line":3378},[1092,11220,4561],{"class":1319},[1092,11222,11223],{"class":1094,"line":3395},[1092,11224,1417],{"class":1319},[1092,11226,11227,11229,11231,11233,11235],{"class":1094,"line":3427},[1092,11228,6585],{"class":1325},[1092,11230,1316],{"class":1319},[1092,11232,6590],{"class":1916},[1092,11234,1856],{"class":1319},[1092,11236,1395],{"class":1319},[1092,11238,11239,11241,11243,11245,11247],{"class":1094,"line":3440},[1092,11240,6600],{"class":1315},[1092,11242,1782],{"class":1319},[1092,11244,6605],{"class":1115},[1092,11246,1316],{"class":1325},[1092,11248,1320],{"class":1319},[1092,11250,11251,11253,11255,11257,11259,11261],{"class":1094,"line":3445},[1092,11252,6615],{"class":1325},[1092,11254,1329],{"class":1319},[1092,11256,1406],{"class":1319},[1092,11258,497],{"class":1102},[1092,11260,1344],{"class":1319},[1092,11262,1347],{"class":1319},[1092,11264,11265,11267,11269,11271,11273,11275],{"class":1094,"line":3451},[1092,11266,6631],{"class":1325},[1092,11268,1329],{"class":1319},[1092,11270,6636],{"class":1315},[1092,11272,1782],{"class":1319},[1092,11274,4478],{"class":1315},[1092,11276,1347],{"class":1319},[1092,11278,11279,11281,11283,11285,11287],{"class":1094,"line":3482},[1092,11280,6648],{"class":1325},[1092,11282,1329],{"class":1319},[1092,11284,1406],{"class":1319},[1092,11286,6590],{"class":1102},[1092,11288,1370],{"class":1319},[1092,11290,11291,11293],{"class":1094,"line":3526},[1092,11292,3381],{"class":1319},[1092,11294,1454],{"class":1325},[1092,11296,11297],{"class":1094,"line":3533},[1092,11298,3598],{"class":1319},[1092,11300,11301,11303],{"class":1094,"line":3538},[1092,11302,1451],{"class":1319},[1092,11304,1454],{"class":1315},[1092,11306,11307],{"class":1094,"line":3556},[1092,11308,1384],{"emptyLinePlaceholder":21},[1092,11310,11311,11313,11315,11317,11319,11321,11323,11325],{"class":1094,"line":3595},[1092,11312,6684],{"class":1562},[1092,11314,6687],{"class":1115},[1092,11316,1316],{"class":1319},[1092,11318,6692],{"class":1916},[1092,11320,1329],{"class":1319},[1092,11322,6697],{"class":1098},[1092,11324,1856],{"class":1319},[1092,11326,1395],{"class":1319},[1092,11328,11329,11331,11333,11335],{"class":1094,"line":3601},[1092,11330,6706],{"class":1315},[1092,11332,1782],{"class":1319},[1092,11334,6711],{"class":1115},[1092,11336,2648],{"class":1325},[1092,11338,11339,11341,11343,11345,11347,11349,11351,11353,11355],{"class":1094,"line":3606},[1092,11340,3541],{"class":1305},[1092,11342,1925],{"class":1325},[1092,11344,5205],{"class":1315},[1092,11346,1782],{"class":1319},[1092,11348,3326],{"class":1315},[1092,11350,1782],{"class":1319},[1092,11352,5214],{"class":1115},[1092,11354,5217],{"class":1325},[1092,11356,1320],{"class":1319},[1092,11358,11359,11361,11363,11365,11367,11369,11371,11373,11375,11377,11379,11381],{"class":1094,"line":3612},[1092,11360,6738],{"class":1315},[1092,11362,1782],{"class":1319},[1092,11364,6743],{"class":1115},[1092,11366,1316],{"class":1325},[1092,11368,1839],{"class":1319},[1092,11370,1693],{"class":1325},[1092,11372,1329],{"class":1319},[1092,11374,5349],{"class":1315},[1092,11376,1782],{"class":1319},[1092,11378,3326],{"class":1315},[1092,11380,1706],{"class":1319},[1092,11382,1454],{"class":1325},[1092,11384,11385,11387,11389,11391,11393],{"class":1094,"line":3632},[1092,11386,6766],{"class":1315},[1092,11388,1782],{"class":1319},[1092,11390,3326],{"class":1315},[1092,11392,2602],{"class":1319},[1092,11394,6775],{"class":1319},[1092,11396,11397],{"class":1094,"line":3660},[1092,11398,3598],{"class":1319},[1092,11400,11401],{"class":1094,"line":3672},[1092,11402,5411],{"class":1319},[1092,11404,11405],{"class":1094,"line":3691},[1092,11406,1384],{"emptyLinePlaceholder":21},[1092,11408,11409,11411,11413,11415,11417],{"class":1094,"line":3719},[1092,11410,6797],{"class":1115},[1092,11412,1316],{"class":1315},[1092,11414,1779],{"class":1319},[1092,11416,1799],{"class":1562},[1092,11418,1395],{"class":1319},[1092,11420,11421,11423,11425,11427,11429,11431,11433,11435,11437,11439,11441,11443,11445],{"class":1094,"line":3726},[1092,11422,3541],{"class":1305},[1092,11424,1925],{"class":1325},[1092,11426,6314],{"class":1315},[1092,11428,1782],{"class":1319},[1092,11430,3326],{"class":1315},[1092,11432,3852],{"class":1319},[1092,11434,1971],{"class":1315},[1092,11436,1782],{"class":1319},[1092,11438,3831],{"class":1315},[1092,11440,3353],{"class":1319},[1092,11442,3837],{"class":3573},[1092,11444,3551],{"class":1325},[1092,11446,1320],{"class":1319},[1092,11448,11449,11451,11453,11455],{"class":1094,"line":3731},[1092,11450,6738],{"class":1315},[1092,11452,1782],{"class":1319},[1092,11454,6842],{"class":1115},[1092,11456,2648],{"class":1325},[1092,11458,11459],{"class":1094,"line":3797},[1092,11460,3598],{"class":1319},[1092,11462,11463,11465],{"class":1094,"line":3802},[1092,11464,1451],{"class":1319},[1092,11466,1454],{"class":1315},[1092,11468,11469,11471,11473],{"class":1094,"line":3807},[1092,11470,1610],{"class":1319},[1092,11472,5123],{"class":1325},[1092,11474,1540],{"class":1319},[1092,11476,11477],{"class":1094,"line":3813},[1092,11478,1384],{"emptyLinePlaceholder":21},[1092,11480,11481,11483,11485],{"class":1094,"line":3842},[1092,11482,1534],{"class":1319},[1092,11484,1537],{"class":1325},[1092,11486,1540],{"class":1319},[1092,11488,11489,11491,11493,11495,11497,11499,11501,11503],{"class":1094,"line":3883},[1092,11490,1547],{"class":1319},[1092,11492,5438],{"class":1325},[1092,11494,5441],{"class":1562},[1092,11496,1566],{"class":1319},[1092,11498,1493],{"class":1319},[1092,11500,5448],{"class":1102},[1092,11502,1493],{"class":1319},[1092,11504,1540],{"class":1319},[1092,11506,11507,11509,11511,11513,11515],{"class":1094,"line":3912},[1092,11508,1556],{"class":1319},[1092,11510,1537],{"class":1325},[1092,11512,5461],{"class":1319},[1092,11514,8681],{"class":1562},[1092,11516,1540],{"class":1319},[1092,11518,11519,11521,11523],{"class":1094,"line":3924},[1092,11520,1580],{"class":1319},[1092,11522,8691],{"class":1325},[1092,11524,1586],{"class":1319},[1092,11526,11527,11529,11531],{"class":1094,"line":3940},[1092,11528,1591],{"class":1319},[1092,11530,1537],{"class":1325},[1092,11532,1540],{"class":1319},[1092,11534,11535,11537,11539,11541,11543],{"class":1094,"line":3954},[1092,11536,1556],{"class":1319},[1092,11538,1537],{"class":1325},[1092,11540,5461],{"class":1319},[1092,11542,5464],{"class":1562},[1092,11544,1540],{"class":1319},[1092,11546,11547,11549,11551,11553,11555,11557,11559,11561],{"class":1094,"line":3961},[1092,11548,1580],{"class":1319},[1092,11550,5473],{"class":1325},[1092,11552,5476],{"class":1562},[1092,11554,1566],{"class":1319},[1092,11556,1493],{"class":1319},[1092,11558,6919],{"class":1102},[1092,11560,1493],{"class":1319},[1092,11562,1540],{"class":1319},[1092,11564,11565,11567],{"class":1094,"line":3966},[1092,11566,5492],{"class":1319},[1092,11568,6930],{"class":1325},[1092,11570,11571,11573,11575,11577,11579],{"class":1094,"line":3971},[1092,11572,6935],{"class":1562},[1092,11574,1566],{"class":1319},[1092,11576,1493],{"class":1319},[1092,11578,6942],{"class":1102},[1092,11580,5549],{"class":1319},[1092,11582,11583,11585,11587,11589,11591],{"class":1094,"line":3977},[1092,11584,5555],{"class":1562},[1092,11586,1566],{"class":1319},[1092,11588,1493],{"class":1319},[1092,11590,6955],{"class":1102},[1092,11592,5549],{"class":1319},[1092,11594,11595],{"class":1094,"line":3994},[1092,11596,6962],{"class":1562},[1092,11598,11599,11601,11603,11605,11607],{"class":1094,"line":4016},[1092,11600,6967],{"class":1562},[1092,11602,1566],{"class":1319},[1092,11604,1493],{"class":1319},[1092,11606,6974],{"class":1102},[1092,11608,5549],{"class":1319},[1092,11610,11611],{"class":1094,"line":4034},[1092,11612,5615],{"class":1319},[1092,11614,11615,11617,11619,11621,11623,11625,11627,11629,11631,11633,11635],{"class":1094,"line":4042},[1092,11616,5621],{"class":1319},[1092,11618,1537],{"class":1325},[1092,11620,5461],{"class":1319},[1092,11622,371],{"class":1562},[1092,11624,1566],{"class":1319},[1092,11626,1493],{"class":1319},[1092,11628,1839],{"class":1319},[1092,11630,6999],{"class":1315},[1092,11632,1451],{"class":1319},[1092,11634,1493],{"class":1319},[1092,11636,1540],{"class":1319},[1092,11638,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,11697,11699,11701],{"class":1094,"line":4059},[1092,11640,7010],{"class":1319},[1092,11642,1537],{"class":1325},[1092,11644,7015],{"class":1305},[1092,11646,1566],{"class":1319},[1092,11648,1493],{"class":1319},[1092,11650,7022],{"class":1315},[1092,11652,1690],{"class":1319},[1092,11654,7027],{"class":1315},[1092,11656,7030],{"class":1319},[1092,11658,2597],{"class":1315},[1092,11660,1782],{"class":1319},[1092,11662,2177],{"class":1315},[1092,11664,1493],{"class":1319},[1092,11666,7041],{"class":1319},[1092,11668,7044],{"class":1562},[1092,11670,1566],{"class":1319},[1092,11672,7049],{"class":1319},[1092,11674,4478],{"class":1315},[1092,11676,1782],{"class":1319},[1092,11678,1993],{"class":1315},[1092,11680,1451],{"class":1319},[1092,11682,7060],{"class":1102},[1092,11684,5395],{"class":1319},[1092,11686,7065],{"class":1315},[1092,11688,1782],{"class":1319},[1092,11690,6541],{"class":1315},[1092,11692,1451],{"class":1319},[1092,11694,7060],{"class":1102},[1092,11696,5395],{"class":1319},[1092,11698,7078],{"class":1315},[1092,11700,7081],{"class":1319},[1092,11702,1540],{"class":1319},[1092,11704,11705,11707],{"class":1094,"line":4080},[1092,11706,7088],{"class":1319},[1092,11708,7091],{"class":1325},[1092,11710,11711,11713,11715,11717,11719],{"class":1094,"line":4090},[1092,11712,7096],{"class":1562},[1092,11714,1566],{"class":1319},[1092,11716,1493],{"class":1319},[1092,11718,7103],{"class":1102},[1092,11720,5549],{"class":1319},[1092,11722,11723,11725,11727,11729,11731],{"class":1094,"line":4100},[1092,11724,7110],{"class":1562},[1092,11726,1566],{"class":1319},[1092,11728,1493],{"class":1319},[1092,11730,7117],{"class":1102},[1092,11732,5549],{"class":1319},[1092,11734,11735,11737,11739,11741,11743],{"class":1094,"line":4110},[1092,11736,7124],{"class":1562},[1092,11738,1566],{"class":1319},[1092,11740,1493],{"class":1319},[1092,11742,7131],{"class":1102},[1092,11744,5549],{"class":1319},[1092,11746,11747],{"class":1094,"line":4127},[1092,11748,7138],{"class":1319},[1092,11750,11751,11753],{"class":1094,"line":4138},[1092,11752,7143],{"class":1319},[1092,11754,7146],{"class":1325},[1092,11756,11757,11759,11761,11763,11765],{"class":1094,"line":4144},[1092,11758,7151],{"class":1562},[1092,11760,1566],{"class":1319},[1092,11762,1493],{"class":1319},[1092,11764,7117],{"class":1102},[1092,11766,5549],{"class":1319},[1092,11768,11769,11771,11773,11775,11777],{"class":1094,"line":4150},[1092,11770,7164],{"class":1562},[1092,11772,1566],{"class":1319},[1092,11774,1493],{"class":1319},[1092,11776,7131],{"class":1102},[1092,11778,5549],{"class":1319},[1092,11780,11781],{"class":1094,"line":4160},[1092,11782,7177],{"class":1319},[1092,11784,11785,11787,11789],{"class":1094,"line":4170},[1092,11786,7182],{"class":1319},[1092,11788,7185],{"class":1325},[1092,11790,1540],{"class":1319},[1092,11792,11793],{"class":1094,"line":4184},[1092,11794,1384],{"emptyLinePlaceholder":21},[1092,11796,11797,11799,11801,11803,11805,11807,11809,11811,11813],{"class":1094,"line":4199},[1092,11798,7088],{"class":1319},[1092,11800,1537],{"class":1325},[1092,11802,7200],{"class":1305},[1092,11804,1566],{"class":1319},[1092,11806,1493],{"class":1319},[1092,11808,7207],{"class":1115},[1092,11810,7210],{"class":1315},[1092,11812,1493],{"class":1319},[1092,11814,1540],{"class":1319},[1092,11816,11817,11819],{"class":1094,"line":4204},[1092,11818,7143],{"class":1319},[1092,11820,7146],{"class":1325},[1092,11822,11823,11825,11827,11829,11831],{"class":1094,"line":4209},[1092,11824,7225],{"class":1562},[1092,11826,1566],{"class":1319},[1092,11828,1493],{"class":1319},[1092,11830,7232],{"class":1102},[1092,11832,5549],{"class":1319},[1092,11834,11835,11837,11839,11841,11843],{"class":1094,"line":4219},[1092,11836,7151],{"class":1562},[1092,11838,1566],{"class":1319},[1092,11840,1493],{"class":1319},[1092,11842,7117],{"class":1102},[1092,11844,5549],{"class":1319},[1092,11846,11847,11849,11851,11853,11855],{"class":1094,"line":4235},[1092,11848,7164],{"class":1562},[1092,11850,1566],{"class":1319},[1092,11852,1493],{"class":1319},[1092,11854,7131],{"class":1102},[1092,11856,5549],{"class":1319},[1092,11858,11859],{"class":1094,"line":4250},[1092,11860,7177],{"class":1319},[1092,11862,11863,11865,11867,11869,11871,11873,11875,11877,11879,11881,11883,11885,11887],{"class":1094,"line":4256},[1092,11864,7143],{"class":1319},[1092,11866,982],{"class":1325},[1092,11868,7200],{"class":1562},[1092,11870,1566],{"class":1319},[1092,11872,1493],{"class":1319},[1092,11874,7277],{"class":1102},[1092,11876,1493],{"class":1319},[1092,11878,5476],{"class":1562},[1092,11880,1566],{"class":1319},[1092,11882,1493],{"class":1319},[1092,11884,7288],{"class":1102},[1092,11886,1493],{"class":1319},[1092,11888,1540],{"class":1319},[1092,11890,11891],{"class":1094,"line":4262},[1092,11892,7297],{"class":1315},[1092,11894,11895,11897,11899],{"class":1094,"line":4270},[1092,11896,7302],{"class":1319},[1092,11898,982],{"class":1325},[1092,11900,1540],{"class":1319},[1092,11902,11903,11905,11907],{"class":1094,"line":4275},[1092,11904,7182],{"class":1319},[1092,11906,1537],{"class":1325},[1092,11908,1540],{"class":1319},[1092,11910,11911,11913,11915],{"class":1094,"line":4281},[1092,11912,7319],{"class":1319},[1092,11914,1537],{"class":1325},[1092,11916,1540],{"class":1319},[1092,11918,11919,11921,11923],{"class":1094,"line":4301},[1092,11920,7328],{"class":1319},[1092,11922,1537],{"class":1325},[1092,11924,1540],{"class":1319},[1092,11926,11928,11930,11932],{"class":11927,"line":4316},[1094,1544],[1092,11929,5518],{"class":1319},[1092,11931,5094],{"class":1325},[1092,11933,1540],{"class":1319},[1092,11935,11937],{"class":11936,"line":4333},[1094,1544],[1092,11938,1384],{"emptyLinePlaceholder":21},[1092,11940,11942,11944],{"class":11941,"line":4356},[1094,1544],[1092,11943,5492],{"class":1319},[1092,11945,5534],{"class":1325},[1092,11947,11948,11950,11952,11954,11956],{"class":1094,"line":4367},[1092,11949,5540],{"class":1562},[1092,11951,1566],{"class":1319},[1092,11953,1493],{"class":1319},[1092,11955,5205],{"class":1102},[1092,11957,5549],{"class":1319},[1092,11959,11960,11962,11964,11966,11968],{"class":1094,"line":4375},[1092,11961,7367],{"class":1562},[1092,11963,1566],{"class":1319},[1092,11965,1493],{"class":1319},[1092,11967,7374],{"class":1102},[1092,11969,5549],{"class":1319},[1092,11971,11972,11974,11976,11978,11980],{"class":1094,"line":4381},[1092,11973,5570],{"class":1562},[1092,11975,1566],{"class":1319},[1092,11977,1493],{"class":1319},[1092,11979,5577],{"class":1102},[1092,11981,5549],{"class":1319},[1092,11983,11984,11986,11988,11990,11992],{"class":1094,"line":4386},[1092,11985,6967],{"class":1562},[1092,11987,1566],{"class":1319},[1092,11989,1493],{"class":1319},[1092,11991,7399],{"class":1102},[1092,11993,5549],{"class":1319},[1092,11995,11996,11998,12000,12002,12004],{"class":1094,"line":4409},[1092,11997,5600],{"class":1562},[1092,11999,1566],{"class":1319},[1092,12001,1493],{"class":1319},[1092,12003,7412],{"class":1102},[1092,12005,5549],{"class":1319},[1092,12007,12008],{"class":1094,"line":4415},[1092,12009,5615],{"class":1319},[1092,12011,12012,12014,12016,12018,12021],{"class":1094,"line":4435},[1092,12013,5621],{"class":1319},[1092,12015,1537],{"class":1325},[1092,12017,5461],{"class":1319},[1092,12019,12020],{"class":1562},"footer",[1092,12022,1540],{"class":1319},[1092,12024,12025,12027,12030,12033,12035,12037,12039,12041],{"class":1094,"line":4441},[1092,12026,7010],{"class":1319},[1092,12028,12029],{"class":1325},"ModelSelect",[1092,12031,12032],{"class":1562}," v-model",[1092,12034,1566],{"class":1319},[1092,12036,1493],{"class":1319},[1092,12038,4650],{"class":1102},[1092,12040,1493],{"class":1319},[1092,12042,1586],{"class":1319},[1092,12044,12045,12047,12049],{"class":1094,"line":4487},[1092,12046,7328],{"class":1319},[1092,12048,1537],{"class":1325},[1092,12050,1540],{"class":1319},[1092,12052,12053],{"class":1094,"line":4503},[1092,12054,1384],{"emptyLinePlaceholder":21},[1092,12056,12057,12059],{"class":1094,"line":4536},[1092,12058,5621],{"class":1319},[1092,12060,7425],{"class":1325},[1092,12062,12063,12065,12067,12069,12071],{"class":1094,"line":4550},[1092,12064,7430],{"class":1562},[1092,12066,1566],{"class":1319},[1092,12068,1493],{"class":1319},[1092,12070,6955],{"class":1102},[1092,12072,5549],{"class":1319},[1092,12074,12075,12077,12079,12081,12083],{"class":1094,"line":4558},[1092,12076,7443],{"class":1562},[1092,12078,1566],{"class":1319},[1092,12080,1493],{"class":1319},[1092,12082,5634],{"class":1102},[1092,12084,5549],{"class":1319},[1092,12086,12087,12089,12091,12093,12095],{"class":1094,"line":4564},[1092,12088,7456],{"class":1562},[1092,12090,1566],{"class":1319},[1092,12092,1493],{"class":1319},[1092,12094,7463],{"class":1102},[1092,12096,5549],{"class":1319},[1092,12098,12099,12101,12103,12105,12107],{"class":1094,"line":4571},[1092,12100,7470],{"class":1562},[1092,12102,1566],{"class":1319},[1092,12104,1493],{"class":1319},[1092,12106,7477],{"class":1102},[1092,12108,5549],{"class":1319},[1092,12110,12111],{"class":1094,"line":4576},[1092,12112,7484],{"class":1319},[1092,12114,12115,12117,12119],{"class":1094,"line":4594},[1092,12116,5518],{"class":1319},[1092,12118,5088],{"class":1325},[1092,12120,1540],{"class":1319},[1092,12122,12124,12126,12128],{"class":1094,"line":12123},114,[1092,12125,5652],{"class":1319},[1092,12127,5473],{"class":1325},[1092,12129,1540],{"class":1319},[1092,12131,12133,12135,12137],{"class":1094,"line":12132},115,[1092,12134,1591],{"class":1319},[1092,12136,1537],{"class":1325},[1092,12138,1540],{"class":1319},[1092,12140,12142,12144,12146],{"class":1094,"line":12141},116,[1092,12143,1601],{"class":1319},[1092,12145,5438],{"class":1325},[1092,12147,1540],{"class":1319},[1092,12149,12151,12153,12155],{"class":1094,"line":12150},117,[1092,12152,1610],{"class":1319},[1092,12154,1537],{"class":1325},[1092,12156,1540],{"class":1319},[986,12158,12160],{"id":12159},"going-further","Going further",[982,12162,12163],{},"You now have a working AI chatbot with database persistence! To take it further, consider adding:",[982,12165,12166],{},[1000,12167,12168],{},"User Authentication",[982,12170,12171,12172,12177],{},"Add authentication with ",[1036,12173,12176],{"href":12174,"rel":12175},"https:\u002F\u002Fgithub.com\u002Fatinux\u002Fnuxt-auth-utils",[1040],"nuxt-auth-utils"," to let users access their chat history across devices and keep conversations private.",[982,12179,12180],{},[1000,12181,12182],{},"AI Tools",[982,12184,12185,12186,12191],{},"Extend your chatbot with ",[1036,12187,12190],{"href":12188,"rel":12189},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-core\u002Ftools-and-tool-calling",[1040],"AI SDK tools"," that can fetch real-time data, generate charts, or interact with external APIs:",[1083,12193,12195],{"className":1296,"code":12194,"language":1298,"meta":1088,"style":1088},"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",[1042,12196,12197,12216,12234,12238,12253,12269,12286,12317,12325,12345,12350,12385,12389],{"__ignoreMap":1088},[1092,12198,12199,12201,12203,12206,12208,12210,12212,12214],{"class":1094,"line":1095},[1092,12200,1681],{"class":1305},[1092,12202,1684],{"class":1319},[1092,12204,12205],{"class":1315}," tool",[1092,12207,1706],{"class":1319},[1092,12209,1709],{"class":1305},[1092,12211,1406],{"class":1319},[1092,12213,2513],{"class":1102},[1092,12215,1370],{"class":1319},[1092,12217,12218,12220,12222,12224,12226,12228,12230,12232],{"class":1094,"line":1112},[1092,12219,1681],{"class":1305},[1092,12221,1684],{"class":1319},[1092,12223,2548],{"class":1315},[1092,12225,1706],{"class":1319},[1092,12227,1709],{"class":1305},[1092,12229,1406],{"class":1319},[1092,12231,2557],{"class":1102},[1092,12233,1370],{"class":1319},[1092,12235,12236],{"class":1094,"line":1335},[1092,12237,1384],{"emptyLinePlaceholder":21},[1092,12239,12240,12242,12245,12247,12249,12251],{"class":1094,"line":1350},[1092,12241,3041],{"class":1562},[1092,12243,12244],{"class":1315}," weatherTool ",[1092,12246,1566],{"class":1319},[1092,12248,12205],{"class":1115},[1092,12250,1316],{"class":1315},[1092,12252,1320],{"class":1319},[1092,12254,12255,12258,12260,12262,12265,12267],{"class":1094,"line":1362},[1092,12256,12257],{"class":1325},"  description",[1092,12259,1329],{"class":1319},[1092,12261,1406],{"class":1319},[1092,12263,12264],{"class":1102},"Get the current weather for a location",[1092,12266,1344],{"class":1319},[1092,12268,1347],{"class":1319},[1092,12270,12271,12274,12276,12278,12280,12282,12284],{"class":1094,"line":1373},[1092,12272,12273],{"class":1325},"  parameters",[1092,12275,1329],{"class":1319},[1092,12277,2548],{"class":1315},[1092,12279,1782],{"class":1319},[1092,12281,2620],{"class":1115},[1092,12283,1316],{"class":1315},[1092,12285,1320],{"class":1319},[1092,12287,12288,12291,12293,12295,12297,12299,12301,12303,12306,12308,12310,12313,12315],{"class":1094,"line":1381},[1092,12289,12290],{"class":1325},"    location",[1092,12292,1329],{"class":1319},[1092,12294,2548],{"class":1315},[1092,12296,1782],{"class":1319},[1092,12298,3240],{"class":1115},[1092,12300,1779],{"class":1315},[1092,12302,1782],{"class":1319},[1092,12304,12305],{"class":1115},"describe",[1092,12307,1316],{"class":1315},[1092,12309,1344],{"class":1319},[1092,12311,12312],{"class":1102},"The city name",[1092,12314,1344],{"class":1319},[1092,12316,1454],{"class":1315},[1092,12318,12319,12321,12323],{"class":1094,"line":1387},[1092,12320,2393],{"class":1319},[1092,12322,1856],{"class":1315},[1092,12324,1347],{"class":1319},[1092,12326,12327,12330,12332,12334,12336,12339,12341,12343],{"class":1094,"line":1398},[1092,12328,12329],{"class":1115},"  execute",[1092,12331,1329],{"class":1319},[1092,12333,4002],{"class":1562},[1092,12335,1913],{"class":1319},[1092,12337,12338],{"class":1916}," location",[1092,12340,1920],{"class":1319},[1092,12342,1799],{"class":1562},[1092,12344,1395],{"class":1319},[1092,12346,12347],{"class":1094,"line":1414},[1092,12348,12349],{"class":2670},"    \u002F\u002F Fetch weather data from an API\n",[1092,12351,12352,12355,12357,12359,12361,12364,12366,12369,12371,12374,12376,12378,12381,12383],{"class":1094,"line":1420},[1092,12353,12354],{"class":1305},"    return",[1092,12356,1684],{"class":1319},[1092,12358,12338],{"class":1315},[1092,12360,1690],{"class":1319},[1092,12362,12363],{"class":1325}," temperature",[1092,12365,1329],{"class":1319},[1092,12367,12368],{"class":3573}," 22",[1092,12370,1690],{"class":1319},[1092,12372,12373],{"class":1325}," condition",[1092,12375,1329],{"class":1319},[1092,12377,1406],{"class":1319},[1092,12379,12380],{"class":1102},"Sunny",[1092,12382,1344],{"class":1319},[1092,12384,3162],{"class":1319},[1092,12386,12387],{"class":1094,"line":1425},[1092,12388,3598],{"class":1319},[1092,12390,12391,12393],{"class":1094,"line":1448},[1092,12392,1451],{"class":1319},[1092,12394,1454],{"class":1315},[986,12396,12398],{"id":12397},"deploying-to-vercel","Deploying to Vercel",[982,12400,12401],{},"Deploy your chatbot to Vercel with zero configuration:",[1083,12403,12405],{"className":1085,"code":12404,"language":1087,"meta":1088,"style":1088},"npx vercel deploy\n",[1042,12406,12407],{"__ignoreMap":1088},[1092,12408,12409,12411,12414],{"class":1094,"line":1095},[1092,12410,1099],{"class":1098},[1092,12412,12413],{"class":1102}," vercel",[1092,12415,12416],{"class":1102}," deploy\n",[982,12418,12419],{},"Then, in the Vercel dashboard:",[994,12421,12422,12428],{},[997,12423,12424,12425,12427],{},"Enable ",[1000,12426,4606],{}," and add credits so requests can be processed.",[997,12429,12430,12431,12434],{},"Add a ",[1000,12432,12433],{},"Turso"," database from the Vercel Marketplace and connect it to your project (it will provision the database and add the required environment variables automatically).",[12436,12437,12438],"blockquote",{},[982,12439,12440,12441,12446,12447,12449],{},"Note: On Vercel, you ",[1000,12442,12443,12444],{},"don’t need to manually add ",[1042,12445,1633],{}," — Vercel handles the gateway configuration for deployments. Keep using ",[1042,12448,1620],{}," locally for development.",[1456,12451,12453],{"to":1071,"target":12452},"_blank",[982,12454,12455,12456,1782],{},"Learn more about setting up AI Gateway in the ",[1000,12457,12458],{},"Vercel AI Gateway documentation",[986,12460,12462],{"id":12461},"conclusion","Conclusion",[982,12464,12465],{},"You've built a complete AI chatbot with:",[994,12467,12468,12474,12480,12486,12491],{},[997,12469,12470,12473],{},[1000,12471,12472],{},"A complete chat interface"," using Nuxt UI components",[997,12475,12476,12479],{},[1000,12477,12478],{},"Real-time streaming responses"," with the AI SDK",[997,12481,12482,12485],{},[1000,12483,12484],{},"Streaming Markdown rendering"," with Comark for rich content display",[997,12487,12488,12490],{},[1000,12489,1020],{}," via AI Gateway",[997,12492,12493,12496],{},[1000,12494,12495],{},"Database persistence"," with SQLite (local) \u002F Turso (production) and Drizzle ORM",[982,12498,12499],{},"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.",[982,12501,12502],{},[1000,12503,12504],{},"Resources:",[994,12506,12507,12514,12521,12528,12534,12540],{},[997,12508,12509],{},[1036,12510,12513],{"href":12511,"rel":12512},"https:\u002F\u002Fui.nuxt.com\u002Fcomponents\u002Fchat",[1040],"Nuxt UI Chat Components",[997,12515,12516],{},[1036,12517,12520],{"href":12518,"rel":12519},"https:\u002F\u002Fhub.nuxt.com\u002Fdocs\u002Ffeatures\u002Fdatabase",[1040],"NuxtHub Database",[997,12522,12523],{},[1036,12524,12527],{"href":12525,"rel":12526},"https:\u002F\u002Fai-sdk.dev",[1040],"AI SDK Documentation",[997,12529,12530],{},[1036,12531,12533],{"href":1071,"rel":12532},[1040],"AI Gateway Documentation",[997,12535,12536],{},[1036,12537,12539],{"href":1038,"rel":12538},[1040],"Nuxt AI Chat Template",[997,12541,12542],{},[1036,12543,12545],{"href":1048,"rel":12544},[1040],"Vue AI Chat Template",[982,12547,12548],{},"We're excited to see what you'll build!",[12550,12551,12552],"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":1088,"searchDepth":1112,"depth":1112,"links":12554},[12555,12556,12557,12563,12568,12572,12573,12577,12578,12579,12584,12585,12586],{"id":988,"depth":1112,"text":989},{"id":1056,"depth":1112,"text":1057},{"id":1077,"depth":1112,"text":1078,"children":12558},[12559,12560,12561,12562],{"id":1122,"depth":1335,"text":1123},{"id":1282,"depth":1335,"text":1283},{"id":1511,"depth":1335,"text":1512},{"id":1650,"depth":1335,"text":1651},{"id":2436,"depth":1112,"text":2437,"children":12564},[12565,12566,12567],{"id":2448,"depth":1335,"text":2449},{"id":2832,"depth":1335,"text":2833},{"id":4697,"depth":1335,"text":4698},{"id":5079,"depth":1112,"text":5080,"children":12569},[12570,12571],{"id":5098,"depth":1335,"text":5099},{"id":5715,"depth":1335,"text":5716},{"id":6087,"depth":1112,"text":6088},{"id":7680,"depth":1112,"text":7681,"children":12574},[12575,12576],{"id":7687,"depth":1335,"text":7688},{"id":7847,"depth":1335,"text":7848},{"id":8354,"depth":1112,"text":8355},{"id":8897,"depth":1112,"text":8898},{"id":10219,"depth":1112,"text":10220,"children":12580},[12581,12582,12583],{"id":10230,"depth":1335,"text":10231},{"id":10502,"depth":1335,"text":10503},{"id":10761,"depth":1335,"text":10762},{"id":12159,"depth":1112,"text":12160},{"id":12397,"depth":1112,"text":12398},{"id":12461,"depth":1112,"text":12462},"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":12592},"Tutorial","\u002Fblog\u002Fhow-to-build-an-ai-chat",{"title":966,"description":12588},"blog\u002Fhow-to-build-an-ai-chat","niwtEdHQJaUBnPqldgEx0ODg9tOUK75ezMtfPw31Y0Q",1776738100576]