[{"data":1,"prerenderedAt":12631},["ShallowReactive",2],{"navigation":3,"blog":958,"blog-posts":970,"blog-hero-title":12604,"blog-hero-description":12623},[4],{"title":5,"path":6,"stem":7,"children":8,"page":36},"Docs","\u002Fdocs","docs",[9,163,816,857],{"title":10,"path":11,"stem":12,"children":13,"framework":16,"category":16,"description":16,"icon":30},"Get Started","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started\u002F1.index",[14,19,37,47,53,76,141],{"title":15,"path":11,"stem":12,"framework":16,"category":16,"description":17,"icon":18},"Introduction",null,"Nuxt UI is a comprehensive Vue UI component library (Nuxt optional), offering 125+ accessible, Tailwind CSS components for building modern web applications.","i-lucide-house",{"title":20,"framework":16,"category":16,"description":16,"shadow":21,"path":22,"stem":23,"children":24,"page":36},"Installation",true,"\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F1.getting-started\u002F2.installation",[25,31],{"title":20,"path":26,"stem":27,"framework":28,"category":16,"description":29,"icon":30},"\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fnuxt","docs\u002F1.getting-started\u002F2.installation\u002F1.nuxt","nuxt","Learn how to install and configure Nuxt UI in your Nuxt application.","i-lucide-square-play",{"title":20,"path":32,"stem":33,"framework":34,"category":16,"description":35,"icon":30},"\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fvue","docs\u002F1.getting-started\u002F2.installation\u002F2.vue","vue","Learn how to install and configure Nuxt UI in your Vue application, compatible with both plain Vite and Inertia.",false,{"title":38,"framework":16,"category":16,"description":16,"icon":39,"shadow":21,"path":40,"stem":41,"children":42,"page":36},"Migration","i-lucide-arrow-right-left","\u002Fdocs\u002Fgetting-started\u002Fmigration","docs\u002F1.getting-started\u002F3.migration",[43],{"title":38,"path":44,"stem":45,"framework":16,"category":16,"description":46,"icon":39},"\u002Fdocs\u002Fgetting-started\u002Fmigration\u002Fv4","docs\u002F1.getting-started\u002F3.migration\u002F1.v4","A comprehensive guide to migrate your application from Nuxt UI v3 to Nuxt UI v4.",{"title":48,"path":49,"stem":50,"framework":16,"category":16,"description":51,"icon":52},"Contribution","\u002Fdocs\u002Fgetting-started\u002Fcontribution","docs\u002F1.getting-started\u002F4.contribution","A comprehensive guide on contributing to Nuxt UI, including project structure, development workflow, and best practices.","i-lucide-handshake",{"title":54,"path":55,"stem":56,"children":57,"page":36},"Theme","\u002Fdocs\u002Fgetting-started\u002Ftheme","docs\u002F1.getting-started\u002F5.theme",[58,64,70],{"title":59,"path":60,"stem":61,"framework":16,"category":16,"description":62,"icon":63},"Design System","\u002Fdocs\u002Fgetting-started\u002Ftheme\u002Fdesign-system","docs\u002F1.getting-started\u002F5.theme\u002F1.design-system","Nuxt UI's design system uses Tailwind CSS for simple theming and easy customization.","i-lucide-palette",{"title":65,"path":66,"stem":67,"framework":16,"category":16,"description":68,"icon":69},"CSS Variables","\u002Fdocs\u002Fgetting-started\u002Ftheme\u002Fcss-variables","docs\u002F1.getting-started\u002F5.theme\u002F2.css-variables","Nuxt UI uses CSS variables as design tokens for flexible, consistent theming with built-in light and dark mode support.","i-lucide-swatch-book",{"title":71,"path":72,"stem":73,"framework":16,"category":16,"description":74,"icon":75},"Components","\u002Fdocs\u002Fgetting-started\u002Ftheme\u002Fcomponents","docs\u002F1.getting-started\u002F5.theme\u002F3.components","Learn how to customize Nuxt UI components with the Tailwind Variants API for advanced, flexible, and maintainable styling.","i-lucide-layout-grid",{"title":77,"framework":16,"category":16,"description":16,"path":78,"stem":79,"children":80,"page":36},"Integrations","\u002Fdocs\u002Fgetting-started\u002Fintegrations","docs\u002F1.getting-started\u002F6.integrations",[81,95,101,115,129,135],{"title":82,"framework":16,"category":16,"description":16,"shadow":21,"path":83,"stem":84,"children":85,"page":36},"Icons","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ficons","docs\u002F1.getting-started\u002F6.integrations\u002F1.icons",[86,91],{"title":82,"path":87,"stem":88,"framework":28,"category":16,"description":89,"icon":90},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ficons\u002Fnuxt","docs\u002F1.getting-started\u002F6.integrations\u002F1.icons\u002F1.nuxt","Nuxt UI integrates with Nuxt Icon to access over 200,000+ icons from Iconify.","i-lucide-smile",{"title":82,"path":92,"stem":93,"framework":34,"category":16,"description":94,"icon":90},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ficons\u002Fvue","docs\u002F1.getting-started\u002F6.integrations\u002F1.icons\u002F2.vue","Nuxt UI integrates with Iconify to access over 200,000+ icons.",{"title":96,"path":97,"stem":98,"framework":28,"category":16,"description":99,"icon":100},"Fonts","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ffonts","docs\u002F1.getting-started\u002F6.integrations\u002F2.fonts","Nuxt UI integrates with Nuxt Fonts to provide plug-and-play font optimization.","i-lucide-a-large-small",{"title":102,"framework":16,"category":16,"description":16,"shadow":21,"path":103,"stem":104,"children":105,"page":36},"Color Mode","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcolor-mode","docs\u002F1.getting-started\u002F6.integrations\u002F3.color-mode",[106,111],{"title":102,"path":107,"stem":108,"framework":28,"category":16,"description":109,"icon":110},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcolor-mode\u002Fnuxt","docs\u002F1.getting-started\u002F6.integrations\u002F3.color-mode\u002F1.nuxt","Nuxt UI integrates with Nuxt Color Mode to allow for easy switching between light and dark themes.","i-lucide-sun-moon",{"title":102,"path":112,"stem":113,"framework":34,"category":16,"description":114,"icon":110},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcolor-mode\u002Fvue","docs\u002F1.getting-started\u002F6.integrations\u002F3.color-mode\u002F2.vue","Nuxt UI integrates with VueUse to allow for easy switching between light and dark themes.",{"title":116,"framework":16,"category":16,"description":16,"shadow":21,"path":117,"stem":118,"children":119,"page":36},"I18n","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fi18n","docs\u002F1.getting-started\u002F6.integrations\u002F4.i18n",[120,126],{"title":121,"path":122,"stem":123,"framework":28,"category":16,"description":124,"icon":125},"Internationalization (i18n)","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fi18n\u002Fnuxt","docs\u002F1.getting-started\u002F6.integrations\u002F4.i18n\u002F1.nuxt","Nuxt UI supports 50+ locales and multi-directional (LTR\u002FRTL) internationalization.","i-lucide-languages",{"title":121,"path":127,"stem":128,"framework":34,"category":16,"description":124,"icon":125},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fi18n\u002Fvue","docs\u002F1.getting-started\u002F6.integrations\u002F4.i18n\u002F2.vue",{"title":130,"path":131,"stem":132,"framework":28,"category":16,"description":133,"icon":134},"Content","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcontent","docs\u002F1.getting-started\u002F6.integrations\u002F5.content","Nuxt UI integrates with Nuxt Content to deliver beautiful typography and consistent component styling.","i-simple-icons-markdown",{"title":136,"path":137,"stem":138,"framework":34,"category":16,"description":139,"icon":140},"SSR","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fssr","docs\u002F1.getting-started\u002F6.integrations\u002F6.ssr","Nuxt UI has first-party support for Vue SSR. This guide will help you have it fully enabled.","i-lucide-server",{"title":142,"framework":16,"category":16,"description":16,"path":143,"stem":144,"children":145,"page":36},"Agents","\u002Fdocs\u002Fgetting-started\u002Fai","docs\u002F1.getting-started\u002F7.ai",[146,151,157],{"title":147,"path":148,"stem":149,"framework":16,"category":16,"description":150,"icon":140},"MCP Server","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fmcp","docs\u002F1.getting-started\u002F7.ai\u002F1.mcp","Use Nuxt UI components in your AI assistants with Model Context Protocol support.",{"title":152,"path":153,"stem":154,"framework":16,"category":16,"description":155,"icon":156},"LLMs.txt","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fllms-txt","docs\u002F1.getting-started\u002F7.ai\u002F2.llms-txt","How to get AI tools like Cursor, Windsurf, GitHub Copilot, ChatGPT, and Claude to understand Nuxt UI components, theming, and best practices.","i-lucide-bot",{"title":158,"path":159,"stem":160,"framework":16,"category":16,"description":161,"icon":162},"Skills","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fskills","docs\u002F1.getting-started\u002F7.ai\u002F3.skills","Install Nuxt UI skills to give AI coding agents deep knowledge of components, theming, and best practices.","i-lucide-sparkles",{"title":71,"framework":16,"category":16,"description":16,"icon":164,"path":165,"stem":166,"children":167,"page":36},"i-lucide-square-code","\u002Fdocs\u002Fcomponents","docs\u002F2.components",[168,174,180,186,192,197,202,207,212,217,222,228,233,238,243,248,253,258,264,269,274,279,284,289,295,300,305,311,316,321,326,332,337,342,347,352,357,362,367,373,378,383,388,393,399,405,410,415,420,425,430,435,440,445,450,455,460,466,471,476,481,486,491,496,501,506,511,516,521,526,531,536,541,546,551,556,561,566,571,576,581,587,592,597,602,607,612,617,622,627,632,637,642,647,652,657,662,667,672,677,682,687,692,697,702,707,712,717,722,727,732,737,742,747,752,757,762,767,772,777,782,787,791,796,801,806,811],{"title":169,"path":170,"stem":171,"framework":16,"category":172,"description":173},"Accordion","\u002Fdocs\u002Fcomponents\u002Faccordion","docs\u002F2.components\u002Faccordion","data","A stacked set of collapsible panels.",{"title":175,"path":176,"stem":177,"framework":16,"category":178,"description":179},"Alert","\u002Fdocs\u002Fcomponents\u002Falert","docs\u002F2.components\u002Falert","element","A callout to draw user's attention.",{"title":181,"path":182,"stem":183,"framework":16,"category":184,"description":185},"App","\u002Fdocs\u002Fcomponents\u002Fapp","docs\u002F2.components\u002Fapp","layout","Wraps your app to provide global configurations and more.",{"title":187,"path":188,"stem":189,"framework":16,"category":190,"description":191},"AuthForm","\u002Fdocs\u002Fcomponents\u002Fauth-form","docs\u002F2.components\u002Fauth-form","page","A customizable Form to create login, register or password reset forms.",{"title":193,"path":194,"stem":195,"framework":16,"category":178,"description":196},"Avatar","\u002Fdocs\u002Fcomponents\u002Favatar","docs\u002F2.components\u002Favatar","An img element with fallback and Nuxt Image support.",{"title":198,"path":199,"stem":200,"framework":16,"category":178,"description":201},"AvatarGroup","\u002Fdocs\u002Fcomponents\u002Favatar-group","docs\u002F2.components\u002Favatar-group","Stack multiple avatars in a group.",{"title":203,"path":204,"stem":205,"framework":16,"category":178,"description":206},"Badge","\u002Fdocs\u002Fcomponents\u002Fbadge","docs\u002F2.components\u002Fbadge","A short text to represent a status or a category.",{"title":208,"path":209,"stem":210,"framework":16,"category":178,"description":211},"Banner","\u002Fdocs\u002Fcomponents\u002Fbanner","docs\u002F2.components\u002Fbanner","Display a banner at the top of your website to inform users about important information.",{"title":213,"path":214,"stem":215,"framework":16,"category":190,"description":216},"BlogPost","\u002Fdocs\u002Fcomponents\u002Fblog-post","docs\u002F2.components\u002Fblog-post","A customizable article to display in a blog page.",{"title":218,"path":219,"stem":220,"framework":16,"category":190,"description":221},"BlogPosts","\u002Fdocs\u002Fcomponents\u002Fblog-posts","docs\u002F2.components\u002Fblog-posts","Display a list of blog posts in a responsive grid layout.",{"title":223,"path":224,"stem":225,"framework":16,"category":226,"description":227},"Breadcrumb","\u002Fdocs\u002Fcomponents\u002Fbreadcrumb","docs\u002F2.components\u002Fbreadcrumb","navigation","A hierarchy of links to navigate through a website.",{"title":229,"path":230,"stem":231,"framework":16,"category":178,"description":232},"Button","\u002Fdocs\u002Fcomponents\u002Fbutton","docs\u002F2.components\u002Fbutton","A button element that can act as a link or trigger an action.",{"title":234,"path":235,"stem":236,"framework":16,"category":178,"description":237},"Calendar","\u002Fdocs\u002Fcomponents\u002Fcalendar","docs\u002F2.components\u002Fcalendar","A calendar component for selecting single dates, multiple dates or date ranges.",{"title":239,"path":240,"stem":241,"framework":16,"category":178,"description":242},"Card","\u002Fdocs\u002Fcomponents\u002Fcard","docs\u002F2.components\u002Fcard","Display content in a card with a header, body and footer.",{"title":244,"path":245,"stem":246,"framework":16,"category":172,"description":247},"Carousel","\u002Fdocs\u002Fcomponents\u002Fcarousel","docs\u002F2.components\u002Fcarousel","A carousel with motion and swipe built using Embla.",{"title":249,"path":250,"stem":251,"framework":16,"category":190,"description":252},"ChangelogVersion","\u002Fdocs\u002Fcomponents\u002Fchangelog-version","docs\u002F2.components\u002Fchangelog-version","A customizable article to display in a changelog.",{"title":254,"path":255,"stem":256,"framework":16,"category":190,"description":257},"ChangelogVersions","\u002Fdocs\u002Fcomponents\u002Fchangelog-versions","docs\u002F2.components\u002Fchangelog-versions","Display a list of changelog versions in a timeline.",{"title":259,"path":260,"stem":261,"framework":16,"category":262,"description":263},"Chat","\u002Fdocs\u002Fcomponents\u002Fchat","docs\u002F2.components\u002Fchat","chat","Build AI chat interfaces with streaming, reasoning, and tool calling.",{"title":265,"path":266,"stem":267,"framework":16,"category":262,"description":268},"ChatMessage","\u002Fdocs\u002Fcomponents\u002Fchat-message","docs\u002F2.components\u002Fchat-message","Display a chat message with icon, avatar, and actions.",{"title":270,"path":271,"stem":272,"framework":16,"category":262,"description":273},"ChatMessages","\u002Fdocs\u002Fcomponents\u002Fchat-messages","docs\u002F2.components\u002Fchat-messages","Display a list of chat messages, designed to work seamlessly with Vercel AI SDK.",{"title":275,"path":276,"stem":277,"framework":16,"category":262,"description":278},"ChatPalette","\u002Fdocs\u002Fcomponents\u002Fchat-palette","docs\u002F2.components\u002Fchat-palette","A chat palette to create a chatbot interface inside an overlay.",{"title":280,"path":281,"stem":282,"framework":16,"category":262,"description":283},"ChatPrompt","\u002Fdocs\u002Fcomponents\u002Fchat-prompt","docs\u002F2.components\u002Fchat-prompt","An enhanced Textarea for submitting prompts in AI chat interfaces.",{"title":285,"path":286,"stem":287,"framework":16,"category":262,"description":288},"ChatPromptSubmit","\u002Fdocs\u002Fcomponents\u002Fchat-prompt-submit","docs\u002F2.components\u002Fchat-prompt-submit","A Button for submitting chat prompts with automatic status handling.",{"title":290,"path":291,"stem":292,"framework":16,"category":262,"description":293,"badge":294},"ChatReasoning","\u002Fdocs\u002Fcomponents\u002Fchat-reasoning","docs\u002F2.components\u002Fchat-reasoning","Display a collapsible AI reasoning or thinking process.","New",{"title":296,"path":297,"stem":298,"framework":16,"category":262,"description":299,"badge":294},"ChatShimmer","\u002Fdocs\u002Fcomponents\u002Fchat-shimmer","docs\u002F2.components\u002Fchat-shimmer","Display a text shimmer animation effect.",{"title":301,"path":302,"stem":303,"framework":16,"category":262,"description":304,"badge":294},"ChatTool","\u002Fdocs\u002Fcomponents\u002Fchat-tool","docs\u002F2.components\u002Fchat-tool","Display a collapsible AI tool invocation status.",{"title":306,"path":307,"stem":308,"framework":16,"category":309,"description":310},"Checkbox","\u002Fdocs\u002Fcomponents\u002Fcheckbox","docs\u002F2.components\u002Fcheckbox","form","An input element to toggle between checked and unchecked states.",{"title":312,"path":313,"stem":314,"framework":16,"category":309,"description":315},"CheckboxGroup","\u002Fdocs\u002Fcomponents\u002Fcheckbox-group","docs\u002F2.components\u002Fcheckbox-group","A set of checklist buttons to select multiple option from a list.",{"title":317,"path":318,"stem":319,"framework":16,"category":178,"description":320},"Chip","\u002Fdocs\u002Fcomponents\u002Fchip","docs\u002F2.components\u002Fchip","An indicator of a numeric value or a state.",{"title":322,"path":323,"stem":324,"framework":16,"category":178,"description":325},"Collapsible","\u002Fdocs\u002Fcomponents\u002Fcollapsible","docs\u002F2.components\u002Fcollapsible","A collapsible element to toggle visibility of its content.",{"title":327,"path":328,"stem":329,"framework":16,"category":330,"description":331},"ColorModeAvatar","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-avatar","docs\u002F2.components\u002Fcolor-mode-avatar","color-mode","An Avatar with a different source for light and dark mode.",{"title":333,"path":334,"stem":335,"framework":16,"category":330,"description":336},"ColorModeButton","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-button","docs\u002F2.components\u002Fcolor-mode-button","A Button to switch between light and dark mode.",{"title":338,"path":339,"stem":340,"framework":16,"category":330,"description":341},"ColorModeImage","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-image","docs\u002F2.components\u002Fcolor-mode-image","An image element with a different source for light and dark mode.",{"title":343,"path":344,"stem":345,"framework":16,"category":330,"description":346},"ColorModeSelect","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-select","docs\u002F2.components\u002Fcolor-mode-select","A Select to switch between system, dark & light mode.",{"title":348,"path":349,"stem":350,"framework":16,"category":330,"description":351},"ColorModeSwitch","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-switch","docs\u002F2.components\u002Fcolor-mode-switch","A switch to toggle between light and dark mode.",{"title":353,"path":354,"stem":355,"framework":16,"category":309,"description":356},"ColorPicker","\u002Fdocs\u002Fcomponents\u002Fcolor-picker","docs\u002F2.components\u002Fcolor-picker","A component to select a color.",{"title":358,"path":359,"stem":360,"framework":16,"category":226,"description":361},"CommandPalette","\u002Fdocs\u002Fcomponents\u002Fcommand-palette","docs\u002F2.components\u002Fcommand-palette","A command palette with full-text search powered by Fuse.js for efficient fuzzy matching.",{"title":363,"path":364,"stem":365,"framework":16,"category":184,"description":366},"Container","\u002Fdocs\u002Fcomponents\u002Fcontainer","docs\u002F2.components\u002Fcontainer","A container lets you center and constrain the width of your content.",{"title":368,"path":369,"stem":370,"framework":28,"category":371,"description":372},"ContentNavigation","\u002Fdocs\u002Fcomponents\u002Fcontent-navigation","docs\u002F2.components\u002Fcontent-navigation","content","An accordion-style navigation component for organizing page links.",{"title":374,"path":375,"stem":376,"framework":28,"category":371,"description":377},"ContentSearch","\u002Fdocs\u002Fcomponents\u002Fcontent-search","docs\u002F2.components\u002Fcontent-search","A ready to use CommandPalette to add to your documentation.",{"title":379,"path":380,"stem":381,"framework":28,"category":371,"description":382},"ContentSearchButton","\u002Fdocs\u002Fcomponents\u002Fcontent-search-button","docs\u002F2.components\u002Fcontent-search-button","A pre-styled Button to open the ContentSearch modal.",{"title":384,"path":385,"stem":386,"framework":28,"category":371,"description":387},"ContentSurround","\u002Fdocs\u002Fcomponents\u002Fcontent-surround","docs\u002F2.components\u002Fcontent-surround","A pair of prev and next links to navigate between pages.",{"title":389,"path":390,"stem":391,"framework":28,"category":371,"description":392},"ContentToc","\u002Fdocs\u002Fcomponents\u002Fcontent-toc","docs\u002F2.components\u002Fcontent-toc","A sticky Table of Contents with automatic active anchor link highlighting.",{"title":394,"path":395,"stem":396,"framework":16,"category":397,"description":398},"ContextMenu","\u002Fdocs\u002Fcomponents\u002Fcontext-menu","docs\u002F2.components\u002Fcontext-menu","overlay","A menu to display actions when right-clicking on an element.",{"title":400,"path":401,"stem":402,"framework":16,"category":403,"description":404},"DashboardGroup","\u002Fdocs\u002Fcomponents\u002Fdashboard-group","docs\u002F2.components\u002Fdashboard-group","dashboard","A fixed layout component that provides context for dashboard components with sidebar state management and persistence.",{"title":406,"path":407,"stem":408,"framework":16,"category":403,"description":409},"DashboardNavbar","\u002Fdocs\u002Fcomponents\u002Fdashboard-navbar","docs\u002F2.components\u002Fdashboard-navbar","A responsive navbar to display in a dashboard.",{"title":411,"path":412,"stem":413,"framework":16,"category":403,"description":414},"DashboardPanel","\u002Fdocs\u002Fcomponents\u002Fdashboard-panel","docs\u002F2.components\u002Fdashboard-panel","A resizable panel to display in a dashboard.",{"title":416,"path":417,"stem":418,"framework":16,"category":403,"description":419},"DashboardResizeHandle","\u002Fdocs\u002Fcomponents\u002Fdashboard-resize-handle","docs\u002F2.components\u002Fdashboard-resize-handle","A handle to resize a sidebar or panel.",{"title":421,"path":422,"stem":423,"framework":16,"category":403,"description":424},"DashboardSearch","\u002Fdocs\u002Fcomponents\u002Fdashboard-search","docs\u002F2.components\u002Fdashboard-search","A ready to use CommandPalette to add to your dashboard.",{"title":426,"path":427,"stem":428,"framework":16,"category":403,"description":429},"DashboardSearchButton","\u002Fdocs\u002Fcomponents\u002Fdashboard-search-button","docs\u002F2.components\u002Fdashboard-search-button","A pre-styled Button to open the DashboardSearch modal.",{"title":431,"path":432,"stem":433,"framework":16,"category":403,"description":434},"DashboardSidebar","\u002Fdocs\u002Fcomponents\u002Fdashboard-sidebar","docs\u002F2.components\u002Fdashboard-sidebar","A resizable and collapsible sidebar to display in a dashboard.",{"title":436,"path":437,"stem":438,"framework":16,"category":403,"description":439},"DashboardSidebarCollapse","\u002Fdocs\u002Fcomponents\u002Fdashboard-sidebar-collapse","docs\u002F2.components\u002Fdashboard-sidebar-collapse","A Button to collapse the sidebar on desktop.",{"title":441,"path":442,"stem":443,"framework":16,"category":403,"description":444},"DashboardSidebarToggle","\u002Fdocs\u002Fcomponents\u002Fdashboard-sidebar-toggle","docs\u002F2.components\u002Fdashboard-sidebar-toggle","A Button to toggle the sidebar on mobile.",{"title":446,"path":447,"stem":448,"framework":16,"category":403,"description":449},"DashboardToolbar","\u002Fdocs\u002Fcomponents\u002Fdashboard-toolbar","docs\u002F2.components\u002Fdashboard-toolbar","A toolbar to display under the navbar in a dashboard.",{"title":451,"path":452,"stem":453,"framework":16,"category":397,"description":454},"Drawer","\u002Fdocs\u002Fcomponents\u002Fdrawer","docs\u002F2.components\u002Fdrawer","A drawer that smoothly slides in & out of the screen.",{"title":456,"path":457,"stem":458,"framework":16,"category":397,"description":459},"DropdownMenu","\u002Fdocs\u002Fcomponents\u002Fdropdown-menu","docs\u002F2.components\u002Fdropdown-menu","A menu to display actions when clicking on an element.",{"title":461,"path":462,"stem":463,"framework":16,"category":464,"description":465},"Editor","\u002Fdocs\u002Fcomponents\u002Feditor","docs\u002F2.components\u002Feditor","editor","A rich text editor component based on TipTap with support for markdown, HTML, and JSON content types.",{"title":467,"path":468,"stem":469,"framework":16,"category":464,"description":470},"EditorDragHandle","\u002Fdocs\u002Fcomponents\u002Feditor-drag-handle","docs\u002F2.components\u002Feditor-drag-handle","A draggable handle for reordering and selecting blocks in the editor.",{"title":472,"path":473,"stem":474,"framework":16,"category":464,"description":475},"EditorEmojiMenu","\u002Fdocs\u002Fcomponents\u002Feditor-emoji-menu","docs\u002F2.components\u002Feditor-emoji-menu","An emoji picker menu that displays emoji suggestions when typing the : character in the editor.",{"title":477,"path":478,"stem":479,"framework":16,"category":464,"description":480},"EditorMentionMenu","\u002Fdocs\u002Fcomponents\u002Feditor-mention-menu","docs\u002F2.components\u002Feditor-mention-menu","A mention menu that displays user suggestions when typing a trigger character in the editor.",{"title":482,"path":483,"stem":484,"framework":16,"category":464,"description":485},"EditorSuggestionMenu","\u002Fdocs\u002Fcomponents\u002Feditor-suggestion-menu","docs\u002F2.components\u002Feditor-suggestion-menu","A command menu that displays formatting and action suggestions when typing the \u002F character in the editor.",{"title":487,"path":488,"stem":489,"framework":16,"category":464,"description":490},"EditorToolbar","\u002Fdocs\u002Fcomponents\u002Feditor-toolbar","docs\u002F2.components\u002Feditor-toolbar","A customizable toolbar for editor actions that can be displayed as fixed, bubble, or floating menu.",{"title":492,"path":493,"stem":494,"framework":16,"category":172,"description":495},"Empty","\u002Fdocs\u002Fcomponents\u002Fempty","docs\u002F2.components\u002Fempty","A component to display an empty state.",{"title":497,"path":498,"stem":499,"framework":16,"category":184,"description":500},"Error","\u002Fdocs\u002Fcomponents\u002Ferror","docs\u002F2.components\u002Ferror","A pre-built error component with NuxtError support.",{"title":502,"path":503,"stem":504,"framework":16,"category":178,"description":505},"FieldGroup","\u002Fdocs\u002Fcomponents\u002Ffield-group","docs\u002F2.components\u002Ffield-group","Group multiple button-like elements together.",{"title":507,"path":508,"stem":509,"framework":16,"category":309,"description":510},"FileUpload","\u002Fdocs\u002Fcomponents\u002Ffile-upload","docs\u002F2.components\u002Ffile-upload","An input element to upload files.",{"title":512,"path":513,"stem":514,"framework":16,"category":184,"description":515},"Footer","\u002Fdocs\u002Fcomponents\u002Ffooter","docs\u002F2.components\u002Ffooter","A responsive footer component.",{"title":517,"path":518,"stem":519,"framework":16,"category":226,"description":520},"FooterColumns","\u002Fdocs\u002Fcomponents\u002Ffooter-columns","docs\u002F2.components\u002Ffooter-columns","A list of links as columns to display in your Footer.",{"title":522,"path":523,"stem":524,"framework":16,"category":309,"description":525},"Form","\u002Fdocs\u002Fcomponents\u002Fform","docs\u002F2.components\u002Fform","A form component with built-in validation and submission handling.",{"title":527,"path":528,"stem":529,"framework":16,"category":309,"description":530},"FormField","\u002Fdocs\u002Fcomponents\u002Fform-field","docs\u002F2.components\u002Fform-field","A wrapper for form elements that provides validation and error handling.",{"title":532,"path":533,"stem":534,"framework":16,"category":184,"description":535},"Header","\u002Fdocs\u002Fcomponents\u002Fheader","docs\u002F2.components\u002Fheader","A responsive header component.",{"title":537,"path":538,"stem":539,"framework":16,"category":178,"description":540},"Icon","\u002Fdocs\u002Fcomponents\u002Ficon","docs\u002F2.components\u002Ficon","A component to display any icon from Iconify or another component.",{"title":542,"path":543,"stem":544,"framework":16,"category":309,"description":545},"Input","\u002Fdocs\u002Fcomponents\u002Finput","docs\u002F2.components\u002Finput","An input element to enter text.",{"title":547,"path":548,"stem":549,"framework":16,"category":309,"description":550},"InputDate","\u002Fdocs\u002Fcomponents\u002Finput-date","docs\u002F2.components\u002Finput-date","An input component for date selection.",{"title":552,"path":553,"stem":554,"framework":16,"category":309,"description":555},"InputMenu","\u002Fdocs\u002Fcomponents\u002Finput-menu","docs\u002F2.components\u002Finput-menu","An autocomplete input with real-time suggestions.",{"title":557,"path":558,"stem":559,"framework":16,"category":309,"description":560},"InputNumber","\u002Fdocs\u002Fcomponents\u002Finput-number","docs\u002F2.components\u002Finput-number","An input for numerical values with a customizable range.",{"title":562,"path":563,"stem":564,"framework":16,"category":309,"description":565},"InputTags","\u002Fdocs\u002Fcomponents\u002Finput-tags","docs\u002F2.components\u002Finput-tags","An input element that displays interactive tags.",{"title":567,"path":568,"stem":569,"framework":16,"category":309,"description":570},"InputTime","\u002Fdocs\u002Fcomponents\u002Finput-time","docs\u002F2.components\u002Finput-time","An input for selecting a time.",{"title":572,"path":573,"stem":574,"framework":16,"category":178,"description":575},"Kbd","\u002Fdocs\u002Fcomponents\u002Fkbd","docs\u002F2.components\u002Fkbd","A kbd element to display a keyboard key.",{"title":577,"path":578,"stem":579,"framework":16,"category":226,"description":580},"Link","\u002Fdocs\u002Fcomponents\u002Flink","docs\u002F2.components\u002Flink","A wrapper around \u003CNuxtLink> with extra props.",{"title":582,"path":583,"stem":584,"framework":16,"category":585,"description":586},"LocaleSelect","\u002Fdocs\u002Fcomponents\u002Flocale-select","docs\u002F2.components\u002Flocale-select","i18n","A Select to switch between locales.",{"title":588,"path":589,"stem":590,"framework":16,"category":184,"description":591},"Main","\u002Fdocs\u002Fcomponents\u002Fmain","docs\u002F2.components\u002Fmain","A main element that fills the available viewport height.",{"title":593,"path":594,"stem":595,"framework":16,"category":172,"description":596},"Marquee","\u002Fdocs\u002Fcomponents\u002Fmarquee","docs\u002F2.components\u002Fmarquee","A component to create infinite scrolling content.",{"title":598,"path":599,"stem":600,"framework":16,"category":397,"description":601},"Modal","\u002Fdocs\u002Fcomponents\u002Fmodal","docs\u002F2.components\u002Fmodal","A dialog window that can be used to display a message or request user input.",{"title":603,"path":604,"stem":605,"framework":16,"category":226,"description":606},"NavigationMenu","\u002Fdocs\u002Fcomponents\u002Fnavigation-menu","docs\u002F2.components\u002Fnavigation-menu","A list of links that can be displayed horizontally or vertically.",{"title":608,"path":609,"stem":610,"framework":16,"category":190,"description":611},"Page","\u002Fdocs\u002Fcomponents\u002Fpage","docs\u002F2.components\u002Fpage","A grid layout for your pages with left and right columns.",{"title":613,"path":614,"stem":615,"framework":16,"category":190,"description":616},"PageAnchors","\u002Fdocs\u002Fcomponents\u002Fpage-anchors","docs\u002F2.components\u002Fpage-anchors","A list of anchors to be displayed in the page.",{"title":618,"path":619,"stem":620,"framework":16,"category":190,"description":621},"PageAside","\u002Fdocs\u002Fcomponents\u002Fpage-aside","docs\u002F2.components\u002Fpage-aside","A sticky aside to display your page navigation.",{"title":623,"path":624,"stem":625,"framework":16,"category":190,"description":626},"PageBody","\u002Fdocs\u002Fcomponents\u002Fpage-body","docs\u002F2.components\u002Fpage-body","The main content of your page.",{"title":628,"path":629,"stem":630,"framework":16,"category":190,"description":631},"PageCard","\u002Fdocs\u002Fcomponents\u002Fpage-card","docs\u002F2.components\u002Fpage-card","A pre-styled card component that displays a title, description and optional link.",{"title":633,"path":634,"stem":635,"framework":16,"category":190,"description":636},"PageColumns","\u002Fdocs\u002Fcomponents\u002Fpage-columns","docs\u002F2.components\u002Fpage-columns","A responsive multi-column layout system for organizing content side-by-side.",{"title":638,"path":639,"stem":640,"framework":16,"category":190,"description":641},"PageCTA","\u002Fdocs\u002Fcomponents\u002Fpage-cta","docs\u002F2.components\u002Fpage-cta","A call to action section to display in your pages.",{"title":643,"path":644,"stem":645,"framework":16,"category":190,"description":646},"PageFeature","\u002Fdocs\u002Fcomponents\u002Fpage-feature","docs\u002F2.components\u002Fpage-feature","A component to showcase key features of your application.",{"title":648,"path":649,"stem":650,"framework":16,"category":190,"description":651},"PageGrid","\u002Fdocs\u002Fcomponents\u002Fpage-grid","docs\u002F2.components\u002Fpage-grid","A responsive grid system for displaying content in a flexible layout.",{"title":653,"path":654,"stem":655,"framework":16,"category":190,"description":656},"PageHeader","\u002Fdocs\u002Fcomponents\u002Fpage-header","docs\u002F2.components\u002Fpage-header","A responsive header for your pages.",{"title":658,"path":659,"stem":660,"framework":16,"category":190,"description":661},"PageHero","\u002Fdocs\u002Fcomponents\u002Fpage-hero","docs\u002F2.components\u002Fpage-hero","A responsive hero for your pages.",{"title":663,"path":664,"stem":665,"framework":16,"category":190,"description":666},"PageLinks","\u002Fdocs\u002Fcomponents\u002Fpage-links","docs\u002F2.components\u002Fpage-links","A list of links to be displayed in the page.",{"title":668,"path":669,"stem":670,"framework":16,"category":190,"description":671},"PageList","\u002Fdocs\u002Fcomponents\u002Fpage-list","docs\u002F2.components\u002Fpage-list","A vertical list layout for displaying content in a stacked format.",{"title":673,"path":674,"stem":675,"framework":16,"category":190,"description":676},"PageLogos","\u002Fdocs\u002Fcomponents\u002Fpage-logos","docs\u002F2.components\u002Fpage-logos","A list of logos or images to display on your pages.",{"title":678,"path":679,"stem":680,"framework":16,"category":190,"description":681},"PageSection","\u002Fdocs\u002Fcomponents\u002Fpage-section","docs\u002F2.components\u002Fpage-section","A responsive section for your pages.",{"title":683,"path":684,"stem":685,"framework":16,"category":226,"description":686},"Pagination","\u002Fdocs\u002Fcomponents\u002Fpagination","docs\u002F2.components\u002Fpagination","A list of buttons or links to navigate through pages.",{"title":688,"path":689,"stem":690,"framework":16,"category":309,"description":691},"PinInput","\u002Fdocs\u002Fcomponents\u002Fpin-input","docs\u002F2.components\u002Fpin-input","An input element to enter a pin.",{"title":693,"path":694,"stem":695,"framework":16,"category":397,"description":696},"Popover","\u002Fdocs\u002Fcomponents\u002Fpopover","docs\u002F2.components\u002Fpopover","A non-modal dialog that floats around a trigger element.",{"title":698,"path":699,"stem":700,"framework":16,"category":190,"description":701},"PricingPlan","\u002Fdocs\u002Fcomponents\u002Fpricing-plan","docs\u002F2.components\u002Fpricing-plan","A customizable pricing plan to display in a pricing page.",{"title":703,"path":704,"stem":705,"framework":16,"category":190,"description":706},"PricingPlans","\u002Fdocs\u002Fcomponents\u002Fpricing-plans","docs\u002F2.components\u002Fpricing-plans","Display a list of pricing plans in a responsive grid layout.",{"title":708,"path":709,"stem":710,"framework":16,"category":190,"description":711},"PricingTable","\u002Fdocs\u002Fcomponents\u002Fpricing-table","docs\u002F2.components\u002Fpricing-table","A responsive pricing table component that displays tiered pricing plans with feature comparisons.",{"title":713,"path":714,"stem":715,"framework":16,"category":178,"description":716},"Progress","\u002Fdocs\u002Fcomponents\u002Fprogress","docs\u002F2.components\u002Fprogress","An indicator showing the progress of a task.",{"title":718,"path":719,"stem":720,"framework":16,"category":309,"description":721},"RadioGroup","\u002Fdocs\u002Fcomponents\u002Fradio-group","docs\u002F2.components\u002Fradio-group","A set of radio buttons to select a single option from a list.",{"title":723,"path":724,"stem":725,"framework":16,"category":172,"description":726},"ScrollArea","\u002Fdocs\u002Fcomponents\u002Fscroll-area","docs\u002F2.components\u002Fscroll-area","A flexible scroll container with virtualization support.",{"title":728,"path":729,"stem":730,"framework":16,"category":309,"description":731},"Select","\u002Fdocs\u002Fcomponents\u002Fselect","docs\u002F2.components\u002Fselect","A select element to choose from a list of options.",{"title":733,"path":734,"stem":735,"framework":16,"category":309,"description":736},"SelectMenu","\u002Fdocs\u002Fcomponents\u002Fselect-menu","docs\u002F2.components\u002Fselect-menu","An advanced searchable select element.",{"title":738,"path":739,"stem":740,"framework":16,"category":178,"description":741},"Separator","\u002Fdocs\u002Fcomponents\u002Fseparator","docs\u002F2.components\u002Fseparator","Separates content horizontally or vertically.",{"title":743,"path":744,"stem":745,"framework":16,"category":184,"description":746,"badge":294},"Sidebar","\u002Fdocs\u002Fcomponents\u002Fsidebar","docs\u002F2.components\u002Fsidebar","A collapsible sidebar with multiple visual variants.",{"title":748,"path":749,"stem":750,"framework":16,"category":178,"description":751},"Skeleton","\u002Fdocs\u002Fcomponents\u002Fskeleton","docs\u002F2.components\u002Fskeleton","A placeholder to show while content is loading.",{"title":753,"path":754,"stem":755,"framework":16,"category":397,"description":756},"Slideover","\u002Fdocs\u002Fcomponents\u002Fslideover","docs\u002F2.components\u002Fslideover","A dialog that slides in from any side of the screen.",{"title":758,"path":759,"stem":760,"framework":16,"category":309,"description":761},"Slider","\u002Fdocs\u002Fcomponents\u002Fslider","docs\u002F2.components\u002Fslider","An input to select a numeric value within a range.",{"title":763,"path":764,"stem":765,"framework":16,"category":226,"description":766},"Stepper","\u002Fdocs\u002Fcomponents\u002Fstepper","docs\u002F2.components\u002Fstepper","A set of steps that are used to indicate progress through a multi-step process.",{"title":768,"path":769,"stem":770,"framework":16,"category":309,"description":771},"Switch","\u002Fdocs\u002Fcomponents\u002Fswitch","docs\u002F2.components\u002Fswitch","A control that toggles between two states.",{"title":773,"path":774,"stem":775,"framework":16,"category":172,"description":776},"Table","\u002Fdocs\u002Fcomponents\u002Ftable","docs\u002F2.components\u002Ftable","A responsive table element to display data in rows and columns.",{"title":778,"path":779,"stem":780,"framework":16,"category":226,"description":781},"Tabs","\u002Fdocs\u002Fcomponents\u002Ftabs","docs\u002F2.components\u002Ftabs","A set of tab panels that are displayed one at a time.",{"title":783,"path":784,"stem":785,"framework":16,"category":309,"description":786},"Textarea","\u002Fdocs\u002Fcomponents\u002Ftextarea","docs\u002F2.components\u002Ftextarea","A textarea element to input multi-line text.",{"title":54,"path":788,"stem":789,"framework":16,"category":184,"description":790},"\u002Fdocs\u002Fcomponents\u002Ftheme","docs\u002F2.components\u002Ftheme","A headless component to theme child components.",{"title":792,"path":793,"stem":794,"framework":16,"category":172,"description":795},"Timeline","\u002Fdocs\u002Fcomponents\u002Ftimeline","docs\u002F2.components\u002Ftimeline","A component that displays a sequence of events with dates, titles, icons or avatars.",{"title":797,"path":798,"stem":799,"framework":16,"category":397,"description":800},"Toast","\u002Fdocs\u002Fcomponents\u002Ftoast","docs\u002F2.components\u002Ftoast","A succinct message to provide information or feedback to the user.",{"title":802,"path":803,"stem":804,"framework":16,"category":397,"description":805},"Tooltip","\u002Fdocs\u002Fcomponents\u002Ftooltip","docs\u002F2.components\u002Ftooltip","A popup that reveals information when hovering over an element.",{"title":807,"path":808,"stem":809,"framework":16,"category":172,"description":810},"Tree","\u002Fdocs\u002Fcomponents\u002Ftree","docs\u002F2.components\u002Ftree","A tree view component to display and interact with hierarchical data structures.",{"title":812,"path":813,"stem":814,"framework":16,"category":172,"description":815},"User","\u002Fdocs\u002Fcomponents\u002Fuser","docs\u002F2.components\u002Fuser","Display user information with name, description and avatar.",{"title":817,"framework":16,"category":16,"description":16,"icon":818,"path":819,"stem":820,"children":821,"page":36},"Composables","i-lucide-square-function","\u002Fdocs\u002Fcomposables","docs\u002F3.composables",[822,827,832,837,842,847,852],{"title":823,"path":824,"stem":825,"framework":16,"category":16,"description":826},"defineLocale","\u002Fdocs\u002Fcomposables\u002Fdefine-locale","docs\u002F3.composables\u002Fdefine-locale","A utility to create a custom locale for your app.",{"title":828,"path":829,"stem":830,"framework":16,"category":16,"description":831},"defineShortcuts","\u002Fdocs\u002Fcomposables\u002Fdefine-shortcuts","docs\u002F3.composables\u002Fdefine-shortcuts","A composable to define keyboard shortcuts in your app.",{"title":833,"path":834,"stem":835,"framework":16,"category":16,"description":836},"extendLocale","\u002Fdocs\u002Fcomposables\u002Fextend-locale","docs\u002F3.composables\u002Fextend-locale","A utility to extend an existing locale with custom translations.",{"title":838,"path":839,"stem":840,"framework":16,"category":16,"description":841},"extractShortcuts","\u002Fdocs\u002Fcomposables\u002Fextract-shortcuts","docs\u002F3.composables\u002Fextract-shortcuts","A utility to extract keyboard shortcuts from menu items.",{"title":843,"path":844,"stem":845,"framework":16,"category":16,"description":846},"useOverlay","\u002Fdocs\u002Fcomposables\u002Fuse-overlay","docs\u002F3.composables\u002Fuse-overlay","A composable to programmatically control overlays.",{"title":848,"path":849,"stem":850,"framework":16,"category":16,"description":851,"badge":294},"useScrollShadow","\u002Fdocs\u002Fcomposables\u002Fuse-scroll-shadow","docs\u002F3.composables\u002Fuse-scroll-shadow","A composable to apply scroll shadow effects on any scrollable element.",{"title":853,"path":854,"stem":855,"framework":16,"category":16,"description":856},"useToast","\u002Fdocs\u002Fcomposables\u002Fuse-toast","docs\u002F3.composables\u002Fuse-toast","A composable to display toast notifications in your app.",{"title":858,"path":859,"stem":860,"children":861,"framework":16,"category":16,"description":16,"icon":957},"Typography","\u002Fdocs\u002Ftypography","docs\u002F4.typography\u002F1.index",[862,864,869,874,879,884,889,893,898,902,907,912,917,922,927,931,936,940,944,948,953],{"title":15,"path":859,"stem":860,"framework":16,"category":16,"description":863},"Beautiful typography components and utilities to style your content with Nuxt UI.",{"title":865,"path":866,"stem":867,"framework":16,"category":16,"description":868},"Headers and text","\u002Fdocs\u002Ftypography\u002Fheaders-and-text","docs\u002F4.typography\u002F2.headers-and-text","Beautifully styled headings, paragraphs, text formatting, and links for optimal readability.",{"title":870,"path":871,"stem":872,"framework":16,"category":16,"description":873},"Lists and tables","\u002Fdocs\u002Ftypography\u002Flists-and-tables","docs\u002F4.typography\u002F3.lists-and-tables","Organize information with styled lists and responsive tables for clear, consistent readability.",{"title":875,"path":876,"stem":877,"framework":16,"category":16,"description":878},"Images and embeds","\u002Fdocs\u002Ftypography\u002Fimages-and-embeds","docs\u002F4.typography\u002F4.images-and-embeds","Responsive images, videos, and rich media embeds to enhance and illustrate your documentation.",{"title":880,"path":881,"stem":882,"framework":16,"category":16,"description":883},"Code","\u002Fdocs\u002Ftypography\u002Fcode","docs\u002F4.typography\u002F5.code","Display inline code and syntax-highlighted code blocks with copy-to-clipboard support.",{"title":169,"path":885,"stem":886,"framework":16,"category":887,"description":888},"\u002Fdocs\u002Ftypography\u002Faccordion","docs\u002F4.typography\u002Faccordion","components","Create expandable content sections for better information organization.",{"title":203,"path":890,"stem":891,"framework":16,"category":887,"description":892},"\u002Fdocs\u002Ftypography\u002Fbadge","docs\u002F4.typography\u002Fbadge","Display version numbers, status labels, and tags within your content.",{"title":894,"path":895,"stem":896,"framework":16,"category":887,"description":897},"Callout","\u002Fdocs\u002Ftypography\u002Fcallout","docs\u002F4.typography\u002Fcallout","Highlight important information with eye-catching colored boxes and icons.",{"title":239,"path":899,"stem":900,"framework":16,"category":887,"description":901},"\u002Fdocs\u002Ftypography\u002Fcard","docs\u002F4.typography\u002Fcard","Create highlighted content blocks with optional links and navigation.",{"title":903,"path":904,"stem":905,"framework":16,"category":887,"description":906},"CardGroup","\u002Fdocs\u002Ftypography\u002Fcard-group","docs\u002F4.typography\u002Fcard-group","Organize multiple cards in responsive grid layouts for better content presentation.",{"title":908,"path":909,"stem":910,"framework":16,"category":887,"description":911},"CodeCollapse","\u002Fdocs\u002Ftypography\u002Fcode-collapse","docs\u002F4.typography\u002Fcode-collapse","Make long code blocks collapsible to save space and improve readability.",{"title":913,"path":914,"stem":915,"framework":16,"category":887,"description":916},"CodeGroup","\u002Fdocs\u002Ftypography\u002Fcode-group","docs\u002F4.typography\u002Fcode-group","Group multiple code examples in tabbed interfaces for easy comparison.",{"title":918,"path":919,"stem":920,"framework":16,"category":887,"description":921},"CodePreview","\u002Fdocs\u002Ftypography\u002Fcode-preview","docs\u002F4.typography\u002Fcode-preview","Display code examples with a preview and their source for clearer documentation.",{"title":923,"path":924,"stem":925,"framework":16,"category":887,"description":926},"CodeTree","\u002Fdocs\u002Ftypography\u002Fcode-tree","docs\u002F4.typography\u002Fcode-tree","Visualize file and folder structures with syntax-highlighted code.",{"title":322,"path":928,"stem":929,"framework":16,"category":887,"description":930},"\u002Fdocs\u002Ftypography\u002Fcollapsible","docs\u002F4.typography\u002Fcollapsible","Toggle content visibility with smooth expand and collapse animations.",{"title":932,"path":933,"stem":934,"framework":16,"category":887,"description":935},"Field","\u002Fdocs\u002Ftypography\u002Ffield","docs\u002F4.typography\u002Ffield","Document API parameters, props, and configuration options clearly.",{"title":502,"path":937,"stem":938,"framework":16,"category":887,"description":939},"\u002Fdocs\u002Ftypography\u002Ffield-group","docs\u002F4.typography\u002Ffield-group","Group related fields together for comprehensive API documentation.",{"title":537,"path":941,"stem":942,"framework":16,"category":887,"description":943},"\u002Fdocs\u002Ftypography\u002Ficon","docs\u002F4.typography\u002Ficon","Display icons from popular icon libraries to enhance your content.",{"title":572,"path":945,"stem":946,"framework":16,"category":887,"description":947},"\u002Fdocs\u002Ftypography\u002Fkbd","docs\u002F4.typography\u002Fkbd","Display keyboard shortcuts and key combinations with proper styling.",{"title":949,"path":950,"stem":951,"framework":16,"category":887,"description":952},"Steps","\u002Fdocs\u002Ftypography\u002Fsteps","docs\u002F4.typography\u002Fsteps","Transform headings into numbered step-by-step guides and tutorials.",{"title":778,"path":954,"stem":955,"framework":16,"category":887,"description":956},"\u002Fdocs\u002Ftypography\u002Ftabs","docs\u002F4.typography\u002Ftabs","Organize related content in interactive tabbed interfaces.","i-lucide-square-pilcrow",{"id":959,"title":960,"body":16,"description":961,"extension":962,"hero":963,"meta":965,"navigation":36,"path":966,"seo":967,"stem":968,"__hash__":969},"blog\u002Fblog.yml","Blog","Tutorials, guides, and insights to help you build beautiful applications with Nuxt UI.","yml",{"title":964,"description":961},"Nuxt [UI]{.text-primary} Blog",{},"\u002Fblog",{"title":960,"description":961},"blog","ESl67YJxs4hhxlk_OHymZ1sSoeclVge2lYINtoN5zxg",[971],{"id":972,"title":973,"authors":974,"body":985,"date":12594,"description":12595,"extension":12596,"image":12597,"meta":12598,"navigation":36,"path":12600,"seo":12601,"stem":12602,"__hash__":12603},"posts\u002Fblog\u002Fhow-to-build-an-ai-chat.md","Build an AI Chatbot with Nuxt, Nuxt UI, and AI SDK",[975,980],{"name":976,"avatar":977,"to":979},"Hugo Richard",{"src":978},"https:\u002F\u002Fgithub.com\u002Fhugorcd.png","https:\u002F\u002Fx.com\u002Fhugorcd",{"name":981,"avatar":982,"to":984},"Benjamin Canac",{"src":983},"https:\u002F\u002Fgithub.com\u002Fbenjamincanac.png","https:\u002F\u002Fx.com\u002Fbenjamincanac",{"type":986,"value":987,"toc":12560},"minimark",[988,992,997,1000,1035,1061,1065,1068,1082,1086,1089,1126,1131,1134,1287,1291,1298,1462,1474,1477,1516,1520,1527,1622,1629,1646,1655,1659,1673,2410,2413,2431,2441,2445,2453,2457,2468,2837,2841,2868,4606,4609,4614,4621,4626,4637,4642,4651,4669,4674,4689,4702,4706,4709,5084,5088,5103,5107,5115,5688,5695,5720,5724,5752,5949,5956,5959,6092,6096,6114,7532,7535,7540,7551,7589,7604,7609,7616,7630,7635,7662,7667,7674,7685,7689,7692,7696,7699,7852,7856,7881,8359,8363,8902,8906,10215,10224,10228,10235,10239,10249,10507,10511,10519,10766,10770,10773,12164,12168,12171,12176,12185,12190,12199,12402,12406,12409,12424,12427,12442,12457,12466,12470,12473,12504,12507,12512,12553,12556],[989,990,991],"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.",[993,994,996],"h2",{"id":995},"what-were-building","What we're building",[989,998,999],{},"By the end of this tutorial, you'll have a fully functional AI chatbot with:",[1001,1002,1003,1011,1017,1023,1029],"ul",{},[1004,1005,1006,1010],"li",{},[1007,1008,1009],"strong",{},"Streaming responses"," that appear in real-time as the AI generates them",[1004,1012,1013,1016],{},[1007,1014,1015],{},"A beautiful chat interface"," built with Nuxt UI's purpose-built chat components",[1004,1018,1019,1022],{},[1007,1020,1021],{},"Markdown rendering"," for rich AI responses with code highlighting",[1004,1024,1025,1028],{},[1007,1026,1027],{},"Multi-model support"," allowing users to switch between OpenAI, Anthropic, and Google models",[1004,1030,1031,1034],{},[1007,1032,1033],{},"Server-side AI integration"," using Nitro API routes and the AI SDK",[1036,1037,1039],"callout",{"icon":1038},"i-simple-icons-github",[989,1040,1041,1042,1052,1053,1060],{},"Check out the ",[1043,1044,1048],"a",{"href":1045,"rel":1046},"https:\u002F\u002Fgithub.com\u002Fnuxt-ui-templates\u002Fchat",[1047],"nofollow",[1049,1050,1051],"code",{},"Nuxt"," and ",[1043,1054,1057],{"href":1055,"rel":1056},"https:\u002F\u002Fgithub.com\u002Fnuxt-ui-templates\u002Fchat-vue",[1047],[1049,1058,1059],{},"Vue"," AI Chat templates on GitHub for production-ready implementations with authentication, database persistence, and more.",[993,1062,1064],{"id":1063},"prerequisites","Prerequisites",[989,1066,1067],{},"Before we start, make sure you have:",[1001,1069,1070,1073],{},[1004,1071,1072],{},"Node.js 20+ installed",[1004,1074,1075,1076,1081],{},"A ",[1043,1077,1080],{"href":1078,"rel":1079},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fai-gateway",[1047],"Vercel AI Gateway"," API key (provides access to multiple AI providers through a single endpoint)",[993,1083,1085],{"id":1084},"project-setup","Project setup",[989,1087,1088],{},"Start by creating a new Nuxt project:",[1090,1091,1096],"pre",{"className":1092,"code":1093,"language":1094,"meta":1095,"style":1095},"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","",[1049,1097,1098,1117],{"__ignoreMap":1095},[1099,1100,1103,1107,1111,1114],"span",{"class":1101,"line":1102},"line",1,[1099,1104,1106],{"class":1105},"sBMFI","npx",[1099,1108,1110],{"class":1109},"sfazB"," nuxi@latest",[1099,1112,1113],{"class":1109}," init",[1099,1115,1116],{"class":1109}," nuxt-ai-chat\n",[1099,1118,1120,1124],{"class":1101,"line":1119},2,[1099,1121,1123],{"class":1122},"s2Zo4","cd",[1099,1125,1116],{"class":1109},[1127,1128,1130],"h3",{"id":1129},"installing-dependencies","Installing dependencies",[989,1132,1133],{},"Install Nuxt UI and the AI-specific dependencies:",[1135,1136,1138,1184,1218,1253],"code-group",{"sync":1137},"pm",[1090,1139,1142],{"className":1092,"code":1140,"filename":1141,"language":1094,"meta":1095,"style":1095},"pnpm add @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","pnpm",[1049,1143,1144],{"__ignoreMap":1095},[1099,1145,1146,1148,1151,1154,1157,1160,1163,1166,1169,1172,1175,1178,1181],{"class":1101,"line":1102},[1099,1147,1141],{"class":1105},[1099,1149,1150],{"class":1109}," add",[1099,1152,1153],{"class":1109}," @nuxt\u002Fui",[1099,1155,1156],{"class":1109}," tailwindcss",[1099,1158,1159],{"class":1109}," @comark\u002Fnuxt",[1099,1161,1162],{"class":1109}," @shikijs\u002Flangs",[1099,1164,1165],{"class":1109}," @nuxthub\u002Fcore",[1099,1167,1168],{"class":1109}," drizzle-orm",[1099,1170,1171],{"class":1109}," drizzle-kit",[1099,1173,1174],{"class":1109}," @libsql\u002Fclient",[1099,1176,1177],{"class":1109}," ai",[1099,1179,1180],{"class":1109}," @ai-sdk\u002Fvue",[1099,1182,1183],{"class":1109}," zod\n",[1090,1185,1188],{"className":1092,"code":1186,"filename":1187,"language":1094,"meta":1095,"style":1095},"yarn add @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","yarn",[1049,1189,1190],{"__ignoreMap":1095},[1099,1191,1192,1194,1196,1198,1200,1202,1204,1206,1208,1210,1212,1214,1216],{"class":1101,"line":1102},[1099,1193,1187],{"class":1105},[1099,1195,1150],{"class":1109},[1099,1197,1153],{"class":1109},[1099,1199,1156],{"class":1109},[1099,1201,1159],{"class":1109},[1099,1203,1162],{"class":1109},[1099,1205,1165],{"class":1109},[1099,1207,1168],{"class":1109},[1099,1209,1171],{"class":1109},[1099,1211,1174],{"class":1109},[1099,1213,1177],{"class":1109},[1099,1215,1180],{"class":1109},[1099,1217,1183],{"class":1109},[1090,1219,1222],{"className":1092,"code":1220,"filename":1221,"language":1094,"meta":1095,"style":1095},"npm install @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","npm",[1049,1223,1224],{"__ignoreMap":1095},[1099,1225,1226,1228,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251],{"class":1101,"line":1102},[1099,1227,1221],{"class":1105},[1099,1229,1230],{"class":1109}," install",[1099,1232,1153],{"class":1109},[1099,1234,1156],{"class":1109},[1099,1236,1159],{"class":1109},[1099,1238,1162],{"class":1109},[1099,1240,1165],{"class":1109},[1099,1242,1168],{"class":1109},[1099,1244,1171],{"class":1109},[1099,1246,1174],{"class":1109},[1099,1248,1177],{"class":1109},[1099,1250,1180],{"class":1109},[1099,1252,1183],{"class":1109},[1090,1254,1257],{"className":1092,"code":1255,"filename":1256,"language":1094,"meta":1095,"style":1095},"bun add @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","bun",[1049,1258,1259],{"__ignoreMap":1095},[1099,1260,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285],{"class":1101,"line":1102},[1099,1262,1256],{"class":1105},[1099,1264,1150],{"class":1109},[1099,1266,1153],{"class":1109},[1099,1268,1156],{"class":1109},[1099,1270,1159],{"class":1109},[1099,1272,1162],{"class":1109},[1099,1274,1165],{"class":1109},[1099,1276,1168],{"class":1109},[1099,1278,1171],{"class":1109},[1099,1280,1174],{"class":1109},[1099,1282,1177],{"class":1109},[1099,1284,1180],{"class":1109},[1099,1286,1183],{"class":1109},[1127,1288,1290],{"id":1289},"configuration","Configuration",[989,1292,1293,1294,1297],{},"Update your ",[1049,1295,1296],{},"nuxt.config.ts"," to register the modules:",[1299,1300,1301],"code-tree-intersection",{},[1090,1302,1306],{"className":1303,"code":1304,"filename":1296,"language":1305,"meta":1095,"style":1095},"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",[1049,1307,1308,1328,1340,1355,1367,1378,1386,1392,1403,1419,1425,1430,1453],{"__ignoreMap":1095},[1099,1309,1310,1314,1317,1320,1324],{"class":1101,"line":1102},[1099,1311,1313],{"class":1312},"s7zQu","export",[1099,1315,1316],{"class":1312}," default",[1099,1318,1319],{"class":1122}," defineNuxtConfig",[1099,1321,1323],{"class":1322},"sTEyZ","(",[1099,1325,1327],{"class":1326},"sMK4o","{\n",[1099,1329,1330,1334,1337],{"class":1101,"line":1119},[1099,1331,1333],{"class":1332},"swJcz","  modules",[1099,1335,1336],{"class":1326},":",[1099,1338,1339],{"class":1322}," [\n",[1099,1341,1343,1346,1349,1352],{"class":1101,"line":1342},3,[1099,1344,1345],{"class":1326},"    '",[1099,1347,1348],{"class":1109},"@nuxt\u002Fui",[1099,1350,1351],{"class":1326},"'",[1099,1353,1354],{"class":1326},",\n",[1099,1356,1358,1360,1363,1365],{"class":1101,"line":1357},4,[1099,1359,1345],{"class":1326},[1099,1361,1362],{"class":1109},"@comark\u002Fnuxt",[1099,1364,1351],{"class":1326},[1099,1366,1354],{"class":1326},[1099,1368,1370,1372,1375],{"class":1101,"line":1369},5,[1099,1371,1345],{"class":1326},[1099,1373,1374],{"class":1109},"@nuxthub\u002Fcore",[1099,1376,1377],{"class":1326},"'\n",[1099,1379,1381,1384],{"class":1101,"line":1380},6,[1099,1382,1383],{"class":1322},"  ]",[1099,1385,1354],{"class":1326},[1099,1387,1389],{"class":1101,"line":1388},7,[1099,1390,1391],{"emptyLinePlaceholder":21},"\n",[1099,1393,1395,1398,1400],{"class":1101,"line":1394},8,[1099,1396,1397],{"class":1332},"  hub",[1099,1399,1336],{"class":1326},[1099,1401,1402],{"class":1326}," {\n",[1099,1404,1406,1409,1411,1414,1417],{"class":1101,"line":1405},9,[1099,1407,1408],{"class":1332},"    db",[1099,1410,1336],{"class":1326},[1099,1412,1413],{"class":1326}," '",[1099,1415,1416],{"class":1109},"sqlite",[1099,1418,1377],{"class":1326},[1099,1420,1422],{"class":1101,"line":1421},10,[1099,1423,1424],{"class":1326},"  },\n",[1099,1426,1428],{"class":1101,"line":1427},11,[1099,1429,1391],{"emptyLinePlaceholder":21},[1099,1431,1433,1436,1438,1441,1443,1446,1448,1451],{"class":1101,"line":1432},12,[1099,1434,1435],{"class":1332},"  css",[1099,1437,1336],{"class":1326},[1099,1439,1440],{"class":1322}," [",[1099,1442,1351],{"class":1326},[1099,1444,1445],{"class":1109},"~\u002Fassets\u002Fcss\u002Fmain.css",[1099,1447,1351],{"class":1326},[1099,1449,1450],{"class":1322},"]",[1099,1452,1354],{"class":1326},[1099,1454,1456,1459],{"class":1101,"line":1455},13,[1099,1457,1458],{"class":1326},"}",[1099,1460,1461],{"class":1322},")\n",[1463,1464,1465],"note",{"to":859},[989,1466,1467,1469,1470,1473],{},[1049,1468,1362],{}," automatically enables Nuxt UI's ",[1043,1471,1472],{"href":859},"prose components",", so Markdown rendered by Comark is styled to match your theme.",[989,1475,1476],{},"Create the main CSS file to import Tailwind CSS and Nuxt UI:",[1299,1478,1479],{},[1090,1480,1485],{"className":1481,"code":1482,"filename":1483,"language":1484,"meta":1095,"style":1095},"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",[1049,1486,1487,1504],{"__ignoreMap":1095},[1099,1488,1489,1492,1495,1498,1501],{"class":1101,"line":1102},[1099,1490,1491],{"class":1312},"@import",[1099,1493,1494],{"class":1326}," \"",[1099,1496,1497],{"class":1109},"tailwindcss",[1099,1499,1500],{"class":1326},"\"",[1099,1502,1503],{"class":1326},";\n",[1099,1505,1506,1508,1510,1512,1514],{"class":1101,"line":1119},[1099,1507,1491],{"class":1312},[1099,1509,1494],{"class":1326},[1099,1511,1348],{"class":1109},[1099,1513,1500],{"class":1326},[1099,1515,1503],{"class":1326},[1127,1517,1519],{"id":1518},"setting-up-the-app","Setting up the app",[989,1521,1522,1523,1526],{},"Nuxt UI requires wrapping your app with ",[1049,1524,1525],{},"UApp"," for modals, toasts, and overlays to work properly:",[1299,1528,1529],{},[1090,1530,1535],{"className":1531,"code":1532,"filename":1533,"highlights":1534,"language":34,"meta":1095,"style":1095},"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",[1119,1380],[1049,1536,1537,1548,1559,1583,1594,1603,1613],{"__ignoreMap":1095},[1099,1538,1539,1542,1545],{"class":1101,"line":1102},[1099,1540,1541],{"class":1326},"\u003C",[1099,1543,1544],{"class":1332},"template",[1099,1546,1547],{"class":1326},">\n",[1099,1549,1552,1555,1557],{"class":1550,"line":1119},[1101,1551],"highlight",[1099,1553,1554],{"class":1326},"  \u003C",[1099,1556,1525],{"class":1332},[1099,1558,1547],{"class":1326},[1099,1560,1561,1564,1567,1571,1574,1576,1579,1581],{"class":1101,"line":1342},[1099,1562,1563],{"class":1326},"    \u003C",[1099,1565,1566],{"class":1332},"UDashboardGroup",[1099,1568,1570],{"class":1569},"spNyl"," unit",[1099,1572,1573],{"class":1326},"=",[1099,1575,1500],{"class":1326},[1099,1577,1578],{"class":1109},"rem",[1099,1580,1500],{"class":1326},[1099,1582,1547],{"class":1326},[1099,1584,1585,1588,1591],{"class":1101,"line":1357},[1099,1586,1587],{"class":1326},"      \u003C",[1099,1589,1590],{"class":1332},"NuxtPage",[1099,1592,1593],{"class":1326}," \u002F>\n",[1099,1595,1596,1599,1601],{"class":1101,"line":1369},[1099,1597,1598],{"class":1326},"    \u003C\u002F",[1099,1600,1566],{"class":1332},[1099,1602,1547],{"class":1326},[1099,1604,1606,1609,1611],{"class":1605,"line":1380},[1101,1551],[1099,1607,1608],{"class":1326},"  \u003C\u002F",[1099,1610,1525],{"class":1332},[1099,1612,1547],{"class":1326},[1099,1614,1615,1618,1620],{"class":1101,"line":1388},[1099,1616,1617],{"class":1326},"\u003C\u002F",[1099,1619,1544],{"class":1332},[1099,1621,1547],{"class":1326},[989,1623,1624,1625,1628],{},"Create a ",[1049,1626,1627],{},".env"," file with your AI Gateway API key:",[1299,1630,1631],{},[1090,1632,1634],{"className":1092,"code":1633,"filename":1627,"language":1094,"meta":1095,"style":1095},"AI_GATEWAY_API_KEY=your-api-key-here\n",[1049,1635,1636],{"__ignoreMap":1095},[1099,1637,1638,1641,1643],{"class":1101,"line":1102},[1099,1639,1640],{"class":1322},"AI_GATEWAY_API_KEY",[1099,1642,1573],{"class":1326},[1099,1644,1645],{"class":1109},"your-api-key-here\n",[1463,1647,1648],{},[989,1649,1650,1651,1654],{},"With ",[1043,1652,1080],{"href":1078,"rel":1653},[1047],", 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.",[1127,1656,1658],{"id":1657},"setting-up-the-database","Setting up the database",[989,1660,1661,1666,1667,1672],{},[1043,1662,1665],{"href":1663,"rel":1664},"https:\u002F\u002Fhub.nuxt.com",[1047],"NuxtHub"," provides a zero-config database powered by ",[1043,1668,1671],{"href":1669,"rel":1670},"https:\u002F\u002Form.drizzle.team",[1047],"Drizzle ORM",". Here is the schema for the chat application:",[1299,1674,1675],{},[1676,1677,1678],"code-collapse",{},[1090,1679,1682],{"className":1303,"code":1680,"filename":1681,"language":1305,"meta":1095,"style":1095},"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",[1049,1683,1684,1724,1744,1748,1775,1820,1833,1890,1896,1900,1935,1947,1954,1958,1985,2031,2098,2168,2208,2259,2272,2302,2308,2313,2345,2361,2379,2395,2403],{"__ignoreMap":1095},[1099,1685,1686,1689,1692,1695,1698,1701,1703,1706,1708,1711,1714,1717,1719,1722],{"class":1101,"line":1102},[1099,1687,1688],{"class":1312},"import",[1099,1690,1691],{"class":1326}," {",[1099,1693,1694],{"class":1322}," sqliteTable",[1099,1696,1697],{"class":1326},",",[1099,1699,1700],{"class":1322}," text",[1099,1702,1697],{"class":1326},[1099,1704,1705],{"class":1322}," integer",[1099,1707,1697],{"class":1326},[1099,1709,1710],{"class":1322}," index",[1099,1712,1713],{"class":1326}," }",[1099,1715,1716],{"class":1312}," from",[1099,1718,1413],{"class":1326},[1099,1720,1721],{"class":1109},"drizzle-orm\u002Fsqlite-core",[1099,1723,1377],{"class":1326},[1099,1725,1726,1728,1730,1733,1735,1737,1739,1742],{"class":1101,"line":1119},[1099,1727,1688],{"class":1312},[1099,1729,1691],{"class":1326},[1099,1731,1732],{"class":1322}," relations",[1099,1734,1713],{"class":1326},[1099,1736,1716],{"class":1312},[1099,1738,1413],{"class":1326},[1099,1740,1741],{"class":1109},"drizzle-orm",[1099,1743,1377],{"class":1326},[1099,1745,1746],{"class":1101,"line":1342},[1099,1747,1391],{"emptyLinePlaceholder":21},[1099,1749,1750,1752,1755,1758,1760,1762,1764,1766,1769,1771,1773],{"class":1101,"line":1357},[1099,1751,1313],{"class":1312},[1099,1753,1754],{"class":1569}," const",[1099,1756,1757],{"class":1322}," chats ",[1099,1759,1573],{"class":1326},[1099,1761,1694],{"class":1122},[1099,1763,1323],{"class":1322},[1099,1765,1351],{"class":1326},[1099,1767,1768],{"class":1109},"chats",[1099,1770,1351],{"class":1326},[1099,1772,1697],{"class":1326},[1099,1774,1402],{"class":1326},[1099,1776,1777,1780,1782,1784,1787,1790,1793,1795,1797,1800,1802,1804,1807,1810,1812,1815,1818],{"class":1101,"line":1369},[1099,1778,1779],{"class":1332},"  id",[1099,1781,1336],{"class":1326},[1099,1783,1700],{"class":1122},[1099,1785,1786],{"class":1322},"()",[1099,1788,1789],{"class":1326},".",[1099,1791,1792],{"class":1122},"primaryKey",[1099,1794,1786],{"class":1322},[1099,1796,1789],{"class":1326},[1099,1798,1799],{"class":1122},"$defaultFn",[1099,1801,1323],{"class":1322},[1099,1803,1786],{"class":1326},[1099,1805,1806],{"class":1569}," =>",[1099,1808,1809],{"class":1322}," crypto",[1099,1811,1789],{"class":1326},[1099,1813,1814],{"class":1122},"randomUUID",[1099,1816,1817],{"class":1322},"())",[1099,1819,1354],{"class":1326},[1099,1821,1822,1825,1827,1829,1831],{"class":1101,"line":1380},[1099,1823,1824],{"class":1332},"  title",[1099,1826,1336],{"class":1326},[1099,1828,1700],{"class":1122},[1099,1830,1786],{"class":1322},[1099,1832,1354],{"class":1326},[1099,1834,1835,1838,1840,1842,1844,1847,1850,1852,1854,1857,1859,1861,1864,1866,1869,1871,1873,1875,1877,1879,1881,1884,1887],{"class":1101,"line":1388},[1099,1836,1837],{"class":1332},"  createdAt",[1099,1839,1336],{"class":1326},[1099,1841,1705],{"class":1122},[1099,1843,1323],{"class":1322},[1099,1845,1846],{"class":1326},"{",[1099,1848,1849],{"class":1332}," mode",[1099,1851,1336],{"class":1326},[1099,1853,1413],{"class":1326},[1099,1855,1856],{"class":1109},"timestamp",[1099,1858,1351],{"class":1326},[1099,1860,1713],{"class":1326},[1099,1862,1863],{"class":1322},")",[1099,1865,1789],{"class":1326},[1099,1867,1868],{"class":1122},"notNull",[1099,1870,1786],{"class":1322},[1099,1872,1789],{"class":1326},[1099,1874,1799],{"class":1122},[1099,1876,1323],{"class":1322},[1099,1878,1786],{"class":1326},[1099,1880,1806],{"class":1569},[1099,1882,1883],{"class":1326}," new",[1099,1885,1886],{"class":1122}," Date",[1099,1888,1889],{"class":1322},"())\n",[1099,1891,1892,1894],{"class":1101,"line":1394},[1099,1893,1458],{"class":1326},[1099,1895,1461],{"class":1322},[1099,1897,1898],{"class":1101,"line":1405},[1099,1899,1391],{"emptyLinePlaceholder":21},[1099,1901,1902,1904,1906,1909,1911,1913,1916,1918,1921,1925,1928,1930,1933],{"class":1101,"line":1421},[1099,1903,1313],{"class":1312},[1099,1905,1754],{"class":1569},[1099,1907,1908],{"class":1322}," chatsRelations ",[1099,1910,1573],{"class":1326},[1099,1912,1732],{"class":1122},[1099,1914,1915],{"class":1322},"(chats",[1099,1917,1697],{"class":1326},[1099,1919,1920],{"class":1326}," ({",[1099,1922,1924],{"class":1923},"sHdIc"," many",[1099,1926,1927],{"class":1326}," })",[1099,1929,1806],{"class":1569},[1099,1931,1932],{"class":1322}," (",[1099,1934,1327],{"class":1326},[1099,1936,1937,1940,1942,1944],{"class":1101,"line":1427},[1099,1938,1939],{"class":1332},"  messages",[1099,1941,1336],{"class":1326},[1099,1943,1924],{"class":1122},[1099,1945,1946],{"class":1322},"(messages)\n",[1099,1948,1949,1951],{"class":1101,"line":1432},[1099,1950,1458],{"class":1326},[1099,1952,1953],{"class":1322},"))\n",[1099,1955,1956],{"class":1101,"line":1455},[1099,1957,1391],{"emptyLinePlaceholder":21},[1099,1959,1961,1963,1965,1968,1970,1972,1974,1976,1979,1981,1983],{"class":1101,"line":1960},14,[1099,1962,1313],{"class":1312},[1099,1964,1754],{"class":1569},[1099,1966,1967],{"class":1322}," messages ",[1099,1969,1573],{"class":1326},[1099,1971,1694],{"class":1122},[1099,1973,1323],{"class":1322},[1099,1975,1351],{"class":1326},[1099,1977,1978],{"class":1109},"messages",[1099,1980,1351],{"class":1326},[1099,1982,1697],{"class":1326},[1099,1984,1402],{"class":1326},[1099,1986,1988,1990,1992,1994,1996,1998,2001,2003,2005,2007,2009,2011,2013,2015,2017,2019,2021,2023,2025,2027,2029],{"class":1101,"line":1987},15,[1099,1989,1779],{"class":1332},[1099,1991,1336],{"class":1326},[1099,1993,1700],{"class":1122},[1099,1995,1323],{"class":1322},[1099,1997,1351],{"class":1326},[1099,1999,2000],{"class":1109},"id",[1099,2002,1351],{"class":1326},[1099,2004,1863],{"class":1322},[1099,2006,1789],{"class":1326},[1099,2008,1792],{"class":1122},[1099,2010,1786],{"class":1322},[1099,2012,1789],{"class":1326},[1099,2014,1799],{"class":1122},[1099,2016,1323],{"class":1322},[1099,2018,1786],{"class":1326},[1099,2020,1806],{"class":1569},[1099,2022,1809],{"class":1322},[1099,2024,1789],{"class":1326},[1099,2026,1814],{"class":1122},[1099,2028,1817],{"class":1322},[1099,2030,1354],{"class":1326},[1099,2032,2034,2037,2039,2041,2043,2045,2048,2050,2052,2054,2056,2058,2060,2063,2065,2067,2069,2072,2074,2076,2078,2080,2083,2085,2087,2090,2092,2094,2096],{"class":1101,"line":2033},16,[1099,2035,2036],{"class":1332},"  chatId",[1099,2038,1336],{"class":1326},[1099,2040,1700],{"class":1122},[1099,2042,1323],{"class":1322},[1099,2044,1351],{"class":1326},[1099,2046,2047],{"class":1109},"chat_id",[1099,2049,1351],{"class":1326},[1099,2051,1863],{"class":1322},[1099,2053,1789],{"class":1326},[1099,2055,1868],{"class":1122},[1099,2057,1786],{"class":1322},[1099,2059,1789],{"class":1326},[1099,2061,2062],{"class":1122},"references",[1099,2064,1323],{"class":1322},[1099,2066,1786],{"class":1326},[1099,2068,1806],{"class":1569},[1099,2070,2071],{"class":1322}," chats",[1099,2073,1789],{"class":1326},[1099,2075,2000],{"class":1322},[1099,2077,1697],{"class":1326},[1099,2079,1691],{"class":1326},[1099,2081,2082],{"class":1332}," onDelete",[1099,2084,1336],{"class":1326},[1099,2086,1413],{"class":1326},[1099,2088,2089],{"class":1109},"cascade",[1099,2091,1351],{"class":1326},[1099,2093,1713],{"class":1326},[1099,2095,1863],{"class":1322},[1099,2097,1354],{"class":1326},[1099,2099,2101,2104,2106,2108,2110,2112,2115,2117,2119,2121,2124,2126,2128,2130,2133,2135,2137,2139,2142,2144,2146,2148,2151,2153,2156,2158,2160,2162,2164,2166],{"class":1101,"line":2100},17,[1099,2102,2103],{"class":1332},"  role",[1099,2105,1336],{"class":1326},[1099,2107,1700],{"class":1122},[1099,2109,1323],{"class":1322},[1099,2111,1351],{"class":1326},[1099,2113,2114],{"class":1109},"role",[1099,2116,1351],{"class":1326},[1099,2118,1697],{"class":1326},[1099,2120,1691],{"class":1326},[1099,2122,2123],{"class":1332}," enum",[1099,2125,1336],{"class":1326},[1099,2127,1440],{"class":1322},[1099,2129,1351],{"class":1326},[1099,2131,2132],{"class":1109},"user",[1099,2134,1351],{"class":1326},[1099,2136,1697],{"class":1326},[1099,2138,1413],{"class":1326},[1099,2140,2141],{"class":1109},"assistant",[1099,2143,1351],{"class":1326},[1099,2145,1697],{"class":1326},[1099,2147,1413],{"class":1326},[1099,2149,2150],{"class":1109},"system",[1099,2152,1351],{"class":1326},[1099,2154,2155],{"class":1322},"] ",[1099,2157,1458],{"class":1326},[1099,2159,1863],{"class":1322},[1099,2161,1789],{"class":1326},[1099,2163,1868],{"class":1122},[1099,2165,1786],{"class":1322},[1099,2167,1354],{"class":1326},[1099,2169,2171,2174,2176,2178,2180,2182,2185,2187,2189,2191,2193,2195,2197,2200,2202,2204,2206],{"class":1101,"line":2170},18,[1099,2172,2173],{"class":1332},"  parts",[1099,2175,1336],{"class":1326},[1099,2177,1700],{"class":1122},[1099,2179,1323],{"class":1322},[1099,2181,1351],{"class":1326},[1099,2183,2184],{"class":1109},"parts",[1099,2186,1351],{"class":1326},[1099,2188,1697],{"class":1326},[1099,2190,1691],{"class":1326},[1099,2192,1849],{"class":1332},[1099,2194,1336],{"class":1326},[1099,2196,1413],{"class":1326},[1099,2198,2199],{"class":1109},"json",[1099,2201,1351],{"class":1326},[1099,2203,1713],{"class":1326},[1099,2205,1863],{"class":1322},[1099,2207,1354],{"class":1326},[1099,2209,2211,2213,2215,2217,2219,2221,2223,2225,2227,2229,2231,2233,2235,2237,2239,2241,2243,2245,2247,2249,2251,2253,2255,2257],{"class":1101,"line":2210},19,[1099,2212,1837],{"class":1332},[1099,2214,1336],{"class":1326},[1099,2216,1705],{"class":1122},[1099,2218,1323],{"class":1322},[1099,2220,1846],{"class":1326},[1099,2222,1849],{"class":1332},[1099,2224,1336],{"class":1326},[1099,2226,1413],{"class":1326},[1099,2228,1856],{"class":1109},[1099,2230,1351],{"class":1326},[1099,2232,1713],{"class":1326},[1099,2234,1863],{"class":1322},[1099,2236,1789],{"class":1326},[1099,2238,1868],{"class":1122},[1099,2240,1786],{"class":1322},[1099,2242,1789],{"class":1326},[1099,2244,1799],{"class":1122},[1099,2246,1323],{"class":1322},[1099,2248,1786],{"class":1326},[1099,2250,1806],{"class":1569},[1099,2252,1883],{"class":1326},[1099,2254,1886],{"class":1122},[1099,2256,1817],{"class":1322},[1099,2258,1354],{"class":1326},[1099,2260,2262,2265,2268,2270],{"class":1101,"line":2261},20,[1099,2263,2264],{"class":1326},"},",[1099,2266,2267],{"class":1923}," table",[1099,2269,1806],{"class":1569},[1099,2271,1339],{"class":1322},[1099,2273,2275,2278,2280,2282,2285,2287,2289,2291,2294,2297,2299],{"class":1101,"line":2274},21,[1099,2276,2277],{"class":1122},"  index",[1099,2279,1323],{"class":1322},[1099,2281,1351],{"class":1326},[1099,2283,2284],{"class":1109},"messages_chat_id_idx",[1099,2286,1351],{"class":1326},[1099,2288,1863],{"class":1322},[1099,2290,1789],{"class":1326},[1099,2292,2293],{"class":1122},"on",[1099,2295,2296],{"class":1322},"(table",[1099,2298,1789],{"class":1326},[1099,2300,2301],{"class":1322},"chatId)\n",[1099,2303,2305],{"class":1101,"line":2304},22,[1099,2306,2307],{"class":1322},"])\n",[1099,2309,2311],{"class":1101,"line":2310},23,[1099,2312,1391],{"emptyLinePlaceholder":21},[1099,2314,2316,2318,2320,2323,2325,2327,2330,2332,2334,2337,2339,2341,2343],{"class":1101,"line":2315},24,[1099,2317,1313],{"class":1312},[1099,2319,1754],{"class":1569},[1099,2321,2322],{"class":1322}," messagesRelations ",[1099,2324,1573],{"class":1326},[1099,2326,1732],{"class":1122},[1099,2328,2329],{"class":1322},"(messages",[1099,2331,1697],{"class":1326},[1099,2333,1920],{"class":1326},[1099,2335,2336],{"class":1923}," one",[1099,2338,1927],{"class":1326},[1099,2340,1806],{"class":1569},[1099,2342,1932],{"class":1322},[1099,2344,1327],{"class":1326},[1099,2346,2348,2351,2353,2355,2357,2359],{"class":1101,"line":2347},25,[1099,2349,2350],{"class":1332},"  chat",[1099,2352,1336],{"class":1326},[1099,2354,2336],{"class":1122},[1099,2356,1915],{"class":1322},[1099,2358,1697],{"class":1326},[1099,2360,1402],{"class":1326},[1099,2362,2364,2367,2369,2372,2374,2377],{"class":1101,"line":2363},26,[1099,2365,2366],{"class":1332},"    fields",[1099,2368,1336],{"class":1326},[1099,2370,2371],{"class":1322}," [messages",[1099,2373,1789],{"class":1326},[1099,2375,2376],{"class":1322},"chatId]",[1099,2378,1354],{"class":1326},[1099,2380,2382,2385,2387,2390,2392],{"class":1101,"line":2381},27,[1099,2383,2384],{"class":1332},"    references",[1099,2386,1336],{"class":1326},[1099,2388,2389],{"class":1322}," [chats",[1099,2391,1789],{"class":1326},[1099,2393,2394],{"class":1322},"id]\n",[1099,2396,2398,2401],{"class":1101,"line":2397},28,[1099,2399,2400],{"class":1326},"  }",[1099,2402,1461],{"class":1322},[1099,2404,2406,2408],{"class":1101,"line":2405},29,[1099,2407,1458],{"class":1326},[1099,2409,1953],{"class":1322},[989,2411,2412],{},"Generate the database migrations from your schema:",[1090,2414,2416],{"className":1092,"code":2415,"language":1094,"meta":1095,"style":1095},"npx nuxt db generate\n",[1049,2417,2418],{"__ignoreMap":1095},[1099,2419,2420,2422,2425,2428],{"class":1101,"line":1102},[1099,2421,1106],{"class":1105},[1099,2423,2424],{"class":1109}," nuxt",[1099,2426,2427],{"class":1109}," db",[1099,2429,2430],{"class":1109}," generate\n",[2432,2433,2434],"tip",{},[989,2435,2436,2437,2440],{},"Migrations are automatically applied when you start the development server with ",[1049,2438,2439],{},"npx nuxt dev",". NuxtHub uses SQLite locally, so no external database is required during development.",[993,2442,2444],{"id":2443},"building-the-backend","Building the backend",[989,2446,2447,2448,1789],{},"This section covers integrating AI on the server. The following API endpoints handle chat creation, AI streaming, and data persistence using ",[1043,2449,2452],{"href":2450,"rel":2451},"https:\u002F\u002Fnitro.build",[1047],"Nitro",[1127,2454,2456],{"id":2455},"creating-a-chat","Creating a chat",[989,2458,2459,2460,2467],{},"First, create the endpoint that initializes a new chat and saves the first message to the database. This uses the ",[1043,2461,2464],{"href":2462,"rel":2463},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fui-message",[1047],[1049,2465,2466],{},"UIMessage"," type from the AI SDK:",[1299,2469,2470],{},[1090,2471,2474],{"className":1303,"code":2472,"filename":2473,"language":1305,"meta":1095,"style":1095},"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",[1049,2475,2476,2500,2523,2547,2567,2571,2595,2632,2656,2669,2673,2679,2730,2734,2739,2768,2784,2799,2813,2819,2823,2831],{"__ignoreMap":1095},[1099,2477,2478,2480,2482,2485,2487,2490,2492,2494,2496,2498],{"class":1101,"line":1102},[1099,2479,1688],{"class":1312},[1099,2481,1691],{"class":1326},[1099,2483,2484],{"class":1322}," defineEventHandler",[1099,2486,1697],{"class":1326},[1099,2488,2489],{"class":1322}," readValidatedBody",[1099,2491,1713],{"class":1326},[1099,2493,1716],{"class":1312},[1099,2495,1413],{"class":1326},[1099,2497,1127],{"class":1109},[1099,2499,1377],{"class":1326},[1099,2501,2502,2504,2507,2509,2512,2514,2516,2518,2521],{"class":1101,"line":1119},[1099,2503,1688],{"class":1312},[1099,2505,2506],{"class":1312}," type",[1099,2508,1691],{"class":1326},[1099,2510,2511],{"class":1322}," UIMessage",[1099,2513,1713],{"class":1326},[1099,2515,1716],{"class":1312},[1099,2517,1413],{"class":1326},[1099,2519,2520],{"class":1109},"ai",[1099,2522,1377],{"class":1326},[1099,2524,2525,2527,2529,2531,2533,2536,2538,2540,2542,2545],{"class":1101,"line":1342},[1099,2526,1688],{"class":1312},[1099,2528,1691],{"class":1326},[1099,2530,2427],{"class":1322},[1099,2532,1697],{"class":1326},[1099,2534,2535],{"class":1322}," schema",[1099,2537,1713],{"class":1326},[1099,2539,1716],{"class":1312},[1099,2541,1413],{"class":1326},[1099,2543,2544],{"class":1109},"hub:db",[1099,2546,1377],{"class":1326},[1099,2548,2549,2551,2553,2556,2558,2560,2562,2565],{"class":1101,"line":1357},[1099,2550,1688],{"class":1312},[1099,2552,1691],{"class":1326},[1099,2554,2555],{"class":1322}," z",[1099,2557,1713],{"class":1326},[1099,2559,1716],{"class":1312},[1099,2561,1413],{"class":1326},[1099,2563,2564],{"class":1109},"zod",[1099,2566,1377],{"class":1326},[1099,2568,2569],{"class":1101,"line":1369},[1099,2570,1391],{"emptyLinePlaceholder":21},[1099,2572,2573,2575,2577,2579,2581,2584,2586,2589,2591,2593],{"class":1101,"line":1380},[1099,2574,1313],{"class":1312},[1099,2576,1316],{"class":1312},[1099,2578,2484],{"class":1122},[1099,2580,1323],{"class":1322},[1099,2582,2583],{"class":1569},"async",[1099,2585,1932],{"class":1326},[1099,2587,2588],{"class":1923},"event",[1099,2590,1863],{"class":1326},[1099,2592,1806],{"class":1569},[1099,2594,1402],{"class":1326},[1099,2596,2597,2600,2602,2605,2607,2610,2613,2615,2617,2619,2621,2623,2625,2628,2630],{"class":1101,"line":1388},[1099,2598,2599],{"class":1569},"  const",[1099,2601,1691],{"class":1326},[1099,2603,2604],{"class":1322}," message",[1099,2606,1713],{"class":1326},[1099,2608,2609],{"class":1326}," =",[1099,2611,2612],{"class":1312}," await",[1099,2614,2489],{"class":1122},[1099,2616,1323],{"class":1332},[1099,2618,2588],{"class":1322},[1099,2620,1697],{"class":1326},[1099,2622,2555],{"class":1322},[1099,2624,1789],{"class":1326},[1099,2626,2627],{"class":1122},"object",[1099,2629,1323],{"class":1332},[1099,2631,1327],{"class":1326},[1099,2633,2634,2637,2639,2641,2643,2646,2648,2650,2653],{"class":1101,"line":1394},[1099,2635,2636],{"class":1332},"    message",[1099,2638,1336],{"class":1326},[1099,2640,2555],{"class":1322},[1099,2642,1789],{"class":1326},[1099,2644,2645],{"class":1122},"custom",[1099,2647,1541],{"class":1326},[1099,2649,2466],{"class":1105},[1099,2651,2652],{"class":1326},">",[1099,2654,2655],{"class":1332},"()\n",[1099,2657,2658,2660,2662,2664,2667],{"class":1101,"line":1405},[1099,2659,2400],{"class":1326},[1099,2661,1863],{"class":1332},[1099,2663,1789],{"class":1326},[1099,2665,2666],{"class":1322},"parse",[1099,2668,1461],{"class":1332},[1099,2670,2671],{"class":1101,"line":1421},[1099,2672,1391],{"emptyLinePlaceholder":21},[1099,2674,2675],{"class":1101,"line":1427},[1099,2676,2678],{"class":2677},"sHwdD","  \u002F\u002F Create a new chat\n",[1099,2680,2681,2683,2685,2687,2689,2691,2693,2695,2697,2700,2702,2705,2707,2709,2711,2713,2716,2718,2721,2723,2725,2728],{"class":1101,"line":1432},[1099,2682,2599],{"class":1569},[1099,2684,1440],{"class":1326},[1099,2686,262],{"class":1322},[1099,2688,1450],{"class":1326},[1099,2690,2609],{"class":1326},[1099,2692,2612],{"class":1312},[1099,2694,2427],{"class":1322},[1099,2696,1789],{"class":1326},[1099,2698,2699],{"class":1122},"insert",[1099,2701,1323],{"class":1332},[1099,2703,2704],{"class":1322},"schema",[1099,2706,1789],{"class":1326},[1099,2708,1768],{"class":1322},[1099,2710,1863],{"class":1332},[1099,2712,1789],{"class":1326},[1099,2714,2715],{"class":1122},"values",[1099,2717,1323],{"class":1332},[1099,2719,2720],{"class":1326},"{}",[1099,2722,1863],{"class":1332},[1099,2724,1789],{"class":1326},[1099,2726,2727],{"class":1122},"returning",[1099,2729,2655],{"class":1332},[1099,2731,2732],{"class":1101,"line":1455},[1099,2733,1391],{"emptyLinePlaceholder":21},[1099,2735,2736],{"class":1101,"line":1960},[1099,2737,2738],{"class":2677},"  \u002F\u002F Save the first user message\n",[1099,2740,2741,2744,2746,2748,2750,2752,2754,2756,2758,2760,2762,2764,2766],{"class":1101,"line":1987},[1099,2742,2743],{"class":1312},"  await",[1099,2745,2427],{"class":1322},[1099,2747,1789],{"class":1326},[1099,2749,2699],{"class":1122},[1099,2751,1323],{"class":1332},[1099,2753,2704],{"class":1322},[1099,2755,1789],{"class":1326},[1099,2757,1978],{"class":1322},[1099,2759,1863],{"class":1332},[1099,2761,1789],{"class":1326},[1099,2763,2715],{"class":1122},[1099,2765,1323],{"class":1332},[1099,2767,1327],{"class":1326},[1099,2769,2770,2773,2775,2778,2780,2782],{"class":1101,"line":2033},[1099,2771,2772],{"class":1332},"    chatId",[1099,2774,1336],{"class":1326},[1099,2776,2777],{"class":1322}," chat",[1099,2779,1789],{"class":1326},[1099,2781,2000],{"class":1322},[1099,2783,1354],{"class":1326},[1099,2785,2786,2789,2791,2793,2795,2797],{"class":1101,"line":2100},[1099,2787,2788],{"class":1332},"    role",[1099,2790,1336],{"class":1326},[1099,2792,1413],{"class":1326},[1099,2794,2132],{"class":1109},[1099,2796,1351],{"class":1326},[1099,2798,1354],{"class":1326},[1099,2800,2801,2804,2806,2808,2810],{"class":1101,"line":2170},[1099,2802,2803],{"class":1332},"    parts",[1099,2805,1336],{"class":1326},[1099,2807,2604],{"class":1322},[1099,2809,1789],{"class":1326},[1099,2811,2812],{"class":1322},"parts\n",[1099,2814,2815,2817],{"class":1101,"line":2210},[1099,2816,2400],{"class":1326},[1099,2818,1461],{"class":1332},[1099,2820,2821],{"class":1101,"line":2261},[1099,2822,1391],{"emptyLinePlaceholder":21},[1099,2824,2825,2828],{"class":1101,"line":2274},[1099,2826,2827],{"class":1312},"  return",[1099,2829,2830],{"class":1322}," chat\n",[1099,2832,2833,2835],{"class":1101,"line":2304},[1099,2834,1458],{"class":1326},[1099,2836,1461],{"class":1322},[1127,2838,2840],{"id":2839},"streaming-ai-responses","Streaming AI responses",[989,2842,2843,2844,2851,2852,2859,2860,2867],{},"Next, create the endpoint that handles the AI conversation. This endpoint uses ",[1043,2845,2848],{"href":2846,"rel":2847},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-core\u002Fstream-text",[1047],[1049,2849,2850],{},"streamText",", ",[1043,2853,2856],{"href":2854,"rel":2855},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream",[1047],[1049,2857,2858],{},"createUIMessageStream",", and ",[1043,2861,2864],{"href":2862,"rel":2863},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream-response",[1047],[1049,2865,2866],{},"createUIMessageStreamResponse"," from the AI SDK:",[1299,2869,2870],{},[1676,2871,2872],{},[1090,2873,2876],{"className":1303,"code":2874,"filename":2875,"language":1305,"meta":1095,"style":1095},"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",[1049,2877,2878,2910,2929,2951,2969,2975,2982,2989,2996,3003,3008,3020,3040,3044,3061,3065,3076,3110,3139,3170,3175,3179,3201,3234,3250,3262,3266,3309,3369,3383,3400,3432,3445,3450,3456,3487,3531,3538,3543,3561,3600,3606,3611,3617,3637,3665,3677,3696,3724,3731,3736,3802,3807,3812,3818,3847,3888,3917,3929,3945,3959,3966,3971,3976,3982,3999,4021,4039,4047,4064,4085,4095,4105,4115,4132,4143,4149,4155,4165,4175,4189,4204,4209,4214,4224,4240,4255,4261,4267,4275,4280,4286,4306,4321,4338,4361,4372,4380,4386,4391,4414,4420,4440,4446,4492,4508,4541,4555,4563,4569,4576,4581,4599],{"__ignoreMap":1095},[1099,2879,2880,2882,2884,2887,2889,2891,2893,2896,2898,2900,2902,2904,2906,2908],{"class":1101,"line":1102},[1099,2881,1688],{"class":1312},[1099,2883,1691],{"class":1326},[1099,2885,2886],{"class":1322}," createError",[1099,2888,1697],{"class":1326},[1099,2890,2484],{"class":1322},[1099,2892,1697],{"class":1326},[1099,2894,2895],{"class":1322}," getValidatedRouterParams",[1099,2897,1697],{"class":1326},[1099,2899,2489],{"class":1322},[1099,2901,1713],{"class":1326},[1099,2903,1716],{"class":1312},[1099,2905,1413],{"class":1326},[1099,2907,1127],{"class":1109},[1099,2909,1377],{"class":1326},[1099,2911,2912,2914,2916,2919,2921,2923,2925,2927],{"class":1101,"line":1119},[1099,2913,1688],{"class":1312},[1099,2915,1691],{"class":1326},[1099,2917,2918],{"class":1322}," eq",[1099,2920,1713],{"class":1326},[1099,2922,1716],{"class":1312},[1099,2924,1413],{"class":1326},[1099,2926,1741],{"class":1109},[1099,2928,1377],{"class":1326},[1099,2930,2931,2933,2935,2937,2939,2941,2943,2945,2947,2949],{"class":1101,"line":1342},[1099,2932,1688],{"class":1312},[1099,2934,1691],{"class":1326},[1099,2936,2427],{"class":1322},[1099,2938,1697],{"class":1326},[1099,2940,2535],{"class":1322},[1099,2942,1713],{"class":1326},[1099,2944,1716],{"class":1312},[1099,2946,1413],{"class":1326},[1099,2948,2544],{"class":1109},[1099,2950,1377],{"class":1326},[1099,2952,2953,2955,2957,2959,2961,2963,2965,2967],{"class":1101,"line":1357},[1099,2954,1688],{"class":1312},[1099,2956,1691],{"class":1326},[1099,2958,2555],{"class":1322},[1099,2960,1713],{"class":1326},[1099,2962,1716],{"class":1312},[1099,2964,1413],{"class":1326},[1099,2966,2564],{"class":1109},[1099,2968,1377],{"class":1326},[1099,2970,2971,2973],{"class":1101,"line":1369},[1099,2972,1688],{"class":1312},[1099,2974,1402],{"class":1326},[1099,2976,2977,2980],{"class":1101,"line":1380},[1099,2978,2979],{"class":1322},"  convertToModelMessages",[1099,2981,1354],{"class":1326},[1099,2983,2984,2987],{"class":1101,"line":1388},[1099,2985,2986],{"class":1322},"  createUIMessageStream",[1099,2988,1354],{"class":1326},[1099,2990,2991,2994],{"class":1101,"line":1394},[1099,2992,2993],{"class":1322},"  createUIMessageStreamResponse",[1099,2995,1354],{"class":1326},[1099,2997,2998,3001],{"class":1101,"line":1405},[1099,2999,3000],{"class":1322},"  generateText",[1099,3002,1354],{"class":1326},[1099,3004,3005],{"class":1101,"line":1421},[1099,3006,3007],{"class":1322},"  streamText\n",[1099,3009,3010,3012,3014,3016,3018],{"class":1101,"line":1427},[1099,3011,1458],{"class":1326},[1099,3013,1716],{"class":1312},[1099,3015,1413],{"class":1326},[1099,3017,2520],{"class":1109},[1099,3019,1377],{"class":1326},[1099,3021,3022,3024,3026,3028,3030,3032,3034,3036,3038],{"class":1101,"line":1432},[1099,3023,1688],{"class":1312},[1099,3025,2506],{"class":1312},[1099,3027,1691],{"class":1326},[1099,3029,2511],{"class":1322},[1099,3031,1713],{"class":1326},[1099,3033,1716],{"class":1312},[1099,3035,1413],{"class":1326},[1099,3037,2520],{"class":1109},[1099,3039,1377],{"class":1326},[1099,3041,3042],{"class":1101,"line":1455},[1099,3043,1391],{"emptyLinePlaceholder":21},[1099,3045,3046,3049,3052,3054,3056,3059],{"class":1101,"line":1960},[1099,3047,3048],{"class":1569},"const",[1099,3050,3051],{"class":1322}," DEFAULT_MODEL ",[1099,3053,1573],{"class":1326},[1099,3055,1413],{"class":1326},[1099,3057,3058],{"class":1109},"anthropic\u002Fclaude-haiku-4.5",[1099,3060,1377],{"class":1326},[1099,3062,3063],{"class":1101,"line":1987},[1099,3064,1391],{"emptyLinePlaceholder":21},[1099,3066,3067,3069,3072,3074],{"class":1101,"line":2033},[1099,3068,3048],{"class":1569},[1099,3070,3071],{"class":1322}," MODELS ",[1099,3073,1573],{"class":1326},[1099,3075,1339],{"class":1322},[1099,3077,3078,3081,3084,3086,3088,3091,3093,3095,3098,3100,3102,3105,3107],{"class":1101,"line":2100},[1099,3079,3080],{"class":1326},"  {",[1099,3082,3083],{"class":1332}," value",[1099,3085,1336],{"class":1326},[1099,3087,1413],{"class":1326},[1099,3089,3090],{"class":1109},"openai\u002Fgpt-5-nano",[1099,3092,1351],{"class":1326},[1099,3094,1697],{"class":1326},[1099,3096,3097],{"class":1332}," label",[1099,3099,1336],{"class":1326},[1099,3101,1413],{"class":1326},[1099,3103,3104],{"class":1109},"GPT-5 Nano",[1099,3106,1351],{"class":1326},[1099,3108,3109],{"class":1326}," },\n",[1099,3111,3112,3114,3116,3118,3120,3122,3124,3126,3128,3130,3132,3135,3137],{"class":1101,"line":2170},[1099,3113,3080],{"class":1326},[1099,3115,3083],{"class":1332},[1099,3117,1336],{"class":1326},[1099,3119,1413],{"class":1326},[1099,3121,3058],{"class":1109},[1099,3123,1351],{"class":1326},[1099,3125,1697],{"class":1326},[1099,3127,3097],{"class":1332},[1099,3129,1336],{"class":1326},[1099,3131,1413],{"class":1326},[1099,3133,3134],{"class":1109},"Claude Haiku 4.5",[1099,3136,1351],{"class":1326},[1099,3138,3109],{"class":1326},[1099,3140,3141,3143,3145,3147,3149,3152,3154,3156,3158,3160,3162,3165,3167],{"class":1101,"line":2210},[1099,3142,3080],{"class":1326},[1099,3144,3083],{"class":1332},[1099,3146,1336],{"class":1326},[1099,3148,1413],{"class":1326},[1099,3150,3151],{"class":1109},"google\u002Fgemini-3-flash",[1099,3153,1351],{"class":1326},[1099,3155,1697],{"class":1326},[1099,3157,3097],{"class":1332},[1099,3159,1336],{"class":1326},[1099,3161,1413],{"class":1326},[1099,3163,3164],{"class":1109},"Gemini 3 Flash",[1099,3166,1351],{"class":1326},[1099,3168,3169],{"class":1326}," }\n",[1099,3171,3172],{"class":1101,"line":2261},[1099,3173,3174],{"class":1322},"]\n",[1099,3176,3177],{"class":1101,"line":2274},[1099,3178,1391],{"emptyLinePlaceholder":21},[1099,3180,3181,3183,3185,3187,3189,3191,3193,3195,3197,3199],{"class":1101,"line":2304},[1099,3182,1313],{"class":1312},[1099,3184,1316],{"class":1312},[1099,3186,2484],{"class":1122},[1099,3188,1323],{"class":1322},[1099,3190,2583],{"class":1569},[1099,3192,1932],{"class":1326},[1099,3194,2588],{"class":1923},[1099,3196,1863],{"class":1326},[1099,3198,1806],{"class":1569},[1099,3200,1402],{"class":1326},[1099,3202,3203,3205,3207,3210,3212,3214,3216,3218,3220,3222,3224,3226,3228,3230,3232],{"class":1101,"line":2310},[1099,3204,2599],{"class":1569},[1099,3206,1691],{"class":1326},[1099,3208,3209],{"class":1322}," id",[1099,3211,1713],{"class":1326},[1099,3213,2609],{"class":1326},[1099,3215,2612],{"class":1312},[1099,3217,2895],{"class":1122},[1099,3219,1323],{"class":1332},[1099,3221,2588],{"class":1322},[1099,3223,1697],{"class":1326},[1099,3225,2555],{"class":1322},[1099,3227,1789],{"class":1326},[1099,3229,2627],{"class":1122},[1099,3231,1323],{"class":1332},[1099,3233,1327],{"class":1326},[1099,3235,3236,3239,3241,3243,3245,3248],{"class":1101,"line":2315},[1099,3237,3238],{"class":1332},"    id",[1099,3240,1336],{"class":1326},[1099,3242,2555],{"class":1322},[1099,3244,1789],{"class":1326},[1099,3246,3247],{"class":1122},"string",[1099,3249,2655],{"class":1332},[1099,3251,3252,3254,3256,3258,3260],{"class":1101,"line":2347},[1099,3253,2400],{"class":1326},[1099,3255,1863],{"class":1332},[1099,3257,1789],{"class":1326},[1099,3259,2666],{"class":1322},[1099,3261,1461],{"class":1332},[1099,3263,3264],{"class":1101,"line":2363},[1099,3265,1391],{"emptyLinePlaceholder":21},[1099,3267,3268,3270,3272,3275,3277,3280,3282,3285,3287,3289,3291,3293,3295,3297,3299,3301,3303,3305,3307],{"class":1101,"line":2381},[1099,3269,2599],{"class":1569},[1099,3271,1691],{"class":1326},[1099,3273,3274],{"class":1322}," model",[1099,3276,2609],{"class":1326},[1099,3278,3279],{"class":1322}," DEFAULT_MODEL",[1099,3281,1697],{"class":1326},[1099,3283,3284],{"class":1322}," messages",[1099,3286,1713],{"class":1326},[1099,3288,2609],{"class":1326},[1099,3290,2612],{"class":1312},[1099,3292,2489],{"class":1122},[1099,3294,1323],{"class":1332},[1099,3296,2588],{"class":1322},[1099,3298,1697],{"class":1326},[1099,3300,2555],{"class":1322},[1099,3302,1789],{"class":1326},[1099,3304,2627],{"class":1122},[1099,3306,1323],{"class":1332},[1099,3308,1327],{"class":1326},[1099,3310,3311,3314,3316,3318,3320,3322,3324,3326,3329,3331,3334,3336,3339,3341,3344,3346,3349,3351,3354,3356,3358,3361,3363,3365,3367],{"class":1101,"line":2397},[1099,3312,3313],{"class":1332},"    model",[1099,3315,1336],{"class":1326},[1099,3317,2555],{"class":1322},[1099,3319,1789],{"class":1326},[1099,3321,3247],{"class":1122},[1099,3323,1786],{"class":1332},[1099,3325,1789],{"class":1326},[1099,3327,3328],{"class":1122},"refine",[1099,3330,1323],{"class":1332},[1099,3332,3333],{"class":1923},"value",[1099,3335,1806],{"class":1569},[1099,3337,3338],{"class":1322}," MODELS",[1099,3340,1789],{"class":1326},[1099,3342,3343],{"class":1122},"some",[1099,3345,1323],{"class":1332},[1099,3347,3348],{"class":1923},"m",[1099,3350,1806],{"class":1569},[1099,3352,3353],{"class":1322}," m",[1099,3355,1789],{"class":1326},[1099,3357,3333],{"class":1322},[1099,3359,3360],{"class":1326}," ===",[1099,3362,3083],{"class":1322},[1099,3364,1863],{"class":1332},[1099,3366,1697],{"class":1326},[1099,3368,1402],{"class":1326},[1099,3370,3371,3374,3376,3378,3381],{"class":1101,"line":2405},[1099,3372,3373],{"class":1332},"      message",[1099,3375,1336],{"class":1326},[1099,3377,1413],{"class":1326},[1099,3379,3380],{"class":1109},"Invalid model",[1099,3382,1377],{"class":1326},[1099,3384,3386,3389,3391,3393,3396,3398],{"class":1101,"line":3385},30,[1099,3387,3388],{"class":1326},"    }",[1099,3390,1863],{"class":1332},[1099,3392,1789],{"class":1326},[1099,3394,3395],{"class":1122},"optional",[1099,3397,1786],{"class":1332},[1099,3399,1354],{"class":1326},[1099,3401,3403,3406,3408,3410,3412,3415,3417,3420,3422,3424,3426,3428,3430],{"class":1101,"line":3402},31,[1099,3404,3405],{"class":1332},"    messages",[1099,3407,1336],{"class":1326},[1099,3409,2555],{"class":1322},[1099,3411,1789],{"class":1326},[1099,3413,3414],{"class":1122},"array",[1099,3416,1323],{"class":1332},[1099,3418,3419],{"class":1322},"z",[1099,3421,1789],{"class":1326},[1099,3423,2645],{"class":1122},[1099,3425,1541],{"class":1326},[1099,3427,2466],{"class":1105},[1099,3429,2652],{"class":1326},[1099,3431,1889],{"class":1332},[1099,3433,3435,3437,3439,3441,3443],{"class":1101,"line":3434},32,[1099,3436,2400],{"class":1326},[1099,3438,1863],{"class":1332},[1099,3440,1789],{"class":1326},[1099,3442,2666],{"class":1322},[1099,3444,1461],{"class":1332},[1099,3446,3448],{"class":1101,"line":3447},33,[1099,3449,1391],{"emptyLinePlaceholder":21},[1099,3451,3453],{"class":1101,"line":3452},34,[1099,3454,3455],{"class":2677},"  \u002F\u002F Fetch the chat from the database\n",[1099,3457,3459,3461,3463,3465,3467,3469,3471,3474,3476,3478,3480,3483,3485],{"class":1101,"line":3458},35,[1099,3460,2599],{"class":1569},[1099,3462,2777],{"class":1322},[1099,3464,2609],{"class":1326},[1099,3466,2612],{"class":1312},[1099,3468,2427],{"class":1322},[1099,3470,1789],{"class":1326},[1099,3472,3473],{"class":1322},"query",[1099,3475,1789],{"class":1326},[1099,3477,1768],{"class":1322},[1099,3479,1789],{"class":1326},[1099,3481,3482],{"class":1122},"findFirst",[1099,3484,1323],{"class":1332},[1099,3486,1327],{"class":1326},[1099,3488,3490,3493,3495,3497,3499,3501,3503,3505,3507,3509,3511,3513,3515,3517,3519,3521,3523,3526,3529],{"class":1101,"line":3489},36,[1099,3491,3492],{"class":1122},"    where",[1099,3494,1336],{"class":1326},[1099,3496,1932],{"class":1326},[1099,3498,262],{"class":1923},[1099,3500,1697],{"class":1326},[1099,3502,1691],{"class":1326},[1099,3504,2918],{"class":1923},[1099,3506,1927],{"class":1326},[1099,3508,1806],{"class":1569},[1099,3510,2918],{"class":1122},[1099,3512,1323],{"class":1332},[1099,3514,262],{"class":1322},[1099,3516,1789],{"class":1326},[1099,3518,2000],{"class":1322},[1099,3520,1697],{"class":1326},[1099,3522,3209],{"class":1322},[1099,3524,3525],{"class":1312}," as",[1099,3527,3528],{"class":1105}," string",[1099,3530,1461],{"class":1332},[1099,3532,3534,3536],{"class":1101,"line":3533},37,[1099,3535,2400],{"class":1326},[1099,3537,1461],{"class":1332},[1099,3539,3541],{"class":1101,"line":3540},38,[1099,3542,1391],{"emptyLinePlaceholder":21},[1099,3544,3546,3549,3551,3554,3556,3559],{"class":1101,"line":3545},39,[1099,3547,3548],{"class":1312},"  if",[1099,3550,1932],{"class":1332},[1099,3552,3553],{"class":1326},"!",[1099,3555,262],{"class":1322},[1099,3557,3558],{"class":1332},") ",[1099,3560,1327],{"class":1326},[1099,3562,3564,3567,3569,3571,3573,3576,3578,3582,3584,3587,3589,3591,3594,3596,3598],{"class":1101,"line":3563},40,[1099,3565,3566],{"class":1312},"    throw",[1099,3568,2886],{"class":1122},[1099,3570,1323],{"class":1332},[1099,3572,1846],{"class":1326},[1099,3574,3575],{"class":1332}," statusCode",[1099,3577,1336],{"class":1326},[1099,3579,3581],{"class":3580},"sbssI"," 404",[1099,3583,1697],{"class":1326},[1099,3585,3586],{"class":1332}," statusMessage",[1099,3588,1336],{"class":1326},[1099,3590,1413],{"class":1326},[1099,3592,3593],{"class":1109},"Chat not found",[1099,3595,1351],{"class":1326},[1099,3597,1713],{"class":1326},[1099,3599,1461],{"class":1332},[1099,3601,3603],{"class":1101,"line":3602},41,[1099,3604,3605],{"class":1326},"  }\n",[1099,3607,3609],{"class":1101,"line":3608},42,[1099,3610,1391],{"emptyLinePlaceholder":21},[1099,3612,3614],{"class":1101,"line":3613},43,[1099,3615,3616],{"class":2677},"  \u002F\u002F Generate a title for the chat if it doesn't have one\n",[1099,3618,3620,3622,3624,3626,3628,3630,3633,3635],{"class":1101,"line":3619},44,[1099,3621,3548],{"class":1312},[1099,3623,1932],{"class":1332},[1099,3625,3553],{"class":1326},[1099,3627,262],{"class":1322},[1099,3629,1789],{"class":1326},[1099,3631,3632],{"class":1322},"title",[1099,3634,3558],{"class":1332},[1099,3636,1327],{"class":1326},[1099,3638,3640,3643,3645,3647,3649,3652,3654,3656,3658,3661,3663],{"class":1101,"line":3639},45,[1099,3641,3642],{"class":1569},"    const",[1099,3644,1691],{"class":1326},[1099,3646,1700],{"class":1332},[1099,3648,1336],{"class":1326},[1099,3650,3651],{"class":1322}," title",[1099,3653,1713],{"class":1326},[1099,3655,2609],{"class":1326},[1099,3657,2612],{"class":1312},[1099,3659,3660],{"class":1122}," generateText",[1099,3662,1323],{"class":1332},[1099,3664,1327],{"class":1326},[1099,3666,3668,3671,3673,3675],{"class":1101,"line":3667},46,[1099,3669,3670],{"class":1332},"      model",[1099,3672,1336],{"class":1326},[1099,3674,3279],{"class":1322},[1099,3676,1354],{"class":1326},[1099,3678,3680,3683,3685,3688,3691,3694],{"class":1101,"line":3679},47,[1099,3681,3682],{"class":1332},"      system",[1099,3684,1336],{"class":1326},[1099,3686,3687],{"class":1326}," `",[1099,3689,3690],{"class":1109},"Generate a short title (max 30 characters) based on the user's message. No quotes or punctuation.",[1099,3692,3693],{"class":1326},"`",[1099,3695,1354],{"class":1326},[1099,3697,3699,3702,3704,3707,3709,3712,3714,3716,3719,3722],{"class":1101,"line":3698},48,[1099,3700,3701],{"class":1332},"      prompt",[1099,3703,1336],{"class":1326},[1099,3705,3706],{"class":1322}," JSON",[1099,3708,1789],{"class":1326},[1099,3710,3711],{"class":1122},"stringify",[1099,3713,1323],{"class":1332},[1099,3715,1978],{"class":1322},[1099,3717,3718],{"class":1332},"[",[1099,3720,3721],{"class":3580},"0",[1099,3723,2307],{"class":1332},[1099,3725,3727,3729],{"class":1101,"line":3726},49,[1099,3728,3388],{"class":1326},[1099,3730,1461],{"class":1332},[1099,3732,3734],{"class":1101,"line":3733},50,[1099,3735,1391],{"emptyLinePlaceholder":21},[1099,3737,3739,3742,3744,3746,3749,3751,3753,3755,3757,3759,3761,3764,3766,3768,3770,3772,3774,3776,3779,3781,3784,3786,3788,3790,3792,3794,3796,3798,3800],{"class":1101,"line":3738},51,[1099,3740,3741],{"class":1312},"    await",[1099,3743,2427],{"class":1322},[1099,3745,1789],{"class":1326},[1099,3747,3748],{"class":1122},"update",[1099,3750,1323],{"class":1332},[1099,3752,2704],{"class":1322},[1099,3754,1789],{"class":1326},[1099,3756,1768],{"class":1322},[1099,3758,1863],{"class":1332},[1099,3760,1789],{"class":1326},[1099,3762,3763],{"class":1122},"set",[1099,3765,1323],{"class":1332},[1099,3767,1846],{"class":1326},[1099,3769,3651],{"class":1322},[1099,3771,1713],{"class":1326},[1099,3773,1863],{"class":1332},[1099,3775,1789],{"class":1326},[1099,3777,3778],{"class":1122},"where",[1099,3780,1323],{"class":1332},[1099,3782,3783],{"class":1122},"eq",[1099,3785,1323],{"class":1332},[1099,3787,2704],{"class":1322},[1099,3789,1789],{"class":1326},[1099,3791,1768],{"class":1322},[1099,3793,1789],{"class":1326},[1099,3795,2000],{"class":1322},[1099,3797,1697],{"class":1326},[1099,3799,3209],{"class":1322},[1099,3801,1953],{"class":1332},[1099,3803,3805],{"class":1101,"line":3804},52,[1099,3806,3605],{"class":1326},[1099,3808,3810],{"class":1101,"line":3809},53,[1099,3811,1391],{"emptyLinePlaceholder":21},[1099,3813,3815],{"class":1101,"line":3814},54,[1099,3816,3817],{"class":2677},"  \u002F\u002F Save the user message if it's a follow-up\n",[1099,3819,3821,3823,3826,3828,3830,3832,3834,3836,3839,3842,3845],{"class":1101,"line":3820},55,[1099,3822,2599],{"class":1569},[1099,3824,3825],{"class":1322}," lastMessage",[1099,3827,2609],{"class":1326},[1099,3829,3284],{"class":1322},[1099,3831,3718],{"class":1332},[1099,3833,1978],{"class":1322},[1099,3835,1789],{"class":1326},[1099,3837,3838],{"class":1322},"length",[1099,3840,3841],{"class":1326}," -",[1099,3843,3844],{"class":3580}," 1",[1099,3846,3174],{"class":1332},[1099,3848,3850,3852,3854,3857,3860,3862,3864,3866,3868,3870,3873,3875,3877,3879,3882,3884,3886],{"class":1101,"line":3849},56,[1099,3851,3548],{"class":1312},[1099,3853,1932],{"class":1332},[1099,3855,3856],{"class":1322},"lastMessage",[1099,3858,3859],{"class":1326},"?.",[1099,3861,2114],{"class":1322},[1099,3863,3360],{"class":1326},[1099,3865,1413],{"class":1326},[1099,3867,2132],{"class":1109},[1099,3869,1351],{"class":1326},[1099,3871,3872],{"class":1326}," &&",[1099,3874,3284],{"class":1322},[1099,3876,1789],{"class":1326},[1099,3878,3838],{"class":1322},[1099,3880,3881],{"class":1326}," >",[1099,3883,3844],{"class":3580},[1099,3885,3558],{"class":1332},[1099,3887,1327],{"class":1326},[1099,3889,3891,3893,3895,3897,3899,3901,3903,3905,3907,3909,3911,3913,3915],{"class":1101,"line":3890},57,[1099,3892,3741],{"class":1312},[1099,3894,2427],{"class":1322},[1099,3896,1789],{"class":1326},[1099,3898,2699],{"class":1122},[1099,3900,1323],{"class":1332},[1099,3902,2704],{"class":1322},[1099,3904,1789],{"class":1326},[1099,3906,1978],{"class":1322},[1099,3908,1863],{"class":1332},[1099,3910,1789],{"class":1326},[1099,3912,2715],{"class":1122},[1099,3914,1323],{"class":1332},[1099,3916,1327],{"class":1326},[1099,3918,3920,3923,3925,3927],{"class":1101,"line":3919},58,[1099,3921,3922],{"class":1332},"      chatId",[1099,3924,1336],{"class":1326},[1099,3926,3209],{"class":1322},[1099,3928,1354],{"class":1326},[1099,3930,3932,3935,3937,3939,3941,3943],{"class":1101,"line":3931},59,[1099,3933,3934],{"class":1332},"      role",[1099,3936,1336],{"class":1326},[1099,3938,1413],{"class":1326},[1099,3940,2132],{"class":1109},[1099,3942,1351],{"class":1326},[1099,3944,1354],{"class":1326},[1099,3946,3948,3951,3953,3955,3957],{"class":1101,"line":3947},60,[1099,3949,3950],{"class":1332},"      parts",[1099,3952,1336],{"class":1326},[1099,3954,3825],{"class":1322},[1099,3956,1789],{"class":1326},[1099,3958,2812],{"class":1322},[1099,3960,3962,3964],{"class":1101,"line":3961},61,[1099,3963,3388],{"class":1326},[1099,3965,1461],{"class":1332},[1099,3967,3969],{"class":1101,"line":3968},62,[1099,3970,3605],{"class":1326},[1099,3972,3974],{"class":1101,"line":3973},63,[1099,3975,1391],{"emptyLinePlaceholder":21},[1099,3977,3979],{"class":1101,"line":3978},64,[1099,3980,3981],{"class":2677},"  \u002F\u002F Create the streaming response\n",[1099,3983,3985,3987,3990,3992,3995,3997],{"class":1101,"line":3984},65,[1099,3986,2599],{"class":1569},[1099,3988,3989],{"class":1322}," stream",[1099,3991,2609],{"class":1326},[1099,3993,3994],{"class":1122}," createUIMessageStream",[1099,3996,1323],{"class":1332},[1099,3998,1327],{"class":1326},[1099,4000,4002,4005,4007,4010,4012,4015,4017,4019],{"class":1101,"line":4001},66,[1099,4003,4004],{"class":1122},"    execute",[1099,4006,1336],{"class":1326},[1099,4008,4009],{"class":1569}," async",[1099,4011,1920],{"class":1326},[1099,4013,4014],{"class":1923}," writer",[1099,4016,1927],{"class":1326},[1099,4018,1806],{"class":1569},[1099,4020,1402],{"class":1326},[1099,4022,4024,4027,4030,4032,4035,4037],{"class":1101,"line":4023},67,[1099,4025,4026],{"class":1569},"      const",[1099,4028,4029],{"class":1322}," result",[1099,4031,2609],{"class":1326},[1099,4033,4034],{"class":1122}," streamText",[1099,4036,1323],{"class":1332},[1099,4038,1327],{"class":1326},[1099,4040,4042,4045],{"class":1101,"line":4041},68,[1099,4043,4044],{"class":1322},"        model",[1099,4046,1354],{"class":1326},[1099,4048,4050,4053,4055,4057,4060,4062],{"class":1101,"line":4049},69,[1099,4051,4052],{"class":1332},"        system",[1099,4054,1336],{"class":1326},[1099,4056,3687],{"class":1326},[1099,4058,4059],{"class":1109},"You are a helpful AI assistant. Be concise and friendly.",[1099,4061,3693],{"class":1326},[1099,4063,1354],{"class":1326},[1099,4065,4067,4070,4072,4074,4077,4079,4081,4083],{"class":1101,"line":4066},70,[1099,4068,4069],{"class":1332},"        messages",[1099,4071,1336],{"class":1326},[1099,4073,2612],{"class":1312},[1099,4075,4076],{"class":1122}," convertToModelMessages",[1099,4078,1323],{"class":1332},[1099,4080,1978],{"class":1322},[1099,4082,1863],{"class":1332},[1099,4084,1354],{"class":1326},[1099,4086,4088,4091,4093],{"class":1101,"line":4087},71,[1099,4089,4090],{"class":1332},"        providerOptions",[1099,4092,1336],{"class":1326},[1099,4094,1402],{"class":1326},[1099,4096,4098,4101,4103],{"class":1101,"line":4097},72,[1099,4099,4100],{"class":1332},"          anthropic",[1099,4102,1336],{"class":1326},[1099,4104,1402],{"class":1326},[1099,4106,4108,4111,4113],{"class":1101,"line":4107},73,[1099,4109,4110],{"class":1332},"            thinking",[1099,4112,1336],{"class":1326},[1099,4114,1402],{"class":1326},[1099,4116,4118,4121,4123,4125,4128,4130],{"class":1101,"line":4117},74,[1099,4119,4120],{"class":1332},"              type",[1099,4122,1336],{"class":1326},[1099,4124,1413],{"class":1326},[1099,4126,4127],{"class":1109},"enabled",[1099,4129,1351],{"class":1326},[1099,4131,1354],{"class":1326},[1099,4133,4135,4138,4140],{"class":1101,"line":4134},75,[1099,4136,4137],{"class":1332},"              budgetTokens",[1099,4139,1336],{"class":1326},[1099,4141,4142],{"class":3580}," 2048\n",[1099,4144,4146],{"class":1101,"line":4145},76,[1099,4147,4148],{"class":1326},"            }\n",[1099,4150,4152],{"class":1101,"line":4151},77,[1099,4153,4154],{"class":1326},"          },\n",[1099,4156,4158,4161,4163],{"class":1101,"line":4157},78,[1099,4159,4160],{"class":1332},"          google",[1099,4162,1336],{"class":1326},[1099,4164,1402],{"class":1326},[1099,4166,4168,4171,4173],{"class":1101,"line":4167},79,[1099,4169,4170],{"class":1332},"            thinkingConfig",[1099,4172,1336],{"class":1326},[1099,4174,1402],{"class":1326},[1099,4176,4178,4181,4183,4187],{"class":1101,"line":4177},80,[1099,4179,4180],{"class":1332},"              includeThoughts",[1099,4182,1336],{"class":1326},[1099,4184,4186],{"class":4185},"sfNiH"," true",[1099,4188,1354],{"class":1326},[1099,4190,4192,4195,4197,4199,4202],{"class":1101,"line":4191},81,[1099,4193,4194],{"class":1332},"              thinkingLevel",[1099,4196,1336],{"class":1326},[1099,4198,1413],{"class":1326},[1099,4200,4201],{"class":1109},"low",[1099,4203,1377],{"class":1326},[1099,4205,4207],{"class":1101,"line":4206},82,[1099,4208,4148],{"class":1326},[1099,4210,4212],{"class":1101,"line":4211},83,[1099,4213,4154],{"class":1326},[1099,4215,4217,4220,4222],{"class":1101,"line":4216},84,[1099,4218,4219],{"class":1332},"          openai",[1099,4221,1336],{"class":1326},[1099,4223,1402],{"class":1326},[1099,4225,4227,4230,4232,4234,4236,4238],{"class":1101,"line":4226},85,[1099,4228,4229],{"class":1332},"            reasoningEffort",[1099,4231,1336],{"class":1326},[1099,4233,1413],{"class":1326},[1099,4235,4201],{"class":1109},[1099,4237,1351],{"class":1326},[1099,4239,1354],{"class":1326},[1099,4241,4243,4246,4248,4250,4253],{"class":1101,"line":4242},86,[1099,4244,4245],{"class":1332},"            reasoningSummary",[1099,4247,1336],{"class":1326},[1099,4249,1413],{"class":1326},[1099,4251,4252],{"class":1109},"detailed",[1099,4254,1377],{"class":1326},[1099,4256,4258],{"class":1101,"line":4257},87,[1099,4259,4260],{"class":1326},"          }\n",[1099,4262,4264],{"class":1101,"line":4263},88,[1099,4265,4266],{"class":1326},"        }\n",[1099,4268,4270,4273],{"class":1101,"line":4269},89,[1099,4271,4272],{"class":1326},"      }",[1099,4274,1461],{"class":1332},[1099,4276,4278],{"class":1101,"line":4277},90,[1099,4279,1391],{"emptyLinePlaceholder":21},[1099,4281,4283],{"class":1101,"line":4282},91,[1099,4284,4285],{"class":2677},"      \u002F\u002F Notify the client that a title was generated\n",[1099,4287,4289,4292,4294,4296,4298,4300,4302,4304],{"class":1101,"line":4288},92,[1099,4290,4291],{"class":1312},"      if",[1099,4293,1932],{"class":1332},[1099,4295,3553],{"class":1326},[1099,4297,262],{"class":1322},[1099,4299,1789],{"class":1326},[1099,4301,3632],{"class":1322},[1099,4303,3558],{"class":1332},[1099,4305,1327],{"class":1326},[1099,4307,4309,4312,4314,4317,4319],{"class":1101,"line":4308},93,[1099,4310,4311],{"class":1322},"        writer",[1099,4313,1789],{"class":1326},[1099,4315,4316],{"class":1122},"write",[1099,4318,1323],{"class":1332},[1099,4320,1327],{"class":1326},[1099,4322,4324,4327,4329,4331,4334,4336],{"class":1101,"line":4323},94,[1099,4325,4326],{"class":1332},"          type",[1099,4328,1336],{"class":1326},[1099,4330,1413],{"class":1326},[1099,4332,4333],{"class":1109},"data-chat-title",[1099,4335,1351],{"class":1326},[1099,4337,1354],{"class":1326},[1099,4339,4341,4344,4346,4348,4350,4352,4354,4357,4359],{"class":1101,"line":4340},95,[1099,4342,4343],{"class":1332},"          data",[1099,4345,1336],{"class":1326},[1099,4347,1691],{"class":1326},[1099,4349,2604],{"class":1332},[1099,4351,1336],{"class":1326},[1099,4353,1413],{"class":1326},[1099,4355,4356],{"class":1109},"Title generated",[1099,4358,1351],{"class":1326},[1099,4360,3109],{"class":1326},[1099,4362,4364,4367,4369],{"class":1101,"line":4363},96,[1099,4365,4366],{"class":1332},"          transient",[1099,4368,1336],{"class":1326},[1099,4370,4371],{"class":4185}," true\n",[1099,4373,4375,4378],{"class":1101,"line":4374},97,[1099,4376,4377],{"class":1326},"        }",[1099,4379,1461],{"class":1332},[1099,4381,4383],{"class":1101,"line":4382},98,[1099,4384,4385],{"class":1326},"      }\n",[1099,4387,4389],{"class":1101,"line":4388},99,[1099,4390,1391],{"emptyLinePlaceholder":21},[1099,4392,4394,4397,4399,4402,4404,4407,4409,4412],{"class":1101,"line":4393},100,[1099,4395,4396],{"class":1322},"      writer",[1099,4398,1789],{"class":1326},[1099,4400,4401],{"class":1122},"merge",[1099,4403,1323],{"class":1332},[1099,4405,4406],{"class":1322},"result",[1099,4408,1789],{"class":1326},[1099,4410,4411],{"class":1122},"toUIMessageStream",[1099,4413,1889],{"class":1332},[1099,4415,4417],{"class":1101,"line":4416},101,[1099,4418,4419],{"class":1326},"    },\n",[1099,4421,4423,4426,4428,4430,4432,4434,4436,4438],{"class":1101,"line":4422},102,[1099,4424,4425],{"class":1122},"    onFinish",[1099,4427,1336],{"class":1326},[1099,4429,4009],{"class":1569},[1099,4431,1920],{"class":1326},[1099,4433,3284],{"class":1923},[1099,4435,1927],{"class":1326},[1099,4437,1806],{"class":1569},[1099,4439,1402],{"class":1326},[1099,4441,4443],{"class":1101,"line":4442},103,[1099,4444,4445],{"class":2677},"      \u002F\u002F Save the assistant's response to the database\n",[1099,4447,4449,4452,4454,4456,4458,4460,4462,4464,4466,4468,4470,4472,4474,4476,4478,4481,4483,4486,4488,4490],{"class":1101,"line":4448},104,[1099,4450,4451],{"class":1312},"      await",[1099,4453,2427],{"class":1322},[1099,4455,1789],{"class":1326},[1099,4457,2699],{"class":1122},[1099,4459,1323],{"class":1332},[1099,4461,2704],{"class":1322},[1099,4463,1789],{"class":1326},[1099,4465,1978],{"class":1322},[1099,4467,1863],{"class":1332},[1099,4469,1789],{"class":1326},[1099,4471,2715],{"class":1122},[1099,4473,1323],{"class":1332},[1099,4475,1978],{"class":1322},[1099,4477,1789],{"class":1326},[1099,4479,4480],{"class":1122},"map",[1099,4482,1323],{"class":1332},[1099,4484,4485],{"class":1923},"message",[1099,4487,1806],{"class":1569},[1099,4489,1932],{"class":1332},[1099,4491,1327],{"class":1326},[1099,4493,4495,4498,4500,4502,4504,4506],{"class":1101,"line":4494},105,[1099,4496,4497],{"class":1332},"        chatId",[1099,4499,1336],{"class":1326},[1099,4501,2777],{"class":1322},[1099,4503,1789],{"class":1326},[1099,4505,2000],{"class":1322},[1099,4507,1354],{"class":1326},[1099,4509,4511,4514,4516,4518,4520,4522,4524,4526,4528,4530,4533,4535,4537,4539],{"class":1101,"line":4510},106,[1099,4512,4513],{"class":1332},"        role",[1099,4515,1336],{"class":1326},[1099,4517,2604],{"class":1322},[1099,4519,1789],{"class":1326},[1099,4521,2114],{"class":1322},[1099,4523,3525],{"class":1312},[1099,4525,1413],{"class":1326},[1099,4527,2132],{"class":1109},[1099,4529,1351],{"class":1326},[1099,4531,4532],{"class":1326}," |",[1099,4534,1413],{"class":1326},[1099,4536,2141],{"class":1109},[1099,4538,1351],{"class":1326},[1099,4540,1354],{"class":1326},[1099,4542,4544,4547,4549,4551,4553],{"class":1101,"line":4543},107,[1099,4545,4546],{"class":1332},"        parts",[1099,4548,1336],{"class":1326},[1099,4550,2604],{"class":1322},[1099,4552,1789],{"class":1326},[1099,4554,2812],{"class":1322},[1099,4556,4558,4560],{"class":1101,"line":4557},108,[1099,4559,4272],{"class":1326},[1099,4561,4562],{"class":1332},")))\n",[1099,4564,4566],{"class":1101,"line":4565},109,[1099,4567,4568],{"class":1326},"    }\n",[1099,4570,4572,4574],{"class":1101,"line":4571},110,[1099,4573,2400],{"class":1326},[1099,4575,1461],{"class":1332},[1099,4577,4579],{"class":1101,"line":4578},111,[1099,4580,1391],{"emptyLinePlaceholder":21},[1099,4582,4584,4586,4589,4591,4593,4595,4597],{"class":1101,"line":4583},112,[1099,4585,2827],{"class":1312},[1099,4587,4588],{"class":1122}," createUIMessageStreamResponse",[1099,4590,1323],{"class":1332},[1099,4592,1846],{"class":1326},[1099,4594,3989],{"class":1322},[1099,4596,1713],{"class":1326},[1099,4598,1461],{"class":1332},[1099,4600,4602,4604],{"class":1101,"line":4601},113,[1099,4603,1458],{"class":1326},[1099,4605,1461],{"class":1322},[989,4607,4608],{},"Here's what each part does:",[989,4610,4611],{},[1007,4612,4613],{},"AI Gateway",[989,4615,4616,4617,4620],{},"Thanks to ",[1043,4618,1080],{"href":1078,"rel":4619},[1047],", we can use any AI model supported by the gateway just by specifying the model name.",[989,4622,4623],{},[1007,4624,4625],{},"Automatic Title Generation",[989,4627,4628,4629,4636],{},"When a chat doesn't have a title yet, we use ",[1043,4630,4633],{"href":4631,"rel":4632},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-core\u002Fgenerate-text#generatetext",[1047],[1049,4634,4635],{},"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\".",[989,4638,4639],{},[1007,4640,4641],{},"Streaming with streamText",[989,4643,4644,4645,4650],{},"The ",[1043,4646,4648],{"href":2846,"rel":4647},[1047],[1049,4649,2850],{}," function generates a streaming response from the AI model. Key options include:",[1001,4652,4653,4659,4664],{},[1004,4654,4655,4658],{},[1049,4656,4657],{},"model",": The AI model to use",[1004,4660,4661,4663],{},[1049,4662,2150],{},": Instructions that guide the AI's behavior",[1004,4665,4666,4668],{},[1049,4667,1978],{},": The conversation history",[989,4670,4671],{},[1007,4672,4673],{},"UIMessageStream",[989,4675,4644,4676,1052,4682,4688],{},[1043,4677,4680],{"href":4678,"rel":4679},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream#createuimessagestream",[1047],[1049,4681,2858],{},[1043,4683,4686],{"href":4684,"rel":4685},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream-response#createuimessagestreamresponse",[1047],[1049,4687,2866],{}," 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.",[989,4690,4644,4691,4694,4695,4697,4698,4701],{},[1049,4692,4693],{},"writer.write()"," method allows sending custom data events to the client (like ",[1049,4696,4333],{},"), while ",[1049,4699,4700],{},"onFinish"," is called when streaming completes, perfect for persisting the assistant's response.",[1127,4703,4705],{"id":4704},"fetching-a-chat","Fetching a chat",[989,4707,4708],{},"Add an endpoint to fetch existing chat data from your database:",[1299,4710,4711],{},[1090,4712,4715],{"className":1303,"code":4713,"filename":4714,"language":1305,"meta":1095,"style":1095},"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",[1049,4716,4717,4743,4766,4788,4806,4810,4832,4864,4878,4890,4894,4922,4953,4962,4971,5000,5004,5008,5014,5018,5032,5064,5068,5072,5078],{"__ignoreMap":1095},[1099,4718,4719,4721,4723,4725,4727,4729,4731,4733,4735,4737,4739,4741],{"class":1101,"line":1102},[1099,4720,1688],{"class":1312},[1099,4722,1691],{"class":1326},[1099,4724,2886],{"class":1322},[1099,4726,1697],{"class":1326},[1099,4728,2484],{"class":1322},[1099,4730,1697],{"class":1326},[1099,4732,2895],{"class":1322},[1099,4734,1713],{"class":1326},[1099,4736,1716],{"class":1312},[1099,4738,1413],{"class":1326},[1099,4740,1127],{"class":1109},[1099,4742,1377],{"class":1326},[1099,4744,4745,4747,4749,4752,4754,4756,4758,4760,4762,4764],{"class":1101,"line":1119},[1099,4746,1688],{"class":1312},[1099,4748,1691],{"class":1326},[1099,4750,4751],{"class":1322}," asc",[1099,4753,1697],{"class":1326},[1099,4755,2918],{"class":1322},[1099,4757,1713],{"class":1326},[1099,4759,1716],{"class":1312},[1099,4761,1413],{"class":1326},[1099,4763,1741],{"class":1109},[1099,4765,1377],{"class":1326},[1099,4767,4768,4770,4772,4774,4776,4778,4780,4782,4784,4786],{"class":1101,"line":1342},[1099,4769,1688],{"class":1312},[1099,4771,1691],{"class":1326},[1099,4773,2427],{"class":1322},[1099,4775,1697],{"class":1326},[1099,4777,2535],{"class":1322},[1099,4779,1713],{"class":1326},[1099,4781,1716],{"class":1312},[1099,4783,1413],{"class":1326},[1099,4785,2544],{"class":1109},[1099,4787,1377],{"class":1326},[1099,4789,4790,4792,4794,4796,4798,4800,4802,4804],{"class":1101,"line":1357},[1099,4791,1688],{"class":1312},[1099,4793,1691],{"class":1326},[1099,4795,2555],{"class":1322},[1099,4797,1713],{"class":1326},[1099,4799,1716],{"class":1312},[1099,4801,1413],{"class":1326},[1099,4803,2564],{"class":1109},[1099,4805,1377],{"class":1326},[1099,4807,4808],{"class":1101,"line":1369},[1099,4809,1391],{"emptyLinePlaceholder":21},[1099,4811,4812,4814,4816,4818,4820,4822,4824,4826,4828,4830],{"class":1101,"line":1380},[1099,4813,1313],{"class":1312},[1099,4815,1316],{"class":1312},[1099,4817,2484],{"class":1122},[1099,4819,1323],{"class":1322},[1099,4821,2583],{"class":1569},[1099,4823,1932],{"class":1326},[1099,4825,2588],{"class":1923},[1099,4827,1863],{"class":1326},[1099,4829,1806],{"class":1569},[1099,4831,1402],{"class":1326},[1099,4833,4834,4836,4838,4840,4842,4844,4846,4848,4850,4852,4854,4856,4858,4860,4862],{"class":1101,"line":1388},[1099,4835,2599],{"class":1569},[1099,4837,1691],{"class":1326},[1099,4839,3209],{"class":1322},[1099,4841,1713],{"class":1326},[1099,4843,2609],{"class":1326},[1099,4845,2612],{"class":1312},[1099,4847,2895],{"class":1122},[1099,4849,1323],{"class":1332},[1099,4851,2588],{"class":1322},[1099,4853,1697],{"class":1326},[1099,4855,2555],{"class":1322},[1099,4857,1789],{"class":1326},[1099,4859,2627],{"class":1122},[1099,4861,1323],{"class":1332},[1099,4863,1327],{"class":1326},[1099,4865,4866,4868,4870,4872,4874,4876],{"class":1101,"line":1394},[1099,4867,3238],{"class":1332},[1099,4869,1336],{"class":1326},[1099,4871,2555],{"class":1322},[1099,4873,1789],{"class":1326},[1099,4875,3247],{"class":1122},[1099,4877,2655],{"class":1332},[1099,4879,4880,4882,4884,4886,4888],{"class":1101,"line":1405},[1099,4881,2400],{"class":1326},[1099,4883,1863],{"class":1332},[1099,4885,1789],{"class":1326},[1099,4887,2666],{"class":1322},[1099,4889,1461],{"class":1332},[1099,4891,4892],{"class":1101,"line":1421},[1099,4893,1391],{"emptyLinePlaceholder":21},[1099,4895,4896,4898,4900,4902,4904,4906,4908,4910,4912,4914,4916,4918,4920],{"class":1101,"line":1427},[1099,4897,2599],{"class":1569},[1099,4899,2777],{"class":1322},[1099,4901,2609],{"class":1326},[1099,4903,2612],{"class":1312},[1099,4905,2427],{"class":1322},[1099,4907,1789],{"class":1326},[1099,4909,3473],{"class":1322},[1099,4911,1789],{"class":1326},[1099,4913,1768],{"class":1322},[1099,4915,1789],{"class":1326},[1099,4917,3482],{"class":1122},[1099,4919,1323],{"class":1332},[1099,4921,1327],{"class":1326},[1099,4923,4924,4926,4928,4930,4932,4934,4936,4938,4940,4942,4944,4946,4948,4951],{"class":1101,"line":1432},[1099,4925,3492],{"class":1332},[1099,4927,1336],{"class":1326},[1099,4929,1932],{"class":1332},[1099,4931,3783],{"class":1122},[1099,4933,1323],{"class":1332},[1099,4935,2704],{"class":1322},[1099,4937,1789],{"class":1326},[1099,4939,1768],{"class":1322},[1099,4941,1789],{"class":1326},[1099,4943,2000],{"class":1322},[1099,4945,1697],{"class":1326},[1099,4947,3209],{"class":1322},[1099,4949,4950],{"class":1332},"))",[1099,4952,1354],{"class":1326},[1099,4954,4955,4958,4960],{"class":1101,"line":1455},[1099,4956,4957],{"class":1332},"    with",[1099,4959,1336],{"class":1326},[1099,4961,1402],{"class":1326},[1099,4963,4964,4967,4969],{"class":1101,"line":1960},[1099,4965,4966],{"class":1332},"      messages",[1099,4968,1336],{"class":1326},[1099,4970,1402],{"class":1326},[1099,4972,4973,4976,4978,4981,4983,4985,4987,4989,4991,4993,4995,4998],{"class":1101,"line":1987},[1099,4974,4975],{"class":1122},"        orderBy",[1099,4977,1336],{"class":1326},[1099,4979,4980],{"class":1326}," ()",[1099,4982,1806],{"class":1569},[1099,4984,4751],{"class":1122},[1099,4986,1323],{"class":1332},[1099,4988,2704],{"class":1322},[1099,4990,1789],{"class":1326},[1099,4992,1978],{"class":1322},[1099,4994,1789],{"class":1326},[1099,4996,4997],{"class":1322},"createdAt",[1099,4999,1461],{"class":1332},[1099,5001,5002],{"class":1101,"line":2033},[1099,5003,4385],{"class":1326},[1099,5005,5006],{"class":1101,"line":2100},[1099,5007,4568],{"class":1326},[1099,5009,5010,5012],{"class":1101,"line":2170},[1099,5011,2400],{"class":1326},[1099,5013,1461],{"class":1332},[1099,5015,5016],{"class":1101,"line":2210},[1099,5017,1391],{"emptyLinePlaceholder":21},[1099,5019,5020,5022,5024,5026,5028,5030],{"class":1101,"line":2261},[1099,5021,3548],{"class":1312},[1099,5023,1932],{"class":1332},[1099,5025,3553],{"class":1326},[1099,5027,262],{"class":1322},[1099,5029,3558],{"class":1332},[1099,5031,1327],{"class":1326},[1099,5033,5034,5036,5038,5040,5042,5044,5046,5048,5050,5052,5054,5056,5058,5060,5062],{"class":1101,"line":2274},[1099,5035,3566],{"class":1312},[1099,5037,2886],{"class":1122},[1099,5039,1323],{"class":1332},[1099,5041,1846],{"class":1326},[1099,5043,3575],{"class":1332},[1099,5045,1336],{"class":1326},[1099,5047,3581],{"class":3580},[1099,5049,1697],{"class":1326},[1099,5051,3586],{"class":1332},[1099,5053,1336],{"class":1326},[1099,5055,1413],{"class":1326},[1099,5057,3593],{"class":1109},[1099,5059,1351],{"class":1326},[1099,5061,1713],{"class":1326},[1099,5063,1461],{"class":1332},[1099,5065,5066],{"class":1101,"line":2304},[1099,5067,3605],{"class":1326},[1099,5069,5070],{"class":1101,"line":2310},[1099,5071,1391],{"emptyLinePlaceholder":21},[1099,5073,5074,5076],{"class":1101,"line":2315},[1099,5075,2827],{"class":1312},[1099,5077,2830],{"class":1322},[1099,5079,5080,5082],{"class":1101,"line":2347},[1099,5081,1458],{"class":1326},[1099,5083,1461],{"class":1322},[993,5085,5087],{"id":5086},"wire-up-the-ui","Wire up the UI",[989,5089,5090,5091,5096,5097,5102],{},"Nuxt UI provides purpose-built components for AI chat interfaces: ",[1043,5092,5093],{"href":281},[1049,5094,5095],{},"UChatPrompt"," for the input area and ",[1043,5098,5099],{"href":271},[1049,5100,5101],{},"UChatMessages"," for displaying the conversation.",[1127,5104,5106],{"id":5105},"creating-the-home-page","Creating the home page",[989,5108,5109,5110,5114],{},"The home page is where users start a new conversation. The ",[1043,5111,5112],{"href":281},[1049,5113,5095],{}," component provides a textarea with auto-resize, keyboard shortcuts, and a submit button:",[1299,5116,5117],{},[1090,5118,5122],{"className":1531,"code":5119,"filename":5120,"highlights":5121,"language":34,"meta":1095,"style":1095},"\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",[3452,3458,3489,3533,3540,3545,3563,3602,3608],[1049,5123,5124,5147,5166,5184,5188,5202,5228,5232,5245,5249,5254,5280,5296,5305,5313,5327,5365,5369,5373,5379,5383,5388,5414,5419,5427,5431,5439,5460,5474,5495,5516,5521,5530,5534,5542,5557,5572,5587,5602,5617,5623,5646,5655,5664,5672,5680],{"__ignoreMap":1095},[1099,5125,5126,5128,5131,5134,5137,5139,5141,5143,5145],{"class":1101,"line":1102},[1099,5127,1541],{"class":1326},[1099,5129,5130],{"class":1332},"script",[1099,5132,5133],{"class":1569}," setup",[1099,5135,5136],{"class":1569}," lang",[1099,5138,1573],{"class":1326},[1099,5140,1500],{"class":1326},[1099,5142,1305],{"class":1109},[1099,5144,1500],{"class":1326},[1099,5146,1547],{"class":1326},[1099,5148,5149,5151,5154,5156,5159,5161,5164],{"class":1101,"line":1119},[1099,5150,3048],{"class":1569},[1099,5152,5153],{"class":1322}," input ",[1099,5155,1573],{"class":1326},[1099,5157,5158],{"class":1122}," ref",[1099,5160,1323],{"class":1322},[1099,5162,5163],{"class":1326},"''",[1099,5165,1461],{"class":1322},[1099,5167,5168,5170,5173,5175,5177,5179,5182],{"class":1101,"line":1342},[1099,5169,3048],{"class":1569},[1099,5171,5172],{"class":1322}," loading ",[1099,5174,1573],{"class":1326},[1099,5176,5158],{"class":1122},[1099,5178,1323],{"class":1322},[1099,5180,5181],{"class":4185},"false",[1099,5183,1461],{"class":1322},[1099,5185,5186],{"class":1101,"line":1357},[1099,5187,1391],{"emptyLinePlaceholder":21},[1099,5189,5190,5192,5195,5198,5200],{"class":1101,"line":1369},[1099,5191,2583],{"class":1569},[1099,5193,5194],{"class":1569}," function",[1099,5196,5197],{"class":1122}," createChat",[1099,5199,1786],{"class":1326},[1099,5201,1402],{"class":1326},[1099,5203,5204,5206,5208,5210,5213,5215,5217,5219,5222,5225],{"class":1101,"line":1380},[1099,5205,3548],{"class":1312},[1099,5207,1932],{"class":1332},[1099,5209,3553],{"class":1326},[1099,5211,5212],{"class":1322},"input",[1099,5214,1789],{"class":1326},[1099,5216,3333],{"class":1322},[1099,5218,1789],{"class":1326},[1099,5220,5221],{"class":1122},"trim",[1099,5223,5224],{"class":1332},"()) ",[1099,5226,5227],{"class":1312},"return\n",[1099,5229,5230],{"class":1101,"line":1388},[1099,5231,1391],{"emptyLinePlaceholder":21},[1099,5233,5234,5237,5239,5241,5243],{"class":1101,"line":1394},[1099,5235,5236],{"class":1322},"  loading",[1099,5238,1789],{"class":1326},[1099,5240,3333],{"class":1322},[1099,5242,2609],{"class":1326},[1099,5244,4371],{"class":4185},[1099,5246,5247],{"class":1101,"line":1405},[1099,5248,1391],{"emptyLinePlaceholder":21},[1099,5250,5251],{"class":1101,"line":1421},[1099,5252,5253],{"class":2677},"  \u002F\u002F Create a new chat on the server\n",[1099,5255,5256,5258,5260,5262,5264,5267,5269,5271,5274,5276,5278],{"class":1101,"line":1427},[1099,5257,2599],{"class":1569},[1099,5259,2777],{"class":1322},[1099,5261,2609],{"class":1326},[1099,5263,2612],{"class":1312},[1099,5265,5266],{"class":1122}," $fetch",[1099,5268,1323],{"class":1332},[1099,5270,1351],{"class":1326},[1099,5272,5273],{"class":1109},"\u002Fapi\u002Fchats",[1099,5275,1351],{"class":1326},[1099,5277,1697],{"class":1326},[1099,5279,1402],{"class":1326},[1099,5281,5282,5285,5287,5289,5292,5294],{"class":1101,"line":1432},[1099,5283,5284],{"class":1332},"    method",[1099,5286,1336],{"class":1326},[1099,5288,1413],{"class":1326},[1099,5290,5291],{"class":1109},"POST",[1099,5293,1351],{"class":1326},[1099,5295,1354],{"class":1326},[1099,5297,5298,5301,5303],{"class":1101,"line":1455},[1099,5299,5300],{"class":1332},"    body",[1099,5302,1336],{"class":1326},[1099,5304,1402],{"class":1326},[1099,5306,5307,5309,5311],{"class":1101,"line":1960},[1099,5308,3373],{"class":1332},[1099,5310,1336],{"class":1326},[1099,5312,1402],{"class":1326},[1099,5314,5315,5317,5319,5321,5323,5325],{"class":1101,"line":1987},[1099,5316,4513],{"class":1332},[1099,5318,1336],{"class":1326},[1099,5320,1413],{"class":1326},[1099,5322,2132],{"class":1109},[1099,5324,1351],{"class":1326},[1099,5326,1354],{"class":1326},[1099,5328,5329,5331,5333,5335,5337,5339,5341,5343,5346,5348,5350,5352,5354,5357,5359,5361,5363],{"class":1101,"line":2033},[1099,5330,4546],{"class":1332},[1099,5332,1336],{"class":1326},[1099,5334,1440],{"class":1332},[1099,5336,1846],{"class":1326},[1099,5338,2506],{"class":1332},[1099,5340,1336],{"class":1326},[1099,5342,1413],{"class":1326},[1099,5344,5345],{"class":1109},"text",[1099,5347,1351],{"class":1326},[1099,5349,1697],{"class":1326},[1099,5351,1700],{"class":1332},[1099,5353,1336],{"class":1326},[1099,5355,5356],{"class":1322}," input",[1099,5358,1789],{"class":1326},[1099,5360,3333],{"class":1322},[1099,5362,1713],{"class":1326},[1099,5364,3174],{"class":1332},[1099,5366,5367],{"class":1101,"line":2100},[1099,5368,4385],{"class":1326},[1099,5370,5371],{"class":1101,"line":2170},[1099,5372,4568],{"class":1326},[1099,5374,5375,5377],{"class":1101,"line":2210},[1099,5376,2400],{"class":1326},[1099,5378,1461],{"class":1332},[1099,5380,5381],{"class":1101,"line":2261},[1099,5382,1391],{"emptyLinePlaceholder":21},[1099,5384,5385],{"class":1101,"line":2274},[1099,5386,5387],{"class":2677},"  \u002F\u002F Navigate to the chat page\n",[1099,5389,5390,5393,5395,5397,5400,5403,5405,5407,5409,5412],{"class":1101,"line":2304},[1099,5391,5392],{"class":1122},"  navigateTo",[1099,5394,1323],{"class":1332},[1099,5396,3693],{"class":1326},[1099,5398,5399],{"class":1109},"\u002Fchat\u002F",[1099,5401,5402],{"class":1326},"${",[1099,5404,262],{"class":1322},[1099,5406,1789],{"class":1326},[1099,5408,2000],{"class":1322},[1099,5410,5411],{"class":1326},"}`",[1099,5413,1461],{"class":1332},[1099,5415,5416],{"class":1101,"line":2310},[1099,5417,5418],{"class":1326},"}\n",[1099,5420,5421,5423,5425],{"class":1101,"line":2315},[1099,5422,1617],{"class":1326},[1099,5424,5130],{"class":1332},[1099,5426,1547],{"class":1326},[1099,5428,5429],{"class":1101,"line":2347},[1099,5430,1391],{"emptyLinePlaceholder":21},[1099,5432,5433,5435,5437],{"class":1101,"line":2363},[1099,5434,1541],{"class":1326},[1099,5436,1544],{"class":1332},[1099,5438,1547],{"class":1326},[1099,5440,5441,5443,5446,5449,5451,5453,5456,5458],{"class":1101,"line":2381},[1099,5442,1554],{"class":1326},[1099,5444,5445],{"class":1332},"UDashboardPanel",[1099,5447,5448],{"class":1569}," :ui",[1099,5450,1573],{"class":1326},[1099,5452,1500],{"class":1326},[1099,5454,5455],{"class":1109},"{ body: 'p-0 sm:p-0' }",[1099,5457,1500],{"class":1326},[1099,5459,1547],{"class":1326},[1099,5461,5462,5464,5466,5469,5472],{"class":1101,"line":2397},[1099,5463,1563],{"class":1326},[1099,5465,1544],{"class":1332},[1099,5467,5468],{"class":1326}," #",[1099,5470,5471],{"class":1569},"body",[1099,5473,1547],{"class":1326},[1099,5475,5476,5478,5481,5484,5486,5488,5491,5493],{"class":1101,"line":2405},[1099,5477,1587],{"class":1326},[1099,5479,5480],{"class":1332},"UContainer",[1099,5482,5483],{"class":1569}," class",[1099,5485,1573],{"class":1326},[1099,5487,1500],{"class":1326},[1099,5489,5490],{"class":1109},"min-h-dvh flex flex-col justify-center gap-6 py-8",[1099,5492,1500],{"class":1326},[1099,5494,1547],{"class":1326},[1099,5496,5497,5500,5503,5505,5507,5509,5512,5514],{"class":1101,"line":3385},[1099,5498,5499],{"class":1326},"        \u003C",[1099,5501,5502],{"class":1332},"h1",[1099,5504,5483],{"class":1569},[1099,5506,1573],{"class":1326},[1099,5508,1500],{"class":1326},[1099,5510,5511],{"class":1109},"text-3xl sm:text-4xl text-highlighted font-bold",[1099,5513,1500],{"class":1326},[1099,5515,1547],{"class":1326},[1099,5517,5518],{"class":1101,"line":3402},[1099,5519,5520],{"class":1322},"          How can I help you today?\n",[1099,5522,5523,5526,5528],{"class":1101,"line":3434},[1099,5524,5525],{"class":1326},"        \u003C\u002F",[1099,5527,5502],{"class":1332},[1099,5529,1547],{"class":1326},[1099,5531,5532],{"class":1101,"line":3447},[1099,5533,1391],{"emptyLinePlaceholder":21},[1099,5535,5537,5539],{"class":5536,"line":3452},[1101,1551],[1099,5538,5499],{"class":1326},[1099,5540,5541],{"class":1332},"UChatPrompt\n",[1099,5543,5545,5548,5550,5552,5554],{"class":5544,"line":3458},[1101,1551],[1099,5546,5547],{"class":1569},"          v-model",[1099,5549,1573],{"class":1326},[1099,5551,1500],{"class":1326},[1099,5553,5212],{"class":1109},[1099,5555,5556],{"class":1326},"\"\n",[1099,5558,5560,5563,5565,5567,5570],{"class":5559,"line":3489},[1101,1551],[1099,5561,5562],{"class":1569},"          :status",[1099,5564,1573],{"class":1326},[1099,5566,1500],{"class":1326},[1099,5568,5569],{"class":1109},"loading ? 'streaming' : 'ready'",[1099,5571,5556],{"class":1326},[1099,5573,5575,5578,5580,5582,5585],{"class":5574,"line":3533},[1101,1551],[1099,5576,5577],{"class":1569},"          variant",[1099,5579,1573],{"class":1326},[1099,5581,1500],{"class":1326},[1099,5583,5584],{"class":1109},"subtle",[1099,5586,5556],{"class":1326},[1099,5588,5590,5593,5595,5597,5600],{"class":5589,"line":3540},[1101,1551],[1099,5591,5592],{"class":1569},"          placeholder",[1099,5594,1573],{"class":1326},[1099,5596,1500],{"class":1326},[1099,5598,5599],{"class":1109},"Ask me anything...",[1099,5601,5556],{"class":1326},[1099,5603,5605,5608,5610,5612,5615],{"class":5604,"line":3545},[1101,1551],[1099,5606,5607],{"class":1569},"          @submit",[1099,5609,1573],{"class":1326},[1099,5611,1500],{"class":1326},[1099,5613,5614],{"class":1109},"createChat",[1099,5616,5556],{"class":1326},[1099,5618,5620],{"class":5619,"line":3563},[1101,1551],[1099,5621,5622],{"class":1326},"        >\n",[1099,5624,5626,5629,5632,5635,5637,5639,5642,5644],{"class":5625,"line":3602},[1101,1551],[1099,5627,5628],{"class":1326},"          \u003C",[1099,5630,5631],{"class":1332},"UChatPromptSubmit",[1099,5633,5634],{"class":1569}," color",[1099,5636,1573],{"class":1326},[1099,5638,1500],{"class":1326},[1099,5640,5641],{"class":1109},"neutral",[1099,5643,1500],{"class":1326},[1099,5645,1593],{"class":1326},[1099,5647,5649,5651,5653],{"class":5648,"line":3608},[1101,1551],[1099,5650,5525],{"class":1326},[1099,5652,5095],{"class":1332},[1099,5654,1547],{"class":1326},[1099,5656,5657,5660,5662],{"class":1101,"line":3613},[1099,5658,5659],{"class":1326},"      \u003C\u002F",[1099,5661,5480],{"class":1332},[1099,5663,1547],{"class":1326},[1099,5665,5666,5668,5670],{"class":1101,"line":3619},[1099,5667,1598],{"class":1326},[1099,5669,1544],{"class":1332},[1099,5671,1547],{"class":1326},[1099,5673,5674,5676,5678],{"class":1101,"line":3639},[1099,5675,1608],{"class":1326},[1099,5677,5445],{"class":1332},[1099,5679,1547],{"class":1326},[1099,5681,5682,5684,5686],{"class":1101,"line":3667},[1099,5683,1617],{"class":1326},[1099,5685,1544],{"class":1332},[1099,5687,1547],{"class":1326},[989,5689,4644,5690,5694],{},[1043,5691,5692],{"href":281},[1049,5693,5095],{}," component automatically handles:",[1001,5696,5697,5704,5707,5717],{},[1004,5698,5699,5700],{},"Form submission when pressing ",[5701,5702],"kbd",{"value":5703},"enter",[1004,5705,5706],{},"Auto-resizing as you type",[1004,5708,5709,5710,5713,5714],{},"A loading state when ",[1049,5711,5712],{},"status"," is set to ",[1049,5715,5716],{},"streaming",[1004,5718,5719],{},"Focus management and keyboard shortcuts",[1127,5721,5723],{"id":5722},"setting-up-markdown-rendering","Setting up Markdown rendering",[989,5725,5726,5727,5734,5735,5742,5743,5745,5746,5751],{},"AI models often respond with Markdown formatting (code blocks, lists, bold text, etc.). Before building the chat page, create a custom ",[1043,5728,5731],{"href":5729,"rel":5730},"https:\u002F\u002Fcomark.dev",[1047],[1049,5732,5733],{},"Comark"," component that will handle streaming Markdown rendering. Using ",[1043,5736,5739],{"href":5737,"rel":5738},"https:\u002F\u002Fcomark.dev\u002Frendering\u002Fvue#code-definecomarkcomponent",[1047],[1049,5740,5741],{},"defineComarkComponent",", you can enable the ",[1049,5744,1551],{}," plugin for syntax highlighting in code blocks and register additional ",[1043,5747,5750],{"href":5748,"rel":5749},"https:\u002F\u002Fshiki.style",[1047],"Shiki"," languages beyond the defaults (TypeScript, JavaScript, Vue, Shell, JSON, YAML, Markdown):",[1299,5753,5754],{},[1090,5755,5758],{"className":1303,"code":5756,"filename":5757,"language":1305,"meta":1095,"style":1095},"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",[1049,5759,5760,5777,5793,5809,5825,5841,5845,5858,5874,5883,5892,5917,5923,5929,5943],{"__ignoreMap":1095},[1099,5761,5762,5764,5767,5770,5772,5775],{"class":1101,"line":1102},[1099,5763,1688],{"class":1312},[1099,5765,5766],{"class":1322}," highlight ",[1099,5768,5769],{"class":1312},"from",[1099,5771,1413],{"class":1326},[1099,5773,5774],{"class":1109},"@comark\u002Fnuxt\u002Fplugins\u002Fhighlight",[1099,5776,1377],{"class":1326},[1099,5778,5779,5781,5784,5786,5788,5791],{"class":1101,"line":1119},[1099,5780,1688],{"class":1312},[1099,5782,5783],{"class":1322}," python ",[1099,5785,5769],{"class":1312},[1099,5787,1413],{"class":1326},[1099,5789,5790],{"class":1109},"@shikijs\u002Flangs\u002Fpython",[1099,5792,1377],{"class":1326},[1099,5794,5795,5797,5800,5802,5804,5807],{"class":1101,"line":1342},[1099,5796,1688],{"class":1312},[1099,5798,5799],{"class":1322}," sql ",[1099,5801,5769],{"class":1312},[1099,5803,1413],{"class":1326},[1099,5805,5806],{"class":1109},"@shikijs\u002Flangs\u002Fsql",[1099,5808,1377],{"class":1326},[1099,5810,5811,5813,5816,5818,5820,5823],{"class":1101,"line":1357},[1099,5812,1688],{"class":1312},[1099,5814,5815],{"class":1322}," go ",[1099,5817,5769],{"class":1312},[1099,5819,1413],{"class":1326},[1099,5821,5822],{"class":1109},"@shikijs\u002Flangs\u002Fgo",[1099,5824,1377],{"class":1326},[1099,5826,5827,5829,5832,5834,5836,5839],{"class":1101,"line":1369},[1099,5828,1688],{"class":1312},[1099,5830,5831],{"class":1322}," rust ",[1099,5833,5769],{"class":1312},[1099,5835,1413],{"class":1326},[1099,5837,5838],{"class":1109},"@shikijs\u002Flangs\u002Frust",[1099,5840,1377],{"class":1326},[1099,5842,5843],{"class":1101,"line":1380},[1099,5844,1391],{"emptyLinePlaceholder":21},[1099,5846,5847,5849,5851,5854,5856],{"class":1101,"line":1388},[1099,5848,1313],{"class":1312},[1099,5850,1316],{"class":1312},[1099,5852,5853],{"class":1122}," defineComarkComponent",[1099,5855,1323],{"class":1322},[1099,5857,1327],{"class":1326},[1099,5859,5860,5863,5865,5867,5870,5872],{"class":1101,"line":1394},[1099,5861,5862],{"class":1332},"  name",[1099,5864,1336],{"class":1326},[1099,5866,1413],{"class":1326},[1099,5868,5869],{"class":1109},"ChatComark",[1099,5871,1351],{"class":1326},[1099,5873,1354],{"class":1326},[1099,5875,5876,5879,5881],{"class":1101,"line":1405},[1099,5877,5878],{"class":1332},"  plugins",[1099,5880,1336],{"class":1326},[1099,5882,1339],{"class":1322},[1099,5884,5885,5888,5890],{"class":1101,"line":1421},[1099,5886,5887],{"class":1122},"    highlight",[1099,5889,1323],{"class":1322},[1099,5891,1327],{"class":1326},[1099,5893,5894,5897,5899,5902,5904,5907,5909,5912,5914],{"class":1101,"line":1427},[1099,5895,5896],{"class":1332},"      languages",[1099,5898,1336],{"class":1326},[1099,5900,5901],{"class":1322}," [python",[1099,5903,1697],{"class":1326},[1099,5905,5906],{"class":1322}," sql",[1099,5908,1697],{"class":1326},[1099,5910,5911],{"class":1322}," go",[1099,5913,1697],{"class":1326},[1099,5915,5916],{"class":1322}," rust]\n",[1099,5918,5919,5921],{"class":1101,"line":1432},[1099,5920,3388],{"class":1326},[1099,5922,1461],{"class":1322},[1099,5924,5925,5927],{"class":1101,"line":1455},[1099,5926,1383],{"class":1322},[1099,5928,1354],{"class":1326},[1099,5930,5931,5934,5936,5938,5941],{"class":1101,"line":1960},[1099,5932,5933],{"class":1332},"  class",[1099,5935,1336],{"class":1326},[1099,5937,1413],{"class":1326},[1099,5939,5940],{"class":1109},"*:first:mt-0 *:last:mb-0",[1099,5942,1377],{"class":1326},[1099,5944,5945,5947],{"class":1101,"line":1987},[1099,5946,1458],{"class":1326},[1099,5948,1461],{"class":1322},[989,5950,5951,5952,5955],{},"This creates a ",[1049,5953,5954],{},"\u003CChatComark>"," component we'll use in the chat page to render assistant messages and reasoning content.",[989,5957,5958],{},"Since Comark uses Shiki with dual themes, you need to add the following CSS to your stylesheet for dark mode support:",[1090,5960,5962],{"className":1481,"code":5961,"filename":1483,"language":1484,"meta":1095,"style":1095},"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",[1049,5963,5964,5985,6008,6028,6048,6068,6088],{"__ignoreMap":1095},[1099,5965,5966,5969,5971,5974,5977,5980,5983],{"class":1101,"line":1102},[1099,5967,5968],{"class":1105},"html",[1099,5970,1789],{"class":1326},[1099,5972,5973],{"class":1105},"dark",[1099,5975,5976],{"class":1326}," .",[1099,5978,5979],{"class":1105},"shiki",[1099,5981,5982],{"class":1105}," span",[1099,5984,1402],{"class":1326},[1099,5986,5987,5991,5993,5996,5998,6001,6003,6006],{"class":1101,"line":1119},[1099,5988,5990],{"class":5989},"sqsOY","  color",[1099,5992,1336],{"class":1326},[1099,5994,5995],{"class":1122}," var",[1099,5997,1323],{"class":1326},[1099,5999,6000],{"class":1322},"--shiki-dark",[1099,6002,1863],{"class":1326},[1099,6004,6005],{"class":3580}," !important",[1099,6007,1503],{"class":1326},[1099,6009,6010,6013,6015,6017,6019,6022,6024,6026],{"class":1101,"line":1342},[1099,6011,6012],{"class":5989},"  background-color",[1099,6014,1336],{"class":1326},[1099,6016,5995],{"class":1122},[1099,6018,1323],{"class":1326},[1099,6020,6021],{"class":1322},"--shiki-dark-bg",[1099,6023,1863],{"class":1326},[1099,6025,6005],{"class":3580},[1099,6027,1503],{"class":1326},[1099,6029,6030,6033,6035,6037,6039,6042,6044,6046],{"class":1101,"line":1357},[1099,6031,6032],{"class":5989},"  font-style",[1099,6034,1336],{"class":1326},[1099,6036,5995],{"class":1122},[1099,6038,1323],{"class":1326},[1099,6040,6041],{"class":1322},"--shiki-dark-font-style",[1099,6043,1863],{"class":1326},[1099,6045,6005],{"class":3580},[1099,6047,1503],{"class":1326},[1099,6049,6050,6053,6055,6057,6059,6062,6064,6066],{"class":1101,"line":1369},[1099,6051,6052],{"class":5989},"  font-weight",[1099,6054,1336],{"class":1326},[1099,6056,5995],{"class":1122},[1099,6058,1323],{"class":1326},[1099,6060,6061],{"class":1322},"--shiki-dark-font-weight",[1099,6063,1863],{"class":1326},[1099,6065,6005],{"class":3580},[1099,6067,1503],{"class":1326},[1099,6069,6070,6073,6075,6077,6079,6082,6084,6086],{"class":1101,"line":1380},[1099,6071,6072],{"class":5989},"  text-decoration",[1099,6074,1336],{"class":1326},[1099,6076,5995],{"class":1122},[1099,6078,1323],{"class":1326},[1099,6080,6081],{"class":1322},"--shiki-dark-text-decoration",[1099,6083,1863],{"class":1326},[1099,6085,6005],{"class":3580},[1099,6087,1503],{"class":1326},[1099,6089,6090],{"class":1101,"line":1388},[1099,6091,5418],{"class":1326},[993,6093,6095],{"id":6094},"creating-the-chat-page","Creating the chat page",[989,6097,6098,6099,6105,6106,6113],{},"The chat page is where the actual conversation happens. It integrates the AI SDK's ",[1043,6100,6103],{"href":6101,"rel":6102},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fchat",[1047],[1049,6104,259],{}," class and ",[1043,6107,6110],{"href":6108,"rel":6109},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fdefault-chat-transport",[1047],[1049,6111,6112],{},"DefaultChatTransport"," for real-time streaming.",[1299,6115,6116],{},[1676,6117,6118],{},[1090,6119,6123],{"className":1531,"code":6120,"filename":6121,"highlights":6122,"language":34,"meta":1095,"style":1095},"\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",[1119,1342,1357,2210,2261,2274,2304,2310,2315,2347,2363,2381,2397,2405,3385,3402,3434,3447,3452,3458,3489,3533,3540],[1049,6124,6125,6145,6175,6196,6217,6221,6235,6249,6253,6258,6306,6310,6329,6371,6375,6379,6395,6399,6404,6422,6442,6461,6477,6504,6513,6528,6534,6561,6577,6582,6587,6602,6617,6633,6650,6664,6671,6676,6683,6687,6709,6721,6741,6769,6783,6787,6791,6795,6800,6813,6841,6852,6856,6862,6870,6874,6882,6900,6912,6931,6938,6952,6965,6970,6984,6988,7013,7091,7099,7113,7127,7141,7146,7154,7167,7180,7185,7195,7199,7222,7228,7242,7254,7266,7270,7300,7305,7314,7322,7331,7340,7348,7352,7358,7370,7384,7396,7409,7422,7426,7433,7446,7459,7473,7487,7492,7500,7508,7516,7524],{"__ignoreMap":1095},[1099,6126,6127,6129,6131,6133,6135,6137,6139,6141,6143],{"class":1101,"line":1102},[1099,6128,1541],{"class":1326},[1099,6130,5130],{"class":1332},[1099,6132,5133],{"class":1569},[1099,6134,5136],{"class":1569},[1099,6136,1573],{"class":1326},[1099,6138,1500],{"class":1326},[1099,6140,1305],{"class":1109},[1099,6142,1500],{"class":1326},[1099,6144,1547],{"class":1326},[1099,6146,6148,6150,6152,6155,6157,6160,6162,6165,6167,6169,6171,6173],{"class":6147,"line":1119},[1101,1551],[1099,6149,1688],{"class":1312},[1099,6151,1691],{"class":1326},[1099,6153,6154],{"class":1322}," DefaultChatTransport",[1099,6156,1697],{"class":1326},[1099,6158,6159],{"class":1322}," isReasoningUIPart",[1099,6161,1697],{"class":1326},[1099,6163,6164],{"class":1322}," isTextUIPart",[1099,6166,1713],{"class":1326},[1099,6168,1716],{"class":1312},[1099,6170,1413],{"class":1326},[1099,6172,2520],{"class":1109},[1099,6174,1377],{"class":1326},[1099,6176,6178,6180,6182,6185,6187,6189,6191,6194],{"class":6177,"line":1342},[1101,1551],[1099,6179,1688],{"class":1312},[1099,6181,1691],{"class":1326},[1099,6183,6184],{"class":1322}," Chat",[1099,6186,1713],{"class":1326},[1099,6188,1716],{"class":1312},[1099,6190,1413],{"class":1326},[1099,6192,6193],{"class":1109},"@ai-sdk\u002Fvue",[1099,6195,1377],{"class":1326},[1099,6197,6199,6201,6203,6206,6208,6210,6212,6215],{"class":6198,"line":1357},[1101,1551],[1099,6200,1688],{"class":1312},[1099,6202,1691],{"class":1326},[1099,6204,6205],{"class":1322}," isPartStreaming",[1099,6207,1713],{"class":1326},[1099,6209,1716],{"class":1312},[1099,6211,1413],{"class":1326},[1099,6213,6214],{"class":1109},"@nuxt\u002Fui\u002Futils\u002Fai",[1099,6216,1377],{"class":1326},[1099,6218,6219],{"class":1101,"line":1369},[1099,6220,1391],{"emptyLinePlaceholder":21},[1099,6222,6223,6225,6228,6230,6233],{"class":1101,"line":1380},[1099,6224,3048],{"class":1569},[1099,6226,6227],{"class":1322}," route ",[1099,6229,1573],{"class":1326},[1099,6231,6232],{"class":1122}," useRoute",[1099,6234,2655],{"class":1322},[1099,6236,6237,6239,6242,6244,6247],{"class":1101,"line":1388},[1099,6238,3048],{"class":1569},[1099,6240,6241],{"class":1322}," toast ",[1099,6243,1573],{"class":1326},[1099,6245,6246],{"class":1122}," useToast",[1099,6248,2655],{"class":1322},[1099,6250,6251],{"class":1101,"line":1394},[1099,6252,1391],{"emptyLinePlaceholder":21},[1099,6254,6255],{"class":1101,"line":1405},[1099,6256,6257],{"class":2677},"\u002F\u002F Fetch existing chat data\n",[1099,6259,6260,6262,6264,6267,6269,6272,6274,6276,6278,6281,6283,6285,6288,6290,6293,6295,6298,6300,6302,6304],{"class":1101,"line":1421},[1099,6261,3048],{"class":1569},[1099,6263,1691],{"class":1326},[1099,6265,6266],{"class":1332}," data",[1099,6268,1336],{"class":1326},[1099,6270,6271],{"class":1322}," chatData ",[1099,6273,1458],{"class":1326},[1099,6275,2609],{"class":1326},[1099,6277,2612],{"class":1312},[1099,6279,6280],{"class":1122}," useFetch",[1099,6282,1323],{"class":1322},[1099,6284,3693],{"class":1326},[1099,6286,6287],{"class":1109},"\u002Fapi\u002Fchats\u002F",[1099,6289,5402],{"class":1326},[1099,6291,6292],{"class":1322},"route",[1099,6294,1789],{"class":1326},[1099,6296,6297],{"class":1322},"params",[1099,6299,1789],{"class":1326},[1099,6301,2000],{"class":1322},[1099,6303,5411],{"class":1326},[1099,6305,1461],{"class":1322},[1099,6307,6308],{"class":1101,"line":1427},[1099,6309,1391],{"emptyLinePlaceholder":21},[1099,6311,6312,6315,6317,6319,6322,6324,6327],{"class":1101,"line":1432},[1099,6313,6314],{"class":1312},"if",[1099,6316,1932],{"class":1322},[1099,6318,3553],{"class":1326},[1099,6320,6321],{"class":1322},"chatData",[1099,6323,1789],{"class":1326},[1099,6325,6326],{"class":1322},"value) ",[1099,6328,1327],{"class":1326},[1099,6330,6331,6334,6336,6338,6340,6342,6344,6346,6348,6350,6352,6354,6356,6358,6360,6363,6365,6367,6369],{"class":1101,"line":1455},[1099,6332,6333],{"class":1312},"  throw",[1099,6335,2886],{"class":1122},[1099,6337,1323],{"class":1332},[1099,6339,1846],{"class":1326},[1099,6341,3575],{"class":1332},[1099,6343,1336],{"class":1326},[1099,6345,3581],{"class":3580},[1099,6347,1697],{"class":1326},[1099,6349,3586],{"class":1332},[1099,6351,1336],{"class":1326},[1099,6353,1413],{"class":1326},[1099,6355,3593],{"class":1109},[1099,6357,1351],{"class":1326},[1099,6359,1697],{"class":1326},[1099,6361,6362],{"class":1332}," fatal",[1099,6364,1336],{"class":1326},[1099,6366,4186],{"class":4185},[1099,6368,1713],{"class":1326},[1099,6370,1461],{"class":1332},[1099,6372,6373],{"class":1101,"line":1960},[1099,6374,5418],{"class":1326},[1099,6376,6377],{"class":1101,"line":1987},[1099,6378,1391],{"emptyLinePlaceholder":21},[1099,6380,6381,6383,6385,6387,6389,6391,6393],{"class":1101,"line":2033},[1099,6382,3048],{"class":1569},[1099,6384,5153],{"class":1322},[1099,6386,1573],{"class":1326},[1099,6388,5158],{"class":1122},[1099,6390,1323],{"class":1322},[1099,6392,5163],{"class":1326},[1099,6394,1461],{"class":1322},[1099,6396,6397],{"class":1101,"line":2100},[1099,6398,1391],{"emptyLinePlaceholder":21},[1099,6400,6401],{"class":1101,"line":2170},[1099,6402,6403],{"class":2677},"\u002F\u002F Initialize the Chat class from AI SDK\n",[1099,6405,6407,6409,6412,6414,6416,6418,6420],{"class":6406,"line":2210},[1101,1551],[1099,6408,3048],{"class":1569},[1099,6410,6411],{"class":1322}," chat ",[1099,6413,1573],{"class":1326},[1099,6415,1883],{"class":1326},[1099,6417,6184],{"class":1122},[1099,6419,1323],{"class":1322},[1099,6421,1327],{"class":1326},[1099,6423,6425,6427,6429,6432,6434,6436,6438,6440],{"class":6424,"line":2261},[1101,1551],[1099,6426,1779],{"class":1332},[1099,6428,1336],{"class":1326},[1099,6430,6431],{"class":1322}," chatData",[1099,6433,1789],{"class":1326},[1099,6435,3333],{"class":1322},[1099,6437,1789],{"class":1326},[1099,6439,2000],{"class":1322},[1099,6441,1354],{"class":1326},[1099,6443,6445,6447,6449,6451,6453,6455,6457,6459],{"class":6444,"line":2274},[1101,1551],[1099,6446,1939],{"class":1332},[1099,6448,1336],{"class":1326},[1099,6450,6431],{"class":1322},[1099,6452,1789],{"class":1326},[1099,6454,3333],{"class":1322},[1099,6456,1789],{"class":1326},[1099,6458,1978],{"class":1322},[1099,6460,1354],{"class":1326},[1099,6462,6464,6467,6469,6471,6473,6475],{"class":6463,"line":2304},[1101,1551],[1099,6465,6466],{"class":1332},"  transport",[1099,6468,1336],{"class":1326},[1099,6470,1883],{"class":1326},[1099,6472,6154],{"class":1122},[1099,6474,1323],{"class":1322},[1099,6476,1327],{"class":1326},[1099,6478,6480,6483,6485,6487,6489,6491,6493,6495,6497,6499,6501],{"class":6479,"line":2310},[1101,1551],[1099,6481,6482],{"class":1332},"    api",[1099,6484,1336],{"class":1326},[1099,6486,3687],{"class":1326},[1099,6488,6287],{"class":1109},[1099,6490,5402],{"class":1326},[1099,6492,6321],{"class":1322},[1099,6494,1789],{"class":1326},[1099,6496,3333],{"class":1322},[1099,6498,1789],{"class":1326},[1099,6500,2000],{"class":1322},[1099,6502,6503],{"class":1326},"}`\n",[1099,6505,6507,6509,6511],{"class":6506,"line":2315},[1101,1551],[1099,6508,2400],{"class":1326},[1099,6510,1863],{"class":1322},[1099,6512,1354],{"class":1326},[1099,6514,6516,6519,6521,6524,6526],{"class":6515,"line":2347},[1101,1551],[1099,6517,6518],{"class":1332},"  onData",[1099,6520,1323],{"class":1326},[1099,6522,6523],{"class":1923},"dataPart",[1099,6525,1863],{"class":1326},[1099,6527,1402],{"class":1326},[1099,6529,6531],{"class":6530,"line":2363},[1101,1551],[1099,6532,6533],{"class":2677},"    \u002F\u002F Refresh the chat list when a title is generated\n",[1099,6535,6537,6540,6542,6544,6546,6549,6551,6553,6555,6557,6559],{"class":6536,"line":2381},[1101,1551],[1099,6538,6539],{"class":1312},"    if",[1099,6541,1932],{"class":1332},[1099,6543,6523],{"class":1322},[1099,6545,1789],{"class":1326},[1099,6547,6548],{"class":1322},"type",[1099,6550,3360],{"class":1326},[1099,6552,1413],{"class":1326},[1099,6554,4333],{"class":1109},[1099,6556,1351],{"class":1326},[1099,6558,3558],{"class":1332},[1099,6560,1327],{"class":1326},[1099,6562,6564,6567,6569,6571,6573,6575],{"class":6563,"line":2397},[1101,1551],[1099,6565,6566],{"class":1122},"      refreshNuxtData",[1099,6568,1323],{"class":1332},[1099,6570,1351],{"class":1326},[1099,6572,1768],{"class":1109},[1099,6574,1351],{"class":1326},[1099,6576,1461],{"class":1332},[1099,6578,6580],{"class":6579,"line":2405},[1101,1551],[1099,6581,4568],{"class":1326},[1099,6583,6585],{"class":6584,"line":3385},[1101,1551],[1099,6586,1424],{"class":1326},[1099,6588,6590,6593,6595,6598,6600],{"class":6589,"line":3402},[1101,1551],[1099,6591,6592],{"class":1332},"  onError",[1099,6594,1323],{"class":1326},[1099,6596,6597],{"class":1923},"error",[1099,6599,1863],{"class":1326},[1099,6601,1402],{"class":1326},[1099,6603,6605,6608,6610,6613,6615],{"class":6604,"line":3434},[1101,1551],[1099,6606,6607],{"class":1322},"    toast",[1099,6609,1789],{"class":1326},[1099,6611,6612],{"class":1122},"add",[1099,6614,1323],{"class":1332},[1099,6616,1327],{"class":1326},[1099,6618,6620,6623,6625,6627,6629,6631],{"class":6619,"line":3447},[1101,1551],[1099,6621,6622],{"class":1332},"      title",[1099,6624,1336],{"class":1326},[1099,6626,1413],{"class":1326},[1099,6628,497],{"class":1109},[1099,6630,1351],{"class":1326},[1099,6632,1354],{"class":1326},[1099,6634,6636,6639,6641,6644,6646,6648],{"class":6635,"line":3452},[1101,1551],[1099,6637,6638],{"class":1332},"      description",[1099,6640,1336],{"class":1326},[1099,6642,6643],{"class":1322}," error",[1099,6645,1789],{"class":1326},[1099,6647,4485],{"class":1322},[1099,6649,1354],{"class":1326},[1099,6651,6653,6656,6658,6660,6662],{"class":6652,"line":3458},[1101,1551],[1099,6654,6655],{"class":1332},"      color",[1099,6657,1336],{"class":1326},[1099,6659,1413],{"class":1326},[1099,6661,6597],{"class":1109},[1099,6663,1377],{"class":1326},[1099,6665,6667,6669],{"class":6666,"line":3489},[1101,1551],[1099,6668,3388],{"class":1326},[1099,6670,1461],{"class":1332},[1099,6672,6674],{"class":6673,"line":3533},[1101,1551],[1099,6675,3605],{"class":1326},[1099,6677,6679,6681],{"class":6678,"line":3540},[1101,1551],[1099,6680,1458],{"class":1326},[1099,6682,1461],{"class":1322},[1099,6684,6685],{"class":1101,"line":3545},[1099,6686,1391],{"emptyLinePlaceholder":21},[1099,6688,6689,6692,6695,6697,6700,6702,6705,6707],{"class":1101,"line":3563},[1099,6690,6691],{"class":1569},"function",[1099,6693,6694],{"class":1122}," handleSubmit",[1099,6696,1323],{"class":1326},[1099,6698,6699],{"class":1923},"e",[1099,6701,1336],{"class":1326},[1099,6703,6704],{"class":1105}," Event",[1099,6706,1863],{"class":1326},[1099,6708,1402],{"class":1326},[1099,6710,6711,6714,6716,6719],{"class":1101,"line":3602},[1099,6712,6713],{"class":1322},"  e",[1099,6715,1789],{"class":1326},[1099,6717,6718],{"class":1122},"preventDefault",[1099,6720,2655],{"class":1332},[1099,6722,6723,6725,6727,6729,6731,6733,6735,6737,6739],{"class":1101,"line":3608},[1099,6724,3548],{"class":1312},[1099,6726,1932],{"class":1332},[1099,6728,5212],{"class":1322},[1099,6730,1789],{"class":1326},[1099,6732,3333],{"class":1322},[1099,6734,1789],{"class":1326},[1099,6736,5221],{"class":1122},[1099,6738,5224],{"class":1332},[1099,6740,1327],{"class":1326},[1099,6742,6743,6746,6748,6751,6753,6755,6757,6759,6761,6763,6765,6767],{"class":1101,"line":3613},[1099,6744,6745],{"class":1322},"    chat",[1099,6747,1789],{"class":1326},[1099,6749,6750],{"class":1122},"sendMessage",[1099,6752,1323],{"class":1332},[1099,6754,1846],{"class":1326},[1099,6756,1700],{"class":1332},[1099,6758,1336],{"class":1326},[1099,6760,5356],{"class":1322},[1099,6762,1789],{"class":1326},[1099,6764,3333],{"class":1322},[1099,6766,1713],{"class":1326},[1099,6768,1461],{"class":1332},[1099,6770,6771,6774,6776,6778,6780],{"class":1101,"line":3619},[1099,6772,6773],{"class":1322},"    input",[1099,6775,1789],{"class":1326},[1099,6777,3333],{"class":1322},[1099,6779,2609],{"class":1326},[1099,6781,6782],{"class":1326}," ''\n",[1099,6784,6785],{"class":1101,"line":3639},[1099,6786,3605],{"class":1326},[1099,6788,6789],{"class":1101,"line":3667},[1099,6790,5418],{"class":1326},[1099,6792,6793],{"class":1101,"line":3679},[1099,6794,1391],{"emptyLinePlaceholder":21},[1099,6796,6797],{"class":1101,"line":3698},[1099,6798,6799],{"class":2677},"\u002F\u002F Auto-generate response for first message\n",[1099,6801,6802,6805,6807,6809,6811],{"class":1101,"line":3726},[1099,6803,6804],{"class":1122},"onMounted",[1099,6806,1323],{"class":1322},[1099,6808,1786],{"class":1326},[1099,6810,1806],{"class":1569},[1099,6812,1402],{"class":1326},[1099,6814,6815,6817,6819,6821,6823,6825,6827,6829,6831,6833,6835,6837,6839],{"class":1101,"line":3733},[1099,6816,3548],{"class":1312},[1099,6818,1932],{"class":1332},[1099,6820,6321],{"class":1322},[1099,6822,1789],{"class":1326},[1099,6824,3333],{"class":1322},[1099,6826,3859],{"class":1326},[1099,6828,1978],{"class":1322},[1099,6830,1789],{"class":1326},[1099,6832,3838],{"class":1322},[1099,6834,3360],{"class":1326},[1099,6836,3844],{"class":3580},[1099,6838,3558],{"class":1332},[1099,6840,1327],{"class":1326},[1099,6842,6843,6845,6847,6850],{"class":1101,"line":3738},[1099,6844,6745],{"class":1322},[1099,6846,1789],{"class":1326},[1099,6848,6849],{"class":1122},"regenerate",[1099,6851,2655],{"class":1332},[1099,6853,6854],{"class":1101,"line":3804},[1099,6855,3605],{"class":1326},[1099,6857,6858,6860],{"class":1101,"line":3809},[1099,6859,1458],{"class":1326},[1099,6861,1461],{"class":1322},[1099,6863,6864,6866,6868],{"class":1101,"line":3814},[1099,6865,1617],{"class":1326},[1099,6867,5130],{"class":1332},[1099,6869,1547],{"class":1326},[1099,6871,6872],{"class":1101,"line":3820},[1099,6873,1391],{"emptyLinePlaceholder":21},[1099,6875,6876,6878,6880],{"class":1101,"line":3849},[1099,6877,1541],{"class":1326},[1099,6879,1544],{"class":1332},[1099,6881,1547],{"class":1326},[1099,6883,6884,6886,6888,6890,6892,6894,6896,6898],{"class":1101,"line":3890},[1099,6885,1554],{"class":1326},[1099,6887,5445],{"class":1332},[1099,6889,5448],{"class":1569},[1099,6891,1573],{"class":1326},[1099,6893,1500],{"class":1326},[1099,6895,5455],{"class":1109},[1099,6897,1500],{"class":1326},[1099,6899,1547],{"class":1326},[1099,6901,6902,6904,6906,6908,6910],{"class":1101,"line":3919},[1099,6903,1563],{"class":1326},[1099,6905,1544],{"class":1332},[1099,6907,5468],{"class":1326},[1099,6909,5471],{"class":1569},[1099,6911,1547],{"class":1326},[1099,6913,6914,6916,6918,6920,6922,6924,6927,6929],{"class":1101,"line":3931},[1099,6915,1587],{"class":1326},[1099,6917,5480],{"class":1332},[1099,6919,5483],{"class":1569},[1099,6921,1573],{"class":1326},[1099,6923,1500],{"class":1326},[1099,6925,6926],{"class":1109},"min-h-dvh flex flex-col py-4 sm:py-6",[1099,6928,1500],{"class":1326},[1099,6930,1547],{"class":1326},[1099,6932,6933,6935],{"class":1101,"line":3947},[1099,6934,5499],{"class":1326},[1099,6936,6937],{"class":1332},"UChatMessages\n",[1099,6939,6940,6943,6945,6947,6950],{"class":1101,"line":3961},[1099,6941,6942],{"class":1569},"          :messages",[1099,6944,1573],{"class":1326},[1099,6946,1500],{"class":1326},[1099,6948,6949],{"class":1109},"chat.messages",[1099,6951,5556],{"class":1326},[1099,6953,6954,6956,6958,6960,6963],{"class":1101,"line":3968},[1099,6955,5562],{"class":1569},[1099,6957,1573],{"class":1326},[1099,6959,1500],{"class":1326},[1099,6961,6962],{"class":1109},"chat.status",[1099,6964,5556],{"class":1326},[1099,6966,6967],{"class":1101,"line":3973},[1099,6968,6969],{"class":1569},"          should-auto-scroll\n",[1099,6971,6972,6975,6977,6979,6982],{"class":1101,"line":3978},[1099,6973,6974],{"class":1569},"          class",[1099,6976,1573],{"class":1326},[1099,6978,1500],{"class":1326},[1099,6980,6981],{"class":1109},"flex-1",[1099,6983,5556],{"class":1326},[1099,6985,6986],{"class":1101,"line":3984},[1099,6987,5622],{"class":1326},[1099,6989,6990,6992,6994,6996,6998,7000,7002,7004,7007,7009,7011],{"class":1101,"line":4001},[1099,6991,5628],{"class":1326},[1099,6993,1544],{"class":1332},[1099,6995,5468],{"class":1326},[1099,6997,371],{"class":1569},[1099,6999,1573],{"class":1326},[1099,7001,1500],{"class":1326},[1099,7003,1846],{"class":1326},[1099,7005,7006],{"class":1322}," message ",[1099,7008,1458],{"class":1326},[1099,7010,1500],{"class":1326},[1099,7012,1547],{"class":1326},[1099,7014,7015,7018,7020,7023,7025,7027,7030,7032,7035,7038,7040,7042,7044,7046,7049,7052,7054,7057,7059,7061,7063,7065,7068,7070,7073,7075,7077,7079,7081,7083,7086,7089],{"class":1101,"line":4023},[1099,7016,7017],{"class":1326},"            \u003C",[1099,7019,1544],{"class":1332},[1099,7021,7022],{"class":1312}," v-for",[1099,7024,1573],{"class":1326},[1099,7026,1500],{"class":1326},[1099,7028,7029],{"class":1322},"(part",[1099,7031,1697],{"class":1326},[1099,7033,7034],{"class":1322}," index) ",[1099,7036,7037],{"class":1326},"in",[1099,7039,2604],{"class":1322},[1099,7041,1789],{"class":1326},[1099,7043,2184],{"class":1322},[1099,7045,1500],{"class":1326},[1099,7047,7048],{"class":1326}," :",[1099,7050,7051],{"class":1569},"key",[1099,7053,1573],{"class":1326},[1099,7055,7056],{"class":1326},"\"`${",[1099,7058,4485],{"class":1322},[1099,7060,1789],{"class":1326},[1099,7062,2000],{"class":1322},[1099,7064,1458],{"class":1326},[1099,7066,7067],{"class":1109},"-",[1099,7069,5402],{"class":1326},[1099,7071,7072],{"class":1322},"part",[1099,7074,1789],{"class":1326},[1099,7076,6548],{"class":1322},[1099,7078,1458],{"class":1326},[1099,7080,7067],{"class":1109},[1099,7082,5402],{"class":1326},[1099,7084,7085],{"class":1322},"index",[1099,7087,7088],{"class":1326},"}`\"",[1099,7090,1547],{"class":1326},[1099,7092,7093,7096],{"class":1101,"line":4041},[1099,7094,7095],{"class":1326},"              \u003C",[1099,7097,7098],{"class":1332},"UChatReasoning\n",[1099,7100,7101,7104,7106,7108,7111],{"class":1101,"line":4049},[1099,7102,7103],{"class":1569},"                v-if",[1099,7105,1573],{"class":1326},[1099,7107,1500],{"class":1326},[1099,7109,7110],{"class":1109},"isReasoningUIPart(part)",[1099,7112,5556],{"class":1326},[1099,7114,7115,7118,7120,7122,7125],{"class":1101,"line":4066},[1099,7116,7117],{"class":1569},"                :text",[1099,7119,1573],{"class":1326},[1099,7121,1500],{"class":1326},[1099,7123,7124],{"class":1109},"part.text",[1099,7126,5556],{"class":1326},[1099,7128,7129,7132,7134,7136,7139],{"class":1101,"line":4087},[1099,7130,7131],{"class":1569},"                :streaming",[1099,7133,1573],{"class":1326},[1099,7135,1500],{"class":1326},[1099,7137,7138],{"class":1109},"isPartStreaming(part)",[1099,7140,5556],{"class":1326},[1099,7142,7143],{"class":1101,"line":4097},[1099,7144,7145],{"class":1326},"              >\n",[1099,7147,7148,7151],{"class":1101,"line":4107},[1099,7149,7150],{"class":1326},"                \u003C",[1099,7152,7153],{"class":1332},"ChatComark\n",[1099,7155,7156,7159,7161,7163,7165],{"class":1101,"line":4117},[1099,7157,7158],{"class":1569},"                  :markdown",[1099,7160,1573],{"class":1326},[1099,7162,1500],{"class":1326},[1099,7164,7124],{"class":1109},[1099,7166,5556],{"class":1326},[1099,7168,7169,7172,7174,7176,7178],{"class":1101,"line":4134},[1099,7170,7171],{"class":1569},"                  :streaming",[1099,7173,1573],{"class":1326},[1099,7175,1500],{"class":1326},[1099,7177,7138],{"class":1109},[1099,7179,5556],{"class":1326},[1099,7181,7182],{"class":1101,"line":4145},[1099,7183,7184],{"class":1326},"                \u002F>\n",[1099,7186,7187,7190,7193],{"class":1101,"line":4151},[1099,7188,7189],{"class":1326},"              \u003C\u002F",[1099,7191,7192],{"class":1332},"UChatReasoning",[1099,7194,1547],{"class":1326},[1099,7196,7197],{"class":1101,"line":4157},[1099,7198,1391],{"emptyLinePlaceholder":21},[1099,7200,7201,7203,7205,7208,7210,7212,7215,7218,7220],{"class":1101,"line":4167},[1099,7202,7095],{"class":1326},[1099,7204,1544],{"class":1332},[1099,7206,7207],{"class":1312}," v-else-if",[1099,7209,1573],{"class":1326},[1099,7211,1500],{"class":1326},[1099,7213,7214],{"class":1122},"isTextUIPart",[1099,7216,7217],{"class":1322},"(part)",[1099,7219,1500],{"class":1326},[1099,7221,1547],{"class":1326},[1099,7223,7224,7226],{"class":1101,"line":4177},[1099,7225,7150],{"class":1326},[1099,7227,7153],{"class":1332},[1099,7229,7230,7233,7235,7237,7240],{"class":1101,"line":4191},[1099,7231,7232],{"class":1569},"                  v-if",[1099,7234,1573],{"class":1326},[1099,7236,1500],{"class":1326},[1099,7238,7239],{"class":1109},"message.role === 'assistant'",[1099,7241,5556],{"class":1326},[1099,7243,7244,7246,7248,7250,7252],{"class":1101,"line":4206},[1099,7245,7158],{"class":1569},[1099,7247,1573],{"class":1326},[1099,7249,1500],{"class":1326},[1099,7251,7124],{"class":1109},[1099,7253,5556],{"class":1326},[1099,7255,7256,7258,7260,7262,7264],{"class":1101,"line":4211},[1099,7257,7171],{"class":1569},[1099,7259,1573],{"class":1326},[1099,7261,1500],{"class":1326},[1099,7263,7138],{"class":1109},[1099,7265,5556],{"class":1326},[1099,7267,7268],{"class":1101,"line":4216},[1099,7269,7184],{"class":1326},[1099,7271,7272,7274,7276,7278,7280,7282,7285,7287,7289,7291,7293,7296,7298],{"class":1101,"line":4226},[1099,7273,7150],{"class":1326},[1099,7275,989],{"class":1332},[1099,7277,7207],{"class":1569},[1099,7279,1573],{"class":1326},[1099,7281,1500],{"class":1326},[1099,7283,7284],{"class":1109},"message.role === 'user'",[1099,7286,1500],{"class":1326},[1099,7288,5483],{"class":1569},[1099,7290,1573],{"class":1326},[1099,7292,1500],{"class":1326},[1099,7294,7295],{"class":1109},"whitespace-pre-wrap",[1099,7297,1500],{"class":1326},[1099,7299,1547],{"class":1326},[1099,7301,7302],{"class":1101,"line":4242},[1099,7303,7304],{"class":1322},"                  {{ part.text }}\n",[1099,7306,7307,7310,7312],{"class":1101,"line":4257},[1099,7308,7309],{"class":1326},"                \u003C\u002F",[1099,7311,989],{"class":1332},[1099,7313,1547],{"class":1326},[1099,7315,7316,7318,7320],{"class":1101,"line":4263},[1099,7317,7189],{"class":1326},[1099,7319,1544],{"class":1332},[1099,7321,1547],{"class":1326},[1099,7323,7324,7327,7329],{"class":1101,"line":4269},[1099,7325,7326],{"class":1326},"            \u003C\u002F",[1099,7328,1544],{"class":1332},[1099,7330,1547],{"class":1326},[1099,7332,7333,7336,7338],{"class":1101,"line":4277},[1099,7334,7335],{"class":1326},"          \u003C\u002F",[1099,7337,1544],{"class":1332},[1099,7339,1547],{"class":1326},[1099,7341,7342,7344,7346],{"class":1101,"line":4282},[1099,7343,5525],{"class":1326},[1099,7345,5101],{"class":1332},[1099,7347,1547],{"class":1326},[1099,7349,7350],{"class":1101,"line":4288},[1099,7351,1391],{"emptyLinePlaceholder":21},[1099,7353,7354,7356],{"class":1101,"line":4308},[1099,7355,5499],{"class":1326},[1099,7357,5541],{"class":1332},[1099,7359,7360,7362,7364,7366,7368],{"class":1101,"line":4323},[1099,7361,5547],{"class":1569},[1099,7363,1573],{"class":1326},[1099,7365,1500],{"class":1326},[1099,7367,5212],{"class":1109},[1099,7369,5556],{"class":1326},[1099,7371,7372,7375,7377,7379,7382],{"class":1101,"line":4340},[1099,7373,7374],{"class":1569},"          :error",[1099,7376,1573],{"class":1326},[1099,7378,1500],{"class":1326},[1099,7380,7381],{"class":1109},"chat.error",[1099,7383,5556],{"class":1326},[1099,7385,7386,7388,7390,7392,7394],{"class":1101,"line":4363},[1099,7387,5577],{"class":1569},[1099,7389,1573],{"class":1326},[1099,7391,1500],{"class":1326},[1099,7393,5584],{"class":1109},[1099,7395,5556],{"class":1326},[1099,7397,7398,7400,7402,7404,7407],{"class":1101,"line":4374},[1099,7399,6974],{"class":1569},[1099,7401,1573],{"class":1326},[1099,7403,1500],{"class":1326},[1099,7405,7406],{"class":1109},"sticky bottom-0",[1099,7408,5556],{"class":1326},[1099,7410,7411,7413,7415,7417,7420],{"class":1101,"line":4382},[1099,7412,5607],{"class":1569},[1099,7414,1573],{"class":1326},[1099,7416,1500],{"class":1326},[1099,7418,7419],{"class":1109},"handleSubmit",[1099,7421,5556],{"class":1326},[1099,7423,7424],{"class":1101,"line":4388},[1099,7425,5622],{"class":1326},[1099,7427,7428,7430],{"class":1101,"line":4393},[1099,7429,5628],{"class":1326},[1099,7431,7432],{"class":1332},"UChatPromptSubmit\n",[1099,7434,7435,7438,7440,7442,7444],{"class":1101,"line":4416},[1099,7436,7437],{"class":1569},"            :status",[1099,7439,1573],{"class":1326},[1099,7441,1500],{"class":1326},[1099,7443,6962],{"class":1109},[1099,7445,5556],{"class":1326},[1099,7447,7448,7451,7453,7455,7457],{"class":1101,"line":4422},[1099,7449,7450],{"class":1569},"            color",[1099,7452,1573],{"class":1326},[1099,7454,1500],{"class":1326},[1099,7456,5641],{"class":1109},[1099,7458,5556],{"class":1326},[1099,7460,7461,7464,7466,7468,7471],{"class":1101,"line":4442},[1099,7462,7463],{"class":1569},"            @stop",[1099,7465,1573],{"class":1326},[1099,7467,1500],{"class":1326},[1099,7469,7470],{"class":1109},"chat.stop()",[1099,7472,5556],{"class":1326},[1099,7474,7475,7478,7480,7482,7485],{"class":1101,"line":4448},[1099,7476,7477],{"class":1569},"            @reload",[1099,7479,1573],{"class":1326},[1099,7481,1500],{"class":1326},[1099,7483,7484],{"class":1109},"chat.regenerate()",[1099,7486,5556],{"class":1326},[1099,7488,7489],{"class":1101,"line":4494},[1099,7490,7491],{"class":1326},"          \u002F>\n",[1099,7493,7494,7496,7498],{"class":1101,"line":4510},[1099,7495,5525],{"class":1326},[1099,7497,5095],{"class":1332},[1099,7499,1547],{"class":1326},[1099,7501,7502,7504,7506],{"class":1101,"line":4543},[1099,7503,5659],{"class":1326},[1099,7505,5480],{"class":1332},[1099,7507,1547],{"class":1326},[1099,7509,7510,7512,7514],{"class":1101,"line":4557},[1099,7511,1598],{"class":1326},[1099,7513,1544],{"class":1332},[1099,7515,1547],{"class":1326},[1099,7517,7518,7520,7522],{"class":1101,"line":4565},[1099,7519,1608],{"class":1326},[1099,7521,5445],{"class":1332},[1099,7523,1547],{"class":1326},[1099,7525,7526,7528,7530],{"class":1101,"line":4571},[1099,7527,1617],{"class":1326},[1099,7529,1544],{"class":1332},[1099,7531,1547],{"class":1326},[989,7533,7534],{},"Here's a breakdown of the key parts:",[989,7536,7537],{},[1007,7538,7539],{},"The Chat Class",[989,7541,4644,7542,7547,7548,7550],{},[1043,7543,7545],{"href":6101,"rel":7544},[1047],[1049,7546,259],{}," class from ",[1049,7549,6193],{}," manages the entire conversation state. It handles:",[1001,7552,7553,7558,7573,7579,7584],{},[1004,7554,7555,7556],{},"Message history with ",[1049,7557,6949],{},[1004,7559,7560,7561,1932,7563,2851,7566,2851,7569,2851,7571,1863],{},"Connection status with ",[1049,7562,6962],{},[1049,7564,7565],{},"ready",[1049,7567,7568],{},"submitted",[1049,7570,5716],{},[1049,7572,6597],{},[1004,7574,7575,7576],{},"Sending messages with ",[1049,7577,7578],{},"chat.sendMessage()",[1004,7580,7581,7582],{},"Stopping generation with ",[1049,7583,7470],{},[1004,7585,7586,7587],{},"Regenerating responses with ",[1049,7588,7484],{},[989,7590,4644,7591,7594,7595,7600,7601,7603],{},[1049,7592,7593],{},"onData"," callback receives ",[1043,7596,7599],{"href":7597,"rel":7598},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-ui\u002Fstreaming-data",[1047],"custom data events"," from the server (like ",[1049,7602,4333],{},"), allowing you to react to server-side events during streaming.",[989,7605,7606],{},[1007,7607,7608],{},"UChatMessages Component",[989,7610,4644,7611,7615],{},[1043,7612,7613],{"href":271},[1049,7614,5101],{}," component is purpose-built for AI chatbots with:",[1001,7617,7618,7621,7624,7627],{},[1004,7619,7620],{},"Auto-scroll to bottom on load",[1004,7622,7623],{},"Continuous scrolling as messages stream in",[1004,7625,7626],{},"A loading indicator while the assistant processes",[1004,7628,7629],{},"An \"Auto scroll\" button when scrolled up",[989,7631,7632],{},[1007,7633,7634],{},"Rendering Message Parts",[989,7636,7637,7638,7640,7641,1052,7643,7646,7647,7649,7650,7654,7655,7658,7659,7661],{},"We iterate over message ",[1049,7639,2184],{}," using AI SDK helpers like ",[1049,7642,7214],{},[1049,7644,7645],{},"isReasoningUIPart",", rendering assistant text with the ",[1049,7648,5954],{}," component we created earlier and reasoning content with ",[1043,7651,7652],{"href":291},[1049,7653,7192],{},". The ",[1049,7656,7657],{},"isPartStreaming"," utility from ",[1049,7660,6214],{}," detects if a part is currently being streamed.",[989,7663,7664],{},[1007,7665,7666],{},"UChatPromptSubmit Component",[989,7668,4644,7669,7673],{},[1043,7670,7671],{"href":286},[1049,7672,5631],{}," component adapts based on the chat status:",[1001,7675,7676,7679,7682],{},[1004,7677,7678],{},"Shows a send button when ready",[1004,7680,7681],{},"Shows a stop button while streaming",[1004,7683,7684],{},"Shows a reload button after an error",[993,7686,7688],{"id":7687},"adding-chat-history","Adding chat history",[989,7690,7691],{},"This section adds a dropdown menu to list previous chats and navigate between them.",[1127,7693,7695],{"id":7694},"listing-chats-api","Listing chats API",[989,7697,7698],{},"First, create an endpoint to fetch all chats:",[1299,7700,7701],{},[1090,7702,7705],{"className":1303,"code":7703,"filename":7704,"language":1305,"meta":1095,"style":1095},"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",[1049,7706,7707,7725,7747,7766,7770,7788,7813,7840,7846],{"__ignoreMap":1095},[1099,7708,7709,7711,7713,7715,7717,7719,7721,7723],{"class":1101,"line":1102},[1099,7710,1688],{"class":1312},[1099,7712,1691],{"class":1326},[1099,7714,2484],{"class":1322},[1099,7716,1713],{"class":1326},[1099,7718,1716],{"class":1312},[1099,7720,1413],{"class":1326},[1099,7722,1127],{"class":1109},[1099,7724,1377],{"class":1326},[1099,7726,7727,7729,7731,7733,7735,7737,7739,7741,7743,7745],{"class":1101,"line":1119},[1099,7728,1688],{"class":1312},[1099,7730,1691],{"class":1326},[1099,7732,2427],{"class":1322},[1099,7734,1697],{"class":1326},[1099,7736,2535],{"class":1322},[1099,7738,1713],{"class":1326},[1099,7740,1716],{"class":1312},[1099,7742,1413],{"class":1326},[1099,7744,2544],{"class":1109},[1099,7746,1377],{"class":1326},[1099,7748,7749,7751,7753,7756,7758,7760,7762,7764],{"class":1101,"line":1342},[1099,7750,1688],{"class":1312},[1099,7752,1691],{"class":1326},[1099,7754,7755],{"class":1322}," desc",[1099,7757,1713],{"class":1326},[1099,7759,1716],{"class":1312},[1099,7761,1413],{"class":1326},[1099,7763,1741],{"class":1109},[1099,7765,1377],{"class":1326},[1099,7767,7768],{"class":1101,"line":1357},[1099,7769,1391],{"emptyLinePlaceholder":21},[1099,7771,7772,7774,7776,7778,7780,7782,7784,7786],{"class":1101,"line":1369},[1099,7773,1313],{"class":1312},[1099,7775,1316],{"class":1312},[1099,7777,2484],{"class":1122},[1099,7779,1323],{"class":1322},[1099,7781,2583],{"class":1569},[1099,7783,4980],{"class":1326},[1099,7785,1806],{"class":1569},[1099,7787,1402],{"class":1326},[1099,7789,7790,7792,7794,7796,7798,7800,7802,7804,7806,7809,7811],{"class":1101,"line":1380},[1099,7791,2827],{"class":1312},[1099,7793,2612],{"class":1312},[1099,7795,2427],{"class":1322},[1099,7797,1789],{"class":1326},[1099,7799,3473],{"class":1322},[1099,7801,1789],{"class":1326},[1099,7803,1768],{"class":1322},[1099,7805,1789],{"class":1326},[1099,7807,7808],{"class":1122},"findMany",[1099,7810,1323],{"class":1332},[1099,7812,1327],{"class":1326},[1099,7814,7815,7818,7820,7822,7824,7826,7828,7830,7832,7834,7836,7838],{"class":1101,"line":1388},[1099,7816,7817],{"class":1122},"    orderBy",[1099,7819,1336],{"class":1326},[1099,7821,4980],{"class":1326},[1099,7823,1806],{"class":1569},[1099,7825,7755],{"class":1122},[1099,7827,1323],{"class":1332},[1099,7829,2704],{"class":1322},[1099,7831,1789],{"class":1326},[1099,7833,1768],{"class":1322},[1099,7835,1789],{"class":1326},[1099,7837,4997],{"class":1322},[1099,7839,1461],{"class":1332},[1099,7841,7842,7844],{"class":1101,"line":1394},[1099,7843,2400],{"class":1326},[1099,7845,1461],{"class":1332},[1099,7847,7848,7850],{"class":1101,"line":1405},[1099,7849,1458],{"class":1326},[1099,7851,1461],{"class":1322},[1127,7853,7855],{"id":7854},"building-the-chats-history-dropdown","Building the chats history dropdown",[989,7857,7858,7859,7864,7865,7870,7871,7864,7878,7880],{},"The component uses ",[1043,7860,7861],{"href":457},[1049,7862,7863],{},"UDropdownMenu"," with a ",[1043,7866,7867],{"href":230},[1049,7868,7869],{},"UButton"," as trigger. Use ",[1043,7872,7875],{"href":7873,"rel":7874},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-fetch",[1047],[1049,7876,7877],{},"useFetch",[1049,7879,7051],{}," to fetch and cache the chat list:",[1299,7882,7883],{},[1090,7884,7887],{"className":1531,"code":7885,"filename":7886,"language":34,"meta":1095,"style":1095},"\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",[1049,7888,7889,7909,7921,7925,7957,7972,7986,7992,7996,8016,8021,8037,8053,8073,8097,8101,8126,8151,8173,8199,8205,8209,8217,8221,8229,8260,8267,8284,8298,8312,8324,8338,8343,8351],{"__ignoreMap":1095},[1099,7890,7891,7893,7895,7897,7899,7901,7903,7905,7907],{"class":1101,"line":1102},[1099,7892,1541],{"class":1326},[1099,7894,5130],{"class":1332},[1099,7896,5133],{"class":1569},[1099,7898,5136],{"class":1569},[1099,7900,1573],{"class":1326},[1099,7902,1500],{"class":1326},[1099,7904,1305],{"class":1109},[1099,7906,1500],{"class":1326},[1099,7908,1547],{"class":1326},[1099,7910,7911,7913,7915,7917,7919],{"class":1101,"line":1119},[1099,7912,3048],{"class":1569},[1099,7914,6227],{"class":1322},[1099,7916,1573],{"class":1326},[1099,7918,6232],{"class":1122},[1099,7920,2655],{"class":1322},[1099,7922,7923],{"class":1101,"line":1342},[1099,7924,1391],{"emptyLinePlaceholder":21},[1099,7926,7927,7929,7931,7933,7935,7937,7939,7941,7943,7945,7947,7949,7951,7953,7955],{"class":1101,"line":1357},[1099,7928,3048],{"class":1569},[1099,7930,1691],{"class":1326},[1099,7932,6266],{"class":1332},[1099,7934,1336],{"class":1326},[1099,7936,1757],{"class":1322},[1099,7938,1458],{"class":1326},[1099,7940,2609],{"class":1326},[1099,7942,2612],{"class":1312},[1099,7944,6280],{"class":1122},[1099,7946,1323],{"class":1322},[1099,7948,1351],{"class":1326},[1099,7950,5273],{"class":1109},[1099,7952,1351],{"class":1326},[1099,7954,1697],{"class":1326},[1099,7956,1402],{"class":1326},[1099,7958,7959,7962,7964,7966,7968,7970],{"class":1101,"line":1369},[1099,7960,7961],{"class":1332},"  key",[1099,7963,1336],{"class":1326},[1099,7965,1413],{"class":1326},[1099,7967,1768],{"class":1109},[1099,7969,1351],{"class":1326},[1099,7971,1354],{"class":1326},[1099,7973,7974,7977,7979,7981,7983],{"class":1101,"line":1380},[1099,7975,7976],{"class":1122},"  default",[1099,7978,1336],{"class":1326},[1099,7980,4980],{"class":1326},[1099,7982,1806],{"class":1569},[1099,7984,7985],{"class":1322}," []\n",[1099,7987,7988,7990],{"class":1101,"line":1388},[1099,7989,1458],{"class":1326},[1099,7991,1461],{"class":1322},[1099,7993,7994],{"class":1101,"line":1394},[1099,7995,1391],{"emptyLinePlaceholder":21},[1099,7997,7998,8000,8003,8005,8008,8010,8012,8014],{"class":1101,"line":1405},[1099,7999,3048],{"class":1569},[1099,8001,8002],{"class":1322}," items ",[1099,8004,1573],{"class":1326},[1099,8006,8007],{"class":1122}," computed",[1099,8009,1323],{"class":1322},[1099,8011,1786],{"class":1326},[1099,8013,1806],{"class":1569},[1099,8015,1339],{"class":1322},[1099,8017,8018],{"class":1101,"line":1421},[1099,8019,8020],{"class":1326},"  {\n",[1099,8022,8023,8026,8028,8030,8033,8035],{"class":1101,"line":1427},[1099,8024,8025],{"class":1332},"    label",[1099,8027,1336],{"class":1326},[1099,8029,1413],{"class":1326},[1099,8031,8032],{"class":1109},"New chat",[1099,8034,1351],{"class":1326},[1099,8036,1354],{"class":1326},[1099,8038,8039,8042,8044,8046,8049,8051],{"class":1101,"line":1432},[1099,8040,8041],{"class":1332},"    to",[1099,8043,1336],{"class":1326},[1099,8045,1413],{"class":1326},[1099,8047,8048],{"class":1109},"\u002F",[1099,8050,1351],{"class":1326},[1099,8052,1354],{"class":1326},[1099,8054,8055,8058,8060,8062,8069,8071],{"class":1101,"line":1455},[1099,8056,8057],{"class":1332},"    icon",[1099,8059,1336],{"class":1326},[1099,8061,1413],{"class":1326},[1099,8063,8064,8068],{"class":1109},[8065,8066],"i",{"class":8067},"shiki-icon-highlight sRy2g","i-lucide-plus-square",[1099,8070,1351],{"class":1326},[1099,8072,1354],{"class":1326},[1099,8074,8075,8078,8080,8083,8085,8088,8091,8093,8095],{"class":1101,"line":1960},[1099,8076,8077],{"class":1332},"    active",[1099,8079,1336],{"class":1326},[1099,8081,8082],{"class":1322}," route",[1099,8084,1789],{"class":1326},[1099,8086,8087],{"class":1322},"name ",[1099,8089,8090],{"class":1326},"===",[1099,8092,1413],{"class":1326},[1099,8094,7085],{"class":1109},[1099,8096,1377],{"class":1326},[1099,8098,8099],{"class":1101,"line":1987},[1099,8100,1424],{"class":1326},[1099,8102,8103,8106,8108,8110,8112,8114,8116,8118,8120,8122,8124],{"class":1101,"line":2033},[1099,8104,8105],{"class":1326},"  ...",[1099,8107,1768],{"class":1322},[1099,8109,1789],{"class":1326},[1099,8111,3333],{"class":1322},[1099,8113,1789],{"class":1326},[1099,8115,4480],{"class":1122},[1099,8117,1323],{"class":1322},[1099,8119,262],{"class":1923},[1099,8121,1806],{"class":1569},[1099,8123,1932],{"class":1322},[1099,8125,1327],{"class":1326},[1099,8127,8128,8130,8132,8134,8136,8139,8142,8144,8147,8149],{"class":1101,"line":2100},[1099,8129,8025],{"class":1332},[1099,8131,1336],{"class":1326},[1099,8133,2777],{"class":1322},[1099,8135,1789],{"class":1326},[1099,8137,8138],{"class":1322},"title ",[1099,8140,8141],{"class":1326},"||",[1099,8143,1413],{"class":1326},[1099,8145,8146],{"class":1109},"Untitled",[1099,8148,1351],{"class":1326},[1099,8150,1354],{"class":1326},[1099,8152,8153,8155,8157,8159,8161,8163,8165,8167,8169,8171],{"class":1101,"line":2170},[1099,8154,8041],{"class":1332},[1099,8156,1336],{"class":1326},[1099,8158,3687],{"class":1326},[1099,8160,5399],{"class":1109},[1099,8162,5402],{"class":1326},[1099,8164,262],{"class":1322},[1099,8166,1789],{"class":1326},[1099,8168,2000],{"class":1322},[1099,8170,5411],{"class":1326},[1099,8172,1354],{"class":1326},[1099,8174,8175,8177,8179,8181,8183,8185,8187,8190,8192,8194,8196],{"class":1101,"line":2210},[1099,8176,8077],{"class":1332},[1099,8178,1336],{"class":1326},[1099,8180,8082],{"class":1322},[1099,8182,1789],{"class":1326},[1099,8184,6297],{"class":1322},[1099,8186,1789],{"class":1326},[1099,8188,8189],{"class":1322},"id ",[1099,8191,8090],{"class":1326},[1099,8193,2777],{"class":1322},[1099,8195,1789],{"class":1326},[1099,8197,8198],{"class":1322},"id\n",[1099,8200,8201,8203],{"class":1101,"line":2261},[1099,8202,2400],{"class":1326},[1099,8204,1953],{"class":1322},[1099,8206,8207],{"class":1101,"line":2274},[1099,8208,2307],{"class":1322},[1099,8210,8211,8213,8215],{"class":1101,"line":2304},[1099,8212,1617],{"class":1326},[1099,8214,5130],{"class":1332},[1099,8216,1547],{"class":1326},[1099,8218,8219],{"class":1101,"line":2310},[1099,8220,1391],{"emptyLinePlaceholder":21},[1099,8222,8223,8225,8227],{"class":1101,"line":2315},[1099,8224,1541],{"class":1326},[1099,8226,1544],{"class":1332},[1099,8228,1547],{"class":1326},[1099,8230,8231,8233,8235,8238,8240,8242,8245,8247,8249,8251,8253,8256,8258],{"class":1101,"line":2347},[1099,8232,1554],{"class":1326},[1099,8234,7863],{"class":1332},[1099,8236,8237],{"class":1569}," :items",[1099,8239,1573],{"class":1326},[1099,8241,1500],{"class":1326},[1099,8243,8244],{"class":1109},"items",[1099,8246,1500],{"class":1326},[1099,8248,5483],{"class":1569},[1099,8250,1573],{"class":1326},[1099,8252,1500],{"class":1326},[1099,8254,8255],{"class":1109},"m-2",[1099,8257,1500],{"class":1326},[1099,8259,1547],{"class":1326},[1099,8261,8262,8264],{"class":1101,"line":2363},[1099,8263,1563],{"class":1326},[1099,8265,8266],{"class":1332},"UButton\n",[1099,8268,8269,8272,8274,8276,8282],{"class":1101,"line":2381},[1099,8270,8271],{"class":1569},"      icon",[1099,8273,1573],{"class":1326},[1099,8275,1500],{"class":1326},[1099,8277,8278,8281],{"class":1109},[8065,8279],{"class":8280},"shiki-icon-highlight sdATh","i-lucide-messages-square",[1099,8283,5556],{"class":1326},[1099,8285,8286,8289,8291,8293,8296],{"class":1101,"line":2397},[1099,8287,8288],{"class":1569},"      variant",[1099,8290,1573],{"class":1326},[1099,8292,1500],{"class":1326},[1099,8294,8295],{"class":1109},"ghost",[1099,8297,5556],{"class":1326},[1099,8299,8300,8303,8305,8307,8310],{"class":1101,"line":2405},[1099,8301,8302],{"class":1569},"      label",[1099,8304,1573],{"class":1326},[1099,8306,1500],{"class":1326},[1099,8308,8309],{"class":1109},"Chats History",[1099,8311,5556],{"class":1326},[1099,8313,8314,8316,8318,8320,8322],{"class":1101,"line":3385},[1099,8315,6655],{"class":1569},[1099,8317,1573],{"class":1326},[1099,8319,1500],{"class":1326},[1099,8321,5641],{"class":1109},[1099,8323,5556],{"class":1326},[1099,8325,8326,8329,8331,8333,8336],{"class":1101,"line":3402},[1099,8327,8328],{"class":1569},"      class",[1099,8330,1573],{"class":1326},[1099,8332,1500],{"class":1326},[1099,8334,8335],{"class":1109},"w-fit",[1099,8337,5556],{"class":1326},[1099,8339,8340],{"class":1101,"line":3434},[1099,8341,8342],{"class":1326},"    \u002F>\n",[1099,8344,8345,8347,8349],{"class":1101,"line":3447},[1099,8346,1608],{"class":1326},[1099,8348,7863],{"class":1332},[1099,8350,1547],{"class":1326},[1099,8352,8353,8355,8357],{"class":1101,"line":3452},[1099,8354,1617],{"class":1326},[1099,8356,1544],{"class":1332},[1099,8358,1547],{"class":1326},[993,8360,8362],{"id":8361},"integrating-history-in-the-home-page","Integrating history in the home page",[1299,8364,8365],{},[1676,8366,8367],{},[1090,8368,8371],{"className":1531,"code":8369,"filename":5120,"highlights":8370,"language":34,"meta":1095,"style":1095},"\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",[2397,2405,3385],[1049,8372,8373,8393,8409,8425,8429,8441,8463,8467,8479,8483,8487,8511,8525,8533,8541,8555,8591,8595,8599,8605,8609,8613,8635,8639,8647,8651,8659,8677,8691,8701,8710,8722,8740,8758,8762,8770,8774,8780,8792,8804,8816,8828,8840,8844,8862,8870,8878,8886,8894],{"__ignoreMap":1095},[1099,8374,8375,8377,8379,8381,8383,8385,8387,8389,8391],{"class":1101,"line":1102},[1099,8376,1541],{"class":1326},[1099,8378,5130],{"class":1332},[1099,8380,5133],{"class":1569},[1099,8382,5136],{"class":1569},[1099,8384,1573],{"class":1326},[1099,8386,1500],{"class":1326},[1099,8388,1305],{"class":1109},[1099,8390,1500],{"class":1326},[1099,8392,1547],{"class":1326},[1099,8394,8395,8397,8399,8401,8403,8405,8407],{"class":1101,"line":1119},[1099,8396,3048],{"class":1569},[1099,8398,5153],{"class":1322},[1099,8400,1573],{"class":1326},[1099,8402,5158],{"class":1122},[1099,8404,1323],{"class":1322},[1099,8406,5163],{"class":1326},[1099,8408,1461],{"class":1322},[1099,8410,8411,8413,8415,8417,8419,8421,8423],{"class":1101,"line":1342},[1099,8412,3048],{"class":1569},[1099,8414,5172],{"class":1322},[1099,8416,1573],{"class":1326},[1099,8418,5158],{"class":1122},[1099,8420,1323],{"class":1322},[1099,8422,5181],{"class":4185},[1099,8424,1461],{"class":1322},[1099,8426,8427],{"class":1101,"line":1357},[1099,8428,1391],{"emptyLinePlaceholder":21},[1099,8430,8431,8433,8435,8437,8439],{"class":1101,"line":1369},[1099,8432,2583],{"class":1569},[1099,8434,5194],{"class":1569},[1099,8436,5197],{"class":1122},[1099,8438,1786],{"class":1326},[1099,8440,1402],{"class":1326},[1099,8442,8443,8445,8447,8449,8451,8453,8455,8457,8459,8461],{"class":1101,"line":1380},[1099,8444,3548],{"class":1312},[1099,8446,1932],{"class":1332},[1099,8448,3553],{"class":1326},[1099,8450,5212],{"class":1322},[1099,8452,1789],{"class":1326},[1099,8454,3333],{"class":1322},[1099,8456,1789],{"class":1326},[1099,8458,5221],{"class":1122},[1099,8460,5224],{"class":1332},[1099,8462,5227],{"class":1312},[1099,8464,8465],{"class":1101,"line":1388},[1099,8466,1391],{"emptyLinePlaceholder":21},[1099,8468,8469,8471,8473,8475,8477],{"class":1101,"line":1394},[1099,8470,5236],{"class":1322},[1099,8472,1789],{"class":1326},[1099,8474,3333],{"class":1322},[1099,8476,2609],{"class":1326},[1099,8478,4371],{"class":4185},[1099,8480,8481],{"class":1101,"line":1405},[1099,8482,1391],{"emptyLinePlaceholder":21},[1099,8484,8485],{"class":1101,"line":1421},[1099,8486,5253],{"class":2677},[1099,8488,8489,8491,8493,8495,8497,8499,8501,8503,8505,8507,8509],{"class":1101,"line":1427},[1099,8490,2599],{"class":1569},[1099,8492,2777],{"class":1322},[1099,8494,2609],{"class":1326},[1099,8496,2612],{"class":1312},[1099,8498,5266],{"class":1122},[1099,8500,1323],{"class":1332},[1099,8502,1351],{"class":1326},[1099,8504,5273],{"class":1109},[1099,8506,1351],{"class":1326},[1099,8508,1697],{"class":1326},[1099,8510,1402],{"class":1326},[1099,8512,8513,8515,8517,8519,8521,8523],{"class":1101,"line":1432},[1099,8514,5284],{"class":1332},[1099,8516,1336],{"class":1326},[1099,8518,1413],{"class":1326},[1099,8520,5291],{"class":1109},[1099,8522,1351],{"class":1326},[1099,8524,1354],{"class":1326},[1099,8526,8527,8529,8531],{"class":1101,"line":1455},[1099,8528,5300],{"class":1332},[1099,8530,1336],{"class":1326},[1099,8532,1402],{"class":1326},[1099,8534,8535,8537,8539],{"class":1101,"line":1960},[1099,8536,3373],{"class":1332},[1099,8538,1336],{"class":1326},[1099,8540,1402],{"class":1326},[1099,8542,8543,8545,8547,8549,8551,8553],{"class":1101,"line":1987},[1099,8544,4513],{"class":1332},[1099,8546,1336],{"class":1326},[1099,8548,1413],{"class":1326},[1099,8550,2132],{"class":1109},[1099,8552,1351],{"class":1326},[1099,8554,1354],{"class":1326},[1099,8556,8557,8559,8561,8563,8565,8567,8569,8571,8573,8575,8577,8579,8581,8583,8585,8587,8589],{"class":1101,"line":2033},[1099,8558,4546],{"class":1332},[1099,8560,1336],{"class":1326},[1099,8562,1440],{"class":1332},[1099,8564,1846],{"class":1326},[1099,8566,2506],{"class":1332},[1099,8568,1336],{"class":1326},[1099,8570,1413],{"class":1326},[1099,8572,5345],{"class":1109},[1099,8574,1351],{"class":1326},[1099,8576,1697],{"class":1326},[1099,8578,1700],{"class":1332},[1099,8580,1336],{"class":1326},[1099,8582,5356],{"class":1322},[1099,8584,1789],{"class":1326},[1099,8586,3333],{"class":1322},[1099,8588,1713],{"class":1326},[1099,8590,3174],{"class":1332},[1099,8592,8593],{"class":1101,"line":2100},[1099,8594,4385],{"class":1326},[1099,8596,8597],{"class":1101,"line":2170},[1099,8598,4568],{"class":1326},[1099,8600,8601,8603],{"class":1101,"line":2210},[1099,8602,2400],{"class":1326},[1099,8604,1461],{"class":1332},[1099,8606,8607],{"class":1101,"line":2261},[1099,8608,1391],{"emptyLinePlaceholder":21},[1099,8610,8611],{"class":1101,"line":2274},[1099,8612,5387],{"class":2677},[1099,8614,8615,8617,8619,8621,8623,8625,8627,8629,8631,8633],{"class":1101,"line":2304},[1099,8616,5392],{"class":1122},[1099,8618,1323],{"class":1332},[1099,8620,3693],{"class":1326},[1099,8622,5399],{"class":1109},[1099,8624,5402],{"class":1326},[1099,8626,262],{"class":1322},[1099,8628,1789],{"class":1326},[1099,8630,2000],{"class":1322},[1099,8632,5411],{"class":1326},[1099,8634,1461],{"class":1332},[1099,8636,8637],{"class":1101,"line":2310},[1099,8638,5418],{"class":1326},[1099,8640,8641,8643,8645],{"class":1101,"line":2315},[1099,8642,1617],{"class":1326},[1099,8644,5130],{"class":1332},[1099,8646,1547],{"class":1326},[1099,8648,8649],{"class":1101,"line":2347},[1099,8650,1391],{"emptyLinePlaceholder":21},[1099,8652,8653,8655,8657],{"class":1101,"line":2363},[1099,8654,1541],{"class":1326},[1099,8656,1544],{"class":1332},[1099,8658,1547],{"class":1326},[1099,8660,8661,8663,8665,8667,8669,8671,8673,8675],{"class":1101,"line":2381},[1099,8662,1554],{"class":1326},[1099,8664,5445],{"class":1332},[1099,8666,5448],{"class":1569},[1099,8668,1573],{"class":1326},[1099,8670,1500],{"class":1326},[1099,8672,5455],{"class":1109},[1099,8674,1500],{"class":1326},[1099,8676,1547],{"class":1326},[1099,8678,8680,8682,8684,8686,8689],{"class":8679,"line":2397},[1101,1551],[1099,8681,1563],{"class":1326},[1099,8683,1544],{"class":1332},[1099,8685,5468],{"class":1326},[1099,8687,8688],{"class":1569},"header",[1099,8690,1547],{"class":1326},[1099,8692,8694,8696,8699],{"class":8693,"line":2405},[1101,1551],[1099,8695,1587],{"class":1326},[1099,8697,8698],{"class":1332},"ChatsHistory",[1099,8700,1593],{"class":1326},[1099,8702,8704,8706,8708],{"class":8703,"line":3385},[1101,1551],[1099,8705,1598],{"class":1326},[1099,8707,1544],{"class":1332},[1099,8709,1547],{"class":1326},[1099,8711,8712,8714,8716,8718,8720],{"class":1101,"line":3402},[1099,8713,1563],{"class":1326},[1099,8715,1544],{"class":1332},[1099,8717,5468],{"class":1326},[1099,8719,5471],{"class":1569},[1099,8721,1547],{"class":1326},[1099,8723,8724,8726,8728,8730,8732,8734,8736,8738],{"class":1101,"line":3434},[1099,8725,1587],{"class":1326},[1099,8727,5480],{"class":1332},[1099,8729,5483],{"class":1569},[1099,8731,1573],{"class":1326},[1099,8733,1500],{"class":1326},[1099,8735,5490],{"class":1109},[1099,8737,1500],{"class":1326},[1099,8739,1547],{"class":1326},[1099,8741,8742,8744,8746,8748,8750,8752,8754,8756],{"class":1101,"line":3447},[1099,8743,5499],{"class":1326},[1099,8745,5502],{"class":1332},[1099,8747,5483],{"class":1569},[1099,8749,1573],{"class":1326},[1099,8751,1500],{"class":1326},[1099,8753,5511],{"class":1109},[1099,8755,1500],{"class":1326},[1099,8757,1547],{"class":1326},[1099,8759,8760],{"class":1101,"line":3452},[1099,8761,5520],{"class":1322},[1099,8763,8764,8766,8768],{"class":1101,"line":3458},[1099,8765,5525],{"class":1326},[1099,8767,5502],{"class":1332},[1099,8769,1547],{"class":1326},[1099,8771,8772],{"class":1101,"line":3489},[1099,8773,1391],{"emptyLinePlaceholder":21},[1099,8775,8776,8778],{"class":1101,"line":3533},[1099,8777,5499],{"class":1326},[1099,8779,5541],{"class":1332},[1099,8781,8782,8784,8786,8788,8790],{"class":1101,"line":3540},[1099,8783,5547],{"class":1569},[1099,8785,1573],{"class":1326},[1099,8787,1500],{"class":1326},[1099,8789,5212],{"class":1109},[1099,8791,5556],{"class":1326},[1099,8793,8794,8796,8798,8800,8802],{"class":1101,"line":3545},[1099,8795,5562],{"class":1569},[1099,8797,1573],{"class":1326},[1099,8799,1500],{"class":1326},[1099,8801,5569],{"class":1109},[1099,8803,5556],{"class":1326},[1099,8805,8806,8808,8810,8812,8814],{"class":1101,"line":3563},[1099,8807,5577],{"class":1569},[1099,8809,1573],{"class":1326},[1099,8811,1500],{"class":1326},[1099,8813,5584],{"class":1109},[1099,8815,5556],{"class":1326},[1099,8817,8818,8820,8822,8824,8826],{"class":1101,"line":3602},[1099,8819,5592],{"class":1569},[1099,8821,1573],{"class":1326},[1099,8823,1500],{"class":1326},[1099,8825,5599],{"class":1109},[1099,8827,5556],{"class":1326},[1099,8829,8830,8832,8834,8836,8838],{"class":1101,"line":3608},[1099,8831,5607],{"class":1569},[1099,8833,1573],{"class":1326},[1099,8835,1500],{"class":1326},[1099,8837,5614],{"class":1109},[1099,8839,5556],{"class":1326},[1099,8841,8842],{"class":1101,"line":3613},[1099,8843,5622],{"class":1326},[1099,8845,8846,8848,8850,8852,8854,8856,8858,8860],{"class":1101,"line":3619},[1099,8847,5628],{"class":1326},[1099,8849,5631],{"class":1332},[1099,8851,5634],{"class":1569},[1099,8853,1573],{"class":1326},[1099,8855,1500],{"class":1326},[1099,8857,5641],{"class":1109},[1099,8859,1500],{"class":1326},[1099,8861,1593],{"class":1326},[1099,8863,8864,8866,8868],{"class":1101,"line":3639},[1099,8865,5525],{"class":1326},[1099,8867,5095],{"class":1332},[1099,8869,1547],{"class":1326},[1099,8871,8872,8874,8876],{"class":1101,"line":3667},[1099,8873,5659],{"class":1326},[1099,8875,5480],{"class":1332},[1099,8877,1547],{"class":1326},[1099,8879,8880,8882,8884],{"class":1101,"line":3679},[1099,8881,1598],{"class":1326},[1099,8883,1544],{"class":1332},[1099,8885,1547],{"class":1326},[1099,8887,8888,8890,8892],{"class":1101,"line":3698},[1099,8889,1608],{"class":1326},[1099,8891,5445],{"class":1332},[1099,8893,1547],{"class":1326},[1099,8895,8896,8898,8900],{"class":1101,"line":3726},[1099,8897,1617],{"class":1326},[1099,8899,1544],{"class":1332},[1099,8901,1547],{"class":1326},[993,8903,8905],{"id":8904},"integrating-history-in-the-chat-page","Integrating history in the chat page",[1299,8907,8908],{},[1676,8909,8910],{},[1090,8911,8914],{"className":1531,"code":8912,"filename":6121,"highlights":8913,"language":34,"meta":1095,"style":1095},"\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",[3968,3973,3978],[1049,8915,8916,8936,8962,8980,8998,9002,9014,9026,9030,9034,9076,9080,9096,9136,9140,9144,9160,9164,9168,9184,9202,9220,9234,9258,9266,9278,9282,9306,9320,9324,9328,9340,9352,9366,9380,9392,9398,9402,9408,9412,9430,9440,9460,9486,9498,9502,9506,9510,9514,9526,9554,9564,9568,9574,9582,9586,9594,9612,9624,9632,9640,9652,9671,9678,9691,9703,9707,9719,9723,9747,9813,9819,9831,9843,9855,9859,9865,9877,9889,9893,9901,9905,9925,9931,9943,9955,9967,9971,9999,10003,10011,10019,10027,10035,10043,10047,10053,10065,10077,10089,10101,10113,10117,10123,10135,10147,10159,10171,10175,10183,10191,10199,10207],{"__ignoreMap":1095},[1099,8917,8918,8920,8922,8924,8926,8928,8930,8932,8934],{"class":1101,"line":1102},[1099,8919,1541],{"class":1326},[1099,8921,5130],{"class":1332},[1099,8923,5133],{"class":1569},[1099,8925,5136],{"class":1569},[1099,8927,1573],{"class":1326},[1099,8929,1500],{"class":1326},[1099,8931,1305],{"class":1109},[1099,8933,1500],{"class":1326},[1099,8935,1547],{"class":1326},[1099,8937,8938,8940,8942,8944,8946,8948,8950,8952,8954,8956,8958,8960],{"class":1101,"line":1119},[1099,8939,1688],{"class":1312},[1099,8941,1691],{"class":1326},[1099,8943,6154],{"class":1322},[1099,8945,1697],{"class":1326},[1099,8947,6159],{"class":1322},[1099,8949,1697],{"class":1326},[1099,8951,6164],{"class":1322},[1099,8953,1713],{"class":1326},[1099,8955,1716],{"class":1312},[1099,8957,1413],{"class":1326},[1099,8959,2520],{"class":1109},[1099,8961,1377],{"class":1326},[1099,8963,8964,8966,8968,8970,8972,8974,8976,8978],{"class":1101,"line":1342},[1099,8965,1688],{"class":1312},[1099,8967,1691],{"class":1326},[1099,8969,6184],{"class":1322},[1099,8971,1713],{"class":1326},[1099,8973,1716],{"class":1312},[1099,8975,1413],{"class":1326},[1099,8977,6193],{"class":1109},[1099,8979,1377],{"class":1326},[1099,8981,8982,8984,8986,8988,8990,8992,8994,8996],{"class":1101,"line":1357},[1099,8983,1688],{"class":1312},[1099,8985,1691],{"class":1326},[1099,8987,6205],{"class":1322},[1099,8989,1713],{"class":1326},[1099,8991,1716],{"class":1312},[1099,8993,1413],{"class":1326},[1099,8995,6214],{"class":1109},[1099,8997,1377],{"class":1326},[1099,8999,9000],{"class":1101,"line":1369},[1099,9001,1391],{"emptyLinePlaceholder":21},[1099,9003,9004,9006,9008,9010,9012],{"class":1101,"line":1380},[1099,9005,3048],{"class":1569},[1099,9007,6227],{"class":1322},[1099,9009,1573],{"class":1326},[1099,9011,6232],{"class":1122},[1099,9013,2655],{"class":1322},[1099,9015,9016,9018,9020,9022,9024],{"class":1101,"line":1388},[1099,9017,3048],{"class":1569},[1099,9019,6241],{"class":1322},[1099,9021,1573],{"class":1326},[1099,9023,6246],{"class":1122},[1099,9025,2655],{"class":1322},[1099,9027,9028],{"class":1101,"line":1394},[1099,9029,1391],{"emptyLinePlaceholder":21},[1099,9031,9032],{"class":1101,"line":1405},[1099,9033,6257],{"class":2677},[1099,9035,9036,9038,9040,9042,9044,9046,9048,9050,9052,9054,9056,9058,9060,9062,9064,9066,9068,9070,9072,9074],{"class":1101,"line":1421},[1099,9037,3048],{"class":1569},[1099,9039,1691],{"class":1326},[1099,9041,6266],{"class":1332},[1099,9043,1336],{"class":1326},[1099,9045,6271],{"class":1322},[1099,9047,1458],{"class":1326},[1099,9049,2609],{"class":1326},[1099,9051,2612],{"class":1312},[1099,9053,6280],{"class":1122},[1099,9055,1323],{"class":1322},[1099,9057,3693],{"class":1326},[1099,9059,6287],{"class":1109},[1099,9061,5402],{"class":1326},[1099,9063,6292],{"class":1322},[1099,9065,1789],{"class":1326},[1099,9067,6297],{"class":1322},[1099,9069,1789],{"class":1326},[1099,9071,2000],{"class":1322},[1099,9073,5411],{"class":1326},[1099,9075,1461],{"class":1322},[1099,9077,9078],{"class":1101,"line":1427},[1099,9079,1391],{"emptyLinePlaceholder":21},[1099,9081,9082,9084,9086,9088,9090,9092,9094],{"class":1101,"line":1432},[1099,9083,6314],{"class":1312},[1099,9085,1932],{"class":1322},[1099,9087,3553],{"class":1326},[1099,9089,6321],{"class":1322},[1099,9091,1789],{"class":1326},[1099,9093,6326],{"class":1322},[1099,9095,1327],{"class":1326},[1099,9097,9098,9100,9102,9104,9106,9108,9110,9112,9114,9116,9118,9120,9122,9124,9126,9128,9130,9132,9134],{"class":1101,"line":1455},[1099,9099,6333],{"class":1312},[1099,9101,2886],{"class":1122},[1099,9103,1323],{"class":1332},[1099,9105,1846],{"class":1326},[1099,9107,3575],{"class":1332},[1099,9109,1336],{"class":1326},[1099,9111,3581],{"class":3580},[1099,9113,1697],{"class":1326},[1099,9115,3586],{"class":1332},[1099,9117,1336],{"class":1326},[1099,9119,1413],{"class":1326},[1099,9121,3593],{"class":1109},[1099,9123,1351],{"class":1326},[1099,9125,1697],{"class":1326},[1099,9127,6362],{"class":1332},[1099,9129,1336],{"class":1326},[1099,9131,4186],{"class":4185},[1099,9133,1713],{"class":1326},[1099,9135,1461],{"class":1332},[1099,9137,9138],{"class":1101,"line":1960},[1099,9139,5418],{"class":1326},[1099,9141,9142],{"class":1101,"line":1987},[1099,9143,1391],{"emptyLinePlaceholder":21},[1099,9145,9146,9148,9150,9152,9154,9156,9158],{"class":1101,"line":2033},[1099,9147,3048],{"class":1569},[1099,9149,5153],{"class":1322},[1099,9151,1573],{"class":1326},[1099,9153,5158],{"class":1122},[1099,9155,1323],{"class":1322},[1099,9157,5163],{"class":1326},[1099,9159,1461],{"class":1322},[1099,9161,9162],{"class":1101,"line":2100},[1099,9163,1391],{"emptyLinePlaceholder":21},[1099,9165,9166],{"class":1101,"line":2170},[1099,9167,6403],{"class":2677},[1099,9169,9170,9172,9174,9176,9178,9180,9182],{"class":1101,"line":2210},[1099,9171,3048],{"class":1569},[1099,9173,6411],{"class":1322},[1099,9175,1573],{"class":1326},[1099,9177,1883],{"class":1326},[1099,9179,6184],{"class":1122},[1099,9181,1323],{"class":1322},[1099,9183,1327],{"class":1326},[1099,9185,9186,9188,9190,9192,9194,9196,9198,9200],{"class":1101,"line":2261},[1099,9187,1779],{"class":1332},[1099,9189,1336],{"class":1326},[1099,9191,6431],{"class":1322},[1099,9193,1789],{"class":1326},[1099,9195,3333],{"class":1322},[1099,9197,1789],{"class":1326},[1099,9199,2000],{"class":1322},[1099,9201,1354],{"class":1326},[1099,9203,9204,9206,9208,9210,9212,9214,9216,9218],{"class":1101,"line":2274},[1099,9205,1939],{"class":1332},[1099,9207,1336],{"class":1326},[1099,9209,6431],{"class":1322},[1099,9211,1789],{"class":1326},[1099,9213,3333],{"class":1322},[1099,9215,1789],{"class":1326},[1099,9217,1978],{"class":1322},[1099,9219,1354],{"class":1326},[1099,9221,9222,9224,9226,9228,9230,9232],{"class":1101,"line":2304},[1099,9223,6466],{"class":1332},[1099,9225,1336],{"class":1326},[1099,9227,1883],{"class":1326},[1099,9229,6154],{"class":1122},[1099,9231,1323],{"class":1322},[1099,9233,1327],{"class":1326},[1099,9235,9236,9238,9240,9242,9244,9246,9248,9250,9252,9254,9256],{"class":1101,"line":2310},[1099,9237,6482],{"class":1332},[1099,9239,1336],{"class":1326},[1099,9241,3687],{"class":1326},[1099,9243,6287],{"class":1109},[1099,9245,5402],{"class":1326},[1099,9247,6321],{"class":1322},[1099,9249,1789],{"class":1326},[1099,9251,3333],{"class":1322},[1099,9253,1789],{"class":1326},[1099,9255,2000],{"class":1322},[1099,9257,6503],{"class":1326},[1099,9259,9260,9262,9264],{"class":1101,"line":2315},[1099,9261,2400],{"class":1326},[1099,9263,1863],{"class":1322},[1099,9265,1354],{"class":1326},[1099,9267,9268,9270,9272,9274,9276],{"class":1101,"line":2347},[1099,9269,6518],{"class":1332},[1099,9271,1323],{"class":1326},[1099,9273,6523],{"class":1923},[1099,9275,1863],{"class":1326},[1099,9277,1402],{"class":1326},[1099,9279,9280],{"class":1101,"line":2363},[1099,9281,6533],{"class":2677},[1099,9283,9284,9286,9288,9290,9292,9294,9296,9298,9300,9302,9304],{"class":1101,"line":2381},[1099,9285,6539],{"class":1312},[1099,9287,1932],{"class":1332},[1099,9289,6523],{"class":1322},[1099,9291,1789],{"class":1326},[1099,9293,6548],{"class":1322},[1099,9295,3360],{"class":1326},[1099,9297,1413],{"class":1326},[1099,9299,4333],{"class":1109},[1099,9301,1351],{"class":1326},[1099,9303,3558],{"class":1332},[1099,9305,1327],{"class":1326},[1099,9307,9308,9310,9312,9314,9316,9318],{"class":1101,"line":2397},[1099,9309,6566],{"class":1122},[1099,9311,1323],{"class":1332},[1099,9313,1351],{"class":1326},[1099,9315,1768],{"class":1109},[1099,9317,1351],{"class":1326},[1099,9319,1461],{"class":1332},[1099,9321,9322],{"class":1101,"line":2405},[1099,9323,4568],{"class":1326},[1099,9325,9326],{"class":1101,"line":3385},[1099,9327,1424],{"class":1326},[1099,9329,9330,9332,9334,9336,9338],{"class":1101,"line":3402},[1099,9331,6592],{"class":1332},[1099,9333,1323],{"class":1326},[1099,9335,6597],{"class":1923},[1099,9337,1863],{"class":1326},[1099,9339,1402],{"class":1326},[1099,9341,9342,9344,9346,9348,9350],{"class":1101,"line":3434},[1099,9343,6607],{"class":1322},[1099,9345,1789],{"class":1326},[1099,9347,6612],{"class":1122},[1099,9349,1323],{"class":1332},[1099,9351,1327],{"class":1326},[1099,9353,9354,9356,9358,9360,9362,9364],{"class":1101,"line":3447},[1099,9355,6622],{"class":1332},[1099,9357,1336],{"class":1326},[1099,9359,1413],{"class":1326},[1099,9361,497],{"class":1109},[1099,9363,1351],{"class":1326},[1099,9365,1354],{"class":1326},[1099,9367,9368,9370,9372,9374,9376,9378],{"class":1101,"line":3452},[1099,9369,6638],{"class":1332},[1099,9371,1336],{"class":1326},[1099,9373,6643],{"class":1322},[1099,9375,1789],{"class":1326},[1099,9377,4485],{"class":1322},[1099,9379,1354],{"class":1326},[1099,9381,9382,9384,9386,9388,9390],{"class":1101,"line":3458},[1099,9383,6655],{"class":1332},[1099,9385,1336],{"class":1326},[1099,9387,1413],{"class":1326},[1099,9389,6597],{"class":1109},[1099,9391,1377],{"class":1326},[1099,9393,9394,9396],{"class":1101,"line":3489},[1099,9395,3388],{"class":1326},[1099,9397,1461],{"class":1332},[1099,9399,9400],{"class":1101,"line":3533},[1099,9401,3605],{"class":1326},[1099,9403,9404,9406],{"class":1101,"line":3540},[1099,9405,1458],{"class":1326},[1099,9407,1461],{"class":1322},[1099,9409,9410],{"class":1101,"line":3545},[1099,9411,1391],{"emptyLinePlaceholder":21},[1099,9413,9414,9416,9418,9420,9422,9424,9426,9428],{"class":1101,"line":3563},[1099,9415,6691],{"class":1569},[1099,9417,6694],{"class":1122},[1099,9419,1323],{"class":1326},[1099,9421,6699],{"class":1923},[1099,9423,1336],{"class":1326},[1099,9425,6704],{"class":1105},[1099,9427,1863],{"class":1326},[1099,9429,1402],{"class":1326},[1099,9431,9432,9434,9436,9438],{"class":1101,"line":3602},[1099,9433,6713],{"class":1322},[1099,9435,1789],{"class":1326},[1099,9437,6718],{"class":1122},[1099,9439,2655],{"class":1332},[1099,9441,9442,9444,9446,9448,9450,9452,9454,9456,9458],{"class":1101,"line":3608},[1099,9443,3548],{"class":1312},[1099,9445,1932],{"class":1332},[1099,9447,5212],{"class":1322},[1099,9449,1789],{"class":1326},[1099,9451,3333],{"class":1322},[1099,9453,1789],{"class":1326},[1099,9455,5221],{"class":1122},[1099,9457,5224],{"class":1332},[1099,9459,1327],{"class":1326},[1099,9461,9462,9464,9466,9468,9470,9472,9474,9476,9478,9480,9482,9484],{"class":1101,"line":3613},[1099,9463,6745],{"class":1322},[1099,9465,1789],{"class":1326},[1099,9467,6750],{"class":1122},[1099,9469,1323],{"class":1332},[1099,9471,1846],{"class":1326},[1099,9473,1700],{"class":1332},[1099,9475,1336],{"class":1326},[1099,9477,5356],{"class":1322},[1099,9479,1789],{"class":1326},[1099,9481,3333],{"class":1322},[1099,9483,1713],{"class":1326},[1099,9485,1461],{"class":1332},[1099,9487,9488,9490,9492,9494,9496],{"class":1101,"line":3619},[1099,9489,6773],{"class":1322},[1099,9491,1789],{"class":1326},[1099,9493,3333],{"class":1322},[1099,9495,2609],{"class":1326},[1099,9497,6782],{"class":1326},[1099,9499,9500],{"class":1101,"line":3639},[1099,9501,3605],{"class":1326},[1099,9503,9504],{"class":1101,"line":3667},[1099,9505,5418],{"class":1326},[1099,9507,9508],{"class":1101,"line":3679},[1099,9509,1391],{"emptyLinePlaceholder":21},[1099,9511,9512],{"class":1101,"line":3698},[1099,9513,6799],{"class":2677},[1099,9515,9516,9518,9520,9522,9524],{"class":1101,"line":3726},[1099,9517,6804],{"class":1122},[1099,9519,1323],{"class":1322},[1099,9521,1786],{"class":1326},[1099,9523,1806],{"class":1569},[1099,9525,1402],{"class":1326},[1099,9527,9528,9530,9532,9534,9536,9538,9540,9542,9544,9546,9548,9550,9552],{"class":1101,"line":3733},[1099,9529,3548],{"class":1312},[1099,9531,1932],{"class":1332},[1099,9533,6321],{"class":1322},[1099,9535,1789],{"class":1326},[1099,9537,3333],{"class":1322},[1099,9539,3859],{"class":1326},[1099,9541,1978],{"class":1322},[1099,9543,1789],{"class":1326},[1099,9545,3838],{"class":1322},[1099,9547,3360],{"class":1326},[1099,9549,3844],{"class":3580},[1099,9551,3558],{"class":1332},[1099,9553,1327],{"class":1326},[1099,9555,9556,9558,9560,9562],{"class":1101,"line":3738},[1099,9557,6745],{"class":1322},[1099,9559,1789],{"class":1326},[1099,9561,6849],{"class":1122},[1099,9563,2655],{"class":1332},[1099,9565,9566],{"class":1101,"line":3804},[1099,9567,3605],{"class":1326},[1099,9569,9570,9572],{"class":1101,"line":3809},[1099,9571,1458],{"class":1326},[1099,9573,1461],{"class":1322},[1099,9575,9576,9578,9580],{"class":1101,"line":3814},[1099,9577,1617],{"class":1326},[1099,9579,5130],{"class":1332},[1099,9581,1547],{"class":1326},[1099,9583,9584],{"class":1101,"line":3820},[1099,9585,1391],{"emptyLinePlaceholder":21},[1099,9587,9588,9590,9592],{"class":1101,"line":3849},[1099,9589,1541],{"class":1326},[1099,9591,1544],{"class":1332},[1099,9593,1547],{"class":1326},[1099,9595,9596,9598,9600,9602,9604,9606,9608,9610],{"class":1101,"line":3890},[1099,9597,1554],{"class":1326},[1099,9599,5445],{"class":1332},[1099,9601,5448],{"class":1569},[1099,9603,1573],{"class":1326},[1099,9605,1500],{"class":1326},[1099,9607,5455],{"class":1109},[1099,9609,1500],{"class":1326},[1099,9611,1547],{"class":1326},[1099,9613,9614,9616,9618,9620,9622],{"class":1101,"line":3919},[1099,9615,1563],{"class":1326},[1099,9617,1544],{"class":1332},[1099,9619,5468],{"class":1326},[1099,9621,8688],{"class":1569},[1099,9623,1547],{"class":1326},[1099,9625,9626,9628,9630],{"class":1101,"line":3931},[1099,9627,1587],{"class":1326},[1099,9629,8698],{"class":1332},[1099,9631,1593],{"class":1326},[1099,9633,9634,9636,9638],{"class":1101,"line":3947},[1099,9635,1598],{"class":1326},[1099,9637,1544],{"class":1332},[1099,9639,1547],{"class":1326},[1099,9641,9642,9644,9646,9648,9650],{"class":1101,"line":3961},[1099,9643,1563],{"class":1326},[1099,9645,1544],{"class":1332},[1099,9647,5468],{"class":1326},[1099,9649,5471],{"class":1569},[1099,9651,1547],{"class":1326},[1099,9653,9655,9657,9659,9661,9663,9665,9667,9669],{"class":9654,"line":3968},[1101,1551],[1099,9656,1587],{"class":1326},[1099,9658,5480],{"class":1332},[1099,9660,5483],{"class":1569},[1099,9662,1573],{"class":1326},[1099,9664,1500],{"class":1326},[1099,9666,6926],{"class":1109},[1099,9668,1500],{"class":1326},[1099,9670,1547],{"class":1326},[1099,9672,9674,9676],{"class":9673,"line":3973},[1101,1551],[1099,9675,5499],{"class":1326},[1099,9677,6937],{"class":1332},[1099,9679,9681,9683,9685,9687,9689],{"class":9680,"line":3978},[1101,1551],[1099,9682,6942],{"class":1569},[1099,9684,1573],{"class":1326},[1099,9686,1500],{"class":1326},[1099,9688,6949],{"class":1109},[1099,9690,5556],{"class":1326},[1099,9692,9693,9695,9697,9699,9701],{"class":1101,"line":3984},[1099,9694,5562],{"class":1569},[1099,9696,1573],{"class":1326},[1099,9698,1500],{"class":1326},[1099,9700,6962],{"class":1109},[1099,9702,5556],{"class":1326},[1099,9704,9705],{"class":1101,"line":4001},[1099,9706,6969],{"class":1569},[1099,9708,9709,9711,9713,9715,9717],{"class":1101,"line":4023},[1099,9710,6974],{"class":1569},[1099,9712,1573],{"class":1326},[1099,9714,1500],{"class":1326},[1099,9716,6981],{"class":1109},[1099,9718,5556],{"class":1326},[1099,9720,9721],{"class":1101,"line":4041},[1099,9722,5622],{"class":1326},[1099,9724,9725,9727,9729,9731,9733,9735,9737,9739,9741,9743,9745],{"class":1101,"line":4049},[1099,9726,5628],{"class":1326},[1099,9728,1544],{"class":1332},[1099,9730,5468],{"class":1326},[1099,9732,371],{"class":1569},[1099,9734,1573],{"class":1326},[1099,9736,1500],{"class":1326},[1099,9738,1846],{"class":1326},[1099,9740,7006],{"class":1322},[1099,9742,1458],{"class":1326},[1099,9744,1500],{"class":1326},[1099,9746,1547],{"class":1326},[1099,9748,9749,9751,9753,9755,9757,9759,9761,9763,9765,9767,9769,9771,9773,9775,9777,9779,9781,9783,9785,9787,9789,9791,9793,9795,9797,9799,9801,9803,9805,9807,9809,9811],{"class":1101,"line":4066},[1099,9750,7017],{"class":1326},[1099,9752,1544],{"class":1332},[1099,9754,7022],{"class":1312},[1099,9756,1573],{"class":1326},[1099,9758,1500],{"class":1326},[1099,9760,7029],{"class":1322},[1099,9762,1697],{"class":1326},[1099,9764,7034],{"class":1322},[1099,9766,7037],{"class":1326},[1099,9768,2604],{"class":1322},[1099,9770,1789],{"class":1326},[1099,9772,2184],{"class":1322},[1099,9774,1500],{"class":1326},[1099,9776,7048],{"class":1326},[1099,9778,7051],{"class":1569},[1099,9780,1573],{"class":1326},[1099,9782,7056],{"class":1326},[1099,9784,4485],{"class":1322},[1099,9786,1789],{"class":1326},[1099,9788,2000],{"class":1322},[1099,9790,1458],{"class":1326},[1099,9792,7067],{"class":1109},[1099,9794,5402],{"class":1326},[1099,9796,7072],{"class":1322},[1099,9798,1789],{"class":1326},[1099,9800,6548],{"class":1322},[1099,9802,1458],{"class":1326},[1099,9804,7067],{"class":1109},[1099,9806,5402],{"class":1326},[1099,9808,7085],{"class":1322},[1099,9810,7088],{"class":1326},[1099,9812,1547],{"class":1326},[1099,9814,9815,9817],{"class":1101,"line":4087},[1099,9816,7095],{"class":1326},[1099,9818,7098],{"class":1332},[1099,9820,9821,9823,9825,9827,9829],{"class":1101,"line":4097},[1099,9822,7103],{"class":1569},[1099,9824,1573],{"class":1326},[1099,9826,1500],{"class":1326},[1099,9828,7110],{"class":1109},[1099,9830,5556],{"class":1326},[1099,9832,9833,9835,9837,9839,9841],{"class":1101,"line":4107},[1099,9834,7117],{"class":1569},[1099,9836,1573],{"class":1326},[1099,9838,1500],{"class":1326},[1099,9840,7124],{"class":1109},[1099,9842,5556],{"class":1326},[1099,9844,9845,9847,9849,9851,9853],{"class":1101,"line":4117},[1099,9846,7131],{"class":1569},[1099,9848,1573],{"class":1326},[1099,9850,1500],{"class":1326},[1099,9852,7138],{"class":1109},[1099,9854,5556],{"class":1326},[1099,9856,9857],{"class":1101,"line":4134},[1099,9858,7145],{"class":1326},[1099,9860,9861,9863],{"class":1101,"line":4145},[1099,9862,7150],{"class":1326},[1099,9864,7153],{"class":1332},[1099,9866,9867,9869,9871,9873,9875],{"class":1101,"line":4151},[1099,9868,7158],{"class":1569},[1099,9870,1573],{"class":1326},[1099,9872,1500],{"class":1326},[1099,9874,7124],{"class":1109},[1099,9876,5556],{"class":1326},[1099,9878,9879,9881,9883,9885,9887],{"class":1101,"line":4157},[1099,9880,7171],{"class":1569},[1099,9882,1573],{"class":1326},[1099,9884,1500],{"class":1326},[1099,9886,7138],{"class":1109},[1099,9888,5556],{"class":1326},[1099,9890,9891],{"class":1101,"line":4167},[1099,9892,7184],{"class":1326},[1099,9894,9895,9897,9899],{"class":1101,"line":4177},[1099,9896,7189],{"class":1326},[1099,9898,7192],{"class":1332},[1099,9900,1547],{"class":1326},[1099,9902,9903],{"class":1101,"line":4191},[1099,9904,1391],{"emptyLinePlaceholder":21},[1099,9906,9907,9909,9911,9913,9915,9917,9919,9921,9923],{"class":1101,"line":4206},[1099,9908,7095],{"class":1326},[1099,9910,1544],{"class":1332},[1099,9912,7207],{"class":1312},[1099,9914,1573],{"class":1326},[1099,9916,1500],{"class":1326},[1099,9918,7214],{"class":1122},[1099,9920,7217],{"class":1322},[1099,9922,1500],{"class":1326},[1099,9924,1547],{"class":1326},[1099,9926,9927,9929],{"class":1101,"line":4211},[1099,9928,7150],{"class":1326},[1099,9930,7153],{"class":1332},[1099,9932,9933,9935,9937,9939,9941],{"class":1101,"line":4216},[1099,9934,7232],{"class":1569},[1099,9936,1573],{"class":1326},[1099,9938,1500],{"class":1326},[1099,9940,7239],{"class":1109},[1099,9942,5556],{"class":1326},[1099,9944,9945,9947,9949,9951,9953],{"class":1101,"line":4226},[1099,9946,7158],{"class":1569},[1099,9948,1573],{"class":1326},[1099,9950,1500],{"class":1326},[1099,9952,7124],{"class":1109},[1099,9954,5556],{"class":1326},[1099,9956,9957,9959,9961,9963,9965],{"class":1101,"line":4242},[1099,9958,7171],{"class":1569},[1099,9960,1573],{"class":1326},[1099,9962,1500],{"class":1326},[1099,9964,7138],{"class":1109},[1099,9966,5556],{"class":1326},[1099,9968,9969],{"class":1101,"line":4257},[1099,9970,7184],{"class":1326},[1099,9972,9973,9975,9977,9979,9981,9983,9985,9987,9989,9991,9993,9995,9997],{"class":1101,"line":4263},[1099,9974,7150],{"class":1326},[1099,9976,989],{"class":1332},[1099,9978,7207],{"class":1569},[1099,9980,1573],{"class":1326},[1099,9982,1500],{"class":1326},[1099,9984,7284],{"class":1109},[1099,9986,1500],{"class":1326},[1099,9988,5483],{"class":1569},[1099,9990,1573],{"class":1326},[1099,9992,1500],{"class":1326},[1099,9994,7295],{"class":1109},[1099,9996,1500],{"class":1326},[1099,9998,1547],{"class":1326},[1099,10000,10001],{"class":1101,"line":4269},[1099,10002,7304],{"class":1322},[1099,10004,10005,10007,10009],{"class":1101,"line":4277},[1099,10006,7309],{"class":1326},[1099,10008,989],{"class":1332},[1099,10010,1547],{"class":1326},[1099,10012,10013,10015,10017],{"class":1101,"line":4282},[1099,10014,7189],{"class":1326},[1099,10016,1544],{"class":1332},[1099,10018,1547],{"class":1326},[1099,10020,10021,10023,10025],{"class":1101,"line":4288},[1099,10022,7326],{"class":1326},[1099,10024,1544],{"class":1332},[1099,10026,1547],{"class":1326},[1099,10028,10029,10031,10033],{"class":1101,"line":4308},[1099,10030,7335],{"class":1326},[1099,10032,1544],{"class":1332},[1099,10034,1547],{"class":1326},[1099,10036,10037,10039,10041],{"class":1101,"line":4323},[1099,10038,5525],{"class":1326},[1099,10040,5101],{"class":1332},[1099,10042,1547],{"class":1326},[1099,10044,10045],{"class":1101,"line":4340},[1099,10046,1391],{"emptyLinePlaceholder":21},[1099,10048,10049,10051],{"class":1101,"line":4363},[1099,10050,5499],{"class":1326},[1099,10052,5541],{"class":1332},[1099,10054,10055,10057,10059,10061,10063],{"class":1101,"line":4374},[1099,10056,5547],{"class":1569},[1099,10058,1573],{"class":1326},[1099,10060,1500],{"class":1326},[1099,10062,5212],{"class":1109},[1099,10064,5556],{"class":1326},[1099,10066,10067,10069,10071,10073,10075],{"class":1101,"line":4382},[1099,10068,7374],{"class":1569},[1099,10070,1573],{"class":1326},[1099,10072,1500],{"class":1326},[1099,10074,7381],{"class":1109},[1099,10076,5556],{"class":1326},[1099,10078,10079,10081,10083,10085,10087],{"class":1101,"line":4388},[1099,10080,5577],{"class":1569},[1099,10082,1573],{"class":1326},[1099,10084,1500],{"class":1326},[1099,10086,5584],{"class":1109},[1099,10088,5556],{"class":1326},[1099,10090,10091,10093,10095,10097,10099],{"class":1101,"line":4393},[1099,10092,6974],{"class":1569},[1099,10094,1573],{"class":1326},[1099,10096,1500],{"class":1326},[1099,10098,7406],{"class":1109},[1099,10100,5556],{"class":1326},[1099,10102,10103,10105,10107,10109,10111],{"class":1101,"line":4416},[1099,10104,5607],{"class":1569},[1099,10106,1573],{"class":1326},[1099,10108,1500],{"class":1326},[1099,10110,7419],{"class":1109},[1099,10112,5556],{"class":1326},[1099,10114,10115],{"class":1101,"line":4422},[1099,10116,5622],{"class":1326},[1099,10118,10119,10121],{"class":1101,"line":4442},[1099,10120,5628],{"class":1326},[1099,10122,7432],{"class":1332},[1099,10124,10125,10127,10129,10131,10133],{"class":1101,"line":4448},[1099,10126,7437],{"class":1569},[1099,10128,1573],{"class":1326},[1099,10130,1500],{"class":1326},[1099,10132,6962],{"class":1109},[1099,10134,5556],{"class":1326},[1099,10136,10137,10139,10141,10143,10145],{"class":1101,"line":4494},[1099,10138,7450],{"class":1569},[1099,10140,1573],{"class":1326},[1099,10142,1500],{"class":1326},[1099,10144,5641],{"class":1109},[1099,10146,5556],{"class":1326},[1099,10148,10149,10151,10153,10155,10157],{"class":1101,"line":4510},[1099,10150,7463],{"class":1569},[1099,10152,1573],{"class":1326},[1099,10154,1500],{"class":1326},[1099,10156,7470],{"class":1109},[1099,10158,5556],{"class":1326},[1099,10160,10161,10163,10165,10167,10169],{"class":1101,"line":4543},[1099,10162,7477],{"class":1569},[1099,10164,1573],{"class":1326},[1099,10166,1500],{"class":1326},[1099,10168,7484],{"class":1109},[1099,10170,5556],{"class":1326},[1099,10172,10173],{"class":1101,"line":4557},[1099,10174,7491],{"class":1326},[1099,10176,10177,10179,10181],{"class":1101,"line":4565},[1099,10178,5525],{"class":1326},[1099,10180,5095],{"class":1332},[1099,10182,1547],{"class":1326},[1099,10184,10185,10187,10189],{"class":1101,"line":4571},[1099,10186,5659],{"class":1326},[1099,10188,5480],{"class":1332},[1099,10190,1547],{"class":1326},[1099,10192,10193,10195,10197],{"class":1101,"line":4578},[1099,10194,1598],{"class":1326},[1099,10196,1544],{"class":1332},[1099,10198,1547],{"class":1326},[1099,10200,10201,10203,10205],{"class":1101,"line":4583},[1099,10202,1608],{"class":1326},[1099,10204,5445],{"class":1332},[1099,10206,1547],{"class":1326},[1099,10208,10209,10211,10213],{"class":1101,"line":4601},[1099,10210,1617],{"class":1326},[1099,10212,1544],{"class":1332},[1099,10214,1547],{"class":1326},[989,10216,4644,10217,10220,10221,10223],{},[1049,10218,10219],{},"refreshNuxtData('chats')"," call in the chat page's ",[1049,10222,7593],{}," callback (as shown earlier) ensures the chat list updates automatically when a new title is generated.",[993,10225,10227],{"id":10226},"adding-multi-model-support","Adding multi-model support",[989,10229,10230,10231,10234],{},"One of the benefits of using ",[1043,10232,4613],{"href":1078,"rel":10233},[1047]," is the ability to switch between models seamlessly. This section adds a model selector to the chat.",[1127,10236,10238],{"id":10237},"creating-a-models-composable","Creating a models composable",[989,10240,10241,10242,1336],{},"Define the available models and persist the user's selection using ",[1043,10243,10246],{"href":10244,"rel":10245},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-cookie",[1047],[1049,10247,10248],{},"useCookie",[1299,10250,10251],{},[1090,10252,10255],{"className":1303,"code":10253,"filename":10254,"language":1305,"meta":1095,"style":1095},"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",[1049,10256,10257,10270,10281,10327,10371,10415,10420,10424,10454,10471,10477,10481,10487,10494,10499,10503],{"__ignoreMap":1095},[1099,10258,10259,10261,10263,10266,10268],{"class":1101,"line":1102},[1099,10260,1313],{"class":1312},[1099,10262,5194],{"class":1569},[1099,10264,10265],{"class":1122}," useModels",[1099,10267,1786],{"class":1326},[1099,10269,1402],{"class":1326},[1099,10271,10272,10274,10277,10279],{"class":1101,"line":1119},[1099,10273,2599],{"class":1569},[1099,10275,10276],{"class":1322}," models",[1099,10278,2609],{"class":1326},[1099,10280,1339],{"class":1332},[1099,10282,10283,10286,10288,10290,10292,10294,10296,10298,10300,10302,10304,10306,10308,10310,10313,10315,10317,10323,10325],{"class":1101,"line":1342},[1099,10284,10285],{"class":1326},"    {",[1099,10287,3097],{"class":1332},[1099,10289,1336],{"class":1326},[1099,10291,1413],{"class":1326},[1099,10293,3104],{"class":1109},[1099,10295,1351],{"class":1326},[1099,10297,1697],{"class":1326},[1099,10299,3083],{"class":1332},[1099,10301,1336],{"class":1326},[1099,10303,1413],{"class":1326},[1099,10305,3090],{"class":1109},[1099,10307,1351],{"class":1326},[1099,10309,1697],{"class":1326},[1099,10311,10312],{"class":1332}," icon",[1099,10314,1336],{"class":1326},[1099,10316,1413],{"class":1326},[1099,10318,10319,10322],{"class":1109},[8065,10320],{"class":10321},"shiki-icon-highlight sh9xi","i-simple-icons-openai",[1099,10324,1351],{"class":1326},[1099,10326,3109],{"class":1326},[1099,10328,10329,10331,10333,10335,10337,10339,10341,10343,10345,10347,10349,10351,10353,10355,10357,10359,10361,10367,10369],{"class":1101,"line":1357},[1099,10330,10285],{"class":1326},[1099,10332,3097],{"class":1332},[1099,10334,1336],{"class":1326},[1099,10336,1413],{"class":1326},[1099,10338,3134],{"class":1109},[1099,10340,1351],{"class":1326},[1099,10342,1697],{"class":1326},[1099,10344,3083],{"class":1332},[1099,10346,1336],{"class":1326},[1099,10348,1413],{"class":1326},[1099,10350,3058],{"class":1109},[1099,10352,1351],{"class":1326},[1099,10354,1697],{"class":1326},[1099,10356,10312],{"class":1332},[1099,10358,1336],{"class":1326},[1099,10360,1413],{"class":1326},[1099,10362,10363,10366],{"class":1109},[8065,10364],{"class":10365},"shiki-icon-highlight sNknm","i-simple-icons-anthropic",[1099,10368,1351],{"class":1326},[1099,10370,3109],{"class":1326},[1099,10372,10373,10375,10377,10379,10381,10383,10385,10387,10389,10391,10393,10395,10397,10399,10401,10403,10405,10411,10413],{"class":1101,"line":1369},[1099,10374,10285],{"class":1326},[1099,10376,3097],{"class":1332},[1099,10378,1336],{"class":1326},[1099,10380,1413],{"class":1326},[1099,10382,3164],{"class":1109},[1099,10384,1351],{"class":1326},[1099,10386,1697],{"class":1326},[1099,10388,3083],{"class":1332},[1099,10390,1336],{"class":1326},[1099,10392,1413],{"class":1326},[1099,10394,3151],{"class":1109},[1099,10396,1351],{"class":1326},[1099,10398,1697],{"class":1326},[1099,10400,10312],{"class":1332},[1099,10402,1336],{"class":1326},[1099,10404,1413],{"class":1326},[1099,10406,10407,10410],{"class":1109},[8065,10408],{"class":10409},"shiki-icon-highlight scZL3","i-simple-icons-google",[1099,10412,1351],{"class":1326},[1099,10414,3169],{"class":1326},[1099,10416,10417],{"class":1101,"line":1380},[1099,10418,10419],{"class":1332},"  ]\n",[1099,10421,10422],{"class":1101,"line":1388},[1099,10423,1391],{"emptyLinePlaceholder":21},[1099,10425,10426,10428,10430,10432,10435,10437,10439,10441,10443,10445,10448,10450,10452],{"class":1101,"line":1394},[1099,10427,2599],{"class":1569},[1099,10429,3274],{"class":1322},[1099,10431,2609],{"class":1326},[1099,10433,10434],{"class":1122}," useCookie",[1099,10436,1541],{"class":1326},[1099,10438,3247],{"class":1105},[1099,10440,2652],{"class":1326},[1099,10442,1323],{"class":1332},[1099,10444,1351],{"class":1326},[1099,10446,10447],{"class":1109},"ai-model",[1099,10449,1351],{"class":1326},[1099,10451,1697],{"class":1326},[1099,10453,1402],{"class":1326},[1099,10455,10456,10459,10461,10463,10465,10467,10469],{"class":1101,"line":1405},[1099,10457,10458],{"class":1122},"    default",[1099,10460,1336],{"class":1326},[1099,10462,4980],{"class":1326},[1099,10464,1806],{"class":1569},[1099,10466,1413],{"class":1326},[1099,10468,3058],{"class":1109},[1099,10470,1377],{"class":1326},[1099,10472,10473,10475],{"class":1101,"line":1421},[1099,10474,2400],{"class":1326},[1099,10476,1461],{"class":1332},[1099,10478,10479],{"class":1101,"line":1427},[1099,10480,1391],{"emptyLinePlaceholder":21},[1099,10482,10483,10485],{"class":1101,"line":1432},[1099,10484,2827],{"class":1312},[1099,10486,1402],{"class":1326},[1099,10488,10489,10492],{"class":1101,"line":1455},[1099,10490,10491],{"class":1322},"    models",[1099,10493,1354],{"class":1326},[1099,10495,10496],{"class":1101,"line":1960},[1099,10497,10498],{"class":1322},"    model\n",[1099,10500,10501],{"class":1101,"line":1987},[1099,10502,3605],{"class":1326},[1099,10504,10505],{"class":1101,"line":2033},[1099,10506,5418],{"class":1326},[1127,10508,10510],{"id":10509},"building-the-model-selector","Building the model selector",[989,10512,1624,10513,10518],{},[1043,10514,10515],{"href":734},[1049,10516,10517],{},"USelectMenu"," component that displays the available models:",[1299,10520,10521],{},[1090,10522,10525],{"className":1531,"code":10523,"filename":10524,"language":34,"meta":1095,"style":1095},"\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",[1049,10526,10527,10547,10580,10584,10601,10605,10623,10655,10659,10667,10671,10679,10686,10699,10713,10727,10740,10753,10758],{"__ignoreMap":1095},[1099,10528,10529,10531,10533,10535,10537,10539,10541,10543,10545],{"class":1101,"line":1102},[1099,10530,1541],{"class":1326},[1099,10532,5130],{"class":1332},[1099,10534,5133],{"class":1569},[1099,10536,5136],{"class":1569},[1099,10538,1573],{"class":1326},[1099,10540,1500],{"class":1326},[1099,10542,1305],{"class":1109},[1099,10544,1500],{"class":1326},[1099,10546,1547],{"class":1326},[1099,10548,10549,10551,10554,10556,10559,10561,10563,10565,10567,10569,10572,10574,10576,10578],{"class":1101,"line":1119},[1099,10550,3048],{"class":1569},[1099,10552,10553],{"class":1322}," model ",[1099,10555,1573],{"class":1326},[1099,10557,10558],{"class":1122}," defineModel",[1099,10560,1541],{"class":1326},[1099,10562,3247],{"class":1105},[1099,10564,2652],{"class":1326},[1099,10566,1323],{"class":1322},[1099,10568,1846],{"class":1326},[1099,10570,10571],{"class":1332}," required",[1099,10573,1336],{"class":1326},[1099,10575,4186],{"class":4185},[1099,10577,1713],{"class":1326},[1099,10579,1461],{"class":1322},[1099,10581,10582],{"class":1101,"line":1342},[1099,10583,1391],{"emptyLinePlaceholder":21},[1099,10585,10586,10588,10590,10593,10595,10597,10599],{"class":1101,"line":1357},[1099,10587,3048],{"class":1569},[1099,10589,1691],{"class":1326},[1099,10591,10592],{"class":1322}," models ",[1099,10594,1458],{"class":1326},[1099,10596,2609],{"class":1326},[1099,10598,10265],{"class":1122},[1099,10600,2655],{"class":1322},[1099,10602,10603],{"class":1101,"line":1369},[1099,10604,1391],{"emptyLinePlaceholder":21},[1099,10606,10607,10609,10612,10614,10616,10618,10620],{"class":1101,"line":1380},[1099,10608,3048],{"class":1569},[1099,10610,10611],{"class":1322}," selectedModel ",[1099,10613,1573],{"class":1326},[1099,10615,8007],{"class":1122},[1099,10617,1323],{"class":1322},[1099,10619,1786],{"class":1326},[1099,10621,10622],{"class":1569}," =>\n",[1099,10624,10625,10628,10630,10633,10635,10637,10639,10641,10643,10646,10648,10650,10652],{"class":1101,"line":1388},[1099,10626,10627],{"class":1322},"  models",[1099,10629,1789],{"class":1326},[1099,10631,10632],{"class":1122},"find",[1099,10634,1323],{"class":1322},[1099,10636,3348],{"class":1923},[1099,10638,1806],{"class":1569},[1099,10640,3353],{"class":1322},[1099,10642,1789],{"class":1326},[1099,10644,10645],{"class":1322},"value ",[1099,10647,8090],{"class":1326},[1099,10649,3274],{"class":1322},[1099,10651,1789],{"class":1326},[1099,10653,10654],{"class":1322},"value)\n",[1099,10656,10657],{"class":1101,"line":1394},[1099,10658,1461],{"class":1322},[1099,10660,10661,10663,10665],{"class":1101,"line":1405},[1099,10662,1617],{"class":1326},[1099,10664,5130],{"class":1332},[1099,10666,1547],{"class":1326},[1099,10668,10669],{"class":1101,"line":1421},[1099,10670,1391],{"emptyLinePlaceholder":21},[1099,10672,10673,10675,10677],{"class":1101,"line":1427},[1099,10674,1541],{"class":1326},[1099,10676,1544],{"class":1332},[1099,10678,1547],{"class":1326},[1099,10680,10681,10683],{"class":1101,"line":1432},[1099,10682,1554],{"class":1326},[1099,10684,10685],{"class":1332},"USelectMenu\n",[1099,10687,10688,10691,10693,10695,10697],{"class":1101,"line":1455},[1099,10689,10690],{"class":1569},"    v-model",[1099,10692,1573],{"class":1326},[1099,10694,1500],{"class":1326},[1099,10696,4657],{"class":1109},[1099,10698,5556],{"class":1326},[1099,10700,10701,10704,10706,10708,10711],{"class":1101,"line":1960},[1099,10702,10703],{"class":1569},"    :items",[1099,10705,1573],{"class":1326},[1099,10707,1500],{"class":1326},[1099,10709,10710],{"class":1109},"models",[1099,10712,5556],{"class":1326},[1099,10714,10715,10718,10720,10722,10725],{"class":1101,"line":1987},[1099,10716,10717],{"class":1569},"    :icon",[1099,10719,1573],{"class":1326},[1099,10721,1500],{"class":1326},[1099,10723,10724],{"class":1109},"selectedModel?.icon",[1099,10726,5556],{"class":1326},[1099,10728,10729,10732,10734,10736,10738],{"class":1101,"line":2033},[1099,10730,10731],{"class":1569},"    variant",[1099,10733,1573],{"class":1326},[1099,10735,1500],{"class":1326},[1099,10737,8295],{"class":1109},[1099,10739,5556],{"class":1326},[1099,10741,10742,10745,10747,10749,10751],{"class":1101,"line":2100},[1099,10743,10744],{"class":1569},"    value-key",[1099,10746,1573],{"class":1326},[1099,10748,1500],{"class":1326},[1099,10750,3333],{"class":1109},[1099,10752,5556],{"class":1326},[1099,10754,10755],{"class":1101,"line":2170},[1099,10756,10757],{"class":1326},"  \u002F>\n",[1099,10759,10760,10762,10764],{"class":1101,"line":2210},[1099,10761,1617],{"class":1326},[1099,10763,1544],{"class":1332},[1099,10765,1547],{"class":1326},[1127,10767,10769],{"id":10768},"integrating-with-the-chat","Integrating with the chat",[989,10771,10772],{},"Update the chat page to include the model selector and pass the selected model to the server:",[1299,10774,10775],{},[1676,10776,10777],{},[1090,10778,10781],{"className":1531,"code":10779,"filename":6121,"highlights":10780,"language":34,"meta":1095,"style":1095},"\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",[1394,2315,2347,2363,4323,4340,4363],[1049,10782,10783,10803,10829,10847,10865,10869,10881,10893,10910,10914,10956,10960,10976,11016,11020,11024,11040,11044,11060,11078,11096,11110,11136,11144,11160,11165,11174,11186,11210,11224,11228,11232,11244,11256,11270,11284,11296,11302,11306,11312,11316,11334,11344,11364,11390,11402,11406,11410,11414,11426,11454,11464,11468,11474,11482,11486,11494,11512,11524,11532,11540,11552,11570,11576,11588,11600,11604,11616,11620,11644,11710,11716,11728,11740,11752,11756,11762,11774,11786,11790,11798,11802,11822,11828,11840,11852,11864,11868,11896,11900,11908,11916,11924,11932,11941,11946,11953,11965,11977,11989,12001,12013,12017,12030,12050,12058,12062,12068,12080,12092,12104,12116,12120,12128,12137,12146,12155],{"__ignoreMap":1095},[1099,10784,10785,10787,10789,10791,10793,10795,10797,10799,10801],{"class":1101,"line":1102},[1099,10786,1541],{"class":1326},[1099,10788,5130],{"class":1332},[1099,10790,5133],{"class":1569},[1099,10792,5136],{"class":1569},[1099,10794,1573],{"class":1326},[1099,10796,1500],{"class":1326},[1099,10798,1305],{"class":1109},[1099,10800,1500],{"class":1326},[1099,10802,1547],{"class":1326},[1099,10804,10805,10807,10809,10811,10813,10815,10817,10819,10821,10823,10825,10827],{"class":1101,"line":1119},[1099,10806,1688],{"class":1312},[1099,10808,1691],{"class":1326},[1099,10810,6154],{"class":1322},[1099,10812,1697],{"class":1326},[1099,10814,6159],{"class":1322},[1099,10816,1697],{"class":1326},[1099,10818,6164],{"class":1322},[1099,10820,1713],{"class":1326},[1099,10822,1716],{"class":1312},[1099,10824,1413],{"class":1326},[1099,10826,2520],{"class":1109},[1099,10828,1377],{"class":1326},[1099,10830,10831,10833,10835,10837,10839,10841,10843,10845],{"class":1101,"line":1342},[1099,10832,1688],{"class":1312},[1099,10834,1691],{"class":1326},[1099,10836,6184],{"class":1322},[1099,10838,1713],{"class":1326},[1099,10840,1716],{"class":1312},[1099,10842,1413],{"class":1326},[1099,10844,6193],{"class":1109},[1099,10846,1377],{"class":1326},[1099,10848,10849,10851,10853,10855,10857,10859,10861,10863],{"class":1101,"line":1357},[1099,10850,1688],{"class":1312},[1099,10852,1691],{"class":1326},[1099,10854,6205],{"class":1322},[1099,10856,1713],{"class":1326},[1099,10858,1716],{"class":1312},[1099,10860,1413],{"class":1326},[1099,10862,6214],{"class":1109},[1099,10864,1377],{"class":1326},[1099,10866,10867],{"class":1101,"line":1369},[1099,10868,1391],{"emptyLinePlaceholder":21},[1099,10870,10871,10873,10875,10877,10879],{"class":1101,"line":1380},[1099,10872,3048],{"class":1569},[1099,10874,6227],{"class":1322},[1099,10876,1573],{"class":1326},[1099,10878,6232],{"class":1122},[1099,10880,2655],{"class":1322},[1099,10882,10883,10885,10887,10889,10891],{"class":1101,"line":1388},[1099,10884,3048],{"class":1569},[1099,10886,6241],{"class":1322},[1099,10888,1573],{"class":1326},[1099,10890,6246],{"class":1122},[1099,10892,2655],{"class":1322},[1099,10894,10896,10898,10900,10902,10904,10906,10908],{"class":10895,"line":1394},[1101,1551],[1099,10897,3048],{"class":1569},[1099,10899,1691],{"class":1326},[1099,10901,10553],{"class":1322},[1099,10903,1458],{"class":1326},[1099,10905,2609],{"class":1326},[1099,10907,10265],{"class":1122},[1099,10909,2655],{"class":1322},[1099,10911,10912],{"class":1101,"line":1405},[1099,10913,1391],{"emptyLinePlaceholder":21},[1099,10915,10916,10918,10920,10922,10924,10926,10928,10930,10932,10934,10936,10938,10940,10942,10944,10946,10948,10950,10952,10954],{"class":1101,"line":1421},[1099,10917,3048],{"class":1569},[1099,10919,1691],{"class":1326},[1099,10921,6266],{"class":1332},[1099,10923,1336],{"class":1326},[1099,10925,6271],{"class":1322},[1099,10927,1458],{"class":1326},[1099,10929,2609],{"class":1326},[1099,10931,2612],{"class":1312},[1099,10933,6280],{"class":1122},[1099,10935,1323],{"class":1322},[1099,10937,3693],{"class":1326},[1099,10939,6287],{"class":1109},[1099,10941,5402],{"class":1326},[1099,10943,6292],{"class":1322},[1099,10945,1789],{"class":1326},[1099,10947,6297],{"class":1322},[1099,10949,1789],{"class":1326},[1099,10951,2000],{"class":1322},[1099,10953,5411],{"class":1326},[1099,10955,1461],{"class":1322},[1099,10957,10958],{"class":1101,"line":1427},[1099,10959,1391],{"emptyLinePlaceholder":21},[1099,10961,10962,10964,10966,10968,10970,10972,10974],{"class":1101,"line":1432},[1099,10963,6314],{"class":1312},[1099,10965,1932],{"class":1322},[1099,10967,3553],{"class":1326},[1099,10969,6321],{"class":1322},[1099,10971,1789],{"class":1326},[1099,10973,6326],{"class":1322},[1099,10975,1327],{"class":1326},[1099,10977,10978,10980,10982,10984,10986,10988,10990,10992,10994,10996,10998,11000,11002,11004,11006,11008,11010,11012,11014],{"class":1101,"line":1455},[1099,10979,6333],{"class":1312},[1099,10981,2886],{"class":1122},[1099,10983,1323],{"class":1332},[1099,10985,1846],{"class":1326},[1099,10987,3575],{"class":1332},[1099,10989,1336],{"class":1326},[1099,10991,3581],{"class":3580},[1099,10993,1697],{"class":1326},[1099,10995,3586],{"class":1332},[1099,10997,1336],{"class":1326},[1099,10999,1413],{"class":1326},[1099,11001,3593],{"class":1109},[1099,11003,1351],{"class":1326},[1099,11005,1697],{"class":1326},[1099,11007,6362],{"class":1332},[1099,11009,1336],{"class":1326},[1099,11011,4186],{"class":4185},[1099,11013,1713],{"class":1326},[1099,11015,1461],{"class":1332},[1099,11017,11018],{"class":1101,"line":1960},[1099,11019,5418],{"class":1326},[1099,11021,11022],{"class":1101,"line":1987},[1099,11023,1391],{"emptyLinePlaceholder":21},[1099,11025,11026,11028,11030,11032,11034,11036,11038],{"class":1101,"line":2033},[1099,11027,3048],{"class":1569},[1099,11029,5153],{"class":1322},[1099,11031,1573],{"class":1326},[1099,11033,5158],{"class":1122},[1099,11035,1323],{"class":1322},[1099,11037,5163],{"class":1326},[1099,11039,1461],{"class":1322},[1099,11041,11042],{"class":1101,"line":2100},[1099,11043,1391],{"emptyLinePlaceholder":21},[1099,11045,11046,11048,11050,11052,11054,11056,11058],{"class":1101,"line":2170},[1099,11047,3048],{"class":1569},[1099,11049,6411],{"class":1322},[1099,11051,1573],{"class":1326},[1099,11053,1883],{"class":1326},[1099,11055,6184],{"class":1122},[1099,11057,1323],{"class":1322},[1099,11059,1327],{"class":1326},[1099,11061,11062,11064,11066,11068,11070,11072,11074,11076],{"class":1101,"line":2210},[1099,11063,1779],{"class":1332},[1099,11065,1336],{"class":1326},[1099,11067,6431],{"class":1322},[1099,11069,1789],{"class":1326},[1099,11071,3333],{"class":1322},[1099,11073,1789],{"class":1326},[1099,11075,2000],{"class":1322},[1099,11077,1354],{"class":1326},[1099,11079,11080,11082,11084,11086,11088,11090,11092,11094],{"class":1101,"line":2261},[1099,11081,1939],{"class":1332},[1099,11083,1336],{"class":1326},[1099,11085,6431],{"class":1322},[1099,11087,1789],{"class":1326},[1099,11089,3333],{"class":1322},[1099,11091,1789],{"class":1326},[1099,11093,1978],{"class":1322},[1099,11095,1354],{"class":1326},[1099,11097,11098,11100,11102,11104,11106,11108],{"class":1101,"line":2274},[1099,11099,6466],{"class":1332},[1099,11101,1336],{"class":1326},[1099,11103,1883],{"class":1326},[1099,11105,6154],{"class":1122},[1099,11107,1323],{"class":1322},[1099,11109,1327],{"class":1326},[1099,11111,11112,11114,11116,11118,11120,11122,11124,11126,11128,11130,11132,11134],{"class":1101,"line":2304},[1099,11113,6482],{"class":1332},[1099,11115,1336],{"class":1326},[1099,11117,3687],{"class":1326},[1099,11119,6287],{"class":1109},[1099,11121,5402],{"class":1326},[1099,11123,6321],{"class":1322},[1099,11125,1789],{"class":1326},[1099,11127,3333],{"class":1322},[1099,11129,1789],{"class":1326},[1099,11131,2000],{"class":1322},[1099,11133,5411],{"class":1326},[1099,11135,1354],{"class":1326},[1099,11137,11138,11140,11142],{"class":1101,"line":2310},[1099,11139,5300],{"class":1332},[1099,11141,1336],{"class":1326},[1099,11143,1402],{"class":1326},[1099,11145,11147,11149,11151,11153,11155,11157],{"class":11146,"line":2315},[1101,1551],[1099,11148,3670],{"class":1332},[1099,11150,1336],{"class":1326},[1099,11152,3274],{"class":1322},[1099,11154,1789],{"class":1326},[1099,11156,10645],{"class":1322},[1099,11158,11159],{"class":2677},"\u002F\u002F Pass the selected model\n",[1099,11161,11163],{"class":11162,"line":2347},[1101,1551],[1099,11164,4568],{"class":1326},[1099,11166,11168,11170,11172],{"class":11167,"line":2363},[1101,1551],[1099,11169,2400],{"class":1326},[1099,11171,1863],{"class":1322},[1099,11173,1354],{"class":1326},[1099,11175,11176,11178,11180,11182,11184],{"class":1101,"line":2381},[1099,11177,6518],{"class":1332},[1099,11179,1323],{"class":1326},[1099,11181,6523],{"class":1923},[1099,11183,1863],{"class":1326},[1099,11185,1402],{"class":1326},[1099,11187,11188,11190,11192,11194,11196,11198,11200,11202,11204,11206,11208],{"class":1101,"line":2397},[1099,11189,6539],{"class":1312},[1099,11191,1932],{"class":1332},[1099,11193,6523],{"class":1322},[1099,11195,1789],{"class":1326},[1099,11197,6548],{"class":1322},[1099,11199,3360],{"class":1326},[1099,11201,1413],{"class":1326},[1099,11203,4333],{"class":1109},[1099,11205,1351],{"class":1326},[1099,11207,3558],{"class":1332},[1099,11209,1327],{"class":1326},[1099,11211,11212,11214,11216,11218,11220,11222],{"class":1101,"line":2405},[1099,11213,6566],{"class":1122},[1099,11215,1323],{"class":1332},[1099,11217,1351],{"class":1326},[1099,11219,1768],{"class":1109},[1099,11221,1351],{"class":1326},[1099,11223,1461],{"class":1332},[1099,11225,11226],{"class":1101,"line":3385},[1099,11227,4568],{"class":1326},[1099,11229,11230],{"class":1101,"line":3402},[1099,11231,1424],{"class":1326},[1099,11233,11234,11236,11238,11240,11242],{"class":1101,"line":3434},[1099,11235,6592],{"class":1332},[1099,11237,1323],{"class":1326},[1099,11239,6597],{"class":1923},[1099,11241,1863],{"class":1326},[1099,11243,1402],{"class":1326},[1099,11245,11246,11248,11250,11252,11254],{"class":1101,"line":3447},[1099,11247,6607],{"class":1322},[1099,11249,1789],{"class":1326},[1099,11251,6612],{"class":1122},[1099,11253,1323],{"class":1332},[1099,11255,1327],{"class":1326},[1099,11257,11258,11260,11262,11264,11266,11268],{"class":1101,"line":3452},[1099,11259,6622],{"class":1332},[1099,11261,1336],{"class":1326},[1099,11263,1413],{"class":1326},[1099,11265,497],{"class":1109},[1099,11267,1351],{"class":1326},[1099,11269,1354],{"class":1326},[1099,11271,11272,11274,11276,11278,11280,11282],{"class":1101,"line":3458},[1099,11273,6638],{"class":1332},[1099,11275,1336],{"class":1326},[1099,11277,6643],{"class":1322},[1099,11279,1789],{"class":1326},[1099,11281,4485],{"class":1322},[1099,11283,1354],{"class":1326},[1099,11285,11286,11288,11290,11292,11294],{"class":1101,"line":3489},[1099,11287,6655],{"class":1332},[1099,11289,1336],{"class":1326},[1099,11291,1413],{"class":1326},[1099,11293,6597],{"class":1109},[1099,11295,1377],{"class":1326},[1099,11297,11298,11300],{"class":1101,"line":3533},[1099,11299,3388],{"class":1326},[1099,11301,1461],{"class":1332},[1099,11303,11304],{"class":1101,"line":3540},[1099,11305,3605],{"class":1326},[1099,11307,11308,11310],{"class":1101,"line":3545},[1099,11309,1458],{"class":1326},[1099,11311,1461],{"class":1322},[1099,11313,11314],{"class":1101,"line":3563},[1099,11315,1391],{"emptyLinePlaceholder":21},[1099,11317,11318,11320,11322,11324,11326,11328,11330,11332],{"class":1101,"line":3602},[1099,11319,6691],{"class":1569},[1099,11321,6694],{"class":1122},[1099,11323,1323],{"class":1326},[1099,11325,6699],{"class":1923},[1099,11327,1336],{"class":1326},[1099,11329,6704],{"class":1105},[1099,11331,1863],{"class":1326},[1099,11333,1402],{"class":1326},[1099,11335,11336,11338,11340,11342],{"class":1101,"line":3608},[1099,11337,6713],{"class":1322},[1099,11339,1789],{"class":1326},[1099,11341,6718],{"class":1122},[1099,11343,2655],{"class":1332},[1099,11345,11346,11348,11350,11352,11354,11356,11358,11360,11362],{"class":1101,"line":3613},[1099,11347,3548],{"class":1312},[1099,11349,1932],{"class":1332},[1099,11351,5212],{"class":1322},[1099,11353,1789],{"class":1326},[1099,11355,3333],{"class":1322},[1099,11357,1789],{"class":1326},[1099,11359,5221],{"class":1122},[1099,11361,5224],{"class":1332},[1099,11363,1327],{"class":1326},[1099,11365,11366,11368,11370,11372,11374,11376,11378,11380,11382,11384,11386,11388],{"class":1101,"line":3619},[1099,11367,6745],{"class":1322},[1099,11369,1789],{"class":1326},[1099,11371,6750],{"class":1122},[1099,11373,1323],{"class":1332},[1099,11375,1846],{"class":1326},[1099,11377,1700],{"class":1332},[1099,11379,1336],{"class":1326},[1099,11381,5356],{"class":1322},[1099,11383,1789],{"class":1326},[1099,11385,3333],{"class":1322},[1099,11387,1713],{"class":1326},[1099,11389,1461],{"class":1332},[1099,11391,11392,11394,11396,11398,11400],{"class":1101,"line":3639},[1099,11393,6773],{"class":1322},[1099,11395,1789],{"class":1326},[1099,11397,3333],{"class":1322},[1099,11399,2609],{"class":1326},[1099,11401,6782],{"class":1326},[1099,11403,11404],{"class":1101,"line":3667},[1099,11405,3605],{"class":1326},[1099,11407,11408],{"class":1101,"line":3679},[1099,11409,5418],{"class":1326},[1099,11411,11412],{"class":1101,"line":3698},[1099,11413,1391],{"emptyLinePlaceholder":21},[1099,11415,11416,11418,11420,11422,11424],{"class":1101,"line":3726},[1099,11417,6804],{"class":1122},[1099,11419,1323],{"class":1322},[1099,11421,1786],{"class":1326},[1099,11423,1806],{"class":1569},[1099,11425,1402],{"class":1326},[1099,11427,11428,11430,11432,11434,11436,11438,11440,11442,11444,11446,11448,11450,11452],{"class":1101,"line":3733},[1099,11429,3548],{"class":1312},[1099,11431,1932],{"class":1332},[1099,11433,6321],{"class":1322},[1099,11435,1789],{"class":1326},[1099,11437,3333],{"class":1322},[1099,11439,3859],{"class":1326},[1099,11441,1978],{"class":1322},[1099,11443,1789],{"class":1326},[1099,11445,3838],{"class":1322},[1099,11447,3360],{"class":1326},[1099,11449,3844],{"class":3580},[1099,11451,3558],{"class":1332},[1099,11453,1327],{"class":1326},[1099,11455,11456,11458,11460,11462],{"class":1101,"line":3738},[1099,11457,6745],{"class":1322},[1099,11459,1789],{"class":1326},[1099,11461,6849],{"class":1122},[1099,11463,2655],{"class":1332},[1099,11465,11466],{"class":1101,"line":3804},[1099,11467,3605],{"class":1326},[1099,11469,11470,11472],{"class":1101,"line":3809},[1099,11471,1458],{"class":1326},[1099,11473,1461],{"class":1322},[1099,11475,11476,11478,11480],{"class":1101,"line":3814},[1099,11477,1617],{"class":1326},[1099,11479,5130],{"class":1332},[1099,11481,1547],{"class":1326},[1099,11483,11484],{"class":1101,"line":3820},[1099,11485,1391],{"emptyLinePlaceholder":21},[1099,11487,11488,11490,11492],{"class":1101,"line":3849},[1099,11489,1541],{"class":1326},[1099,11491,1544],{"class":1332},[1099,11493,1547],{"class":1326},[1099,11495,11496,11498,11500,11502,11504,11506,11508,11510],{"class":1101,"line":3890},[1099,11497,1554],{"class":1326},[1099,11499,5445],{"class":1332},[1099,11501,5448],{"class":1569},[1099,11503,1573],{"class":1326},[1099,11505,1500],{"class":1326},[1099,11507,5455],{"class":1109},[1099,11509,1500],{"class":1326},[1099,11511,1547],{"class":1326},[1099,11513,11514,11516,11518,11520,11522],{"class":1101,"line":3919},[1099,11515,1563],{"class":1326},[1099,11517,1544],{"class":1332},[1099,11519,5468],{"class":1326},[1099,11521,8688],{"class":1569},[1099,11523,1547],{"class":1326},[1099,11525,11526,11528,11530],{"class":1101,"line":3931},[1099,11527,1587],{"class":1326},[1099,11529,8698],{"class":1332},[1099,11531,1593],{"class":1326},[1099,11533,11534,11536,11538],{"class":1101,"line":3947},[1099,11535,1598],{"class":1326},[1099,11537,1544],{"class":1332},[1099,11539,1547],{"class":1326},[1099,11541,11542,11544,11546,11548,11550],{"class":1101,"line":3961},[1099,11543,1563],{"class":1326},[1099,11545,1544],{"class":1332},[1099,11547,5468],{"class":1326},[1099,11549,5471],{"class":1569},[1099,11551,1547],{"class":1326},[1099,11553,11554,11556,11558,11560,11562,11564,11566,11568],{"class":1101,"line":3968},[1099,11555,1587],{"class":1326},[1099,11557,5480],{"class":1332},[1099,11559,5483],{"class":1569},[1099,11561,1573],{"class":1326},[1099,11563,1500],{"class":1326},[1099,11565,6926],{"class":1109},[1099,11567,1500],{"class":1326},[1099,11569,1547],{"class":1326},[1099,11571,11572,11574],{"class":1101,"line":3973},[1099,11573,5499],{"class":1326},[1099,11575,6937],{"class":1332},[1099,11577,11578,11580,11582,11584,11586],{"class":1101,"line":3978},[1099,11579,6942],{"class":1569},[1099,11581,1573],{"class":1326},[1099,11583,1500],{"class":1326},[1099,11585,6949],{"class":1109},[1099,11587,5556],{"class":1326},[1099,11589,11590,11592,11594,11596,11598],{"class":1101,"line":3984},[1099,11591,5562],{"class":1569},[1099,11593,1573],{"class":1326},[1099,11595,1500],{"class":1326},[1099,11597,6962],{"class":1109},[1099,11599,5556],{"class":1326},[1099,11601,11602],{"class":1101,"line":4001},[1099,11603,6969],{"class":1569},[1099,11605,11606,11608,11610,11612,11614],{"class":1101,"line":4023},[1099,11607,6974],{"class":1569},[1099,11609,1573],{"class":1326},[1099,11611,1500],{"class":1326},[1099,11613,6981],{"class":1109},[1099,11615,5556],{"class":1326},[1099,11617,11618],{"class":1101,"line":4041},[1099,11619,5622],{"class":1326},[1099,11621,11622,11624,11626,11628,11630,11632,11634,11636,11638,11640,11642],{"class":1101,"line":4049},[1099,11623,5628],{"class":1326},[1099,11625,1544],{"class":1332},[1099,11627,5468],{"class":1326},[1099,11629,371],{"class":1569},[1099,11631,1573],{"class":1326},[1099,11633,1500],{"class":1326},[1099,11635,1846],{"class":1326},[1099,11637,7006],{"class":1322},[1099,11639,1458],{"class":1326},[1099,11641,1500],{"class":1326},[1099,11643,1547],{"class":1326},[1099,11645,11646,11648,11650,11652,11654,11656,11658,11660,11662,11664,11666,11668,11670,11672,11674,11676,11678,11680,11682,11684,11686,11688,11690,11692,11694,11696,11698,11700,11702,11704,11706,11708],{"class":1101,"line":4066},[1099,11647,7017],{"class":1326},[1099,11649,1544],{"class":1332},[1099,11651,7022],{"class":1312},[1099,11653,1573],{"class":1326},[1099,11655,1500],{"class":1326},[1099,11657,7029],{"class":1322},[1099,11659,1697],{"class":1326},[1099,11661,7034],{"class":1322},[1099,11663,7037],{"class":1326},[1099,11665,2604],{"class":1322},[1099,11667,1789],{"class":1326},[1099,11669,2184],{"class":1322},[1099,11671,1500],{"class":1326},[1099,11673,7048],{"class":1326},[1099,11675,7051],{"class":1569},[1099,11677,1573],{"class":1326},[1099,11679,7056],{"class":1326},[1099,11681,4485],{"class":1322},[1099,11683,1789],{"class":1326},[1099,11685,2000],{"class":1322},[1099,11687,1458],{"class":1326},[1099,11689,7067],{"class":1109},[1099,11691,5402],{"class":1326},[1099,11693,7072],{"class":1322},[1099,11695,1789],{"class":1326},[1099,11697,6548],{"class":1322},[1099,11699,1458],{"class":1326},[1099,11701,7067],{"class":1109},[1099,11703,5402],{"class":1326},[1099,11705,7085],{"class":1322},[1099,11707,7088],{"class":1326},[1099,11709,1547],{"class":1326},[1099,11711,11712,11714],{"class":1101,"line":4087},[1099,11713,7095],{"class":1326},[1099,11715,7098],{"class":1332},[1099,11717,11718,11720,11722,11724,11726],{"class":1101,"line":4097},[1099,11719,7103],{"class":1569},[1099,11721,1573],{"class":1326},[1099,11723,1500],{"class":1326},[1099,11725,7110],{"class":1109},[1099,11727,5556],{"class":1326},[1099,11729,11730,11732,11734,11736,11738],{"class":1101,"line":4107},[1099,11731,7117],{"class":1569},[1099,11733,1573],{"class":1326},[1099,11735,1500],{"class":1326},[1099,11737,7124],{"class":1109},[1099,11739,5556],{"class":1326},[1099,11741,11742,11744,11746,11748,11750],{"class":1101,"line":4117},[1099,11743,7131],{"class":1569},[1099,11745,1573],{"class":1326},[1099,11747,1500],{"class":1326},[1099,11749,7138],{"class":1109},[1099,11751,5556],{"class":1326},[1099,11753,11754],{"class":1101,"line":4134},[1099,11755,7145],{"class":1326},[1099,11757,11758,11760],{"class":1101,"line":4145},[1099,11759,7150],{"class":1326},[1099,11761,7153],{"class":1332},[1099,11763,11764,11766,11768,11770,11772],{"class":1101,"line":4151},[1099,11765,7158],{"class":1569},[1099,11767,1573],{"class":1326},[1099,11769,1500],{"class":1326},[1099,11771,7124],{"class":1109},[1099,11773,5556],{"class":1326},[1099,11775,11776,11778,11780,11782,11784],{"class":1101,"line":4157},[1099,11777,7171],{"class":1569},[1099,11779,1573],{"class":1326},[1099,11781,1500],{"class":1326},[1099,11783,7138],{"class":1109},[1099,11785,5556],{"class":1326},[1099,11787,11788],{"class":1101,"line":4167},[1099,11789,7184],{"class":1326},[1099,11791,11792,11794,11796],{"class":1101,"line":4177},[1099,11793,7189],{"class":1326},[1099,11795,7192],{"class":1332},[1099,11797,1547],{"class":1326},[1099,11799,11800],{"class":1101,"line":4191},[1099,11801,1391],{"emptyLinePlaceholder":21},[1099,11803,11804,11806,11808,11810,11812,11814,11816,11818,11820],{"class":1101,"line":4206},[1099,11805,7095],{"class":1326},[1099,11807,1544],{"class":1332},[1099,11809,7207],{"class":1312},[1099,11811,1573],{"class":1326},[1099,11813,1500],{"class":1326},[1099,11815,7214],{"class":1122},[1099,11817,7217],{"class":1322},[1099,11819,1500],{"class":1326},[1099,11821,1547],{"class":1326},[1099,11823,11824,11826],{"class":1101,"line":4211},[1099,11825,7150],{"class":1326},[1099,11827,7153],{"class":1332},[1099,11829,11830,11832,11834,11836,11838],{"class":1101,"line":4216},[1099,11831,7232],{"class":1569},[1099,11833,1573],{"class":1326},[1099,11835,1500],{"class":1326},[1099,11837,7239],{"class":1109},[1099,11839,5556],{"class":1326},[1099,11841,11842,11844,11846,11848,11850],{"class":1101,"line":4226},[1099,11843,7158],{"class":1569},[1099,11845,1573],{"class":1326},[1099,11847,1500],{"class":1326},[1099,11849,7124],{"class":1109},[1099,11851,5556],{"class":1326},[1099,11853,11854,11856,11858,11860,11862],{"class":1101,"line":4242},[1099,11855,7171],{"class":1569},[1099,11857,1573],{"class":1326},[1099,11859,1500],{"class":1326},[1099,11861,7138],{"class":1109},[1099,11863,5556],{"class":1326},[1099,11865,11866],{"class":1101,"line":4257},[1099,11867,7184],{"class":1326},[1099,11869,11870,11872,11874,11876,11878,11880,11882,11884,11886,11888,11890,11892,11894],{"class":1101,"line":4263},[1099,11871,7150],{"class":1326},[1099,11873,989],{"class":1332},[1099,11875,7207],{"class":1569},[1099,11877,1573],{"class":1326},[1099,11879,1500],{"class":1326},[1099,11881,7284],{"class":1109},[1099,11883,1500],{"class":1326},[1099,11885,5483],{"class":1569},[1099,11887,1573],{"class":1326},[1099,11889,1500],{"class":1326},[1099,11891,7295],{"class":1109},[1099,11893,1500],{"class":1326},[1099,11895,1547],{"class":1326},[1099,11897,11898],{"class":1101,"line":4269},[1099,11899,7304],{"class":1322},[1099,11901,11902,11904,11906],{"class":1101,"line":4277},[1099,11903,7309],{"class":1326},[1099,11905,989],{"class":1332},[1099,11907,1547],{"class":1326},[1099,11909,11910,11912,11914],{"class":1101,"line":4282},[1099,11911,7189],{"class":1326},[1099,11913,1544],{"class":1332},[1099,11915,1547],{"class":1326},[1099,11917,11918,11920,11922],{"class":1101,"line":4288},[1099,11919,7326],{"class":1326},[1099,11921,1544],{"class":1332},[1099,11923,1547],{"class":1326},[1099,11925,11926,11928,11930],{"class":1101,"line":4308},[1099,11927,7335],{"class":1326},[1099,11929,1544],{"class":1332},[1099,11931,1547],{"class":1326},[1099,11933,11935,11937,11939],{"class":11934,"line":4323},[1101,1551],[1099,11936,5525],{"class":1326},[1099,11938,5101],{"class":1332},[1099,11940,1547],{"class":1326},[1099,11942,11944],{"class":11943,"line":4340},[1101,1551],[1099,11945,1391],{"emptyLinePlaceholder":21},[1099,11947,11949,11951],{"class":11948,"line":4363},[1101,1551],[1099,11950,5499],{"class":1326},[1099,11952,5541],{"class":1332},[1099,11954,11955,11957,11959,11961,11963],{"class":1101,"line":4374},[1099,11956,5547],{"class":1569},[1099,11958,1573],{"class":1326},[1099,11960,1500],{"class":1326},[1099,11962,5212],{"class":1109},[1099,11964,5556],{"class":1326},[1099,11966,11967,11969,11971,11973,11975],{"class":1101,"line":4382},[1099,11968,7374],{"class":1569},[1099,11970,1573],{"class":1326},[1099,11972,1500],{"class":1326},[1099,11974,7381],{"class":1109},[1099,11976,5556],{"class":1326},[1099,11978,11979,11981,11983,11985,11987],{"class":1101,"line":4388},[1099,11980,5577],{"class":1569},[1099,11982,1573],{"class":1326},[1099,11984,1500],{"class":1326},[1099,11986,5584],{"class":1109},[1099,11988,5556],{"class":1326},[1099,11990,11991,11993,11995,11997,11999],{"class":1101,"line":4393},[1099,11992,6974],{"class":1569},[1099,11994,1573],{"class":1326},[1099,11996,1500],{"class":1326},[1099,11998,7406],{"class":1109},[1099,12000,5556],{"class":1326},[1099,12002,12003,12005,12007,12009,12011],{"class":1101,"line":4416},[1099,12004,5607],{"class":1569},[1099,12006,1573],{"class":1326},[1099,12008,1500],{"class":1326},[1099,12010,7419],{"class":1109},[1099,12012,5556],{"class":1326},[1099,12014,12015],{"class":1101,"line":4422},[1099,12016,5622],{"class":1326},[1099,12018,12019,12021,12023,12025,12028],{"class":1101,"line":4442},[1099,12020,5628],{"class":1326},[1099,12022,1544],{"class":1332},[1099,12024,5468],{"class":1326},[1099,12026,12027],{"class":1569},"footer",[1099,12029,1547],{"class":1326},[1099,12031,12032,12034,12037,12040,12042,12044,12046,12048],{"class":1101,"line":4448},[1099,12033,7017],{"class":1326},[1099,12035,12036],{"class":1332},"ModelSelect",[1099,12038,12039],{"class":1569}," v-model",[1099,12041,1573],{"class":1326},[1099,12043,1500],{"class":1326},[1099,12045,4657],{"class":1109},[1099,12047,1500],{"class":1326},[1099,12049,1593],{"class":1326},[1099,12051,12052,12054,12056],{"class":1101,"line":4494},[1099,12053,7335],{"class":1326},[1099,12055,1544],{"class":1332},[1099,12057,1547],{"class":1326},[1099,12059,12060],{"class":1101,"line":4510},[1099,12061,1391],{"emptyLinePlaceholder":21},[1099,12063,12064,12066],{"class":1101,"line":4543},[1099,12065,5628],{"class":1326},[1099,12067,7432],{"class":1332},[1099,12069,12070,12072,12074,12076,12078],{"class":1101,"line":4557},[1099,12071,7437],{"class":1569},[1099,12073,1573],{"class":1326},[1099,12075,1500],{"class":1326},[1099,12077,6962],{"class":1109},[1099,12079,5556],{"class":1326},[1099,12081,12082,12084,12086,12088,12090],{"class":1101,"line":4565},[1099,12083,7450],{"class":1569},[1099,12085,1573],{"class":1326},[1099,12087,1500],{"class":1326},[1099,12089,5641],{"class":1109},[1099,12091,5556],{"class":1326},[1099,12093,12094,12096,12098,12100,12102],{"class":1101,"line":4571},[1099,12095,7463],{"class":1569},[1099,12097,1573],{"class":1326},[1099,12099,1500],{"class":1326},[1099,12101,7470],{"class":1109},[1099,12103,5556],{"class":1326},[1099,12105,12106,12108,12110,12112,12114],{"class":1101,"line":4578},[1099,12107,7477],{"class":1569},[1099,12109,1573],{"class":1326},[1099,12111,1500],{"class":1326},[1099,12113,7484],{"class":1109},[1099,12115,5556],{"class":1326},[1099,12117,12118],{"class":1101,"line":4583},[1099,12119,7491],{"class":1326},[1099,12121,12122,12124,12126],{"class":1101,"line":4601},[1099,12123,5525],{"class":1326},[1099,12125,5095],{"class":1332},[1099,12127,1547],{"class":1326},[1099,12129,12131,12133,12135],{"class":1101,"line":12130},114,[1099,12132,5659],{"class":1326},[1099,12134,5480],{"class":1332},[1099,12136,1547],{"class":1326},[1099,12138,12140,12142,12144],{"class":1101,"line":12139},115,[1099,12141,1598],{"class":1326},[1099,12143,1544],{"class":1332},[1099,12145,1547],{"class":1326},[1099,12147,12149,12151,12153],{"class":1101,"line":12148},116,[1099,12150,1608],{"class":1326},[1099,12152,5445],{"class":1332},[1099,12154,1547],{"class":1326},[1099,12156,12158,12160,12162],{"class":1101,"line":12157},117,[1099,12159,1617],{"class":1326},[1099,12161,1544],{"class":1332},[1099,12163,1547],{"class":1326},[993,12165,12167],{"id":12166},"going-further","Going further",[989,12169,12170],{},"You now have a working AI chatbot with database persistence! To take it further, consider adding:",[989,12172,12173],{},[1007,12174,12175],{},"User Authentication",[989,12177,12178,12179,12184],{},"Add authentication with ",[1043,12180,12183],{"href":12181,"rel":12182},"https:\u002F\u002Fgithub.com\u002Fatinux\u002Fnuxt-auth-utils",[1047],"nuxt-auth-utils"," to let users access their chat history across devices and keep conversations private.",[989,12186,12187],{},[1007,12188,12189],{},"AI Tools",[989,12191,12192,12193,12198],{},"Extend your chatbot with ",[1043,12194,12197],{"href":12195,"rel":12196},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-core\u002Ftools-and-tool-calling",[1047],"AI SDK tools"," that can fetch real-time data, generate charts, or interact with external APIs:",[1090,12200,12202],{"className":1303,"code":12201,"language":1305,"meta":1095,"style":1095},"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",[1049,12203,12204,12223,12241,12245,12260,12276,12293,12324,12332,12352,12357,12392,12396],{"__ignoreMap":1095},[1099,12205,12206,12208,12210,12213,12215,12217,12219,12221],{"class":1101,"line":1102},[1099,12207,1688],{"class":1312},[1099,12209,1691],{"class":1326},[1099,12211,12212],{"class":1322}," tool",[1099,12214,1713],{"class":1326},[1099,12216,1716],{"class":1312},[1099,12218,1413],{"class":1326},[1099,12220,2520],{"class":1109},[1099,12222,1377],{"class":1326},[1099,12224,12225,12227,12229,12231,12233,12235,12237,12239],{"class":1101,"line":1119},[1099,12226,1688],{"class":1312},[1099,12228,1691],{"class":1326},[1099,12230,2555],{"class":1322},[1099,12232,1713],{"class":1326},[1099,12234,1716],{"class":1312},[1099,12236,1413],{"class":1326},[1099,12238,2564],{"class":1109},[1099,12240,1377],{"class":1326},[1099,12242,12243],{"class":1101,"line":1342},[1099,12244,1391],{"emptyLinePlaceholder":21},[1099,12246,12247,12249,12252,12254,12256,12258],{"class":1101,"line":1357},[1099,12248,3048],{"class":1569},[1099,12250,12251],{"class":1322}," weatherTool ",[1099,12253,1573],{"class":1326},[1099,12255,12212],{"class":1122},[1099,12257,1323],{"class":1322},[1099,12259,1327],{"class":1326},[1099,12261,12262,12265,12267,12269,12272,12274],{"class":1101,"line":1369},[1099,12263,12264],{"class":1332},"  description",[1099,12266,1336],{"class":1326},[1099,12268,1413],{"class":1326},[1099,12270,12271],{"class":1109},"Get the current weather for a location",[1099,12273,1351],{"class":1326},[1099,12275,1354],{"class":1326},[1099,12277,12278,12281,12283,12285,12287,12289,12291],{"class":1101,"line":1380},[1099,12279,12280],{"class":1332},"  parameters",[1099,12282,1336],{"class":1326},[1099,12284,2555],{"class":1322},[1099,12286,1789],{"class":1326},[1099,12288,2627],{"class":1122},[1099,12290,1323],{"class":1322},[1099,12292,1327],{"class":1326},[1099,12294,12295,12298,12300,12302,12304,12306,12308,12310,12313,12315,12317,12320,12322],{"class":1101,"line":1388},[1099,12296,12297],{"class":1332},"    location",[1099,12299,1336],{"class":1326},[1099,12301,2555],{"class":1322},[1099,12303,1789],{"class":1326},[1099,12305,3247],{"class":1122},[1099,12307,1786],{"class":1322},[1099,12309,1789],{"class":1326},[1099,12311,12312],{"class":1122},"describe",[1099,12314,1323],{"class":1322},[1099,12316,1351],{"class":1326},[1099,12318,12319],{"class":1109},"The city name",[1099,12321,1351],{"class":1326},[1099,12323,1461],{"class":1322},[1099,12325,12326,12328,12330],{"class":1101,"line":1394},[1099,12327,2400],{"class":1326},[1099,12329,1863],{"class":1322},[1099,12331,1354],{"class":1326},[1099,12333,12334,12337,12339,12341,12343,12346,12348,12350],{"class":1101,"line":1405},[1099,12335,12336],{"class":1122},"  execute",[1099,12338,1336],{"class":1326},[1099,12340,4009],{"class":1569},[1099,12342,1920],{"class":1326},[1099,12344,12345],{"class":1923}," location",[1099,12347,1927],{"class":1326},[1099,12349,1806],{"class":1569},[1099,12351,1402],{"class":1326},[1099,12353,12354],{"class":1101,"line":1421},[1099,12355,12356],{"class":2677},"    \u002F\u002F Fetch weather data from an API\n",[1099,12358,12359,12362,12364,12366,12368,12371,12373,12376,12378,12381,12383,12385,12388,12390],{"class":1101,"line":1427},[1099,12360,12361],{"class":1312},"    return",[1099,12363,1691],{"class":1326},[1099,12365,12345],{"class":1322},[1099,12367,1697],{"class":1326},[1099,12369,12370],{"class":1332}," temperature",[1099,12372,1336],{"class":1326},[1099,12374,12375],{"class":3580}," 22",[1099,12377,1697],{"class":1326},[1099,12379,12380],{"class":1332}," condition",[1099,12382,1336],{"class":1326},[1099,12384,1413],{"class":1326},[1099,12386,12387],{"class":1109},"Sunny",[1099,12389,1351],{"class":1326},[1099,12391,3169],{"class":1326},[1099,12393,12394],{"class":1101,"line":1432},[1099,12395,3605],{"class":1326},[1099,12397,12398,12400],{"class":1101,"line":1455},[1099,12399,1458],{"class":1326},[1099,12401,1461],{"class":1322},[993,12403,12405],{"id":12404},"deploying-to-vercel","Deploying to Vercel",[989,12407,12408],{},"Deploy your chatbot to Vercel with zero configuration:",[1090,12410,12412],{"className":1092,"code":12411,"language":1094,"meta":1095,"style":1095},"npx vercel deploy\n",[1049,12413,12414],{"__ignoreMap":1095},[1099,12415,12416,12418,12421],{"class":1101,"line":1102},[1099,12417,1106],{"class":1105},[1099,12419,12420],{"class":1109}," vercel",[1099,12422,12423],{"class":1109}," deploy\n",[989,12425,12426],{},"Then, in the Vercel dashboard:",[1001,12428,12429,12435],{},[1004,12430,12431,12432,12434],{},"Enable ",[1007,12433,4613],{}," and add credits so requests can be processed.",[1004,12436,12437,12438,12441],{},"Add a ",[1007,12439,12440],{},"Turso"," database from the Vercel Marketplace and connect it to your project (it will provision the database and add the required environment variables automatically).",[12443,12444,12445],"blockquote",{},[989,12446,12447,12448,12453,12454,12456],{},"Note: On Vercel, you ",[1007,12449,12450,12451],{},"don’t need to manually add ",[1049,12452,1640],{}," — Vercel handles the gateway configuration for deployments. Keep using ",[1049,12455,1627],{}," locally for development.",[1463,12458,12460],{"to":1078,"target":12459},"_blank",[989,12461,12462,12463,1789],{},"Learn more about setting up AI Gateway in the ",[1007,12464,12465],{},"Vercel AI Gateway documentation",[993,12467,12469],{"id":12468},"conclusion","Conclusion",[989,12471,12472],{},"You've built a complete AI chatbot with:",[1001,12474,12475,12481,12487,12493,12498],{},[1004,12476,12477,12480],{},[1007,12478,12479],{},"A complete chat interface"," using Nuxt UI components",[1004,12482,12483,12486],{},[1007,12484,12485],{},"Real-time streaming responses"," with the AI SDK",[1004,12488,12489,12492],{},[1007,12490,12491],{},"Streaming Markdown rendering"," with Comark for rich content display",[1004,12494,12495,12497],{},[1007,12496,1027],{}," via AI Gateway",[1004,12499,12500,12503],{},[1007,12501,12502],{},"Database persistence"," with SQLite (local) \u002F Turso (production) and Drizzle ORM",[989,12505,12506],{},"The combination of Nuxt's full-stack capabilities, Nuxt UI's purpose-built chat components, a local SQLite dev database with a production Turso database, and the AI SDK's streaming infrastructure makes building AI applications straightforward and enjoyable.",[989,12508,12509],{},[1007,12510,12511],{},"Resources:",[1001,12513,12514,12521,12528,12535,12541,12547],{},[1004,12515,12516],{},[1043,12517,12520],{"href":12518,"rel":12519},"https:\u002F\u002Fui.nuxt.com\u002Fcomponents\u002Fchat",[1047],"Nuxt UI Chat Components",[1004,12522,12523],{},[1043,12524,12527],{"href":12525,"rel":12526},"https:\u002F\u002Fhub.nuxt.com\u002Fdocs\u002Ffeatures\u002Fdatabase",[1047],"NuxtHub Database",[1004,12529,12530],{},[1043,12531,12534],{"href":12532,"rel":12533},"https:\u002F\u002Fai-sdk.dev",[1047],"AI SDK Documentation",[1004,12536,12537],{},[1043,12538,12540],{"href":1078,"rel":12539},[1047],"AI Gateway Documentation",[1004,12542,12543],{},[1043,12544,12546],{"href":1045,"rel":12545},[1047],"Nuxt AI Chat Template",[1004,12548,12549],{},[1043,12550,12552],{"href":1055,"rel":12551},[1047],"Vue AI Chat Template",[989,12554,12555],{},"We're excited to see what you'll build!",[12557,12558,12559],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sqsOY, html code.shiki .sqsOY{--shiki-light:#8796B0;--shiki-default:#B2CCD6;--shiki-dark:#B2CCD6}html pre.shiki code .sRy2g, html code.shiki .sRy2g{--shiki-icon-url: url(https:\u002F\u002Fapi.iconify.design\u002Flucide:plus-square.svg?color=%23000)}html pre.shiki code .sdATh, html code.shiki .sdATh{--shiki-icon-url: url(https:\u002F\u002Fapi.iconify.design\u002Flucide:messages-square.svg?color=%23000)}html pre.shiki code .sh9xi, html code.shiki .sh9xi{--shiki-icon-url: url(https:\u002F\u002Fapi.iconify.design\u002Fsimple-icons:openai.svg?color=%23000)}html pre.shiki code .sNknm, html code.shiki .sNknm{--shiki-icon-url: url(https:\u002F\u002Fapi.iconify.design\u002Fsimple-icons:anthropic.svg?color=%23000)}html pre.shiki code .scZL3, html code.shiki .scZL3{--shiki-icon-url: url(https:\u002F\u002Fapi.iconify.design\u002Fsimple-icons:google.svg?color=%23000)}",{"title":1095,"searchDepth":1119,"depth":1119,"links":12561},[12562,12563,12564,12570,12575,12579,12580,12584,12585,12586,12591,12592,12593],{"id":995,"depth":1119,"text":996},{"id":1063,"depth":1119,"text":1064},{"id":1084,"depth":1119,"text":1085,"children":12565},[12566,12567,12568,12569],{"id":1129,"depth":1342,"text":1130},{"id":1289,"depth":1342,"text":1290},{"id":1518,"depth":1342,"text":1519},{"id":1657,"depth":1342,"text":1658},{"id":2443,"depth":1119,"text":2444,"children":12571},[12572,12573,12574],{"id":2455,"depth":1342,"text":2456},{"id":2839,"depth":1342,"text":2840},{"id":4704,"depth":1342,"text":4705},{"id":5086,"depth":1119,"text":5087,"children":12576},[12577,12578],{"id":5105,"depth":1342,"text":5106},{"id":5722,"depth":1342,"text":5723},{"id":6094,"depth":1119,"text":6095},{"id":7687,"depth":1119,"text":7688,"children":12581},[12582,12583],{"id":7694,"depth":1342,"text":7695},{"id":7854,"depth":1342,"text":7855},{"id":8361,"depth":1119,"text":8362},{"id":8904,"depth":1119,"text":8905},{"id":10226,"depth":1119,"text":10227,"children":12587},[12588,12589,12590],{"id":10237,"depth":1342,"text":10238},{"id":10509,"depth":1342,"text":10510},{"id":10768,"depth":1342,"text":10769},{"id":12166,"depth":1119,"text":12167},{"id":12404,"depth":1119,"text":12405},{"id":12468,"depth":1119,"text":12469},"2025-12-16T10:00:00.000Z","Learn how to build a full-featured AI chatbot with streaming responses, multiple models support, and a beautiful UI using Nuxt, Nuxt UI, and Vercel AI SDK.","md","\u002Fassets\u002Fblog\u002Fbuilding-nuxt-ai-chatbot.png",{"category":12599},"Tutorial","\u002Fblog\u002Fhow-to-build-an-ai-chat",{"title":973,"description":12595},"blog\u002Fhow-to-build-an-ai-chat","niwtEdHQJaUBnPqldgEx0ODg9tOUK75ezMtfPw31Y0Q",{"data":12605,"body":12606},{},{"type":12607,"children":12608},"root",[12609],{"type":178,"tag":989,"props":12610,"children":12611},{},[12612,12614,12621],{"type":5345,"value":12613},"Nuxt ",{"type":178,"tag":1099,"props":12615,"children":12618},{"className":12616},[12617],"text-primary",[12619],{"type":5345,"value":12620},"UI",{"type":5345,"value":12622}," Blog",{"data":12624,"body":12625},{},{"type":12607,"children":12626},[12627],{"type":178,"tag":989,"props":12628,"children":12629},{},[12630],{"type":5345,"value":961},1776346334766]