[{"data":1,"prerenderedAt":12642},["ShallowReactive",2],{"navigation":3,"blog":969,"blog-posts":981,"blog-hero-title":12615,"blog-hero-description":12634},[4],{"title":5,"path":6,"stem":7,"children":8,"page":36},"Docs","\u002Fdocs","docs",[9,163,822,863],{"title":10,"path":11,"stem":12,"children":13,"framework":16,"category":16,"description":16,"icon":30},"Get Started","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started\u002F1.index",[14,19,37,47,53,76,141],{"title":15,"path":11,"stem":12,"framework":16,"category":16,"description":17,"icon":18},"Introduction",null,"Nuxt UI is a comprehensive Vue UI component library (Nuxt optional), offering 125+ accessible, Tailwind CSS components for building modern web applications.","i-lucide-house",{"title":20,"framework":16,"category":16,"description":16,"shadow":21,"path":22,"stem":23,"children":24,"page":36},"Installation",true,"\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F1.getting-started\u002F2.installation",[25,31],{"title":20,"path":26,"stem":27,"framework":28,"category":16,"description":29,"icon":30},"\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fnuxt","docs\u002F1.getting-started\u002F2.installation\u002F1.nuxt","nuxt","Learn how to install and configure Nuxt UI in your Nuxt application.","i-lucide-square-play",{"title":20,"path":32,"stem":33,"framework":34,"category":16,"description":35,"icon":30},"\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fvue","docs\u002F1.getting-started\u002F2.installation\u002F2.vue","vue","Learn how to install and configure Nuxt UI in your Vue application, compatible with both plain Vite and Inertia.",false,{"title":38,"framework":16,"category":16,"description":16,"icon":39,"shadow":21,"path":40,"stem":41,"children":42,"page":36},"Migration","i-lucide-arrow-right-left","\u002Fdocs\u002Fgetting-started\u002Fmigration","docs\u002F1.getting-started\u002F3.migration",[43],{"title":38,"path":44,"stem":45,"framework":16,"category":16,"description":46,"icon":39},"\u002Fdocs\u002Fgetting-started\u002Fmigration\u002Fv4","docs\u002F1.getting-started\u002F3.migration\u002F1.v4","A comprehensive guide to migrate your application from Nuxt UI v3 to Nuxt UI v4.",{"title":48,"path":49,"stem":50,"framework":16,"category":16,"description":51,"icon":52},"Contribution","\u002Fdocs\u002Fgetting-started\u002Fcontribution","docs\u002F1.getting-started\u002F4.contribution","A comprehensive guide on contributing to Nuxt UI, including project structure, development workflow, and best practices.","i-lucide-handshake",{"title":54,"path":55,"stem":56,"children":57,"page":36},"Theme","\u002Fdocs\u002Fgetting-started\u002Ftheme","docs\u002F1.getting-started\u002F5.theme",[58,64,70],{"title":59,"path":60,"stem":61,"framework":16,"category":16,"description":62,"icon":63},"Design System","\u002Fdocs\u002Fgetting-started\u002Ftheme\u002Fdesign-system","docs\u002F1.getting-started\u002F5.theme\u002F1.design-system","Nuxt UI's design system uses Tailwind CSS for simple theming and easy customization.","i-lucide-palette",{"title":65,"path":66,"stem":67,"framework":16,"category":16,"description":68,"icon":69},"CSS Variables","\u002Fdocs\u002Fgetting-started\u002Ftheme\u002Fcss-variables","docs\u002F1.getting-started\u002F5.theme\u002F2.css-variables","Nuxt UI uses CSS variables as design tokens for flexible, consistent theming with built-in light and dark mode support.","i-lucide-swatch-book",{"title":71,"path":72,"stem":73,"framework":16,"category":16,"description":74,"icon":75},"Components","\u002Fdocs\u002Fgetting-started\u002Ftheme\u002Fcomponents","docs\u002F1.getting-started\u002F5.theme\u002F3.components","Learn how to customize Nuxt UI components with the Tailwind Variants API for advanced, flexible, and maintainable styling.","i-lucide-layout-grid",{"title":77,"framework":16,"category":16,"description":16,"path":78,"stem":79,"children":80,"page":36},"Integrations","\u002Fdocs\u002Fgetting-started\u002Fintegrations","docs\u002F1.getting-started\u002F6.integrations",[81,95,101,115,129,135],{"title":82,"framework":16,"category":16,"description":16,"shadow":21,"path":83,"stem":84,"children":85,"page":36},"Icons","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ficons","docs\u002F1.getting-started\u002F6.integrations\u002F1.icons",[86,91],{"title":82,"path":87,"stem":88,"framework":28,"category":16,"description":89,"icon":90},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ficons\u002Fnuxt","docs\u002F1.getting-started\u002F6.integrations\u002F1.icons\u002F1.nuxt","Nuxt UI integrates with Nuxt Icon to access over 200,000+ icons from Iconify.","i-lucide-smile",{"title":82,"path":92,"stem":93,"framework":34,"category":16,"description":94,"icon":90},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ficons\u002Fvue","docs\u002F1.getting-started\u002F6.integrations\u002F1.icons\u002F2.vue","Nuxt UI integrates with Iconify to access over 200,000+ icons.",{"title":96,"path":97,"stem":98,"framework":28,"category":16,"description":99,"icon":100},"Fonts","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ffonts","docs\u002F1.getting-started\u002F6.integrations\u002F2.fonts","Nuxt UI integrates with Nuxt Fonts to provide plug-and-play font optimization.","i-lucide-a-large-small",{"title":102,"framework":16,"category":16,"description":16,"shadow":21,"path":103,"stem":104,"children":105,"page":36},"Color Mode","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcolor-mode","docs\u002F1.getting-started\u002F6.integrations\u002F3.color-mode",[106,111],{"title":102,"path":107,"stem":108,"framework":28,"category":16,"description":109,"icon":110},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcolor-mode\u002Fnuxt","docs\u002F1.getting-started\u002F6.integrations\u002F3.color-mode\u002F1.nuxt","Nuxt UI integrates with Nuxt Color Mode to allow for easy switching between light and dark themes.","i-lucide-sun-moon",{"title":102,"path":112,"stem":113,"framework":34,"category":16,"description":114,"icon":110},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcolor-mode\u002Fvue","docs\u002F1.getting-started\u002F6.integrations\u002F3.color-mode\u002F2.vue","Nuxt UI integrates with VueUse to allow for easy switching between light and dark themes.",{"title":116,"framework":16,"category":16,"description":16,"shadow":21,"path":117,"stem":118,"children":119,"page":36},"I18n","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fi18n","docs\u002F1.getting-started\u002F6.integrations\u002F4.i18n",[120,126],{"title":121,"path":122,"stem":123,"framework":28,"category":16,"description":124,"icon":125},"Internationalization (i18n)","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fi18n\u002Fnuxt","docs\u002F1.getting-started\u002F6.integrations\u002F4.i18n\u002F1.nuxt","Nuxt UI supports 50+ locales and multi-directional (LTR\u002FRTL) internationalization.","i-lucide-languages",{"title":121,"path":127,"stem":128,"framework":34,"category":16,"description":124,"icon":125},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fi18n\u002Fvue","docs\u002F1.getting-started\u002F6.integrations\u002F4.i18n\u002F2.vue",{"title":130,"path":131,"stem":132,"framework":28,"category":16,"description":133,"icon":134},"Content","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcontent","docs\u002F1.getting-started\u002F6.integrations\u002F5.content","Nuxt UI integrates with Nuxt Content to deliver beautiful typography and consistent component styling.","i-simple-icons-markdown",{"title":136,"path":137,"stem":138,"framework":34,"category":16,"description":139,"icon":140},"SSR","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fssr","docs\u002F1.getting-started\u002F6.integrations\u002F6.ssr","Nuxt UI has first-party support for Vue SSR. This guide will help you have it fully enabled.","i-lucide-server",{"title":142,"framework":16,"category":16,"description":16,"path":143,"stem":144,"children":145,"page":36},"Agents","\u002Fdocs\u002Fgetting-started\u002Fai","docs\u002F1.getting-started\u002F7.ai",[146,151,157],{"title":147,"path":148,"stem":149,"framework":16,"category":16,"description":150,"icon":140},"MCP Server","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fmcp","docs\u002F1.getting-started\u002F7.ai\u002F1.mcp","Use Nuxt UI components in your AI assistants with Model Context Protocol support.",{"title":152,"path":153,"stem":154,"framework":16,"category":16,"description":155,"icon":156},"LLMs.txt","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fllms-txt","docs\u002F1.getting-started\u002F7.ai\u002F2.llms-txt","How to get AI tools like Cursor, Windsurf, GitHub Copilot, ChatGPT, and Claude to understand Nuxt UI components, theming, and best practices.","i-lucide-bot",{"title":158,"path":159,"stem":160,"framework":16,"category":16,"description":161,"icon":162},"Skills","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fskills","docs\u002F1.getting-started\u002F7.ai\u002F3.skills","Install Nuxt UI skills to give AI coding agents deep knowledge of components, theming, and best practices.","i-lucide-sparkles",{"title":71,"framework":16,"category":16,"description":16,"icon":164,"path":165,"stem":166,"children":167,"page":36},"i-lucide-square-code","\u002Fdocs\u002Fcomponents","docs\u002F2.components",[168,174,180,186,192,197,202,207,212,217,222,228,233,238,243,248,253,258,264,269,274,279,284,289,295,300,305,311,316,321,326,332,337,342,347,352,357,362,367,373,378,383,388,393,399,405,410,415,420,425,430,435,440,445,450,455,460,466,471,476,481,486,491,496,501,506,511,516,521,526,531,536,541,546,551,556,561,566,571,576,581,587,593,598,603,608,613,618,623,628,633,638,643,648,653,658,663,668,673,678,683,688,693,698,703,708,713,718,723,728,733,738,743,748,753,758,763,768,773,778,783,788,793,797,802,807,812,817],{"title":169,"path":170,"stem":171,"framework":16,"category":172,"description":173},"Accordion","\u002Fdocs\u002Fcomponents\u002Faccordion","docs\u002F2.components\u002Faccordion","data","A stacked set of collapsible panels.",{"title":175,"path":176,"stem":177,"framework":16,"category":178,"description":179},"Alert","\u002Fdocs\u002Fcomponents\u002Falert","docs\u002F2.components\u002Falert","element","A callout to draw user's attention.",{"title":181,"path":182,"stem":183,"framework":16,"category":184,"description":185},"App","\u002Fdocs\u002Fcomponents\u002Fapp","docs\u002F2.components\u002Fapp","layout","Wraps your app to provide global configurations and more.",{"title":187,"path":188,"stem":189,"framework":16,"category":190,"description":191},"AuthForm","\u002Fdocs\u002Fcomponents\u002Fauth-form","docs\u002F2.components\u002Fauth-form","page","A customizable Form to create login, register or password reset forms.",{"title":193,"path":194,"stem":195,"framework":16,"category":178,"description":196},"Avatar","\u002Fdocs\u002Fcomponents\u002Favatar","docs\u002F2.components\u002Favatar","An img element with fallback and Nuxt Image support.",{"title":198,"path":199,"stem":200,"framework":16,"category":178,"description":201},"AvatarGroup","\u002Fdocs\u002Fcomponents\u002Favatar-group","docs\u002F2.components\u002Favatar-group","Stack multiple avatars in a group.",{"title":203,"path":204,"stem":205,"framework":16,"category":178,"description":206},"Badge","\u002Fdocs\u002Fcomponents\u002Fbadge","docs\u002F2.components\u002Fbadge","A short text to represent a status or a category.",{"title":208,"path":209,"stem":210,"framework":16,"category":178,"description":211},"Banner","\u002Fdocs\u002Fcomponents\u002Fbanner","docs\u002F2.components\u002Fbanner","Display a banner at the top of your website to inform users about important information.",{"title":213,"path":214,"stem":215,"framework":16,"category":190,"description":216},"BlogPost","\u002Fdocs\u002Fcomponents\u002Fblog-post","docs\u002F2.components\u002Fblog-post","A customizable article to display in a blog page.",{"title":218,"path":219,"stem":220,"framework":16,"category":190,"description":221},"BlogPosts","\u002Fdocs\u002Fcomponents\u002Fblog-posts","docs\u002F2.components\u002Fblog-posts","Display a list of blog posts in a responsive grid layout.",{"title":223,"path":224,"stem":225,"framework":16,"category":226,"description":227},"Breadcrumb","\u002Fdocs\u002Fcomponents\u002Fbreadcrumb","docs\u002F2.components\u002Fbreadcrumb","navigation","A hierarchy of links to navigate through a website.",{"title":229,"path":230,"stem":231,"framework":16,"category":178,"description":232},"Button","\u002Fdocs\u002Fcomponents\u002Fbutton","docs\u002F2.components\u002Fbutton","A button element that can act as a link or trigger an action.",{"title":234,"path":235,"stem":236,"framework":16,"category":178,"description":237},"Calendar","\u002Fdocs\u002Fcomponents\u002Fcalendar","docs\u002F2.components\u002Fcalendar","A calendar component for selecting single dates, multiple dates or date ranges.",{"title":239,"path":240,"stem":241,"framework":16,"category":178,"description":242},"Card","\u002Fdocs\u002Fcomponents\u002Fcard","docs\u002F2.components\u002Fcard","Display content in a card with a header, body and footer.",{"title":244,"path":245,"stem":246,"framework":16,"category":172,"description":247},"Carousel","\u002Fdocs\u002Fcomponents\u002Fcarousel","docs\u002F2.components\u002Fcarousel","A carousel with motion and swipe built using Embla.",{"title":249,"path":250,"stem":251,"framework":16,"category":190,"description":252},"ChangelogVersion","\u002Fdocs\u002Fcomponents\u002Fchangelog-version","docs\u002F2.components\u002Fchangelog-version","A customizable article to display in a changelog.",{"title":254,"path":255,"stem":256,"framework":16,"category":190,"description":257},"ChangelogVersions","\u002Fdocs\u002Fcomponents\u002Fchangelog-versions","docs\u002F2.components\u002Fchangelog-versions","Display a list of changelog versions in a timeline.",{"title":259,"path":260,"stem":261,"framework":16,"category":262,"description":263},"Chat","\u002Fdocs\u002Fcomponents\u002Fchat","docs\u002F2.components\u002Fchat","chat","Build AI chat interfaces with streaming, reasoning, and tool calling.",{"title":265,"path":266,"stem":267,"framework":16,"category":262,"description":268},"ChatMessage","\u002Fdocs\u002Fcomponents\u002Fchat-message","docs\u002F2.components\u002Fchat-message","Display a chat message with icon, avatar, and actions.",{"title":270,"path":271,"stem":272,"framework":16,"category":262,"description":273},"ChatMessages","\u002Fdocs\u002Fcomponents\u002Fchat-messages","docs\u002F2.components\u002Fchat-messages","Display a list of chat messages, designed to work seamlessly with Vercel AI SDK.",{"title":275,"path":276,"stem":277,"framework":16,"category":262,"description":278},"ChatPalette","\u002Fdocs\u002Fcomponents\u002Fchat-palette","docs\u002F2.components\u002Fchat-palette","A chat palette to create a chatbot interface inside an overlay.",{"title":280,"path":281,"stem":282,"framework":16,"category":262,"description":283},"ChatPrompt","\u002Fdocs\u002Fcomponents\u002Fchat-prompt","docs\u002F2.components\u002Fchat-prompt","An enhanced Textarea for submitting prompts in AI chat interfaces.",{"title":285,"path":286,"stem":287,"framework":16,"category":262,"description":288},"ChatPromptSubmit","\u002Fdocs\u002Fcomponents\u002Fchat-prompt-submit","docs\u002F2.components\u002Fchat-prompt-submit","A Button for submitting chat prompts with automatic status handling.",{"title":290,"path":291,"stem":292,"framework":16,"category":262,"description":293,"badge":294},"ChatReasoning","\u002Fdocs\u002Fcomponents\u002Fchat-reasoning","docs\u002F2.components\u002Fchat-reasoning","Display a collapsible AI reasoning or thinking process.","New",{"title":296,"path":297,"stem":298,"framework":16,"category":262,"description":299,"badge":294},"ChatShimmer","\u002Fdocs\u002Fcomponents\u002Fchat-shimmer","docs\u002F2.components\u002Fchat-shimmer","Display a text shimmer animation effect.",{"title":301,"path":302,"stem":303,"framework":16,"category":262,"description":304,"badge":294},"ChatTool","\u002Fdocs\u002Fcomponents\u002Fchat-tool","docs\u002F2.components\u002Fchat-tool","Display a collapsible AI tool invocation status.",{"title":306,"path":307,"stem":308,"framework":16,"category":309,"description":310},"Checkbox","\u002Fdocs\u002Fcomponents\u002Fcheckbox","docs\u002F2.components\u002Fcheckbox","form","An input element to toggle between checked and unchecked states.",{"title":312,"path":313,"stem":314,"framework":16,"category":309,"description":315},"CheckboxGroup","\u002Fdocs\u002Fcomponents\u002Fcheckbox-group","docs\u002F2.components\u002Fcheckbox-group","A set of checklist buttons to select multiple option from a list.",{"title":317,"path":318,"stem":319,"framework":16,"category":178,"description":320},"Chip","\u002Fdocs\u002Fcomponents\u002Fchip","docs\u002F2.components\u002Fchip","An indicator of a numeric value or a state.",{"title":322,"path":323,"stem":324,"framework":16,"category":178,"description":325},"Collapsible","\u002Fdocs\u002Fcomponents\u002Fcollapsible","docs\u002F2.components\u002Fcollapsible","A collapsible element to toggle visibility of its content.",{"title":327,"path":328,"stem":329,"framework":16,"category":330,"description":331},"ColorModeAvatar","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-avatar","docs\u002F2.components\u002Fcolor-mode-avatar","color-mode","An Avatar with a different source for light and dark mode.",{"title":333,"path":334,"stem":335,"framework":16,"category":330,"description":336},"ColorModeButton","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-button","docs\u002F2.components\u002Fcolor-mode-button","A Button to switch between light and dark mode.",{"title":338,"path":339,"stem":340,"framework":16,"category":330,"description":341},"ColorModeImage","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-image","docs\u002F2.components\u002Fcolor-mode-image","An image element with a different source for light and dark mode.",{"title":343,"path":344,"stem":345,"framework":16,"category":330,"description":346},"ColorModeSelect","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-select","docs\u002F2.components\u002Fcolor-mode-select","A Select to switch between system, dark & light mode.",{"title":348,"path":349,"stem":350,"framework":16,"category":330,"description":351},"ColorModeSwitch","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-switch","docs\u002F2.components\u002Fcolor-mode-switch","A switch to toggle between light and dark mode.",{"title":353,"path":354,"stem":355,"framework":16,"category":309,"description":356},"ColorPicker","\u002Fdocs\u002Fcomponents\u002Fcolor-picker","docs\u002F2.components\u002Fcolor-picker","A component to select a color.",{"title":358,"path":359,"stem":360,"framework":16,"category":226,"description":361},"CommandPalette","\u002Fdocs\u002Fcomponents\u002Fcommand-palette","docs\u002F2.components\u002Fcommand-palette","A command palette with full-text search powered by Fuse.js for efficient fuzzy matching.",{"title":363,"path":364,"stem":365,"framework":16,"category":184,"description":366},"Container","\u002Fdocs\u002Fcomponents\u002Fcontainer","docs\u002F2.components\u002Fcontainer","A container lets you center and constrain the width of your content.",{"title":368,"path":369,"stem":370,"framework":28,"category":371,"description":372},"ContentNavigation","\u002Fdocs\u002Fcomponents\u002Fcontent-navigation","docs\u002F2.components\u002Fcontent-navigation","content","An accordion-style navigation component for organizing page links.",{"title":374,"path":375,"stem":376,"framework":28,"category":371,"description":377},"ContentSearch","\u002Fdocs\u002Fcomponents\u002Fcontent-search","docs\u002F2.components\u002Fcontent-search","A ready to use CommandPalette to add to your documentation.",{"title":379,"path":380,"stem":381,"framework":28,"category":371,"description":382},"ContentSearchButton","\u002Fdocs\u002Fcomponents\u002Fcontent-search-button","docs\u002F2.components\u002Fcontent-search-button","A pre-styled Button to open the ContentSearch modal.",{"title":384,"path":385,"stem":386,"framework":28,"category":371,"description":387},"ContentSurround","\u002Fdocs\u002Fcomponents\u002Fcontent-surround","docs\u002F2.components\u002Fcontent-surround","A pair of prev and next links to navigate between pages.",{"title":389,"path":390,"stem":391,"framework":28,"category":371,"description":392},"ContentToc","\u002Fdocs\u002Fcomponents\u002Fcontent-toc","docs\u002F2.components\u002Fcontent-toc","A sticky Table of Contents with automatic active anchor link highlighting.",{"title":394,"path":395,"stem":396,"framework":16,"category":397,"description":398},"ContextMenu","\u002Fdocs\u002Fcomponents\u002Fcontext-menu","docs\u002F2.components\u002Fcontext-menu","overlay","A menu to display actions when right-clicking on an element.",{"title":400,"path":401,"stem":402,"framework":16,"category":403,"description":404},"DashboardGroup","\u002Fdocs\u002Fcomponents\u002Fdashboard-group","docs\u002F2.components\u002Fdashboard-group","dashboard","A fixed layout component that provides context for dashboard components with sidebar state management and persistence.",{"title":406,"path":407,"stem":408,"framework":16,"category":403,"description":409},"DashboardNavbar","\u002Fdocs\u002Fcomponents\u002Fdashboard-navbar","docs\u002F2.components\u002Fdashboard-navbar","A responsive navbar to display in a dashboard.",{"title":411,"path":412,"stem":413,"framework":16,"category":403,"description":414},"DashboardPanel","\u002Fdocs\u002Fcomponents\u002Fdashboard-panel","docs\u002F2.components\u002Fdashboard-panel","A resizable panel to display in a dashboard.",{"title":416,"path":417,"stem":418,"framework":16,"category":403,"description":419},"DashboardResizeHandle","\u002Fdocs\u002Fcomponents\u002Fdashboard-resize-handle","docs\u002F2.components\u002Fdashboard-resize-handle","A handle to resize a sidebar or panel.",{"title":421,"path":422,"stem":423,"framework":16,"category":403,"description":424},"DashboardSearch","\u002Fdocs\u002Fcomponents\u002Fdashboard-search","docs\u002F2.components\u002Fdashboard-search","A ready to use CommandPalette to add to your dashboard.",{"title":426,"path":427,"stem":428,"framework":16,"category":403,"description":429},"DashboardSearchButton","\u002Fdocs\u002Fcomponents\u002Fdashboard-search-button","docs\u002F2.components\u002Fdashboard-search-button","A pre-styled Button to open the DashboardSearch modal.",{"title":431,"path":432,"stem":433,"framework":16,"category":403,"description":434},"DashboardSidebar","\u002Fdocs\u002Fcomponents\u002Fdashboard-sidebar","docs\u002F2.components\u002Fdashboard-sidebar","A resizable and collapsible sidebar to display in a dashboard.",{"title":436,"path":437,"stem":438,"framework":16,"category":403,"description":439},"DashboardSidebarCollapse","\u002Fdocs\u002Fcomponents\u002Fdashboard-sidebar-collapse","docs\u002F2.components\u002Fdashboard-sidebar-collapse","A Button to collapse the sidebar on desktop.",{"title":441,"path":442,"stem":443,"framework":16,"category":403,"description":444},"DashboardSidebarToggle","\u002Fdocs\u002Fcomponents\u002Fdashboard-sidebar-toggle","docs\u002F2.components\u002Fdashboard-sidebar-toggle","A Button to toggle the sidebar on mobile.",{"title":446,"path":447,"stem":448,"framework":16,"category":403,"description":449},"DashboardToolbar","\u002Fdocs\u002Fcomponents\u002Fdashboard-toolbar","docs\u002F2.components\u002Fdashboard-toolbar","A toolbar to display under the navbar in a dashboard.",{"title":451,"path":452,"stem":453,"framework":16,"category":397,"description":454},"Drawer","\u002Fdocs\u002Fcomponents\u002Fdrawer","docs\u002F2.components\u002Fdrawer","A drawer that smoothly slides in & out of the screen.",{"title":456,"path":457,"stem":458,"framework":16,"category":397,"description":459},"DropdownMenu","\u002Fdocs\u002Fcomponents\u002Fdropdown-menu","docs\u002F2.components\u002Fdropdown-menu","A menu to display actions when clicking on an element.",{"title":461,"path":462,"stem":463,"framework":16,"category":464,"description":465},"Editor","\u002Fdocs\u002Fcomponents\u002Feditor","docs\u002F2.components\u002Feditor","editor","A rich text editor component based on TipTap with support for markdown, HTML, and JSON content types.",{"title":467,"path":468,"stem":469,"framework":16,"category":464,"description":470},"EditorDragHandle","\u002Fdocs\u002Fcomponents\u002Feditor-drag-handle","docs\u002F2.components\u002Feditor-drag-handle","A draggable handle for reordering and selecting blocks in the editor.",{"title":472,"path":473,"stem":474,"framework":16,"category":464,"description":475},"EditorEmojiMenu","\u002Fdocs\u002Fcomponents\u002Feditor-emoji-menu","docs\u002F2.components\u002Feditor-emoji-menu","An emoji picker menu that displays emoji suggestions when typing the : character in the editor.",{"title":477,"path":478,"stem":479,"framework":16,"category":464,"description":480},"EditorMentionMenu","\u002Fdocs\u002Fcomponents\u002Feditor-mention-menu","docs\u002F2.components\u002Feditor-mention-menu","A mention menu that displays user suggestions when typing a trigger character in the editor.",{"title":482,"path":483,"stem":484,"framework":16,"category":464,"description":485},"EditorSuggestionMenu","\u002Fdocs\u002Fcomponents\u002Feditor-suggestion-menu","docs\u002F2.components\u002Feditor-suggestion-menu","A command menu that displays formatting and action suggestions when typing the \u002F character in the editor.",{"title":487,"path":488,"stem":489,"framework":16,"category":464,"description":490},"EditorToolbar","\u002Fdocs\u002Fcomponents\u002Feditor-toolbar","docs\u002F2.components\u002Feditor-toolbar","A customizable toolbar for editor actions that can be displayed as fixed, bubble, or floating menu.",{"title":492,"path":493,"stem":494,"framework":16,"category":172,"description":495},"Empty","\u002Fdocs\u002Fcomponents\u002Fempty","docs\u002F2.components\u002Fempty","A component to display an empty state.",{"title":497,"path":498,"stem":499,"framework":16,"category":184,"description":500},"Error","\u002Fdocs\u002Fcomponents\u002Ferror","docs\u002F2.components\u002Ferror","A pre-built error component with NuxtError support.",{"title":502,"path":503,"stem":504,"framework":16,"category":178,"description":505},"FieldGroup","\u002Fdocs\u002Fcomponents\u002Ffield-group","docs\u002F2.components\u002Ffield-group","Group multiple button-like elements together.",{"title":507,"path":508,"stem":509,"framework":16,"category":309,"description":510},"FileUpload","\u002Fdocs\u002Fcomponents\u002Ffile-upload","docs\u002F2.components\u002Ffile-upload","An input element to upload files.",{"title":512,"path":513,"stem":514,"framework":16,"category":184,"description":515},"Footer","\u002Fdocs\u002Fcomponents\u002Ffooter","docs\u002F2.components\u002Ffooter","A responsive footer component.",{"title":517,"path":518,"stem":519,"framework":16,"category":226,"description":520},"FooterColumns","\u002Fdocs\u002Fcomponents\u002Ffooter-columns","docs\u002F2.components\u002Ffooter-columns","A list of links as columns to display in your Footer.",{"title":522,"path":523,"stem":524,"framework":16,"category":309,"description":525},"Form","\u002Fdocs\u002Fcomponents\u002Fform","docs\u002F2.components\u002Fform","A form component with built-in validation and submission handling.",{"title":527,"path":528,"stem":529,"framework":16,"category":309,"description":530},"FormField","\u002Fdocs\u002Fcomponents\u002Fform-field","docs\u002F2.components\u002Fform-field","A wrapper for form elements that provides validation and error handling.",{"title":532,"path":533,"stem":534,"framework":16,"category":184,"description":535},"Header","\u002Fdocs\u002Fcomponents\u002Fheader","docs\u002F2.components\u002Fheader","A responsive header component.",{"title":537,"path":538,"stem":539,"framework":16,"category":178,"description":540},"Icon","\u002Fdocs\u002Fcomponents\u002Ficon","docs\u002F2.components\u002Ficon","A component to display any icon from Iconify or another component.",{"title":542,"path":543,"stem":544,"framework":16,"category":309,"description":545},"Input","\u002Fdocs\u002Fcomponents\u002Finput","docs\u002F2.components\u002Finput","An input element to enter text.",{"title":547,"path":548,"stem":549,"framework":16,"category":309,"description":550},"InputDate","\u002Fdocs\u002Fcomponents\u002Finput-date","docs\u002F2.components\u002Finput-date","An input component for date selection.",{"title":552,"path":553,"stem":554,"framework":16,"category":309,"description":555},"InputMenu","\u002Fdocs\u002Fcomponents\u002Finput-menu","docs\u002F2.components\u002Finput-menu","An autocomplete input with real-time suggestions.",{"title":557,"path":558,"stem":559,"framework":16,"category":309,"description":560},"InputNumber","\u002Fdocs\u002Fcomponents\u002Finput-number","docs\u002F2.components\u002Finput-number","An input for numerical values with a customizable range.",{"title":562,"path":563,"stem":564,"framework":16,"category":309,"description":565},"InputTags","\u002Fdocs\u002Fcomponents\u002Finput-tags","docs\u002F2.components\u002Finput-tags","An input element that displays interactive tags.",{"title":567,"path":568,"stem":569,"framework":16,"category":309,"description":570},"InputTime","\u002Fdocs\u002Fcomponents\u002Finput-time","docs\u002F2.components\u002Finput-time","An input for selecting a time.",{"title":572,"path":573,"stem":574,"framework":16,"category":178,"description":575},"Kbd","\u002Fdocs\u002Fcomponents\u002Fkbd","docs\u002F2.components\u002Fkbd","A kbd element to display a keyboard key.",{"title":577,"path":578,"stem":579,"framework":16,"category":226,"description":580},"Link","\u002Fdocs\u002Fcomponents\u002Flink","docs\u002F2.components\u002Flink","A wrapper around \u003CNuxtLink> with extra props.",{"title":582,"path":583,"stem":584,"framework":16,"category":309,"description":585,"badge":586},"Listbox","\u002Fdocs\u002Fcomponents\u002Flistbox","docs\u002F2.components\u002Flistbox","A selectable list of items with search, virtualization and rich item rendering.","Soon",{"title":588,"path":589,"stem":590,"framework":16,"category":591,"description":592},"LocaleSelect","\u002Fdocs\u002Fcomponents\u002Flocale-select","docs\u002F2.components\u002Flocale-select","i18n","A Select to switch between locales.",{"title":594,"path":595,"stem":596,"framework":16,"category":184,"description":597},"Main","\u002Fdocs\u002Fcomponents\u002Fmain","docs\u002F2.components\u002Fmain","A main element that fills the available viewport height.",{"title":599,"path":600,"stem":601,"framework":16,"category":172,"description":602},"Marquee","\u002Fdocs\u002Fcomponents\u002Fmarquee","docs\u002F2.components\u002Fmarquee","A component to create infinite scrolling content.",{"title":604,"path":605,"stem":606,"framework":16,"category":397,"description":607},"Modal","\u002Fdocs\u002Fcomponents\u002Fmodal","docs\u002F2.components\u002Fmodal","A dialog window that can be used to display a message or request user input.",{"title":609,"path":610,"stem":611,"framework":16,"category":226,"description":612},"NavigationMenu","\u002Fdocs\u002Fcomponents\u002Fnavigation-menu","docs\u002F2.components\u002Fnavigation-menu","A list of links that can be displayed horizontally or vertically.",{"title":614,"path":615,"stem":616,"framework":16,"category":190,"description":617},"Page","\u002Fdocs\u002Fcomponents\u002Fpage","docs\u002F2.components\u002Fpage","A grid layout for your pages with left and right columns.",{"title":619,"path":620,"stem":621,"framework":16,"category":190,"description":622},"PageAnchors","\u002Fdocs\u002Fcomponents\u002Fpage-anchors","docs\u002F2.components\u002Fpage-anchors","A list of anchors to be displayed in the page.",{"title":624,"path":625,"stem":626,"framework":16,"category":190,"description":627},"PageAside","\u002Fdocs\u002Fcomponents\u002Fpage-aside","docs\u002F2.components\u002Fpage-aside","A sticky aside to display your page navigation.",{"title":629,"path":630,"stem":631,"framework":16,"category":190,"description":632},"PageBody","\u002Fdocs\u002Fcomponents\u002Fpage-body","docs\u002F2.components\u002Fpage-body","The main content of your page.",{"title":634,"path":635,"stem":636,"framework":16,"category":190,"description":637},"PageCard","\u002Fdocs\u002Fcomponents\u002Fpage-card","docs\u002F2.components\u002Fpage-card","A pre-styled card component that displays a title, description and optional link.",{"title":639,"path":640,"stem":641,"framework":16,"category":190,"description":642},"PageColumns","\u002Fdocs\u002Fcomponents\u002Fpage-columns","docs\u002F2.components\u002Fpage-columns","A responsive multi-column layout system for organizing content side-by-side.",{"title":644,"path":645,"stem":646,"framework":16,"category":190,"description":647},"PageCTA","\u002Fdocs\u002Fcomponents\u002Fpage-cta","docs\u002F2.components\u002Fpage-cta","A call to action section to display in your pages.",{"title":649,"path":650,"stem":651,"framework":16,"category":190,"description":652},"PageFeature","\u002Fdocs\u002Fcomponents\u002Fpage-feature","docs\u002F2.components\u002Fpage-feature","A component to showcase key features of your application.",{"title":654,"path":655,"stem":656,"framework":16,"category":190,"description":657},"PageGrid","\u002Fdocs\u002Fcomponents\u002Fpage-grid","docs\u002F2.components\u002Fpage-grid","A responsive grid system for displaying content in a flexible layout.",{"title":659,"path":660,"stem":661,"framework":16,"category":190,"description":662},"PageHeader","\u002Fdocs\u002Fcomponents\u002Fpage-header","docs\u002F2.components\u002Fpage-header","A responsive header for your pages.",{"title":664,"path":665,"stem":666,"framework":16,"category":190,"description":667},"PageHero","\u002Fdocs\u002Fcomponents\u002Fpage-hero","docs\u002F2.components\u002Fpage-hero","A responsive hero for your pages.",{"title":669,"path":670,"stem":671,"framework":16,"category":190,"description":672},"PageLinks","\u002Fdocs\u002Fcomponents\u002Fpage-links","docs\u002F2.components\u002Fpage-links","A list of links to be displayed in the page.",{"title":674,"path":675,"stem":676,"framework":16,"category":190,"description":677},"PageList","\u002Fdocs\u002Fcomponents\u002Fpage-list","docs\u002F2.components\u002Fpage-list","A vertical list layout for displaying content in a stacked format.",{"title":679,"path":680,"stem":681,"framework":16,"category":190,"description":682},"PageLogos","\u002Fdocs\u002Fcomponents\u002Fpage-logos","docs\u002F2.components\u002Fpage-logos","A list of logos or images to display on your pages.",{"title":684,"path":685,"stem":686,"framework":16,"category":190,"description":687},"PageSection","\u002Fdocs\u002Fcomponents\u002Fpage-section","docs\u002F2.components\u002Fpage-section","A responsive section for your pages.",{"title":689,"path":690,"stem":691,"framework":16,"category":226,"description":692},"Pagination","\u002Fdocs\u002Fcomponents\u002Fpagination","docs\u002F2.components\u002Fpagination","A list of buttons or links to navigate through pages.",{"title":694,"path":695,"stem":696,"framework":16,"category":309,"description":697},"PinInput","\u002Fdocs\u002Fcomponents\u002Fpin-input","docs\u002F2.components\u002Fpin-input","An input element to enter a pin.",{"title":699,"path":700,"stem":701,"framework":16,"category":397,"description":702},"Popover","\u002Fdocs\u002Fcomponents\u002Fpopover","docs\u002F2.components\u002Fpopover","A non-modal dialog that floats around a trigger element.",{"title":704,"path":705,"stem":706,"framework":16,"category":190,"description":707},"PricingPlan","\u002Fdocs\u002Fcomponents\u002Fpricing-plan","docs\u002F2.components\u002Fpricing-plan","A customizable pricing plan to display in a pricing page.",{"title":709,"path":710,"stem":711,"framework":16,"category":190,"description":712},"PricingPlans","\u002Fdocs\u002Fcomponents\u002Fpricing-plans","docs\u002F2.components\u002Fpricing-plans","Display a list of pricing plans in a responsive grid layout.",{"title":714,"path":715,"stem":716,"framework":16,"category":190,"description":717},"PricingTable","\u002Fdocs\u002Fcomponents\u002Fpricing-table","docs\u002F2.components\u002Fpricing-table","A responsive pricing table component that displays tiered pricing plans with feature comparisons.",{"title":719,"path":720,"stem":721,"framework":16,"category":178,"description":722},"Progress","\u002Fdocs\u002Fcomponents\u002Fprogress","docs\u002F2.components\u002Fprogress","An indicator showing the progress of a task.",{"title":724,"path":725,"stem":726,"framework":16,"category":309,"description":727},"RadioGroup","\u002Fdocs\u002Fcomponents\u002Fradio-group","docs\u002F2.components\u002Fradio-group","A set of radio buttons to select a single option from a list.",{"title":729,"path":730,"stem":731,"framework":16,"category":172,"description":732},"ScrollArea","\u002Fdocs\u002Fcomponents\u002Fscroll-area","docs\u002F2.components\u002Fscroll-area","A flexible scroll container with virtualization support.",{"title":734,"path":735,"stem":736,"framework":16,"category":309,"description":737},"Select","\u002Fdocs\u002Fcomponents\u002Fselect","docs\u002F2.components\u002Fselect","A select element to choose from a list of options.",{"title":739,"path":740,"stem":741,"framework":16,"category":309,"description":742},"SelectMenu","\u002Fdocs\u002Fcomponents\u002Fselect-menu","docs\u002F2.components\u002Fselect-menu","An advanced searchable select element.",{"title":744,"path":745,"stem":746,"framework":16,"category":178,"description":747},"Separator","\u002Fdocs\u002Fcomponents\u002Fseparator","docs\u002F2.components\u002Fseparator","Separates content horizontally or vertically.",{"title":749,"path":750,"stem":751,"framework":16,"category":184,"description":752,"badge":294},"Sidebar","\u002Fdocs\u002Fcomponents\u002Fsidebar","docs\u002F2.components\u002Fsidebar","A collapsible sidebar with multiple visual variants.",{"title":754,"path":755,"stem":756,"framework":16,"category":178,"description":757},"Skeleton","\u002Fdocs\u002Fcomponents\u002Fskeleton","docs\u002F2.components\u002Fskeleton","A placeholder to show while content is loading.",{"title":759,"path":760,"stem":761,"framework":16,"category":397,"description":762},"Slideover","\u002Fdocs\u002Fcomponents\u002Fslideover","docs\u002F2.components\u002Fslideover","A dialog that slides in from any side of the screen.",{"title":764,"path":765,"stem":766,"framework":16,"category":309,"description":767},"Slider","\u002Fdocs\u002Fcomponents\u002Fslider","docs\u002F2.components\u002Fslider","An input to select a numeric value within a range.",{"title":769,"path":770,"stem":771,"framework":16,"category":226,"description":772},"Stepper","\u002Fdocs\u002Fcomponents\u002Fstepper","docs\u002F2.components\u002Fstepper","A set of steps that are used to indicate progress through a multi-step process.",{"title":774,"path":775,"stem":776,"framework":16,"category":309,"description":777},"Switch","\u002Fdocs\u002Fcomponents\u002Fswitch","docs\u002F2.components\u002Fswitch","A control that toggles between two states.",{"title":779,"path":780,"stem":781,"framework":16,"category":172,"description":782},"Table","\u002Fdocs\u002Fcomponents\u002Ftable","docs\u002F2.components\u002Ftable","A responsive table element to display data in rows and columns.",{"title":784,"path":785,"stem":786,"framework":16,"category":226,"description":787},"Tabs","\u002Fdocs\u002Fcomponents\u002Ftabs","docs\u002F2.components\u002Ftabs","A set of tab panels that are displayed one at a time.",{"title":789,"path":790,"stem":791,"framework":16,"category":309,"description":792},"Textarea","\u002Fdocs\u002Fcomponents\u002Ftextarea","docs\u002F2.components\u002Ftextarea","A textarea element to input multi-line text.",{"title":54,"path":794,"stem":795,"framework":16,"category":184,"description":796},"\u002Fdocs\u002Fcomponents\u002Ftheme","docs\u002F2.components\u002Ftheme","A headless component to theme child components.",{"title":798,"path":799,"stem":800,"framework":16,"category":172,"description":801},"Timeline","\u002Fdocs\u002Fcomponents\u002Ftimeline","docs\u002F2.components\u002Ftimeline","A component that displays a sequence of events with dates, titles, icons or avatars.",{"title":803,"path":804,"stem":805,"framework":16,"category":397,"description":806},"Toast","\u002Fdocs\u002Fcomponents\u002Ftoast","docs\u002F2.components\u002Ftoast","A succinct message to provide information or feedback to the user.",{"title":808,"path":809,"stem":810,"framework":16,"category":397,"description":811},"Tooltip","\u002Fdocs\u002Fcomponents\u002Ftooltip","docs\u002F2.components\u002Ftooltip","A popup that reveals information when hovering over an element.",{"title":813,"path":814,"stem":815,"framework":16,"category":172,"description":816},"Tree","\u002Fdocs\u002Fcomponents\u002Ftree","docs\u002F2.components\u002Ftree","A tree view component to display and interact with hierarchical data structures.",{"title":818,"path":819,"stem":820,"framework":16,"category":172,"description":821},"User","\u002Fdocs\u002Fcomponents\u002Fuser","docs\u002F2.components\u002Fuser","Display user information with name, description and avatar.",{"title":823,"framework":16,"category":16,"description":16,"icon":824,"path":825,"stem":826,"children":827,"page":36},"Composables","i-lucide-square-function","\u002Fdocs\u002Fcomposables","docs\u002F3.composables",[828,833,838,843,848,853,858],{"title":829,"path":830,"stem":831,"framework":16,"category":16,"description":832},"defineLocale","\u002Fdocs\u002Fcomposables\u002Fdefine-locale","docs\u002F3.composables\u002Fdefine-locale","A utility to create a custom locale for your app.",{"title":834,"path":835,"stem":836,"framework":16,"category":16,"description":837},"defineShortcuts","\u002Fdocs\u002Fcomposables\u002Fdefine-shortcuts","docs\u002F3.composables\u002Fdefine-shortcuts","A composable to define keyboard shortcuts in your app.",{"title":839,"path":840,"stem":841,"framework":16,"category":16,"description":842},"extendLocale","\u002Fdocs\u002Fcomposables\u002Fextend-locale","docs\u002F3.composables\u002Fextend-locale","A utility to extend an existing locale with custom translations.",{"title":844,"path":845,"stem":846,"framework":16,"category":16,"description":847},"extractShortcuts","\u002Fdocs\u002Fcomposables\u002Fextract-shortcuts","docs\u002F3.composables\u002Fextract-shortcuts","A utility to extract keyboard shortcuts from menu items.",{"title":849,"path":850,"stem":851,"framework":16,"category":16,"description":852},"useOverlay","\u002Fdocs\u002Fcomposables\u002Fuse-overlay","docs\u002F3.composables\u002Fuse-overlay","A composable to programmatically control overlays.",{"title":854,"path":855,"stem":856,"framework":16,"category":16,"description":857,"badge":294},"useScrollShadow","\u002Fdocs\u002Fcomposables\u002Fuse-scroll-shadow","docs\u002F3.composables\u002Fuse-scroll-shadow","A composable to apply scroll shadow effects on any scrollable element.",{"title":859,"path":860,"stem":861,"framework":16,"category":16,"description":862},"useToast","\u002Fdocs\u002Fcomposables\u002Fuse-toast","docs\u002F3.composables\u002Fuse-toast","A composable to display toast notifications in your app.",{"title":864,"path":865,"stem":866,"children":867,"framework":16,"category":16,"description":16,"icon":968},"Typography","\u002Fdocs\u002Ftypography","docs\u002F4.typography\u002F1.index",[868,870,875,880,885,890,895,899,904,908,913,918,923,928,933,937,942,946,950,954,959,964],{"title":15,"path":865,"stem":866,"framework":16,"category":16,"description":869},"Beautiful typography components and utilities to style your content with Nuxt UI.",{"title":871,"path":872,"stem":873,"framework":16,"category":16,"description":874},"Headers and text","\u002Fdocs\u002Ftypography\u002Fheaders-and-text","docs\u002F4.typography\u002F2.headers-and-text","Beautifully styled headings, paragraphs, text formatting, and links for optimal readability.",{"title":876,"path":877,"stem":878,"framework":16,"category":16,"description":879},"Lists and tables","\u002Fdocs\u002Ftypography\u002Flists-and-tables","docs\u002F4.typography\u002F3.lists-and-tables","Organize information with styled lists and responsive tables for clear, consistent readability.",{"title":881,"path":882,"stem":883,"framework":16,"category":16,"description":884},"Images and embeds","\u002Fdocs\u002Ftypography\u002Fimages-and-embeds","docs\u002F4.typography\u002F4.images-and-embeds","Responsive images, videos, and rich media embeds to enhance and illustrate your documentation.",{"title":886,"path":887,"stem":888,"framework":16,"category":16,"description":889},"Code","\u002Fdocs\u002Ftypography\u002Fcode","docs\u002F4.typography\u002F5.code","Display inline code and syntax-highlighted code blocks with copy-to-clipboard support.",{"title":169,"path":891,"stem":892,"framework":16,"category":893,"description":894},"\u002Fdocs\u002Ftypography\u002Faccordion","docs\u002F4.typography\u002Faccordion","components","Create expandable content sections for better information organization.",{"title":203,"path":896,"stem":897,"framework":16,"category":893,"description":898},"\u002Fdocs\u002Ftypography\u002Fbadge","docs\u002F4.typography\u002Fbadge","Display version numbers, status labels, and tags within your content.",{"title":900,"path":901,"stem":902,"framework":16,"category":893,"description":903},"Callout","\u002Fdocs\u002Ftypography\u002Fcallout","docs\u002F4.typography\u002Fcallout","Highlight important information with eye-catching colored boxes and icons.",{"title":239,"path":905,"stem":906,"framework":16,"category":893,"description":907},"\u002Fdocs\u002Ftypography\u002Fcard","docs\u002F4.typography\u002Fcard","Create highlighted content blocks with optional links and navigation.",{"title":909,"path":910,"stem":911,"framework":16,"category":893,"description":912},"CardGroup","\u002Fdocs\u002Ftypography\u002Fcard-group","docs\u002F4.typography\u002Fcard-group","Organize multiple cards in responsive grid layouts for better content presentation.",{"title":914,"path":915,"stem":916,"framework":16,"category":893,"description":917},"CodeCollapse","\u002Fdocs\u002Ftypography\u002Fcode-collapse","docs\u002F4.typography\u002Fcode-collapse","Make long code blocks collapsible to save space and improve readability.",{"title":919,"path":920,"stem":921,"framework":16,"category":893,"description":922},"CodeGroup","\u002Fdocs\u002Ftypography\u002Fcode-group","docs\u002F4.typography\u002Fcode-group","Group multiple code examples in tabbed interfaces for easy comparison.",{"title":924,"path":925,"stem":926,"framework":16,"category":893,"description":927},"CodePreview","\u002Fdocs\u002Ftypography\u002Fcode-preview","docs\u002F4.typography\u002Fcode-preview","Display code examples with a preview and their source for clearer documentation.",{"title":929,"path":930,"stem":931,"framework":16,"category":893,"description":932},"CodeTree","\u002Fdocs\u002Ftypography\u002Fcode-tree","docs\u002F4.typography\u002Fcode-tree","Visualize file and folder structures with syntax-highlighted code.",{"title":322,"path":934,"stem":935,"framework":16,"category":893,"description":936},"\u002Fdocs\u002Ftypography\u002Fcollapsible","docs\u002F4.typography\u002Fcollapsible","Toggle content visibility with smooth expand and collapse animations.",{"title":938,"path":939,"stem":940,"framework":16,"category":893,"description":941},"Field","\u002Fdocs\u002Ftypography\u002Ffield","docs\u002F4.typography\u002Ffield","Document API parameters, props, and configuration options clearly.",{"title":502,"path":943,"stem":944,"framework":16,"category":893,"description":945},"\u002Fdocs\u002Ftypography\u002Ffield-group","docs\u002F4.typography\u002Ffield-group","Group related fields together for comprehensive API documentation.",{"title":537,"path":947,"stem":948,"framework":16,"category":893,"description":949},"\u002Fdocs\u002Ftypography\u002Ficon","docs\u002F4.typography\u002Ficon","Display icons from popular icon libraries to enhance your content.",{"title":572,"path":951,"stem":952,"framework":16,"category":893,"description":953},"\u002Fdocs\u002Ftypography\u002Fkbd","docs\u002F4.typography\u002Fkbd","Display keyboard shortcuts and key combinations with proper styling.",{"title":955,"path":956,"stem":957,"framework":16,"category":893,"description":958,"badge":586},"Prompt","\u002Fdocs\u002Ftypography\u002Fprompt","docs\u002F4.typography\u002Fprompt","Display pre-built AI prompts with one-click copy and IDE integration.",{"title":960,"path":961,"stem":962,"framework":16,"category":893,"description":963},"Steps","\u002Fdocs\u002Ftypography\u002Fsteps","docs\u002F4.typography\u002Fsteps","Transform headings into numbered step-by-step guides and tutorials.",{"title":784,"path":965,"stem":966,"framework":16,"category":893,"description":967},"\u002Fdocs\u002Ftypography\u002Ftabs","docs\u002F4.typography\u002Ftabs","Organize related content in interactive tabbed interfaces.","i-lucide-square-pilcrow",{"id":970,"title":971,"body":16,"description":972,"extension":973,"hero":974,"meta":976,"navigation":36,"path":977,"seo":978,"stem":979,"__hash__":980},"blog\u002Fblog.yml","Blog","Tutorials, guides, and insights to help you build beautiful applications with Nuxt UI.","yml",{"title":975,"description":972},"Nuxt [UI]{.text-primary} Blog",{},"\u002Fblog",{"title":971,"description":972},"blog","ESl67YJxs4hhxlk_OHymZ1sSoeclVge2lYINtoN5zxg",[982],{"id":983,"title":984,"authors":985,"body":996,"date":12605,"description":12606,"extension":12607,"image":12608,"meta":12609,"navigation":36,"path":12611,"seo":12612,"stem":12613,"__hash__":12614},"posts\u002Fblog\u002Fhow-to-build-an-ai-chat.md","Build an AI Chatbot with Nuxt, Nuxt UI, and AI SDK",[986,991],{"name":987,"avatar":988,"to":990},"Hugo Richard",{"src":989},"https:\u002F\u002Fgithub.com\u002Fhugorcd.png","https:\u002F\u002Fx.com\u002Fhugorcd",{"name":992,"avatar":993,"to":995},"Benjamin Canac",{"src":994},"https:\u002F\u002Fgithub.com\u002Fbenjamincanac.png","https:\u002F\u002Fx.com\u002Fbenjamincanac",{"type":997,"value":998,"toc":12571},"minimark",[999,1003,1008,1011,1046,1072,1076,1079,1093,1097,1100,1137,1142,1145,1298,1302,1309,1473,1485,1488,1527,1531,1538,1633,1640,1657,1666,1670,1684,2421,2424,2442,2452,2456,2464,2468,2479,2848,2852,2879,4617,4620,4625,4632,4637,4648,4653,4662,4680,4685,4700,4713,4717,4720,5095,5099,5114,5118,5126,5699,5706,5731,5735,5763,5960,5967,5970,6103,6107,6125,7543,7546,7551,7562,7600,7615,7620,7627,7641,7646,7673,7678,7685,7696,7700,7703,7707,7710,7863,7867,7892,8370,8374,8913,8917,10226,10235,10239,10246,10250,10260,10518,10522,10530,10777,10781,10784,12175,12179,12182,12187,12196,12201,12210,12413,12417,12420,12435,12438,12453,12468,12477,12481,12484,12515,12518,12523,12564,12567],[1000,1001,1002],"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.",[1004,1005,1007],"h2",{"id":1006},"what-were-building","What we're building",[1000,1009,1010],{},"By the end of this tutorial, you'll have a fully functional AI chatbot with:",[1012,1013,1014,1022,1028,1034,1040],"ul",{},[1015,1016,1017,1021],"li",{},[1018,1019,1020],"strong",{},"Streaming responses"," that appear in real-time as the AI generates them",[1015,1023,1024,1027],{},[1018,1025,1026],{},"A beautiful chat interface"," built with Nuxt UI's purpose-built chat components",[1015,1029,1030,1033],{},[1018,1031,1032],{},"Markdown rendering"," for rich AI responses with code highlighting",[1015,1035,1036,1039],{},[1018,1037,1038],{},"Multi-model support"," allowing users to switch between OpenAI, Anthropic, and Google models",[1015,1041,1042,1045],{},[1018,1043,1044],{},"Server-side AI integration"," using Nitro API routes and the AI SDK",[1047,1048,1050],"callout",{"icon":1049},"i-simple-icons-github",[1000,1051,1052,1053,1063,1064,1071],{},"Check out the ",[1054,1055,1059],"a",{"href":1056,"rel":1057},"https:\u002F\u002Fgithub.com\u002Fnuxt-ui-templates\u002Fchat",[1058],"nofollow",[1060,1061,1062],"code",{},"Nuxt"," and ",[1054,1065,1068],{"href":1066,"rel":1067},"https:\u002F\u002Fgithub.com\u002Fnuxt-ui-templates\u002Fchat-vue",[1058],[1060,1069,1070],{},"Vue"," AI Chat templates on GitHub for production-ready implementations with authentication, database persistence, and more.",[1004,1073,1075],{"id":1074},"prerequisites","Prerequisites",[1000,1077,1078],{},"Before we start, make sure you have:",[1012,1080,1081,1084],{},[1015,1082,1083],{},"Node.js 20+ installed",[1015,1085,1086,1087,1092],{},"A ",[1054,1088,1091],{"href":1089,"rel":1090},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fai-gateway",[1058],"Vercel AI Gateway"," API key (provides access to multiple AI providers through a single endpoint)",[1004,1094,1096],{"id":1095},"project-setup","Project setup",[1000,1098,1099],{},"Start by creating a new Nuxt project:",[1101,1102,1107],"pre",{"className":1103,"code":1104,"language":1105,"meta":1106,"style":1106},"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","",[1060,1108,1109,1128],{"__ignoreMap":1106},[1110,1111,1114,1118,1122,1125],"span",{"class":1112,"line":1113},"line",1,[1110,1115,1117],{"class":1116},"sBMFI","npx",[1110,1119,1121],{"class":1120},"sfazB"," nuxi@latest",[1110,1123,1124],{"class":1120}," init",[1110,1126,1127],{"class":1120}," nuxt-ai-chat\n",[1110,1129,1131,1135],{"class":1112,"line":1130},2,[1110,1132,1134],{"class":1133},"s2Zo4","cd",[1110,1136,1127],{"class":1120},[1138,1139,1141],"h3",{"id":1140},"installing-dependencies","Installing dependencies",[1000,1143,1144],{},"Install Nuxt UI and the AI-specific dependencies:",[1146,1147,1149,1195,1229,1264],"code-group",{"sync":1148},"pm",[1101,1150,1153],{"className":1103,"code":1151,"filename":1152,"language":1105,"meta":1106,"style":1106},"pnpm add @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","pnpm",[1060,1154,1155],{"__ignoreMap":1106},[1110,1156,1157,1159,1162,1165,1168,1171,1174,1177,1180,1183,1186,1189,1192],{"class":1112,"line":1113},[1110,1158,1152],{"class":1116},[1110,1160,1161],{"class":1120}," add",[1110,1163,1164],{"class":1120}," @nuxt\u002Fui",[1110,1166,1167],{"class":1120}," tailwindcss",[1110,1169,1170],{"class":1120}," @comark\u002Fnuxt",[1110,1172,1173],{"class":1120}," @shikijs\u002Flangs",[1110,1175,1176],{"class":1120}," @nuxthub\u002Fcore",[1110,1178,1179],{"class":1120}," drizzle-orm",[1110,1181,1182],{"class":1120}," drizzle-kit",[1110,1184,1185],{"class":1120}," @libsql\u002Fclient",[1110,1187,1188],{"class":1120}," ai",[1110,1190,1191],{"class":1120}," @ai-sdk\u002Fvue",[1110,1193,1194],{"class":1120}," zod\n",[1101,1196,1199],{"className":1103,"code":1197,"filename":1198,"language":1105,"meta":1106,"style":1106},"yarn add @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","yarn",[1060,1200,1201],{"__ignoreMap":1106},[1110,1202,1203,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227],{"class":1112,"line":1113},[1110,1204,1198],{"class":1116},[1110,1206,1161],{"class":1120},[1110,1208,1164],{"class":1120},[1110,1210,1167],{"class":1120},[1110,1212,1170],{"class":1120},[1110,1214,1173],{"class":1120},[1110,1216,1176],{"class":1120},[1110,1218,1179],{"class":1120},[1110,1220,1182],{"class":1120},[1110,1222,1185],{"class":1120},[1110,1224,1188],{"class":1120},[1110,1226,1191],{"class":1120},[1110,1228,1194],{"class":1120},[1101,1230,1233],{"className":1103,"code":1231,"filename":1232,"language":1105,"meta":1106,"style":1106},"npm install @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","npm",[1060,1234,1235],{"__ignoreMap":1106},[1110,1236,1237,1239,1242,1244,1246,1248,1250,1252,1254,1256,1258,1260,1262],{"class":1112,"line":1113},[1110,1238,1232],{"class":1116},[1110,1240,1241],{"class":1120}," install",[1110,1243,1164],{"class":1120},[1110,1245,1167],{"class":1120},[1110,1247,1170],{"class":1120},[1110,1249,1173],{"class":1120},[1110,1251,1176],{"class":1120},[1110,1253,1179],{"class":1120},[1110,1255,1182],{"class":1120},[1110,1257,1185],{"class":1120},[1110,1259,1188],{"class":1120},[1110,1261,1191],{"class":1120},[1110,1263,1194],{"class":1120},[1101,1265,1268],{"className":1103,"code":1266,"filename":1267,"language":1105,"meta":1106,"style":1106},"bun add @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","bun",[1060,1269,1270],{"__ignoreMap":1106},[1110,1271,1272,1274,1276,1278,1280,1282,1284,1286,1288,1290,1292,1294,1296],{"class":1112,"line":1113},[1110,1273,1267],{"class":1116},[1110,1275,1161],{"class":1120},[1110,1277,1164],{"class":1120},[1110,1279,1167],{"class":1120},[1110,1281,1170],{"class":1120},[1110,1283,1173],{"class":1120},[1110,1285,1176],{"class":1120},[1110,1287,1179],{"class":1120},[1110,1289,1182],{"class":1120},[1110,1291,1185],{"class":1120},[1110,1293,1188],{"class":1120},[1110,1295,1191],{"class":1120},[1110,1297,1194],{"class":1120},[1138,1299,1301],{"id":1300},"configuration","Configuration",[1000,1303,1304,1305,1308],{},"Update your ",[1060,1306,1307],{},"nuxt.config.ts"," to register the modules:",[1310,1311,1312],"code-tree-intersection",{},[1101,1313,1317],{"className":1314,"code":1315,"filename":1307,"language":1316,"meta":1106,"style":1106},"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",[1060,1318,1319,1339,1351,1366,1378,1389,1397,1403,1414,1430,1436,1441,1464],{"__ignoreMap":1106},[1110,1320,1321,1325,1328,1331,1335],{"class":1112,"line":1113},[1110,1322,1324],{"class":1323},"s7zQu","export",[1110,1326,1327],{"class":1323}," default",[1110,1329,1330],{"class":1133}," defineNuxtConfig",[1110,1332,1334],{"class":1333},"sTEyZ","(",[1110,1336,1338],{"class":1337},"sMK4o","{\n",[1110,1340,1341,1345,1348],{"class":1112,"line":1130},[1110,1342,1344],{"class":1343},"swJcz","  modules",[1110,1346,1347],{"class":1337},":",[1110,1349,1350],{"class":1333}," [\n",[1110,1352,1354,1357,1360,1363],{"class":1112,"line":1353},3,[1110,1355,1356],{"class":1337},"    '",[1110,1358,1359],{"class":1120},"@nuxt\u002Fui",[1110,1361,1362],{"class":1337},"'",[1110,1364,1365],{"class":1337},",\n",[1110,1367,1369,1371,1374,1376],{"class":1112,"line":1368},4,[1110,1370,1356],{"class":1337},[1110,1372,1373],{"class":1120},"@comark\u002Fnuxt",[1110,1375,1362],{"class":1337},[1110,1377,1365],{"class":1337},[1110,1379,1381,1383,1386],{"class":1112,"line":1380},5,[1110,1382,1356],{"class":1337},[1110,1384,1385],{"class":1120},"@nuxthub\u002Fcore",[1110,1387,1388],{"class":1337},"'\n",[1110,1390,1392,1395],{"class":1112,"line":1391},6,[1110,1393,1394],{"class":1333},"  ]",[1110,1396,1365],{"class":1337},[1110,1398,1400],{"class":1112,"line":1399},7,[1110,1401,1402],{"emptyLinePlaceholder":21},"\n",[1110,1404,1406,1409,1411],{"class":1112,"line":1405},8,[1110,1407,1408],{"class":1343},"  hub",[1110,1410,1347],{"class":1337},[1110,1412,1413],{"class":1337}," {\n",[1110,1415,1417,1420,1422,1425,1428],{"class":1112,"line":1416},9,[1110,1418,1419],{"class":1343},"    db",[1110,1421,1347],{"class":1337},[1110,1423,1424],{"class":1337}," '",[1110,1426,1427],{"class":1120},"sqlite",[1110,1429,1388],{"class":1337},[1110,1431,1433],{"class":1112,"line":1432},10,[1110,1434,1435],{"class":1337},"  },\n",[1110,1437,1439],{"class":1112,"line":1438},11,[1110,1440,1402],{"emptyLinePlaceholder":21},[1110,1442,1444,1447,1449,1452,1454,1457,1459,1462],{"class":1112,"line":1443},12,[1110,1445,1446],{"class":1343},"  css",[1110,1448,1347],{"class":1337},[1110,1450,1451],{"class":1333}," [",[1110,1453,1362],{"class":1337},[1110,1455,1456],{"class":1120},"~\u002Fassets\u002Fcss\u002Fmain.css",[1110,1458,1362],{"class":1337},[1110,1460,1461],{"class":1333},"]",[1110,1463,1365],{"class":1337},[1110,1465,1467,1470],{"class":1112,"line":1466},13,[1110,1468,1469],{"class":1337},"}",[1110,1471,1472],{"class":1333},")\n",[1474,1475,1476],"note",{"to":865},[1000,1477,1478,1480,1481,1484],{},[1060,1479,1373],{}," automatically enables Nuxt UI's ",[1054,1482,1483],{"href":865},"prose components",", so Markdown rendered by Comark is styled to match your theme.",[1000,1486,1487],{},"Create the main CSS file to import Tailwind CSS and Nuxt UI:",[1310,1489,1490],{},[1101,1491,1496],{"className":1492,"code":1493,"filename":1494,"language":1495,"meta":1106,"style":1106},"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",[1060,1497,1498,1515],{"__ignoreMap":1106},[1110,1499,1500,1503,1506,1509,1512],{"class":1112,"line":1113},[1110,1501,1502],{"class":1323},"@import",[1110,1504,1505],{"class":1337}," \"",[1110,1507,1508],{"class":1120},"tailwindcss",[1110,1510,1511],{"class":1337},"\"",[1110,1513,1514],{"class":1337},";\n",[1110,1516,1517,1519,1521,1523,1525],{"class":1112,"line":1130},[1110,1518,1502],{"class":1323},[1110,1520,1505],{"class":1337},[1110,1522,1359],{"class":1120},[1110,1524,1511],{"class":1337},[1110,1526,1514],{"class":1337},[1138,1528,1530],{"id":1529},"setting-up-the-app","Setting up the app",[1000,1532,1533,1534,1537],{},"Nuxt UI requires wrapping your app with ",[1060,1535,1536],{},"UApp"," for modals, toasts, and overlays to work properly:",[1310,1539,1540],{},[1101,1541,1546],{"className":1542,"code":1543,"filename":1544,"highlights":1545,"language":34,"meta":1106,"style":1106},"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",[1130,1391],[1060,1547,1548,1559,1570,1594,1605,1614,1624],{"__ignoreMap":1106},[1110,1549,1550,1553,1556],{"class":1112,"line":1113},[1110,1551,1552],{"class":1337},"\u003C",[1110,1554,1555],{"class":1343},"template",[1110,1557,1558],{"class":1337},">\n",[1110,1560,1563,1566,1568],{"class":1561,"line":1130},[1112,1562],"highlight",[1110,1564,1565],{"class":1337},"  \u003C",[1110,1567,1536],{"class":1343},[1110,1569,1558],{"class":1337},[1110,1571,1572,1575,1578,1582,1585,1587,1590,1592],{"class":1112,"line":1353},[1110,1573,1574],{"class":1337},"    \u003C",[1110,1576,1577],{"class":1343},"UDashboardGroup",[1110,1579,1581],{"class":1580},"spNyl"," unit",[1110,1583,1584],{"class":1337},"=",[1110,1586,1511],{"class":1337},[1110,1588,1589],{"class":1120},"rem",[1110,1591,1511],{"class":1337},[1110,1593,1558],{"class":1337},[1110,1595,1596,1599,1602],{"class":1112,"line":1368},[1110,1597,1598],{"class":1337},"      \u003C",[1110,1600,1601],{"class":1343},"NuxtPage",[1110,1603,1604],{"class":1337}," \u002F>\n",[1110,1606,1607,1610,1612],{"class":1112,"line":1380},[1110,1608,1609],{"class":1337},"    \u003C\u002F",[1110,1611,1577],{"class":1343},[1110,1613,1558],{"class":1337},[1110,1615,1617,1620,1622],{"class":1616,"line":1391},[1112,1562],[1110,1618,1619],{"class":1337},"  \u003C\u002F",[1110,1621,1536],{"class":1343},[1110,1623,1558],{"class":1337},[1110,1625,1626,1629,1631],{"class":1112,"line":1399},[1110,1627,1628],{"class":1337},"\u003C\u002F",[1110,1630,1555],{"class":1343},[1110,1632,1558],{"class":1337},[1000,1634,1635,1636,1639],{},"Create a ",[1060,1637,1638],{},".env"," file with your AI Gateway API key:",[1310,1641,1642],{},[1101,1643,1645],{"className":1103,"code":1644,"filename":1638,"language":1105,"meta":1106,"style":1106},"AI_GATEWAY_API_KEY=your-api-key-here\n",[1060,1646,1647],{"__ignoreMap":1106},[1110,1648,1649,1652,1654],{"class":1112,"line":1113},[1110,1650,1651],{"class":1333},"AI_GATEWAY_API_KEY",[1110,1653,1584],{"class":1337},[1110,1655,1656],{"class":1120},"your-api-key-here\n",[1474,1658,1659],{},[1000,1660,1661,1662,1665],{},"With ",[1054,1663,1091],{"href":1089,"rel":1664},[1058],", 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.",[1138,1667,1669],{"id":1668},"setting-up-the-database","Setting up the database",[1000,1671,1672,1677,1678,1683],{},[1054,1673,1676],{"href":1674,"rel":1675},"https:\u002F\u002Fhub.nuxt.com",[1058],"NuxtHub"," provides a zero-config database powered by ",[1054,1679,1682],{"href":1680,"rel":1681},"https:\u002F\u002Form.drizzle.team",[1058],"Drizzle ORM",". Here is the schema for the chat application:",[1310,1685,1686],{},[1687,1688,1689],"code-collapse",{},[1101,1690,1693],{"className":1314,"code":1691,"filename":1692,"language":1316,"meta":1106,"style":1106},"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",[1060,1694,1695,1735,1755,1759,1786,1831,1844,1901,1907,1911,1946,1958,1965,1969,1996,2042,2109,2179,2219,2270,2283,2313,2319,2324,2356,2372,2390,2406,2414],{"__ignoreMap":1106},[1110,1696,1697,1700,1703,1706,1709,1712,1714,1717,1719,1722,1725,1728,1730,1733],{"class":1112,"line":1113},[1110,1698,1699],{"class":1323},"import",[1110,1701,1702],{"class":1337}," {",[1110,1704,1705],{"class":1333}," sqliteTable",[1110,1707,1708],{"class":1337},",",[1110,1710,1711],{"class":1333}," text",[1110,1713,1708],{"class":1337},[1110,1715,1716],{"class":1333}," integer",[1110,1718,1708],{"class":1337},[1110,1720,1721],{"class":1333}," index",[1110,1723,1724],{"class":1337}," }",[1110,1726,1727],{"class":1323}," from",[1110,1729,1424],{"class":1337},[1110,1731,1732],{"class":1120},"drizzle-orm\u002Fsqlite-core",[1110,1734,1388],{"class":1337},[1110,1736,1737,1739,1741,1744,1746,1748,1750,1753],{"class":1112,"line":1130},[1110,1738,1699],{"class":1323},[1110,1740,1702],{"class":1337},[1110,1742,1743],{"class":1333}," relations",[1110,1745,1724],{"class":1337},[1110,1747,1727],{"class":1323},[1110,1749,1424],{"class":1337},[1110,1751,1752],{"class":1120},"drizzle-orm",[1110,1754,1388],{"class":1337},[1110,1756,1757],{"class":1112,"line":1353},[1110,1758,1402],{"emptyLinePlaceholder":21},[1110,1760,1761,1763,1766,1769,1771,1773,1775,1777,1780,1782,1784],{"class":1112,"line":1368},[1110,1762,1324],{"class":1323},[1110,1764,1765],{"class":1580}," const",[1110,1767,1768],{"class":1333}," chats ",[1110,1770,1584],{"class":1337},[1110,1772,1705],{"class":1133},[1110,1774,1334],{"class":1333},[1110,1776,1362],{"class":1337},[1110,1778,1779],{"class":1120},"chats",[1110,1781,1362],{"class":1337},[1110,1783,1708],{"class":1337},[1110,1785,1413],{"class":1337},[1110,1787,1788,1791,1793,1795,1798,1801,1804,1806,1808,1811,1813,1815,1818,1821,1823,1826,1829],{"class":1112,"line":1380},[1110,1789,1790],{"class":1343},"  id",[1110,1792,1347],{"class":1337},[1110,1794,1711],{"class":1133},[1110,1796,1797],{"class":1333},"()",[1110,1799,1800],{"class":1337},".",[1110,1802,1803],{"class":1133},"primaryKey",[1110,1805,1797],{"class":1333},[1110,1807,1800],{"class":1337},[1110,1809,1810],{"class":1133},"$defaultFn",[1110,1812,1334],{"class":1333},[1110,1814,1797],{"class":1337},[1110,1816,1817],{"class":1580}," =>",[1110,1819,1820],{"class":1333}," crypto",[1110,1822,1800],{"class":1337},[1110,1824,1825],{"class":1133},"randomUUID",[1110,1827,1828],{"class":1333},"())",[1110,1830,1365],{"class":1337},[1110,1832,1833,1836,1838,1840,1842],{"class":1112,"line":1391},[1110,1834,1835],{"class":1343},"  title",[1110,1837,1347],{"class":1337},[1110,1839,1711],{"class":1133},[1110,1841,1797],{"class":1333},[1110,1843,1365],{"class":1337},[1110,1845,1846,1849,1851,1853,1855,1858,1861,1863,1865,1868,1870,1872,1875,1877,1880,1882,1884,1886,1888,1890,1892,1895,1898],{"class":1112,"line":1399},[1110,1847,1848],{"class":1343},"  createdAt",[1110,1850,1347],{"class":1337},[1110,1852,1716],{"class":1133},[1110,1854,1334],{"class":1333},[1110,1856,1857],{"class":1337},"{",[1110,1859,1860],{"class":1343}," mode",[1110,1862,1347],{"class":1337},[1110,1864,1424],{"class":1337},[1110,1866,1867],{"class":1120},"timestamp",[1110,1869,1362],{"class":1337},[1110,1871,1724],{"class":1337},[1110,1873,1874],{"class":1333},")",[1110,1876,1800],{"class":1337},[1110,1878,1879],{"class":1133},"notNull",[1110,1881,1797],{"class":1333},[1110,1883,1800],{"class":1337},[1110,1885,1810],{"class":1133},[1110,1887,1334],{"class":1333},[1110,1889,1797],{"class":1337},[1110,1891,1817],{"class":1580},[1110,1893,1894],{"class":1337}," new",[1110,1896,1897],{"class":1133}," Date",[1110,1899,1900],{"class":1333},"())\n",[1110,1902,1903,1905],{"class":1112,"line":1405},[1110,1904,1469],{"class":1337},[1110,1906,1472],{"class":1333},[1110,1908,1909],{"class":1112,"line":1416},[1110,1910,1402],{"emptyLinePlaceholder":21},[1110,1912,1913,1915,1917,1920,1922,1924,1927,1929,1932,1936,1939,1941,1944],{"class":1112,"line":1432},[1110,1914,1324],{"class":1323},[1110,1916,1765],{"class":1580},[1110,1918,1919],{"class":1333}," chatsRelations ",[1110,1921,1584],{"class":1337},[1110,1923,1743],{"class":1133},[1110,1925,1926],{"class":1333},"(chats",[1110,1928,1708],{"class":1337},[1110,1930,1931],{"class":1337}," ({",[1110,1933,1935],{"class":1934},"sHdIc"," many",[1110,1937,1938],{"class":1337}," })",[1110,1940,1817],{"class":1580},[1110,1942,1943],{"class":1333}," (",[1110,1945,1338],{"class":1337},[1110,1947,1948,1951,1953,1955],{"class":1112,"line":1438},[1110,1949,1950],{"class":1343},"  messages",[1110,1952,1347],{"class":1337},[1110,1954,1935],{"class":1133},[1110,1956,1957],{"class":1333},"(messages)\n",[1110,1959,1960,1962],{"class":1112,"line":1443},[1110,1961,1469],{"class":1337},[1110,1963,1964],{"class":1333},"))\n",[1110,1966,1967],{"class":1112,"line":1466},[1110,1968,1402],{"emptyLinePlaceholder":21},[1110,1970,1972,1974,1976,1979,1981,1983,1985,1987,1990,1992,1994],{"class":1112,"line":1971},14,[1110,1973,1324],{"class":1323},[1110,1975,1765],{"class":1580},[1110,1977,1978],{"class":1333}," messages ",[1110,1980,1584],{"class":1337},[1110,1982,1705],{"class":1133},[1110,1984,1334],{"class":1333},[1110,1986,1362],{"class":1337},[1110,1988,1989],{"class":1120},"messages",[1110,1991,1362],{"class":1337},[1110,1993,1708],{"class":1337},[1110,1995,1413],{"class":1337},[1110,1997,1999,2001,2003,2005,2007,2009,2012,2014,2016,2018,2020,2022,2024,2026,2028,2030,2032,2034,2036,2038,2040],{"class":1112,"line":1998},15,[1110,2000,1790],{"class":1343},[1110,2002,1347],{"class":1337},[1110,2004,1711],{"class":1133},[1110,2006,1334],{"class":1333},[1110,2008,1362],{"class":1337},[1110,2010,2011],{"class":1120},"id",[1110,2013,1362],{"class":1337},[1110,2015,1874],{"class":1333},[1110,2017,1800],{"class":1337},[1110,2019,1803],{"class":1133},[1110,2021,1797],{"class":1333},[1110,2023,1800],{"class":1337},[1110,2025,1810],{"class":1133},[1110,2027,1334],{"class":1333},[1110,2029,1797],{"class":1337},[1110,2031,1817],{"class":1580},[1110,2033,1820],{"class":1333},[1110,2035,1800],{"class":1337},[1110,2037,1825],{"class":1133},[1110,2039,1828],{"class":1333},[1110,2041,1365],{"class":1337},[1110,2043,2045,2048,2050,2052,2054,2056,2059,2061,2063,2065,2067,2069,2071,2074,2076,2078,2080,2083,2085,2087,2089,2091,2094,2096,2098,2101,2103,2105,2107],{"class":1112,"line":2044},16,[1110,2046,2047],{"class":1343},"  chatId",[1110,2049,1347],{"class":1337},[1110,2051,1711],{"class":1133},[1110,2053,1334],{"class":1333},[1110,2055,1362],{"class":1337},[1110,2057,2058],{"class":1120},"chat_id",[1110,2060,1362],{"class":1337},[1110,2062,1874],{"class":1333},[1110,2064,1800],{"class":1337},[1110,2066,1879],{"class":1133},[1110,2068,1797],{"class":1333},[1110,2070,1800],{"class":1337},[1110,2072,2073],{"class":1133},"references",[1110,2075,1334],{"class":1333},[1110,2077,1797],{"class":1337},[1110,2079,1817],{"class":1580},[1110,2081,2082],{"class":1333}," chats",[1110,2084,1800],{"class":1337},[1110,2086,2011],{"class":1333},[1110,2088,1708],{"class":1337},[1110,2090,1702],{"class":1337},[1110,2092,2093],{"class":1343}," onDelete",[1110,2095,1347],{"class":1337},[1110,2097,1424],{"class":1337},[1110,2099,2100],{"class":1120},"cascade",[1110,2102,1362],{"class":1337},[1110,2104,1724],{"class":1337},[1110,2106,1874],{"class":1333},[1110,2108,1365],{"class":1337},[1110,2110,2112,2115,2117,2119,2121,2123,2126,2128,2130,2132,2135,2137,2139,2141,2144,2146,2148,2150,2153,2155,2157,2159,2162,2164,2167,2169,2171,2173,2175,2177],{"class":1112,"line":2111},17,[1110,2113,2114],{"class":1343},"  role",[1110,2116,1347],{"class":1337},[1110,2118,1711],{"class":1133},[1110,2120,1334],{"class":1333},[1110,2122,1362],{"class":1337},[1110,2124,2125],{"class":1120},"role",[1110,2127,1362],{"class":1337},[1110,2129,1708],{"class":1337},[1110,2131,1702],{"class":1337},[1110,2133,2134],{"class":1343}," enum",[1110,2136,1347],{"class":1337},[1110,2138,1451],{"class":1333},[1110,2140,1362],{"class":1337},[1110,2142,2143],{"class":1120},"user",[1110,2145,1362],{"class":1337},[1110,2147,1708],{"class":1337},[1110,2149,1424],{"class":1337},[1110,2151,2152],{"class":1120},"assistant",[1110,2154,1362],{"class":1337},[1110,2156,1708],{"class":1337},[1110,2158,1424],{"class":1337},[1110,2160,2161],{"class":1120},"system",[1110,2163,1362],{"class":1337},[1110,2165,2166],{"class":1333},"] ",[1110,2168,1469],{"class":1337},[1110,2170,1874],{"class":1333},[1110,2172,1800],{"class":1337},[1110,2174,1879],{"class":1133},[1110,2176,1797],{"class":1333},[1110,2178,1365],{"class":1337},[1110,2180,2182,2185,2187,2189,2191,2193,2196,2198,2200,2202,2204,2206,2208,2211,2213,2215,2217],{"class":1112,"line":2181},18,[1110,2183,2184],{"class":1343},"  parts",[1110,2186,1347],{"class":1337},[1110,2188,1711],{"class":1133},[1110,2190,1334],{"class":1333},[1110,2192,1362],{"class":1337},[1110,2194,2195],{"class":1120},"parts",[1110,2197,1362],{"class":1337},[1110,2199,1708],{"class":1337},[1110,2201,1702],{"class":1337},[1110,2203,1860],{"class":1343},[1110,2205,1347],{"class":1337},[1110,2207,1424],{"class":1337},[1110,2209,2210],{"class":1120},"json",[1110,2212,1362],{"class":1337},[1110,2214,1724],{"class":1337},[1110,2216,1874],{"class":1333},[1110,2218,1365],{"class":1337},[1110,2220,2222,2224,2226,2228,2230,2232,2234,2236,2238,2240,2242,2244,2246,2248,2250,2252,2254,2256,2258,2260,2262,2264,2266,2268],{"class":1112,"line":2221},19,[1110,2223,1848],{"class":1343},[1110,2225,1347],{"class":1337},[1110,2227,1716],{"class":1133},[1110,2229,1334],{"class":1333},[1110,2231,1857],{"class":1337},[1110,2233,1860],{"class":1343},[1110,2235,1347],{"class":1337},[1110,2237,1424],{"class":1337},[1110,2239,1867],{"class":1120},[1110,2241,1362],{"class":1337},[1110,2243,1724],{"class":1337},[1110,2245,1874],{"class":1333},[1110,2247,1800],{"class":1337},[1110,2249,1879],{"class":1133},[1110,2251,1797],{"class":1333},[1110,2253,1800],{"class":1337},[1110,2255,1810],{"class":1133},[1110,2257,1334],{"class":1333},[1110,2259,1797],{"class":1337},[1110,2261,1817],{"class":1580},[1110,2263,1894],{"class":1337},[1110,2265,1897],{"class":1133},[1110,2267,1828],{"class":1333},[1110,2269,1365],{"class":1337},[1110,2271,2273,2276,2279,2281],{"class":1112,"line":2272},20,[1110,2274,2275],{"class":1337},"},",[1110,2277,2278],{"class":1934}," table",[1110,2280,1817],{"class":1580},[1110,2282,1350],{"class":1333},[1110,2284,2286,2289,2291,2293,2296,2298,2300,2302,2305,2308,2310],{"class":1112,"line":2285},21,[1110,2287,2288],{"class":1133},"  index",[1110,2290,1334],{"class":1333},[1110,2292,1362],{"class":1337},[1110,2294,2295],{"class":1120},"messages_chat_id_idx",[1110,2297,1362],{"class":1337},[1110,2299,1874],{"class":1333},[1110,2301,1800],{"class":1337},[1110,2303,2304],{"class":1133},"on",[1110,2306,2307],{"class":1333},"(table",[1110,2309,1800],{"class":1337},[1110,2311,2312],{"class":1333},"chatId)\n",[1110,2314,2316],{"class":1112,"line":2315},22,[1110,2317,2318],{"class":1333},"])\n",[1110,2320,2322],{"class":1112,"line":2321},23,[1110,2323,1402],{"emptyLinePlaceholder":21},[1110,2325,2327,2329,2331,2334,2336,2338,2341,2343,2345,2348,2350,2352,2354],{"class":1112,"line":2326},24,[1110,2328,1324],{"class":1323},[1110,2330,1765],{"class":1580},[1110,2332,2333],{"class":1333}," messagesRelations ",[1110,2335,1584],{"class":1337},[1110,2337,1743],{"class":1133},[1110,2339,2340],{"class":1333},"(messages",[1110,2342,1708],{"class":1337},[1110,2344,1931],{"class":1337},[1110,2346,2347],{"class":1934}," one",[1110,2349,1938],{"class":1337},[1110,2351,1817],{"class":1580},[1110,2353,1943],{"class":1333},[1110,2355,1338],{"class":1337},[1110,2357,2359,2362,2364,2366,2368,2370],{"class":1112,"line":2358},25,[1110,2360,2361],{"class":1343},"  chat",[1110,2363,1347],{"class":1337},[1110,2365,2347],{"class":1133},[1110,2367,1926],{"class":1333},[1110,2369,1708],{"class":1337},[1110,2371,1413],{"class":1337},[1110,2373,2375,2378,2380,2383,2385,2388],{"class":1112,"line":2374},26,[1110,2376,2377],{"class":1343},"    fields",[1110,2379,1347],{"class":1337},[1110,2381,2382],{"class":1333}," [messages",[1110,2384,1800],{"class":1337},[1110,2386,2387],{"class":1333},"chatId]",[1110,2389,1365],{"class":1337},[1110,2391,2393,2396,2398,2401,2403],{"class":1112,"line":2392},27,[1110,2394,2395],{"class":1343},"    references",[1110,2397,1347],{"class":1337},[1110,2399,2400],{"class":1333}," [chats",[1110,2402,1800],{"class":1337},[1110,2404,2405],{"class":1333},"id]\n",[1110,2407,2409,2412],{"class":1112,"line":2408},28,[1110,2410,2411],{"class":1337},"  }",[1110,2413,1472],{"class":1333},[1110,2415,2417,2419],{"class":1112,"line":2416},29,[1110,2418,1469],{"class":1337},[1110,2420,1964],{"class":1333},[1000,2422,2423],{},"Generate the database migrations from your schema:",[1101,2425,2427],{"className":1103,"code":2426,"language":1105,"meta":1106,"style":1106},"npx nuxt db generate\n",[1060,2428,2429],{"__ignoreMap":1106},[1110,2430,2431,2433,2436,2439],{"class":1112,"line":1113},[1110,2432,1117],{"class":1116},[1110,2434,2435],{"class":1120}," nuxt",[1110,2437,2438],{"class":1120}," db",[1110,2440,2441],{"class":1120}," generate\n",[2443,2444,2445],"tip",{},[1000,2446,2447,2448,2451],{},"Migrations are automatically applied when you start the development server with ",[1060,2449,2450],{},"npx nuxt dev",". NuxtHub uses SQLite locally, so no external database is required during development.",[1004,2453,2455],{"id":2454},"building-the-backend","Building the backend",[1000,2457,2458,2459,1800],{},"This section covers integrating AI on the server. The following API endpoints handle chat creation, AI streaming, and data persistence using ",[1054,2460,2463],{"href":2461,"rel":2462},"https:\u002F\u002Fnitro.build",[1058],"Nitro",[1138,2465,2467],{"id":2466},"creating-a-chat","Creating a chat",[1000,2469,2470,2471,2478],{},"First, create the endpoint that initializes a new chat and saves the first message to the database. This uses the ",[1054,2472,2475],{"href":2473,"rel":2474},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fui-message",[1058],[1060,2476,2477],{},"UIMessage"," type from the AI SDK:",[1310,2480,2481],{},[1101,2482,2485],{"className":1314,"code":2483,"filename":2484,"language":1316,"meta":1106,"style":1106},"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",[1060,2486,2487,2511,2534,2558,2578,2582,2606,2643,2667,2680,2684,2690,2741,2745,2750,2779,2795,2810,2824,2830,2834,2842],{"__ignoreMap":1106},[1110,2488,2489,2491,2493,2496,2498,2501,2503,2505,2507,2509],{"class":1112,"line":1113},[1110,2490,1699],{"class":1323},[1110,2492,1702],{"class":1337},[1110,2494,2495],{"class":1333}," defineEventHandler",[1110,2497,1708],{"class":1337},[1110,2499,2500],{"class":1333}," readValidatedBody",[1110,2502,1724],{"class":1337},[1110,2504,1727],{"class":1323},[1110,2506,1424],{"class":1337},[1110,2508,1138],{"class":1120},[1110,2510,1388],{"class":1337},[1110,2512,2513,2515,2518,2520,2523,2525,2527,2529,2532],{"class":1112,"line":1130},[1110,2514,1699],{"class":1323},[1110,2516,2517],{"class":1323}," type",[1110,2519,1702],{"class":1337},[1110,2521,2522],{"class":1333}," UIMessage",[1110,2524,1724],{"class":1337},[1110,2526,1727],{"class":1323},[1110,2528,1424],{"class":1337},[1110,2530,2531],{"class":1120},"ai",[1110,2533,1388],{"class":1337},[1110,2535,2536,2538,2540,2542,2544,2547,2549,2551,2553,2556],{"class":1112,"line":1353},[1110,2537,1699],{"class":1323},[1110,2539,1702],{"class":1337},[1110,2541,2438],{"class":1333},[1110,2543,1708],{"class":1337},[1110,2545,2546],{"class":1333}," schema",[1110,2548,1724],{"class":1337},[1110,2550,1727],{"class":1323},[1110,2552,1424],{"class":1337},[1110,2554,2555],{"class":1120},"hub:db",[1110,2557,1388],{"class":1337},[1110,2559,2560,2562,2564,2567,2569,2571,2573,2576],{"class":1112,"line":1368},[1110,2561,1699],{"class":1323},[1110,2563,1702],{"class":1337},[1110,2565,2566],{"class":1333}," z",[1110,2568,1724],{"class":1337},[1110,2570,1727],{"class":1323},[1110,2572,1424],{"class":1337},[1110,2574,2575],{"class":1120},"zod",[1110,2577,1388],{"class":1337},[1110,2579,2580],{"class":1112,"line":1380},[1110,2581,1402],{"emptyLinePlaceholder":21},[1110,2583,2584,2586,2588,2590,2592,2595,2597,2600,2602,2604],{"class":1112,"line":1391},[1110,2585,1324],{"class":1323},[1110,2587,1327],{"class":1323},[1110,2589,2495],{"class":1133},[1110,2591,1334],{"class":1333},[1110,2593,2594],{"class":1580},"async",[1110,2596,1943],{"class":1337},[1110,2598,2599],{"class":1934},"event",[1110,2601,1874],{"class":1337},[1110,2603,1817],{"class":1580},[1110,2605,1413],{"class":1337},[1110,2607,2608,2611,2613,2616,2618,2621,2624,2626,2628,2630,2632,2634,2636,2639,2641],{"class":1112,"line":1399},[1110,2609,2610],{"class":1580},"  const",[1110,2612,1702],{"class":1337},[1110,2614,2615],{"class":1333}," message",[1110,2617,1724],{"class":1337},[1110,2619,2620],{"class":1337}," =",[1110,2622,2623],{"class":1323}," await",[1110,2625,2500],{"class":1133},[1110,2627,1334],{"class":1343},[1110,2629,2599],{"class":1333},[1110,2631,1708],{"class":1337},[1110,2633,2566],{"class":1333},[1110,2635,1800],{"class":1337},[1110,2637,2638],{"class":1133},"object",[1110,2640,1334],{"class":1343},[1110,2642,1338],{"class":1337},[1110,2644,2645,2648,2650,2652,2654,2657,2659,2661,2664],{"class":1112,"line":1405},[1110,2646,2647],{"class":1343},"    message",[1110,2649,1347],{"class":1337},[1110,2651,2566],{"class":1333},[1110,2653,1800],{"class":1337},[1110,2655,2656],{"class":1133},"custom",[1110,2658,1552],{"class":1337},[1110,2660,2477],{"class":1116},[1110,2662,2663],{"class":1337},">",[1110,2665,2666],{"class":1343},"()\n",[1110,2668,2669,2671,2673,2675,2678],{"class":1112,"line":1416},[1110,2670,2411],{"class":1337},[1110,2672,1874],{"class":1343},[1110,2674,1800],{"class":1337},[1110,2676,2677],{"class":1333},"parse",[1110,2679,1472],{"class":1343},[1110,2681,2682],{"class":1112,"line":1432},[1110,2683,1402],{"emptyLinePlaceholder":21},[1110,2685,2686],{"class":1112,"line":1438},[1110,2687,2689],{"class":2688},"sHwdD","  \u002F\u002F Create a new chat\n",[1110,2691,2692,2694,2696,2698,2700,2702,2704,2706,2708,2711,2713,2716,2718,2720,2722,2724,2727,2729,2732,2734,2736,2739],{"class":1112,"line":1443},[1110,2693,2610],{"class":1580},[1110,2695,1451],{"class":1337},[1110,2697,262],{"class":1333},[1110,2699,1461],{"class":1337},[1110,2701,2620],{"class":1337},[1110,2703,2623],{"class":1323},[1110,2705,2438],{"class":1333},[1110,2707,1800],{"class":1337},[1110,2709,2710],{"class":1133},"insert",[1110,2712,1334],{"class":1343},[1110,2714,2715],{"class":1333},"schema",[1110,2717,1800],{"class":1337},[1110,2719,1779],{"class":1333},[1110,2721,1874],{"class":1343},[1110,2723,1800],{"class":1337},[1110,2725,2726],{"class":1133},"values",[1110,2728,1334],{"class":1343},[1110,2730,2731],{"class":1337},"{}",[1110,2733,1874],{"class":1343},[1110,2735,1800],{"class":1337},[1110,2737,2738],{"class":1133},"returning",[1110,2740,2666],{"class":1343},[1110,2742,2743],{"class":1112,"line":1466},[1110,2744,1402],{"emptyLinePlaceholder":21},[1110,2746,2747],{"class":1112,"line":1971},[1110,2748,2749],{"class":2688},"  \u002F\u002F Save the first user message\n",[1110,2751,2752,2755,2757,2759,2761,2763,2765,2767,2769,2771,2773,2775,2777],{"class":1112,"line":1998},[1110,2753,2754],{"class":1323},"  await",[1110,2756,2438],{"class":1333},[1110,2758,1800],{"class":1337},[1110,2760,2710],{"class":1133},[1110,2762,1334],{"class":1343},[1110,2764,2715],{"class":1333},[1110,2766,1800],{"class":1337},[1110,2768,1989],{"class":1333},[1110,2770,1874],{"class":1343},[1110,2772,1800],{"class":1337},[1110,2774,2726],{"class":1133},[1110,2776,1334],{"class":1343},[1110,2778,1338],{"class":1337},[1110,2780,2781,2784,2786,2789,2791,2793],{"class":1112,"line":2044},[1110,2782,2783],{"class":1343},"    chatId",[1110,2785,1347],{"class":1337},[1110,2787,2788],{"class":1333}," chat",[1110,2790,1800],{"class":1337},[1110,2792,2011],{"class":1333},[1110,2794,1365],{"class":1337},[1110,2796,2797,2800,2802,2804,2806,2808],{"class":1112,"line":2111},[1110,2798,2799],{"class":1343},"    role",[1110,2801,1347],{"class":1337},[1110,2803,1424],{"class":1337},[1110,2805,2143],{"class":1120},[1110,2807,1362],{"class":1337},[1110,2809,1365],{"class":1337},[1110,2811,2812,2815,2817,2819,2821],{"class":1112,"line":2181},[1110,2813,2814],{"class":1343},"    parts",[1110,2816,1347],{"class":1337},[1110,2818,2615],{"class":1333},[1110,2820,1800],{"class":1337},[1110,2822,2823],{"class":1333},"parts\n",[1110,2825,2826,2828],{"class":1112,"line":2221},[1110,2827,2411],{"class":1337},[1110,2829,1472],{"class":1343},[1110,2831,2832],{"class":1112,"line":2272},[1110,2833,1402],{"emptyLinePlaceholder":21},[1110,2835,2836,2839],{"class":1112,"line":2285},[1110,2837,2838],{"class":1323},"  return",[1110,2840,2841],{"class":1333}," chat\n",[1110,2843,2844,2846],{"class":1112,"line":2315},[1110,2845,1469],{"class":1337},[1110,2847,1472],{"class":1333},[1138,2849,2851],{"id":2850},"streaming-ai-responses","Streaming AI responses",[1000,2853,2854,2855,2862,2863,2870,2871,2878],{},"Next, create the endpoint that handles the AI conversation. This endpoint uses ",[1054,2856,2859],{"href":2857,"rel":2858},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-core\u002Fstream-text",[1058],[1060,2860,2861],{},"streamText",", ",[1054,2864,2867],{"href":2865,"rel":2866},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream",[1058],[1060,2868,2869],{},"createUIMessageStream",", and ",[1054,2872,2875],{"href":2873,"rel":2874},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream-response",[1058],[1060,2876,2877],{},"createUIMessageStreamResponse"," from the AI SDK:",[1310,2880,2881],{},[1687,2882,2883],{},[1101,2884,2887],{"className":1314,"code":2885,"filename":2886,"language":1316,"meta":1106,"style":1106},"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",[1060,2888,2889,2921,2940,2962,2980,2986,2993,3000,3007,3014,3019,3031,3051,3055,3072,3076,3087,3121,3150,3181,3186,3190,3212,3245,3261,3273,3277,3320,3380,3394,3411,3443,3456,3461,3467,3498,3542,3549,3554,3572,3611,3617,3622,3628,3648,3676,3688,3707,3735,3742,3747,3813,3818,3823,3829,3858,3899,3928,3940,3956,3970,3977,3982,3987,3993,4010,4032,4050,4058,4075,4096,4106,4116,4126,4143,4154,4160,4166,4176,4186,4200,4215,4220,4225,4235,4251,4266,4272,4278,4286,4291,4297,4317,4332,4349,4372,4383,4391,4397,4402,4425,4431,4451,4457,4503,4519,4552,4566,4574,4580,4587,4592,4610],{"__ignoreMap":1106},[1110,2890,2891,2893,2895,2898,2900,2902,2904,2907,2909,2911,2913,2915,2917,2919],{"class":1112,"line":1113},[1110,2892,1699],{"class":1323},[1110,2894,1702],{"class":1337},[1110,2896,2897],{"class":1333}," createError",[1110,2899,1708],{"class":1337},[1110,2901,2495],{"class":1333},[1110,2903,1708],{"class":1337},[1110,2905,2906],{"class":1333}," getValidatedRouterParams",[1110,2908,1708],{"class":1337},[1110,2910,2500],{"class":1333},[1110,2912,1724],{"class":1337},[1110,2914,1727],{"class":1323},[1110,2916,1424],{"class":1337},[1110,2918,1138],{"class":1120},[1110,2920,1388],{"class":1337},[1110,2922,2923,2925,2927,2930,2932,2934,2936,2938],{"class":1112,"line":1130},[1110,2924,1699],{"class":1323},[1110,2926,1702],{"class":1337},[1110,2928,2929],{"class":1333}," eq",[1110,2931,1724],{"class":1337},[1110,2933,1727],{"class":1323},[1110,2935,1424],{"class":1337},[1110,2937,1752],{"class":1120},[1110,2939,1388],{"class":1337},[1110,2941,2942,2944,2946,2948,2950,2952,2954,2956,2958,2960],{"class":1112,"line":1353},[1110,2943,1699],{"class":1323},[1110,2945,1702],{"class":1337},[1110,2947,2438],{"class":1333},[1110,2949,1708],{"class":1337},[1110,2951,2546],{"class":1333},[1110,2953,1724],{"class":1337},[1110,2955,1727],{"class":1323},[1110,2957,1424],{"class":1337},[1110,2959,2555],{"class":1120},[1110,2961,1388],{"class":1337},[1110,2963,2964,2966,2968,2970,2972,2974,2976,2978],{"class":1112,"line":1368},[1110,2965,1699],{"class":1323},[1110,2967,1702],{"class":1337},[1110,2969,2566],{"class":1333},[1110,2971,1724],{"class":1337},[1110,2973,1727],{"class":1323},[1110,2975,1424],{"class":1337},[1110,2977,2575],{"class":1120},[1110,2979,1388],{"class":1337},[1110,2981,2982,2984],{"class":1112,"line":1380},[1110,2983,1699],{"class":1323},[1110,2985,1413],{"class":1337},[1110,2987,2988,2991],{"class":1112,"line":1391},[1110,2989,2990],{"class":1333},"  convertToModelMessages",[1110,2992,1365],{"class":1337},[1110,2994,2995,2998],{"class":1112,"line":1399},[1110,2996,2997],{"class":1333},"  createUIMessageStream",[1110,2999,1365],{"class":1337},[1110,3001,3002,3005],{"class":1112,"line":1405},[1110,3003,3004],{"class":1333},"  createUIMessageStreamResponse",[1110,3006,1365],{"class":1337},[1110,3008,3009,3012],{"class":1112,"line":1416},[1110,3010,3011],{"class":1333},"  generateText",[1110,3013,1365],{"class":1337},[1110,3015,3016],{"class":1112,"line":1432},[1110,3017,3018],{"class":1333},"  streamText\n",[1110,3020,3021,3023,3025,3027,3029],{"class":1112,"line":1438},[1110,3022,1469],{"class":1337},[1110,3024,1727],{"class":1323},[1110,3026,1424],{"class":1337},[1110,3028,2531],{"class":1120},[1110,3030,1388],{"class":1337},[1110,3032,3033,3035,3037,3039,3041,3043,3045,3047,3049],{"class":1112,"line":1443},[1110,3034,1699],{"class":1323},[1110,3036,2517],{"class":1323},[1110,3038,1702],{"class":1337},[1110,3040,2522],{"class":1333},[1110,3042,1724],{"class":1337},[1110,3044,1727],{"class":1323},[1110,3046,1424],{"class":1337},[1110,3048,2531],{"class":1120},[1110,3050,1388],{"class":1337},[1110,3052,3053],{"class":1112,"line":1466},[1110,3054,1402],{"emptyLinePlaceholder":21},[1110,3056,3057,3060,3063,3065,3067,3070],{"class":1112,"line":1971},[1110,3058,3059],{"class":1580},"const",[1110,3061,3062],{"class":1333}," DEFAULT_MODEL ",[1110,3064,1584],{"class":1337},[1110,3066,1424],{"class":1337},[1110,3068,3069],{"class":1120},"anthropic\u002Fclaude-haiku-4.5",[1110,3071,1388],{"class":1337},[1110,3073,3074],{"class":1112,"line":1998},[1110,3075,1402],{"emptyLinePlaceholder":21},[1110,3077,3078,3080,3083,3085],{"class":1112,"line":2044},[1110,3079,3059],{"class":1580},[1110,3081,3082],{"class":1333}," MODELS ",[1110,3084,1584],{"class":1337},[1110,3086,1350],{"class":1333},[1110,3088,3089,3092,3095,3097,3099,3102,3104,3106,3109,3111,3113,3116,3118],{"class":1112,"line":2111},[1110,3090,3091],{"class":1337},"  {",[1110,3093,3094],{"class":1343}," value",[1110,3096,1347],{"class":1337},[1110,3098,1424],{"class":1337},[1110,3100,3101],{"class":1120},"openai\u002Fgpt-5-nano",[1110,3103,1362],{"class":1337},[1110,3105,1708],{"class":1337},[1110,3107,3108],{"class":1343}," label",[1110,3110,1347],{"class":1337},[1110,3112,1424],{"class":1337},[1110,3114,3115],{"class":1120},"GPT-5 Nano",[1110,3117,1362],{"class":1337},[1110,3119,3120],{"class":1337}," },\n",[1110,3122,3123,3125,3127,3129,3131,3133,3135,3137,3139,3141,3143,3146,3148],{"class":1112,"line":2181},[1110,3124,3091],{"class":1337},[1110,3126,3094],{"class":1343},[1110,3128,1347],{"class":1337},[1110,3130,1424],{"class":1337},[1110,3132,3069],{"class":1120},[1110,3134,1362],{"class":1337},[1110,3136,1708],{"class":1337},[1110,3138,3108],{"class":1343},[1110,3140,1347],{"class":1337},[1110,3142,1424],{"class":1337},[1110,3144,3145],{"class":1120},"Claude Haiku 4.5",[1110,3147,1362],{"class":1337},[1110,3149,3120],{"class":1337},[1110,3151,3152,3154,3156,3158,3160,3163,3165,3167,3169,3171,3173,3176,3178],{"class":1112,"line":2221},[1110,3153,3091],{"class":1337},[1110,3155,3094],{"class":1343},[1110,3157,1347],{"class":1337},[1110,3159,1424],{"class":1337},[1110,3161,3162],{"class":1120},"google\u002Fgemini-3-flash",[1110,3164,1362],{"class":1337},[1110,3166,1708],{"class":1337},[1110,3168,3108],{"class":1343},[1110,3170,1347],{"class":1337},[1110,3172,1424],{"class":1337},[1110,3174,3175],{"class":1120},"Gemini 3 Flash",[1110,3177,1362],{"class":1337},[1110,3179,3180],{"class":1337}," }\n",[1110,3182,3183],{"class":1112,"line":2272},[1110,3184,3185],{"class":1333},"]\n",[1110,3187,3188],{"class":1112,"line":2285},[1110,3189,1402],{"emptyLinePlaceholder":21},[1110,3191,3192,3194,3196,3198,3200,3202,3204,3206,3208,3210],{"class":1112,"line":2315},[1110,3193,1324],{"class":1323},[1110,3195,1327],{"class":1323},[1110,3197,2495],{"class":1133},[1110,3199,1334],{"class":1333},[1110,3201,2594],{"class":1580},[1110,3203,1943],{"class":1337},[1110,3205,2599],{"class":1934},[1110,3207,1874],{"class":1337},[1110,3209,1817],{"class":1580},[1110,3211,1413],{"class":1337},[1110,3213,3214,3216,3218,3221,3223,3225,3227,3229,3231,3233,3235,3237,3239,3241,3243],{"class":1112,"line":2321},[1110,3215,2610],{"class":1580},[1110,3217,1702],{"class":1337},[1110,3219,3220],{"class":1333}," id",[1110,3222,1724],{"class":1337},[1110,3224,2620],{"class":1337},[1110,3226,2623],{"class":1323},[1110,3228,2906],{"class":1133},[1110,3230,1334],{"class":1343},[1110,3232,2599],{"class":1333},[1110,3234,1708],{"class":1337},[1110,3236,2566],{"class":1333},[1110,3238,1800],{"class":1337},[1110,3240,2638],{"class":1133},[1110,3242,1334],{"class":1343},[1110,3244,1338],{"class":1337},[1110,3246,3247,3250,3252,3254,3256,3259],{"class":1112,"line":2326},[1110,3248,3249],{"class":1343},"    id",[1110,3251,1347],{"class":1337},[1110,3253,2566],{"class":1333},[1110,3255,1800],{"class":1337},[1110,3257,3258],{"class":1133},"string",[1110,3260,2666],{"class":1343},[1110,3262,3263,3265,3267,3269,3271],{"class":1112,"line":2358},[1110,3264,2411],{"class":1337},[1110,3266,1874],{"class":1343},[1110,3268,1800],{"class":1337},[1110,3270,2677],{"class":1333},[1110,3272,1472],{"class":1343},[1110,3274,3275],{"class":1112,"line":2374},[1110,3276,1402],{"emptyLinePlaceholder":21},[1110,3278,3279,3281,3283,3286,3288,3291,3293,3296,3298,3300,3302,3304,3306,3308,3310,3312,3314,3316,3318],{"class":1112,"line":2392},[1110,3280,2610],{"class":1580},[1110,3282,1702],{"class":1337},[1110,3284,3285],{"class":1333}," model",[1110,3287,2620],{"class":1337},[1110,3289,3290],{"class":1333}," DEFAULT_MODEL",[1110,3292,1708],{"class":1337},[1110,3294,3295],{"class":1333}," messages",[1110,3297,1724],{"class":1337},[1110,3299,2620],{"class":1337},[1110,3301,2623],{"class":1323},[1110,3303,2500],{"class":1133},[1110,3305,1334],{"class":1343},[1110,3307,2599],{"class":1333},[1110,3309,1708],{"class":1337},[1110,3311,2566],{"class":1333},[1110,3313,1800],{"class":1337},[1110,3315,2638],{"class":1133},[1110,3317,1334],{"class":1343},[1110,3319,1338],{"class":1337},[1110,3321,3322,3325,3327,3329,3331,3333,3335,3337,3340,3342,3345,3347,3350,3352,3355,3357,3360,3362,3365,3367,3369,3372,3374,3376,3378],{"class":1112,"line":2408},[1110,3323,3324],{"class":1343},"    model",[1110,3326,1347],{"class":1337},[1110,3328,2566],{"class":1333},[1110,3330,1800],{"class":1337},[1110,3332,3258],{"class":1133},[1110,3334,1797],{"class":1343},[1110,3336,1800],{"class":1337},[1110,3338,3339],{"class":1133},"refine",[1110,3341,1334],{"class":1343},[1110,3343,3344],{"class":1934},"value",[1110,3346,1817],{"class":1580},[1110,3348,3349],{"class":1333}," MODELS",[1110,3351,1800],{"class":1337},[1110,3353,3354],{"class":1133},"some",[1110,3356,1334],{"class":1343},[1110,3358,3359],{"class":1934},"m",[1110,3361,1817],{"class":1580},[1110,3363,3364],{"class":1333}," m",[1110,3366,1800],{"class":1337},[1110,3368,3344],{"class":1333},[1110,3370,3371],{"class":1337}," ===",[1110,3373,3094],{"class":1333},[1110,3375,1874],{"class":1343},[1110,3377,1708],{"class":1337},[1110,3379,1413],{"class":1337},[1110,3381,3382,3385,3387,3389,3392],{"class":1112,"line":2416},[1110,3383,3384],{"class":1343},"      message",[1110,3386,1347],{"class":1337},[1110,3388,1424],{"class":1337},[1110,3390,3391],{"class":1120},"Invalid model",[1110,3393,1388],{"class":1337},[1110,3395,3397,3400,3402,3404,3407,3409],{"class":1112,"line":3396},30,[1110,3398,3399],{"class":1337},"    }",[1110,3401,1874],{"class":1343},[1110,3403,1800],{"class":1337},[1110,3405,3406],{"class":1133},"optional",[1110,3408,1797],{"class":1343},[1110,3410,1365],{"class":1337},[1110,3412,3414,3417,3419,3421,3423,3426,3428,3431,3433,3435,3437,3439,3441],{"class":1112,"line":3413},31,[1110,3415,3416],{"class":1343},"    messages",[1110,3418,1347],{"class":1337},[1110,3420,2566],{"class":1333},[1110,3422,1800],{"class":1337},[1110,3424,3425],{"class":1133},"array",[1110,3427,1334],{"class":1343},[1110,3429,3430],{"class":1333},"z",[1110,3432,1800],{"class":1337},[1110,3434,2656],{"class":1133},[1110,3436,1552],{"class":1337},[1110,3438,2477],{"class":1116},[1110,3440,2663],{"class":1337},[1110,3442,1900],{"class":1343},[1110,3444,3446,3448,3450,3452,3454],{"class":1112,"line":3445},32,[1110,3447,2411],{"class":1337},[1110,3449,1874],{"class":1343},[1110,3451,1800],{"class":1337},[1110,3453,2677],{"class":1333},[1110,3455,1472],{"class":1343},[1110,3457,3459],{"class":1112,"line":3458},33,[1110,3460,1402],{"emptyLinePlaceholder":21},[1110,3462,3464],{"class":1112,"line":3463},34,[1110,3465,3466],{"class":2688},"  \u002F\u002F Fetch the chat from the database\n",[1110,3468,3470,3472,3474,3476,3478,3480,3482,3485,3487,3489,3491,3494,3496],{"class":1112,"line":3469},35,[1110,3471,2610],{"class":1580},[1110,3473,2788],{"class":1333},[1110,3475,2620],{"class":1337},[1110,3477,2623],{"class":1323},[1110,3479,2438],{"class":1333},[1110,3481,1800],{"class":1337},[1110,3483,3484],{"class":1333},"query",[1110,3486,1800],{"class":1337},[1110,3488,1779],{"class":1333},[1110,3490,1800],{"class":1337},[1110,3492,3493],{"class":1133},"findFirst",[1110,3495,1334],{"class":1343},[1110,3497,1338],{"class":1337},[1110,3499,3501,3504,3506,3508,3510,3512,3514,3516,3518,3520,3522,3524,3526,3528,3530,3532,3534,3537,3540],{"class":1112,"line":3500},36,[1110,3502,3503],{"class":1133},"    where",[1110,3505,1347],{"class":1337},[1110,3507,1943],{"class":1337},[1110,3509,262],{"class":1934},[1110,3511,1708],{"class":1337},[1110,3513,1702],{"class":1337},[1110,3515,2929],{"class":1934},[1110,3517,1938],{"class":1337},[1110,3519,1817],{"class":1580},[1110,3521,2929],{"class":1133},[1110,3523,1334],{"class":1343},[1110,3525,262],{"class":1333},[1110,3527,1800],{"class":1337},[1110,3529,2011],{"class":1333},[1110,3531,1708],{"class":1337},[1110,3533,3220],{"class":1333},[1110,3535,3536],{"class":1323}," as",[1110,3538,3539],{"class":1116}," string",[1110,3541,1472],{"class":1343},[1110,3543,3545,3547],{"class":1112,"line":3544},37,[1110,3546,2411],{"class":1337},[1110,3548,1472],{"class":1343},[1110,3550,3552],{"class":1112,"line":3551},38,[1110,3553,1402],{"emptyLinePlaceholder":21},[1110,3555,3557,3560,3562,3565,3567,3570],{"class":1112,"line":3556},39,[1110,3558,3559],{"class":1323},"  if",[1110,3561,1943],{"class":1343},[1110,3563,3564],{"class":1337},"!",[1110,3566,262],{"class":1333},[1110,3568,3569],{"class":1343},") ",[1110,3571,1338],{"class":1337},[1110,3573,3575,3578,3580,3582,3584,3587,3589,3593,3595,3598,3600,3602,3605,3607,3609],{"class":1112,"line":3574},40,[1110,3576,3577],{"class":1323},"    throw",[1110,3579,2897],{"class":1133},[1110,3581,1334],{"class":1343},[1110,3583,1857],{"class":1337},[1110,3585,3586],{"class":1343}," statusCode",[1110,3588,1347],{"class":1337},[1110,3590,3592],{"class":3591},"sbssI"," 404",[1110,3594,1708],{"class":1337},[1110,3596,3597],{"class":1343}," statusMessage",[1110,3599,1347],{"class":1337},[1110,3601,1424],{"class":1337},[1110,3603,3604],{"class":1120},"Chat not found",[1110,3606,1362],{"class":1337},[1110,3608,1724],{"class":1337},[1110,3610,1472],{"class":1343},[1110,3612,3614],{"class":1112,"line":3613},41,[1110,3615,3616],{"class":1337},"  }\n",[1110,3618,3620],{"class":1112,"line":3619},42,[1110,3621,1402],{"emptyLinePlaceholder":21},[1110,3623,3625],{"class":1112,"line":3624},43,[1110,3626,3627],{"class":2688},"  \u002F\u002F Generate a title for the chat if it doesn't have one\n",[1110,3629,3631,3633,3635,3637,3639,3641,3644,3646],{"class":1112,"line":3630},44,[1110,3632,3559],{"class":1323},[1110,3634,1943],{"class":1343},[1110,3636,3564],{"class":1337},[1110,3638,262],{"class":1333},[1110,3640,1800],{"class":1337},[1110,3642,3643],{"class":1333},"title",[1110,3645,3569],{"class":1343},[1110,3647,1338],{"class":1337},[1110,3649,3651,3654,3656,3658,3660,3663,3665,3667,3669,3672,3674],{"class":1112,"line":3650},45,[1110,3652,3653],{"class":1580},"    const",[1110,3655,1702],{"class":1337},[1110,3657,1711],{"class":1343},[1110,3659,1347],{"class":1337},[1110,3661,3662],{"class":1333}," title",[1110,3664,1724],{"class":1337},[1110,3666,2620],{"class":1337},[1110,3668,2623],{"class":1323},[1110,3670,3671],{"class":1133}," generateText",[1110,3673,1334],{"class":1343},[1110,3675,1338],{"class":1337},[1110,3677,3679,3682,3684,3686],{"class":1112,"line":3678},46,[1110,3680,3681],{"class":1343},"      model",[1110,3683,1347],{"class":1337},[1110,3685,3290],{"class":1333},[1110,3687,1365],{"class":1337},[1110,3689,3691,3694,3696,3699,3702,3705],{"class":1112,"line":3690},47,[1110,3692,3693],{"class":1343},"      system",[1110,3695,1347],{"class":1337},[1110,3697,3698],{"class":1337}," `",[1110,3700,3701],{"class":1120},"Generate a short title (max 30 characters) based on the user's message. No quotes or punctuation.",[1110,3703,3704],{"class":1337},"`",[1110,3706,1365],{"class":1337},[1110,3708,3710,3713,3715,3718,3720,3723,3725,3727,3730,3733],{"class":1112,"line":3709},48,[1110,3711,3712],{"class":1343},"      prompt",[1110,3714,1347],{"class":1337},[1110,3716,3717],{"class":1333}," JSON",[1110,3719,1800],{"class":1337},[1110,3721,3722],{"class":1133},"stringify",[1110,3724,1334],{"class":1343},[1110,3726,1989],{"class":1333},[1110,3728,3729],{"class":1343},"[",[1110,3731,3732],{"class":3591},"0",[1110,3734,2318],{"class":1343},[1110,3736,3738,3740],{"class":1112,"line":3737},49,[1110,3739,3399],{"class":1337},[1110,3741,1472],{"class":1343},[1110,3743,3745],{"class":1112,"line":3744},50,[1110,3746,1402],{"emptyLinePlaceholder":21},[1110,3748,3750,3753,3755,3757,3760,3762,3764,3766,3768,3770,3772,3775,3777,3779,3781,3783,3785,3787,3790,3792,3795,3797,3799,3801,3803,3805,3807,3809,3811],{"class":1112,"line":3749},51,[1110,3751,3752],{"class":1323},"    await",[1110,3754,2438],{"class":1333},[1110,3756,1800],{"class":1337},[1110,3758,3759],{"class":1133},"update",[1110,3761,1334],{"class":1343},[1110,3763,2715],{"class":1333},[1110,3765,1800],{"class":1337},[1110,3767,1779],{"class":1333},[1110,3769,1874],{"class":1343},[1110,3771,1800],{"class":1337},[1110,3773,3774],{"class":1133},"set",[1110,3776,1334],{"class":1343},[1110,3778,1857],{"class":1337},[1110,3780,3662],{"class":1333},[1110,3782,1724],{"class":1337},[1110,3784,1874],{"class":1343},[1110,3786,1800],{"class":1337},[1110,3788,3789],{"class":1133},"where",[1110,3791,1334],{"class":1343},[1110,3793,3794],{"class":1133},"eq",[1110,3796,1334],{"class":1343},[1110,3798,2715],{"class":1333},[1110,3800,1800],{"class":1337},[1110,3802,1779],{"class":1333},[1110,3804,1800],{"class":1337},[1110,3806,2011],{"class":1333},[1110,3808,1708],{"class":1337},[1110,3810,3220],{"class":1333},[1110,3812,1964],{"class":1343},[1110,3814,3816],{"class":1112,"line":3815},52,[1110,3817,3616],{"class":1337},[1110,3819,3821],{"class":1112,"line":3820},53,[1110,3822,1402],{"emptyLinePlaceholder":21},[1110,3824,3826],{"class":1112,"line":3825},54,[1110,3827,3828],{"class":2688},"  \u002F\u002F Save the user message if it's a follow-up\n",[1110,3830,3832,3834,3837,3839,3841,3843,3845,3847,3850,3853,3856],{"class":1112,"line":3831},55,[1110,3833,2610],{"class":1580},[1110,3835,3836],{"class":1333}," lastMessage",[1110,3838,2620],{"class":1337},[1110,3840,3295],{"class":1333},[1110,3842,3729],{"class":1343},[1110,3844,1989],{"class":1333},[1110,3846,1800],{"class":1337},[1110,3848,3849],{"class":1333},"length",[1110,3851,3852],{"class":1337}," -",[1110,3854,3855],{"class":3591}," 1",[1110,3857,3185],{"class":1343},[1110,3859,3861,3863,3865,3868,3871,3873,3875,3877,3879,3881,3884,3886,3888,3890,3893,3895,3897],{"class":1112,"line":3860},56,[1110,3862,3559],{"class":1323},[1110,3864,1943],{"class":1343},[1110,3866,3867],{"class":1333},"lastMessage",[1110,3869,3870],{"class":1337},"?.",[1110,3872,2125],{"class":1333},[1110,3874,3371],{"class":1337},[1110,3876,1424],{"class":1337},[1110,3878,2143],{"class":1120},[1110,3880,1362],{"class":1337},[1110,3882,3883],{"class":1337}," &&",[1110,3885,3295],{"class":1333},[1110,3887,1800],{"class":1337},[1110,3889,3849],{"class":1333},[1110,3891,3892],{"class":1337}," >",[1110,3894,3855],{"class":3591},[1110,3896,3569],{"class":1343},[1110,3898,1338],{"class":1337},[1110,3900,3902,3904,3906,3908,3910,3912,3914,3916,3918,3920,3922,3924,3926],{"class":1112,"line":3901},57,[1110,3903,3752],{"class":1323},[1110,3905,2438],{"class":1333},[1110,3907,1800],{"class":1337},[1110,3909,2710],{"class":1133},[1110,3911,1334],{"class":1343},[1110,3913,2715],{"class":1333},[1110,3915,1800],{"class":1337},[1110,3917,1989],{"class":1333},[1110,3919,1874],{"class":1343},[1110,3921,1800],{"class":1337},[1110,3923,2726],{"class":1133},[1110,3925,1334],{"class":1343},[1110,3927,1338],{"class":1337},[1110,3929,3931,3934,3936,3938],{"class":1112,"line":3930},58,[1110,3932,3933],{"class":1343},"      chatId",[1110,3935,1347],{"class":1337},[1110,3937,3220],{"class":1333},[1110,3939,1365],{"class":1337},[1110,3941,3943,3946,3948,3950,3952,3954],{"class":1112,"line":3942},59,[1110,3944,3945],{"class":1343},"      role",[1110,3947,1347],{"class":1337},[1110,3949,1424],{"class":1337},[1110,3951,2143],{"class":1120},[1110,3953,1362],{"class":1337},[1110,3955,1365],{"class":1337},[1110,3957,3959,3962,3964,3966,3968],{"class":1112,"line":3958},60,[1110,3960,3961],{"class":1343},"      parts",[1110,3963,1347],{"class":1337},[1110,3965,3836],{"class":1333},[1110,3967,1800],{"class":1337},[1110,3969,2823],{"class":1333},[1110,3971,3973,3975],{"class":1112,"line":3972},61,[1110,3974,3399],{"class":1337},[1110,3976,1472],{"class":1343},[1110,3978,3980],{"class":1112,"line":3979},62,[1110,3981,3616],{"class":1337},[1110,3983,3985],{"class":1112,"line":3984},63,[1110,3986,1402],{"emptyLinePlaceholder":21},[1110,3988,3990],{"class":1112,"line":3989},64,[1110,3991,3992],{"class":2688},"  \u002F\u002F Create the streaming response\n",[1110,3994,3996,3998,4001,4003,4006,4008],{"class":1112,"line":3995},65,[1110,3997,2610],{"class":1580},[1110,3999,4000],{"class":1333}," stream",[1110,4002,2620],{"class":1337},[1110,4004,4005],{"class":1133}," createUIMessageStream",[1110,4007,1334],{"class":1343},[1110,4009,1338],{"class":1337},[1110,4011,4013,4016,4018,4021,4023,4026,4028,4030],{"class":1112,"line":4012},66,[1110,4014,4015],{"class":1133},"    execute",[1110,4017,1347],{"class":1337},[1110,4019,4020],{"class":1580}," async",[1110,4022,1931],{"class":1337},[1110,4024,4025],{"class":1934}," writer",[1110,4027,1938],{"class":1337},[1110,4029,1817],{"class":1580},[1110,4031,1413],{"class":1337},[1110,4033,4035,4038,4041,4043,4046,4048],{"class":1112,"line":4034},67,[1110,4036,4037],{"class":1580},"      const",[1110,4039,4040],{"class":1333}," result",[1110,4042,2620],{"class":1337},[1110,4044,4045],{"class":1133}," streamText",[1110,4047,1334],{"class":1343},[1110,4049,1338],{"class":1337},[1110,4051,4053,4056],{"class":1112,"line":4052},68,[1110,4054,4055],{"class":1333},"        model",[1110,4057,1365],{"class":1337},[1110,4059,4061,4064,4066,4068,4071,4073],{"class":1112,"line":4060},69,[1110,4062,4063],{"class":1343},"        system",[1110,4065,1347],{"class":1337},[1110,4067,3698],{"class":1337},[1110,4069,4070],{"class":1120},"You are a helpful AI assistant. Be concise and friendly.",[1110,4072,3704],{"class":1337},[1110,4074,1365],{"class":1337},[1110,4076,4078,4081,4083,4085,4088,4090,4092,4094],{"class":1112,"line":4077},70,[1110,4079,4080],{"class":1343},"        messages",[1110,4082,1347],{"class":1337},[1110,4084,2623],{"class":1323},[1110,4086,4087],{"class":1133}," convertToModelMessages",[1110,4089,1334],{"class":1343},[1110,4091,1989],{"class":1333},[1110,4093,1874],{"class":1343},[1110,4095,1365],{"class":1337},[1110,4097,4099,4102,4104],{"class":1112,"line":4098},71,[1110,4100,4101],{"class":1343},"        providerOptions",[1110,4103,1347],{"class":1337},[1110,4105,1413],{"class":1337},[1110,4107,4109,4112,4114],{"class":1112,"line":4108},72,[1110,4110,4111],{"class":1343},"          anthropic",[1110,4113,1347],{"class":1337},[1110,4115,1413],{"class":1337},[1110,4117,4119,4122,4124],{"class":1112,"line":4118},73,[1110,4120,4121],{"class":1343},"            thinking",[1110,4123,1347],{"class":1337},[1110,4125,1413],{"class":1337},[1110,4127,4129,4132,4134,4136,4139,4141],{"class":1112,"line":4128},74,[1110,4130,4131],{"class":1343},"              type",[1110,4133,1347],{"class":1337},[1110,4135,1424],{"class":1337},[1110,4137,4138],{"class":1120},"enabled",[1110,4140,1362],{"class":1337},[1110,4142,1365],{"class":1337},[1110,4144,4146,4149,4151],{"class":1112,"line":4145},75,[1110,4147,4148],{"class":1343},"              budgetTokens",[1110,4150,1347],{"class":1337},[1110,4152,4153],{"class":3591}," 2048\n",[1110,4155,4157],{"class":1112,"line":4156},76,[1110,4158,4159],{"class":1337},"            }\n",[1110,4161,4163],{"class":1112,"line":4162},77,[1110,4164,4165],{"class":1337},"          },\n",[1110,4167,4169,4172,4174],{"class":1112,"line":4168},78,[1110,4170,4171],{"class":1343},"          google",[1110,4173,1347],{"class":1337},[1110,4175,1413],{"class":1337},[1110,4177,4179,4182,4184],{"class":1112,"line":4178},79,[1110,4180,4181],{"class":1343},"            thinkingConfig",[1110,4183,1347],{"class":1337},[1110,4185,1413],{"class":1337},[1110,4187,4189,4192,4194,4198],{"class":1112,"line":4188},80,[1110,4190,4191],{"class":1343},"              includeThoughts",[1110,4193,1347],{"class":1337},[1110,4195,4197],{"class":4196},"sfNiH"," true",[1110,4199,1365],{"class":1337},[1110,4201,4203,4206,4208,4210,4213],{"class":1112,"line":4202},81,[1110,4204,4205],{"class":1343},"              thinkingLevel",[1110,4207,1347],{"class":1337},[1110,4209,1424],{"class":1337},[1110,4211,4212],{"class":1120},"low",[1110,4214,1388],{"class":1337},[1110,4216,4218],{"class":1112,"line":4217},82,[1110,4219,4159],{"class":1337},[1110,4221,4223],{"class":1112,"line":4222},83,[1110,4224,4165],{"class":1337},[1110,4226,4228,4231,4233],{"class":1112,"line":4227},84,[1110,4229,4230],{"class":1343},"          openai",[1110,4232,1347],{"class":1337},[1110,4234,1413],{"class":1337},[1110,4236,4238,4241,4243,4245,4247,4249],{"class":1112,"line":4237},85,[1110,4239,4240],{"class":1343},"            reasoningEffort",[1110,4242,1347],{"class":1337},[1110,4244,1424],{"class":1337},[1110,4246,4212],{"class":1120},[1110,4248,1362],{"class":1337},[1110,4250,1365],{"class":1337},[1110,4252,4254,4257,4259,4261,4264],{"class":1112,"line":4253},86,[1110,4255,4256],{"class":1343},"            reasoningSummary",[1110,4258,1347],{"class":1337},[1110,4260,1424],{"class":1337},[1110,4262,4263],{"class":1120},"detailed",[1110,4265,1388],{"class":1337},[1110,4267,4269],{"class":1112,"line":4268},87,[1110,4270,4271],{"class":1337},"          }\n",[1110,4273,4275],{"class":1112,"line":4274},88,[1110,4276,4277],{"class":1337},"        }\n",[1110,4279,4281,4284],{"class":1112,"line":4280},89,[1110,4282,4283],{"class":1337},"      }",[1110,4285,1472],{"class":1343},[1110,4287,4289],{"class":1112,"line":4288},90,[1110,4290,1402],{"emptyLinePlaceholder":21},[1110,4292,4294],{"class":1112,"line":4293},91,[1110,4295,4296],{"class":2688},"      \u002F\u002F Notify the client that a title was generated\n",[1110,4298,4300,4303,4305,4307,4309,4311,4313,4315],{"class":1112,"line":4299},92,[1110,4301,4302],{"class":1323},"      if",[1110,4304,1943],{"class":1343},[1110,4306,3564],{"class":1337},[1110,4308,262],{"class":1333},[1110,4310,1800],{"class":1337},[1110,4312,3643],{"class":1333},[1110,4314,3569],{"class":1343},[1110,4316,1338],{"class":1337},[1110,4318,4320,4323,4325,4328,4330],{"class":1112,"line":4319},93,[1110,4321,4322],{"class":1333},"        writer",[1110,4324,1800],{"class":1337},[1110,4326,4327],{"class":1133},"write",[1110,4329,1334],{"class":1343},[1110,4331,1338],{"class":1337},[1110,4333,4335,4338,4340,4342,4345,4347],{"class":1112,"line":4334},94,[1110,4336,4337],{"class":1343},"          type",[1110,4339,1347],{"class":1337},[1110,4341,1424],{"class":1337},[1110,4343,4344],{"class":1120},"data-chat-title",[1110,4346,1362],{"class":1337},[1110,4348,1365],{"class":1337},[1110,4350,4352,4355,4357,4359,4361,4363,4365,4368,4370],{"class":1112,"line":4351},95,[1110,4353,4354],{"class":1343},"          data",[1110,4356,1347],{"class":1337},[1110,4358,1702],{"class":1337},[1110,4360,2615],{"class":1343},[1110,4362,1347],{"class":1337},[1110,4364,1424],{"class":1337},[1110,4366,4367],{"class":1120},"Title generated",[1110,4369,1362],{"class":1337},[1110,4371,3120],{"class":1337},[1110,4373,4375,4378,4380],{"class":1112,"line":4374},96,[1110,4376,4377],{"class":1343},"          transient",[1110,4379,1347],{"class":1337},[1110,4381,4382],{"class":4196}," true\n",[1110,4384,4386,4389],{"class":1112,"line":4385},97,[1110,4387,4388],{"class":1337},"        }",[1110,4390,1472],{"class":1343},[1110,4392,4394],{"class":1112,"line":4393},98,[1110,4395,4396],{"class":1337},"      }\n",[1110,4398,4400],{"class":1112,"line":4399},99,[1110,4401,1402],{"emptyLinePlaceholder":21},[1110,4403,4405,4408,4410,4413,4415,4418,4420,4423],{"class":1112,"line":4404},100,[1110,4406,4407],{"class":1333},"      writer",[1110,4409,1800],{"class":1337},[1110,4411,4412],{"class":1133},"merge",[1110,4414,1334],{"class":1343},[1110,4416,4417],{"class":1333},"result",[1110,4419,1800],{"class":1337},[1110,4421,4422],{"class":1133},"toUIMessageStream",[1110,4424,1900],{"class":1343},[1110,4426,4428],{"class":1112,"line":4427},101,[1110,4429,4430],{"class":1337},"    },\n",[1110,4432,4434,4437,4439,4441,4443,4445,4447,4449],{"class":1112,"line":4433},102,[1110,4435,4436],{"class":1133},"    onFinish",[1110,4438,1347],{"class":1337},[1110,4440,4020],{"class":1580},[1110,4442,1931],{"class":1337},[1110,4444,3295],{"class":1934},[1110,4446,1938],{"class":1337},[1110,4448,1817],{"class":1580},[1110,4450,1413],{"class":1337},[1110,4452,4454],{"class":1112,"line":4453},103,[1110,4455,4456],{"class":2688},"      \u002F\u002F Save the assistant's response to the database\n",[1110,4458,4460,4463,4465,4467,4469,4471,4473,4475,4477,4479,4481,4483,4485,4487,4489,4492,4494,4497,4499,4501],{"class":1112,"line":4459},104,[1110,4461,4462],{"class":1323},"      await",[1110,4464,2438],{"class":1333},[1110,4466,1800],{"class":1337},[1110,4468,2710],{"class":1133},[1110,4470,1334],{"class":1343},[1110,4472,2715],{"class":1333},[1110,4474,1800],{"class":1337},[1110,4476,1989],{"class":1333},[1110,4478,1874],{"class":1343},[1110,4480,1800],{"class":1337},[1110,4482,2726],{"class":1133},[1110,4484,1334],{"class":1343},[1110,4486,1989],{"class":1333},[1110,4488,1800],{"class":1337},[1110,4490,4491],{"class":1133},"map",[1110,4493,1334],{"class":1343},[1110,4495,4496],{"class":1934},"message",[1110,4498,1817],{"class":1580},[1110,4500,1943],{"class":1343},[1110,4502,1338],{"class":1337},[1110,4504,4506,4509,4511,4513,4515,4517],{"class":1112,"line":4505},105,[1110,4507,4508],{"class":1343},"        chatId",[1110,4510,1347],{"class":1337},[1110,4512,2788],{"class":1333},[1110,4514,1800],{"class":1337},[1110,4516,2011],{"class":1333},[1110,4518,1365],{"class":1337},[1110,4520,4522,4525,4527,4529,4531,4533,4535,4537,4539,4541,4544,4546,4548,4550],{"class":1112,"line":4521},106,[1110,4523,4524],{"class":1343},"        role",[1110,4526,1347],{"class":1337},[1110,4528,2615],{"class":1333},[1110,4530,1800],{"class":1337},[1110,4532,2125],{"class":1333},[1110,4534,3536],{"class":1323},[1110,4536,1424],{"class":1337},[1110,4538,2143],{"class":1120},[1110,4540,1362],{"class":1337},[1110,4542,4543],{"class":1337}," |",[1110,4545,1424],{"class":1337},[1110,4547,2152],{"class":1120},[1110,4549,1362],{"class":1337},[1110,4551,1365],{"class":1337},[1110,4553,4555,4558,4560,4562,4564],{"class":1112,"line":4554},107,[1110,4556,4557],{"class":1343},"        parts",[1110,4559,1347],{"class":1337},[1110,4561,2615],{"class":1333},[1110,4563,1800],{"class":1337},[1110,4565,2823],{"class":1333},[1110,4567,4569,4571],{"class":1112,"line":4568},108,[1110,4570,4283],{"class":1337},[1110,4572,4573],{"class":1343},")))\n",[1110,4575,4577],{"class":1112,"line":4576},109,[1110,4578,4579],{"class":1337},"    }\n",[1110,4581,4583,4585],{"class":1112,"line":4582},110,[1110,4584,2411],{"class":1337},[1110,4586,1472],{"class":1343},[1110,4588,4590],{"class":1112,"line":4589},111,[1110,4591,1402],{"emptyLinePlaceholder":21},[1110,4593,4595,4597,4600,4602,4604,4606,4608],{"class":1112,"line":4594},112,[1110,4596,2838],{"class":1323},[1110,4598,4599],{"class":1133}," createUIMessageStreamResponse",[1110,4601,1334],{"class":1343},[1110,4603,1857],{"class":1337},[1110,4605,4000],{"class":1333},[1110,4607,1724],{"class":1337},[1110,4609,1472],{"class":1343},[1110,4611,4613,4615],{"class":1112,"line":4612},113,[1110,4614,1469],{"class":1337},[1110,4616,1472],{"class":1333},[1000,4618,4619],{},"Here's what each part does:",[1000,4621,4622],{},[1018,4623,4624],{},"AI Gateway",[1000,4626,4627,4628,4631],{},"Thanks to ",[1054,4629,1091],{"href":1089,"rel":4630},[1058],", we can use any AI model supported by the gateway just by specifying the model name.",[1000,4633,4634],{},[1018,4635,4636],{},"Automatic Title Generation",[1000,4638,4639,4640,4647],{},"When a chat doesn't have a title yet, we use ",[1054,4641,4644],{"href":4642,"rel":4643},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-core\u002Fgenerate-text#generatetext",[1058],[1060,4645,4646],{},"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\".",[1000,4649,4650],{},[1018,4651,4652],{},"Streaming with streamText",[1000,4654,4655,4656,4661],{},"The ",[1054,4657,4659],{"href":2857,"rel":4658},[1058],[1060,4660,2861],{}," function generates a streaming response from the AI model. Key options include:",[1012,4663,4664,4670,4675],{},[1015,4665,4666,4669],{},[1060,4667,4668],{},"model",": The AI model to use",[1015,4671,4672,4674],{},[1060,4673,2161],{},": Instructions that guide the AI's behavior",[1015,4676,4677,4679],{},[1060,4678,1989],{},": The conversation history",[1000,4681,4682],{},[1018,4683,4684],{},"UIMessageStream",[1000,4686,4655,4687,1063,4693,4699],{},[1054,4688,4691],{"href":4689,"rel":4690},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream#createuimessagestream",[1058],[1060,4692,2869],{},[1054,4694,4697],{"href":4695,"rel":4696},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream-response#createuimessagestreamresponse",[1058],[1060,4698,2877],{}," 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.",[1000,4701,4655,4702,4705,4706,4708,4709,4712],{},[1060,4703,4704],{},"writer.write()"," method allows sending custom data events to the client (like ",[1060,4707,4344],{},"), while ",[1060,4710,4711],{},"onFinish"," is called when streaming completes, perfect for persisting the assistant's response.",[1138,4714,4716],{"id":4715},"fetching-a-chat","Fetching a chat",[1000,4718,4719],{},"Add an endpoint to fetch existing chat data from your database:",[1310,4721,4722],{},[1101,4723,4726],{"className":1314,"code":4724,"filename":4725,"language":1316,"meta":1106,"style":1106},"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",[1060,4727,4728,4754,4777,4799,4817,4821,4843,4875,4889,4901,4905,4933,4964,4973,4982,5011,5015,5019,5025,5029,5043,5075,5079,5083,5089],{"__ignoreMap":1106},[1110,4729,4730,4732,4734,4736,4738,4740,4742,4744,4746,4748,4750,4752],{"class":1112,"line":1113},[1110,4731,1699],{"class":1323},[1110,4733,1702],{"class":1337},[1110,4735,2897],{"class":1333},[1110,4737,1708],{"class":1337},[1110,4739,2495],{"class":1333},[1110,4741,1708],{"class":1337},[1110,4743,2906],{"class":1333},[1110,4745,1724],{"class":1337},[1110,4747,1727],{"class":1323},[1110,4749,1424],{"class":1337},[1110,4751,1138],{"class":1120},[1110,4753,1388],{"class":1337},[1110,4755,4756,4758,4760,4763,4765,4767,4769,4771,4773,4775],{"class":1112,"line":1130},[1110,4757,1699],{"class":1323},[1110,4759,1702],{"class":1337},[1110,4761,4762],{"class":1333}," asc",[1110,4764,1708],{"class":1337},[1110,4766,2929],{"class":1333},[1110,4768,1724],{"class":1337},[1110,4770,1727],{"class":1323},[1110,4772,1424],{"class":1337},[1110,4774,1752],{"class":1120},[1110,4776,1388],{"class":1337},[1110,4778,4779,4781,4783,4785,4787,4789,4791,4793,4795,4797],{"class":1112,"line":1353},[1110,4780,1699],{"class":1323},[1110,4782,1702],{"class":1337},[1110,4784,2438],{"class":1333},[1110,4786,1708],{"class":1337},[1110,4788,2546],{"class":1333},[1110,4790,1724],{"class":1337},[1110,4792,1727],{"class":1323},[1110,4794,1424],{"class":1337},[1110,4796,2555],{"class":1120},[1110,4798,1388],{"class":1337},[1110,4800,4801,4803,4805,4807,4809,4811,4813,4815],{"class":1112,"line":1368},[1110,4802,1699],{"class":1323},[1110,4804,1702],{"class":1337},[1110,4806,2566],{"class":1333},[1110,4808,1724],{"class":1337},[1110,4810,1727],{"class":1323},[1110,4812,1424],{"class":1337},[1110,4814,2575],{"class":1120},[1110,4816,1388],{"class":1337},[1110,4818,4819],{"class":1112,"line":1380},[1110,4820,1402],{"emptyLinePlaceholder":21},[1110,4822,4823,4825,4827,4829,4831,4833,4835,4837,4839,4841],{"class":1112,"line":1391},[1110,4824,1324],{"class":1323},[1110,4826,1327],{"class":1323},[1110,4828,2495],{"class":1133},[1110,4830,1334],{"class":1333},[1110,4832,2594],{"class":1580},[1110,4834,1943],{"class":1337},[1110,4836,2599],{"class":1934},[1110,4838,1874],{"class":1337},[1110,4840,1817],{"class":1580},[1110,4842,1413],{"class":1337},[1110,4844,4845,4847,4849,4851,4853,4855,4857,4859,4861,4863,4865,4867,4869,4871,4873],{"class":1112,"line":1399},[1110,4846,2610],{"class":1580},[1110,4848,1702],{"class":1337},[1110,4850,3220],{"class":1333},[1110,4852,1724],{"class":1337},[1110,4854,2620],{"class":1337},[1110,4856,2623],{"class":1323},[1110,4858,2906],{"class":1133},[1110,4860,1334],{"class":1343},[1110,4862,2599],{"class":1333},[1110,4864,1708],{"class":1337},[1110,4866,2566],{"class":1333},[1110,4868,1800],{"class":1337},[1110,4870,2638],{"class":1133},[1110,4872,1334],{"class":1343},[1110,4874,1338],{"class":1337},[1110,4876,4877,4879,4881,4883,4885,4887],{"class":1112,"line":1405},[1110,4878,3249],{"class":1343},[1110,4880,1347],{"class":1337},[1110,4882,2566],{"class":1333},[1110,4884,1800],{"class":1337},[1110,4886,3258],{"class":1133},[1110,4888,2666],{"class":1343},[1110,4890,4891,4893,4895,4897,4899],{"class":1112,"line":1416},[1110,4892,2411],{"class":1337},[1110,4894,1874],{"class":1343},[1110,4896,1800],{"class":1337},[1110,4898,2677],{"class":1333},[1110,4900,1472],{"class":1343},[1110,4902,4903],{"class":1112,"line":1432},[1110,4904,1402],{"emptyLinePlaceholder":21},[1110,4906,4907,4909,4911,4913,4915,4917,4919,4921,4923,4925,4927,4929,4931],{"class":1112,"line":1438},[1110,4908,2610],{"class":1580},[1110,4910,2788],{"class":1333},[1110,4912,2620],{"class":1337},[1110,4914,2623],{"class":1323},[1110,4916,2438],{"class":1333},[1110,4918,1800],{"class":1337},[1110,4920,3484],{"class":1333},[1110,4922,1800],{"class":1337},[1110,4924,1779],{"class":1333},[1110,4926,1800],{"class":1337},[1110,4928,3493],{"class":1133},[1110,4930,1334],{"class":1343},[1110,4932,1338],{"class":1337},[1110,4934,4935,4937,4939,4941,4943,4945,4947,4949,4951,4953,4955,4957,4959,4962],{"class":1112,"line":1443},[1110,4936,3503],{"class":1343},[1110,4938,1347],{"class":1337},[1110,4940,1943],{"class":1343},[1110,4942,3794],{"class":1133},[1110,4944,1334],{"class":1343},[1110,4946,2715],{"class":1333},[1110,4948,1800],{"class":1337},[1110,4950,1779],{"class":1333},[1110,4952,1800],{"class":1337},[1110,4954,2011],{"class":1333},[1110,4956,1708],{"class":1337},[1110,4958,3220],{"class":1333},[1110,4960,4961],{"class":1343},"))",[1110,4963,1365],{"class":1337},[1110,4965,4966,4969,4971],{"class":1112,"line":1466},[1110,4967,4968],{"class":1343},"    with",[1110,4970,1347],{"class":1337},[1110,4972,1413],{"class":1337},[1110,4974,4975,4978,4980],{"class":1112,"line":1971},[1110,4976,4977],{"class":1343},"      messages",[1110,4979,1347],{"class":1337},[1110,4981,1413],{"class":1337},[1110,4983,4984,4987,4989,4992,4994,4996,4998,5000,5002,5004,5006,5009],{"class":1112,"line":1998},[1110,4985,4986],{"class":1133},"        orderBy",[1110,4988,1347],{"class":1337},[1110,4990,4991],{"class":1337}," ()",[1110,4993,1817],{"class":1580},[1110,4995,4762],{"class":1133},[1110,4997,1334],{"class":1343},[1110,4999,2715],{"class":1333},[1110,5001,1800],{"class":1337},[1110,5003,1989],{"class":1333},[1110,5005,1800],{"class":1337},[1110,5007,5008],{"class":1333},"createdAt",[1110,5010,1472],{"class":1343},[1110,5012,5013],{"class":1112,"line":2044},[1110,5014,4396],{"class":1337},[1110,5016,5017],{"class":1112,"line":2111},[1110,5018,4579],{"class":1337},[1110,5020,5021,5023],{"class":1112,"line":2181},[1110,5022,2411],{"class":1337},[1110,5024,1472],{"class":1343},[1110,5026,5027],{"class":1112,"line":2221},[1110,5028,1402],{"emptyLinePlaceholder":21},[1110,5030,5031,5033,5035,5037,5039,5041],{"class":1112,"line":2272},[1110,5032,3559],{"class":1323},[1110,5034,1943],{"class":1343},[1110,5036,3564],{"class":1337},[1110,5038,262],{"class":1333},[1110,5040,3569],{"class":1343},[1110,5042,1338],{"class":1337},[1110,5044,5045,5047,5049,5051,5053,5055,5057,5059,5061,5063,5065,5067,5069,5071,5073],{"class":1112,"line":2285},[1110,5046,3577],{"class":1323},[1110,5048,2897],{"class":1133},[1110,5050,1334],{"class":1343},[1110,5052,1857],{"class":1337},[1110,5054,3586],{"class":1343},[1110,5056,1347],{"class":1337},[1110,5058,3592],{"class":3591},[1110,5060,1708],{"class":1337},[1110,5062,3597],{"class":1343},[1110,5064,1347],{"class":1337},[1110,5066,1424],{"class":1337},[1110,5068,3604],{"class":1120},[1110,5070,1362],{"class":1337},[1110,5072,1724],{"class":1337},[1110,5074,1472],{"class":1343},[1110,5076,5077],{"class":1112,"line":2315},[1110,5078,3616],{"class":1337},[1110,5080,5081],{"class":1112,"line":2321},[1110,5082,1402],{"emptyLinePlaceholder":21},[1110,5084,5085,5087],{"class":1112,"line":2326},[1110,5086,2838],{"class":1323},[1110,5088,2841],{"class":1333},[1110,5090,5091,5093],{"class":1112,"line":2358},[1110,5092,1469],{"class":1337},[1110,5094,1472],{"class":1333},[1004,5096,5098],{"id":5097},"wire-up-the-ui","Wire up the UI",[1000,5100,5101,5102,5107,5108,5113],{},"Nuxt UI provides purpose-built components for AI chat interfaces: ",[1054,5103,5104],{"href":281},[1060,5105,5106],{},"UChatPrompt"," for the input area and ",[1054,5109,5110],{"href":271},[1060,5111,5112],{},"UChatMessages"," for displaying the conversation.",[1138,5115,5117],{"id":5116},"creating-the-home-page","Creating the home page",[1000,5119,5120,5121,5125],{},"The home page is where users start a new conversation. The ",[1054,5122,5123],{"href":281},[1060,5124,5106],{}," component provides a textarea with auto-resize, keyboard shortcuts, and a submit button:",[1310,5127,5128],{},[1101,5129,5133],{"className":1542,"code":5130,"filename":5131,"highlights":5132,"language":34,"meta":1106,"style":1106},"\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",[3463,3469,3500,3544,3551,3556,3574,3613,3619],[1060,5134,5135,5158,5177,5195,5199,5213,5239,5243,5256,5260,5265,5291,5307,5316,5324,5338,5376,5380,5384,5390,5394,5399,5425,5430,5438,5442,5450,5471,5485,5506,5527,5532,5541,5545,5553,5568,5583,5598,5613,5628,5634,5657,5666,5675,5683,5691],{"__ignoreMap":1106},[1110,5136,5137,5139,5142,5145,5148,5150,5152,5154,5156],{"class":1112,"line":1113},[1110,5138,1552],{"class":1337},[1110,5140,5141],{"class":1343},"script",[1110,5143,5144],{"class":1580}," setup",[1110,5146,5147],{"class":1580}," lang",[1110,5149,1584],{"class":1337},[1110,5151,1511],{"class":1337},[1110,5153,1316],{"class":1120},[1110,5155,1511],{"class":1337},[1110,5157,1558],{"class":1337},[1110,5159,5160,5162,5165,5167,5170,5172,5175],{"class":1112,"line":1130},[1110,5161,3059],{"class":1580},[1110,5163,5164],{"class":1333}," input ",[1110,5166,1584],{"class":1337},[1110,5168,5169],{"class":1133}," ref",[1110,5171,1334],{"class":1333},[1110,5173,5174],{"class":1337},"''",[1110,5176,1472],{"class":1333},[1110,5178,5179,5181,5184,5186,5188,5190,5193],{"class":1112,"line":1353},[1110,5180,3059],{"class":1580},[1110,5182,5183],{"class":1333}," loading ",[1110,5185,1584],{"class":1337},[1110,5187,5169],{"class":1133},[1110,5189,1334],{"class":1333},[1110,5191,5192],{"class":4196},"false",[1110,5194,1472],{"class":1333},[1110,5196,5197],{"class":1112,"line":1368},[1110,5198,1402],{"emptyLinePlaceholder":21},[1110,5200,5201,5203,5206,5209,5211],{"class":1112,"line":1380},[1110,5202,2594],{"class":1580},[1110,5204,5205],{"class":1580}," function",[1110,5207,5208],{"class":1133}," createChat",[1110,5210,1797],{"class":1337},[1110,5212,1413],{"class":1337},[1110,5214,5215,5217,5219,5221,5224,5226,5228,5230,5233,5236],{"class":1112,"line":1391},[1110,5216,3559],{"class":1323},[1110,5218,1943],{"class":1343},[1110,5220,3564],{"class":1337},[1110,5222,5223],{"class":1333},"input",[1110,5225,1800],{"class":1337},[1110,5227,3344],{"class":1333},[1110,5229,1800],{"class":1337},[1110,5231,5232],{"class":1133},"trim",[1110,5234,5235],{"class":1343},"()) ",[1110,5237,5238],{"class":1323},"return\n",[1110,5240,5241],{"class":1112,"line":1399},[1110,5242,1402],{"emptyLinePlaceholder":21},[1110,5244,5245,5248,5250,5252,5254],{"class":1112,"line":1405},[1110,5246,5247],{"class":1333},"  loading",[1110,5249,1800],{"class":1337},[1110,5251,3344],{"class":1333},[1110,5253,2620],{"class":1337},[1110,5255,4382],{"class":4196},[1110,5257,5258],{"class":1112,"line":1416},[1110,5259,1402],{"emptyLinePlaceholder":21},[1110,5261,5262],{"class":1112,"line":1432},[1110,5263,5264],{"class":2688},"  \u002F\u002F Create a new chat on the server\n",[1110,5266,5267,5269,5271,5273,5275,5278,5280,5282,5285,5287,5289],{"class":1112,"line":1438},[1110,5268,2610],{"class":1580},[1110,5270,2788],{"class":1333},[1110,5272,2620],{"class":1337},[1110,5274,2623],{"class":1323},[1110,5276,5277],{"class":1133}," $fetch",[1110,5279,1334],{"class":1343},[1110,5281,1362],{"class":1337},[1110,5283,5284],{"class":1120},"\u002Fapi\u002Fchats",[1110,5286,1362],{"class":1337},[1110,5288,1708],{"class":1337},[1110,5290,1413],{"class":1337},[1110,5292,5293,5296,5298,5300,5303,5305],{"class":1112,"line":1443},[1110,5294,5295],{"class":1343},"    method",[1110,5297,1347],{"class":1337},[1110,5299,1424],{"class":1337},[1110,5301,5302],{"class":1120},"POST",[1110,5304,1362],{"class":1337},[1110,5306,1365],{"class":1337},[1110,5308,5309,5312,5314],{"class":1112,"line":1466},[1110,5310,5311],{"class":1343},"    body",[1110,5313,1347],{"class":1337},[1110,5315,1413],{"class":1337},[1110,5317,5318,5320,5322],{"class":1112,"line":1971},[1110,5319,3384],{"class":1343},[1110,5321,1347],{"class":1337},[1110,5323,1413],{"class":1337},[1110,5325,5326,5328,5330,5332,5334,5336],{"class":1112,"line":1998},[1110,5327,4524],{"class":1343},[1110,5329,1347],{"class":1337},[1110,5331,1424],{"class":1337},[1110,5333,2143],{"class":1120},[1110,5335,1362],{"class":1337},[1110,5337,1365],{"class":1337},[1110,5339,5340,5342,5344,5346,5348,5350,5352,5354,5357,5359,5361,5363,5365,5368,5370,5372,5374],{"class":1112,"line":2044},[1110,5341,4557],{"class":1343},[1110,5343,1347],{"class":1337},[1110,5345,1451],{"class":1343},[1110,5347,1857],{"class":1337},[1110,5349,2517],{"class":1343},[1110,5351,1347],{"class":1337},[1110,5353,1424],{"class":1337},[1110,5355,5356],{"class":1120},"text",[1110,5358,1362],{"class":1337},[1110,5360,1708],{"class":1337},[1110,5362,1711],{"class":1343},[1110,5364,1347],{"class":1337},[1110,5366,5367],{"class":1333}," input",[1110,5369,1800],{"class":1337},[1110,5371,3344],{"class":1333},[1110,5373,1724],{"class":1337},[1110,5375,3185],{"class":1343},[1110,5377,5378],{"class":1112,"line":2111},[1110,5379,4396],{"class":1337},[1110,5381,5382],{"class":1112,"line":2181},[1110,5383,4579],{"class":1337},[1110,5385,5386,5388],{"class":1112,"line":2221},[1110,5387,2411],{"class":1337},[1110,5389,1472],{"class":1343},[1110,5391,5392],{"class":1112,"line":2272},[1110,5393,1402],{"emptyLinePlaceholder":21},[1110,5395,5396],{"class":1112,"line":2285},[1110,5397,5398],{"class":2688},"  \u002F\u002F Navigate to the chat page\n",[1110,5400,5401,5404,5406,5408,5411,5414,5416,5418,5420,5423],{"class":1112,"line":2315},[1110,5402,5403],{"class":1133},"  navigateTo",[1110,5405,1334],{"class":1343},[1110,5407,3704],{"class":1337},[1110,5409,5410],{"class":1120},"\u002Fchat\u002F",[1110,5412,5413],{"class":1337},"${",[1110,5415,262],{"class":1333},[1110,5417,1800],{"class":1337},[1110,5419,2011],{"class":1333},[1110,5421,5422],{"class":1337},"}`",[1110,5424,1472],{"class":1343},[1110,5426,5427],{"class":1112,"line":2321},[1110,5428,5429],{"class":1337},"}\n",[1110,5431,5432,5434,5436],{"class":1112,"line":2326},[1110,5433,1628],{"class":1337},[1110,5435,5141],{"class":1343},[1110,5437,1558],{"class":1337},[1110,5439,5440],{"class":1112,"line":2358},[1110,5441,1402],{"emptyLinePlaceholder":21},[1110,5443,5444,5446,5448],{"class":1112,"line":2374},[1110,5445,1552],{"class":1337},[1110,5447,1555],{"class":1343},[1110,5449,1558],{"class":1337},[1110,5451,5452,5454,5457,5460,5462,5464,5467,5469],{"class":1112,"line":2392},[1110,5453,1565],{"class":1337},[1110,5455,5456],{"class":1343},"UDashboardPanel",[1110,5458,5459],{"class":1580}," :ui",[1110,5461,1584],{"class":1337},[1110,5463,1511],{"class":1337},[1110,5465,5466],{"class":1120},"{ body: 'p-0 sm:p-0' }",[1110,5468,1511],{"class":1337},[1110,5470,1558],{"class":1337},[1110,5472,5473,5475,5477,5480,5483],{"class":1112,"line":2408},[1110,5474,1574],{"class":1337},[1110,5476,1555],{"class":1343},[1110,5478,5479],{"class":1337}," #",[1110,5481,5482],{"class":1580},"body",[1110,5484,1558],{"class":1337},[1110,5486,5487,5489,5492,5495,5497,5499,5502,5504],{"class":1112,"line":2416},[1110,5488,1598],{"class":1337},[1110,5490,5491],{"class":1343},"UContainer",[1110,5493,5494],{"class":1580}," class",[1110,5496,1584],{"class":1337},[1110,5498,1511],{"class":1337},[1110,5500,5501],{"class":1120},"min-h-dvh flex flex-col justify-center gap-6 py-8",[1110,5503,1511],{"class":1337},[1110,5505,1558],{"class":1337},[1110,5507,5508,5511,5514,5516,5518,5520,5523,5525],{"class":1112,"line":3396},[1110,5509,5510],{"class":1337},"        \u003C",[1110,5512,5513],{"class":1343},"h1",[1110,5515,5494],{"class":1580},[1110,5517,1584],{"class":1337},[1110,5519,1511],{"class":1337},[1110,5521,5522],{"class":1120},"text-3xl sm:text-4xl text-highlighted font-bold",[1110,5524,1511],{"class":1337},[1110,5526,1558],{"class":1337},[1110,5528,5529],{"class":1112,"line":3413},[1110,5530,5531],{"class":1333},"          How can I help you today?\n",[1110,5533,5534,5537,5539],{"class":1112,"line":3445},[1110,5535,5536],{"class":1337},"        \u003C\u002F",[1110,5538,5513],{"class":1343},[1110,5540,1558],{"class":1337},[1110,5542,5543],{"class":1112,"line":3458},[1110,5544,1402],{"emptyLinePlaceholder":21},[1110,5546,5548,5550],{"class":5547,"line":3463},[1112,1562],[1110,5549,5510],{"class":1337},[1110,5551,5552],{"class":1343},"UChatPrompt\n",[1110,5554,5556,5559,5561,5563,5565],{"class":5555,"line":3469},[1112,1562],[1110,5557,5558],{"class":1580},"          v-model",[1110,5560,1584],{"class":1337},[1110,5562,1511],{"class":1337},[1110,5564,5223],{"class":1120},[1110,5566,5567],{"class":1337},"\"\n",[1110,5569,5571,5574,5576,5578,5581],{"class":5570,"line":3500},[1112,1562],[1110,5572,5573],{"class":1580},"          :status",[1110,5575,1584],{"class":1337},[1110,5577,1511],{"class":1337},[1110,5579,5580],{"class":1120},"loading ? 'streaming' : 'ready'",[1110,5582,5567],{"class":1337},[1110,5584,5586,5589,5591,5593,5596],{"class":5585,"line":3544},[1112,1562],[1110,5587,5588],{"class":1580},"          variant",[1110,5590,1584],{"class":1337},[1110,5592,1511],{"class":1337},[1110,5594,5595],{"class":1120},"subtle",[1110,5597,5567],{"class":1337},[1110,5599,5601,5604,5606,5608,5611],{"class":5600,"line":3551},[1112,1562],[1110,5602,5603],{"class":1580},"          placeholder",[1110,5605,1584],{"class":1337},[1110,5607,1511],{"class":1337},[1110,5609,5610],{"class":1120},"Ask me anything...",[1110,5612,5567],{"class":1337},[1110,5614,5616,5619,5621,5623,5626],{"class":5615,"line":3556},[1112,1562],[1110,5617,5618],{"class":1580},"          @submit",[1110,5620,1584],{"class":1337},[1110,5622,1511],{"class":1337},[1110,5624,5625],{"class":1120},"createChat",[1110,5627,5567],{"class":1337},[1110,5629,5631],{"class":5630,"line":3574},[1112,1562],[1110,5632,5633],{"class":1337},"        >\n",[1110,5635,5637,5640,5643,5646,5648,5650,5653,5655],{"class":5636,"line":3613},[1112,1562],[1110,5638,5639],{"class":1337},"          \u003C",[1110,5641,5642],{"class":1343},"UChatPromptSubmit",[1110,5644,5645],{"class":1580}," color",[1110,5647,1584],{"class":1337},[1110,5649,1511],{"class":1337},[1110,5651,5652],{"class":1120},"neutral",[1110,5654,1511],{"class":1337},[1110,5656,1604],{"class":1337},[1110,5658,5660,5662,5664],{"class":5659,"line":3619},[1112,1562],[1110,5661,5536],{"class":1337},[1110,5663,5106],{"class":1343},[1110,5665,1558],{"class":1337},[1110,5667,5668,5671,5673],{"class":1112,"line":3624},[1110,5669,5670],{"class":1337},"      \u003C\u002F",[1110,5672,5491],{"class":1343},[1110,5674,1558],{"class":1337},[1110,5676,5677,5679,5681],{"class":1112,"line":3630},[1110,5678,1609],{"class":1337},[1110,5680,1555],{"class":1343},[1110,5682,1558],{"class":1337},[1110,5684,5685,5687,5689],{"class":1112,"line":3650},[1110,5686,1619],{"class":1337},[1110,5688,5456],{"class":1343},[1110,5690,1558],{"class":1337},[1110,5692,5693,5695,5697],{"class":1112,"line":3678},[1110,5694,1628],{"class":1337},[1110,5696,1555],{"class":1343},[1110,5698,1558],{"class":1337},[1000,5700,4655,5701,5705],{},[1054,5702,5703],{"href":281},[1060,5704,5106],{}," component automatically handles:",[1012,5707,5708,5715,5718,5728],{},[1015,5709,5710,5711],{},"Form submission when pressing ",[5712,5713],"kbd",{"value":5714},"enter",[1015,5716,5717],{},"Auto-resizing as you type",[1015,5719,5720,5721,5724,5725],{},"A loading state when ",[1060,5722,5723],{},"status"," is set to ",[1060,5726,5727],{},"streaming",[1015,5729,5730],{},"Focus management and keyboard shortcuts",[1138,5732,5734],{"id":5733},"setting-up-markdown-rendering","Setting up Markdown rendering",[1000,5736,5737,5738,5745,5746,5753,5754,5756,5757,5762],{},"AI models often respond with Markdown formatting (code blocks, lists, bold text, etc.). Before building the chat page, create a custom ",[1054,5739,5742],{"href":5740,"rel":5741},"https:\u002F\u002Fcomark.dev",[1058],[1060,5743,5744],{},"Comark"," component that will handle streaming Markdown rendering. Using ",[1054,5747,5750],{"href":5748,"rel":5749},"https:\u002F\u002Fcomark.dev\u002Frendering\u002Fvue#code-definecomarkcomponent",[1058],[1060,5751,5752],{},"defineComarkComponent",", you can enable the ",[1060,5755,1562],{}," plugin for syntax highlighting in code blocks and register additional ",[1054,5758,5761],{"href":5759,"rel":5760},"https:\u002F\u002Fshiki.style",[1058],"Shiki"," languages beyond the defaults (TypeScript, JavaScript, Vue, Shell, JSON, YAML, Markdown):",[1310,5764,5765],{},[1101,5766,5769],{"className":1314,"code":5767,"filename":5768,"language":1316,"meta":1106,"style":1106},"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",[1060,5770,5771,5788,5804,5820,5836,5852,5856,5869,5885,5894,5903,5928,5934,5940,5954],{"__ignoreMap":1106},[1110,5772,5773,5775,5778,5781,5783,5786],{"class":1112,"line":1113},[1110,5774,1699],{"class":1323},[1110,5776,5777],{"class":1333}," highlight ",[1110,5779,5780],{"class":1323},"from",[1110,5782,1424],{"class":1337},[1110,5784,5785],{"class":1120},"@comark\u002Fnuxt\u002Fplugins\u002Fhighlight",[1110,5787,1388],{"class":1337},[1110,5789,5790,5792,5795,5797,5799,5802],{"class":1112,"line":1130},[1110,5791,1699],{"class":1323},[1110,5793,5794],{"class":1333}," python ",[1110,5796,5780],{"class":1323},[1110,5798,1424],{"class":1337},[1110,5800,5801],{"class":1120},"@shikijs\u002Flangs\u002Fpython",[1110,5803,1388],{"class":1337},[1110,5805,5806,5808,5811,5813,5815,5818],{"class":1112,"line":1353},[1110,5807,1699],{"class":1323},[1110,5809,5810],{"class":1333}," sql ",[1110,5812,5780],{"class":1323},[1110,5814,1424],{"class":1337},[1110,5816,5817],{"class":1120},"@shikijs\u002Flangs\u002Fsql",[1110,5819,1388],{"class":1337},[1110,5821,5822,5824,5827,5829,5831,5834],{"class":1112,"line":1368},[1110,5823,1699],{"class":1323},[1110,5825,5826],{"class":1333}," go ",[1110,5828,5780],{"class":1323},[1110,5830,1424],{"class":1337},[1110,5832,5833],{"class":1120},"@shikijs\u002Flangs\u002Fgo",[1110,5835,1388],{"class":1337},[1110,5837,5838,5840,5843,5845,5847,5850],{"class":1112,"line":1380},[1110,5839,1699],{"class":1323},[1110,5841,5842],{"class":1333}," rust ",[1110,5844,5780],{"class":1323},[1110,5846,1424],{"class":1337},[1110,5848,5849],{"class":1120},"@shikijs\u002Flangs\u002Frust",[1110,5851,1388],{"class":1337},[1110,5853,5854],{"class":1112,"line":1391},[1110,5855,1402],{"emptyLinePlaceholder":21},[1110,5857,5858,5860,5862,5865,5867],{"class":1112,"line":1399},[1110,5859,1324],{"class":1323},[1110,5861,1327],{"class":1323},[1110,5863,5864],{"class":1133}," defineComarkComponent",[1110,5866,1334],{"class":1333},[1110,5868,1338],{"class":1337},[1110,5870,5871,5874,5876,5878,5881,5883],{"class":1112,"line":1405},[1110,5872,5873],{"class":1343},"  name",[1110,5875,1347],{"class":1337},[1110,5877,1424],{"class":1337},[1110,5879,5880],{"class":1120},"ChatComark",[1110,5882,1362],{"class":1337},[1110,5884,1365],{"class":1337},[1110,5886,5887,5890,5892],{"class":1112,"line":1416},[1110,5888,5889],{"class":1343},"  plugins",[1110,5891,1347],{"class":1337},[1110,5893,1350],{"class":1333},[1110,5895,5896,5899,5901],{"class":1112,"line":1432},[1110,5897,5898],{"class":1133},"    highlight",[1110,5900,1334],{"class":1333},[1110,5902,1338],{"class":1337},[1110,5904,5905,5908,5910,5913,5915,5918,5920,5923,5925],{"class":1112,"line":1438},[1110,5906,5907],{"class":1343},"      languages",[1110,5909,1347],{"class":1337},[1110,5911,5912],{"class":1333}," [python",[1110,5914,1708],{"class":1337},[1110,5916,5917],{"class":1333}," sql",[1110,5919,1708],{"class":1337},[1110,5921,5922],{"class":1333}," go",[1110,5924,1708],{"class":1337},[1110,5926,5927],{"class":1333}," rust]\n",[1110,5929,5930,5932],{"class":1112,"line":1443},[1110,5931,3399],{"class":1337},[1110,5933,1472],{"class":1333},[1110,5935,5936,5938],{"class":1112,"line":1466},[1110,5937,1394],{"class":1333},[1110,5939,1365],{"class":1337},[1110,5941,5942,5945,5947,5949,5952],{"class":1112,"line":1971},[1110,5943,5944],{"class":1343},"  class",[1110,5946,1347],{"class":1337},[1110,5948,1424],{"class":1337},[1110,5950,5951],{"class":1120},"*:first:mt-0 *:last:mb-0",[1110,5953,1388],{"class":1337},[1110,5955,5956,5958],{"class":1112,"line":1998},[1110,5957,1469],{"class":1337},[1110,5959,1472],{"class":1333},[1000,5961,5962,5963,5966],{},"This creates a ",[1060,5964,5965],{},"\u003CChatComark>"," component we'll use in the chat page to render assistant messages and reasoning content.",[1000,5968,5969],{},"Since Comark uses Shiki with dual themes, you need to add the following CSS to your stylesheet for dark mode support:",[1101,5971,5973],{"className":1492,"code":5972,"filename":1494,"language":1495,"meta":1106,"style":1106},"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",[1060,5974,5975,5996,6019,6039,6059,6079,6099],{"__ignoreMap":1106},[1110,5976,5977,5980,5982,5985,5988,5991,5994],{"class":1112,"line":1113},[1110,5978,5979],{"class":1116},"html",[1110,5981,1800],{"class":1337},[1110,5983,5984],{"class":1116},"dark",[1110,5986,5987],{"class":1337}," .",[1110,5989,5990],{"class":1116},"shiki",[1110,5992,5993],{"class":1116}," span",[1110,5995,1413],{"class":1337},[1110,5997,5998,6002,6004,6007,6009,6012,6014,6017],{"class":1112,"line":1130},[1110,5999,6001],{"class":6000},"sqsOY","  color",[1110,6003,1347],{"class":1337},[1110,6005,6006],{"class":1133}," var",[1110,6008,1334],{"class":1337},[1110,6010,6011],{"class":1333},"--shiki-dark",[1110,6013,1874],{"class":1337},[1110,6015,6016],{"class":3591}," !important",[1110,6018,1514],{"class":1337},[1110,6020,6021,6024,6026,6028,6030,6033,6035,6037],{"class":1112,"line":1353},[1110,6022,6023],{"class":6000},"  background-color",[1110,6025,1347],{"class":1337},[1110,6027,6006],{"class":1133},[1110,6029,1334],{"class":1337},[1110,6031,6032],{"class":1333},"--shiki-dark-bg",[1110,6034,1874],{"class":1337},[1110,6036,6016],{"class":3591},[1110,6038,1514],{"class":1337},[1110,6040,6041,6044,6046,6048,6050,6053,6055,6057],{"class":1112,"line":1368},[1110,6042,6043],{"class":6000},"  font-style",[1110,6045,1347],{"class":1337},[1110,6047,6006],{"class":1133},[1110,6049,1334],{"class":1337},[1110,6051,6052],{"class":1333},"--shiki-dark-font-style",[1110,6054,1874],{"class":1337},[1110,6056,6016],{"class":3591},[1110,6058,1514],{"class":1337},[1110,6060,6061,6064,6066,6068,6070,6073,6075,6077],{"class":1112,"line":1380},[1110,6062,6063],{"class":6000},"  font-weight",[1110,6065,1347],{"class":1337},[1110,6067,6006],{"class":1133},[1110,6069,1334],{"class":1337},[1110,6071,6072],{"class":1333},"--shiki-dark-font-weight",[1110,6074,1874],{"class":1337},[1110,6076,6016],{"class":3591},[1110,6078,1514],{"class":1337},[1110,6080,6081,6084,6086,6088,6090,6093,6095,6097],{"class":1112,"line":1391},[1110,6082,6083],{"class":6000},"  text-decoration",[1110,6085,1347],{"class":1337},[1110,6087,6006],{"class":1133},[1110,6089,1334],{"class":1337},[1110,6091,6092],{"class":1333},"--shiki-dark-text-decoration",[1110,6094,1874],{"class":1337},[1110,6096,6016],{"class":3591},[1110,6098,1514],{"class":1337},[1110,6100,6101],{"class":1112,"line":1399},[1110,6102,5429],{"class":1337},[1004,6104,6106],{"id":6105},"creating-the-chat-page","Creating the chat page",[1000,6108,6109,6110,6116,6117,6124],{},"The chat page is where the actual conversation happens. It integrates the AI SDK's ",[1054,6111,6114],{"href":6112,"rel":6113},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fchat",[1058],[1060,6115,259],{}," class and ",[1054,6118,6121],{"href":6119,"rel":6120},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fdefault-chat-transport",[1058],[1060,6122,6123],{},"DefaultChatTransport"," for real-time streaming.",[1310,6126,6127],{},[1687,6128,6129],{},[1101,6130,6134],{"className":1542,"code":6131,"filename":6132,"highlights":6133,"language":34,"meta":1106,"style":1106},"\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",[1130,1353,1368,2221,2272,2285,2315,2321,2326,2358,2374,2392,2408,2416,3396,3413,3445,3458,3463,3469,3500,3544,3551],[1060,6135,6136,6156,6186,6207,6228,6232,6246,6260,6264,6269,6317,6321,6340,6382,6386,6390,6406,6410,6415,6433,6453,6472,6488,6515,6524,6539,6545,6572,6588,6593,6598,6613,6628,6644,6661,6675,6682,6687,6694,6698,6720,6732,6752,6780,6794,6798,6802,6806,6811,6824,6852,6863,6867,6873,6881,6885,6893,6911,6923,6942,6949,6963,6976,6981,6995,6999,7024,7102,7110,7124,7138,7152,7157,7165,7178,7191,7196,7206,7210,7233,7239,7253,7265,7277,7281,7311,7316,7325,7333,7342,7351,7359,7363,7369,7381,7395,7407,7420,7433,7437,7444,7457,7470,7484,7498,7503,7511,7519,7527,7535],{"__ignoreMap":1106},[1110,6137,6138,6140,6142,6144,6146,6148,6150,6152,6154],{"class":1112,"line":1113},[1110,6139,1552],{"class":1337},[1110,6141,5141],{"class":1343},[1110,6143,5144],{"class":1580},[1110,6145,5147],{"class":1580},[1110,6147,1584],{"class":1337},[1110,6149,1511],{"class":1337},[1110,6151,1316],{"class":1120},[1110,6153,1511],{"class":1337},[1110,6155,1558],{"class":1337},[1110,6157,6159,6161,6163,6166,6168,6171,6173,6176,6178,6180,6182,6184],{"class":6158,"line":1130},[1112,1562],[1110,6160,1699],{"class":1323},[1110,6162,1702],{"class":1337},[1110,6164,6165],{"class":1333}," DefaultChatTransport",[1110,6167,1708],{"class":1337},[1110,6169,6170],{"class":1333}," isReasoningUIPart",[1110,6172,1708],{"class":1337},[1110,6174,6175],{"class":1333}," isTextUIPart",[1110,6177,1724],{"class":1337},[1110,6179,1727],{"class":1323},[1110,6181,1424],{"class":1337},[1110,6183,2531],{"class":1120},[1110,6185,1388],{"class":1337},[1110,6187,6189,6191,6193,6196,6198,6200,6202,6205],{"class":6188,"line":1353},[1112,1562],[1110,6190,1699],{"class":1323},[1110,6192,1702],{"class":1337},[1110,6194,6195],{"class":1333}," Chat",[1110,6197,1724],{"class":1337},[1110,6199,1727],{"class":1323},[1110,6201,1424],{"class":1337},[1110,6203,6204],{"class":1120},"@ai-sdk\u002Fvue",[1110,6206,1388],{"class":1337},[1110,6208,6210,6212,6214,6217,6219,6221,6223,6226],{"class":6209,"line":1368},[1112,1562],[1110,6211,1699],{"class":1323},[1110,6213,1702],{"class":1337},[1110,6215,6216],{"class":1333}," isPartStreaming",[1110,6218,1724],{"class":1337},[1110,6220,1727],{"class":1323},[1110,6222,1424],{"class":1337},[1110,6224,6225],{"class":1120},"@nuxt\u002Fui\u002Futils\u002Fai",[1110,6227,1388],{"class":1337},[1110,6229,6230],{"class":1112,"line":1380},[1110,6231,1402],{"emptyLinePlaceholder":21},[1110,6233,6234,6236,6239,6241,6244],{"class":1112,"line":1391},[1110,6235,3059],{"class":1580},[1110,6237,6238],{"class":1333}," route ",[1110,6240,1584],{"class":1337},[1110,6242,6243],{"class":1133}," useRoute",[1110,6245,2666],{"class":1333},[1110,6247,6248,6250,6253,6255,6258],{"class":1112,"line":1399},[1110,6249,3059],{"class":1580},[1110,6251,6252],{"class":1333}," toast ",[1110,6254,1584],{"class":1337},[1110,6256,6257],{"class":1133}," useToast",[1110,6259,2666],{"class":1333},[1110,6261,6262],{"class":1112,"line":1405},[1110,6263,1402],{"emptyLinePlaceholder":21},[1110,6265,6266],{"class":1112,"line":1416},[1110,6267,6268],{"class":2688},"\u002F\u002F Fetch existing chat data\n",[1110,6270,6271,6273,6275,6278,6280,6283,6285,6287,6289,6292,6294,6296,6299,6301,6304,6306,6309,6311,6313,6315],{"class":1112,"line":1432},[1110,6272,3059],{"class":1580},[1110,6274,1702],{"class":1337},[1110,6276,6277],{"class":1343}," data",[1110,6279,1347],{"class":1337},[1110,6281,6282],{"class":1333}," chatData ",[1110,6284,1469],{"class":1337},[1110,6286,2620],{"class":1337},[1110,6288,2623],{"class":1323},[1110,6290,6291],{"class":1133}," useFetch",[1110,6293,1334],{"class":1333},[1110,6295,3704],{"class":1337},[1110,6297,6298],{"class":1120},"\u002Fapi\u002Fchats\u002F",[1110,6300,5413],{"class":1337},[1110,6302,6303],{"class":1333},"route",[1110,6305,1800],{"class":1337},[1110,6307,6308],{"class":1333},"params",[1110,6310,1800],{"class":1337},[1110,6312,2011],{"class":1333},[1110,6314,5422],{"class":1337},[1110,6316,1472],{"class":1333},[1110,6318,6319],{"class":1112,"line":1438},[1110,6320,1402],{"emptyLinePlaceholder":21},[1110,6322,6323,6326,6328,6330,6333,6335,6338],{"class":1112,"line":1443},[1110,6324,6325],{"class":1323},"if",[1110,6327,1943],{"class":1333},[1110,6329,3564],{"class":1337},[1110,6331,6332],{"class":1333},"chatData",[1110,6334,1800],{"class":1337},[1110,6336,6337],{"class":1333},"value) ",[1110,6339,1338],{"class":1337},[1110,6341,6342,6345,6347,6349,6351,6353,6355,6357,6359,6361,6363,6365,6367,6369,6371,6374,6376,6378,6380],{"class":1112,"line":1466},[1110,6343,6344],{"class":1323},"  throw",[1110,6346,2897],{"class":1133},[1110,6348,1334],{"class":1343},[1110,6350,1857],{"class":1337},[1110,6352,3586],{"class":1343},[1110,6354,1347],{"class":1337},[1110,6356,3592],{"class":3591},[1110,6358,1708],{"class":1337},[1110,6360,3597],{"class":1343},[1110,6362,1347],{"class":1337},[1110,6364,1424],{"class":1337},[1110,6366,3604],{"class":1120},[1110,6368,1362],{"class":1337},[1110,6370,1708],{"class":1337},[1110,6372,6373],{"class":1343}," fatal",[1110,6375,1347],{"class":1337},[1110,6377,4197],{"class":4196},[1110,6379,1724],{"class":1337},[1110,6381,1472],{"class":1343},[1110,6383,6384],{"class":1112,"line":1971},[1110,6385,5429],{"class":1337},[1110,6387,6388],{"class":1112,"line":1998},[1110,6389,1402],{"emptyLinePlaceholder":21},[1110,6391,6392,6394,6396,6398,6400,6402,6404],{"class":1112,"line":2044},[1110,6393,3059],{"class":1580},[1110,6395,5164],{"class":1333},[1110,6397,1584],{"class":1337},[1110,6399,5169],{"class":1133},[1110,6401,1334],{"class":1333},[1110,6403,5174],{"class":1337},[1110,6405,1472],{"class":1333},[1110,6407,6408],{"class":1112,"line":2111},[1110,6409,1402],{"emptyLinePlaceholder":21},[1110,6411,6412],{"class":1112,"line":2181},[1110,6413,6414],{"class":2688},"\u002F\u002F Initialize the Chat class from AI SDK\n",[1110,6416,6418,6420,6423,6425,6427,6429,6431],{"class":6417,"line":2221},[1112,1562],[1110,6419,3059],{"class":1580},[1110,6421,6422],{"class":1333}," chat ",[1110,6424,1584],{"class":1337},[1110,6426,1894],{"class":1337},[1110,6428,6195],{"class":1133},[1110,6430,1334],{"class":1333},[1110,6432,1338],{"class":1337},[1110,6434,6436,6438,6440,6443,6445,6447,6449,6451],{"class":6435,"line":2272},[1112,1562],[1110,6437,1790],{"class":1343},[1110,6439,1347],{"class":1337},[1110,6441,6442],{"class":1333}," chatData",[1110,6444,1800],{"class":1337},[1110,6446,3344],{"class":1333},[1110,6448,1800],{"class":1337},[1110,6450,2011],{"class":1333},[1110,6452,1365],{"class":1337},[1110,6454,6456,6458,6460,6462,6464,6466,6468,6470],{"class":6455,"line":2285},[1112,1562],[1110,6457,1950],{"class":1343},[1110,6459,1347],{"class":1337},[1110,6461,6442],{"class":1333},[1110,6463,1800],{"class":1337},[1110,6465,3344],{"class":1333},[1110,6467,1800],{"class":1337},[1110,6469,1989],{"class":1333},[1110,6471,1365],{"class":1337},[1110,6473,6475,6478,6480,6482,6484,6486],{"class":6474,"line":2315},[1112,1562],[1110,6476,6477],{"class":1343},"  transport",[1110,6479,1347],{"class":1337},[1110,6481,1894],{"class":1337},[1110,6483,6165],{"class":1133},[1110,6485,1334],{"class":1333},[1110,6487,1338],{"class":1337},[1110,6489,6491,6494,6496,6498,6500,6502,6504,6506,6508,6510,6512],{"class":6490,"line":2321},[1112,1562],[1110,6492,6493],{"class":1343},"    api",[1110,6495,1347],{"class":1337},[1110,6497,3698],{"class":1337},[1110,6499,6298],{"class":1120},[1110,6501,5413],{"class":1337},[1110,6503,6332],{"class":1333},[1110,6505,1800],{"class":1337},[1110,6507,3344],{"class":1333},[1110,6509,1800],{"class":1337},[1110,6511,2011],{"class":1333},[1110,6513,6514],{"class":1337},"}`\n",[1110,6516,6518,6520,6522],{"class":6517,"line":2326},[1112,1562],[1110,6519,2411],{"class":1337},[1110,6521,1874],{"class":1333},[1110,6523,1365],{"class":1337},[1110,6525,6527,6530,6532,6535,6537],{"class":6526,"line":2358},[1112,1562],[1110,6528,6529],{"class":1343},"  onData",[1110,6531,1334],{"class":1337},[1110,6533,6534],{"class":1934},"dataPart",[1110,6536,1874],{"class":1337},[1110,6538,1413],{"class":1337},[1110,6540,6542],{"class":6541,"line":2374},[1112,1562],[1110,6543,6544],{"class":2688},"    \u002F\u002F Refresh the chat list when a title is generated\n",[1110,6546,6548,6551,6553,6555,6557,6560,6562,6564,6566,6568,6570],{"class":6547,"line":2392},[1112,1562],[1110,6549,6550],{"class":1323},"    if",[1110,6552,1943],{"class":1343},[1110,6554,6534],{"class":1333},[1110,6556,1800],{"class":1337},[1110,6558,6559],{"class":1333},"type",[1110,6561,3371],{"class":1337},[1110,6563,1424],{"class":1337},[1110,6565,4344],{"class":1120},[1110,6567,1362],{"class":1337},[1110,6569,3569],{"class":1343},[1110,6571,1338],{"class":1337},[1110,6573,6575,6578,6580,6582,6584,6586],{"class":6574,"line":2408},[1112,1562],[1110,6576,6577],{"class":1133},"      refreshNuxtData",[1110,6579,1334],{"class":1343},[1110,6581,1362],{"class":1337},[1110,6583,1779],{"class":1120},[1110,6585,1362],{"class":1337},[1110,6587,1472],{"class":1343},[1110,6589,6591],{"class":6590,"line":2416},[1112,1562],[1110,6592,4579],{"class":1337},[1110,6594,6596],{"class":6595,"line":3396},[1112,1562],[1110,6597,1435],{"class":1337},[1110,6599,6601,6604,6606,6609,6611],{"class":6600,"line":3413},[1112,1562],[1110,6602,6603],{"class":1343},"  onError",[1110,6605,1334],{"class":1337},[1110,6607,6608],{"class":1934},"error",[1110,6610,1874],{"class":1337},[1110,6612,1413],{"class":1337},[1110,6614,6616,6619,6621,6624,6626],{"class":6615,"line":3445},[1112,1562],[1110,6617,6618],{"class":1333},"    toast",[1110,6620,1800],{"class":1337},[1110,6622,6623],{"class":1133},"add",[1110,6625,1334],{"class":1343},[1110,6627,1338],{"class":1337},[1110,6629,6631,6634,6636,6638,6640,6642],{"class":6630,"line":3458},[1112,1562],[1110,6632,6633],{"class":1343},"      title",[1110,6635,1347],{"class":1337},[1110,6637,1424],{"class":1337},[1110,6639,497],{"class":1120},[1110,6641,1362],{"class":1337},[1110,6643,1365],{"class":1337},[1110,6645,6647,6650,6652,6655,6657,6659],{"class":6646,"line":3463},[1112,1562],[1110,6648,6649],{"class":1343},"      description",[1110,6651,1347],{"class":1337},[1110,6653,6654],{"class":1333}," error",[1110,6656,1800],{"class":1337},[1110,6658,4496],{"class":1333},[1110,6660,1365],{"class":1337},[1110,6662,6664,6667,6669,6671,6673],{"class":6663,"line":3469},[1112,1562],[1110,6665,6666],{"class":1343},"      color",[1110,6668,1347],{"class":1337},[1110,6670,1424],{"class":1337},[1110,6672,6608],{"class":1120},[1110,6674,1388],{"class":1337},[1110,6676,6678,6680],{"class":6677,"line":3500},[1112,1562],[1110,6679,3399],{"class":1337},[1110,6681,1472],{"class":1343},[1110,6683,6685],{"class":6684,"line":3544},[1112,1562],[1110,6686,3616],{"class":1337},[1110,6688,6690,6692],{"class":6689,"line":3551},[1112,1562],[1110,6691,1469],{"class":1337},[1110,6693,1472],{"class":1333},[1110,6695,6696],{"class":1112,"line":3556},[1110,6697,1402],{"emptyLinePlaceholder":21},[1110,6699,6700,6703,6706,6708,6711,6713,6716,6718],{"class":1112,"line":3574},[1110,6701,6702],{"class":1580},"function",[1110,6704,6705],{"class":1133}," handleSubmit",[1110,6707,1334],{"class":1337},[1110,6709,6710],{"class":1934},"e",[1110,6712,1347],{"class":1337},[1110,6714,6715],{"class":1116}," Event",[1110,6717,1874],{"class":1337},[1110,6719,1413],{"class":1337},[1110,6721,6722,6725,6727,6730],{"class":1112,"line":3613},[1110,6723,6724],{"class":1333},"  e",[1110,6726,1800],{"class":1337},[1110,6728,6729],{"class":1133},"preventDefault",[1110,6731,2666],{"class":1343},[1110,6733,6734,6736,6738,6740,6742,6744,6746,6748,6750],{"class":1112,"line":3619},[1110,6735,3559],{"class":1323},[1110,6737,1943],{"class":1343},[1110,6739,5223],{"class":1333},[1110,6741,1800],{"class":1337},[1110,6743,3344],{"class":1333},[1110,6745,1800],{"class":1337},[1110,6747,5232],{"class":1133},[1110,6749,5235],{"class":1343},[1110,6751,1338],{"class":1337},[1110,6753,6754,6757,6759,6762,6764,6766,6768,6770,6772,6774,6776,6778],{"class":1112,"line":3624},[1110,6755,6756],{"class":1333},"    chat",[1110,6758,1800],{"class":1337},[1110,6760,6761],{"class":1133},"sendMessage",[1110,6763,1334],{"class":1343},[1110,6765,1857],{"class":1337},[1110,6767,1711],{"class":1343},[1110,6769,1347],{"class":1337},[1110,6771,5367],{"class":1333},[1110,6773,1800],{"class":1337},[1110,6775,3344],{"class":1333},[1110,6777,1724],{"class":1337},[1110,6779,1472],{"class":1343},[1110,6781,6782,6785,6787,6789,6791],{"class":1112,"line":3630},[1110,6783,6784],{"class":1333},"    input",[1110,6786,1800],{"class":1337},[1110,6788,3344],{"class":1333},[1110,6790,2620],{"class":1337},[1110,6792,6793],{"class":1337}," ''\n",[1110,6795,6796],{"class":1112,"line":3650},[1110,6797,3616],{"class":1337},[1110,6799,6800],{"class":1112,"line":3678},[1110,6801,5429],{"class":1337},[1110,6803,6804],{"class":1112,"line":3690},[1110,6805,1402],{"emptyLinePlaceholder":21},[1110,6807,6808],{"class":1112,"line":3709},[1110,6809,6810],{"class":2688},"\u002F\u002F Auto-generate response for first message\n",[1110,6812,6813,6816,6818,6820,6822],{"class":1112,"line":3737},[1110,6814,6815],{"class":1133},"onMounted",[1110,6817,1334],{"class":1333},[1110,6819,1797],{"class":1337},[1110,6821,1817],{"class":1580},[1110,6823,1413],{"class":1337},[1110,6825,6826,6828,6830,6832,6834,6836,6838,6840,6842,6844,6846,6848,6850],{"class":1112,"line":3744},[1110,6827,3559],{"class":1323},[1110,6829,1943],{"class":1343},[1110,6831,6332],{"class":1333},[1110,6833,1800],{"class":1337},[1110,6835,3344],{"class":1333},[1110,6837,3870],{"class":1337},[1110,6839,1989],{"class":1333},[1110,6841,1800],{"class":1337},[1110,6843,3849],{"class":1333},[1110,6845,3371],{"class":1337},[1110,6847,3855],{"class":3591},[1110,6849,3569],{"class":1343},[1110,6851,1338],{"class":1337},[1110,6853,6854,6856,6858,6861],{"class":1112,"line":3749},[1110,6855,6756],{"class":1333},[1110,6857,1800],{"class":1337},[1110,6859,6860],{"class":1133},"regenerate",[1110,6862,2666],{"class":1343},[1110,6864,6865],{"class":1112,"line":3815},[1110,6866,3616],{"class":1337},[1110,6868,6869,6871],{"class":1112,"line":3820},[1110,6870,1469],{"class":1337},[1110,6872,1472],{"class":1333},[1110,6874,6875,6877,6879],{"class":1112,"line":3825},[1110,6876,1628],{"class":1337},[1110,6878,5141],{"class":1343},[1110,6880,1558],{"class":1337},[1110,6882,6883],{"class":1112,"line":3831},[1110,6884,1402],{"emptyLinePlaceholder":21},[1110,6886,6887,6889,6891],{"class":1112,"line":3860},[1110,6888,1552],{"class":1337},[1110,6890,1555],{"class":1343},[1110,6892,1558],{"class":1337},[1110,6894,6895,6897,6899,6901,6903,6905,6907,6909],{"class":1112,"line":3901},[1110,6896,1565],{"class":1337},[1110,6898,5456],{"class":1343},[1110,6900,5459],{"class":1580},[1110,6902,1584],{"class":1337},[1110,6904,1511],{"class":1337},[1110,6906,5466],{"class":1120},[1110,6908,1511],{"class":1337},[1110,6910,1558],{"class":1337},[1110,6912,6913,6915,6917,6919,6921],{"class":1112,"line":3930},[1110,6914,1574],{"class":1337},[1110,6916,1555],{"class":1343},[1110,6918,5479],{"class":1337},[1110,6920,5482],{"class":1580},[1110,6922,1558],{"class":1337},[1110,6924,6925,6927,6929,6931,6933,6935,6938,6940],{"class":1112,"line":3942},[1110,6926,1598],{"class":1337},[1110,6928,5491],{"class":1343},[1110,6930,5494],{"class":1580},[1110,6932,1584],{"class":1337},[1110,6934,1511],{"class":1337},[1110,6936,6937],{"class":1120},"min-h-dvh flex flex-col py-4 sm:py-6",[1110,6939,1511],{"class":1337},[1110,6941,1558],{"class":1337},[1110,6943,6944,6946],{"class":1112,"line":3958},[1110,6945,5510],{"class":1337},[1110,6947,6948],{"class":1343},"UChatMessages\n",[1110,6950,6951,6954,6956,6958,6961],{"class":1112,"line":3972},[1110,6952,6953],{"class":1580},"          :messages",[1110,6955,1584],{"class":1337},[1110,6957,1511],{"class":1337},[1110,6959,6960],{"class":1120},"chat.messages",[1110,6962,5567],{"class":1337},[1110,6964,6965,6967,6969,6971,6974],{"class":1112,"line":3979},[1110,6966,5573],{"class":1580},[1110,6968,1584],{"class":1337},[1110,6970,1511],{"class":1337},[1110,6972,6973],{"class":1120},"chat.status",[1110,6975,5567],{"class":1337},[1110,6977,6978],{"class":1112,"line":3984},[1110,6979,6980],{"class":1580},"          should-auto-scroll\n",[1110,6982,6983,6986,6988,6990,6993],{"class":1112,"line":3989},[1110,6984,6985],{"class":1580},"          class",[1110,6987,1584],{"class":1337},[1110,6989,1511],{"class":1337},[1110,6991,6992],{"class":1120},"flex-1",[1110,6994,5567],{"class":1337},[1110,6996,6997],{"class":1112,"line":3995},[1110,6998,5633],{"class":1337},[1110,7000,7001,7003,7005,7007,7009,7011,7013,7015,7018,7020,7022],{"class":1112,"line":4012},[1110,7002,5639],{"class":1337},[1110,7004,1555],{"class":1343},[1110,7006,5479],{"class":1337},[1110,7008,371],{"class":1580},[1110,7010,1584],{"class":1337},[1110,7012,1511],{"class":1337},[1110,7014,1857],{"class":1337},[1110,7016,7017],{"class":1333}," message ",[1110,7019,1469],{"class":1337},[1110,7021,1511],{"class":1337},[1110,7023,1558],{"class":1337},[1110,7025,7026,7029,7031,7034,7036,7038,7041,7043,7046,7049,7051,7053,7055,7057,7060,7063,7065,7068,7070,7072,7074,7076,7079,7081,7084,7086,7088,7090,7092,7094,7097,7100],{"class":1112,"line":4034},[1110,7027,7028],{"class":1337},"            \u003C",[1110,7030,1555],{"class":1343},[1110,7032,7033],{"class":1323}," v-for",[1110,7035,1584],{"class":1337},[1110,7037,1511],{"class":1337},[1110,7039,7040],{"class":1333},"(part",[1110,7042,1708],{"class":1337},[1110,7044,7045],{"class":1333}," index) ",[1110,7047,7048],{"class":1337},"in",[1110,7050,2615],{"class":1333},[1110,7052,1800],{"class":1337},[1110,7054,2195],{"class":1333},[1110,7056,1511],{"class":1337},[1110,7058,7059],{"class":1337}," :",[1110,7061,7062],{"class":1580},"key",[1110,7064,1584],{"class":1337},[1110,7066,7067],{"class":1337},"\"`${",[1110,7069,4496],{"class":1333},[1110,7071,1800],{"class":1337},[1110,7073,2011],{"class":1333},[1110,7075,1469],{"class":1337},[1110,7077,7078],{"class":1120},"-",[1110,7080,5413],{"class":1337},[1110,7082,7083],{"class":1333},"part",[1110,7085,1800],{"class":1337},[1110,7087,6559],{"class":1333},[1110,7089,1469],{"class":1337},[1110,7091,7078],{"class":1120},[1110,7093,5413],{"class":1337},[1110,7095,7096],{"class":1333},"index",[1110,7098,7099],{"class":1337},"}`\"",[1110,7101,1558],{"class":1337},[1110,7103,7104,7107],{"class":1112,"line":4052},[1110,7105,7106],{"class":1337},"              \u003C",[1110,7108,7109],{"class":1343},"UChatReasoning\n",[1110,7111,7112,7115,7117,7119,7122],{"class":1112,"line":4060},[1110,7113,7114],{"class":1580},"                v-if",[1110,7116,1584],{"class":1337},[1110,7118,1511],{"class":1337},[1110,7120,7121],{"class":1120},"isReasoningUIPart(part)",[1110,7123,5567],{"class":1337},[1110,7125,7126,7129,7131,7133,7136],{"class":1112,"line":4077},[1110,7127,7128],{"class":1580},"                :text",[1110,7130,1584],{"class":1337},[1110,7132,1511],{"class":1337},[1110,7134,7135],{"class":1120},"part.text",[1110,7137,5567],{"class":1337},[1110,7139,7140,7143,7145,7147,7150],{"class":1112,"line":4098},[1110,7141,7142],{"class":1580},"                :streaming",[1110,7144,1584],{"class":1337},[1110,7146,1511],{"class":1337},[1110,7148,7149],{"class":1120},"isPartStreaming(part)",[1110,7151,5567],{"class":1337},[1110,7153,7154],{"class":1112,"line":4108},[1110,7155,7156],{"class":1337},"              >\n",[1110,7158,7159,7162],{"class":1112,"line":4118},[1110,7160,7161],{"class":1337},"                \u003C",[1110,7163,7164],{"class":1343},"ChatComark\n",[1110,7166,7167,7170,7172,7174,7176],{"class":1112,"line":4128},[1110,7168,7169],{"class":1580},"                  :markdown",[1110,7171,1584],{"class":1337},[1110,7173,1511],{"class":1337},[1110,7175,7135],{"class":1120},[1110,7177,5567],{"class":1337},[1110,7179,7180,7183,7185,7187,7189],{"class":1112,"line":4145},[1110,7181,7182],{"class":1580},"                  :streaming",[1110,7184,1584],{"class":1337},[1110,7186,1511],{"class":1337},[1110,7188,7149],{"class":1120},[1110,7190,5567],{"class":1337},[1110,7192,7193],{"class":1112,"line":4156},[1110,7194,7195],{"class":1337},"                \u002F>\n",[1110,7197,7198,7201,7204],{"class":1112,"line":4162},[1110,7199,7200],{"class":1337},"              \u003C\u002F",[1110,7202,7203],{"class":1343},"UChatReasoning",[1110,7205,1558],{"class":1337},[1110,7207,7208],{"class":1112,"line":4168},[1110,7209,1402],{"emptyLinePlaceholder":21},[1110,7211,7212,7214,7216,7219,7221,7223,7226,7229,7231],{"class":1112,"line":4178},[1110,7213,7106],{"class":1337},[1110,7215,1555],{"class":1343},[1110,7217,7218],{"class":1323}," v-else-if",[1110,7220,1584],{"class":1337},[1110,7222,1511],{"class":1337},[1110,7224,7225],{"class":1133},"isTextUIPart",[1110,7227,7228],{"class":1333},"(part)",[1110,7230,1511],{"class":1337},[1110,7232,1558],{"class":1337},[1110,7234,7235,7237],{"class":1112,"line":4188},[1110,7236,7161],{"class":1337},[1110,7238,7164],{"class":1343},[1110,7240,7241,7244,7246,7248,7251],{"class":1112,"line":4202},[1110,7242,7243],{"class":1580},"                  v-if",[1110,7245,1584],{"class":1337},[1110,7247,1511],{"class":1337},[1110,7249,7250],{"class":1120},"message.role === 'assistant'",[1110,7252,5567],{"class":1337},[1110,7254,7255,7257,7259,7261,7263],{"class":1112,"line":4217},[1110,7256,7169],{"class":1580},[1110,7258,1584],{"class":1337},[1110,7260,1511],{"class":1337},[1110,7262,7135],{"class":1120},[1110,7264,5567],{"class":1337},[1110,7266,7267,7269,7271,7273,7275],{"class":1112,"line":4222},[1110,7268,7182],{"class":1580},[1110,7270,1584],{"class":1337},[1110,7272,1511],{"class":1337},[1110,7274,7149],{"class":1120},[1110,7276,5567],{"class":1337},[1110,7278,7279],{"class":1112,"line":4227},[1110,7280,7195],{"class":1337},[1110,7282,7283,7285,7287,7289,7291,7293,7296,7298,7300,7302,7304,7307,7309],{"class":1112,"line":4237},[1110,7284,7161],{"class":1337},[1110,7286,1000],{"class":1343},[1110,7288,7218],{"class":1580},[1110,7290,1584],{"class":1337},[1110,7292,1511],{"class":1337},[1110,7294,7295],{"class":1120},"message.role === 'user'",[1110,7297,1511],{"class":1337},[1110,7299,5494],{"class":1580},[1110,7301,1584],{"class":1337},[1110,7303,1511],{"class":1337},[1110,7305,7306],{"class":1120},"whitespace-pre-wrap",[1110,7308,1511],{"class":1337},[1110,7310,1558],{"class":1337},[1110,7312,7313],{"class":1112,"line":4253},[1110,7314,7315],{"class":1333},"                  {{ part.text }}\n",[1110,7317,7318,7321,7323],{"class":1112,"line":4268},[1110,7319,7320],{"class":1337},"                \u003C\u002F",[1110,7322,1000],{"class":1343},[1110,7324,1558],{"class":1337},[1110,7326,7327,7329,7331],{"class":1112,"line":4274},[1110,7328,7200],{"class":1337},[1110,7330,1555],{"class":1343},[1110,7332,1558],{"class":1337},[1110,7334,7335,7338,7340],{"class":1112,"line":4280},[1110,7336,7337],{"class":1337},"            \u003C\u002F",[1110,7339,1555],{"class":1343},[1110,7341,1558],{"class":1337},[1110,7343,7344,7347,7349],{"class":1112,"line":4288},[1110,7345,7346],{"class":1337},"          \u003C\u002F",[1110,7348,1555],{"class":1343},[1110,7350,1558],{"class":1337},[1110,7352,7353,7355,7357],{"class":1112,"line":4293},[1110,7354,5536],{"class":1337},[1110,7356,5112],{"class":1343},[1110,7358,1558],{"class":1337},[1110,7360,7361],{"class":1112,"line":4299},[1110,7362,1402],{"emptyLinePlaceholder":21},[1110,7364,7365,7367],{"class":1112,"line":4319},[1110,7366,5510],{"class":1337},[1110,7368,5552],{"class":1343},[1110,7370,7371,7373,7375,7377,7379],{"class":1112,"line":4334},[1110,7372,5558],{"class":1580},[1110,7374,1584],{"class":1337},[1110,7376,1511],{"class":1337},[1110,7378,5223],{"class":1120},[1110,7380,5567],{"class":1337},[1110,7382,7383,7386,7388,7390,7393],{"class":1112,"line":4351},[1110,7384,7385],{"class":1580},"          :error",[1110,7387,1584],{"class":1337},[1110,7389,1511],{"class":1337},[1110,7391,7392],{"class":1120},"chat.error",[1110,7394,5567],{"class":1337},[1110,7396,7397,7399,7401,7403,7405],{"class":1112,"line":4374},[1110,7398,5588],{"class":1580},[1110,7400,1584],{"class":1337},[1110,7402,1511],{"class":1337},[1110,7404,5595],{"class":1120},[1110,7406,5567],{"class":1337},[1110,7408,7409,7411,7413,7415,7418],{"class":1112,"line":4385},[1110,7410,6985],{"class":1580},[1110,7412,1584],{"class":1337},[1110,7414,1511],{"class":1337},[1110,7416,7417],{"class":1120},"sticky bottom-0",[1110,7419,5567],{"class":1337},[1110,7421,7422,7424,7426,7428,7431],{"class":1112,"line":4393},[1110,7423,5618],{"class":1580},[1110,7425,1584],{"class":1337},[1110,7427,1511],{"class":1337},[1110,7429,7430],{"class":1120},"handleSubmit",[1110,7432,5567],{"class":1337},[1110,7434,7435],{"class":1112,"line":4399},[1110,7436,5633],{"class":1337},[1110,7438,7439,7441],{"class":1112,"line":4404},[1110,7440,5639],{"class":1337},[1110,7442,7443],{"class":1343},"UChatPromptSubmit\n",[1110,7445,7446,7449,7451,7453,7455],{"class":1112,"line":4427},[1110,7447,7448],{"class":1580},"            :status",[1110,7450,1584],{"class":1337},[1110,7452,1511],{"class":1337},[1110,7454,6973],{"class":1120},[1110,7456,5567],{"class":1337},[1110,7458,7459,7462,7464,7466,7468],{"class":1112,"line":4433},[1110,7460,7461],{"class":1580},"            color",[1110,7463,1584],{"class":1337},[1110,7465,1511],{"class":1337},[1110,7467,5652],{"class":1120},[1110,7469,5567],{"class":1337},[1110,7471,7472,7475,7477,7479,7482],{"class":1112,"line":4453},[1110,7473,7474],{"class":1580},"            @stop",[1110,7476,1584],{"class":1337},[1110,7478,1511],{"class":1337},[1110,7480,7481],{"class":1120},"chat.stop()",[1110,7483,5567],{"class":1337},[1110,7485,7486,7489,7491,7493,7496],{"class":1112,"line":4459},[1110,7487,7488],{"class":1580},"            @reload",[1110,7490,1584],{"class":1337},[1110,7492,1511],{"class":1337},[1110,7494,7495],{"class":1120},"chat.regenerate()",[1110,7497,5567],{"class":1337},[1110,7499,7500],{"class":1112,"line":4505},[1110,7501,7502],{"class":1337},"          \u002F>\n",[1110,7504,7505,7507,7509],{"class":1112,"line":4521},[1110,7506,5536],{"class":1337},[1110,7508,5106],{"class":1343},[1110,7510,1558],{"class":1337},[1110,7512,7513,7515,7517],{"class":1112,"line":4554},[1110,7514,5670],{"class":1337},[1110,7516,5491],{"class":1343},[1110,7518,1558],{"class":1337},[1110,7520,7521,7523,7525],{"class":1112,"line":4568},[1110,7522,1609],{"class":1337},[1110,7524,1555],{"class":1343},[1110,7526,1558],{"class":1337},[1110,7528,7529,7531,7533],{"class":1112,"line":4576},[1110,7530,1619],{"class":1337},[1110,7532,5456],{"class":1343},[1110,7534,1558],{"class":1337},[1110,7536,7537,7539,7541],{"class":1112,"line":4582},[1110,7538,1628],{"class":1337},[1110,7540,1555],{"class":1343},[1110,7542,1558],{"class":1337},[1000,7544,7545],{},"Here's a breakdown of the key parts:",[1000,7547,7548],{},[1018,7549,7550],{},"The Chat Class",[1000,7552,4655,7553,7558,7559,7561],{},[1054,7554,7556],{"href":6112,"rel":7555},[1058],[1060,7557,259],{}," class from ",[1060,7560,6204],{}," manages the entire conversation state. It handles:",[1012,7563,7564,7569,7584,7590,7595],{},[1015,7565,7566,7567],{},"Message history with ",[1060,7568,6960],{},[1015,7570,7571,7572,1943,7574,2862,7577,2862,7580,2862,7582,1874],{},"Connection status with ",[1060,7573,6973],{},[1060,7575,7576],{},"ready",[1060,7578,7579],{},"submitted",[1060,7581,5727],{},[1060,7583,6608],{},[1015,7585,7586,7587],{},"Sending messages with ",[1060,7588,7589],{},"chat.sendMessage()",[1015,7591,7592,7593],{},"Stopping generation with ",[1060,7594,7481],{},[1015,7596,7597,7598],{},"Regenerating responses with ",[1060,7599,7495],{},[1000,7601,4655,7602,7605,7606,7611,7612,7614],{},[1060,7603,7604],{},"onData"," callback receives ",[1054,7607,7610],{"href":7608,"rel":7609},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-ui\u002Fstreaming-data",[1058],"custom data events"," from the server (like ",[1060,7613,4344],{},"), allowing you to react to server-side events during streaming.",[1000,7616,7617],{},[1018,7618,7619],{},"UChatMessages Component",[1000,7621,4655,7622,7626],{},[1054,7623,7624],{"href":271},[1060,7625,5112],{}," component is purpose-built for AI chatbots with:",[1012,7628,7629,7632,7635,7638],{},[1015,7630,7631],{},"Auto-scroll to bottom on load",[1015,7633,7634],{},"Continuous scrolling as messages stream in",[1015,7636,7637],{},"A loading indicator while the assistant processes",[1015,7639,7640],{},"An \"Auto scroll\" button when scrolled up",[1000,7642,7643],{},[1018,7644,7645],{},"Rendering Message Parts",[1000,7647,7648,7649,7651,7652,1063,7654,7657,7658,7660,7661,7665,7666,7669,7670,7672],{},"We iterate over message ",[1060,7650,2195],{}," using AI SDK helpers like ",[1060,7653,7225],{},[1060,7655,7656],{},"isReasoningUIPart",", rendering assistant text with the ",[1060,7659,5965],{}," component we created earlier and reasoning content with ",[1054,7662,7663],{"href":291},[1060,7664,7203],{},". The ",[1060,7667,7668],{},"isPartStreaming"," utility from ",[1060,7671,6225],{}," detects if a part is currently being streamed.",[1000,7674,7675],{},[1018,7676,7677],{},"UChatPromptSubmit Component",[1000,7679,4655,7680,7684],{},[1054,7681,7682],{"href":286},[1060,7683,5642],{}," component adapts based on the chat status:",[1012,7686,7687,7690,7693],{},[1015,7688,7689],{},"Shows a send button when ready",[1015,7691,7692],{},"Shows a stop button while streaming",[1015,7694,7695],{},"Shows a reload button after an error",[1004,7697,7699],{"id":7698},"adding-chat-history","Adding chat history",[1000,7701,7702],{},"This section adds a dropdown menu to list previous chats and navigate between them.",[1138,7704,7706],{"id":7705},"listing-chats-api","Listing chats API",[1000,7708,7709],{},"First, create an endpoint to fetch all chats:",[1310,7711,7712],{},[1101,7713,7716],{"className":1314,"code":7714,"filename":7715,"language":1316,"meta":1106,"style":1106},"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",[1060,7717,7718,7736,7758,7777,7781,7799,7824,7851,7857],{"__ignoreMap":1106},[1110,7719,7720,7722,7724,7726,7728,7730,7732,7734],{"class":1112,"line":1113},[1110,7721,1699],{"class":1323},[1110,7723,1702],{"class":1337},[1110,7725,2495],{"class":1333},[1110,7727,1724],{"class":1337},[1110,7729,1727],{"class":1323},[1110,7731,1424],{"class":1337},[1110,7733,1138],{"class":1120},[1110,7735,1388],{"class":1337},[1110,7737,7738,7740,7742,7744,7746,7748,7750,7752,7754,7756],{"class":1112,"line":1130},[1110,7739,1699],{"class":1323},[1110,7741,1702],{"class":1337},[1110,7743,2438],{"class":1333},[1110,7745,1708],{"class":1337},[1110,7747,2546],{"class":1333},[1110,7749,1724],{"class":1337},[1110,7751,1727],{"class":1323},[1110,7753,1424],{"class":1337},[1110,7755,2555],{"class":1120},[1110,7757,1388],{"class":1337},[1110,7759,7760,7762,7764,7767,7769,7771,7773,7775],{"class":1112,"line":1353},[1110,7761,1699],{"class":1323},[1110,7763,1702],{"class":1337},[1110,7765,7766],{"class":1333}," desc",[1110,7768,1724],{"class":1337},[1110,7770,1727],{"class":1323},[1110,7772,1424],{"class":1337},[1110,7774,1752],{"class":1120},[1110,7776,1388],{"class":1337},[1110,7778,7779],{"class":1112,"line":1368},[1110,7780,1402],{"emptyLinePlaceholder":21},[1110,7782,7783,7785,7787,7789,7791,7793,7795,7797],{"class":1112,"line":1380},[1110,7784,1324],{"class":1323},[1110,7786,1327],{"class":1323},[1110,7788,2495],{"class":1133},[1110,7790,1334],{"class":1333},[1110,7792,2594],{"class":1580},[1110,7794,4991],{"class":1337},[1110,7796,1817],{"class":1580},[1110,7798,1413],{"class":1337},[1110,7800,7801,7803,7805,7807,7809,7811,7813,7815,7817,7820,7822],{"class":1112,"line":1391},[1110,7802,2838],{"class":1323},[1110,7804,2623],{"class":1323},[1110,7806,2438],{"class":1333},[1110,7808,1800],{"class":1337},[1110,7810,3484],{"class":1333},[1110,7812,1800],{"class":1337},[1110,7814,1779],{"class":1333},[1110,7816,1800],{"class":1337},[1110,7818,7819],{"class":1133},"findMany",[1110,7821,1334],{"class":1343},[1110,7823,1338],{"class":1337},[1110,7825,7826,7829,7831,7833,7835,7837,7839,7841,7843,7845,7847,7849],{"class":1112,"line":1399},[1110,7827,7828],{"class":1133},"    orderBy",[1110,7830,1347],{"class":1337},[1110,7832,4991],{"class":1337},[1110,7834,1817],{"class":1580},[1110,7836,7766],{"class":1133},[1110,7838,1334],{"class":1343},[1110,7840,2715],{"class":1333},[1110,7842,1800],{"class":1337},[1110,7844,1779],{"class":1333},[1110,7846,1800],{"class":1337},[1110,7848,5008],{"class":1333},[1110,7850,1472],{"class":1343},[1110,7852,7853,7855],{"class":1112,"line":1405},[1110,7854,2411],{"class":1337},[1110,7856,1472],{"class":1343},[1110,7858,7859,7861],{"class":1112,"line":1416},[1110,7860,1469],{"class":1337},[1110,7862,1472],{"class":1333},[1138,7864,7866],{"id":7865},"building-the-chats-history-dropdown","Building the chats history dropdown",[1000,7868,7869,7870,7875,7876,7881,7882,7875,7889,7891],{},"The component uses ",[1054,7871,7872],{"href":457},[1060,7873,7874],{},"UDropdownMenu"," with a ",[1054,7877,7878],{"href":230},[1060,7879,7880],{},"UButton"," as trigger. Use ",[1054,7883,7886],{"href":7884,"rel":7885},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-fetch",[1058],[1060,7887,7888],{},"useFetch",[1060,7890,7062],{}," to fetch and cache the chat list:",[1310,7893,7894],{},[1101,7895,7898],{"className":1542,"code":7896,"filename":7897,"language":34,"meta":1106,"style":1106},"\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",[1060,7899,7900,7920,7932,7936,7968,7983,7997,8003,8007,8027,8032,8048,8064,8084,8108,8112,8137,8162,8184,8210,8216,8220,8228,8232,8240,8271,8278,8295,8309,8323,8335,8349,8354,8362],{"__ignoreMap":1106},[1110,7901,7902,7904,7906,7908,7910,7912,7914,7916,7918],{"class":1112,"line":1113},[1110,7903,1552],{"class":1337},[1110,7905,5141],{"class":1343},[1110,7907,5144],{"class":1580},[1110,7909,5147],{"class":1580},[1110,7911,1584],{"class":1337},[1110,7913,1511],{"class":1337},[1110,7915,1316],{"class":1120},[1110,7917,1511],{"class":1337},[1110,7919,1558],{"class":1337},[1110,7921,7922,7924,7926,7928,7930],{"class":1112,"line":1130},[1110,7923,3059],{"class":1580},[1110,7925,6238],{"class":1333},[1110,7927,1584],{"class":1337},[1110,7929,6243],{"class":1133},[1110,7931,2666],{"class":1333},[1110,7933,7934],{"class":1112,"line":1353},[1110,7935,1402],{"emptyLinePlaceholder":21},[1110,7937,7938,7940,7942,7944,7946,7948,7950,7952,7954,7956,7958,7960,7962,7964,7966],{"class":1112,"line":1368},[1110,7939,3059],{"class":1580},[1110,7941,1702],{"class":1337},[1110,7943,6277],{"class":1343},[1110,7945,1347],{"class":1337},[1110,7947,1768],{"class":1333},[1110,7949,1469],{"class":1337},[1110,7951,2620],{"class":1337},[1110,7953,2623],{"class":1323},[1110,7955,6291],{"class":1133},[1110,7957,1334],{"class":1333},[1110,7959,1362],{"class":1337},[1110,7961,5284],{"class":1120},[1110,7963,1362],{"class":1337},[1110,7965,1708],{"class":1337},[1110,7967,1413],{"class":1337},[1110,7969,7970,7973,7975,7977,7979,7981],{"class":1112,"line":1380},[1110,7971,7972],{"class":1343},"  key",[1110,7974,1347],{"class":1337},[1110,7976,1424],{"class":1337},[1110,7978,1779],{"class":1120},[1110,7980,1362],{"class":1337},[1110,7982,1365],{"class":1337},[1110,7984,7985,7988,7990,7992,7994],{"class":1112,"line":1391},[1110,7986,7987],{"class":1133},"  default",[1110,7989,1347],{"class":1337},[1110,7991,4991],{"class":1337},[1110,7993,1817],{"class":1580},[1110,7995,7996],{"class":1333}," []\n",[1110,7998,7999,8001],{"class":1112,"line":1399},[1110,8000,1469],{"class":1337},[1110,8002,1472],{"class":1333},[1110,8004,8005],{"class":1112,"line":1405},[1110,8006,1402],{"emptyLinePlaceholder":21},[1110,8008,8009,8011,8014,8016,8019,8021,8023,8025],{"class":1112,"line":1416},[1110,8010,3059],{"class":1580},[1110,8012,8013],{"class":1333}," items ",[1110,8015,1584],{"class":1337},[1110,8017,8018],{"class":1133}," computed",[1110,8020,1334],{"class":1333},[1110,8022,1797],{"class":1337},[1110,8024,1817],{"class":1580},[1110,8026,1350],{"class":1333},[1110,8028,8029],{"class":1112,"line":1432},[1110,8030,8031],{"class":1337},"  {\n",[1110,8033,8034,8037,8039,8041,8044,8046],{"class":1112,"line":1438},[1110,8035,8036],{"class":1343},"    label",[1110,8038,1347],{"class":1337},[1110,8040,1424],{"class":1337},[1110,8042,8043],{"class":1120},"New chat",[1110,8045,1362],{"class":1337},[1110,8047,1365],{"class":1337},[1110,8049,8050,8053,8055,8057,8060,8062],{"class":1112,"line":1443},[1110,8051,8052],{"class":1343},"    to",[1110,8054,1347],{"class":1337},[1110,8056,1424],{"class":1337},[1110,8058,8059],{"class":1120},"\u002F",[1110,8061,1362],{"class":1337},[1110,8063,1365],{"class":1337},[1110,8065,8066,8069,8071,8073,8080,8082],{"class":1112,"line":1466},[1110,8067,8068],{"class":1343},"    icon",[1110,8070,1347],{"class":1337},[1110,8072,1424],{"class":1337},[1110,8074,8075,8079],{"class":1120},[8076,8077],"i",{"class":8078},"shiki-icon-highlight sRy2g","i-lucide-plus-square",[1110,8081,1362],{"class":1337},[1110,8083,1365],{"class":1337},[1110,8085,8086,8089,8091,8094,8096,8099,8102,8104,8106],{"class":1112,"line":1971},[1110,8087,8088],{"class":1343},"    active",[1110,8090,1347],{"class":1337},[1110,8092,8093],{"class":1333}," route",[1110,8095,1800],{"class":1337},[1110,8097,8098],{"class":1333},"name ",[1110,8100,8101],{"class":1337},"===",[1110,8103,1424],{"class":1337},[1110,8105,7096],{"class":1120},[1110,8107,1388],{"class":1337},[1110,8109,8110],{"class":1112,"line":1998},[1110,8111,1435],{"class":1337},[1110,8113,8114,8117,8119,8121,8123,8125,8127,8129,8131,8133,8135],{"class":1112,"line":2044},[1110,8115,8116],{"class":1337},"  ...",[1110,8118,1779],{"class":1333},[1110,8120,1800],{"class":1337},[1110,8122,3344],{"class":1333},[1110,8124,1800],{"class":1337},[1110,8126,4491],{"class":1133},[1110,8128,1334],{"class":1333},[1110,8130,262],{"class":1934},[1110,8132,1817],{"class":1580},[1110,8134,1943],{"class":1333},[1110,8136,1338],{"class":1337},[1110,8138,8139,8141,8143,8145,8147,8150,8153,8155,8158,8160],{"class":1112,"line":2111},[1110,8140,8036],{"class":1343},[1110,8142,1347],{"class":1337},[1110,8144,2788],{"class":1333},[1110,8146,1800],{"class":1337},[1110,8148,8149],{"class":1333},"title ",[1110,8151,8152],{"class":1337},"||",[1110,8154,1424],{"class":1337},[1110,8156,8157],{"class":1120},"Untitled",[1110,8159,1362],{"class":1337},[1110,8161,1365],{"class":1337},[1110,8163,8164,8166,8168,8170,8172,8174,8176,8178,8180,8182],{"class":1112,"line":2181},[1110,8165,8052],{"class":1343},[1110,8167,1347],{"class":1337},[1110,8169,3698],{"class":1337},[1110,8171,5410],{"class":1120},[1110,8173,5413],{"class":1337},[1110,8175,262],{"class":1333},[1110,8177,1800],{"class":1337},[1110,8179,2011],{"class":1333},[1110,8181,5422],{"class":1337},[1110,8183,1365],{"class":1337},[1110,8185,8186,8188,8190,8192,8194,8196,8198,8201,8203,8205,8207],{"class":1112,"line":2221},[1110,8187,8088],{"class":1343},[1110,8189,1347],{"class":1337},[1110,8191,8093],{"class":1333},[1110,8193,1800],{"class":1337},[1110,8195,6308],{"class":1333},[1110,8197,1800],{"class":1337},[1110,8199,8200],{"class":1333},"id ",[1110,8202,8101],{"class":1337},[1110,8204,2788],{"class":1333},[1110,8206,1800],{"class":1337},[1110,8208,8209],{"class":1333},"id\n",[1110,8211,8212,8214],{"class":1112,"line":2272},[1110,8213,2411],{"class":1337},[1110,8215,1964],{"class":1333},[1110,8217,8218],{"class":1112,"line":2285},[1110,8219,2318],{"class":1333},[1110,8221,8222,8224,8226],{"class":1112,"line":2315},[1110,8223,1628],{"class":1337},[1110,8225,5141],{"class":1343},[1110,8227,1558],{"class":1337},[1110,8229,8230],{"class":1112,"line":2321},[1110,8231,1402],{"emptyLinePlaceholder":21},[1110,8233,8234,8236,8238],{"class":1112,"line":2326},[1110,8235,1552],{"class":1337},[1110,8237,1555],{"class":1343},[1110,8239,1558],{"class":1337},[1110,8241,8242,8244,8246,8249,8251,8253,8256,8258,8260,8262,8264,8267,8269],{"class":1112,"line":2358},[1110,8243,1565],{"class":1337},[1110,8245,7874],{"class":1343},[1110,8247,8248],{"class":1580}," :items",[1110,8250,1584],{"class":1337},[1110,8252,1511],{"class":1337},[1110,8254,8255],{"class":1120},"items",[1110,8257,1511],{"class":1337},[1110,8259,5494],{"class":1580},[1110,8261,1584],{"class":1337},[1110,8263,1511],{"class":1337},[1110,8265,8266],{"class":1120},"m-2",[1110,8268,1511],{"class":1337},[1110,8270,1558],{"class":1337},[1110,8272,8273,8275],{"class":1112,"line":2374},[1110,8274,1574],{"class":1337},[1110,8276,8277],{"class":1343},"UButton\n",[1110,8279,8280,8283,8285,8287,8293],{"class":1112,"line":2392},[1110,8281,8282],{"class":1580},"      icon",[1110,8284,1584],{"class":1337},[1110,8286,1511],{"class":1337},[1110,8288,8289,8292],{"class":1120},[8076,8290],{"class":8291},"shiki-icon-highlight sdATh","i-lucide-messages-square",[1110,8294,5567],{"class":1337},[1110,8296,8297,8300,8302,8304,8307],{"class":1112,"line":2408},[1110,8298,8299],{"class":1580},"      variant",[1110,8301,1584],{"class":1337},[1110,8303,1511],{"class":1337},[1110,8305,8306],{"class":1120},"ghost",[1110,8308,5567],{"class":1337},[1110,8310,8311,8314,8316,8318,8321],{"class":1112,"line":2416},[1110,8312,8313],{"class":1580},"      label",[1110,8315,1584],{"class":1337},[1110,8317,1511],{"class":1337},[1110,8319,8320],{"class":1120},"Chats History",[1110,8322,5567],{"class":1337},[1110,8324,8325,8327,8329,8331,8333],{"class":1112,"line":3396},[1110,8326,6666],{"class":1580},[1110,8328,1584],{"class":1337},[1110,8330,1511],{"class":1337},[1110,8332,5652],{"class":1120},[1110,8334,5567],{"class":1337},[1110,8336,8337,8340,8342,8344,8347],{"class":1112,"line":3413},[1110,8338,8339],{"class":1580},"      class",[1110,8341,1584],{"class":1337},[1110,8343,1511],{"class":1337},[1110,8345,8346],{"class":1120},"w-fit",[1110,8348,5567],{"class":1337},[1110,8350,8351],{"class":1112,"line":3445},[1110,8352,8353],{"class":1337},"    \u002F>\n",[1110,8355,8356,8358,8360],{"class":1112,"line":3458},[1110,8357,1619],{"class":1337},[1110,8359,7874],{"class":1343},[1110,8361,1558],{"class":1337},[1110,8363,8364,8366,8368],{"class":1112,"line":3463},[1110,8365,1628],{"class":1337},[1110,8367,1555],{"class":1343},[1110,8369,1558],{"class":1337},[1004,8371,8373],{"id":8372},"integrating-history-in-the-home-page","Integrating history in the home page",[1310,8375,8376],{},[1687,8377,8378],{},[1101,8379,8382],{"className":1542,"code":8380,"filename":5131,"highlights":8381,"language":34,"meta":1106,"style":1106},"\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",[2408,2416,3396],[1060,8383,8384,8404,8420,8436,8440,8452,8474,8478,8490,8494,8498,8522,8536,8544,8552,8566,8602,8606,8610,8616,8620,8624,8646,8650,8658,8662,8670,8688,8702,8712,8721,8733,8751,8769,8773,8781,8785,8791,8803,8815,8827,8839,8851,8855,8873,8881,8889,8897,8905],{"__ignoreMap":1106},[1110,8385,8386,8388,8390,8392,8394,8396,8398,8400,8402],{"class":1112,"line":1113},[1110,8387,1552],{"class":1337},[1110,8389,5141],{"class":1343},[1110,8391,5144],{"class":1580},[1110,8393,5147],{"class":1580},[1110,8395,1584],{"class":1337},[1110,8397,1511],{"class":1337},[1110,8399,1316],{"class":1120},[1110,8401,1511],{"class":1337},[1110,8403,1558],{"class":1337},[1110,8405,8406,8408,8410,8412,8414,8416,8418],{"class":1112,"line":1130},[1110,8407,3059],{"class":1580},[1110,8409,5164],{"class":1333},[1110,8411,1584],{"class":1337},[1110,8413,5169],{"class":1133},[1110,8415,1334],{"class":1333},[1110,8417,5174],{"class":1337},[1110,8419,1472],{"class":1333},[1110,8421,8422,8424,8426,8428,8430,8432,8434],{"class":1112,"line":1353},[1110,8423,3059],{"class":1580},[1110,8425,5183],{"class":1333},[1110,8427,1584],{"class":1337},[1110,8429,5169],{"class":1133},[1110,8431,1334],{"class":1333},[1110,8433,5192],{"class":4196},[1110,8435,1472],{"class":1333},[1110,8437,8438],{"class":1112,"line":1368},[1110,8439,1402],{"emptyLinePlaceholder":21},[1110,8441,8442,8444,8446,8448,8450],{"class":1112,"line":1380},[1110,8443,2594],{"class":1580},[1110,8445,5205],{"class":1580},[1110,8447,5208],{"class":1133},[1110,8449,1797],{"class":1337},[1110,8451,1413],{"class":1337},[1110,8453,8454,8456,8458,8460,8462,8464,8466,8468,8470,8472],{"class":1112,"line":1391},[1110,8455,3559],{"class":1323},[1110,8457,1943],{"class":1343},[1110,8459,3564],{"class":1337},[1110,8461,5223],{"class":1333},[1110,8463,1800],{"class":1337},[1110,8465,3344],{"class":1333},[1110,8467,1800],{"class":1337},[1110,8469,5232],{"class":1133},[1110,8471,5235],{"class":1343},[1110,8473,5238],{"class":1323},[1110,8475,8476],{"class":1112,"line":1399},[1110,8477,1402],{"emptyLinePlaceholder":21},[1110,8479,8480,8482,8484,8486,8488],{"class":1112,"line":1405},[1110,8481,5247],{"class":1333},[1110,8483,1800],{"class":1337},[1110,8485,3344],{"class":1333},[1110,8487,2620],{"class":1337},[1110,8489,4382],{"class":4196},[1110,8491,8492],{"class":1112,"line":1416},[1110,8493,1402],{"emptyLinePlaceholder":21},[1110,8495,8496],{"class":1112,"line":1432},[1110,8497,5264],{"class":2688},[1110,8499,8500,8502,8504,8506,8508,8510,8512,8514,8516,8518,8520],{"class":1112,"line":1438},[1110,8501,2610],{"class":1580},[1110,8503,2788],{"class":1333},[1110,8505,2620],{"class":1337},[1110,8507,2623],{"class":1323},[1110,8509,5277],{"class":1133},[1110,8511,1334],{"class":1343},[1110,8513,1362],{"class":1337},[1110,8515,5284],{"class":1120},[1110,8517,1362],{"class":1337},[1110,8519,1708],{"class":1337},[1110,8521,1413],{"class":1337},[1110,8523,8524,8526,8528,8530,8532,8534],{"class":1112,"line":1443},[1110,8525,5295],{"class":1343},[1110,8527,1347],{"class":1337},[1110,8529,1424],{"class":1337},[1110,8531,5302],{"class":1120},[1110,8533,1362],{"class":1337},[1110,8535,1365],{"class":1337},[1110,8537,8538,8540,8542],{"class":1112,"line":1466},[1110,8539,5311],{"class":1343},[1110,8541,1347],{"class":1337},[1110,8543,1413],{"class":1337},[1110,8545,8546,8548,8550],{"class":1112,"line":1971},[1110,8547,3384],{"class":1343},[1110,8549,1347],{"class":1337},[1110,8551,1413],{"class":1337},[1110,8553,8554,8556,8558,8560,8562,8564],{"class":1112,"line":1998},[1110,8555,4524],{"class":1343},[1110,8557,1347],{"class":1337},[1110,8559,1424],{"class":1337},[1110,8561,2143],{"class":1120},[1110,8563,1362],{"class":1337},[1110,8565,1365],{"class":1337},[1110,8567,8568,8570,8572,8574,8576,8578,8580,8582,8584,8586,8588,8590,8592,8594,8596,8598,8600],{"class":1112,"line":2044},[1110,8569,4557],{"class":1343},[1110,8571,1347],{"class":1337},[1110,8573,1451],{"class":1343},[1110,8575,1857],{"class":1337},[1110,8577,2517],{"class":1343},[1110,8579,1347],{"class":1337},[1110,8581,1424],{"class":1337},[1110,8583,5356],{"class":1120},[1110,8585,1362],{"class":1337},[1110,8587,1708],{"class":1337},[1110,8589,1711],{"class":1343},[1110,8591,1347],{"class":1337},[1110,8593,5367],{"class":1333},[1110,8595,1800],{"class":1337},[1110,8597,3344],{"class":1333},[1110,8599,1724],{"class":1337},[1110,8601,3185],{"class":1343},[1110,8603,8604],{"class":1112,"line":2111},[1110,8605,4396],{"class":1337},[1110,8607,8608],{"class":1112,"line":2181},[1110,8609,4579],{"class":1337},[1110,8611,8612,8614],{"class":1112,"line":2221},[1110,8613,2411],{"class":1337},[1110,8615,1472],{"class":1343},[1110,8617,8618],{"class":1112,"line":2272},[1110,8619,1402],{"emptyLinePlaceholder":21},[1110,8621,8622],{"class":1112,"line":2285},[1110,8623,5398],{"class":2688},[1110,8625,8626,8628,8630,8632,8634,8636,8638,8640,8642,8644],{"class":1112,"line":2315},[1110,8627,5403],{"class":1133},[1110,8629,1334],{"class":1343},[1110,8631,3704],{"class":1337},[1110,8633,5410],{"class":1120},[1110,8635,5413],{"class":1337},[1110,8637,262],{"class":1333},[1110,8639,1800],{"class":1337},[1110,8641,2011],{"class":1333},[1110,8643,5422],{"class":1337},[1110,8645,1472],{"class":1343},[1110,8647,8648],{"class":1112,"line":2321},[1110,8649,5429],{"class":1337},[1110,8651,8652,8654,8656],{"class":1112,"line":2326},[1110,8653,1628],{"class":1337},[1110,8655,5141],{"class":1343},[1110,8657,1558],{"class":1337},[1110,8659,8660],{"class":1112,"line":2358},[1110,8661,1402],{"emptyLinePlaceholder":21},[1110,8663,8664,8666,8668],{"class":1112,"line":2374},[1110,8665,1552],{"class":1337},[1110,8667,1555],{"class":1343},[1110,8669,1558],{"class":1337},[1110,8671,8672,8674,8676,8678,8680,8682,8684,8686],{"class":1112,"line":2392},[1110,8673,1565],{"class":1337},[1110,8675,5456],{"class":1343},[1110,8677,5459],{"class":1580},[1110,8679,1584],{"class":1337},[1110,8681,1511],{"class":1337},[1110,8683,5466],{"class":1120},[1110,8685,1511],{"class":1337},[1110,8687,1558],{"class":1337},[1110,8689,8691,8693,8695,8697,8700],{"class":8690,"line":2408},[1112,1562],[1110,8692,1574],{"class":1337},[1110,8694,1555],{"class":1343},[1110,8696,5479],{"class":1337},[1110,8698,8699],{"class":1580},"header",[1110,8701,1558],{"class":1337},[1110,8703,8705,8707,8710],{"class":8704,"line":2416},[1112,1562],[1110,8706,1598],{"class":1337},[1110,8708,8709],{"class":1343},"ChatsHistory",[1110,8711,1604],{"class":1337},[1110,8713,8715,8717,8719],{"class":8714,"line":3396},[1112,1562],[1110,8716,1609],{"class":1337},[1110,8718,1555],{"class":1343},[1110,8720,1558],{"class":1337},[1110,8722,8723,8725,8727,8729,8731],{"class":1112,"line":3413},[1110,8724,1574],{"class":1337},[1110,8726,1555],{"class":1343},[1110,8728,5479],{"class":1337},[1110,8730,5482],{"class":1580},[1110,8732,1558],{"class":1337},[1110,8734,8735,8737,8739,8741,8743,8745,8747,8749],{"class":1112,"line":3445},[1110,8736,1598],{"class":1337},[1110,8738,5491],{"class":1343},[1110,8740,5494],{"class":1580},[1110,8742,1584],{"class":1337},[1110,8744,1511],{"class":1337},[1110,8746,5501],{"class":1120},[1110,8748,1511],{"class":1337},[1110,8750,1558],{"class":1337},[1110,8752,8753,8755,8757,8759,8761,8763,8765,8767],{"class":1112,"line":3458},[1110,8754,5510],{"class":1337},[1110,8756,5513],{"class":1343},[1110,8758,5494],{"class":1580},[1110,8760,1584],{"class":1337},[1110,8762,1511],{"class":1337},[1110,8764,5522],{"class":1120},[1110,8766,1511],{"class":1337},[1110,8768,1558],{"class":1337},[1110,8770,8771],{"class":1112,"line":3463},[1110,8772,5531],{"class":1333},[1110,8774,8775,8777,8779],{"class":1112,"line":3469},[1110,8776,5536],{"class":1337},[1110,8778,5513],{"class":1343},[1110,8780,1558],{"class":1337},[1110,8782,8783],{"class":1112,"line":3500},[1110,8784,1402],{"emptyLinePlaceholder":21},[1110,8786,8787,8789],{"class":1112,"line":3544},[1110,8788,5510],{"class":1337},[1110,8790,5552],{"class":1343},[1110,8792,8793,8795,8797,8799,8801],{"class":1112,"line":3551},[1110,8794,5558],{"class":1580},[1110,8796,1584],{"class":1337},[1110,8798,1511],{"class":1337},[1110,8800,5223],{"class":1120},[1110,8802,5567],{"class":1337},[1110,8804,8805,8807,8809,8811,8813],{"class":1112,"line":3556},[1110,8806,5573],{"class":1580},[1110,8808,1584],{"class":1337},[1110,8810,1511],{"class":1337},[1110,8812,5580],{"class":1120},[1110,8814,5567],{"class":1337},[1110,8816,8817,8819,8821,8823,8825],{"class":1112,"line":3574},[1110,8818,5588],{"class":1580},[1110,8820,1584],{"class":1337},[1110,8822,1511],{"class":1337},[1110,8824,5595],{"class":1120},[1110,8826,5567],{"class":1337},[1110,8828,8829,8831,8833,8835,8837],{"class":1112,"line":3613},[1110,8830,5603],{"class":1580},[1110,8832,1584],{"class":1337},[1110,8834,1511],{"class":1337},[1110,8836,5610],{"class":1120},[1110,8838,5567],{"class":1337},[1110,8840,8841,8843,8845,8847,8849],{"class":1112,"line":3619},[1110,8842,5618],{"class":1580},[1110,8844,1584],{"class":1337},[1110,8846,1511],{"class":1337},[1110,8848,5625],{"class":1120},[1110,8850,5567],{"class":1337},[1110,8852,8853],{"class":1112,"line":3624},[1110,8854,5633],{"class":1337},[1110,8856,8857,8859,8861,8863,8865,8867,8869,8871],{"class":1112,"line":3630},[1110,8858,5639],{"class":1337},[1110,8860,5642],{"class":1343},[1110,8862,5645],{"class":1580},[1110,8864,1584],{"class":1337},[1110,8866,1511],{"class":1337},[1110,8868,5652],{"class":1120},[1110,8870,1511],{"class":1337},[1110,8872,1604],{"class":1337},[1110,8874,8875,8877,8879],{"class":1112,"line":3650},[1110,8876,5536],{"class":1337},[1110,8878,5106],{"class":1343},[1110,8880,1558],{"class":1337},[1110,8882,8883,8885,8887],{"class":1112,"line":3678},[1110,8884,5670],{"class":1337},[1110,8886,5491],{"class":1343},[1110,8888,1558],{"class":1337},[1110,8890,8891,8893,8895],{"class":1112,"line":3690},[1110,8892,1609],{"class":1337},[1110,8894,1555],{"class":1343},[1110,8896,1558],{"class":1337},[1110,8898,8899,8901,8903],{"class":1112,"line":3709},[1110,8900,1619],{"class":1337},[1110,8902,5456],{"class":1343},[1110,8904,1558],{"class":1337},[1110,8906,8907,8909,8911],{"class":1112,"line":3737},[1110,8908,1628],{"class":1337},[1110,8910,1555],{"class":1343},[1110,8912,1558],{"class":1337},[1004,8914,8916],{"id":8915},"integrating-history-in-the-chat-page","Integrating history in the chat page",[1310,8918,8919],{},[1687,8920,8921],{},[1101,8922,8925],{"className":1542,"code":8923,"filename":6132,"highlights":8924,"language":34,"meta":1106,"style":1106},"\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",[3979,3984,3989],[1060,8926,8927,8947,8973,8991,9009,9013,9025,9037,9041,9045,9087,9091,9107,9147,9151,9155,9171,9175,9179,9195,9213,9231,9245,9269,9277,9289,9293,9317,9331,9335,9339,9351,9363,9377,9391,9403,9409,9413,9419,9423,9441,9451,9471,9497,9509,9513,9517,9521,9525,9537,9565,9575,9579,9585,9593,9597,9605,9623,9635,9643,9651,9663,9682,9689,9702,9714,9718,9730,9734,9758,9824,9830,9842,9854,9866,9870,9876,9888,9900,9904,9912,9916,9936,9942,9954,9966,9978,9982,10010,10014,10022,10030,10038,10046,10054,10058,10064,10076,10088,10100,10112,10124,10128,10134,10146,10158,10170,10182,10186,10194,10202,10210,10218],{"__ignoreMap":1106},[1110,8928,8929,8931,8933,8935,8937,8939,8941,8943,8945],{"class":1112,"line":1113},[1110,8930,1552],{"class":1337},[1110,8932,5141],{"class":1343},[1110,8934,5144],{"class":1580},[1110,8936,5147],{"class":1580},[1110,8938,1584],{"class":1337},[1110,8940,1511],{"class":1337},[1110,8942,1316],{"class":1120},[1110,8944,1511],{"class":1337},[1110,8946,1558],{"class":1337},[1110,8948,8949,8951,8953,8955,8957,8959,8961,8963,8965,8967,8969,8971],{"class":1112,"line":1130},[1110,8950,1699],{"class":1323},[1110,8952,1702],{"class":1337},[1110,8954,6165],{"class":1333},[1110,8956,1708],{"class":1337},[1110,8958,6170],{"class":1333},[1110,8960,1708],{"class":1337},[1110,8962,6175],{"class":1333},[1110,8964,1724],{"class":1337},[1110,8966,1727],{"class":1323},[1110,8968,1424],{"class":1337},[1110,8970,2531],{"class":1120},[1110,8972,1388],{"class":1337},[1110,8974,8975,8977,8979,8981,8983,8985,8987,8989],{"class":1112,"line":1353},[1110,8976,1699],{"class":1323},[1110,8978,1702],{"class":1337},[1110,8980,6195],{"class":1333},[1110,8982,1724],{"class":1337},[1110,8984,1727],{"class":1323},[1110,8986,1424],{"class":1337},[1110,8988,6204],{"class":1120},[1110,8990,1388],{"class":1337},[1110,8992,8993,8995,8997,8999,9001,9003,9005,9007],{"class":1112,"line":1368},[1110,8994,1699],{"class":1323},[1110,8996,1702],{"class":1337},[1110,8998,6216],{"class":1333},[1110,9000,1724],{"class":1337},[1110,9002,1727],{"class":1323},[1110,9004,1424],{"class":1337},[1110,9006,6225],{"class":1120},[1110,9008,1388],{"class":1337},[1110,9010,9011],{"class":1112,"line":1380},[1110,9012,1402],{"emptyLinePlaceholder":21},[1110,9014,9015,9017,9019,9021,9023],{"class":1112,"line":1391},[1110,9016,3059],{"class":1580},[1110,9018,6238],{"class":1333},[1110,9020,1584],{"class":1337},[1110,9022,6243],{"class":1133},[1110,9024,2666],{"class":1333},[1110,9026,9027,9029,9031,9033,9035],{"class":1112,"line":1399},[1110,9028,3059],{"class":1580},[1110,9030,6252],{"class":1333},[1110,9032,1584],{"class":1337},[1110,9034,6257],{"class":1133},[1110,9036,2666],{"class":1333},[1110,9038,9039],{"class":1112,"line":1405},[1110,9040,1402],{"emptyLinePlaceholder":21},[1110,9042,9043],{"class":1112,"line":1416},[1110,9044,6268],{"class":2688},[1110,9046,9047,9049,9051,9053,9055,9057,9059,9061,9063,9065,9067,9069,9071,9073,9075,9077,9079,9081,9083,9085],{"class":1112,"line":1432},[1110,9048,3059],{"class":1580},[1110,9050,1702],{"class":1337},[1110,9052,6277],{"class":1343},[1110,9054,1347],{"class":1337},[1110,9056,6282],{"class":1333},[1110,9058,1469],{"class":1337},[1110,9060,2620],{"class":1337},[1110,9062,2623],{"class":1323},[1110,9064,6291],{"class":1133},[1110,9066,1334],{"class":1333},[1110,9068,3704],{"class":1337},[1110,9070,6298],{"class":1120},[1110,9072,5413],{"class":1337},[1110,9074,6303],{"class":1333},[1110,9076,1800],{"class":1337},[1110,9078,6308],{"class":1333},[1110,9080,1800],{"class":1337},[1110,9082,2011],{"class":1333},[1110,9084,5422],{"class":1337},[1110,9086,1472],{"class":1333},[1110,9088,9089],{"class":1112,"line":1438},[1110,9090,1402],{"emptyLinePlaceholder":21},[1110,9092,9093,9095,9097,9099,9101,9103,9105],{"class":1112,"line":1443},[1110,9094,6325],{"class":1323},[1110,9096,1943],{"class":1333},[1110,9098,3564],{"class":1337},[1110,9100,6332],{"class":1333},[1110,9102,1800],{"class":1337},[1110,9104,6337],{"class":1333},[1110,9106,1338],{"class":1337},[1110,9108,9109,9111,9113,9115,9117,9119,9121,9123,9125,9127,9129,9131,9133,9135,9137,9139,9141,9143,9145],{"class":1112,"line":1466},[1110,9110,6344],{"class":1323},[1110,9112,2897],{"class":1133},[1110,9114,1334],{"class":1343},[1110,9116,1857],{"class":1337},[1110,9118,3586],{"class":1343},[1110,9120,1347],{"class":1337},[1110,9122,3592],{"class":3591},[1110,9124,1708],{"class":1337},[1110,9126,3597],{"class":1343},[1110,9128,1347],{"class":1337},[1110,9130,1424],{"class":1337},[1110,9132,3604],{"class":1120},[1110,9134,1362],{"class":1337},[1110,9136,1708],{"class":1337},[1110,9138,6373],{"class":1343},[1110,9140,1347],{"class":1337},[1110,9142,4197],{"class":4196},[1110,9144,1724],{"class":1337},[1110,9146,1472],{"class":1343},[1110,9148,9149],{"class":1112,"line":1971},[1110,9150,5429],{"class":1337},[1110,9152,9153],{"class":1112,"line":1998},[1110,9154,1402],{"emptyLinePlaceholder":21},[1110,9156,9157,9159,9161,9163,9165,9167,9169],{"class":1112,"line":2044},[1110,9158,3059],{"class":1580},[1110,9160,5164],{"class":1333},[1110,9162,1584],{"class":1337},[1110,9164,5169],{"class":1133},[1110,9166,1334],{"class":1333},[1110,9168,5174],{"class":1337},[1110,9170,1472],{"class":1333},[1110,9172,9173],{"class":1112,"line":2111},[1110,9174,1402],{"emptyLinePlaceholder":21},[1110,9176,9177],{"class":1112,"line":2181},[1110,9178,6414],{"class":2688},[1110,9180,9181,9183,9185,9187,9189,9191,9193],{"class":1112,"line":2221},[1110,9182,3059],{"class":1580},[1110,9184,6422],{"class":1333},[1110,9186,1584],{"class":1337},[1110,9188,1894],{"class":1337},[1110,9190,6195],{"class":1133},[1110,9192,1334],{"class":1333},[1110,9194,1338],{"class":1337},[1110,9196,9197,9199,9201,9203,9205,9207,9209,9211],{"class":1112,"line":2272},[1110,9198,1790],{"class":1343},[1110,9200,1347],{"class":1337},[1110,9202,6442],{"class":1333},[1110,9204,1800],{"class":1337},[1110,9206,3344],{"class":1333},[1110,9208,1800],{"class":1337},[1110,9210,2011],{"class":1333},[1110,9212,1365],{"class":1337},[1110,9214,9215,9217,9219,9221,9223,9225,9227,9229],{"class":1112,"line":2285},[1110,9216,1950],{"class":1343},[1110,9218,1347],{"class":1337},[1110,9220,6442],{"class":1333},[1110,9222,1800],{"class":1337},[1110,9224,3344],{"class":1333},[1110,9226,1800],{"class":1337},[1110,9228,1989],{"class":1333},[1110,9230,1365],{"class":1337},[1110,9232,9233,9235,9237,9239,9241,9243],{"class":1112,"line":2315},[1110,9234,6477],{"class":1343},[1110,9236,1347],{"class":1337},[1110,9238,1894],{"class":1337},[1110,9240,6165],{"class":1133},[1110,9242,1334],{"class":1333},[1110,9244,1338],{"class":1337},[1110,9246,9247,9249,9251,9253,9255,9257,9259,9261,9263,9265,9267],{"class":1112,"line":2321},[1110,9248,6493],{"class":1343},[1110,9250,1347],{"class":1337},[1110,9252,3698],{"class":1337},[1110,9254,6298],{"class":1120},[1110,9256,5413],{"class":1337},[1110,9258,6332],{"class":1333},[1110,9260,1800],{"class":1337},[1110,9262,3344],{"class":1333},[1110,9264,1800],{"class":1337},[1110,9266,2011],{"class":1333},[1110,9268,6514],{"class":1337},[1110,9270,9271,9273,9275],{"class":1112,"line":2326},[1110,9272,2411],{"class":1337},[1110,9274,1874],{"class":1333},[1110,9276,1365],{"class":1337},[1110,9278,9279,9281,9283,9285,9287],{"class":1112,"line":2358},[1110,9280,6529],{"class":1343},[1110,9282,1334],{"class":1337},[1110,9284,6534],{"class":1934},[1110,9286,1874],{"class":1337},[1110,9288,1413],{"class":1337},[1110,9290,9291],{"class":1112,"line":2374},[1110,9292,6544],{"class":2688},[1110,9294,9295,9297,9299,9301,9303,9305,9307,9309,9311,9313,9315],{"class":1112,"line":2392},[1110,9296,6550],{"class":1323},[1110,9298,1943],{"class":1343},[1110,9300,6534],{"class":1333},[1110,9302,1800],{"class":1337},[1110,9304,6559],{"class":1333},[1110,9306,3371],{"class":1337},[1110,9308,1424],{"class":1337},[1110,9310,4344],{"class":1120},[1110,9312,1362],{"class":1337},[1110,9314,3569],{"class":1343},[1110,9316,1338],{"class":1337},[1110,9318,9319,9321,9323,9325,9327,9329],{"class":1112,"line":2408},[1110,9320,6577],{"class":1133},[1110,9322,1334],{"class":1343},[1110,9324,1362],{"class":1337},[1110,9326,1779],{"class":1120},[1110,9328,1362],{"class":1337},[1110,9330,1472],{"class":1343},[1110,9332,9333],{"class":1112,"line":2416},[1110,9334,4579],{"class":1337},[1110,9336,9337],{"class":1112,"line":3396},[1110,9338,1435],{"class":1337},[1110,9340,9341,9343,9345,9347,9349],{"class":1112,"line":3413},[1110,9342,6603],{"class":1343},[1110,9344,1334],{"class":1337},[1110,9346,6608],{"class":1934},[1110,9348,1874],{"class":1337},[1110,9350,1413],{"class":1337},[1110,9352,9353,9355,9357,9359,9361],{"class":1112,"line":3445},[1110,9354,6618],{"class":1333},[1110,9356,1800],{"class":1337},[1110,9358,6623],{"class":1133},[1110,9360,1334],{"class":1343},[1110,9362,1338],{"class":1337},[1110,9364,9365,9367,9369,9371,9373,9375],{"class":1112,"line":3458},[1110,9366,6633],{"class":1343},[1110,9368,1347],{"class":1337},[1110,9370,1424],{"class":1337},[1110,9372,497],{"class":1120},[1110,9374,1362],{"class":1337},[1110,9376,1365],{"class":1337},[1110,9378,9379,9381,9383,9385,9387,9389],{"class":1112,"line":3463},[1110,9380,6649],{"class":1343},[1110,9382,1347],{"class":1337},[1110,9384,6654],{"class":1333},[1110,9386,1800],{"class":1337},[1110,9388,4496],{"class":1333},[1110,9390,1365],{"class":1337},[1110,9392,9393,9395,9397,9399,9401],{"class":1112,"line":3469},[1110,9394,6666],{"class":1343},[1110,9396,1347],{"class":1337},[1110,9398,1424],{"class":1337},[1110,9400,6608],{"class":1120},[1110,9402,1388],{"class":1337},[1110,9404,9405,9407],{"class":1112,"line":3500},[1110,9406,3399],{"class":1337},[1110,9408,1472],{"class":1343},[1110,9410,9411],{"class":1112,"line":3544},[1110,9412,3616],{"class":1337},[1110,9414,9415,9417],{"class":1112,"line":3551},[1110,9416,1469],{"class":1337},[1110,9418,1472],{"class":1333},[1110,9420,9421],{"class":1112,"line":3556},[1110,9422,1402],{"emptyLinePlaceholder":21},[1110,9424,9425,9427,9429,9431,9433,9435,9437,9439],{"class":1112,"line":3574},[1110,9426,6702],{"class":1580},[1110,9428,6705],{"class":1133},[1110,9430,1334],{"class":1337},[1110,9432,6710],{"class":1934},[1110,9434,1347],{"class":1337},[1110,9436,6715],{"class":1116},[1110,9438,1874],{"class":1337},[1110,9440,1413],{"class":1337},[1110,9442,9443,9445,9447,9449],{"class":1112,"line":3613},[1110,9444,6724],{"class":1333},[1110,9446,1800],{"class":1337},[1110,9448,6729],{"class":1133},[1110,9450,2666],{"class":1343},[1110,9452,9453,9455,9457,9459,9461,9463,9465,9467,9469],{"class":1112,"line":3619},[1110,9454,3559],{"class":1323},[1110,9456,1943],{"class":1343},[1110,9458,5223],{"class":1333},[1110,9460,1800],{"class":1337},[1110,9462,3344],{"class":1333},[1110,9464,1800],{"class":1337},[1110,9466,5232],{"class":1133},[1110,9468,5235],{"class":1343},[1110,9470,1338],{"class":1337},[1110,9472,9473,9475,9477,9479,9481,9483,9485,9487,9489,9491,9493,9495],{"class":1112,"line":3624},[1110,9474,6756],{"class":1333},[1110,9476,1800],{"class":1337},[1110,9478,6761],{"class":1133},[1110,9480,1334],{"class":1343},[1110,9482,1857],{"class":1337},[1110,9484,1711],{"class":1343},[1110,9486,1347],{"class":1337},[1110,9488,5367],{"class":1333},[1110,9490,1800],{"class":1337},[1110,9492,3344],{"class":1333},[1110,9494,1724],{"class":1337},[1110,9496,1472],{"class":1343},[1110,9498,9499,9501,9503,9505,9507],{"class":1112,"line":3630},[1110,9500,6784],{"class":1333},[1110,9502,1800],{"class":1337},[1110,9504,3344],{"class":1333},[1110,9506,2620],{"class":1337},[1110,9508,6793],{"class":1337},[1110,9510,9511],{"class":1112,"line":3650},[1110,9512,3616],{"class":1337},[1110,9514,9515],{"class":1112,"line":3678},[1110,9516,5429],{"class":1337},[1110,9518,9519],{"class":1112,"line":3690},[1110,9520,1402],{"emptyLinePlaceholder":21},[1110,9522,9523],{"class":1112,"line":3709},[1110,9524,6810],{"class":2688},[1110,9526,9527,9529,9531,9533,9535],{"class":1112,"line":3737},[1110,9528,6815],{"class":1133},[1110,9530,1334],{"class":1333},[1110,9532,1797],{"class":1337},[1110,9534,1817],{"class":1580},[1110,9536,1413],{"class":1337},[1110,9538,9539,9541,9543,9545,9547,9549,9551,9553,9555,9557,9559,9561,9563],{"class":1112,"line":3744},[1110,9540,3559],{"class":1323},[1110,9542,1943],{"class":1343},[1110,9544,6332],{"class":1333},[1110,9546,1800],{"class":1337},[1110,9548,3344],{"class":1333},[1110,9550,3870],{"class":1337},[1110,9552,1989],{"class":1333},[1110,9554,1800],{"class":1337},[1110,9556,3849],{"class":1333},[1110,9558,3371],{"class":1337},[1110,9560,3855],{"class":3591},[1110,9562,3569],{"class":1343},[1110,9564,1338],{"class":1337},[1110,9566,9567,9569,9571,9573],{"class":1112,"line":3749},[1110,9568,6756],{"class":1333},[1110,9570,1800],{"class":1337},[1110,9572,6860],{"class":1133},[1110,9574,2666],{"class":1343},[1110,9576,9577],{"class":1112,"line":3815},[1110,9578,3616],{"class":1337},[1110,9580,9581,9583],{"class":1112,"line":3820},[1110,9582,1469],{"class":1337},[1110,9584,1472],{"class":1333},[1110,9586,9587,9589,9591],{"class":1112,"line":3825},[1110,9588,1628],{"class":1337},[1110,9590,5141],{"class":1343},[1110,9592,1558],{"class":1337},[1110,9594,9595],{"class":1112,"line":3831},[1110,9596,1402],{"emptyLinePlaceholder":21},[1110,9598,9599,9601,9603],{"class":1112,"line":3860},[1110,9600,1552],{"class":1337},[1110,9602,1555],{"class":1343},[1110,9604,1558],{"class":1337},[1110,9606,9607,9609,9611,9613,9615,9617,9619,9621],{"class":1112,"line":3901},[1110,9608,1565],{"class":1337},[1110,9610,5456],{"class":1343},[1110,9612,5459],{"class":1580},[1110,9614,1584],{"class":1337},[1110,9616,1511],{"class":1337},[1110,9618,5466],{"class":1120},[1110,9620,1511],{"class":1337},[1110,9622,1558],{"class":1337},[1110,9624,9625,9627,9629,9631,9633],{"class":1112,"line":3930},[1110,9626,1574],{"class":1337},[1110,9628,1555],{"class":1343},[1110,9630,5479],{"class":1337},[1110,9632,8699],{"class":1580},[1110,9634,1558],{"class":1337},[1110,9636,9637,9639,9641],{"class":1112,"line":3942},[1110,9638,1598],{"class":1337},[1110,9640,8709],{"class":1343},[1110,9642,1604],{"class":1337},[1110,9644,9645,9647,9649],{"class":1112,"line":3958},[1110,9646,1609],{"class":1337},[1110,9648,1555],{"class":1343},[1110,9650,1558],{"class":1337},[1110,9652,9653,9655,9657,9659,9661],{"class":1112,"line":3972},[1110,9654,1574],{"class":1337},[1110,9656,1555],{"class":1343},[1110,9658,5479],{"class":1337},[1110,9660,5482],{"class":1580},[1110,9662,1558],{"class":1337},[1110,9664,9666,9668,9670,9672,9674,9676,9678,9680],{"class":9665,"line":3979},[1112,1562],[1110,9667,1598],{"class":1337},[1110,9669,5491],{"class":1343},[1110,9671,5494],{"class":1580},[1110,9673,1584],{"class":1337},[1110,9675,1511],{"class":1337},[1110,9677,6937],{"class":1120},[1110,9679,1511],{"class":1337},[1110,9681,1558],{"class":1337},[1110,9683,9685,9687],{"class":9684,"line":3984},[1112,1562],[1110,9686,5510],{"class":1337},[1110,9688,6948],{"class":1343},[1110,9690,9692,9694,9696,9698,9700],{"class":9691,"line":3989},[1112,1562],[1110,9693,6953],{"class":1580},[1110,9695,1584],{"class":1337},[1110,9697,1511],{"class":1337},[1110,9699,6960],{"class":1120},[1110,9701,5567],{"class":1337},[1110,9703,9704,9706,9708,9710,9712],{"class":1112,"line":3995},[1110,9705,5573],{"class":1580},[1110,9707,1584],{"class":1337},[1110,9709,1511],{"class":1337},[1110,9711,6973],{"class":1120},[1110,9713,5567],{"class":1337},[1110,9715,9716],{"class":1112,"line":4012},[1110,9717,6980],{"class":1580},[1110,9719,9720,9722,9724,9726,9728],{"class":1112,"line":4034},[1110,9721,6985],{"class":1580},[1110,9723,1584],{"class":1337},[1110,9725,1511],{"class":1337},[1110,9727,6992],{"class":1120},[1110,9729,5567],{"class":1337},[1110,9731,9732],{"class":1112,"line":4052},[1110,9733,5633],{"class":1337},[1110,9735,9736,9738,9740,9742,9744,9746,9748,9750,9752,9754,9756],{"class":1112,"line":4060},[1110,9737,5639],{"class":1337},[1110,9739,1555],{"class":1343},[1110,9741,5479],{"class":1337},[1110,9743,371],{"class":1580},[1110,9745,1584],{"class":1337},[1110,9747,1511],{"class":1337},[1110,9749,1857],{"class":1337},[1110,9751,7017],{"class":1333},[1110,9753,1469],{"class":1337},[1110,9755,1511],{"class":1337},[1110,9757,1558],{"class":1337},[1110,9759,9760,9762,9764,9766,9768,9770,9772,9774,9776,9778,9780,9782,9784,9786,9788,9790,9792,9794,9796,9798,9800,9802,9804,9806,9808,9810,9812,9814,9816,9818,9820,9822],{"class":1112,"line":4077},[1110,9761,7028],{"class":1337},[1110,9763,1555],{"class":1343},[1110,9765,7033],{"class":1323},[1110,9767,1584],{"class":1337},[1110,9769,1511],{"class":1337},[1110,9771,7040],{"class":1333},[1110,9773,1708],{"class":1337},[1110,9775,7045],{"class":1333},[1110,9777,7048],{"class":1337},[1110,9779,2615],{"class":1333},[1110,9781,1800],{"class":1337},[1110,9783,2195],{"class":1333},[1110,9785,1511],{"class":1337},[1110,9787,7059],{"class":1337},[1110,9789,7062],{"class":1580},[1110,9791,1584],{"class":1337},[1110,9793,7067],{"class":1337},[1110,9795,4496],{"class":1333},[1110,9797,1800],{"class":1337},[1110,9799,2011],{"class":1333},[1110,9801,1469],{"class":1337},[1110,9803,7078],{"class":1120},[1110,9805,5413],{"class":1337},[1110,9807,7083],{"class":1333},[1110,9809,1800],{"class":1337},[1110,9811,6559],{"class":1333},[1110,9813,1469],{"class":1337},[1110,9815,7078],{"class":1120},[1110,9817,5413],{"class":1337},[1110,9819,7096],{"class":1333},[1110,9821,7099],{"class":1337},[1110,9823,1558],{"class":1337},[1110,9825,9826,9828],{"class":1112,"line":4098},[1110,9827,7106],{"class":1337},[1110,9829,7109],{"class":1343},[1110,9831,9832,9834,9836,9838,9840],{"class":1112,"line":4108},[1110,9833,7114],{"class":1580},[1110,9835,1584],{"class":1337},[1110,9837,1511],{"class":1337},[1110,9839,7121],{"class":1120},[1110,9841,5567],{"class":1337},[1110,9843,9844,9846,9848,9850,9852],{"class":1112,"line":4118},[1110,9845,7128],{"class":1580},[1110,9847,1584],{"class":1337},[1110,9849,1511],{"class":1337},[1110,9851,7135],{"class":1120},[1110,9853,5567],{"class":1337},[1110,9855,9856,9858,9860,9862,9864],{"class":1112,"line":4128},[1110,9857,7142],{"class":1580},[1110,9859,1584],{"class":1337},[1110,9861,1511],{"class":1337},[1110,9863,7149],{"class":1120},[1110,9865,5567],{"class":1337},[1110,9867,9868],{"class":1112,"line":4145},[1110,9869,7156],{"class":1337},[1110,9871,9872,9874],{"class":1112,"line":4156},[1110,9873,7161],{"class":1337},[1110,9875,7164],{"class":1343},[1110,9877,9878,9880,9882,9884,9886],{"class":1112,"line":4162},[1110,9879,7169],{"class":1580},[1110,9881,1584],{"class":1337},[1110,9883,1511],{"class":1337},[1110,9885,7135],{"class":1120},[1110,9887,5567],{"class":1337},[1110,9889,9890,9892,9894,9896,9898],{"class":1112,"line":4168},[1110,9891,7182],{"class":1580},[1110,9893,1584],{"class":1337},[1110,9895,1511],{"class":1337},[1110,9897,7149],{"class":1120},[1110,9899,5567],{"class":1337},[1110,9901,9902],{"class":1112,"line":4178},[1110,9903,7195],{"class":1337},[1110,9905,9906,9908,9910],{"class":1112,"line":4188},[1110,9907,7200],{"class":1337},[1110,9909,7203],{"class":1343},[1110,9911,1558],{"class":1337},[1110,9913,9914],{"class":1112,"line":4202},[1110,9915,1402],{"emptyLinePlaceholder":21},[1110,9917,9918,9920,9922,9924,9926,9928,9930,9932,9934],{"class":1112,"line":4217},[1110,9919,7106],{"class":1337},[1110,9921,1555],{"class":1343},[1110,9923,7218],{"class":1323},[1110,9925,1584],{"class":1337},[1110,9927,1511],{"class":1337},[1110,9929,7225],{"class":1133},[1110,9931,7228],{"class":1333},[1110,9933,1511],{"class":1337},[1110,9935,1558],{"class":1337},[1110,9937,9938,9940],{"class":1112,"line":4222},[1110,9939,7161],{"class":1337},[1110,9941,7164],{"class":1343},[1110,9943,9944,9946,9948,9950,9952],{"class":1112,"line":4227},[1110,9945,7243],{"class":1580},[1110,9947,1584],{"class":1337},[1110,9949,1511],{"class":1337},[1110,9951,7250],{"class":1120},[1110,9953,5567],{"class":1337},[1110,9955,9956,9958,9960,9962,9964],{"class":1112,"line":4237},[1110,9957,7169],{"class":1580},[1110,9959,1584],{"class":1337},[1110,9961,1511],{"class":1337},[1110,9963,7135],{"class":1120},[1110,9965,5567],{"class":1337},[1110,9967,9968,9970,9972,9974,9976],{"class":1112,"line":4253},[1110,9969,7182],{"class":1580},[1110,9971,1584],{"class":1337},[1110,9973,1511],{"class":1337},[1110,9975,7149],{"class":1120},[1110,9977,5567],{"class":1337},[1110,9979,9980],{"class":1112,"line":4268},[1110,9981,7195],{"class":1337},[1110,9983,9984,9986,9988,9990,9992,9994,9996,9998,10000,10002,10004,10006,10008],{"class":1112,"line":4274},[1110,9985,7161],{"class":1337},[1110,9987,1000],{"class":1343},[1110,9989,7218],{"class":1580},[1110,9991,1584],{"class":1337},[1110,9993,1511],{"class":1337},[1110,9995,7295],{"class":1120},[1110,9997,1511],{"class":1337},[1110,9999,5494],{"class":1580},[1110,10001,1584],{"class":1337},[1110,10003,1511],{"class":1337},[1110,10005,7306],{"class":1120},[1110,10007,1511],{"class":1337},[1110,10009,1558],{"class":1337},[1110,10011,10012],{"class":1112,"line":4280},[1110,10013,7315],{"class":1333},[1110,10015,10016,10018,10020],{"class":1112,"line":4288},[1110,10017,7320],{"class":1337},[1110,10019,1000],{"class":1343},[1110,10021,1558],{"class":1337},[1110,10023,10024,10026,10028],{"class":1112,"line":4293},[1110,10025,7200],{"class":1337},[1110,10027,1555],{"class":1343},[1110,10029,1558],{"class":1337},[1110,10031,10032,10034,10036],{"class":1112,"line":4299},[1110,10033,7337],{"class":1337},[1110,10035,1555],{"class":1343},[1110,10037,1558],{"class":1337},[1110,10039,10040,10042,10044],{"class":1112,"line":4319},[1110,10041,7346],{"class":1337},[1110,10043,1555],{"class":1343},[1110,10045,1558],{"class":1337},[1110,10047,10048,10050,10052],{"class":1112,"line":4334},[1110,10049,5536],{"class":1337},[1110,10051,5112],{"class":1343},[1110,10053,1558],{"class":1337},[1110,10055,10056],{"class":1112,"line":4351},[1110,10057,1402],{"emptyLinePlaceholder":21},[1110,10059,10060,10062],{"class":1112,"line":4374},[1110,10061,5510],{"class":1337},[1110,10063,5552],{"class":1343},[1110,10065,10066,10068,10070,10072,10074],{"class":1112,"line":4385},[1110,10067,5558],{"class":1580},[1110,10069,1584],{"class":1337},[1110,10071,1511],{"class":1337},[1110,10073,5223],{"class":1120},[1110,10075,5567],{"class":1337},[1110,10077,10078,10080,10082,10084,10086],{"class":1112,"line":4393},[1110,10079,7385],{"class":1580},[1110,10081,1584],{"class":1337},[1110,10083,1511],{"class":1337},[1110,10085,7392],{"class":1120},[1110,10087,5567],{"class":1337},[1110,10089,10090,10092,10094,10096,10098],{"class":1112,"line":4399},[1110,10091,5588],{"class":1580},[1110,10093,1584],{"class":1337},[1110,10095,1511],{"class":1337},[1110,10097,5595],{"class":1120},[1110,10099,5567],{"class":1337},[1110,10101,10102,10104,10106,10108,10110],{"class":1112,"line":4404},[1110,10103,6985],{"class":1580},[1110,10105,1584],{"class":1337},[1110,10107,1511],{"class":1337},[1110,10109,7417],{"class":1120},[1110,10111,5567],{"class":1337},[1110,10113,10114,10116,10118,10120,10122],{"class":1112,"line":4427},[1110,10115,5618],{"class":1580},[1110,10117,1584],{"class":1337},[1110,10119,1511],{"class":1337},[1110,10121,7430],{"class":1120},[1110,10123,5567],{"class":1337},[1110,10125,10126],{"class":1112,"line":4433},[1110,10127,5633],{"class":1337},[1110,10129,10130,10132],{"class":1112,"line":4453},[1110,10131,5639],{"class":1337},[1110,10133,7443],{"class":1343},[1110,10135,10136,10138,10140,10142,10144],{"class":1112,"line":4459},[1110,10137,7448],{"class":1580},[1110,10139,1584],{"class":1337},[1110,10141,1511],{"class":1337},[1110,10143,6973],{"class":1120},[1110,10145,5567],{"class":1337},[1110,10147,10148,10150,10152,10154,10156],{"class":1112,"line":4505},[1110,10149,7461],{"class":1580},[1110,10151,1584],{"class":1337},[1110,10153,1511],{"class":1337},[1110,10155,5652],{"class":1120},[1110,10157,5567],{"class":1337},[1110,10159,10160,10162,10164,10166,10168],{"class":1112,"line":4521},[1110,10161,7474],{"class":1580},[1110,10163,1584],{"class":1337},[1110,10165,1511],{"class":1337},[1110,10167,7481],{"class":1120},[1110,10169,5567],{"class":1337},[1110,10171,10172,10174,10176,10178,10180],{"class":1112,"line":4554},[1110,10173,7488],{"class":1580},[1110,10175,1584],{"class":1337},[1110,10177,1511],{"class":1337},[1110,10179,7495],{"class":1120},[1110,10181,5567],{"class":1337},[1110,10183,10184],{"class":1112,"line":4568},[1110,10185,7502],{"class":1337},[1110,10187,10188,10190,10192],{"class":1112,"line":4576},[1110,10189,5536],{"class":1337},[1110,10191,5106],{"class":1343},[1110,10193,1558],{"class":1337},[1110,10195,10196,10198,10200],{"class":1112,"line":4582},[1110,10197,5670],{"class":1337},[1110,10199,5491],{"class":1343},[1110,10201,1558],{"class":1337},[1110,10203,10204,10206,10208],{"class":1112,"line":4589},[1110,10205,1609],{"class":1337},[1110,10207,1555],{"class":1343},[1110,10209,1558],{"class":1337},[1110,10211,10212,10214,10216],{"class":1112,"line":4594},[1110,10213,1619],{"class":1337},[1110,10215,5456],{"class":1343},[1110,10217,1558],{"class":1337},[1110,10219,10220,10222,10224],{"class":1112,"line":4612},[1110,10221,1628],{"class":1337},[1110,10223,1555],{"class":1343},[1110,10225,1558],{"class":1337},[1000,10227,4655,10228,10231,10232,10234],{},[1060,10229,10230],{},"refreshNuxtData('chats')"," call in the chat page's ",[1060,10233,7604],{}," callback (as shown earlier) ensures the chat list updates automatically when a new title is generated.",[1004,10236,10238],{"id":10237},"adding-multi-model-support","Adding multi-model support",[1000,10240,10241,10242,10245],{},"One of the benefits of using ",[1054,10243,4624],{"href":1089,"rel":10244},[1058]," is the ability to switch between models seamlessly. This section adds a model selector to the chat.",[1138,10247,10249],{"id":10248},"creating-a-models-composable","Creating a models composable",[1000,10251,10252,10253,1347],{},"Define the available models and persist the user's selection using ",[1054,10254,10257],{"href":10255,"rel":10256},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-cookie",[1058],[1060,10258,10259],{},"useCookie",[1310,10261,10262],{},[1101,10263,10266],{"className":1314,"code":10264,"filename":10265,"language":1316,"meta":1106,"style":1106},"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",[1060,10267,10268,10281,10292,10338,10382,10426,10431,10435,10465,10482,10488,10492,10498,10505,10510,10514],{"__ignoreMap":1106},[1110,10269,10270,10272,10274,10277,10279],{"class":1112,"line":1113},[1110,10271,1324],{"class":1323},[1110,10273,5205],{"class":1580},[1110,10275,10276],{"class":1133}," useModels",[1110,10278,1797],{"class":1337},[1110,10280,1413],{"class":1337},[1110,10282,10283,10285,10288,10290],{"class":1112,"line":1130},[1110,10284,2610],{"class":1580},[1110,10286,10287],{"class":1333}," models",[1110,10289,2620],{"class":1337},[1110,10291,1350],{"class":1343},[1110,10293,10294,10297,10299,10301,10303,10305,10307,10309,10311,10313,10315,10317,10319,10321,10324,10326,10328,10334,10336],{"class":1112,"line":1353},[1110,10295,10296],{"class":1337},"    {",[1110,10298,3108],{"class":1343},[1110,10300,1347],{"class":1337},[1110,10302,1424],{"class":1337},[1110,10304,3115],{"class":1120},[1110,10306,1362],{"class":1337},[1110,10308,1708],{"class":1337},[1110,10310,3094],{"class":1343},[1110,10312,1347],{"class":1337},[1110,10314,1424],{"class":1337},[1110,10316,3101],{"class":1120},[1110,10318,1362],{"class":1337},[1110,10320,1708],{"class":1337},[1110,10322,10323],{"class":1343}," icon",[1110,10325,1347],{"class":1337},[1110,10327,1424],{"class":1337},[1110,10329,10330,10333],{"class":1120},[8076,10331],{"class":10332},"shiki-icon-highlight sh9xi","i-simple-icons-openai",[1110,10335,1362],{"class":1337},[1110,10337,3120],{"class":1337},[1110,10339,10340,10342,10344,10346,10348,10350,10352,10354,10356,10358,10360,10362,10364,10366,10368,10370,10372,10378,10380],{"class":1112,"line":1368},[1110,10341,10296],{"class":1337},[1110,10343,3108],{"class":1343},[1110,10345,1347],{"class":1337},[1110,10347,1424],{"class":1337},[1110,10349,3145],{"class":1120},[1110,10351,1362],{"class":1337},[1110,10353,1708],{"class":1337},[1110,10355,3094],{"class":1343},[1110,10357,1347],{"class":1337},[1110,10359,1424],{"class":1337},[1110,10361,3069],{"class":1120},[1110,10363,1362],{"class":1337},[1110,10365,1708],{"class":1337},[1110,10367,10323],{"class":1343},[1110,10369,1347],{"class":1337},[1110,10371,1424],{"class":1337},[1110,10373,10374,10377],{"class":1120},[8076,10375],{"class":10376},"shiki-icon-highlight sNknm","i-simple-icons-anthropic",[1110,10379,1362],{"class":1337},[1110,10381,3120],{"class":1337},[1110,10383,10384,10386,10388,10390,10392,10394,10396,10398,10400,10402,10404,10406,10408,10410,10412,10414,10416,10422,10424],{"class":1112,"line":1380},[1110,10385,10296],{"class":1337},[1110,10387,3108],{"class":1343},[1110,10389,1347],{"class":1337},[1110,10391,1424],{"class":1337},[1110,10393,3175],{"class":1120},[1110,10395,1362],{"class":1337},[1110,10397,1708],{"class":1337},[1110,10399,3094],{"class":1343},[1110,10401,1347],{"class":1337},[1110,10403,1424],{"class":1337},[1110,10405,3162],{"class":1120},[1110,10407,1362],{"class":1337},[1110,10409,1708],{"class":1337},[1110,10411,10323],{"class":1343},[1110,10413,1347],{"class":1337},[1110,10415,1424],{"class":1337},[1110,10417,10418,10421],{"class":1120},[8076,10419],{"class":10420},"shiki-icon-highlight scZL3","i-simple-icons-google",[1110,10423,1362],{"class":1337},[1110,10425,3180],{"class":1337},[1110,10427,10428],{"class":1112,"line":1391},[1110,10429,10430],{"class":1343},"  ]\n",[1110,10432,10433],{"class":1112,"line":1399},[1110,10434,1402],{"emptyLinePlaceholder":21},[1110,10436,10437,10439,10441,10443,10446,10448,10450,10452,10454,10456,10459,10461,10463],{"class":1112,"line":1405},[1110,10438,2610],{"class":1580},[1110,10440,3285],{"class":1333},[1110,10442,2620],{"class":1337},[1110,10444,10445],{"class":1133}," useCookie",[1110,10447,1552],{"class":1337},[1110,10449,3258],{"class":1116},[1110,10451,2663],{"class":1337},[1110,10453,1334],{"class":1343},[1110,10455,1362],{"class":1337},[1110,10457,10458],{"class":1120},"ai-model",[1110,10460,1362],{"class":1337},[1110,10462,1708],{"class":1337},[1110,10464,1413],{"class":1337},[1110,10466,10467,10470,10472,10474,10476,10478,10480],{"class":1112,"line":1416},[1110,10468,10469],{"class":1133},"    default",[1110,10471,1347],{"class":1337},[1110,10473,4991],{"class":1337},[1110,10475,1817],{"class":1580},[1110,10477,1424],{"class":1337},[1110,10479,3069],{"class":1120},[1110,10481,1388],{"class":1337},[1110,10483,10484,10486],{"class":1112,"line":1432},[1110,10485,2411],{"class":1337},[1110,10487,1472],{"class":1343},[1110,10489,10490],{"class":1112,"line":1438},[1110,10491,1402],{"emptyLinePlaceholder":21},[1110,10493,10494,10496],{"class":1112,"line":1443},[1110,10495,2838],{"class":1323},[1110,10497,1413],{"class":1337},[1110,10499,10500,10503],{"class":1112,"line":1466},[1110,10501,10502],{"class":1333},"    models",[1110,10504,1365],{"class":1337},[1110,10506,10507],{"class":1112,"line":1971},[1110,10508,10509],{"class":1333},"    model\n",[1110,10511,10512],{"class":1112,"line":1998},[1110,10513,3616],{"class":1337},[1110,10515,10516],{"class":1112,"line":2044},[1110,10517,5429],{"class":1337},[1138,10519,10521],{"id":10520},"building-the-model-selector","Building the model selector",[1000,10523,1635,10524,10529],{},[1054,10525,10526],{"href":740},[1060,10527,10528],{},"USelectMenu"," component that displays the available models:",[1310,10531,10532],{},[1101,10533,10536],{"className":1542,"code":10534,"filename":10535,"language":34,"meta":1106,"style":1106},"\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",[1060,10537,10538,10558,10591,10595,10612,10616,10634,10666,10670,10678,10682,10690,10697,10710,10724,10738,10751,10764,10769],{"__ignoreMap":1106},[1110,10539,10540,10542,10544,10546,10548,10550,10552,10554,10556],{"class":1112,"line":1113},[1110,10541,1552],{"class":1337},[1110,10543,5141],{"class":1343},[1110,10545,5144],{"class":1580},[1110,10547,5147],{"class":1580},[1110,10549,1584],{"class":1337},[1110,10551,1511],{"class":1337},[1110,10553,1316],{"class":1120},[1110,10555,1511],{"class":1337},[1110,10557,1558],{"class":1337},[1110,10559,10560,10562,10565,10567,10570,10572,10574,10576,10578,10580,10583,10585,10587,10589],{"class":1112,"line":1130},[1110,10561,3059],{"class":1580},[1110,10563,10564],{"class":1333}," model ",[1110,10566,1584],{"class":1337},[1110,10568,10569],{"class":1133}," defineModel",[1110,10571,1552],{"class":1337},[1110,10573,3258],{"class":1116},[1110,10575,2663],{"class":1337},[1110,10577,1334],{"class":1333},[1110,10579,1857],{"class":1337},[1110,10581,10582],{"class":1343}," required",[1110,10584,1347],{"class":1337},[1110,10586,4197],{"class":4196},[1110,10588,1724],{"class":1337},[1110,10590,1472],{"class":1333},[1110,10592,10593],{"class":1112,"line":1353},[1110,10594,1402],{"emptyLinePlaceholder":21},[1110,10596,10597,10599,10601,10604,10606,10608,10610],{"class":1112,"line":1368},[1110,10598,3059],{"class":1580},[1110,10600,1702],{"class":1337},[1110,10602,10603],{"class":1333}," models ",[1110,10605,1469],{"class":1337},[1110,10607,2620],{"class":1337},[1110,10609,10276],{"class":1133},[1110,10611,2666],{"class":1333},[1110,10613,10614],{"class":1112,"line":1380},[1110,10615,1402],{"emptyLinePlaceholder":21},[1110,10617,10618,10620,10623,10625,10627,10629,10631],{"class":1112,"line":1391},[1110,10619,3059],{"class":1580},[1110,10621,10622],{"class":1333}," selectedModel ",[1110,10624,1584],{"class":1337},[1110,10626,8018],{"class":1133},[1110,10628,1334],{"class":1333},[1110,10630,1797],{"class":1337},[1110,10632,10633],{"class":1580}," =>\n",[1110,10635,10636,10639,10641,10644,10646,10648,10650,10652,10654,10657,10659,10661,10663],{"class":1112,"line":1399},[1110,10637,10638],{"class":1333},"  models",[1110,10640,1800],{"class":1337},[1110,10642,10643],{"class":1133},"find",[1110,10645,1334],{"class":1333},[1110,10647,3359],{"class":1934},[1110,10649,1817],{"class":1580},[1110,10651,3364],{"class":1333},[1110,10653,1800],{"class":1337},[1110,10655,10656],{"class":1333},"value ",[1110,10658,8101],{"class":1337},[1110,10660,3285],{"class":1333},[1110,10662,1800],{"class":1337},[1110,10664,10665],{"class":1333},"value)\n",[1110,10667,10668],{"class":1112,"line":1405},[1110,10669,1472],{"class":1333},[1110,10671,10672,10674,10676],{"class":1112,"line":1416},[1110,10673,1628],{"class":1337},[1110,10675,5141],{"class":1343},[1110,10677,1558],{"class":1337},[1110,10679,10680],{"class":1112,"line":1432},[1110,10681,1402],{"emptyLinePlaceholder":21},[1110,10683,10684,10686,10688],{"class":1112,"line":1438},[1110,10685,1552],{"class":1337},[1110,10687,1555],{"class":1343},[1110,10689,1558],{"class":1337},[1110,10691,10692,10694],{"class":1112,"line":1443},[1110,10693,1565],{"class":1337},[1110,10695,10696],{"class":1343},"USelectMenu\n",[1110,10698,10699,10702,10704,10706,10708],{"class":1112,"line":1466},[1110,10700,10701],{"class":1580},"    v-model",[1110,10703,1584],{"class":1337},[1110,10705,1511],{"class":1337},[1110,10707,4668],{"class":1120},[1110,10709,5567],{"class":1337},[1110,10711,10712,10715,10717,10719,10722],{"class":1112,"line":1971},[1110,10713,10714],{"class":1580},"    :items",[1110,10716,1584],{"class":1337},[1110,10718,1511],{"class":1337},[1110,10720,10721],{"class":1120},"models",[1110,10723,5567],{"class":1337},[1110,10725,10726,10729,10731,10733,10736],{"class":1112,"line":1998},[1110,10727,10728],{"class":1580},"    :icon",[1110,10730,1584],{"class":1337},[1110,10732,1511],{"class":1337},[1110,10734,10735],{"class":1120},"selectedModel?.icon",[1110,10737,5567],{"class":1337},[1110,10739,10740,10743,10745,10747,10749],{"class":1112,"line":2044},[1110,10741,10742],{"class":1580},"    variant",[1110,10744,1584],{"class":1337},[1110,10746,1511],{"class":1337},[1110,10748,8306],{"class":1120},[1110,10750,5567],{"class":1337},[1110,10752,10753,10756,10758,10760,10762],{"class":1112,"line":2111},[1110,10754,10755],{"class":1580},"    value-key",[1110,10757,1584],{"class":1337},[1110,10759,1511],{"class":1337},[1110,10761,3344],{"class":1120},[1110,10763,5567],{"class":1337},[1110,10765,10766],{"class":1112,"line":2181},[1110,10767,10768],{"class":1337},"  \u002F>\n",[1110,10770,10771,10773,10775],{"class":1112,"line":2221},[1110,10772,1628],{"class":1337},[1110,10774,1555],{"class":1343},[1110,10776,1558],{"class":1337},[1138,10778,10780],{"id":10779},"integrating-with-the-chat","Integrating with the chat",[1000,10782,10783],{},"Update the chat page to include the model selector and pass the selected model to the server:",[1310,10785,10786],{},[1687,10787,10788],{},[1101,10789,10792],{"className":1542,"code":10790,"filename":6132,"highlights":10791,"language":34,"meta":1106,"style":1106},"\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",[1405,2326,2358,2374,4334,4351,4374],[1060,10793,10794,10814,10840,10858,10876,10880,10892,10904,10921,10925,10967,10971,10987,11027,11031,11035,11051,11055,11071,11089,11107,11121,11147,11155,11171,11176,11185,11197,11221,11235,11239,11243,11255,11267,11281,11295,11307,11313,11317,11323,11327,11345,11355,11375,11401,11413,11417,11421,11425,11437,11465,11475,11479,11485,11493,11497,11505,11523,11535,11543,11551,11563,11581,11587,11599,11611,11615,11627,11631,11655,11721,11727,11739,11751,11763,11767,11773,11785,11797,11801,11809,11813,11833,11839,11851,11863,11875,11879,11907,11911,11919,11927,11935,11943,11952,11957,11964,11976,11988,12000,12012,12024,12028,12041,12061,12069,12073,12079,12091,12103,12115,12127,12131,12139,12148,12157,12166],{"__ignoreMap":1106},[1110,10795,10796,10798,10800,10802,10804,10806,10808,10810,10812],{"class":1112,"line":1113},[1110,10797,1552],{"class":1337},[1110,10799,5141],{"class":1343},[1110,10801,5144],{"class":1580},[1110,10803,5147],{"class":1580},[1110,10805,1584],{"class":1337},[1110,10807,1511],{"class":1337},[1110,10809,1316],{"class":1120},[1110,10811,1511],{"class":1337},[1110,10813,1558],{"class":1337},[1110,10815,10816,10818,10820,10822,10824,10826,10828,10830,10832,10834,10836,10838],{"class":1112,"line":1130},[1110,10817,1699],{"class":1323},[1110,10819,1702],{"class":1337},[1110,10821,6165],{"class":1333},[1110,10823,1708],{"class":1337},[1110,10825,6170],{"class":1333},[1110,10827,1708],{"class":1337},[1110,10829,6175],{"class":1333},[1110,10831,1724],{"class":1337},[1110,10833,1727],{"class":1323},[1110,10835,1424],{"class":1337},[1110,10837,2531],{"class":1120},[1110,10839,1388],{"class":1337},[1110,10841,10842,10844,10846,10848,10850,10852,10854,10856],{"class":1112,"line":1353},[1110,10843,1699],{"class":1323},[1110,10845,1702],{"class":1337},[1110,10847,6195],{"class":1333},[1110,10849,1724],{"class":1337},[1110,10851,1727],{"class":1323},[1110,10853,1424],{"class":1337},[1110,10855,6204],{"class":1120},[1110,10857,1388],{"class":1337},[1110,10859,10860,10862,10864,10866,10868,10870,10872,10874],{"class":1112,"line":1368},[1110,10861,1699],{"class":1323},[1110,10863,1702],{"class":1337},[1110,10865,6216],{"class":1333},[1110,10867,1724],{"class":1337},[1110,10869,1727],{"class":1323},[1110,10871,1424],{"class":1337},[1110,10873,6225],{"class":1120},[1110,10875,1388],{"class":1337},[1110,10877,10878],{"class":1112,"line":1380},[1110,10879,1402],{"emptyLinePlaceholder":21},[1110,10881,10882,10884,10886,10888,10890],{"class":1112,"line":1391},[1110,10883,3059],{"class":1580},[1110,10885,6238],{"class":1333},[1110,10887,1584],{"class":1337},[1110,10889,6243],{"class":1133},[1110,10891,2666],{"class":1333},[1110,10893,10894,10896,10898,10900,10902],{"class":1112,"line":1399},[1110,10895,3059],{"class":1580},[1110,10897,6252],{"class":1333},[1110,10899,1584],{"class":1337},[1110,10901,6257],{"class":1133},[1110,10903,2666],{"class":1333},[1110,10905,10907,10909,10911,10913,10915,10917,10919],{"class":10906,"line":1405},[1112,1562],[1110,10908,3059],{"class":1580},[1110,10910,1702],{"class":1337},[1110,10912,10564],{"class":1333},[1110,10914,1469],{"class":1337},[1110,10916,2620],{"class":1337},[1110,10918,10276],{"class":1133},[1110,10920,2666],{"class":1333},[1110,10922,10923],{"class":1112,"line":1416},[1110,10924,1402],{"emptyLinePlaceholder":21},[1110,10926,10927,10929,10931,10933,10935,10937,10939,10941,10943,10945,10947,10949,10951,10953,10955,10957,10959,10961,10963,10965],{"class":1112,"line":1432},[1110,10928,3059],{"class":1580},[1110,10930,1702],{"class":1337},[1110,10932,6277],{"class":1343},[1110,10934,1347],{"class":1337},[1110,10936,6282],{"class":1333},[1110,10938,1469],{"class":1337},[1110,10940,2620],{"class":1337},[1110,10942,2623],{"class":1323},[1110,10944,6291],{"class":1133},[1110,10946,1334],{"class":1333},[1110,10948,3704],{"class":1337},[1110,10950,6298],{"class":1120},[1110,10952,5413],{"class":1337},[1110,10954,6303],{"class":1333},[1110,10956,1800],{"class":1337},[1110,10958,6308],{"class":1333},[1110,10960,1800],{"class":1337},[1110,10962,2011],{"class":1333},[1110,10964,5422],{"class":1337},[1110,10966,1472],{"class":1333},[1110,10968,10969],{"class":1112,"line":1438},[1110,10970,1402],{"emptyLinePlaceholder":21},[1110,10972,10973,10975,10977,10979,10981,10983,10985],{"class":1112,"line":1443},[1110,10974,6325],{"class":1323},[1110,10976,1943],{"class":1333},[1110,10978,3564],{"class":1337},[1110,10980,6332],{"class":1333},[1110,10982,1800],{"class":1337},[1110,10984,6337],{"class":1333},[1110,10986,1338],{"class":1337},[1110,10988,10989,10991,10993,10995,10997,10999,11001,11003,11005,11007,11009,11011,11013,11015,11017,11019,11021,11023,11025],{"class":1112,"line":1466},[1110,10990,6344],{"class":1323},[1110,10992,2897],{"class":1133},[1110,10994,1334],{"class":1343},[1110,10996,1857],{"class":1337},[1110,10998,3586],{"class":1343},[1110,11000,1347],{"class":1337},[1110,11002,3592],{"class":3591},[1110,11004,1708],{"class":1337},[1110,11006,3597],{"class":1343},[1110,11008,1347],{"class":1337},[1110,11010,1424],{"class":1337},[1110,11012,3604],{"class":1120},[1110,11014,1362],{"class":1337},[1110,11016,1708],{"class":1337},[1110,11018,6373],{"class":1343},[1110,11020,1347],{"class":1337},[1110,11022,4197],{"class":4196},[1110,11024,1724],{"class":1337},[1110,11026,1472],{"class":1343},[1110,11028,11029],{"class":1112,"line":1971},[1110,11030,5429],{"class":1337},[1110,11032,11033],{"class":1112,"line":1998},[1110,11034,1402],{"emptyLinePlaceholder":21},[1110,11036,11037,11039,11041,11043,11045,11047,11049],{"class":1112,"line":2044},[1110,11038,3059],{"class":1580},[1110,11040,5164],{"class":1333},[1110,11042,1584],{"class":1337},[1110,11044,5169],{"class":1133},[1110,11046,1334],{"class":1333},[1110,11048,5174],{"class":1337},[1110,11050,1472],{"class":1333},[1110,11052,11053],{"class":1112,"line":2111},[1110,11054,1402],{"emptyLinePlaceholder":21},[1110,11056,11057,11059,11061,11063,11065,11067,11069],{"class":1112,"line":2181},[1110,11058,3059],{"class":1580},[1110,11060,6422],{"class":1333},[1110,11062,1584],{"class":1337},[1110,11064,1894],{"class":1337},[1110,11066,6195],{"class":1133},[1110,11068,1334],{"class":1333},[1110,11070,1338],{"class":1337},[1110,11072,11073,11075,11077,11079,11081,11083,11085,11087],{"class":1112,"line":2221},[1110,11074,1790],{"class":1343},[1110,11076,1347],{"class":1337},[1110,11078,6442],{"class":1333},[1110,11080,1800],{"class":1337},[1110,11082,3344],{"class":1333},[1110,11084,1800],{"class":1337},[1110,11086,2011],{"class":1333},[1110,11088,1365],{"class":1337},[1110,11090,11091,11093,11095,11097,11099,11101,11103,11105],{"class":1112,"line":2272},[1110,11092,1950],{"class":1343},[1110,11094,1347],{"class":1337},[1110,11096,6442],{"class":1333},[1110,11098,1800],{"class":1337},[1110,11100,3344],{"class":1333},[1110,11102,1800],{"class":1337},[1110,11104,1989],{"class":1333},[1110,11106,1365],{"class":1337},[1110,11108,11109,11111,11113,11115,11117,11119],{"class":1112,"line":2285},[1110,11110,6477],{"class":1343},[1110,11112,1347],{"class":1337},[1110,11114,1894],{"class":1337},[1110,11116,6165],{"class":1133},[1110,11118,1334],{"class":1333},[1110,11120,1338],{"class":1337},[1110,11122,11123,11125,11127,11129,11131,11133,11135,11137,11139,11141,11143,11145],{"class":1112,"line":2315},[1110,11124,6493],{"class":1343},[1110,11126,1347],{"class":1337},[1110,11128,3698],{"class":1337},[1110,11130,6298],{"class":1120},[1110,11132,5413],{"class":1337},[1110,11134,6332],{"class":1333},[1110,11136,1800],{"class":1337},[1110,11138,3344],{"class":1333},[1110,11140,1800],{"class":1337},[1110,11142,2011],{"class":1333},[1110,11144,5422],{"class":1337},[1110,11146,1365],{"class":1337},[1110,11148,11149,11151,11153],{"class":1112,"line":2321},[1110,11150,5311],{"class":1343},[1110,11152,1347],{"class":1337},[1110,11154,1413],{"class":1337},[1110,11156,11158,11160,11162,11164,11166,11168],{"class":11157,"line":2326},[1112,1562],[1110,11159,3681],{"class":1343},[1110,11161,1347],{"class":1337},[1110,11163,3285],{"class":1333},[1110,11165,1800],{"class":1337},[1110,11167,10656],{"class":1333},[1110,11169,11170],{"class":2688},"\u002F\u002F Pass the selected model\n",[1110,11172,11174],{"class":11173,"line":2358},[1112,1562],[1110,11175,4579],{"class":1337},[1110,11177,11179,11181,11183],{"class":11178,"line":2374},[1112,1562],[1110,11180,2411],{"class":1337},[1110,11182,1874],{"class":1333},[1110,11184,1365],{"class":1337},[1110,11186,11187,11189,11191,11193,11195],{"class":1112,"line":2392},[1110,11188,6529],{"class":1343},[1110,11190,1334],{"class":1337},[1110,11192,6534],{"class":1934},[1110,11194,1874],{"class":1337},[1110,11196,1413],{"class":1337},[1110,11198,11199,11201,11203,11205,11207,11209,11211,11213,11215,11217,11219],{"class":1112,"line":2408},[1110,11200,6550],{"class":1323},[1110,11202,1943],{"class":1343},[1110,11204,6534],{"class":1333},[1110,11206,1800],{"class":1337},[1110,11208,6559],{"class":1333},[1110,11210,3371],{"class":1337},[1110,11212,1424],{"class":1337},[1110,11214,4344],{"class":1120},[1110,11216,1362],{"class":1337},[1110,11218,3569],{"class":1343},[1110,11220,1338],{"class":1337},[1110,11222,11223,11225,11227,11229,11231,11233],{"class":1112,"line":2416},[1110,11224,6577],{"class":1133},[1110,11226,1334],{"class":1343},[1110,11228,1362],{"class":1337},[1110,11230,1779],{"class":1120},[1110,11232,1362],{"class":1337},[1110,11234,1472],{"class":1343},[1110,11236,11237],{"class":1112,"line":3396},[1110,11238,4579],{"class":1337},[1110,11240,11241],{"class":1112,"line":3413},[1110,11242,1435],{"class":1337},[1110,11244,11245,11247,11249,11251,11253],{"class":1112,"line":3445},[1110,11246,6603],{"class":1343},[1110,11248,1334],{"class":1337},[1110,11250,6608],{"class":1934},[1110,11252,1874],{"class":1337},[1110,11254,1413],{"class":1337},[1110,11256,11257,11259,11261,11263,11265],{"class":1112,"line":3458},[1110,11258,6618],{"class":1333},[1110,11260,1800],{"class":1337},[1110,11262,6623],{"class":1133},[1110,11264,1334],{"class":1343},[1110,11266,1338],{"class":1337},[1110,11268,11269,11271,11273,11275,11277,11279],{"class":1112,"line":3463},[1110,11270,6633],{"class":1343},[1110,11272,1347],{"class":1337},[1110,11274,1424],{"class":1337},[1110,11276,497],{"class":1120},[1110,11278,1362],{"class":1337},[1110,11280,1365],{"class":1337},[1110,11282,11283,11285,11287,11289,11291,11293],{"class":1112,"line":3469},[1110,11284,6649],{"class":1343},[1110,11286,1347],{"class":1337},[1110,11288,6654],{"class":1333},[1110,11290,1800],{"class":1337},[1110,11292,4496],{"class":1333},[1110,11294,1365],{"class":1337},[1110,11296,11297,11299,11301,11303,11305],{"class":1112,"line":3500},[1110,11298,6666],{"class":1343},[1110,11300,1347],{"class":1337},[1110,11302,1424],{"class":1337},[1110,11304,6608],{"class":1120},[1110,11306,1388],{"class":1337},[1110,11308,11309,11311],{"class":1112,"line":3544},[1110,11310,3399],{"class":1337},[1110,11312,1472],{"class":1343},[1110,11314,11315],{"class":1112,"line":3551},[1110,11316,3616],{"class":1337},[1110,11318,11319,11321],{"class":1112,"line":3556},[1110,11320,1469],{"class":1337},[1110,11322,1472],{"class":1333},[1110,11324,11325],{"class":1112,"line":3574},[1110,11326,1402],{"emptyLinePlaceholder":21},[1110,11328,11329,11331,11333,11335,11337,11339,11341,11343],{"class":1112,"line":3613},[1110,11330,6702],{"class":1580},[1110,11332,6705],{"class":1133},[1110,11334,1334],{"class":1337},[1110,11336,6710],{"class":1934},[1110,11338,1347],{"class":1337},[1110,11340,6715],{"class":1116},[1110,11342,1874],{"class":1337},[1110,11344,1413],{"class":1337},[1110,11346,11347,11349,11351,11353],{"class":1112,"line":3619},[1110,11348,6724],{"class":1333},[1110,11350,1800],{"class":1337},[1110,11352,6729],{"class":1133},[1110,11354,2666],{"class":1343},[1110,11356,11357,11359,11361,11363,11365,11367,11369,11371,11373],{"class":1112,"line":3624},[1110,11358,3559],{"class":1323},[1110,11360,1943],{"class":1343},[1110,11362,5223],{"class":1333},[1110,11364,1800],{"class":1337},[1110,11366,3344],{"class":1333},[1110,11368,1800],{"class":1337},[1110,11370,5232],{"class":1133},[1110,11372,5235],{"class":1343},[1110,11374,1338],{"class":1337},[1110,11376,11377,11379,11381,11383,11385,11387,11389,11391,11393,11395,11397,11399],{"class":1112,"line":3630},[1110,11378,6756],{"class":1333},[1110,11380,1800],{"class":1337},[1110,11382,6761],{"class":1133},[1110,11384,1334],{"class":1343},[1110,11386,1857],{"class":1337},[1110,11388,1711],{"class":1343},[1110,11390,1347],{"class":1337},[1110,11392,5367],{"class":1333},[1110,11394,1800],{"class":1337},[1110,11396,3344],{"class":1333},[1110,11398,1724],{"class":1337},[1110,11400,1472],{"class":1343},[1110,11402,11403,11405,11407,11409,11411],{"class":1112,"line":3650},[1110,11404,6784],{"class":1333},[1110,11406,1800],{"class":1337},[1110,11408,3344],{"class":1333},[1110,11410,2620],{"class":1337},[1110,11412,6793],{"class":1337},[1110,11414,11415],{"class":1112,"line":3678},[1110,11416,3616],{"class":1337},[1110,11418,11419],{"class":1112,"line":3690},[1110,11420,5429],{"class":1337},[1110,11422,11423],{"class":1112,"line":3709},[1110,11424,1402],{"emptyLinePlaceholder":21},[1110,11426,11427,11429,11431,11433,11435],{"class":1112,"line":3737},[1110,11428,6815],{"class":1133},[1110,11430,1334],{"class":1333},[1110,11432,1797],{"class":1337},[1110,11434,1817],{"class":1580},[1110,11436,1413],{"class":1337},[1110,11438,11439,11441,11443,11445,11447,11449,11451,11453,11455,11457,11459,11461,11463],{"class":1112,"line":3744},[1110,11440,3559],{"class":1323},[1110,11442,1943],{"class":1343},[1110,11444,6332],{"class":1333},[1110,11446,1800],{"class":1337},[1110,11448,3344],{"class":1333},[1110,11450,3870],{"class":1337},[1110,11452,1989],{"class":1333},[1110,11454,1800],{"class":1337},[1110,11456,3849],{"class":1333},[1110,11458,3371],{"class":1337},[1110,11460,3855],{"class":3591},[1110,11462,3569],{"class":1343},[1110,11464,1338],{"class":1337},[1110,11466,11467,11469,11471,11473],{"class":1112,"line":3749},[1110,11468,6756],{"class":1333},[1110,11470,1800],{"class":1337},[1110,11472,6860],{"class":1133},[1110,11474,2666],{"class":1343},[1110,11476,11477],{"class":1112,"line":3815},[1110,11478,3616],{"class":1337},[1110,11480,11481,11483],{"class":1112,"line":3820},[1110,11482,1469],{"class":1337},[1110,11484,1472],{"class":1333},[1110,11486,11487,11489,11491],{"class":1112,"line":3825},[1110,11488,1628],{"class":1337},[1110,11490,5141],{"class":1343},[1110,11492,1558],{"class":1337},[1110,11494,11495],{"class":1112,"line":3831},[1110,11496,1402],{"emptyLinePlaceholder":21},[1110,11498,11499,11501,11503],{"class":1112,"line":3860},[1110,11500,1552],{"class":1337},[1110,11502,1555],{"class":1343},[1110,11504,1558],{"class":1337},[1110,11506,11507,11509,11511,11513,11515,11517,11519,11521],{"class":1112,"line":3901},[1110,11508,1565],{"class":1337},[1110,11510,5456],{"class":1343},[1110,11512,5459],{"class":1580},[1110,11514,1584],{"class":1337},[1110,11516,1511],{"class":1337},[1110,11518,5466],{"class":1120},[1110,11520,1511],{"class":1337},[1110,11522,1558],{"class":1337},[1110,11524,11525,11527,11529,11531,11533],{"class":1112,"line":3930},[1110,11526,1574],{"class":1337},[1110,11528,1555],{"class":1343},[1110,11530,5479],{"class":1337},[1110,11532,8699],{"class":1580},[1110,11534,1558],{"class":1337},[1110,11536,11537,11539,11541],{"class":1112,"line":3942},[1110,11538,1598],{"class":1337},[1110,11540,8709],{"class":1343},[1110,11542,1604],{"class":1337},[1110,11544,11545,11547,11549],{"class":1112,"line":3958},[1110,11546,1609],{"class":1337},[1110,11548,1555],{"class":1343},[1110,11550,1558],{"class":1337},[1110,11552,11553,11555,11557,11559,11561],{"class":1112,"line":3972},[1110,11554,1574],{"class":1337},[1110,11556,1555],{"class":1343},[1110,11558,5479],{"class":1337},[1110,11560,5482],{"class":1580},[1110,11562,1558],{"class":1337},[1110,11564,11565,11567,11569,11571,11573,11575,11577,11579],{"class":1112,"line":3979},[1110,11566,1598],{"class":1337},[1110,11568,5491],{"class":1343},[1110,11570,5494],{"class":1580},[1110,11572,1584],{"class":1337},[1110,11574,1511],{"class":1337},[1110,11576,6937],{"class":1120},[1110,11578,1511],{"class":1337},[1110,11580,1558],{"class":1337},[1110,11582,11583,11585],{"class":1112,"line":3984},[1110,11584,5510],{"class":1337},[1110,11586,6948],{"class":1343},[1110,11588,11589,11591,11593,11595,11597],{"class":1112,"line":3989},[1110,11590,6953],{"class":1580},[1110,11592,1584],{"class":1337},[1110,11594,1511],{"class":1337},[1110,11596,6960],{"class":1120},[1110,11598,5567],{"class":1337},[1110,11600,11601,11603,11605,11607,11609],{"class":1112,"line":3995},[1110,11602,5573],{"class":1580},[1110,11604,1584],{"class":1337},[1110,11606,1511],{"class":1337},[1110,11608,6973],{"class":1120},[1110,11610,5567],{"class":1337},[1110,11612,11613],{"class":1112,"line":4012},[1110,11614,6980],{"class":1580},[1110,11616,11617,11619,11621,11623,11625],{"class":1112,"line":4034},[1110,11618,6985],{"class":1580},[1110,11620,1584],{"class":1337},[1110,11622,1511],{"class":1337},[1110,11624,6992],{"class":1120},[1110,11626,5567],{"class":1337},[1110,11628,11629],{"class":1112,"line":4052},[1110,11630,5633],{"class":1337},[1110,11632,11633,11635,11637,11639,11641,11643,11645,11647,11649,11651,11653],{"class":1112,"line":4060},[1110,11634,5639],{"class":1337},[1110,11636,1555],{"class":1343},[1110,11638,5479],{"class":1337},[1110,11640,371],{"class":1580},[1110,11642,1584],{"class":1337},[1110,11644,1511],{"class":1337},[1110,11646,1857],{"class":1337},[1110,11648,7017],{"class":1333},[1110,11650,1469],{"class":1337},[1110,11652,1511],{"class":1337},[1110,11654,1558],{"class":1337},[1110,11656,11657,11659,11661,11663,11665,11667,11669,11671,11673,11675,11677,11679,11681,11683,11685,11687,11689,11691,11693,11695,11697,11699,11701,11703,11705,11707,11709,11711,11713,11715,11717,11719],{"class":1112,"line":4077},[1110,11658,7028],{"class":1337},[1110,11660,1555],{"class":1343},[1110,11662,7033],{"class":1323},[1110,11664,1584],{"class":1337},[1110,11666,1511],{"class":1337},[1110,11668,7040],{"class":1333},[1110,11670,1708],{"class":1337},[1110,11672,7045],{"class":1333},[1110,11674,7048],{"class":1337},[1110,11676,2615],{"class":1333},[1110,11678,1800],{"class":1337},[1110,11680,2195],{"class":1333},[1110,11682,1511],{"class":1337},[1110,11684,7059],{"class":1337},[1110,11686,7062],{"class":1580},[1110,11688,1584],{"class":1337},[1110,11690,7067],{"class":1337},[1110,11692,4496],{"class":1333},[1110,11694,1800],{"class":1337},[1110,11696,2011],{"class":1333},[1110,11698,1469],{"class":1337},[1110,11700,7078],{"class":1120},[1110,11702,5413],{"class":1337},[1110,11704,7083],{"class":1333},[1110,11706,1800],{"class":1337},[1110,11708,6559],{"class":1333},[1110,11710,1469],{"class":1337},[1110,11712,7078],{"class":1120},[1110,11714,5413],{"class":1337},[1110,11716,7096],{"class":1333},[1110,11718,7099],{"class":1337},[1110,11720,1558],{"class":1337},[1110,11722,11723,11725],{"class":1112,"line":4098},[1110,11724,7106],{"class":1337},[1110,11726,7109],{"class":1343},[1110,11728,11729,11731,11733,11735,11737],{"class":1112,"line":4108},[1110,11730,7114],{"class":1580},[1110,11732,1584],{"class":1337},[1110,11734,1511],{"class":1337},[1110,11736,7121],{"class":1120},[1110,11738,5567],{"class":1337},[1110,11740,11741,11743,11745,11747,11749],{"class":1112,"line":4118},[1110,11742,7128],{"class":1580},[1110,11744,1584],{"class":1337},[1110,11746,1511],{"class":1337},[1110,11748,7135],{"class":1120},[1110,11750,5567],{"class":1337},[1110,11752,11753,11755,11757,11759,11761],{"class":1112,"line":4128},[1110,11754,7142],{"class":1580},[1110,11756,1584],{"class":1337},[1110,11758,1511],{"class":1337},[1110,11760,7149],{"class":1120},[1110,11762,5567],{"class":1337},[1110,11764,11765],{"class":1112,"line":4145},[1110,11766,7156],{"class":1337},[1110,11768,11769,11771],{"class":1112,"line":4156},[1110,11770,7161],{"class":1337},[1110,11772,7164],{"class":1343},[1110,11774,11775,11777,11779,11781,11783],{"class":1112,"line":4162},[1110,11776,7169],{"class":1580},[1110,11778,1584],{"class":1337},[1110,11780,1511],{"class":1337},[1110,11782,7135],{"class":1120},[1110,11784,5567],{"class":1337},[1110,11786,11787,11789,11791,11793,11795],{"class":1112,"line":4168},[1110,11788,7182],{"class":1580},[1110,11790,1584],{"class":1337},[1110,11792,1511],{"class":1337},[1110,11794,7149],{"class":1120},[1110,11796,5567],{"class":1337},[1110,11798,11799],{"class":1112,"line":4178},[1110,11800,7195],{"class":1337},[1110,11802,11803,11805,11807],{"class":1112,"line":4188},[1110,11804,7200],{"class":1337},[1110,11806,7203],{"class":1343},[1110,11808,1558],{"class":1337},[1110,11810,11811],{"class":1112,"line":4202},[1110,11812,1402],{"emptyLinePlaceholder":21},[1110,11814,11815,11817,11819,11821,11823,11825,11827,11829,11831],{"class":1112,"line":4217},[1110,11816,7106],{"class":1337},[1110,11818,1555],{"class":1343},[1110,11820,7218],{"class":1323},[1110,11822,1584],{"class":1337},[1110,11824,1511],{"class":1337},[1110,11826,7225],{"class":1133},[1110,11828,7228],{"class":1333},[1110,11830,1511],{"class":1337},[1110,11832,1558],{"class":1337},[1110,11834,11835,11837],{"class":1112,"line":4222},[1110,11836,7161],{"class":1337},[1110,11838,7164],{"class":1343},[1110,11840,11841,11843,11845,11847,11849],{"class":1112,"line":4227},[1110,11842,7243],{"class":1580},[1110,11844,1584],{"class":1337},[1110,11846,1511],{"class":1337},[1110,11848,7250],{"class":1120},[1110,11850,5567],{"class":1337},[1110,11852,11853,11855,11857,11859,11861],{"class":1112,"line":4237},[1110,11854,7169],{"class":1580},[1110,11856,1584],{"class":1337},[1110,11858,1511],{"class":1337},[1110,11860,7135],{"class":1120},[1110,11862,5567],{"class":1337},[1110,11864,11865,11867,11869,11871,11873],{"class":1112,"line":4253},[1110,11866,7182],{"class":1580},[1110,11868,1584],{"class":1337},[1110,11870,1511],{"class":1337},[1110,11872,7149],{"class":1120},[1110,11874,5567],{"class":1337},[1110,11876,11877],{"class":1112,"line":4268},[1110,11878,7195],{"class":1337},[1110,11880,11881,11883,11885,11887,11889,11891,11893,11895,11897,11899,11901,11903,11905],{"class":1112,"line":4274},[1110,11882,7161],{"class":1337},[1110,11884,1000],{"class":1343},[1110,11886,7218],{"class":1580},[1110,11888,1584],{"class":1337},[1110,11890,1511],{"class":1337},[1110,11892,7295],{"class":1120},[1110,11894,1511],{"class":1337},[1110,11896,5494],{"class":1580},[1110,11898,1584],{"class":1337},[1110,11900,1511],{"class":1337},[1110,11902,7306],{"class":1120},[1110,11904,1511],{"class":1337},[1110,11906,1558],{"class":1337},[1110,11908,11909],{"class":1112,"line":4280},[1110,11910,7315],{"class":1333},[1110,11912,11913,11915,11917],{"class":1112,"line":4288},[1110,11914,7320],{"class":1337},[1110,11916,1000],{"class":1343},[1110,11918,1558],{"class":1337},[1110,11920,11921,11923,11925],{"class":1112,"line":4293},[1110,11922,7200],{"class":1337},[1110,11924,1555],{"class":1343},[1110,11926,1558],{"class":1337},[1110,11928,11929,11931,11933],{"class":1112,"line":4299},[1110,11930,7337],{"class":1337},[1110,11932,1555],{"class":1343},[1110,11934,1558],{"class":1337},[1110,11936,11937,11939,11941],{"class":1112,"line":4319},[1110,11938,7346],{"class":1337},[1110,11940,1555],{"class":1343},[1110,11942,1558],{"class":1337},[1110,11944,11946,11948,11950],{"class":11945,"line":4334},[1112,1562],[1110,11947,5536],{"class":1337},[1110,11949,5112],{"class":1343},[1110,11951,1558],{"class":1337},[1110,11953,11955],{"class":11954,"line":4351},[1112,1562],[1110,11956,1402],{"emptyLinePlaceholder":21},[1110,11958,11960,11962],{"class":11959,"line":4374},[1112,1562],[1110,11961,5510],{"class":1337},[1110,11963,5552],{"class":1343},[1110,11965,11966,11968,11970,11972,11974],{"class":1112,"line":4385},[1110,11967,5558],{"class":1580},[1110,11969,1584],{"class":1337},[1110,11971,1511],{"class":1337},[1110,11973,5223],{"class":1120},[1110,11975,5567],{"class":1337},[1110,11977,11978,11980,11982,11984,11986],{"class":1112,"line":4393},[1110,11979,7385],{"class":1580},[1110,11981,1584],{"class":1337},[1110,11983,1511],{"class":1337},[1110,11985,7392],{"class":1120},[1110,11987,5567],{"class":1337},[1110,11989,11990,11992,11994,11996,11998],{"class":1112,"line":4399},[1110,11991,5588],{"class":1580},[1110,11993,1584],{"class":1337},[1110,11995,1511],{"class":1337},[1110,11997,5595],{"class":1120},[1110,11999,5567],{"class":1337},[1110,12001,12002,12004,12006,12008,12010],{"class":1112,"line":4404},[1110,12003,6985],{"class":1580},[1110,12005,1584],{"class":1337},[1110,12007,1511],{"class":1337},[1110,12009,7417],{"class":1120},[1110,12011,5567],{"class":1337},[1110,12013,12014,12016,12018,12020,12022],{"class":1112,"line":4427},[1110,12015,5618],{"class":1580},[1110,12017,1584],{"class":1337},[1110,12019,1511],{"class":1337},[1110,12021,7430],{"class":1120},[1110,12023,5567],{"class":1337},[1110,12025,12026],{"class":1112,"line":4433},[1110,12027,5633],{"class":1337},[1110,12029,12030,12032,12034,12036,12039],{"class":1112,"line":4453},[1110,12031,5639],{"class":1337},[1110,12033,1555],{"class":1343},[1110,12035,5479],{"class":1337},[1110,12037,12038],{"class":1580},"footer",[1110,12040,1558],{"class":1337},[1110,12042,12043,12045,12048,12051,12053,12055,12057,12059],{"class":1112,"line":4459},[1110,12044,7028],{"class":1337},[1110,12046,12047],{"class":1343},"ModelSelect",[1110,12049,12050],{"class":1580}," v-model",[1110,12052,1584],{"class":1337},[1110,12054,1511],{"class":1337},[1110,12056,4668],{"class":1120},[1110,12058,1511],{"class":1337},[1110,12060,1604],{"class":1337},[1110,12062,12063,12065,12067],{"class":1112,"line":4505},[1110,12064,7346],{"class":1337},[1110,12066,1555],{"class":1343},[1110,12068,1558],{"class":1337},[1110,12070,12071],{"class":1112,"line":4521},[1110,12072,1402],{"emptyLinePlaceholder":21},[1110,12074,12075,12077],{"class":1112,"line":4554},[1110,12076,5639],{"class":1337},[1110,12078,7443],{"class":1343},[1110,12080,12081,12083,12085,12087,12089],{"class":1112,"line":4568},[1110,12082,7448],{"class":1580},[1110,12084,1584],{"class":1337},[1110,12086,1511],{"class":1337},[1110,12088,6973],{"class":1120},[1110,12090,5567],{"class":1337},[1110,12092,12093,12095,12097,12099,12101],{"class":1112,"line":4576},[1110,12094,7461],{"class":1580},[1110,12096,1584],{"class":1337},[1110,12098,1511],{"class":1337},[1110,12100,5652],{"class":1120},[1110,12102,5567],{"class":1337},[1110,12104,12105,12107,12109,12111,12113],{"class":1112,"line":4582},[1110,12106,7474],{"class":1580},[1110,12108,1584],{"class":1337},[1110,12110,1511],{"class":1337},[1110,12112,7481],{"class":1120},[1110,12114,5567],{"class":1337},[1110,12116,12117,12119,12121,12123,12125],{"class":1112,"line":4589},[1110,12118,7488],{"class":1580},[1110,12120,1584],{"class":1337},[1110,12122,1511],{"class":1337},[1110,12124,7495],{"class":1120},[1110,12126,5567],{"class":1337},[1110,12128,12129],{"class":1112,"line":4594},[1110,12130,7502],{"class":1337},[1110,12132,12133,12135,12137],{"class":1112,"line":4612},[1110,12134,5536],{"class":1337},[1110,12136,5106],{"class":1343},[1110,12138,1558],{"class":1337},[1110,12140,12142,12144,12146],{"class":1112,"line":12141},114,[1110,12143,5670],{"class":1337},[1110,12145,5491],{"class":1343},[1110,12147,1558],{"class":1337},[1110,12149,12151,12153,12155],{"class":1112,"line":12150},115,[1110,12152,1609],{"class":1337},[1110,12154,1555],{"class":1343},[1110,12156,1558],{"class":1337},[1110,12158,12160,12162,12164],{"class":1112,"line":12159},116,[1110,12161,1619],{"class":1337},[1110,12163,5456],{"class":1343},[1110,12165,1558],{"class":1337},[1110,12167,12169,12171,12173],{"class":1112,"line":12168},117,[1110,12170,1628],{"class":1337},[1110,12172,1555],{"class":1343},[1110,12174,1558],{"class":1337},[1004,12176,12178],{"id":12177},"going-further","Going further",[1000,12180,12181],{},"You now have a working AI chatbot with database persistence! To take it further, consider adding:",[1000,12183,12184],{},[1018,12185,12186],{},"User Authentication",[1000,12188,12189,12190,12195],{},"Add authentication with ",[1054,12191,12194],{"href":12192,"rel":12193},"https:\u002F\u002Fgithub.com\u002Fatinux\u002Fnuxt-auth-utils",[1058],"nuxt-auth-utils"," to let users access their chat history across devices and keep conversations private.",[1000,12197,12198],{},[1018,12199,12200],{},"AI Tools",[1000,12202,12203,12204,12209],{},"Extend your chatbot with ",[1054,12205,12208],{"href":12206,"rel":12207},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-core\u002Ftools-and-tool-calling",[1058],"AI SDK tools"," that can fetch real-time data, generate charts, or interact with external APIs:",[1101,12211,12213],{"className":1314,"code":12212,"language":1316,"meta":1106,"style":1106},"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",[1060,12214,12215,12234,12252,12256,12271,12287,12304,12335,12343,12363,12368,12403,12407],{"__ignoreMap":1106},[1110,12216,12217,12219,12221,12224,12226,12228,12230,12232],{"class":1112,"line":1113},[1110,12218,1699],{"class":1323},[1110,12220,1702],{"class":1337},[1110,12222,12223],{"class":1333}," tool",[1110,12225,1724],{"class":1337},[1110,12227,1727],{"class":1323},[1110,12229,1424],{"class":1337},[1110,12231,2531],{"class":1120},[1110,12233,1388],{"class":1337},[1110,12235,12236,12238,12240,12242,12244,12246,12248,12250],{"class":1112,"line":1130},[1110,12237,1699],{"class":1323},[1110,12239,1702],{"class":1337},[1110,12241,2566],{"class":1333},[1110,12243,1724],{"class":1337},[1110,12245,1727],{"class":1323},[1110,12247,1424],{"class":1337},[1110,12249,2575],{"class":1120},[1110,12251,1388],{"class":1337},[1110,12253,12254],{"class":1112,"line":1353},[1110,12255,1402],{"emptyLinePlaceholder":21},[1110,12257,12258,12260,12263,12265,12267,12269],{"class":1112,"line":1368},[1110,12259,3059],{"class":1580},[1110,12261,12262],{"class":1333}," weatherTool ",[1110,12264,1584],{"class":1337},[1110,12266,12223],{"class":1133},[1110,12268,1334],{"class":1333},[1110,12270,1338],{"class":1337},[1110,12272,12273,12276,12278,12280,12283,12285],{"class":1112,"line":1380},[1110,12274,12275],{"class":1343},"  description",[1110,12277,1347],{"class":1337},[1110,12279,1424],{"class":1337},[1110,12281,12282],{"class":1120},"Get the current weather for a location",[1110,12284,1362],{"class":1337},[1110,12286,1365],{"class":1337},[1110,12288,12289,12292,12294,12296,12298,12300,12302],{"class":1112,"line":1391},[1110,12290,12291],{"class":1343},"  parameters",[1110,12293,1347],{"class":1337},[1110,12295,2566],{"class":1333},[1110,12297,1800],{"class":1337},[1110,12299,2638],{"class":1133},[1110,12301,1334],{"class":1333},[1110,12303,1338],{"class":1337},[1110,12305,12306,12309,12311,12313,12315,12317,12319,12321,12324,12326,12328,12331,12333],{"class":1112,"line":1399},[1110,12307,12308],{"class":1343},"    location",[1110,12310,1347],{"class":1337},[1110,12312,2566],{"class":1333},[1110,12314,1800],{"class":1337},[1110,12316,3258],{"class":1133},[1110,12318,1797],{"class":1333},[1110,12320,1800],{"class":1337},[1110,12322,12323],{"class":1133},"describe",[1110,12325,1334],{"class":1333},[1110,12327,1362],{"class":1337},[1110,12329,12330],{"class":1120},"The city name",[1110,12332,1362],{"class":1337},[1110,12334,1472],{"class":1333},[1110,12336,12337,12339,12341],{"class":1112,"line":1405},[1110,12338,2411],{"class":1337},[1110,12340,1874],{"class":1333},[1110,12342,1365],{"class":1337},[1110,12344,12345,12348,12350,12352,12354,12357,12359,12361],{"class":1112,"line":1416},[1110,12346,12347],{"class":1133},"  execute",[1110,12349,1347],{"class":1337},[1110,12351,4020],{"class":1580},[1110,12353,1931],{"class":1337},[1110,12355,12356],{"class":1934}," location",[1110,12358,1938],{"class":1337},[1110,12360,1817],{"class":1580},[1110,12362,1413],{"class":1337},[1110,12364,12365],{"class":1112,"line":1432},[1110,12366,12367],{"class":2688},"    \u002F\u002F Fetch weather data from an API\n",[1110,12369,12370,12373,12375,12377,12379,12382,12384,12387,12389,12392,12394,12396,12399,12401],{"class":1112,"line":1438},[1110,12371,12372],{"class":1323},"    return",[1110,12374,1702],{"class":1337},[1110,12376,12356],{"class":1333},[1110,12378,1708],{"class":1337},[1110,12380,12381],{"class":1343}," temperature",[1110,12383,1347],{"class":1337},[1110,12385,12386],{"class":3591}," 22",[1110,12388,1708],{"class":1337},[1110,12390,12391],{"class":1343}," condition",[1110,12393,1347],{"class":1337},[1110,12395,1424],{"class":1337},[1110,12397,12398],{"class":1120},"Sunny",[1110,12400,1362],{"class":1337},[1110,12402,3180],{"class":1337},[1110,12404,12405],{"class":1112,"line":1443},[1110,12406,3616],{"class":1337},[1110,12408,12409,12411],{"class":1112,"line":1466},[1110,12410,1469],{"class":1337},[1110,12412,1472],{"class":1333},[1004,12414,12416],{"id":12415},"deploying-to-vercel","Deploying to Vercel",[1000,12418,12419],{},"Deploy your chatbot to Vercel with zero configuration:",[1101,12421,12423],{"className":1103,"code":12422,"language":1105,"meta":1106,"style":1106},"npx vercel deploy\n",[1060,12424,12425],{"__ignoreMap":1106},[1110,12426,12427,12429,12432],{"class":1112,"line":1113},[1110,12428,1117],{"class":1116},[1110,12430,12431],{"class":1120}," vercel",[1110,12433,12434],{"class":1120}," deploy\n",[1000,12436,12437],{},"Then, in the Vercel dashboard:",[1012,12439,12440,12446],{},[1015,12441,12442,12443,12445],{},"Enable ",[1018,12444,4624],{}," and add credits so requests can be processed.",[1015,12447,12448,12449,12452],{},"Add a ",[1018,12450,12451],{},"Turso"," database from the Vercel Marketplace and connect it to your project (it will provision the database and add the required environment variables automatically).",[12454,12455,12456],"blockquote",{},[1000,12457,12458,12459,12464,12465,12467],{},"Note: On Vercel, you ",[1018,12460,12461,12462],{},"don’t need to manually add ",[1060,12463,1651],{}," — Vercel handles the gateway configuration for deployments. Keep using ",[1060,12466,1638],{}," locally for development.",[1474,12469,12471],{"to":1089,"target":12470},"_blank",[1000,12472,12473,12474,1800],{},"Learn more about setting up AI Gateway in the ",[1018,12475,12476],{},"Vercel AI Gateway documentation",[1004,12478,12480],{"id":12479},"conclusion","Conclusion",[1000,12482,12483],{},"You've built a complete AI chatbot with:",[1012,12485,12486,12492,12498,12504,12509],{},[1015,12487,12488,12491],{},[1018,12489,12490],{},"A complete chat interface"," using Nuxt UI components",[1015,12493,12494,12497],{},[1018,12495,12496],{},"Real-time streaming responses"," with the AI SDK",[1015,12499,12500,12503],{},[1018,12501,12502],{},"Streaming Markdown rendering"," with Comark for rich content display",[1015,12505,12506,12508],{},[1018,12507,1038],{}," via AI Gateway",[1015,12510,12511,12514],{},[1018,12512,12513],{},"Database persistence"," with SQLite (local) \u002F Turso (production) and Drizzle ORM",[1000,12516,12517],{},"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.",[1000,12519,12520],{},[1018,12521,12522],{},"Resources:",[1012,12524,12525,12532,12539,12546,12552,12558],{},[1015,12526,12527],{},[1054,12528,12531],{"href":12529,"rel":12530},"https:\u002F\u002Fui.nuxt.com\u002Fcomponents\u002Fchat",[1058],"Nuxt UI Chat Components",[1015,12533,12534],{},[1054,12535,12538],{"href":12536,"rel":12537},"https:\u002F\u002Fhub.nuxt.com\u002Fdocs\u002Ffeatures\u002Fdatabase",[1058],"NuxtHub Database",[1015,12540,12541],{},[1054,12542,12545],{"href":12543,"rel":12544},"https:\u002F\u002Fai-sdk.dev",[1058],"AI SDK Documentation",[1015,12547,12548],{},[1054,12549,12551],{"href":1089,"rel":12550},[1058],"AI Gateway Documentation",[1015,12553,12554],{},[1054,12555,12557],{"href":1056,"rel":12556},[1058],"Nuxt AI Chat Template",[1015,12559,12560],{},[1054,12561,12563],{"href":1066,"rel":12562},[1058],"Vue AI Chat Template",[1000,12565,12566],{},"We're excited to see what you'll build!",[12568,12569,12570],"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":1106,"searchDepth":1130,"depth":1130,"links":12572},[12573,12574,12575,12581,12586,12590,12591,12595,12596,12597,12602,12603,12604],{"id":1006,"depth":1130,"text":1007},{"id":1074,"depth":1130,"text":1075},{"id":1095,"depth":1130,"text":1096,"children":12576},[12577,12578,12579,12580],{"id":1140,"depth":1353,"text":1141},{"id":1300,"depth":1353,"text":1301},{"id":1529,"depth":1353,"text":1530},{"id":1668,"depth":1353,"text":1669},{"id":2454,"depth":1130,"text":2455,"children":12582},[12583,12584,12585],{"id":2466,"depth":1353,"text":2467},{"id":2850,"depth":1353,"text":2851},{"id":4715,"depth":1353,"text":4716},{"id":5097,"depth":1130,"text":5098,"children":12587},[12588,12589],{"id":5116,"depth":1353,"text":5117},{"id":5733,"depth":1353,"text":5734},{"id":6105,"depth":1130,"text":6106},{"id":7698,"depth":1130,"text":7699,"children":12592},[12593,12594],{"id":7705,"depth":1353,"text":7706},{"id":7865,"depth":1353,"text":7866},{"id":8372,"depth":1130,"text":8373},{"id":8915,"depth":1130,"text":8916},{"id":10237,"depth":1130,"text":10238,"children":12598},[12599,12600,12601],{"id":10248,"depth":1353,"text":10249},{"id":10520,"depth":1353,"text":10521},{"id":10779,"depth":1353,"text":10780},{"id":12177,"depth":1130,"text":12178},{"id":12415,"depth":1130,"text":12416},{"id":12479,"depth":1130,"text":12480},"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":12610},"Tutorial","\u002Fblog\u002Fhow-to-build-an-ai-chat",{"title":984,"description":12606},"blog\u002Fhow-to-build-an-ai-chat","niwtEdHQJaUBnPqldgEx0ODg9tOUK75ezMtfPw31Y0Q",{"data":12616,"body":12617},{},{"type":12618,"children":12619},"root",[12620],{"type":178,"tag":1000,"props":12621,"children":12622},{},[12623,12625,12632],{"type":5356,"value":12624},"Nuxt ",{"type":178,"tag":1110,"props":12626,"children":12629},{"className":12627},[12628],"text-primary",[12630],{"type":5356,"value":12631},"UI",{"type":5356,"value":12633}," Blog",{"data":12635,"body":12636},{},{"type":12618,"children":12637},[12638],{"type":178,"tag":1000,"props":12639,"children":12640},{},[12641],{"type":5356,"value":972},1776864854333]