[{"data":1,"prerenderedAt":12637},["ShallowReactive",2],{"navigation":3,"blog":964,"blog-posts":976,"blog-hero-title":12610,"blog-hero-description":12629},[4],{"title":5,"path":6,"stem":7,"children":8,"page":36},"Docs","\u002Fdocs","docs",[9,163,816,857],{"title":10,"path":11,"stem":12,"children":13,"framework":16,"category":16,"description":16,"icon":30},"Get Started","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started\u002F1.index",[14,19,37,47,53,76,141],{"title":15,"path":11,"stem":12,"framework":16,"category":16,"description":17,"icon":18},"Introduction",null,"Nuxt UI is a comprehensive Vue UI component library (Nuxt optional), offering 125+ accessible, Tailwind CSS components for building modern web applications.","i-lucide-house",{"title":20,"framework":16,"category":16,"description":16,"shadow":21,"path":22,"stem":23,"children":24,"page":36},"Installation",true,"\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F1.getting-started\u002F2.installation",[25,31],{"title":20,"path":26,"stem":27,"framework":28,"category":16,"description":29,"icon":30},"\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fnuxt","docs\u002F1.getting-started\u002F2.installation\u002F1.nuxt","nuxt","Learn how to install and configure Nuxt UI in your Nuxt application.","i-lucide-square-play",{"title":20,"path":32,"stem":33,"framework":34,"category":16,"description":35,"icon":30},"\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fvue","docs\u002F1.getting-started\u002F2.installation\u002F2.vue","vue","Learn how to install and configure Nuxt UI in your Vue application, compatible with both plain Vite and Inertia.",false,{"title":38,"framework":16,"category":16,"description":16,"icon":39,"shadow":21,"path":40,"stem":41,"children":42,"page":36},"Migration","i-lucide-arrow-right-left","\u002Fdocs\u002Fgetting-started\u002Fmigration","docs\u002F1.getting-started\u002F3.migration",[43],{"title":38,"path":44,"stem":45,"framework":16,"category":16,"description":46,"icon":39},"\u002Fdocs\u002Fgetting-started\u002Fmigration\u002Fv4","docs\u002F1.getting-started\u002F3.migration\u002F1.v4","A comprehensive guide to migrate your application from Nuxt UI v3 to Nuxt UI v4.",{"title":48,"path":49,"stem":50,"framework":16,"category":16,"description":51,"icon":52},"Contribution","\u002Fdocs\u002Fgetting-started\u002Fcontribution","docs\u002F1.getting-started\u002F4.contribution","A comprehensive guide on contributing to Nuxt UI, including project structure, development workflow, and best practices.","i-lucide-handshake",{"title":54,"path":55,"stem":56,"children":57,"page":36},"Theme","\u002Fdocs\u002Fgetting-started\u002Ftheme","docs\u002F1.getting-started\u002F5.theme",[58,64,70],{"title":59,"path":60,"stem":61,"framework":16,"category":16,"description":62,"icon":63},"Design System","\u002Fdocs\u002Fgetting-started\u002Ftheme\u002Fdesign-system","docs\u002F1.getting-started\u002F5.theme\u002F1.design-system","Nuxt UI's design system uses Tailwind CSS for simple theming and easy customization.","i-lucide-palette",{"title":65,"path":66,"stem":67,"framework":16,"category":16,"description":68,"icon":69},"CSS Variables","\u002Fdocs\u002Fgetting-started\u002Ftheme\u002Fcss-variables","docs\u002F1.getting-started\u002F5.theme\u002F2.css-variables","Nuxt UI uses CSS variables as design tokens for flexible, consistent theming with built-in light and dark mode support.","i-lucide-swatch-book",{"title":71,"path":72,"stem":73,"framework":16,"category":16,"description":74,"icon":75},"Components","\u002Fdocs\u002Fgetting-started\u002Ftheme\u002Fcomponents","docs\u002F1.getting-started\u002F5.theme\u002F3.components","Learn how to customize Nuxt UI components with the Tailwind Variants API for advanced, flexible, and maintainable styling.","i-lucide-layout-grid",{"title":77,"framework":16,"category":16,"description":16,"path":78,"stem":79,"children":80,"page":36},"Integrations","\u002Fdocs\u002Fgetting-started\u002Fintegrations","docs\u002F1.getting-started\u002F6.integrations",[81,95,101,115,129,135],{"title":82,"framework":16,"category":16,"description":16,"shadow":21,"path":83,"stem":84,"children":85,"page":36},"Icons","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ficons","docs\u002F1.getting-started\u002F6.integrations\u002F1.icons",[86,91],{"title":82,"path":87,"stem":88,"framework":28,"category":16,"description":89,"icon":90},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ficons\u002Fnuxt","docs\u002F1.getting-started\u002F6.integrations\u002F1.icons\u002F1.nuxt","Nuxt UI integrates with Nuxt Icon to access over 200,000+ icons from Iconify.","i-lucide-smile",{"title":82,"path":92,"stem":93,"framework":34,"category":16,"description":94,"icon":90},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ficons\u002Fvue","docs\u002F1.getting-started\u002F6.integrations\u002F1.icons\u002F2.vue","Nuxt UI integrates with Iconify to access over 200,000+ icons.",{"title":96,"path":97,"stem":98,"framework":28,"category":16,"description":99,"icon":100},"Fonts","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Ffonts","docs\u002F1.getting-started\u002F6.integrations\u002F2.fonts","Nuxt UI integrates with Nuxt Fonts to provide plug-and-play font optimization.","i-lucide-a-large-small",{"title":102,"framework":16,"category":16,"description":16,"shadow":21,"path":103,"stem":104,"children":105,"page":36},"Color Mode","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcolor-mode","docs\u002F1.getting-started\u002F6.integrations\u002F3.color-mode",[106,111],{"title":102,"path":107,"stem":108,"framework":28,"category":16,"description":109,"icon":110},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcolor-mode\u002Fnuxt","docs\u002F1.getting-started\u002F6.integrations\u002F3.color-mode\u002F1.nuxt","Nuxt UI integrates with Nuxt Color Mode to allow for easy switching between light and dark themes.","i-lucide-sun-moon",{"title":102,"path":112,"stem":113,"framework":34,"category":16,"description":114,"icon":110},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcolor-mode\u002Fvue","docs\u002F1.getting-started\u002F6.integrations\u002F3.color-mode\u002F2.vue","Nuxt UI integrates with VueUse to allow for easy switching between light and dark themes.",{"title":116,"framework":16,"category":16,"description":16,"shadow":21,"path":117,"stem":118,"children":119,"page":36},"I18n","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fi18n","docs\u002F1.getting-started\u002F6.integrations\u002F4.i18n",[120,126],{"title":121,"path":122,"stem":123,"framework":28,"category":16,"description":124,"icon":125},"Internationalization (i18n)","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fi18n\u002Fnuxt","docs\u002F1.getting-started\u002F6.integrations\u002F4.i18n\u002F1.nuxt","Nuxt UI supports 50+ locales and multi-directional (LTR\u002FRTL) internationalization.","i-lucide-languages",{"title":121,"path":127,"stem":128,"framework":34,"category":16,"description":124,"icon":125},"\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fi18n\u002Fvue","docs\u002F1.getting-started\u002F6.integrations\u002F4.i18n\u002F2.vue",{"title":130,"path":131,"stem":132,"framework":28,"category":16,"description":133,"icon":134},"Content","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fcontent","docs\u002F1.getting-started\u002F6.integrations\u002F5.content","Nuxt UI integrates with Nuxt Content to deliver beautiful typography and consistent component styling.","i-simple-icons-markdown",{"title":136,"path":137,"stem":138,"framework":34,"category":16,"description":139,"icon":140},"SSR","\u002Fdocs\u002Fgetting-started\u002Fintegrations\u002Fssr","docs\u002F1.getting-started\u002F6.integrations\u002F6.ssr","Nuxt UI has first-party support for Vue SSR. This guide will help you have it fully enabled.","i-lucide-server",{"title":142,"framework":16,"category":16,"description":16,"path":143,"stem":144,"children":145,"page":36},"Agents","\u002Fdocs\u002Fgetting-started\u002Fai","docs\u002F1.getting-started\u002F7.ai",[146,151,157],{"title":147,"path":148,"stem":149,"framework":16,"category":16,"description":150,"icon":140},"MCP Server","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fmcp","docs\u002F1.getting-started\u002F7.ai\u002F1.mcp","Use Nuxt UI components in your AI assistants with Model Context Protocol support.",{"title":152,"path":153,"stem":154,"framework":16,"category":16,"description":155,"icon":156},"LLMs.txt","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fllms-txt","docs\u002F1.getting-started\u002F7.ai\u002F2.llms-txt","How to get AI tools like Cursor, Windsurf, GitHub Copilot, ChatGPT, and Claude to understand Nuxt UI components, theming, and best practices.","i-lucide-bot",{"title":158,"path":159,"stem":160,"framework":16,"category":16,"description":161,"icon":162},"Skills","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fskills","docs\u002F1.getting-started\u002F7.ai\u002F3.skills","Install Nuxt UI skills to give AI coding agents deep knowledge of components, theming, and best practices.","i-lucide-sparkles",{"title":71,"framework":16,"category":16,"description":16,"icon":164,"path":165,"stem":166,"children":167,"page":36},"i-lucide-square-code","\u002Fdocs\u002Fcomponents","docs\u002F2.components",[168,174,180,186,192,197,202,207,212,217,222,228,233,238,243,248,253,258,264,269,274,279,284,289,295,300,305,311,316,321,326,332,337,342,347,352,357,362,367,373,378,383,388,393,399,405,410,415,420,425,430,435,440,445,450,455,460,466,471,476,481,486,491,496,501,506,511,516,521,526,531,536,541,546,551,556,561,566,571,576,581,587,592,597,602,607,612,617,622,627,632,637,642,647,652,657,662,667,672,677,682,687,692,697,702,707,712,717,722,727,732,737,742,747,752,757,762,767,772,777,782,787,791,796,801,806,811],{"title":169,"path":170,"stem":171,"framework":16,"category":172,"description":173},"Accordion","\u002Fdocs\u002Fcomponents\u002Faccordion","docs\u002F2.components\u002Faccordion","data","A stacked set of collapsible panels.",{"title":175,"path":176,"stem":177,"framework":16,"category":178,"description":179},"Alert","\u002Fdocs\u002Fcomponents\u002Falert","docs\u002F2.components\u002Falert","element","A callout to draw user's attention.",{"title":181,"path":182,"stem":183,"framework":16,"category":184,"description":185},"App","\u002Fdocs\u002Fcomponents\u002Fapp","docs\u002F2.components\u002Fapp","layout","Wraps your app to provide global configurations and more.",{"title":187,"path":188,"stem":189,"framework":16,"category":190,"description":191},"AuthForm","\u002Fdocs\u002Fcomponents\u002Fauth-form","docs\u002F2.components\u002Fauth-form","page","A customizable Form to create login, register or password reset forms.",{"title":193,"path":194,"stem":195,"framework":16,"category":178,"description":196},"Avatar","\u002Fdocs\u002Fcomponents\u002Favatar","docs\u002F2.components\u002Favatar","An img element with fallback and Nuxt Image support.",{"title":198,"path":199,"stem":200,"framework":16,"category":178,"description":201},"AvatarGroup","\u002Fdocs\u002Fcomponents\u002Favatar-group","docs\u002F2.components\u002Favatar-group","Stack multiple avatars in a group.",{"title":203,"path":204,"stem":205,"framework":16,"category":178,"description":206},"Badge","\u002Fdocs\u002Fcomponents\u002Fbadge","docs\u002F2.components\u002Fbadge","A short text to represent a status or a category.",{"title":208,"path":209,"stem":210,"framework":16,"category":178,"description":211},"Banner","\u002Fdocs\u002Fcomponents\u002Fbanner","docs\u002F2.components\u002Fbanner","Display a banner at the top of your website to inform users about important information.",{"title":213,"path":214,"stem":215,"framework":16,"category":190,"description":216},"BlogPost","\u002Fdocs\u002Fcomponents\u002Fblog-post","docs\u002F2.components\u002Fblog-post","A customizable article to display in a blog page.",{"title":218,"path":219,"stem":220,"framework":16,"category":190,"description":221},"BlogPosts","\u002Fdocs\u002Fcomponents\u002Fblog-posts","docs\u002F2.components\u002Fblog-posts","Display a list of blog posts in a responsive grid layout.",{"title":223,"path":224,"stem":225,"framework":16,"category":226,"description":227},"Breadcrumb","\u002Fdocs\u002Fcomponents\u002Fbreadcrumb","docs\u002F2.components\u002Fbreadcrumb","navigation","A hierarchy of links to navigate through a website.",{"title":229,"path":230,"stem":231,"framework":16,"category":178,"description":232},"Button","\u002Fdocs\u002Fcomponents\u002Fbutton","docs\u002F2.components\u002Fbutton","A button element that can act as a link or trigger an action.",{"title":234,"path":235,"stem":236,"framework":16,"category":178,"description":237},"Calendar","\u002Fdocs\u002Fcomponents\u002Fcalendar","docs\u002F2.components\u002Fcalendar","A calendar component for selecting single dates, multiple dates or date ranges.",{"title":239,"path":240,"stem":241,"framework":16,"category":178,"description":242},"Card","\u002Fdocs\u002Fcomponents\u002Fcard","docs\u002F2.components\u002Fcard","Display content in a card with a header, body and footer.",{"title":244,"path":245,"stem":246,"framework":16,"category":172,"description":247},"Carousel","\u002Fdocs\u002Fcomponents\u002Fcarousel","docs\u002F2.components\u002Fcarousel","A carousel with motion and swipe built using Embla.",{"title":249,"path":250,"stem":251,"framework":16,"category":190,"description":252},"ChangelogVersion","\u002Fdocs\u002Fcomponents\u002Fchangelog-version","docs\u002F2.components\u002Fchangelog-version","A customizable article to display in a changelog.",{"title":254,"path":255,"stem":256,"framework":16,"category":190,"description":257},"ChangelogVersions","\u002Fdocs\u002Fcomponents\u002Fchangelog-versions","docs\u002F2.components\u002Fchangelog-versions","Display a list of changelog versions in a timeline.",{"title":259,"path":260,"stem":261,"framework":16,"category":262,"description":263},"Chat","\u002Fdocs\u002Fcomponents\u002Fchat","docs\u002F2.components\u002Fchat","chat","Build AI chat interfaces with streaming, reasoning, and tool calling.",{"title":265,"path":266,"stem":267,"framework":16,"category":262,"description":268},"ChatMessage","\u002Fdocs\u002Fcomponents\u002Fchat-message","docs\u002F2.components\u002Fchat-message","Display a chat message with icon, avatar, and actions.",{"title":270,"path":271,"stem":272,"framework":16,"category":262,"description":273},"ChatMessages","\u002Fdocs\u002Fcomponents\u002Fchat-messages","docs\u002F2.components\u002Fchat-messages","Display a list of chat messages, designed to work seamlessly with Vercel AI SDK.",{"title":275,"path":276,"stem":277,"framework":16,"category":262,"description":278},"ChatPalette","\u002Fdocs\u002Fcomponents\u002Fchat-palette","docs\u002F2.components\u002Fchat-palette","A chat palette to create a chatbot interface inside an overlay.",{"title":280,"path":281,"stem":282,"framework":16,"category":262,"description":283},"ChatPrompt","\u002Fdocs\u002Fcomponents\u002Fchat-prompt","docs\u002F2.components\u002Fchat-prompt","An enhanced Textarea for submitting prompts in AI chat interfaces.",{"title":285,"path":286,"stem":287,"framework":16,"category":262,"description":288},"ChatPromptSubmit","\u002Fdocs\u002Fcomponents\u002Fchat-prompt-submit","docs\u002F2.components\u002Fchat-prompt-submit","A Button for submitting chat prompts with automatic status handling.",{"title":290,"path":291,"stem":292,"framework":16,"category":262,"description":293,"badge":294},"ChatReasoning","\u002Fdocs\u002Fcomponents\u002Fchat-reasoning","docs\u002F2.components\u002Fchat-reasoning","Display a collapsible AI reasoning or thinking process.","New",{"title":296,"path":297,"stem":298,"framework":16,"category":262,"description":299,"badge":294},"ChatShimmer","\u002Fdocs\u002Fcomponents\u002Fchat-shimmer","docs\u002F2.components\u002Fchat-shimmer","Display a text shimmer animation effect.",{"title":301,"path":302,"stem":303,"framework":16,"category":262,"description":304,"badge":294},"ChatTool","\u002Fdocs\u002Fcomponents\u002Fchat-tool","docs\u002F2.components\u002Fchat-tool","Display a collapsible AI tool invocation status.",{"title":306,"path":307,"stem":308,"framework":16,"category":309,"description":310},"Checkbox","\u002Fdocs\u002Fcomponents\u002Fcheckbox","docs\u002F2.components\u002Fcheckbox","form","An input element to toggle between checked and unchecked states.",{"title":312,"path":313,"stem":314,"framework":16,"category":309,"description":315},"CheckboxGroup","\u002Fdocs\u002Fcomponents\u002Fcheckbox-group","docs\u002F2.components\u002Fcheckbox-group","A set of checklist buttons to select multiple option from a list.",{"title":317,"path":318,"stem":319,"framework":16,"category":178,"description":320},"Chip","\u002Fdocs\u002Fcomponents\u002Fchip","docs\u002F2.components\u002Fchip","An indicator of a numeric value or a state.",{"title":322,"path":323,"stem":324,"framework":16,"category":178,"description":325},"Collapsible","\u002Fdocs\u002Fcomponents\u002Fcollapsible","docs\u002F2.components\u002Fcollapsible","A collapsible element to toggle visibility of its content.",{"title":327,"path":328,"stem":329,"framework":16,"category":330,"description":331},"ColorModeAvatar","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-avatar","docs\u002F2.components\u002Fcolor-mode-avatar","color-mode","An Avatar with a different source for light and dark mode.",{"title":333,"path":334,"stem":335,"framework":16,"category":330,"description":336},"ColorModeButton","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-button","docs\u002F2.components\u002Fcolor-mode-button","A Button to switch between light and dark mode.",{"title":338,"path":339,"stem":340,"framework":16,"category":330,"description":341},"ColorModeImage","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-image","docs\u002F2.components\u002Fcolor-mode-image","An image element with a different source for light and dark mode.",{"title":343,"path":344,"stem":345,"framework":16,"category":330,"description":346},"ColorModeSelect","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-select","docs\u002F2.components\u002Fcolor-mode-select","A Select to switch between system, dark & light mode.",{"title":348,"path":349,"stem":350,"framework":16,"category":330,"description":351},"ColorModeSwitch","\u002Fdocs\u002Fcomponents\u002Fcolor-mode-switch","docs\u002F2.components\u002Fcolor-mode-switch","A switch to toggle between light and dark mode.",{"title":353,"path":354,"stem":355,"framework":16,"category":309,"description":356},"ColorPicker","\u002Fdocs\u002Fcomponents\u002Fcolor-picker","docs\u002F2.components\u002Fcolor-picker","A component to select a color.",{"title":358,"path":359,"stem":360,"framework":16,"category":226,"description":361},"CommandPalette","\u002Fdocs\u002Fcomponents\u002Fcommand-palette","docs\u002F2.components\u002Fcommand-palette","A command palette with full-text search powered by Fuse.js for efficient fuzzy matching.",{"title":363,"path":364,"stem":365,"framework":16,"category":184,"description":366},"Container","\u002Fdocs\u002Fcomponents\u002Fcontainer","docs\u002F2.components\u002Fcontainer","A container lets you center and constrain the width of your content.",{"title":368,"path":369,"stem":370,"framework":28,"category":371,"description":372},"ContentNavigation","\u002Fdocs\u002Fcomponents\u002Fcontent-navigation","docs\u002F2.components\u002Fcontent-navigation","content","An accordion-style navigation component for organizing page links.",{"title":374,"path":375,"stem":376,"framework":28,"category":371,"description":377},"ContentSearch","\u002Fdocs\u002Fcomponents\u002Fcontent-search","docs\u002F2.components\u002Fcontent-search","A ready to use CommandPalette to add to your documentation.",{"title":379,"path":380,"stem":381,"framework":28,"category":371,"description":382},"ContentSearchButton","\u002Fdocs\u002Fcomponents\u002Fcontent-search-button","docs\u002F2.components\u002Fcontent-search-button","A pre-styled Button to open the ContentSearch modal.",{"title":384,"path":385,"stem":386,"framework":28,"category":371,"description":387},"ContentSurround","\u002Fdocs\u002Fcomponents\u002Fcontent-surround","docs\u002F2.components\u002Fcontent-surround","A pair of prev and next links to navigate between pages.",{"title":389,"path":390,"stem":391,"framework":28,"category":371,"description":392},"ContentToc","\u002Fdocs\u002Fcomponents\u002Fcontent-toc","docs\u002F2.components\u002Fcontent-toc","A sticky Table of Contents with automatic active anchor link highlighting.",{"title":394,"path":395,"stem":396,"framework":16,"category":397,"description":398},"ContextMenu","\u002Fdocs\u002Fcomponents\u002Fcontext-menu","docs\u002F2.components\u002Fcontext-menu","overlay","A menu to display actions when right-clicking on an element.",{"title":400,"path":401,"stem":402,"framework":16,"category":403,"description":404},"DashboardGroup","\u002Fdocs\u002Fcomponents\u002Fdashboard-group","docs\u002F2.components\u002Fdashboard-group","dashboard","A fixed layout component that provides context for dashboard components with sidebar state management and persistence.",{"title":406,"path":407,"stem":408,"framework":16,"category":403,"description":409},"DashboardNavbar","\u002Fdocs\u002Fcomponents\u002Fdashboard-navbar","docs\u002F2.components\u002Fdashboard-navbar","A responsive navbar to display in a dashboard.",{"title":411,"path":412,"stem":413,"framework":16,"category":403,"description":414},"DashboardPanel","\u002Fdocs\u002Fcomponents\u002Fdashboard-panel","docs\u002F2.components\u002Fdashboard-panel","A resizable panel to display in a dashboard.",{"title":416,"path":417,"stem":418,"framework":16,"category":403,"description":419},"DashboardResizeHandle","\u002Fdocs\u002Fcomponents\u002Fdashboard-resize-handle","docs\u002F2.components\u002Fdashboard-resize-handle","A handle to resize a sidebar or panel.",{"title":421,"path":422,"stem":423,"framework":16,"category":403,"description":424},"DashboardSearch","\u002Fdocs\u002Fcomponents\u002Fdashboard-search","docs\u002F2.components\u002Fdashboard-search","A ready to use CommandPalette to add to your dashboard.",{"title":426,"path":427,"stem":428,"framework":16,"category":403,"description":429},"DashboardSearchButton","\u002Fdocs\u002Fcomponents\u002Fdashboard-search-button","docs\u002F2.components\u002Fdashboard-search-button","A pre-styled Button to open the DashboardSearch modal.",{"title":431,"path":432,"stem":433,"framework":16,"category":403,"description":434},"DashboardSidebar","\u002Fdocs\u002Fcomponents\u002Fdashboard-sidebar","docs\u002F2.components\u002Fdashboard-sidebar","A resizable and collapsible sidebar to display in a dashboard.",{"title":436,"path":437,"stem":438,"framework":16,"category":403,"description":439},"DashboardSidebarCollapse","\u002Fdocs\u002Fcomponents\u002Fdashboard-sidebar-collapse","docs\u002F2.components\u002Fdashboard-sidebar-collapse","A Button to collapse the sidebar on desktop.",{"title":441,"path":442,"stem":443,"framework":16,"category":403,"description":444},"DashboardSidebarToggle","\u002Fdocs\u002Fcomponents\u002Fdashboard-sidebar-toggle","docs\u002F2.components\u002Fdashboard-sidebar-toggle","A Button to toggle the sidebar on mobile.",{"title":446,"path":447,"stem":448,"framework":16,"category":403,"description":449},"DashboardToolbar","\u002Fdocs\u002Fcomponents\u002Fdashboard-toolbar","docs\u002F2.components\u002Fdashboard-toolbar","A toolbar to display under the navbar in a dashboard.",{"title":451,"path":452,"stem":453,"framework":16,"category":397,"description":454},"Drawer","\u002Fdocs\u002Fcomponents\u002Fdrawer","docs\u002F2.components\u002Fdrawer","A drawer that smoothly slides in & out of the screen.",{"title":456,"path":457,"stem":458,"framework":16,"category":397,"description":459},"DropdownMenu","\u002Fdocs\u002Fcomponents\u002Fdropdown-menu","docs\u002F2.components\u002Fdropdown-menu","A menu to display actions when clicking on an element.",{"title":461,"path":462,"stem":463,"framework":16,"category":464,"description":465},"Editor","\u002Fdocs\u002Fcomponents\u002Feditor","docs\u002F2.components\u002Feditor","editor","A rich text editor component based on TipTap with support for markdown, HTML, and JSON content types.",{"title":467,"path":468,"stem":469,"framework":16,"category":464,"description":470},"EditorDragHandle","\u002Fdocs\u002Fcomponents\u002Feditor-drag-handle","docs\u002F2.components\u002Feditor-drag-handle","A draggable handle for reordering and selecting blocks in the editor.",{"title":472,"path":473,"stem":474,"framework":16,"category":464,"description":475},"EditorEmojiMenu","\u002Fdocs\u002Fcomponents\u002Feditor-emoji-menu","docs\u002F2.components\u002Feditor-emoji-menu","An emoji picker menu that displays emoji suggestions when typing the : character in the editor.",{"title":477,"path":478,"stem":479,"framework":16,"category":464,"description":480},"EditorMentionMenu","\u002Fdocs\u002Fcomponents\u002Feditor-mention-menu","docs\u002F2.components\u002Feditor-mention-menu","A mention menu that displays user suggestions when typing a trigger character in the editor.",{"title":482,"path":483,"stem":484,"framework":16,"category":464,"description":485},"EditorSuggestionMenu","\u002Fdocs\u002Fcomponents\u002Feditor-suggestion-menu","docs\u002F2.components\u002Feditor-suggestion-menu","A command menu that displays formatting and action suggestions when typing the \u002F character in the editor.",{"title":487,"path":488,"stem":489,"framework":16,"category":464,"description":490},"EditorToolbar","\u002Fdocs\u002Fcomponents\u002Feditor-toolbar","docs\u002F2.components\u002Feditor-toolbar","A customizable toolbar for editor actions that can be displayed as fixed, bubble, or floating menu.",{"title":492,"path":493,"stem":494,"framework":16,"category":172,"description":495},"Empty","\u002Fdocs\u002Fcomponents\u002Fempty","docs\u002F2.components\u002Fempty","A component to display an empty state.",{"title":497,"path":498,"stem":499,"framework":16,"category":184,"description":500},"Error","\u002Fdocs\u002Fcomponents\u002Ferror","docs\u002F2.components\u002Ferror","A pre-built error component with NuxtError support.",{"title":502,"path":503,"stem":504,"framework":16,"category":178,"description":505},"FieldGroup","\u002Fdocs\u002Fcomponents\u002Ffield-group","docs\u002F2.components\u002Ffield-group","Group multiple button-like elements together.",{"title":507,"path":508,"stem":509,"framework":16,"category":309,"description":510},"FileUpload","\u002Fdocs\u002Fcomponents\u002Ffile-upload","docs\u002F2.components\u002Ffile-upload","An input element to upload files.",{"title":512,"path":513,"stem":514,"framework":16,"category":184,"description":515},"Footer","\u002Fdocs\u002Fcomponents\u002Ffooter","docs\u002F2.components\u002Ffooter","A responsive footer component.",{"title":517,"path":518,"stem":519,"framework":16,"category":226,"description":520},"FooterColumns","\u002Fdocs\u002Fcomponents\u002Ffooter-columns","docs\u002F2.components\u002Ffooter-columns","A list of links as columns to display in your Footer.",{"title":522,"path":523,"stem":524,"framework":16,"category":309,"description":525},"Form","\u002Fdocs\u002Fcomponents\u002Fform","docs\u002F2.components\u002Fform","A form component with built-in validation and submission handling.",{"title":527,"path":528,"stem":529,"framework":16,"category":309,"description":530},"FormField","\u002Fdocs\u002Fcomponents\u002Fform-field","docs\u002F2.components\u002Fform-field","A wrapper for form elements that provides validation and error handling.",{"title":532,"path":533,"stem":534,"framework":16,"category":184,"description":535},"Header","\u002Fdocs\u002Fcomponents\u002Fheader","docs\u002F2.components\u002Fheader","A responsive header component.",{"title":537,"path":538,"stem":539,"framework":16,"category":178,"description":540},"Icon","\u002Fdocs\u002Fcomponents\u002Ficon","docs\u002F2.components\u002Ficon","A component to display any icon from Iconify or another component.",{"title":542,"path":543,"stem":544,"framework":16,"category":309,"description":545},"Input","\u002Fdocs\u002Fcomponents\u002Finput","docs\u002F2.components\u002Finput","An input element to enter text.",{"title":547,"path":548,"stem":549,"framework":16,"category":309,"description":550},"InputDate","\u002Fdocs\u002Fcomponents\u002Finput-date","docs\u002F2.components\u002Finput-date","An input component for date selection.",{"title":552,"path":553,"stem":554,"framework":16,"category":309,"description":555},"InputMenu","\u002Fdocs\u002Fcomponents\u002Finput-menu","docs\u002F2.components\u002Finput-menu","An autocomplete input with real-time suggestions.",{"title":557,"path":558,"stem":559,"framework":16,"category":309,"description":560},"InputNumber","\u002Fdocs\u002Fcomponents\u002Finput-number","docs\u002F2.components\u002Finput-number","An input for numerical values with a customizable range.",{"title":562,"path":563,"stem":564,"framework":16,"category":309,"description":565},"InputTags","\u002Fdocs\u002Fcomponents\u002Finput-tags","docs\u002F2.components\u002Finput-tags","An input element that displays interactive tags.",{"title":567,"path":568,"stem":569,"framework":16,"category":309,"description":570},"InputTime","\u002Fdocs\u002Fcomponents\u002Finput-time","docs\u002F2.components\u002Finput-time","An input for selecting a time.",{"title":572,"path":573,"stem":574,"framework":16,"category":178,"description":575},"Kbd","\u002Fdocs\u002Fcomponents\u002Fkbd","docs\u002F2.components\u002Fkbd","A kbd element to display a keyboard key.",{"title":577,"path":578,"stem":579,"framework":16,"category":226,"description":580},"Link","\u002Fdocs\u002Fcomponents\u002Flink","docs\u002F2.components\u002Flink","A wrapper around \u003CNuxtLink> with extra props.",{"title":582,"path":583,"stem":584,"framework":16,"category":585,"description":586},"LocaleSelect","\u002Fdocs\u002Fcomponents\u002Flocale-select","docs\u002F2.components\u002Flocale-select","i18n","A Select to switch between locales.",{"title":588,"path":589,"stem":590,"framework":16,"category":184,"description":591},"Main","\u002Fdocs\u002Fcomponents\u002Fmain","docs\u002F2.components\u002Fmain","A main element that fills the available viewport height.",{"title":593,"path":594,"stem":595,"framework":16,"category":172,"description":596},"Marquee","\u002Fdocs\u002Fcomponents\u002Fmarquee","docs\u002F2.components\u002Fmarquee","A component to create infinite scrolling content.",{"title":598,"path":599,"stem":600,"framework":16,"category":397,"description":601},"Modal","\u002Fdocs\u002Fcomponents\u002Fmodal","docs\u002F2.components\u002Fmodal","A dialog window that can be used to display a message or request user input.",{"title":603,"path":604,"stem":605,"framework":16,"category":226,"description":606},"NavigationMenu","\u002Fdocs\u002Fcomponents\u002Fnavigation-menu","docs\u002F2.components\u002Fnavigation-menu","A list of links that can be displayed horizontally or vertically.",{"title":608,"path":609,"stem":610,"framework":16,"category":190,"description":611},"Page","\u002Fdocs\u002Fcomponents\u002Fpage","docs\u002F2.components\u002Fpage","A grid layout for your pages with left and right columns.",{"title":613,"path":614,"stem":615,"framework":16,"category":190,"description":616},"PageAnchors","\u002Fdocs\u002Fcomponents\u002Fpage-anchors","docs\u002F2.components\u002Fpage-anchors","A list of anchors to be displayed in the page.",{"title":618,"path":619,"stem":620,"framework":16,"category":190,"description":621},"PageAside","\u002Fdocs\u002Fcomponents\u002Fpage-aside","docs\u002F2.components\u002Fpage-aside","A sticky aside to display your page navigation.",{"title":623,"path":624,"stem":625,"framework":16,"category":190,"description":626},"PageBody","\u002Fdocs\u002Fcomponents\u002Fpage-body","docs\u002F2.components\u002Fpage-body","The main content of your page.",{"title":628,"path":629,"stem":630,"framework":16,"category":190,"description":631},"PageCard","\u002Fdocs\u002Fcomponents\u002Fpage-card","docs\u002F2.components\u002Fpage-card","A pre-styled card component that displays a title, description and optional link.",{"title":633,"path":634,"stem":635,"framework":16,"category":190,"description":636},"PageColumns","\u002Fdocs\u002Fcomponents\u002Fpage-columns","docs\u002F2.components\u002Fpage-columns","A responsive multi-column layout system for organizing content side-by-side.",{"title":638,"path":639,"stem":640,"framework":16,"category":190,"description":641},"PageCTA","\u002Fdocs\u002Fcomponents\u002Fpage-cta","docs\u002F2.components\u002Fpage-cta","A call to action section to display in your pages.",{"title":643,"path":644,"stem":645,"framework":16,"category":190,"description":646},"PageFeature","\u002Fdocs\u002Fcomponents\u002Fpage-feature","docs\u002F2.components\u002Fpage-feature","A component to showcase key features of your application.",{"title":648,"path":649,"stem":650,"framework":16,"category":190,"description":651},"PageGrid","\u002Fdocs\u002Fcomponents\u002Fpage-grid","docs\u002F2.components\u002Fpage-grid","A responsive grid system for displaying content in a flexible layout.",{"title":653,"path":654,"stem":655,"framework":16,"category":190,"description":656},"PageHeader","\u002Fdocs\u002Fcomponents\u002Fpage-header","docs\u002F2.components\u002Fpage-header","A responsive header for your pages.",{"title":658,"path":659,"stem":660,"framework":16,"category":190,"description":661},"PageHero","\u002Fdocs\u002Fcomponents\u002Fpage-hero","docs\u002F2.components\u002Fpage-hero","A responsive hero for your pages.",{"title":663,"path":664,"stem":665,"framework":16,"category":190,"description":666},"PageLinks","\u002Fdocs\u002Fcomponents\u002Fpage-links","docs\u002F2.components\u002Fpage-links","A list of links to be displayed in the page.",{"title":668,"path":669,"stem":670,"framework":16,"category":190,"description":671},"PageList","\u002Fdocs\u002Fcomponents\u002Fpage-list","docs\u002F2.components\u002Fpage-list","A vertical list layout for displaying content in a stacked format.",{"title":673,"path":674,"stem":675,"framework":16,"category":190,"description":676},"PageLogos","\u002Fdocs\u002Fcomponents\u002Fpage-logos","docs\u002F2.components\u002Fpage-logos","A list of logos or images to display on your pages.",{"title":678,"path":679,"stem":680,"framework":16,"category":190,"description":681},"PageSection","\u002Fdocs\u002Fcomponents\u002Fpage-section","docs\u002F2.components\u002Fpage-section","A responsive section for your pages.",{"title":683,"path":684,"stem":685,"framework":16,"category":226,"description":686},"Pagination","\u002Fdocs\u002Fcomponents\u002Fpagination","docs\u002F2.components\u002Fpagination","A list of buttons or links to navigate through pages.",{"title":688,"path":689,"stem":690,"framework":16,"category":309,"description":691},"PinInput","\u002Fdocs\u002Fcomponents\u002Fpin-input","docs\u002F2.components\u002Fpin-input","An input element to enter a pin.",{"title":693,"path":694,"stem":695,"framework":16,"category":397,"description":696},"Popover","\u002Fdocs\u002Fcomponents\u002Fpopover","docs\u002F2.components\u002Fpopover","A non-modal dialog that floats around a trigger element.",{"title":698,"path":699,"stem":700,"framework":16,"category":190,"description":701},"PricingPlan","\u002Fdocs\u002Fcomponents\u002Fpricing-plan","docs\u002F2.components\u002Fpricing-plan","A customizable pricing plan to display in a pricing page.",{"title":703,"path":704,"stem":705,"framework":16,"category":190,"description":706},"PricingPlans","\u002Fdocs\u002Fcomponents\u002Fpricing-plans","docs\u002F2.components\u002Fpricing-plans","Display a list of pricing plans in a responsive grid layout.",{"title":708,"path":709,"stem":710,"framework":16,"category":190,"description":711},"PricingTable","\u002Fdocs\u002Fcomponents\u002Fpricing-table","docs\u002F2.components\u002Fpricing-table","A responsive pricing table component that displays tiered pricing plans with feature comparisons.",{"title":713,"path":714,"stem":715,"framework":16,"category":178,"description":716},"Progress","\u002Fdocs\u002Fcomponents\u002Fprogress","docs\u002F2.components\u002Fprogress","An indicator showing the progress of a task.",{"title":718,"path":719,"stem":720,"framework":16,"category":309,"description":721},"RadioGroup","\u002Fdocs\u002Fcomponents\u002Fradio-group","docs\u002F2.components\u002Fradio-group","A set of radio buttons to select a single option from a list.",{"title":723,"path":724,"stem":725,"framework":16,"category":172,"description":726},"ScrollArea","\u002Fdocs\u002Fcomponents\u002Fscroll-area","docs\u002F2.components\u002Fscroll-area","A flexible scroll container with virtualization support.",{"title":728,"path":729,"stem":730,"framework":16,"category":309,"description":731},"Select","\u002Fdocs\u002Fcomponents\u002Fselect","docs\u002F2.components\u002Fselect","A select element to choose from a list of options.",{"title":733,"path":734,"stem":735,"framework":16,"category":309,"description":736},"SelectMenu","\u002Fdocs\u002Fcomponents\u002Fselect-menu","docs\u002F2.components\u002Fselect-menu","An advanced searchable select element.",{"title":738,"path":739,"stem":740,"framework":16,"category":178,"description":741},"Separator","\u002Fdocs\u002Fcomponents\u002Fseparator","docs\u002F2.components\u002Fseparator","Separates content horizontally or vertically.",{"title":743,"path":744,"stem":745,"framework":16,"category":184,"description":746,"badge":294},"Sidebar","\u002Fdocs\u002Fcomponents\u002Fsidebar","docs\u002F2.components\u002Fsidebar","A collapsible sidebar with multiple visual variants.",{"title":748,"path":749,"stem":750,"framework":16,"category":178,"description":751},"Skeleton","\u002Fdocs\u002Fcomponents\u002Fskeleton","docs\u002F2.components\u002Fskeleton","A placeholder to show while content is loading.",{"title":753,"path":754,"stem":755,"framework":16,"category":397,"description":756},"Slideover","\u002Fdocs\u002Fcomponents\u002Fslideover","docs\u002F2.components\u002Fslideover","A dialog that slides in from any side of the screen.",{"title":758,"path":759,"stem":760,"framework":16,"category":309,"description":761},"Slider","\u002Fdocs\u002Fcomponents\u002Fslider","docs\u002F2.components\u002Fslider","An input to select a numeric value within a range.",{"title":763,"path":764,"stem":765,"framework":16,"category":226,"description":766},"Stepper","\u002Fdocs\u002Fcomponents\u002Fstepper","docs\u002F2.components\u002Fstepper","A set of steps that are used to indicate progress through a multi-step process.",{"title":768,"path":769,"stem":770,"framework":16,"category":309,"description":771},"Switch","\u002Fdocs\u002Fcomponents\u002Fswitch","docs\u002F2.components\u002Fswitch","A control that toggles between two states.",{"title":773,"path":774,"stem":775,"framework":16,"category":172,"description":776},"Table","\u002Fdocs\u002Fcomponents\u002Ftable","docs\u002F2.components\u002Ftable","A responsive table element to display data in rows and columns.",{"title":778,"path":779,"stem":780,"framework":16,"category":226,"description":781},"Tabs","\u002Fdocs\u002Fcomponents\u002Ftabs","docs\u002F2.components\u002Ftabs","A set of tab panels that are displayed one at a time.",{"title":783,"path":784,"stem":785,"framework":16,"category":309,"description":786},"Textarea","\u002Fdocs\u002Fcomponents\u002Ftextarea","docs\u002F2.components\u002Ftextarea","A textarea element to input multi-line text.",{"title":54,"path":788,"stem":789,"framework":16,"category":184,"description":790},"\u002Fdocs\u002Fcomponents\u002Ftheme","docs\u002F2.components\u002Ftheme","A headless component to theme child components.",{"title":792,"path":793,"stem":794,"framework":16,"category":172,"description":795},"Timeline","\u002Fdocs\u002Fcomponents\u002Ftimeline","docs\u002F2.components\u002Ftimeline","A component that displays a sequence of events with dates, titles, icons or avatars.",{"title":797,"path":798,"stem":799,"framework":16,"category":397,"description":800},"Toast","\u002Fdocs\u002Fcomponents\u002Ftoast","docs\u002F2.components\u002Ftoast","A succinct message to provide information or feedback to the user.",{"title":802,"path":803,"stem":804,"framework":16,"category":397,"description":805},"Tooltip","\u002Fdocs\u002Fcomponents\u002Ftooltip","docs\u002F2.components\u002Ftooltip","A popup that reveals information when hovering over an element.",{"title":807,"path":808,"stem":809,"framework":16,"category":172,"description":810},"Tree","\u002Fdocs\u002Fcomponents\u002Ftree","docs\u002F2.components\u002Ftree","A tree view component to display and interact with hierarchical data structures.",{"title":812,"path":813,"stem":814,"framework":16,"category":172,"description":815},"User","\u002Fdocs\u002Fcomponents\u002Fuser","docs\u002F2.components\u002Fuser","Display user information with name, description and avatar.",{"title":817,"framework":16,"category":16,"description":16,"icon":818,"path":819,"stem":820,"children":821,"page":36},"Composables","i-lucide-square-function","\u002Fdocs\u002Fcomposables","docs\u002F3.composables",[822,827,832,837,842,847,852],{"title":823,"path":824,"stem":825,"framework":16,"category":16,"description":826},"defineLocale","\u002Fdocs\u002Fcomposables\u002Fdefine-locale","docs\u002F3.composables\u002Fdefine-locale","A utility to create a custom locale for your app.",{"title":828,"path":829,"stem":830,"framework":16,"category":16,"description":831},"defineShortcuts","\u002Fdocs\u002Fcomposables\u002Fdefine-shortcuts","docs\u002F3.composables\u002Fdefine-shortcuts","A composable to define keyboard shortcuts in your app.",{"title":833,"path":834,"stem":835,"framework":16,"category":16,"description":836},"extendLocale","\u002Fdocs\u002Fcomposables\u002Fextend-locale","docs\u002F3.composables\u002Fextend-locale","A utility to extend an existing locale with custom translations.",{"title":838,"path":839,"stem":840,"framework":16,"category":16,"description":841},"extractShortcuts","\u002Fdocs\u002Fcomposables\u002Fextract-shortcuts","docs\u002F3.composables\u002Fextract-shortcuts","A utility to extract keyboard shortcuts from menu items.",{"title":843,"path":844,"stem":845,"framework":16,"category":16,"description":846},"useOverlay","\u002Fdocs\u002Fcomposables\u002Fuse-overlay","docs\u002F3.composables\u002Fuse-overlay","A composable to programmatically control overlays.",{"title":848,"path":849,"stem":850,"framework":16,"category":16,"description":851,"badge":294},"useScrollShadow","\u002Fdocs\u002Fcomposables\u002Fuse-scroll-shadow","docs\u002F3.composables\u002Fuse-scroll-shadow","A composable to apply scroll shadow effects on any scrollable element.",{"title":853,"path":854,"stem":855,"framework":16,"category":16,"description":856},"useToast","\u002Fdocs\u002Fcomposables\u002Fuse-toast","docs\u002F3.composables\u002Fuse-toast","A composable to display toast notifications in your app.",{"title":858,"path":859,"stem":860,"children":861,"framework":16,"category":16,"description":16,"icon":963},"Typography","\u002Fdocs\u002Ftypography","docs\u002F4.typography\u002F1.index",[862,864,869,874,879,884,889,893,898,902,907,912,917,922,927,931,936,940,944,948,954,959],{"title":15,"path":859,"stem":860,"framework":16,"category":16,"description":863},"Beautiful typography components and utilities to style your content with Nuxt UI.",{"title":865,"path":866,"stem":867,"framework":16,"category":16,"description":868},"Headers and text","\u002Fdocs\u002Ftypography\u002Fheaders-and-text","docs\u002F4.typography\u002F2.headers-and-text","Beautifully styled headings, paragraphs, text formatting, and links for optimal readability.",{"title":870,"path":871,"stem":872,"framework":16,"category":16,"description":873},"Lists and tables","\u002Fdocs\u002Ftypography\u002Flists-and-tables","docs\u002F4.typography\u002F3.lists-and-tables","Organize information with styled lists and responsive tables for clear, consistent readability.",{"title":875,"path":876,"stem":877,"framework":16,"category":16,"description":878},"Images and embeds","\u002Fdocs\u002Ftypography\u002Fimages-and-embeds","docs\u002F4.typography\u002F4.images-and-embeds","Responsive images, videos, and rich media embeds to enhance and illustrate your documentation.",{"title":880,"path":881,"stem":882,"framework":16,"category":16,"description":883},"Code","\u002Fdocs\u002Ftypography\u002Fcode","docs\u002F4.typography\u002F5.code","Display inline code and syntax-highlighted code blocks with copy-to-clipboard support.",{"title":169,"path":885,"stem":886,"framework":16,"category":887,"description":888},"\u002Fdocs\u002Ftypography\u002Faccordion","docs\u002F4.typography\u002Faccordion","components","Create expandable content sections for better information organization.",{"title":203,"path":890,"stem":891,"framework":16,"category":887,"description":892},"\u002Fdocs\u002Ftypography\u002Fbadge","docs\u002F4.typography\u002Fbadge","Display version numbers, status labels, and tags within your content.",{"title":894,"path":895,"stem":896,"framework":16,"category":887,"description":897},"Callout","\u002Fdocs\u002Ftypography\u002Fcallout","docs\u002F4.typography\u002Fcallout","Highlight important information with eye-catching colored boxes and icons.",{"title":239,"path":899,"stem":900,"framework":16,"category":887,"description":901},"\u002Fdocs\u002Ftypography\u002Fcard","docs\u002F4.typography\u002Fcard","Create highlighted content blocks with optional links and navigation.",{"title":903,"path":904,"stem":905,"framework":16,"category":887,"description":906},"CardGroup","\u002Fdocs\u002Ftypography\u002Fcard-group","docs\u002F4.typography\u002Fcard-group","Organize multiple cards in responsive grid layouts for better content presentation.",{"title":908,"path":909,"stem":910,"framework":16,"category":887,"description":911},"CodeCollapse","\u002Fdocs\u002Ftypography\u002Fcode-collapse","docs\u002F4.typography\u002Fcode-collapse","Make long code blocks collapsible to save space and improve readability.",{"title":913,"path":914,"stem":915,"framework":16,"category":887,"description":916},"CodeGroup","\u002Fdocs\u002Ftypography\u002Fcode-group","docs\u002F4.typography\u002Fcode-group","Group multiple code examples in tabbed interfaces for easy comparison.",{"title":918,"path":919,"stem":920,"framework":16,"category":887,"description":921},"CodePreview","\u002Fdocs\u002Ftypography\u002Fcode-preview","docs\u002F4.typography\u002Fcode-preview","Display code examples with a preview and their source for clearer documentation.",{"title":923,"path":924,"stem":925,"framework":16,"category":887,"description":926},"CodeTree","\u002Fdocs\u002Ftypography\u002Fcode-tree","docs\u002F4.typography\u002Fcode-tree","Visualize file and folder structures with syntax-highlighted code.",{"title":322,"path":928,"stem":929,"framework":16,"category":887,"description":930},"\u002Fdocs\u002Ftypography\u002Fcollapsible","docs\u002F4.typography\u002Fcollapsible","Toggle content visibility with smooth expand and collapse animations.",{"title":932,"path":933,"stem":934,"framework":16,"category":887,"description":935},"Field","\u002Fdocs\u002Ftypography\u002Ffield","docs\u002F4.typography\u002Ffield","Document API parameters, props, and configuration options clearly.",{"title":502,"path":937,"stem":938,"framework":16,"category":887,"description":939},"\u002Fdocs\u002Ftypography\u002Ffield-group","docs\u002F4.typography\u002Ffield-group","Group related fields together for comprehensive API documentation.",{"title":537,"path":941,"stem":942,"framework":16,"category":887,"description":943},"\u002Fdocs\u002Ftypography\u002Ficon","docs\u002F4.typography\u002Ficon","Display icons from popular icon libraries to enhance your content.",{"title":572,"path":945,"stem":946,"framework":16,"category":887,"description":947},"\u002Fdocs\u002Ftypography\u002Fkbd","docs\u002F4.typography\u002Fkbd","Display keyboard shortcuts and key combinations with proper styling.",{"title":949,"path":950,"stem":951,"framework":16,"category":887,"description":952,"badge":953},"Prompt","\u002Fdocs\u002Ftypography\u002Fprompt","docs\u002F4.typography\u002Fprompt","Display pre-built AI prompts with one-click copy and IDE integration.","Soon",{"title":955,"path":956,"stem":957,"framework":16,"category":887,"description":958},"Steps","\u002Fdocs\u002Ftypography\u002Fsteps","docs\u002F4.typography\u002Fsteps","Transform headings into numbered step-by-step guides and tutorials.",{"title":778,"path":960,"stem":961,"framework":16,"category":887,"description":962},"\u002Fdocs\u002Ftypography\u002Ftabs","docs\u002F4.typography\u002Ftabs","Organize related content in interactive tabbed interfaces.","i-lucide-square-pilcrow",{"id":965,"title":966,"body":16,"description":967,"extension":968,"hero":969,"meta":971,"navigation":36,"path":972,"seo":973,"stem":974,"__hash__":975},"blog\u002Fblog.yml","Blog","Tutorials, guides, and insights to help you build beautiful applications with Nuxt UI.","yml",{"title":970,"description":967},"Nuxt [UI]{.text-primary} Blog",{},"\u002Fblog",{"title":966,"description":967},"blog","ESl67YJxs4hhxlk_OHymZ1sSoeclVge2lYINtoN5zxg",[977],{"id":978,"title":979,"authors":980,"body":991,"date":12600,"description":12601,"extension":12602,"image":12603,"meta":12604,"navigation":36,"path":12606,"seo":12607,"stem":12608,"__hash__":12609},"posts\u002Fblog\u002Fhow-to-build-an-ai-chat.md","Build an AI Chatbot with Nuxt, Nuxt UI, and AI SDK",[981,986],{"name":982,"avatar":983,"to":985},"Hugo Richard",{"src":984},"https:\u002F\u002Fgithub.com\u002Fhugorcd.png","https:\u002F\u002Fx.com\u002Fhugorcd",{"name":987,"avatar":988,"to":990},"Benjamin Canac",{"src":989},"https:\u002F\u002Fgithub.com\u002Fbenjamincanac.png","https:\u002F\u002Fx.com\u002Fbenjamincanac",{"type":992,"value":993,"toc":12566},"minimark",[994,998,1003,1006,1041,1067,1071,1074,1088,1092,1095,1132,1137,1140,1293,1297,1304,1468,1480,1483,1522,1526,1533,1628,1635,1652,1661,1665,1679,2416,2419,2437,2447,2451,2459,2463,2474,2843,2847,2874,4612,4615,4620,4627,4632,4643,4648,4657,4675,4680,4695,4708,4712,4715,5090,5094,5109,5113,5121,5694,5701,5726,5730,5758,5955,5962,5965,6098,6102,6120,7538,7541,7546,7557,7595,7610,7615,7622,7636,7641,7668,7673,7680,7691,7695,7698,7702,7705,7858,7862,7887,8365,8369,8908,8912,10221,10230,10234,10241,10245,10255,10513,10517,10525,10772,10776,10779,12170,12174,12177,12182,12191,12196,12205,12408,12412,12415,12430,12433,12448,12463,12472,12476,12479,12510,12513,12518,12559,12562],[995,996,997],"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.",[999,1000,1002],"h2",{"id":1001},"what-were-building","What we're building",[995,1004,1005],{},"By the end of this tutorial, you'll have a fully functional AI chatbot with:",[1007,1008,1009,1017,1023,1029,1035],"ul",{},[1010,1011,1012,1016],"li",{},[1013,1014,1015],"strong",{},"Streaming responses"," that appear in real-time as the AI generates them",[1010,1018,1019,1022],{},[1013,1020,1021],{},"A beautiful chat interface"," built with Nuxt UI's purpose-built chat components",[1010,1024,1025,1028],{},[1013,1026,1027],{},"Markdown rendering"," for rich AI responses with code highlighting",[1010,1030,1031,1034],{},[1013,1032,1033],{},"Multi-model support"," allowing users to switch between OpenAI, Anthropic, and Google models",[1010,1036,1037,1040],{},[1013,1038,1039],{},"Server-side AI integration"," using Nitro API routes and the AI SDK",[1042,1043,1045],"callout",{"icon":1044},"i-simple-icons-github",[995,1046,1047,1048,1058,1059,1066],{},"Check out the ",[1049,1050,1054],"a",{"href":1051,"rel":1052},"https:\u002F\u002Fgithub.com\u002Fnuxt-ui-templates\u002Fchat",[1053],"nofollow",[1055,1056,1057],"code",{},"Nuxt"," and ",[1049,1060,1063],{"href":1061,"rel":1062},"https:\u002F\u002Fgithub.com\u002Fnuxt-ui-templates\u002Fchat-vue",[1053],[1055,1064,1065],{},"Vue"," AI Chat templates on GitHub for production-ready implementations with authentication, database persistence, and more.",[999,1068,1070],{"id":1069},"prerequisites","Prerequisites",[995,1072,1073],{},"Before we start, make sure you have:",[1007,1075,1076,1079],{},[1010,1077,1078],{},"Node.js 20+ installed",[1010,1080,1081,1082,1087],{},"A ",[1049,1083,1086],{"href":1084,"rel":1085},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fai-gateway",[1053],"Vercel AI Gateway"," API key (provides access to multiple AI providers through a single endpoint)",[999,1089,1091],{"id":1090},"project-setup","Project setup",[995,1093,1094],{},"Start by creating a new Nuxt project:",[1096,1097,1102],"pre",{"className":1098,"code":1099,"language":1100,"meta":1101,"style":1101},"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","",[1055,1103,1104,1123],{"__ignoreMap":1101},[1105,1106,1109,1113,1117,1120],"span",{"class":1107,"line":1108},"line",1,[1105,1110,1112],{"class":1111},"sBMFI","npx",[1105,1114,1116],{"class":1115},"sfazB"," nuxi@latest",[1105,1118,1119],{"class":1115}," init",[1105,1121,1122],{"class":1115}," nuxt-ai-chat\n",[1105,1124,1126,1130],{"class":1107,"line":1125},2,[1105,1127,1129],{"class":1128},"s2Zo4","cd",[1105,1131,1122],{"class":1115},[1133,1134,1136],"h3",{"id":1135},"installing-dependencies","Installing dependencies",[995,1138,1139],{},"Install Nuxt UI and the AI-specific dependencies:",[1141,1142,1144,1190,1224,1259],"code-group",{"sync":1143},"pm",[1096,1145,1148],{"className":1098,"code":1146,"filename":1147,"language":1100,"meta":1101,"style":1101},"pnpm add @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","pnpm",[1055,1149,1150],{"__ignoreMap":1101},[1105,1151,1152,1154,1157,1160,1163,1166,1169,1172,1175,1178,1181,1184,1187],{"class":1107,"line":1108},[1105,1153,1147],{"class":1111},[1105,1155,1156],{"class":1115}," add",[1105,1158,1159],{"class":1115}," @nuxt\u002Fui",[1105,1161,1162],{"class":1115}," tailwindcss",[1105,1164,1165],{"class":1115}," @comark\u002Fnuxt",[1105,1167,1168],{"class":1115}," @shikijs\u002Flangs",[1105,1170,1171],{"class":1115}," @nuxthub\u002Fcore",[1105,1173,1174],{"class":1115}," drizzle-orm",[1105,1176,1177],{"class":1115}," drizzle-kit",[1105,1179,1180],{"class":1115}," @libsql\u002Fclient",[1105,1182,1183],{"class":1115}," ai",[1105,1185,1186],{"class":1115}," @ai-sdk\u002Fvue",[1105,1188,1189],{"class":1115}," zod\n",[1096,1191,1194],{"className":1098,"code":1192,"filename":1193,"language":1100,"meta":1101,"style":1101},"yarn add @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","yarn",[1055,1195,1196],{"__ignoreMap":1101},[1105,1197,1198,1200,1202,1204,1206,1208,1210,1212,1214,1216,1218,1220,1222],{"class":1107,"line":1108},[1105,1199,1193],{"class":1111},[1105,1201,1156],{"class":1115},[1105,1203,1159],{"class":1115},[1105,1205,1162],{"class":1115},[1105,1207,1165],{"class":1115},[1105,1209,1168],{"class":1115},[1105,1211,1171],{"class":1115},[1105,1213,1174],{"class":1115},[1105,1215,1177],{"class":1115},[1105,1217,1180],{"class":1115},[1105,1219,1183],{"class":1115},[1105,1221,1186],{"class":1115},[1105,1223,1189],{"class":1115},[1096,1225,1228],{"className":1098,"code":1226,"filename":1227,"language":1100,"meta":1101,"style":1101},"npm install @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","npm",[1055,1229,1230],{"__ignoreMap":1101},[1105,1231,1232,1234,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257],{"class":1107,"line":1108},[1105,1233,1227],{"class":1111},[1105,1235,1236],{"class":1115}," install",[1105,1238,1159],{"class":1115},[1105,1240,1162],{"class":1115},[1105,1242,1165],{"class":1115},[1105,1244,1168],{"class":1115},[1105,1246,1171],{"class":1115},[1105,1248,1174],{"class":1115},[1105,1250,1177],{"class":1115},[1105,1252,1180],{"class":1115},[1105,1254,1183],{"class":1115},[1105,1256,1186],{"class":1115},[1105,1258,1189],{"class":1115},[1096,1260,1263],{"className":1098,"code":1261,"filename":1262,"language":1100,"meta":1101,"style":1101},"bun add @nuxt\u002Fui tailwindcss @comark\u002Fnuxt @shikijs\u002Flangs @nuxthub\u002Fcore drizzle-orm drizzle-kit @libsql\u002Fclient ai @ai-sdk\u002Fvue zod\n","bun",[1055,1264,1265],{"__ignoreMap":1101},[1105,1266,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291],{"class":1107,"line":1108},[1105,1268,1262],{"class":1111},[1105,1270,1156],{"class":1115},[1105,1272,1159],{"class":1115},[1105,1274,1162],{"class":1115},[1105,1276,1165],{"class":1115},[1105,1278,1168],{"class":1115},[1105,1280,1171],{"class":1115},[1105,1282,1174],{"class":1115},[1105,1284,1177],{"class":1115},[1105,1286,1180],{"class":1115},[1105,1288,1183],{"class":1115},[1105,1290,1186],{"class":1115},[1105,1292,1189],{"class":1115},[1133,1294,1296],{"id":1295},"configuration","Configuration",[995,1298,1299,1300,1303],{},"Update your ",[1055,1301,1302],{},"nuxt.config.ts"," to register the modules:",[1305,1306,1307],"code-tree-intersection",{},[1096,1308,1312],{"className":1309,"code":1310,"filename":1302,"language":1311,"meta":1101,"style":1101},"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",[1055,1313,1314,1334,1346,1361,1373,1384,1392,1398,1409,1425,1431,1436,1459],{"__ignoreMap":1101},[1105,1315,1316,1320,1323,1326,1330],{"class":1107,"line":1108},[1105,1317,1319],{"class":1318},"s7zQu","export",[1105,1321,1322],{"class":1318}," default",[1105,1324,1325],{"class":1128}," defineNuxtConfig",[1105,1327,1329],{"class":1328},"sTEyZ","(",[1105,1331,1333],{"class":1332},"sMK4o","{\n",[1105,1335,1336,1340,1343],{"class":1107,"line":1125},[1105,1337,1339],{"class":1338},"swJcz","  modules",[1105,1341,1342],{"class":1332},":",[1105,1344,1345],{"class":1328}," [\n",[1105,1347,1349,1352,1355,1358],{"class":1107,"line":1348},3,[1105,1350,1351],{"class":1332},"    '",[1105,1353,1354],{"class":1115},"@nuxt\u002Fui",[1105,1356,1357],{"class":1332},"'",[1105,1359,1360],{"class":1332},",\n",[1105,1362,1364,1366,1369,1371],{"class":1107,"line":1363},4,[1105,1365,1351],{"class":1332},[1105,1367,1368],{"class":1115},"@comark\u002Fnuxt",[1105,1370,1357],{"class":1332},[1105,1372,1360],{"class":1332},[1105,1374,1376,1378,1381],{"class":1107,"line":1375},5,[1105,1377,1351],{"class":1332},[1105,1379,1380],{"class":1115},"@nuxthub\u002Fcore",[1105,1382,1383],{"class":1332},"'\n",[1105,1385,1387,1390],{"class":1107,"line":1386},6,[1105,1388,1389],{"class":1328},"  ]",[1105,1391,1360],{"class":1332},[1105,1393,1395],{"class":1107,"line":1394},7,[1105,1396,1397],{"emptyLinePlaceholder":21},"\n",[1105,1399,1401,1404,1406],{"class":1107,"line":1400},8,[1105,1402,1403],{"class":1338},"  hub",[1105,1405,1342],{"class":1332},[1105,1407,1408],{"class":1332}," {\n",[1105,1410,1412,1415,1417,1420,1423],{"class":1107,"line":1411},9,[1105,1413,1414],{"class":1338},"    db",[1105,1416,1342],{"class":1332},[1105,1418,1419],{"class":1332}," '",[1105,1421,1422],{"class":1115},"sqlite",[1105,1424,1383],{"class":1332},[1105,1426,1428],{"class":1107,"line":1427},10,[1105,1429,1430],{"class":1332},"  },\n",[1105,1432,1434],{"class":1107,"line":1433},11,[1105,1435,1397],{"emptyLinePlaceholder":21},[1105,1437,1439,1442,1444,1447,1449,1452,1454,1457],{"class":1107,"line":1438},12,[1105,1440,1441],{"class":1338},"  css",[1105,1443,1342],{"class":1332},[1105,1445,1446],{"class":1328}," [",[1105,1448,1357],{"class":1332},[1105,1450,1451],{"class":1115},"~\u002Fassets\u002Fcss\u002Fmain.css",[1105,1453,1357],{"class":1332},[1105,1455,1456],{"class":1328},"]",[1105,1458,1360],{"class":1332},[1105,1460,1462,1465],{"class":1107,"line":1461},13,[1105,1463,1464],{"class":1332},"}",[1105,1466,1467],{"class":1328},")\n",[1469,1470,1471],"note",{"to":859},[995,1472,1473,1475,1476,1479],{},[1055,1474,1368],{}," automatically enables Nuxt UI's ",[1049,1477,1478],{"href":859},"prose components",", so Markdown rendered by Comark is styled to match your theme.",[995,1481,1482],{},"Create the main CSS file to import Tailwind CSS and Nuxt UI:",[1305,1484,1485],{},[1096,1486,1491],{"className":1487,"code":1488,"filename":1489,"language":1490,"meta":1101,"style":1101},"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",[1055,1492,1493,1510],{"__ignoreMap":1101},[1105,1494,1495,1498,1501,1504,1507],{"class":1107,"line":1108},[1105,1496,1497],{"class":1318},"@import",[1105,1499,1500],{"class":1332}," \"",[1105,1502,1503],{"class":1115},"tailwindcss",[1105,1505,1506],{"class":1332},"\"",[1105,1508,1509],{"class":1332},";\n",[1105,1511,1512,1514,1516,1518,1520],{"class":1107,"line":1125},[1105,1513,1497],{"class":1318},[1105,1515,1500],{"class":1332},[1105,1517,1354],{"class":1115},[1105,1519,1506],{"class":1332},[1105,1521,1509],{"class":1332},[1133,1523,1525],{"id":1524},"setting-up-the-app","Setting up the app",[995,1527,1528,1529,1532],{},"Nuxt UI requires wrapping your app with ",[1055,1530,1531],{},"UApp"," for modals, toasts, and overlays to work properly:",[1305,1534,1535],{},[1096,1536,1541],{"className":1537,"code":1538,"filename":1539,"highlights":1540,"language":34,"meta":1101,"style":1101},"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",[1125,1386],[1055,1542,1543,1554,1565,1589,1600,1609,1619],{"__ignoreMap":1101},[1105,1544,1545,1548,1551],{"class":1107,"line":1108},[1105,1546,1547],{"class":1332},"\u003C",[1105,1549,1550],{"class":1338},"template",[1105,1552,1553],{"class":1332},">\n",[1105,1555,1558,1561,1563],{"class":1556,"line":1125},[1107,1557],"highlight",[1105,1559,1560],{"class":1332},"  \u003C",[1105,1562,1531],{"class":1338},[1105,1564,1553],{"class":1332},[1105,1566,1567,1570,1573,1577,1580,1582,1585,1587],{"class":1107,"line":1348},[1105,1568,1569],{"class":1332},"    \u003C",[1105,1571,1572],{"class":1338},"UDashboardGroup",[1105,1574,1576],{"class":1575},"spNyl"," unit",[1105,1578,1579],{"class":1332},"=",[1105,1581,1506],{"class":1332},[1105,1583,1584],{"class":1115},"rem",[1105,1586,1506],{"class":1332},[1105,1588,1553],{"class":1332},[1105,1590,1591,1594,1597],{"class":1107,"line":1363},[1105,1592,1593],{"class":1332},"      \u003C",[1105,1595,1596],{"class":1338},"NuxtPage",[1105,1598,1599],{"class":1332}," \u002F>\n",[1105,1601,1602,1605,1607],{"class":1107,"line":1375},[1105,1603,1604],{"class":1332},"    \u003C\u002F",[1105,1606,1572],{"class":1338},[1105,1608,1553],{"class":1332},[1105,1610,1612,1615,1617],{"class":1611,"line":1386},[1107,1557],[1105,1613,1614],{"class":1332},"  \u003C\u002F",[1105,1616,1531],{"class":1338},[1105,1618,1553],{"class":1332},[1105,1620,1621,1624,1626],{"class":1107,"line":1394},[1105,1622,1623],{"class":1332},"\u003C\u002F",[1105,1625,1550],{"class":1338},[1105,1627,1553],{"class":1332},[995,1629,1630,1631,1634],{},"Create a ",[1055,1632,1633],{},".env"," file with your AI Gateway API key:",[1305,1636,1637],{},[1096,1638,1640],{"className":1098,"code":1639,"filename":1633,"language":1100,"meta":1101,"style":1101},"AI_GATEWAY_API_KEY=your-api-key-here\n",[1055,1641,1642],{"__ignoreMap":1101},[1105,1643,1644,1647,1649],{"class":1107,"line":1108},[1105,1645,1646],{"class":1328},"AI_GATEWAY_API_KEY",[1105,1648,1579],{"class":1332},[1105,1650,1651],{"class":1115},"your-api-key-here\n",[1469,1653,1654],{},[995,1655,1656,1657,1660],{},"With ",[1049,1658,1086],{"href":1084,"rel":1659},[1053],", 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.",[1133,1662,1664],{"id":1663},"setting-up-the-database","Setting up the database",[995,1666,1667,1672,1673,1678],{},[1049,1668,1671],{"href":1669,"rel":1670},"https:\u002F\u002Fhub.nuxt.com",[1053],"NuxtHub"," provides a zero-config database powered by ",[1049,1674,1677],{"href":1675,"rel":1676},"https:\u002F\u002Form.drizzle.team",[1053],"Drizzle ORM",". Here is the schema for the chat application:",[1305,1680,1681],{},[1682,1683,1684],"code-collapse",{},[1096,1685,1688],{"className":1309,"code":1686,"filename":1687,"language":1311,"meta":1101,"style":1101},"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",[1055,1689,1690,1730,1750,1754,1781,1826,1839,1896,1902,1906,1941,1953,1960,1964,1991,2037,2104,2174,2214,2265,2278,2308,2314,2319,2351,2367,2385,2401,2409],{"__ignoreMap":1101},[1105,1691,1692,1695,1698,1701,1704,1707,1709,1712,1714,1717,1720,1723,1725,1728],{"class":1107,"line":1108},[1105,1693,1694],{"class":1318},"import",[1105,1696,1697],{"class":1332}," {",[1105,1699,1700],{"class":1328}," sqliteTable",[1105,1702,1703],{"class":1332},",",[1105,1705,1706],{"class":1328}," text",[1105,1708,1703],{"class":1332},[1105,1710,1711],{"class":1328}," integer",[1105,1713,1703],{"class":1332},[1105,1715,1716],{"class":1328}," index",[1105,1718,1719],{"class":1332}," }",[1105,1721,1722],{"class":1318}," from",[1105,1724,1419],{"class":1332},[1105,1726,1727],{"class":1115},"drizzle-orm\u002Fsqlite-core",[1105,1729,1383],{"class":1332},[1105,1731,1732,1734,1736,1739,1741,1743,1745,1748],{"class":1107,"line":1125},[1105,1733,1694],{"class":1318},[1105,1735,1697],{"class":1332},[1105,1737,1738],{"class":1328}," relations",[1105,1740,1719],{"class":1332},[1105,1742,1722],{"class":1318},[1105,1744,1419],{"class":1332},[1105,1746,1747],{"class":1115},"drizzle-orm",[1105,1749,1383],{"class":1332},[1105,1751,1752],{"class":1107,"line":1348},[1105,1753,1397],{"emptyLinePlaceholder":21},[1105,1755,1756,1758,1761,1764,1766,1768,1770,1772,1775,1777,1779],{"class":1107,"line":1363},[1105,1757,1319],{"class":1318},[1105,1759,1760],{"class":1575}," const",[1105,1762,1763],{"class":1328}," chats ",[1105,1765,1579],{"class":1332},[1105,1767,1700],{"class":1128},[1105,1769,1329],{"class":1328},[1105,1771,1357],{"class":1332},[1105,1773,1774],{"class":1115},"chats",[1105,1776,1357],{"class":1332},[1105,1778,1703],{"class":1332},[1105,1780,1408],{"class":1332},[1105,1782,1783,1786,1788,1790,1793,1796,1799,1801,1803,1806,1808,1810,1813,1816,1818,1821,1824],{"class":1107,"line":1375},[1105,1784,1785],{"class":1338},"  id",[1105,1787,1342],{"class":1332},[1105,1789,1706],{"class":1128},[1105,1791,1792],{"class":1328},"()",[1105,1794,1795],{"class":1332},".",[1105,1797,1798],{"class":1128},"primaryKey",[1105,1800,1792],{"class":1328},[1105,1802,1795],{"class":1332},[1105,1804,1805],{"class":1128},"$defaultFn",[1105,1807,1329],{"class":1328},[1105,1809,1792],{"class":1332},[1105,1811,1812],{"class":1575}," =>",[1105,1814,1815],{"class":1328}," crypto",[1105,1817,1795],{"class":1332},[1105,1819,1820],{"class":1128},"randomUUID",[1105,1822,1823],{"class":1328},"())",[1105,1825,1360],{"class":1332},[1105,1827,1828,1831,1833,1835,1837],{"class":1107,"line":1386},[1105,1829,1830],{"class":1338},"  title",[1105,1832,1342],{"class":1332},[1105,1834,1706],{"class":1128},[1105,1836,1792],{"class":1328},[1105,1838,1360],{"class":1332},[1105,1840,1841,1844,1846,1848,1850,1853,1856,1858,1860,1863,1865,1867,1870,1872,1875,1877,1879,1881,1883,1885,1887,1890,1893],{"class":1107,"line":1394},[1105,1842,1843],{"class":1338},"  createdAt",[1105,1845,1342],{"class":1332},[1105,1847,1711],{"class":1128},[1105,1849,1329],{"class":1328},[1105,1851,1852],{"class":1332},"{",[1105,1854,1855],{"class":1338}," mode",[1105,1857,1342],{"class":1332},[1105,1859,1419],{"class":1332},[1105,1861,1862],{"class":1115},"timestamp",[1105,1864,1357],{"class":1332},[1105,1866,1719],{"class":1332},[1105,1868,1869],{"class":1328},")",[1105,1871,1795],{"class":1332},[1105,1873,1874],{"class":1128},"notNull",[1105,1876,1792],{"class":1328},[1105,1878,1795],{"class":1332},[1105,1880,1805],{"class":1128},[1105,1882,1329],{"class":1328},[1105,1884,1792],{"class":1332},[1105,1886,1812],{"class":1575},[1105,1888,1889],{"class":1332}," new",[1105,1891,1892],{"class":1128}," Date",[1105,1894,1895],{"class":1328},"())\n",[1105,1897,1898,1900],{"class":1107,"line":1400},[1105,1899,1464],{"class":1332},[1105,1901,1467],{"class":1328},[1105,1903,1904],{"class":1107,"line":1411},[1105,1905,1397],{"emptyLinePlaceholder":21},[1105,1907,1908,1910,1912,1915,1917,1919,1922,1924,1927,1931,1934,1936,1939],{"class":1107,"line":1427},[1105,1909,1319],{"class":1318},[1105,1911,1760],{"class":1575},[1105,1913,1914],{"class":1328}," chatsRelations ",[1105,1916,1579],{"class":1332},[1105,1918,1738],{"class":1128},[1105,1920,1921],{"class":1328},"(chats",[1105,1923,1703],{"class":1332},[1105,1925,1926],{"class":1332}," ({",[1105,1928,1930],{"class":1929},"sHdIc"," many",[1105,1932,1933],{"class":1332}," })",[1105,1935,1812],{"class":1575},[1105,1937,1938],{"class":1328}," (",[1105,1940,1333],{"class":1332},[1105,1942,1943,1946,1948,1950],{"class":1107,"line":1433},[1105,1944,1945],{"class":1338},"  messages",[1105,1947,1342],{"class":1332},[1105,1949,1930],{"class":1128},[1105,1951,1952],{"class":1328},"(messages)\n",[1105,1954,1955,1957],{"class":1107,"line":1438},[1105,1956,1464],{"class":1332},[1105,1958,1959],{"class":1328},"))\n",[1105,1961,1962],{"class":1107,"line":1461},[1105,1963,1397],{"emptyLinePlaceholder":21},[1105,1965,1967,1969,1971,1974,1976,1978,1980,1982,1985,1987,1989],{"class":1107,"line":1966},14,[1105,1968,1319],{"class":1318},[1105,1970,1760],{"class":1575},[1105,1972,1973],{"class":1328}," messages ",[1105,1975,1579],{"class":1332},[1105,1977,1700],{"class":1128},[1105,1979,1329],{"class":1328},[1105,1981,1357],{"class":1332},[1105,1983,1984],{"class":1115},"messages",[1105,1986,1357],{"class":1332},[1105,1988,1703],{"class":1332},[1105,1990,1408],{"class":1332},[1105,1992,1994,1996,1998,2000,2002,2004,2007,2009,2011,2013,2015,2017,2019,2021,2023,2025,2027,2029,2031,2033,2035],{"class":1107,"line":1993},15,[1105,1995,1785],{"class":1338},[1105,1997,1342],{"class":1332},[1105,1999,1706],{"class":1128},[1105,2001,1329],{"class":1328},[1105,2003,1357],{"class":1332},[1105,2005,2006],{"class":1115},"id",[1105,2008,1357],{"class":1332},[1105,2010,1869],{"class":1328},[1105,2012,1795],{"class":1332},[1105,2014,1798],{"class":1128},[1105,2016,1792],{"class":1328},[1105,2018,1795],{"class":1332},[1105,2020,1805],{"class":1128},[1105,2022,1329],{"class":1328},[1105,2024,1792],{"class":1332},[1105,2026,1812],{"class":1575},[1105,2028,1815],{"class":1328},[1105,2030,1795],{"class":1332},[1105,2032,1820],{"class":1128},[1105,2034,1823],{"class":1328},[1105,2036,1360],{"class":1332},[1105,2038,2040,2043,2045,2047,2049,2051,2054,2056,2058,2060,2062,2064,2066,2069,2071,2073,2075,2078,2080,2082,2084,2086,2089,2091,2093,2096,2098,2100,2102],{"class":1107,"line":2039},16,[1105,2041,2042],{"class":1338},"  chatId",[1105,2044,1342],{"class":1332},[1105,2046,1706],{"class":1128},[1105,2048,1329],{"class":1328},[1105,2050,1357],{"class":1332},[1105,2052,2053],{"class":1115},"chat_id",[1105,2055,1357],{"class":1332},[1105,2057,1869],{"class":1328},[1105,2059,1795],{"class":1332},[1105,2061,1874],{"class":1128},[1105,2063,1792],{"class":1328},[1105,2065,1795],{"class":1332},[1105,2067,2068],{"class":1128},"references",[1105,2070,1329],{"class":1328},[1105,2072,1792],{"class":1332},[1105,2074,1812],{"class":1575},[1105,2076,2077],{"class":1328}," chats",[1105,2079,1795],{"class":1332},[1105,2081,2006],{"class":1328},[1105,2083,1703],{"class":1332},[1105,2085,1697],{"class":1332},[1105,2087,2088],{"class":1338}," onDelete",[1105,2090,1342],{"class":1332},[1105,2092,1419],{"class":1332},[1105,2094,2095],{"class":1115},"cascade",[1105,2097,1357],{"class":1332},[1105,2099,1719],{"class":1332},[1105,2101,1869],{"class":1328},[1105,2103,1360],{"class":1332},[1105,2105,2107,2110,2112,2114,2116,2118,2121,2123,2125,2127,2130,2132,2134,2136,2139,2141,2143,2145,2148,2150,2152,2154,2157,2159,2162,2164,2166,2168,2170,2172],{"class":1107,"line":2106},17,[1105,2108,2109],{"class":1338},"  role",[1105,2111,1342],{"class":1332},[1105,2113,1706],{"class":1128},[1105,2115,1329],{"class":1328},[1105,2117,1357],{"class":1332},[1105,2119,2120],{"class":1115},"role",[1105,2122,1357],{"class":1332},[1105,2124,1703],{"class":1332},[1105,2126,1697],{"class":1332},[1105,2128,2129],{"class":1338}," enum",[1105,2131,1342],{"class":1332},[1105,2133,1446],{"class":1328},[1105,2135,1357],{"class":1332},[1105,2137,2138],{"class":1115},"user",[1105,2140,1357],{"class":1332},[1105,2142,1703],{"class":1332},[1105,2144,1419],{"class":1332},[1105,2146,2147],{"class":1115},"assistant",[1105,2149,1357],{"class":1332},[1105,2151,1703],{"class":1332},[1105,2153,1419],{"class":1332},[1105,2155,2156],{"class":1115},"system",[1105,2158,1357],{"class":1332},[1105,2160,2161],{"class":1328},"] ",[1105,2163,1464],{"class":1332},[1105,2165,1869],{"class":1328},[1105,2167,1795],{"class":1332},[1105,2169,1874],{"class":1128},[1105,2171,1792],{"class":1328},[1105,2173,1360],{"class":1332},[1105,2175,2177,2180,2182,2184,2186,2188,2191,2193,2195,2197,2199,2201,2203,2206,2208,2210,2212],{"class":1107,"line":2176},18,[1105,2178,2179],{"class":1338},"  parts",[1105,2181,1342],{"class":1332},[1105,2183,1706],{"class":1128},[1105,2185,1329],{"class":1328},[1105,2187,1357],{"class":1332},[1105,2189,2190],{"class":1115},"parts",[1105,2192,1357],{"class":1332},[1105,2194,1703],{"class":1332},[1105,2196,1697],{"class":1332},[1105,2198,1855],{"class":1338},[1105,2200,1342],{"class":1332},[1105,2202,1419],{"class":1332},[1105,2204,2205],{"class":1115},"json",[1105,2207,1357],{"class":1332},[1105,2209,1719],{"class":1332},[1105,2211,1869],{"class":1328},[1105,2213,1360],{"class":1332},[1105,2215,2217,2219,2221,2223,2225,2227,2229,2231,2233,2235,2237,2239,2241,2243,2245,2247,2249,2251,2253,2255,2257,2259,2261,2263],{"class":1107,"line":2216},19,[1105,2218,1843],{"class":1338},[1105,2220,1342],{"class":1332},[1105,2222,1711],{"class":1128},[1105,2224,1329],{"class":1328},[1105,2226,1852],{"class":1332},[1105,2228,1855],{"class":1338},[1105,2230,1342],{"class":1332},[1105,2232,1419],{"class":1332},[1105,2234,1862],{"class":1115},[1105,2236,1357],{"class":1332},[1105,2238,1719],{"class":1332},[1105,2240,1869],{"class":1328},[1105,2242,1795],{"class":1332},[1105,2244,1874],{"class":1128},[1105,2246,1792],{"class":1328},[1105,2248,1795],{"class":1332},[1105,2250,1805],{"class":1128},[1105,2252,1329],{"class":1328},[1105,2254,1792],{"class":1332},[1105,2256,1812],{"class":1575},[1105,2258,1889],{"class":1332},[1105,2260,1892],{"class":1128},[1105,2262,1823],{"class":1328},[1105,2264,1360],{"class":1332},[1105,2266,2268,2271,2274,2276],{"class":1107,"line":2267},20,[1105,2269,2270],{"class":1332},"},",[1105,2272,2273],{"class":1929}," table",[1105,2275,1812],{"class":1575},[1105,2277,1345],{"class":1328},[1105,2279,2281,2284,2286,2288,2291,2293,2295,2297,2300,2303,2305],{"class":1107,"line":2280},21,[1105,2282,2283],{"class":1128},"  index",[1105,2285,1329],{"class":1328},[1105,2287,1357],{"class":1332},[1105,2289,2290],{"class":1115},"messages_chat_id_idx",[1105,2292,1357],{"class":1332},[1105,2294,1869],{"class":1328},[1105,2296,1795],{"class":1332},[1105,2298,2299],{"class":1128},"on",[1105,2301,2302],{"class":1328},"(table",[1105,2304,1795],{"class":1332},[1105,2306,2307],{"class":1328},"chatId)\n",[1105,2309,2311],{"class":1107,"line":2310},22,[1105,2312,2313],{"class":1328},"])\n",[1105,2315,2317],{"class":1107,"line":2316},23,[1105,2318,1397],{"emptyLinePlaceholder":21},[1105,2320,2322,2324,2326,2329,2331,2333,2336,2338,2340,2343,2345,2347,2349],{"class":1107,"line":2321},24,[1105,2323,1319],{"class":1318},[1105,2325,1760],{"class":1575},[1105,2327,2328],{"class":1328}," messagesRelations ",[1105,2330,1579],{"class":1332},[1105,2332,1738],{"class":1128},[1105,2334,2335],{"class":1328},"(messages",[1105,2337,1703],{"class":1332},[1105,2339,1926],{"class":1332},[1105,2341,2342],{"class":1929}," one",[1105,2344,1933],{"class":1332},[1105,2346,1812],{"class":1575},[1105,2348,1938],{"class":1328},[1105,2350,1333],{"class":1332},[1105,2352,2354,2357,2359,2361,2363,2365],{"class":1107,"line":2353},25,[1105,2355,2356],{"class":1338},"  chat",[1105,2358,1342],{"class":1332},[1105,2360,2342],{"class":1128},[1105,2362,1921],{"class":1328},[1105,2364,1703],{"class":1332},[1105,2366,1408],{"class":1332},[1105,2368,2370,2373,2375,2378,2380,2383],{"class":1107,"line":2369},26,[1105,2371,2372],{"class":1338},"    fields",[1105,2374,1342],{"class":1332},[1105,2376,2377],{"class":1328}," [messages",[1105,2379,1795],{"class":1332},[1105,2381,2382],{"class":1328},"chatId]",[1105,2384,1360],{"class":1332},[1105,2386,2388,2391,2393,2396,2398],{"class":1107,"line":2387},27,[1105,2389,2390],{"class":1338},"    references",[1105,2392,1342],{"class":1332},[1105,2394,2395],{"class":1328}," [chats",[1105,2397,1795],{"class":1332},[1105,2399,2400],{"class":1328},"id]\n",[1105,2402,2404,2407],{"class":1107,"line":2403},28,[1105,2405,2406],{"class":1332},"  }",[1105,2408,1467],{"class":1328},[1105,2410,2412,2414],{"class":1107,"line":2411},29,[1105,2413,1464],{"class":1332},[1105,2415,1959],{"class":1328},[995,2417,2418],{},"Generate the database migrations from your schema:",[1096,2420,2422],{"className":1098,"code":2421,"language":1100,"meta":1101,"style":1101},"npx nuxt db generate\n",[1055,2423,2424],{"__ignoreMap":1101},[1105,2425,2426,2428,2431,2434],{"class":1107,"line":1108},[1105,2427,1112],{"class":1111},[1105,2429,2430],{"class":1115}," nuxt",[1105,2432,2433],{"class":1115}," db",[1105,2435,2436],{"class":1115}," generate\n",[2438,2439,2440],"tip",{},[995,2441,2442,2443,2446],{},"Migrations are automatically applied when you start the development server with ",[1055,2444,2445],{},"npx nuxt dev",". NuxtHub uses SQLite locally, so no external database is required during development.",[999,2448,2450],{"id":2449},"building-the-backend","Building the backend",[995,2452,2453,2454,1795],{},"This section covers integrating AI on the server. The following API endpoints handle chat creation, AI streaming, and data persistence using ",[1049,2455,2458],{"href":2456,"rel":2457},"https:\u002F\u002Fnitro.build",[1053],"Nitro",[1133,2460,2462],{"id":2461},"creating-a-chat","Creating a chat",[995,2464,2465,2466,2473],{},"First, create the endpoint that initializes a new chat and saves the first message to the database. This uses the ",[1049,2467,2470],{"href":2468,"rel":2469},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fui-message",[1053],[1055,2471,2472],{},"UIMessage"," type from the AI SDK:",[1305,2475,2476],{},[1096,2477,2480],{"className":1309,"code":2478,"filename":2479,"language":1311,"meta":1101,"style":1101},"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",[1055,2481,2482,2506,2529,2553,2573,2577,2601,2638,2662,2675,2679,2685,2736,2740,2745,2774,2790,2805,2819,2825,2829,2837],{"__ignoreMap":1101},[1105,2483,2484,2486,2488,2491,2493,2496,2498,2500,2502,2504],{"class":1107,"line":1108},[1105,2485,1694],{"class":1318},[1105,2487,1697],{"class":1332},[1105,2489,2490],{"class":1328}," defineEventHandler",[1105,2492,1703],{"class":1332},[1105,2494,2495],{"class":1328}," readValidatedBody",[1105,2497,1719],{"class":1332},[1105,2499,1722],{"class":1318},[1105,2501,1419],{"class":1332},[1105,2503,1133],{"class":1115},[1105,2505,1383],{"class":1332},[1105,2507,2508,2510,2513,2515,2518,2520,2522,2524,2527],{"class":1107,"line":1125},[1105,2509,1694],{"class":1318},[1105,2511,2512],{"class":1318}," type",[1105,2514,1697],{"class":1332},[1105,2516,2517],{"class":1328}," UIMessage",[1105,2519,1719],{"class":1332},[1105,2521,1722],{"class":1318},[1105,2523,1419],{"class":1332},[1105,2525,2526],{"class":1115},"ai",[1105,2528,1383],{"class":1332},[1105,2530,2531,2533,2535,2537,2539,2542,2544,2546,2548,2551],{"class":1107,"line":1348},[1105,2532,1694],{"class":1318},[1105,2534,1697],{"class":1332},[1105,2536,2433],{"class":1328},[1105,2538,1703],{"class":1332},[1105,2540,2541],{"class":1328}," schema",[1105,2543,1719],{"class":1332},[1105,2545,1722],{"class":1318},[1105,2547,1419],{"class":1332},[1105,2549,2550],{"class":1115},"hub:db",[1105,2552,1383],{"class":1332},[1105,2554,2555,2557,2559,2562,2564,2566,2568,2571],{"class":1107,"line":1363},[1105,2556,1694],{"class":1318},[1105,2558,1697],{"class":1332},[1105,2560,2561],{"class":1328}," z",[1105,2563,1719],{"class":1332},[1105,2565,1722],{"class":1318},[1105,2567,1419],{"class":1332},[1105,2569,2570],{"class":1115},"zod",[1105,2572,1383],{"class":1332},[1105,2574,2575],{"class":1107,"line":1375},[1105,2576,1397],{"emptyLinePlaceholder":21},[1105,2578,2579,2581,2583,2585,2587,2590,2592,2595,2597,2599],{"class":1107,"line":1386},[1105,2580,1319],{"class":1318},[1105,2582,1322],{"class":1318},[1105,2584,2490],{"class":1128},[1105,2586,1329],{"class":1328},[1105,2588,2589],{"class":1575},"async",[1105,2591,1938],{"class":1332},[1105,2593,2594],{"class":1929},"event",[1105,2596,1869],{"class":1332},[1105,2598,1812],{"class":1575},[1105,2600,1408],{"class":1332},[1105,2602,2603,2606,2608,2611,2613,2616,2619,2621,2623,2625,2627,2629,2631,2634,2636],{"class":1107,"line":1394},[1105,2604,2605],{"class":1575},"  const",[1105,2607,1697],{"class":1332},[1105,2609,2610],{"class":1328}," message",[1105,2612,1719],{"class":1332},[1105,2614,2615],{"class":1332}," =",[1105,2617,2618],{"class":1318}," await",[1105,2620,2495],{"class":1128},[1105,2622,1329],{"class":1338},[1105,2624,2594],{"class":1328},[1105,2626,1703],{"class":1332},[1105,2628,2561],{"class":1328},[1105,2630,1795],{"class":1332},[1105,2632,2633],{"class":1128},"object",[1105,2635,1329],{"class":1338},[1105,2637,1333],{"class":1332},[1105,2639,2640,2643,2645,2647,2649,2652,2654,2656,2659],{"class":1107,"line":1400},[1105,2641,2642],{"class":1338},"    message",[1105,2644,1342],{"class":1332},[1105,2646,2561],{"class":1328},[1105,2648,1795],{"class":1332},[1105,2650,2651],{"class":1128},"custom",[1105,2653,1547],{"class":1332},[1105,2655,2472],{"class":1111},[1105,2657,2658],{"class":1332},">",[1105,2660,2661],{"class":1338},"()\n",[1105,2663,2664,2666,2668,2670,2673],{"class":1107,"line":1411},[1105,2665,2406],{"class":1332},[1105,2667,1869],{"class":1338},[1105,2669,1795],{"class":1332},[1105,2671,2672],{"class":1328},"parse",[1105,2674,1467],{"class":1338},[1105,2676,2677],{"class":1107,"line":1427},[1105,2678,1397],{"emptyLinePlaceholder":21},[1105,2680,2681],{"class":1107,"line":1433},[1105,2682,2684],{"class":2683},"sHwdD","  \u002F\u002F Create a new chat\n",[1105,2686,2687,2689,2691,2693,2695,2697,2699,2701,2703,2706,2708,2711,2713,2715,2717,2719,2722,2724,2727,2729,2731,2734],{"class":1107,"line":1438},[1105,2688,2605],{"class":1575},[1105,2690,1446],{"class":1332},[1105,2692,262],{"class":1328},[1105,2694,1456],{"class":1332},[1105,2696,2615],{"class":1332},[1105,2698,2618],{"class":1318},[1105,2700,2433],{"class":1328},[1105,2702,1795],{"class":1332},[1105,2704,2705],{"class":1128},"insert",[1105,2707,1329],{"class":1338},[1105,2709,2710],{"class":1328},"schema",[1105,2712,1795],{"class":1332},[1105,2714,1774],{"class":1328},[1105,2716,1869],{"class":1338},[1105,2718,1795],{"class":1332},[1105,2720,2721],{"class":1128},"values",[1105,2723,1329],{"class":1338},[1105,2725,2726],{"class":1332},"{}",[1105,2728,1869],{"class":1338},[1105,2730,1795],{"class":1332},[1105,2732,2733],{"class":1128},"returning",[1105,2735,2661],{"class":1338},[1105,2737,2738],{"class":1107,"line":1461},[1105,2739,1397],{"emptyLinePlaceholder":21},[1105,2741,2742],{"class":1107,"line":1966},[1105,2743,2744],{"class":2683},"  \u002F\u002F Save the first user message\n",[1105,2746,2747,2750,2752,2754,2756,2758,2760,2762,2764,2766,2768,2770,2772],{"class":1107,"line":1993},[1105,2748,2749],{"class":1318},"  await",[1105,2751,2433],{"class":1328},[1105,2753,1795],{"class":1332},[1105,2755,2705],{"class":1128},[1105,2757,1329],{"class":1338},[1105,2759,2710],{"class":1328},[1105,2761,1795],{"class":1332},[1105,2763,1984],{"class":1328},[1105,2765,1869],{"class":1338},[1105,2767,1795],{"class":1332},[1105,2769,2721],{"class":1128},[1105,2771,1329],{"class":1338},[1105,2773,1333],{"class":1332},[1105,2775,2776,2779,2781,2784,2786,2788],{"class":1107,"line":2039},[1105,2777,2778],{"class":1338},"    chatId",[1105,2780,1342],{"class":1332},[1105,2782,2783],{"class":1328}," chat",[1105,2785,1795],{"class":1332},[1105,2787,2006],{"class":1328},[1105,2789,1360],{"class":1332},[1105,2791,2792,2795,2797,2799,2801,2803],{"class":1107,"line":2106},[1105,2793,2794],{"class":1338},"    role",[1105,2796,1342],{"class":1332},[1105,2798,1419],{"class":1332},[1105,2800,2138],{"class":1115},[1105,2802,1357],{"class":1332},[1105,2804,1360],{"class":1332},[1105,2806,2807,2810,2812,2814,2816],{"class":1107,"line":2176},[1105,2808,2809],{"class":1338},"    parts",[1105,2811,1342],{"class":1332},[1105,2813,2610],{"class":1328},[1105,2815,1795],{"class":1332},[1105,2817,2818],{"class":1328},"parts\n",[1105,2820,2821,2823],{"class":1107,"line":2216},[1105,2822,2406],{"class":1332},[1105,2824,1467],{"class":1338},[1105,2826,2827],{"class":1107,"line":2267},[1105,2828,1397],{"emptyLinePlaceholder":21},[1105,2830,2831,2834],{"class":1107,"line":2280},[1105,2832,2833],{"class":1318},"  return",[1105,2835,2836],{"class":1328}," chat\n",[1105,2838,2839,2841],{"class":1107,"line":2310},[1105,2840,1464],{"class":1332},[1105,2842,1467],{"class":1328},[1133,2844,2846],{"id":2845},"streaming-ai-responses","Streaming AI responses",[995,2848,2849,2850,2857,2858,2865,2866,2873],{},"Next, create the endpoint that handles the AI conversation. This endpoint uses ",[1049,2851,2854],{"href":2852,"rel":2853},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-core\u002Fstream-text",[1053],[1055,2855,2856],{},"streamText",", ",[1049,2859,2862],{"href":2860,"rel":2861},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream",[1053],[1055,2863,2864],{},"createUIMessageStream",", and ",[1049,2867,2870],{"href":2868,"rel":2869},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream-response",[1053],[1055,2871,2872],{},"createUIMessageStreamResponse"," from the AI SDK:",[1305,2875,2876],{},[1682,2877,2878],{},[1096,2879,2882],{"className":1309,"code":2880,"filename":2881,"language":1311,"meta":1101,"style":1101},"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",[1055,2883,2884,2916,2935,2957,2975,2981,2988,2995,3002,3009,3014,3026,3046,3050,3067,3071,3082,3116,3145,3176,3181,3185,3207,3240,3256,3268,3272,3315,3375,3389,3406,3438,3451,3456,3462,3493,3537,3544,3549,3567,3606,3612,3617,3623,3643,3671,3683,3702,3730,3737,3742,3808,3813,3818,3824,3853,3894,3923,3935,3951,3965,3972,3977,3982,3988,4005,4027,4045,4053,4070,4091,4101,4111,4121,4138,4149,4155,4161,4171,4181,4195,4210,4215,4220,4230,4246,4261,4267,4273,4281,4286,4292,4312,4327,4344,4367,4378,4386,4392,4397,4420,4426,4446,4452,4498,4514,4547,4561,4569,4575,4582,4587,4605],{"__ignoreMap":1101},[1105,2885,2886,2888,2890,2893,2895,2897,2899,2902,2904,2906,2908,2910,2912,2914],{"class":1107,"line":1108},[1105,2887,1694],{"class":1318},[1105,2889,1697],{"class":1332},[1105,2891,2892],{"class":1328}," createError",[1105,2894,1703],{"class":1332},[1105,2896,2490],{"class":1328},[1105,2898,1703],{"class":1332},[1105,2900,2901],{"class":1328}," getValidatedRouterParams",[1105,2903,1703],{"class":1332},[1105,2905,2495],{"class":1328},[1105,2907,1719],{"class":1332},[1105,2909,1722],{"class":1318},[1105,2911,1419],{"class":1332},[1105,2913,1133],{"class":1115},[1105,2915,1383],{"class":1332},[1105,2917,2918,2920,2922,2925,2927,2929,2931,2933],{"class":1107,"line":1125},[1105,2919,1694],{"class":1318},[1105,2921,1697],{"class":1332},[1105,2923,2924],{"class":1328}," eq",[1105,2926,1719],{"class":1332},[1105,2928,1722],{"class":1318},[1105,2930,1419],{"class":1332},[1105,2932,1747],{"class":1115},[1105,2934,1383],{"class":1332},[1105,2936,2937,2939,2941,2943,2945,2947,2949,2951,2953,2955],{"class":1107,"line":1348},[1105,2938,1694],{"class":1318},[1105,2940,1697],{"class":1332},[1105,2942,2433],{"class":1328},[1105,2944,1703],{"class":1332},[1105,2946,2541],{"class":1328},[1105,2948,1719],{"class":1332},[1105,2950,1722],{"class":1318},[1105,2952,1419],{"class":1332},[1105,2954,2550],{"class":1115},[1105,2956,1383],{"class":1332},[1105,2958,2959,2961,2963,2965,2967,2969,2971,2973],{"class":1107,"line":1363},[1105,2960,1694],{"class":1318},[1105,2962,1697],{"class":1332},[1105,2964,2561],{"class":1328},[1105,2966,1719],{"class":1332},[1105,2968,1722],{"class":1318},[1105,2970,1419],{"class":1332},[1105,2972,2570],{"class":1115},[1105,2974,1383],{"class":1332},[1105,2976,2977,2979],{"class":1107,"line":1375},[1105,2978,1694],{"class":1318},[1105,2980,1408],{"class":1332},[1105,2982,2983,2986],{"class":1107,"line":1386},[1105,2984,2985],{"class":1328},"  convertToModelMessages",[1105,2987,1360],{"class":1332},[1105,2989,2990,2993],{"class":1107,"line":1394},[1105,2991,2992],{"class":1328},"  createUIMessageStream",[1105,2994,1360],{"class":1332},[1105,2996,2997,3000],{"class":1107,"line":1400},[1105,2998,2999],{"class":1328},"  createUIMessageStreamResponse",[1105,3001,1360],{"class":1332},[1105,3003,3004,3007],{"class":1107,"line":1411},[1105,3005,3006],{"class":1328},"  generateText",[1105,3008,1360],{"class":1332},[1105,3010,3011],{"class":1107,"line":1427},[1105,3012,3013],{"class":1328},"  streamText\n",[1105,3015,3016,3018,3020,3022,3024],{"class":1107,"line":1433},[1105,3017,1464],{"class":1332},[1105,3019,1722],{"class":1318},[1105,3021,1419],{"class":1332},[1105,3023,2526],{"class":1115},[1105,3025,1383],{"class":1332},[1105,3027,3028,3030,3032,3034,3036,3038,3040,3042,3044],{"class":1107,"line":1438},[1105,3029,1694],{"class":1318},[1105,3031,2512],{"class":1318},[1105,3033,1697],{"class":1332},[1105,3035,2517],{"class":1328},[1105,3037,1719],{"class":1332},[1105,3039,1722],{"class":1318},[1105,3041,1419],{"class":1332},[1105,3043,2526],{"class":1115},[1105,3045,1383],{"class":1332},[1105,3047,3048],{"class":1107,"line":1461},[1105,3049,1397],{"emptyLinePlaceholder":21},[1105,3051,3052,3055,3058,3060,3062,3065],{"class":1107,"line":1966},[1105,3053,3054],{"class":1575},"const",[1105,3056,3057],{"class":1328}," DEFAULT_MODEL ",[1105,3059,1579],{"class":1332},[1105,3061,1419],{"class":1332},[1105,3063,3064],{"class":1115},"anthropic\u002Fclaude-haiku-4.5",[1105,3066,1383],{"class":1332},[1105,3068,3069],{"class":1107,"line":1993},[1105,3070,1397],{"emptyLinePlaceholder":21},[1105,3072,3073,3075,3078,3080],{"class":1107,"line":2039},[1105,3074,3054],{"class":1575},[1105,3076,3077],{"class":1328}," MODELS ",[1105,3079,1579],{"class":1332},[1105,3081,1345],{"class":1328},[1105,3083,3084,3087,3090,3092,3094,3097,3099,3101,3104,3106,3108,3111,3113],{"class":1107,"line":2106},[1105,3085,3086],{"class":1332},"  {",[1105,3088,3089],{"class":1338}," value",[1105,3091,1342],{"class":1332},[1105,3093,1419],{"class":1332},[1105,3095,3096],{"class":1115},"openai\u002Fgpt-5-nano",[1105,3098,1357],{"class":1332},[1105,3100,1703],{"class":1332},[1105,3102,3103],{"class":1338}," label",[1105,3105,1342],{"class":1332},[1105,3107,1419],{"class":1332},[1105,3109,3110],{"class":1115},"GPT-5 Nano",[1105,3112,1357],{"class":1332},[1105,3114,3115],{"class":1332}," },\n",[1105,3117,3118,3120,3122,3124,3126,3128,3130,3132,3134,3136,3138,3141,3143],{"class":1107,"line":2176},[1105,3119,3086],{"class":1332},[1105,3121,3089],{"class":1338},[1105,3123,1342],{"class":1332},[1105,3125,1419],{"class":1332},[1105,3127,3064],{"class":1115},[1105,3129,1357],{"class":1332},[1105,3131,1703],{"class":1332},[1105,3133,3103],{"class":1338},[1105,3135,1342],{"class":1332},[1105,3137,1419],{"class":1332},[1105,3139,3140],{"class":1115},"Claude Haiku 4.5",[1105,3142,1357],{"class":1332},[1105,3144,3115],{"class":1332},[1105,3146,3147,3149,3151,3153,3155,3158,3160,3162,3164,3166,3168,3171,3173],{"class":1107,"line":2216},[1105,3148,3086],{"class":1332},[1105,3150,3089],{"class":1338},[1105,3152,1342],{"class":1332},[1105,3154,1419],{"class":1332},[1105,3156,3157],{"class":1115},"google\u002Fgemini-3-flash",[1105,3159,1357],{"class":1332},[1105,3161,1703],{"class":1332},[1105,3163,3103],{"class":1338},[1105,3165,1342],{"class":1332},[1105,3167,1419],{"class":1332},[1105,3169,3170],{"class":1115},"Gemini 3 Flash",[1105,3172,1357],{"class":1332},[1105,3174,3175],{"class":1332}," }\n",[1105,3177,3178],{"class":1107,"line":2267},[1105,3179,3180],{"class":1328},"]\n",[1105,3182,3183],{"class":1107,"line":2280},[1105,3184,1397],{"emptyLinePlaceholder":21},[1105,3186,3187,3189,3191,3193,3195,3197,3199,3201,3203,3205],{"class":1107,"line":2310},[1105,3188,1319],{"class":1318},[1105,3190,1322],{"class":1318},[1105,3192,2490],{"class":1128},[1105,3194,1329],{"class":1328},[1105,3196,2589],{"class":1575},[1105,3198,1938],{"class":1332},[1105,3200,2594],{"class":1929},[1105,3202,1869],{"class":1332},[1105,3204,1812],{"class":1575},[1105,3206,1408],{"class":1332},[1105,3208,3209,3211,3213,3216,3218,3220,3222,3224,3226,3228,3230,3232,3234,3236,3238],{"class":1107,"line":2316},[1105,3210,2605],{"class":1575},[1105,3212,1697],{"class":1332},[1105,3214,3215],{"class":1328}," id",[1105,3217,1719],{"class":1332},[1105,3219,2615],{"class":1332},[1105,3221,2618],{"class":1318},[1105,3223,2901],{"class":1128},[1105,3225,1329],{"class":1338},[1105,3227,2594],{"class":1328},[1105,3229,1703],{"class":1332},[1105,3231,2561],{"class":1328},[1105,3233,1795],{"class":1332},[1105,3235,2633],{"class":1128},[1105,3237,1329],{"class":1338},[1105,3239,1333],{"class":1332},[1105,3241,3242,3245,3247,3249,3251,3254],{"class":1107,"line":2321},[1105,3243,3244],{"class":1338},"    id",[1105,3246,1342],{"class":1332},[1105,3248,2561],{"class":1328},[1105,3250,1795],{"class":1332},[1105,3252,3253],{"class":1128},"string",[1105,3255,2661],{"class":1338},[1105,3257,3258,3260,3262,3264,3266],{"class":1107,"line":2353},[1105,3259,2406],{"class":1332},[1105,3261,1869],{"class":1338},[1105,3263,1795],{"class":1332},[1105,3265,2672],{"class":1328},[1105,3267,1467],{"class":1338},[1105,3269,3270],{"class":1107,"line":2369},[1105,3271,1397],{"emptyLinePlaceholder":21},[1105,3273,3274,3276,3278,3281,3283,3286,3288,3291,3293,3295,3297,3299,3301,3303,3305,3307,3309,3311,3313],{"class":1107,"line":2387},[1105,3275,2605],{"class":1575},[1105,3277,1697],{"class":1332},[1105,3279,3280],{"class":1328}," model",[1105,3282,2615],{"class":1332},[1105,3284,3285],{"class":1328}," DEFAULT_MODEL",[1105,3287,1703],{"class":1332},[1105,3289,3290],{"class":1328}," messages",[1105,3292,1719],{"class":1332},[1105,3294,2615],{"class":1332},[1105,3296,2618],{"class":1318},[1105,3298,2495],{"class":1128},[1105,3300,1329],{"class":1338},[1105,3302,2594],{"class":1328},[1105,3304,1703],{"class":1332},[1105,3306,2561],{"class":1328},[1105,3308,1795],{"class":1332},[1105,3310,2633],{"class":1128},[1105,3312,1329],{"class":1338},[1105,3314,1333],{"class":1332},[1105,3316,3317,3320,3322,3324,3326,3328,3330,3332,3335,3337,3340,3342,3345,3347,3350,3352,3355,3357,3360,3362,3364,3367,3369,3371,3373],{"class":1107,"line":2403},[1105,3318,3319],{"class":1338},"    model",[1105,3321,1342],{"class":1332},[1105,3323,2561],{"class":1328},[1105,3325,1795],{"class":1332},[1105,3327,3253],{"class":1128},[1105,3329,1792],{"class":1338},[1105,3331,1795],{"class":1332},[1105,3333,3334],{"class":1128},"refine",[1105,3336,1329],{"class":1338},[1105,3338,3339],{"class":1929},"value",[1105,3341,1812],{"class":1575},[1105,3343,3344],{"class":1328}," MODELS",[1105,3346,1795],{"class":1332},[1105,3348,3349],{"class":1128},"some",[1105,3351,1329],{"class":1338},[1105,3353,3354],{"class":1929},"m",[1105,3356,1812],{"class":1575},[1105,3358,3359],{"class":1328}," m",[1105,3361,1795],{"class":1332},[1105,3363,3339],{"class":1328},[1105,3365,3366],{"class":1332}," ===",[1105,3368,3089],{"class":1328},[1105,3370,1869],{"class":1338},[1105,3372,1703],{"class":1332},[1105,3374,1408],{"class":1332},[1105,3376,3377,3380,3382,3384,3387],{"class":1107,"line":2411},[1105,3378,3379],{"class":1338},"      message",[1105,3381,1342],{"class":1332},[1105,3383,1419],{"class":1332},[1105,3385,3386],{"class":1115},"Invalid model",[1105,3388,1383],{"class":1332},[1105,3390,3392,3395,3397,3399,3402,3404],{"class":1107,"line":3391},30,[1105,3393,3394],{"class":1332},"    }",[1105,3396,1869],{"class":1338},[1105,3398,1795],{"class":1332},[1105,3400,3401],{"class":1128},"optional",[1105,3403,1792],{"class":1338},[1105,3405,1360],{"class":1332},[1105,3407,3409,3412,3414,3416,3418,3421,3423,3426,3428,3430,3432,3434,3436],{"class":1107,"line":3408},31,[1105,3410,3411],{"class":1338},"    messages",[1105,3413,1342],{"class":1332},[1105,3415,2561],{"class":1328},[1105,3417,1795],{"class":1332},[1105,3419,3420],{"class":1128},"array",[1105,3422,1329],{"class":1338},[1105,3424,3425],{"class":1328},"z",[1105,3427,1795],{"class":1332},[1105,3429,2651],{"class":1128},[1105,3431,1547],{"class":1332},[1105,3433,2472],{"class":1111},[1105,3435,2658],{"class":1332},[1105,3437,1895],{"class":1338},[1105,3439,3441,3443,3445,3447,3449],{"class":1107,"line":3440},32,[1105,3442,2406],{"class":1332},[1105,3444,1869],{"class":1338},[1105,3446,1795],{"class":1332},[1105,3448,2672],{"class":1328},[1105,3450,1467],{"class":1338},[1105,3452,3454],{"class":1107,"line":3453},33,[1105,3455,1397],{"emptyLinePlaceholder":21},[1105,3457,3459],{"class":1107,"line":3458},34,[1105,3460,3461],{"class":2683},"  \u002F\u002F Fetch the chat from the database\n",[1105,3463,3465,3467,3469,3471,3473,3475,3477,3480,3482,3484,3486,3489,3491],{"class":1107,"line":3464},35,[1105,3466,2605],{"class":1575},[1105,3468,2783],{"class":1328},[1105,3470,2615],{"class":1332},[1105,3472,2618],{"class":1318},[1105,3474,2433],{"class":1328},[1105,3476,1795],{"class":1332},[1105,3478,3479],{"class":1328},"query",[1105,3481,1795],{"class":1332},[1105,3483,1774],{"class":1328},[1105,3485,1795],{"class":1332},[1105,3487,3488],{"class":1128},"findFirst",[1105,3490,1329],{"class":1338},[1105,3492,1333],{"class":1332},[1105,3494,3496,3499,3501,3503,3505,3507,3509,3511,3513,3515,3517,3519,3521,3523,3525,3527,3529,3532,3535],{"class":1107,"line":3495},36,[1105,3497,3498],{"class":1128},"    where",[1105,3500,1342],{"class":1332},[1105,3502,1938],{"class":1332},[1105,3504,262],{"class":1929},[1105,3506,1703],{"class":1332},[1105,3508,1697],{"class":1332},[1105,3510,2924],{"class":1929},[1105,3512,1933],{"class":1332},[1105,3514,1812],{"class":1575},[1105,3516,2924],{"class":1128},[1105,3518,1329],{"class":1338},[1105,3520,262],{"class":1328},[1105,3522,1795],{"class":1332},[1105,3524,2006],{"class":1328},[1105,3526,1703],{"class":1332},[1105,3528,3215],{"class":1328},[1105,3530,3531],{"class":1318}," as",[1105,3533,3534],{"class":1111}," string",[1105,3536,1467],{"class":1338},[1105,3538,3540,3542],{"class":1107,"line":3539},37,[1105,3541,2406],{"class":1332},[1105,3543,1467],{"class":1338},[1105,3545,3547],{"class":1107,"line":3546},38,[1105,3548,1397],{"emptyLinePlaceholder":21},[1105,3550,3552,3555,3557,3560,3562,3565],{"class":1107,"line":3551},39,[1105,3553,3554],{"class":1318},"  if",[1105,3556,1938],{"class":1338},[1105,3558,3559],{"class":1332},"!",[1105,3561,262],{"class":1328},[1105,3563,3564],{"class":1338},") ",[1105,3566,1333],{"class":1332},[1105,3568,3570,3573,3575,3577,3579,3582,3584,3588,3590,3593,3595,3597,3600,3602,3604],{"class":1107,"line":3569},40,[1105,3571,3572],{"class":1318},"    throw",[1105,3574,2892],{"class":1128},[1105,3576,1329],{"class":1338},[1105,3578,1852],{"class":1332},[1105,3580,3581],{"class":1338}," statusCode",[1105,3583,1342],{"class":1332},[1105,3585,3587],{"class":3586},"sbssI"," 404",[1105,3589,1703],{"class":1332},[1105,3591,3592],{"class":1338}," statusMessage",[1105,3594,1342],{"class":1332},[1105,3596,1419],{"class":1332},[1105,3598,3599],{"class":1115},"Chat not found",[1105,3601,1357],{"class":1332},[1105,3603,1719],{"class":1332},[1105,3605,1467],{"class":1338},[1105,3607,3609],{"class":1107,"line":3608},41,[1105,3610,3611],{"class":1332},"  }\n",[1105,3613,3615],{"class":1107,"line":3614},42,[1105,3616,1397],{"emptyLinePlaceholder":21},[1105,3618,3620],{"class":1107,"line":3619},43,[1105,3621,3622],{"class":2683},"  \u002F\u002F Generate a title for the chat if it doesn't have one\n",[1105,3624,3626,3628,3630,3632,3634,3636,3639,3641],{"class":1107,"line":3625},44,[1105,3627,3554],{"class":1318},[1105,3629,1938],{"class":1338},[1105,3631,3559],{"class":1332},[1105,3633,262],{"class":1328},[1105,3635,1795],{"class":1332},[1105,3637,3638],{"class":1328},"title",[1105,3640,3564],{"class":1338},[1105,3642,1333],{"class":1332},[1105,3644,3646,3649,3651,3653,3655,3658,3660,3662,3664,3667,3669],{"class":1107,"line":3645},45,[1105,3647,3648],{"class":1575},"    const",[1105,3650,1697],{"class":1332},[1105,3652,1706],{"class":1338},[1105,3654,1342],{"class":1332},[1105,3656,3657],{"class":1328}," title",[1105,3659,1719],{"class":1332},[1105,3661,2615],{"class":1332},[1105,3663,2618],{"class":1318},[1105,3665,3666],{"class":1128}," generateText",[1105,3668,1329],{"class":1338},[1105,3670,1333],{"class":1332},[1105,3672,3674,3677,3679,3681],{"class":1107,"line":3673},46,[1105,3675,3676],{"class":1338},"      model",[1105,3678,1342],{"class":1332},[1105,3680,3285],{"class":1328},[1105,3682,1360],{"class":1332},[1105,3684,3686,3689,3691,3694,3697,3700],{"class":1107,"line":3685},47,[1105,3687,3688],{"class":1338},"      system",[1105,3690,1342],{"class":1332},[1105,3692,3693],{"class":1332}," `",[1105,3695,3696],{"class":1115},"Generate a short title (max 30 characters) based on the user's message. No quotes or punctuation.",[1105,3698,3699],{"class":1332},"`",[1105,3701,1360],{"class":1332},[1105,3703,3705,3708,3710,3713,3715,3718,3720,3722,3725,3728],{"class":1107,"line":3704},48,[1105,3706,3707],{"class":1338},"      prompt",[1105,3709,1342],{"class":1332},[1105,3711,3712],{"class":1328}," JSON",[1105,3714,1795],{"class":1332},[1105,3716,3717],{"class":1128},"stringify",[1105,3719,1329],{"class":1338},[1105,3721,1984],{"class":1328},[1105,3723,3724],{"class":1338},"[",[1105,3726,3727],{"class":3586},"0",[1105,3729,2313],{"class":1338},[1105,3731,3733,3735],{"class":1107,"line":3732},49,[1105,3734,3394],{"class":1332},[1105,3736,1467],{"class":1338},[1105,3738,3740],{"class":1107,"line":3739},50,[1105,3741,1397],{"emptyLinePlaceholder":21},[1105,3743,3745,3748,3750,3752,3755,3757,3759,3761,3763,3765,3767,3770,3772,3774,3776,3778,3780,3782,3785,3787,3790,3792,3794,3796,3798,3800,3802,3804,3806],{"class":1107,"line":3744},51,[1105,3746,3747],{"class":1318},"    await",[1105,3749,2433],{"class":1328},[1105,3751,1795],{"class":1332},[1105,3753,3754],{"class":1128},"update",[1105,3756,1329],{"class":1338},[1105,3758,2710],{"class":1328},[1105,3760,1795],{"class":1332},[1105,3762,1774],{"class":1328},[1105,3764,1869],{"class":1338},[1105,3766,1795],{"class":1332},[1105,3768,3769],{"class":1128},"set",[1105,3771,1329],{"class":1338},[1105,3773,1852],{"class":1332},[1105,3775,3657],{"class":1328},[1105,3777,1719],{"class":1332},[1105,3779,1869],{"class":1338},[1105,3781,1795],{"class":1332},[1105,3783,3784],{"class":1128},"where",[1105,3786,1329],{"class":1338},[1105,3788,3789],{"class":1128},"eq",[1105,3791,1329],{"class":1338},[1105,3793,2710],{"class":1328},[1105,3795,1795],{"class":1332},[1105,3797,1774],{"class":1328},[1105,3799,1795],{"class":1332},[1105,3801,2006],{"class":1328},[1105,3803,1703],{"class":1332},[1105,3805,3215],{"class":1328},[1105,3807,1959],{"class":1338},[1105,3809,3811],{"class":1107,"line":3810},52,[1105,3812,3611],{"class":1332},[1105,3814,3816],{"class":1107,"line":3815},53,[1105,3817,1397],{"emptyLinePlaceholder":21},[1105,3819,3821],{"class":1107,"line":3820},54,[1105,3822,3823],{"class":2683},"  \u002F\u002F Save the user message if it's a follow-up\n",[1105,3825,3827,3829,3832,3834,3836,3838,3840,3842,3845,3848,3851],{"class":1107,"line":3826},55,[1105,3828,2605],{"class":1575},[1105,3830,3831],{"class":1328}," lastMessage",[1105,3833,2615],{"class":1332},[1105,3835,3290],{"class":1328},[1105,3837,3724],{"class":1338},[1105,3839,1984],{"class":1328},[1105,3841,1795],{"class":1332},[1105,3843,3844],{"class":1328},"length",[1105,3846,3847],{"class":1332}," -",[1105,3849,3850],{"class":3586}," 1",[1105,3852,3180],{"class":1338},[1105,3854,3856,3858,3860,3863,3866,3868,3870,3872,3874,3876,3879,3881,3883,3885,3888,3890,3892],{"class":1107,"line":3855},56,[1105,3857,3554],{"class":1318},[1105,3859,1938],{"class":1338},[1105,3861,3862],{"class":1328},"lastMessage",[1105,3864,3865],{"class":1332},"?.",[1105,3867,2120],{"class":1328},[1105,3869,3366],{"class":1332},[1105,3871,1419],{"class":1332},[1105,3873,2138],{"class":1115},[1105,3875,1357],{"class":1332},[1105,3877,3878],{"class":1332}," &&",[1105,3880,3290],{"class":1328},[1105,3882,1795],{"class":1332},[1105,3884,3844],{"class":1328},[1105,3886,3887],{"class":1332}," >",[1105,3889,3850],{"class":3586},[1105,3891,3564],{"class":1338},[1105,3893,1333],{"class":1332},[1105,3895,3897,3899,3901,3903,3905,3907,3909,3911,3913,3915,3917,3919,3921],{"class":1107,"line":3896},57,[1105,3898,3747],{"class":1318},[1105,3900,2433],{"class":1328},[1105,3902,1795],{"class":1332},[1105,3904,2705],{"class":1128},[1105,3906,1329],{"class":1338},[1105,3908,2710],{"class":1328},[1105,3910,1795],{"class":1332},[1105,3912,1984],{"class":1328},[1105,3914,1869],{"class":1338},[1105,3916,1795],{"class":1332},[1105,3918,2721],{"class":1128},[1105,3920,1329],{"class":1338},[1105,3922,1333],{"class":1332},[1105,3924,3926,3929,3931,3933],{"class":1107,"line":3925},58,[1105,3927,3928],{"class":1338},"      chatId",[1105,3930,1342],{"class":1332},[1105,3932,3215],{"class":1328},[1105,3934,1360],{"class":1332},[1105,3936,3938,3941,3943,3945,3947,3949],{"class":1107,"line":3937},59,[1105,3939,3940],{"class":1338},"      role",[1105,3942,1342],{"class":1332},[1105,3944,1419],{"class":1332},[1105,3946,2138],{"class":1115},[1105,3948,1357],{"class":1332},[1105,3950,1360],{"class":1332},[1105,3952,3954,3957,3959,3961,3963],{"class":1107,"line":3953},60,[1105,3955,3956],{"class":1338},"      parts",[1105,3958,1342],{"class":1332},[1105,3960,3831],{"class":1328},[1105,3962,1795],{"class":1332},[1105,3964,2818],{"class":1328},[1105,3966,3968,3970],{"class":1107,"line":3967},61,[1105,3969,3394],{"class":1332},[1105,3971,1467],{"class":1338},[1105,3973,3975],{"class":1107,"line":3974},62,[1105,3976,3611],{"class":1332},[1105,3978,3980],{"class":1107,"line":3979},63,[1105,3981,1397],{"emptyLinePlaceholder":21},[1105,3983,3985],{"class":1107,"line":3984},64,[1105,3986,3987],{"class":2683},"  \u002F\u002F Create the streaming response\n",[1105,3989,3991,3993,3996,3998,4001,4003],{"class":1107,"line":3990},65,[1105,3992,2605],{"class":1575},[1105,3994,3995],{"class":1328}," stream",[1105,3997,2615],{"class":1332},[1105,3999,4000],{"class":1128}," createUIMessageStream",[1105,4002,1329],{"class":1338},[1105,4004,1333],{"class":1332},[1105,4006,4008,4011,4013,4016,4018,4021,4023,4025],{"class":1107,"line":4007},66,[1105,4009,4010],{"class":1128},"    execute",[1105,4012,1342],{"class":1332},[1105,4014,4015],{"class":1575}," async",[1105,4017,1926],{"class":1332},[1105,4019,4020],{"class":1929}," writer",[1105,4022,1933],{"class":1332},[1105,4024,1812],{"class":1575},[1105,4026,1408],{"class":1332},[1105,4028,4030,4033,4036,4038,4041,4043],{"class":1107,"line":4029},67,[1105,4031,4032],{"class":1575},"      const",[1105,4034,4035],{"class":1328}," result",[1105,4037,2615],{"class":1332},[1105,4039,4040],{"class":1128}," streamText",[1105,4042,1329],{"class":1338},[1105,4044,1333],{"class":1332},[1105,4046,4048,4051],{"class":1107,"line":4047},68,[1105,4049,4050],{"class":1328},"        model",[1105,4052,1360],{"class":1332},[1105,4054,4056,4059,4061,4063,4066,4068],{"class":1107,"line":4055},69,[1105,4057,4058],{"class":1338},"        system",[1105,4060,1342],{"class":1332},[1105,4062,3693],{"class":1332},[1105,4064,4065],{"class":1115},"You are a helpful AI assistant. Be concise and friendly.",[1105,4067,3699],{"class":1332},[1105,4069,1360],{"class":1332},[1105,4071,4073,4076,4078,4080,4083,4085,4087,4089],{"class":1107,"line":4072},70,[1105,4074,4075],{"class":1338},"        messages",[1105,4077,1342],{"class":1332},[1105,4079,2618],{"class":1318},[1105,4081,4082],{"class":1128}," convertToModelMessages",[1105,4084,1329],{"class":1338},[1105,4086,1984],{"class":1328},[1105,4088,1869],{"class":1338},[1105,4090,1360],{"class":1332},[1105,4092,4094,4097,4099],{"class":1107,"line":4093},71,[1105,4095,4096],{"class":1338},"        providerOptions",[1105,4098,1342],{"class":1332},[1105,4100,1408],{"class":1332},[1105,4102,4104,4107,4109],{"class":1107,"line":4103},72,[1105,4105,4106],{"class":1338},"          anthropic",[1105,4108,1342],{"class":1332},[1105,4110,1408],{"class":1332},[1105,4112,4114,4117,4119],{"class":1107,"line":4113},73,[1105,4115,4116],{"class":1338},"            thinking",[1105,4118,1342],{"class":1332},[1105,4120,1408],{"class":1332},[1105,4122,4124,4127,4129,4131,4134,4136],{"class":1107,"line":4123},74,[1105,4125,4126],{"class":1338},"              type",[1105,4128,1342],{"class":1332},[1105,4130,1419],{"class":1332},[1105,4132,4133],{"class":1115},"enabled",[1105,4135,1357],{"class":1332},[1105,4137,1360],{"class":1332},[1105,4139,4141,4144,4146],{"class":1107,"line":4140},75,[1105,4142,4143],{"class":1338},"              budgetTokens",[1105,4145,1342],{"class":1332},[1105,4147,4148],{"class":3586}," 2048\n",[1105,4150,4152],{"class":1107,"line":4151},76,[1105,4153,4154],{"class":1332},"            }\n",[1105,4156,4158],{"class":1107,"line":4157},77,[1105,4159,4160],{"class":1332},"          },\n",[1105,4162,4164,4167,4169],{"class":1107,"line":4163},78,[1105,4165,4166],{"class":1338},"          google",[1105,4168,1342],{"class":1332},[1105,4170,1408],{"class":1332},[1105,4172,4174,4177,4179],{"class":1107,"line":4173},79,[1105,4175,4176],{"class":1338},"            thinkingConfig",[1105,4178,1342],{"class":1332},[1105,4180,1408],{"class":1332},[1105,4182,4184,4187,4189,4193],{"class":1107,"line":4183},80,[1105,4185,4186],{"class":1338},"              includeThoughts",[1105,4188,1342],{"class":1332},[1105,4190,4192],{"class":4191},"sfNiH"," true",[1105,4194,1360],{"class":1332},[1105,4196,4198,4201,4203,4205,4208],{"class":1107,"line":4197},81,[1105,4199,4200],{"class":1338},"              thinkingLevel",[1105,4202,1342],{"class":1332},[1105,4204,1419],{"class":1332},[1105,4206,4207],{"class":1115},"low",[1105,4209,1383],{"class":1332},[1105,4211,4213],{"class":1107,"line":4212},82,[1105,4214,4154],{"class":1332},[1105,4216,4218],{"class":1107,"line":4217},83,[1105,4219,4160],{"class":1332},[1105,4221,4223,4226,4228],{"class":1107,"line":4222},84,[1105,4224,4225],{"class":1338},"          openai",[1105,4227,1342],{"class":1332},[1105,4229,1408],{"class":1332},[1105,4231,4233,4236,4238,4240,4242,4244],{"class":1107,"line":4232},85,[1105,4234,4235],{"class":1338},"            reasoningEffort",[1105,4237,1342],{"class":1332},[1105,4239,1419],{"class":1332},[1105,4241,4207],{"class":1115},[1105,4243,1357],{"class":1332},[1105,4245,1360],{"class":1332},[1105,4247,4249,4252,4254,4256,4259],{"class":1107,"line":4248},86,[1105,4250,4251],{"class":1338},"            reasoningSummary",[1105,4253,1342],{"class":1332},[1105,4255,1419],{"class":1332},[1105,4257,4258],{"class":1115},"detailed",[1105,4260,1383],{"class":1332},[1105,4262,4264],{"class":1107,"line":4263},87,[1105,4265,4266],{"class":1332},"          }\n",[1105,4268,4270],{"class":1107,"line":4269},88,[1105,4271,4272],{"class":1332},"        }\n",[1105,4274,4276,4279],{"class":1107,"line":4275},89,[1105,4277,4278],{"class":1332},"      }",[1105,4280,1467],{"class":1338},[1105,4282,4284],{"class":1107,"line":4283},90,[1105,4285,1397],{"emptyLinePlaceholder":21},[1105,4287,4289],{"class":1107,"line":4288},91,[1105,4290,4291],{"class":2683},"      \u002F\u002F Notify the client that a title was generated\n",[1105,4293,4295,4298,4300,4302,4304,4306,4308,4310],{"class":1107,"line":4294},92,[1105,4296,4297],{"class":1318},"      if",[1105,4299,1938],{"class":1338},[1105,4301,3559],{"class":1332},[1105,4303,262],{"class":1328},[1105,4305,1795],{"class":1332},[1105,4307,3638],{"class":1328},[1105,4309,3564],{"class":1338},[1105,4311,1333],{"class":1332},[1105,4313,4315,4318,4320,4323,4325],{"class":1107,"line":4314},93,[1105,4316,4317],{"class":1328},"        writer",[1105,4319,1795],{"class":1332},[1105,4321,4322],{"class":1128},"write",[1105,4324,1329],{"class":1338},[1105,4326,1333],{"class":1332},[1105,4328,4330,4333,4335,4337,4340,4342],{"class":1107,"line":4329},94,[1105,4331,4332],{"class":1338},"          type",[1105,4334,1342],{"class":1332},[1105,4336,1419],{"class":1332},[1105,4338,4339],{"class":1115},"data-chat-title",[1105,4341,1357],{"class":1332},[1105,4343,1360],{"class":1332},[1105,4345,4347,4350,4352,4354,4356,4358,4360,4363,4365],{"class":1107,"line":4346},95,[1105,4348,4349],{"class":1338},"          data",[1105,4351,1342],{"class":1332},[1105,4353,1697],{"class":1332},[1105,4355,2610],{"class":1338},[1105,4357,1342],{"class":1332},[1105,4359,1419],{"class":1332},[1105,4361,4362],{"class":1115},"Title generated",[1105,4364,1357],{"class":1332},[1105,4366,3115],{"class":1332},[1105,4368,4370,4373,4375],{"class":1107,"line":4369},96,[1105,4371,4372],{"class":1338},"          transient",[1105,4374,1342],{"class":1332},[1105,4376,4377],{"class":4191}," true\n",[1105,4379,4381,4384],{"class":1107,"line":4380},97,[1105,4382,4383],{"class":1332},"        }",[1105,4385,1467],{"class":1338},[1105,4387,4389],{"class":1107,"line":4388},98,[1105,4390,4391],{"class":1332},"      }\n",[1105,4393,4395],{"class":1107,"line":4394},99,[1105,4396,1397],{"emptyLinePlaceholder":21},[1105,4398,4400,4403,4405,4408,4410,4413,4415,4418],{"class":1107,"line":4399},100,[1105,4401,4402],{"class":1328},"      writer",[1105,4404,1795],{"class":1332},[1105,4406,4407],{"class":1128},"merge",[1105,4409,1329],{"class":1338},[1105,4411,4412],{"class":1328},"result",[1105,4414,1795],{"class":1332},[1105,4416,4417],{"class":1128},"toUIMessageStream",[1105,4419,1895],{"class":1338},[1105,4421,4423],{"class":1107,"line":4422},101,[1105,4424,4425],{"class":1332},"    },\n",[1105,4427,4429,4432,4434,4436,4438,4440,4442,4444],{"class":1107,"line":4428},102,[1105,4430,4431],{"class":1128},"    onFinish",[1105,4433,1342],{"class":1332},[1105,4435,4015],{"class":1575},[1105,4437,1926],{"class":1332},[1105,4439,3290],{"class":1929},[1105,4441,1933],{"class":1332},[1105,4443,1812],{"class":1575},[1105,4445,1408],{"class":1332},[1105,4447,4449],{"class":1107,"line":4448},103,[1105,4450,4451],{"class":2683},"      \u002F\u002F Save the assistant's response to the database\n",[1105,4453,4455,4458,4460,4462,4464,4466,4468,4470,4472,4474,4476,4478,4480,4482,4484,4487,4489,4492,4494,4496],{"class":1107,"line":4454},104,[1105,4456,4457],{"class":1318},"      await",[1105,4459,2433],{"class":1328},[1105,4461,1795],{"class":1332},[1105,4463,2705],{"class":1128},[1105,4465,1329],{"class":1338},[1105,4467,2710],{"class":1328},[1105,4469,1795],{"class":1332},[1105,4471,1984],{"class":1328},[1105,4473,1869],{"class":1338},[1105,4475,1795],{"class":1332},[1105,4477,2721],{"class":1128},[1105,4479,1329],{"class":1338},[1105,4481,1984],{"class":1328},[1105,4483,1795],{"class":1332},[1105,4485,4486],{"class":1128},"map",[1105,4488,1329],{"class":1338},[1105,4490,4491],{"class":1929},"message",[1105,4493,1812],{"class":1575},[1105,4495,1938],{"class":1338},[1105,4497,1333],{"class":1332},[1105,4499,4501,4504,4506,4508,4510,4512],{"class":1107,"line":4500},105,[1105,4502,4503],{"class":1338},"        chatId",[1105,4505,1342],{"class":1332},[1105,4507,2783],{"class":1328},[1105,4509,1795],{"class":1332},[1105,4511,2006],{"class":1328},[1105,4513,1360],{"class":1332},[1105,4515,4517,4520,4522,4524,4526,4528,4530,4532,4534,4536,4539,4541,4543,4545],{"class":1107,"line":4516},106,[1105,4518,4519],{"class":1338},"        role",[1105,4521,1342],{"class":1332},[1105,4523,2610],{"class":1328},[1105,4525,1795],{"class":1332},[1105,4527,2120],{"class":1328},[1105,4529,3531],{"class":1318},[1105,4531,1419],{"class":1332},[1105,4533,2138],{"class":1115},[1105,4535,1357],{"class":1332},[1105,4537,4538],{"class":1332}," |",[1105,4540,1419],{"class":1332},[1105,4542,2147],{"class":1115},[1105,4544,1357],{"class":1332},[1105,4546,1360],{"class":1332},[1105,4548,4550,4553,4555,4557,4559],{"class":1107,"line":4549},107,[1105,4551,4552],{"class":1338},"        parts",[1105,4554,1342],{"class":1332},[1105,4556,2610],{"class":1328},[1105,4558,1795],{"class":1332},[1105,4560,2818],{"class":1328},[1105,4562,4564,4566],{"class":1107,"line":4563},108,[1105,4565,4278],{"class":1332},[1105,4567,4568],{"class":1338},")))\n",[1105,4570,4572],{"class":1107,"line":4571},109,[1105,4573,4574],{"class":1332},"    }\n",[1105,4576,4578,4580],{"class":1107,"line":4577},110,[1105,4579,2406],{"class":1332},[1105,4581,1467],{"class":1338},[1105,4583,4585],{"class":1107,"line":4584},111,[1105,4586,1397],{"emptyLinePlaceholder":21},[1105,4588,4590,4592,4595,4597,4599,4601,4603],{"class":1107,"line":4589},112,[1105,4591,2833],{"class":1318},[1105,4593,4594],{"class":1128}," createUIMessageStreamResponse",[1105,4596,1329],{"class":1338},[1105,4598,1852],{"class":1332},[1105,4600,3995],{"class":1328},[1105,4602,1719],{"class":1332},[1105,4604,1467],{"class":1338},[1105,4606,4608,4610],{"class":1107,"line":4607},113,[1105,4609,1464],{"class":1332},[1105,4611,1467],{"class":1328},[995,4613,4614],{},"Here's what each part does:",[995,4616,4617],{},[1013,4618,4619],{},"AI Gateway",[995,4621,4622,4623,4626],{},"Thanks to ",[1049,4624,1086],{"href":1084,"rel":4625},[1053],", we can use any AI model supported by the gateway just by specifying the model name.",[995,4628,4629],{},[1013,4630,4631],{},"Automatic Title Generation",[995,4633,4634,4635,4642],{},"When a chat doesn't have a title yet, we use ",[1049,4636,4639],{"href":4637,"rel":4638},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-core\u002Fgenerate-text#generatetext",[1053],[1055,4640,4641],{},"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\".",[995,4644,4645],{},[1013,4646,4647],{},"Streaming with streamText",[995,4649,4650,4651,4656],{},"The ",[1049,4652,4654],{"href":2852,"rel":4653},[1053],[1055,4655,2856],{}," function generates a streaming response from the AI model. Key options include:",[1007,4658,4659,4665,4670],{},[1010,4660,4661,4664],{},[1055,4662,4663],{},"model",": The AI model to use",[1010,4666,4667,4669],{},[1055,4668,2156],{},": Instructions that guide the AI's behavior",[1010,4671,4672,4674],{},[1055,4673,1984],{},": The conversation history",[995,4676,4677],{},[1013,4678,4679],{},"UIMessageStream",[995,4681,4650,4682,1058,4688,4694],{},[1049,4683,4686],{"href":4684,"rel":4685},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream#createuimessagestream",[1053],[1055,4687,2864],{},[1049,4689,4692],{"href":4690,"rel":4691},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fcreate-ui-message-stream-response#createuimessagestreamresponse",[1053],[1055,4693,2872],{}," 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.",[995,4696,4650,4697,4700,4701,4703,4704,4707],{},[1055,4698,4699],{},"writer.write()"," method allows sending custom data events to the client (like ",[1055,4702,4339],{},"), while ",[1055,4705,4706],{},"onFinish"," is called when streaming completes, perfect for persisting the assistant's response.",[1133,4709,4711],{"id":4710},"fetching-a-chat","Fetching a chat",[995,4713,4714],{},"Add an endpoint to fetch existing chat data from your database:",[1305,4716,4717],{},[1096,4718,4721],{"className":1309,"code":4719,"filename":4720,"language":1311,"meta":1101,"style":1101},"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",[1055,4722,4723,4749,4772,4794,4812,4816,4838,4870,4884,4896,4900,4928,4959,4968,4977,5006,5010,5014,5020,5024,5038,5070,5074,5078,5084],{"__ignoreMap":1101},[1105,4724,4725,4727,4729,4731,4733,4735,4737,4739,4741,4743,4745,4747],{"class":1107,"line":1108},[1105,4726,1694],{"class":1318},[1105,4728,1697],{"class":1332},[1105,4730,2892],{"class":1328},[1105,4732,1703],{"class":1332},[1105,4734,2490],{"class":1328},[1105,4736,1703],{"class":1332},[1105,4738,2901],{"class":1328},[1105,4740,1719],{"class":1332},[1105,4742,1722],{"class":1318},[1105,4744,1419],{"class":1332},[1105,4746,1133],{"class":1115},[1105,4748,1383],{"class":1332},[1105,4750,4751,4753,4755,4758,4760,4762,4764,4766,4768,4770],{"class":1107,"line":1125},[1105,4752,1694],{"class":1318},[1105,4754,1697],{"class":1332},[1105,4756,4757],{"class":1328}," asc",[1105,4759,1703],{"class":1332},[1105,4761,2924],{"class":1328},[1105,4763,1719],{"class":1332},[1105,4765,1722],{"class":1318},[1105,4767,1419],{"class":1332},[1105,4769,1747],{"class":1115},[1105,4771,1383],{"class":1332},[1105,4773,4774,4776,4778,4780,4782,4784,4786,4788,4790,4792],{"class":1107,"line":1348},[1105,4775,1694],{"class":1318},[1105,4777,1697],{"class":1332},[1105,4779,2433],{"class":1328},[1105,4781,1703],{"class":1332},[1105,4783,2541],{"class":1328},[1105,4785,1719],{"class":1332},[1105,4787,1722],{"class":1318},[1105,4789,1419],{"class":1332},[1105,4791,2550],{"class":1115},[1105,4793,1383],{"class":1332},[1105,4795,4796,4798,4800,4802,4804,4806,4808,4810],{"class":1107,"line":1363},[1105,4797,1694],{"class":1318},[1105,4799,1697],{"class":1332},[1105,4801,2561],{"class":1328},[1105,4803,1719],{"class":1332},[1105,4805,1722],{"class":1318},[1105,4807,1419],{"class":1332},[1105,4809,2570],{"class":1115},[1105,4811,1383],{"class":1332},[1105,4813,4814],{"class":1107,"line":1375},[1105,4815,1397],{"emptyLinePlaceholder":21},[1105,4817,4818,4820,4822,4824,4826,4828,4830,4832,4834,4836],{"class":1107,"line":1386},[1105,4819,1319],{"class":1318},[1105,4821,1322],{"class":1318},[1105,4823,2490],{"class":1128},[1105,4825,1329],{"class":1328},[1105,4827,2589],{"class":1575},[1105,4829,1938],{"class":1332},[1105,4831,2594],{"class":1929},[1105,4833,1869],{"class":1332},[1105,4835,1812],{"class":1575},[1105,4837,1408],{"class":1332},[1105,4839,4840,4842,4844,4846,4848,4850,4852,4854,4856,4858,4860,4862,4864,4866,4868],{"class":1107,"line":1394},[1105,4841,2605],{"class":1575},[1105,4843,1697],{"class":1332},[1105,4845,3215],{"class":1328},[1105,4847,1719],{"class":1332},[1105,4849,2615],{"class":1332},[1105,4851,2618],{"class":1318},[1105,4853,2901],{"class":1128},[1105,4855,1329],{"class":1338},[1105,4857,2594],{"class":1328},[1105,4859,1703],{"class":1332},[1105,4861,2561],{"class":1328},[1105,4863,1795],{"class":1332},[1105,4865,2633],{"class":1128},[1105,4867,1329],{"class":1338},[1105,4869,1333],{"class":1332},[1105,4871,4872,4874,4876,4878,4880,4882],{"class":1107,"line":1400},[1105,4873,3244],{"class":1338},[1105,4875,1342],{"class":1332},[1105,4877,2561],{"class":1328},[1105,4879,1795],{"class":1332},[1105,4881,3253],{"class":1128},[1105,4883,2661],{"class":1338},[1105,4885,4886,4888,4890,4892,4894],{"class":1107,"line":1411},[1105,4887,2406],{"class":1332},[1105,4889,1869],{"class":1338},[1105,4891,1795],{"class":1332},[1105,4893,2672],{"class":1328},[1105,4895,1467],{"class":1338},[1105,4897,4898],{"class":1107,"line":1427},[1105,4899,1397],{"emptyLinePlaceholder":21},[1105,4901,4902,4904,4906,4908,4910,4912,4914,4916,4918,4920,4922,4924,4926],{"class":1107,"line":1433},[1105,4903,2605],{"class":1575},[1105,4905,2783],{"class":1328},[1105,4907,2615],{"class":1332},[1105,4909,2618],{"class":1318},[1105,4911,2433],{"class":1328},[1105,4913,1795],{"class":1332},[1105,4915,3479],{"class":1328},[1105,4917,1795],{"class":1332},[1105,4919,1774],{"class":1328},[1105,4921,1795],{"class":1332},[1105,4923,3488],{"class":1128},[1105,4925,1329],{"class":1338},[1105,4927,1333],{"class":1332},[1105,4929,4930,4932,4934,4936,4938,4940,4942,4944,4946,4948,4950,4952,4954,4957],{"class":1107,"line":1438},[1105,4931,3498],{"class":1338},[1105,4933,1342],{"class":1332},[1105,4935,1938],{"class":1338},[1105,4937,3789],{"class":1128},[1105,4939,1329],{"class":1338},[1105,4941,2710],{"class":1328},[1105,4943,1795],{"class":1332},[1105,4945,1774],{"class":1328},[1105,4947,1795],{"class":1332},[1105,4949,2006],{"class":1328},[1105,4951,1703],{"class":1332},[1105,4953,3215],{"class":1328},[1105,4955,4956],{"class":1338},"))",[1105,4958,1360],{"class":1332},[1105,4960,4961,4964,4966],{"class":1107,"line":1461},[1105,4962,4963],{"class":1338},"    with",[1105,4965,1342],{"class":1332},[1105,4967,1408],{"class":1332},[1105,4969,4970,4973,4975],{"class":1107,"line":1966},[1105,4971,4972],{"class":1338},"      messages",[1105,4974,1342],{"class":1332},[1105,4976,1408],{"class":1332},[1105,4978,4979,4982,4984,4987,4989,4991,4993,4995,4997,4999,5001,5004],{"class":1107,"line":1993},[1105,4980,4981],{"class":1128},"        orderBy",[1105,4983,1342],{"class":1332},[1105,4985,4986],{"class":1332}," ()",[1105,4988,1812],{"class":1575},[1105,4990,4757],{"class":1128},[1105,4992,1329],{"class":1338},[1105,4994,2710],{"class":1328},[1105,4996,1795],{"class":1332},[1105,4998,1984],{"class":1328},[1105,5000,1795],{"class":1332},[1105,5002,5003],{"class":1328},"createdAt",[1105,5005,1467],{"class":1338},[1105,5007,5008],{"class":1107,"line":2039},[1105,5009,4391],{"class":1332},[1105,5011,5012],{"class":1107,"line":2106},[1105,5013,4574],{"class":1332},[1105,5015,5016,5018],{"class":1107,"line":2176},[1105,5017,2406],{"class":1332},[1105,5019,1467],{"class":1338},[1105,5021,5022],{"class":1107,"line":2216},[1105,5023,1397],{"emptyLinePlaceholder":21},[1105,5025,5026,5028,5030,5032,5034,5036],{"class":1107,"line":2267},[1105,5027,3554],{"class":1318},[1105,5029,1938],{"class":1338},[1105,5031,3559],{"class":1332},[1105,5033,262],{"class":1328},[1105,5035,3564],{"class":1338},[1105,5037,1333],{"class":1332},[1105,5039,5040,5042,5044,5046,5048,5050,5052,5054,5056,5058,5060,5062,5064,5066,5068],{"class":1107,"line":2280},[1105,5041,3572],{"class":1318},[1105,5043,2892],{"class":1128},[1105,5045,1329],{"class":1338},[1105,5047,1852],{"class":1332},[1105,5049,3581],{"class":1338},[1105,5051,1342],{"class":1332},[1105,5053,3587],{"class":3586},[1105,5055,1703],{"class":1332},[1105,5057,3592],{"class":1338},[1105,5059,1342],{"class":1332},[1105,5061,1419],{"class":1332},[1105,5063,3599],{"class":1115},[1105,5065,1357],{"class":1332},[1105,5067,1719],{"class":1332},[1105,5069,1467],{"class":1338},[1105,5071,5072],{"class":1107,"line":2310},[1105,5073,3611],{"class":1332},[1105,5075,5076],{"class":1107,"line":2316},[1105,5077,1397],{"emptyLinePlaceholder":21},[1105,5079,5080,5082],{"class":1107,"line":2321},[1105,5081,2833],{"class":1318},[1105,5083,2836],{"class":1328},[1105,5085,5086,5088],{"class":1107,"line":2353},[1105,5087,1464],{"class":1332},[1105,5089,1467],{"class":1328},[999,5091,5093],{"id":5092},"wire-up-the-ui","Wire up the UI",[995,5095,5096,5097,5102,5103,5108],{},"Nuxt UI provides purpose-built components for AI chat interfaces: ",[1049,5098,5099],{"href":281},[1055,5100,5101],{},"UChatPrompt"," for the input area and ",[1049,5104,5105],{"href":271},[1055,5106,5107],{},"UChatMessages"," for displaying the conversation.",[1133,5110,5112],{"id":5111},"creating-the-home-page","Creating the home page",[995,5114,5115,5116,5120],{},"The home page is where users start a new conversation. The ",[1049,5117,5118],{"href":281},[1055,5119,5101],{}," component provides a textarea with auto-resize, keyboard shortcuts, and a submit button:",[1305,5122,5123],{},[1096,5124,5128],{"className":1537,"code":5125,"filename":5126,"highlights":5127,"language":34,"meta":1101,"style":1101},"\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",[3458,3464,3495,3539,3546,3551,3569,3608,3614],[1055,5129,5130,5153,5172,5190,5194,5208,5234,5238,5251,5255,5260,5286,5302,5311,5319,5333,5371,5375,5379,5385,5389,5394,5420,5425,5433,5437,5445,5466,5480,5501,5522,5527,5536,5540,5548,5563,5578,5593,5608,5623,5629,5652,5661,5670,5678,5686],{"__ignoreMap":1101},[1105,5131,5132,5134,5137,5140,5143,5145,5147,5149,5151],{"class":1107,"line":1108},[1105,5133,1547],{"class":1332},[1105,5135,5136],{"class":1338},"script",[1105,5138,5139],{"class":1575}," setup",[1105,5141,5142],{"class":1575}," lang",[1105,5144,1579],{"class":1332},[1105,5146,1506],{"class":1332},[1105,5148,1311],{"class":1115},[1105,5150,1506],{"class":1332},[1105,5152,1553],{"class":1332},[1105,5154,5155,5157,5160,5162,5165,5167,5170],{"class":1107,"line":1125},[1105,5156,3054],{"class":1575},[1105,5158,5159],{"class":1328}," input ",[1105,5161,1579],{"class":1332},[1105,5163,5164],{"class":1128}," ref",[1105,5166,1329],{"class":1328},[1105,5168,5169],{"class":1332},"''",[1105,5171,1467],{"class":1328},[1105,5173,5174,5176,5179,5181,5183,5185,5188],{"class":1107,"line":1348},[1105,5175,3054],{"class":1575},[1105,5177,5178],{"class":1328}," loading ",[1105,5180,1579],{"class":1332},[1105,5182,5164],{"class":1128},[1105,5184,1329],{"class":1328},[1105,5186,5187],{"class":4191},"false",[1105,5189,1467],{"class":1328},[1105,5191,5192],{"class":1107,"line":1363},[1105,5193,1397],{"emptyLinePlaceholder":21},[1105,5195,5196,5198,5201,5204,5206],{"class":1107,"line":1375},[1105,5197,2589],{"class":1575},[1105,5199,5200],{"class":1575}," function",[1105,5202,5203],{"class":1128}," createChat",[1105,5205,1792],{"class":1332},[1105,5207,1408],{"class":1332},[1105,5209,5210,5212,5214,5216,5219,5221,5223,5225,5228,5231],{"class":1107,"line":1386},[1105,5211,3554],{"class":1318},[1105,5213,1938],{"class":1338},[1105,5215,3559],{"class":1332},[1105,5217,5218],{"class":1328},"input",[1105,5220,1795],{"class":1332},[1105,5222,3339],{"class":1328},[1105,5224,1795],{"class":1332},[1105,5226,5227],{"class":1128},"trim",[1105,5229,5230],{"class":1338},"()) ",[1105,5232,5233],{"class":1318},"return\n",[1105,5235,5236],{"class":1107,"line":1394},[1105,5237,1397],{"emptyLinePlaceholder":21},[1105,5239,5240,5243,5245,5247,5249],{"class":1107,"line":1400},[1105,5241,5242],{"class":1328},"  loading",[1105,5244,1795],{"class":1332},[1105,5246,3339],{"class":1328},[1105,5248,2615],{"class":1332},[1105,5250,4377],{"class":4191},[1105,5252,5253],{"class":1107,"line":1411},[1105,5254,1397],{"emptyLinePlaceholder":21},[1105,5256,5257],{"class":1107,"line":1427},[1105,5258,5259],{"class":2683},"  \u002F\u002F Create a new chat on the server\n",[1105,5261,5262,5264,5266,5268,5270,5273,5275,5277,5280,5282,5284],{"class":1107,"line":1433},[1105,5263,2605],{"class":1575},[1105,5265,2783],{"class":1328},[1105,5267,2615],{"class":1332},[1105,5269,2618],{"class":1318},[1105,5271,5272],{"class":1128}," $fetch",[1105,5274,1329],{"class":1338},[1105,5276,1357],{"class":1332},[1105,5278,5279],{"class":1115},"\u002Fapi\u002Fchats",[1105,5281,1357],{"class":1332},[1105,5283,1703],{"class":1332},[1105,5285,1408],{"class":1332},[1105,5287,5288,5291,5293,5295,5298,5300],{"class":1107,"line":1438},[1105,5289,5290],{"class":1338},"    method",[1105,5292,1342],{"class":1332},[1105,5294,1419],{"class":1332},[1105,5296,5297],{"class":1115},"POST",[1105,5299,1357],{"class":1332},[1105,5301,1360],{"class":1332},[1105,5303,5304,5307,5309],{"class":1107,"line":1461},[1105,5305,5306],{"class":1338},"    body",[1105,5308,1342],{"class":1332},[1105,5310,1408],{"class":1332},[1105,5312,5313,5315,5317],{"class":1107,"line":1966},[1105,5314,3379],{"class":1338},[1105,5316,1342],{"class":1332},[1105,5318,1408],{"class":1332},[1105,5320,5321,5323,5325,5327,5329,5331],{"class":1107,"line":1993},[1105,5322,4519],{"class":1338},[1105,5324,1342],{"class":1332},[1105,5326,1419],{"class":1332},[1105,5328,2138],{"class":1115},[1105,5330,1357],{"class":1332},[1105,5332,1360],{"class":1332},[1105,5334,5335,5337,5339,5341,5343,5345,5347,5349,5352,5354,5356,5358,5360,5363,5365,5367,5369],{"class":1107,"line":2039},[1105,5336,4552],{"class":1338},[1105,5338,1342],{"class":1332},[1105,5340,1446],{"class":1338},[1105,5342,1852],{"class":1332},[1105,5344,2512],{"class":1338},[1105,5346,1342],{"class":1332},[1105,5348,1419],{"class":1332},[1105,5350,5351],{"class":1115},"text",[1105,5353,1357],{"class":1332},[1105,5355,1703],{"class":1332},[1105,5357,1706],{"class":1338},[1105,5359,1342],{"class":1332},[1105,5361,5362],{"class":1328}," input",[1105,5364,1795],{"class":1332},[1105,5366,3339],{"class":1328},[1105,5368,1719],{"class":1332},[1105,5370,3180],{"class":1338},[1105,5372,5373],{"class":1107,"line":2106},[1105,5374,4391],{"class":1332},[1105,5376,5377],{"class":1107,"line":2176},[1105,5378,4574],{"class":1332},[1105,5380,5381,5383],{"class":1107,"line":2216},[1105,5382,2406],{"class":1332},[1105,5384,1467],{"class":1338},[1105,5386,5387],{"class":1107,"line":2267},[1105,5388,1397],{"emptyLinePlaceholder":21},[1105,5390,5391],{"class":1107,"line":2280},[1105,5392,5393],{"class":2683},"  \u002F\u002F Navigate to the chat page\n",[1105,5395,5396,5399,5401,5403,5406,5409,5411,5413,5415,5418],{"class":1107,"line":2310},[1105,5397,5398],{"class":1128},"  navigateTo",[1105,5400,1329],{"class":1338},[1105,5402,3699],{"class":1332},[1105,5404,5405],{"class":1115},"\u002Fchat\u002F",[1105,5407,5408],{"class":1332},"${",[1105,5410,262],{"class":1328},[1105,5412,1795],{"class":1332},[1105,5414,2006],{"class":1328},[1105,5416,5417],{"class":1332},"}`",[1105,5419,1467],{"class":1338},[1105,5421,5422],{"class":1107,"line":2316},[1105,5423,5424],{"class":1332},"}\n",[1105,5426,5427,5429,5431],{"class":1107,"line":2321},[1105,5428,1623],{"class":1332},[1105,5430,5136],{"class":1338},[1105,5432,1553],{"class":1332},[1105,5434,5435],{"class":1107,"line":2353},[1105,5436,1397],{"emptyLinePlaceholder":21},[1105,5438,5439,5441,5443],{"class":1107,"line":2369},[1105,5440,1547],{"class":1332},[1105,5442,1550],{"class":1338},[1105,5444,1553],{"class":1332},[1105,5446,5447,5449,5452,5455,5457,5459,5462,5464],{"class":1107,"line":2387},[1105,5448,1560],{"class":1332},[1105,5450,5451],{"class":1338},"UDashboardPanel",[1105,5453,5454],{"class":1575}," :ui",[1105,5456,1579],{"class":1332},[1105,5458,1506],{"class":1332},[1105,5460,5461],{"class":1115},"{ body: 'p-0 sm:p-0' }",[1105,5463,1506],{"class":1332},[1105,5465,1553],{"class":1332},[1105,5467,5468,5470,5472,5475,5478],{"class":1107,"line":2403},[1105,5469,1569],{"class":1332},[1105,5471,1550],{"class":1338},[1105,5473,5474],{"class":1332}," #",[1105,5476,5477],{"class":1575},"body",[1105,5479,1553],{"class":1332},[1105,5481,5482,5484,5487,5490,5492,5494,5497,5499],{"class":1107,"line":2411},[1105,5483,1593],{"class":1332},[1105,5485,5486],{"class":1338},"UContainer",[1105,5488,5489],{"class":1575}," class",[1105,5491,1579],{"class":1332},[1105,5493,1506],{"class":1332},[1105,5495,5496],{"class":1115},"min-h-dvh flex flex-col justify-center gap-6 py-8",[1105,5498,1506],{"class":1332},[1105,5500,1553],{"class":1332},[1105,5502,5503,5506,5509,5511,5513,5515,5518,5520],{"class":1107,"line":3391},[1105,5504,5505],{"class":1332},"        \u003C",[1105,5507,5508],{"class":1338},"h1",[1105,5510,5489],{"class":1575},[1105,5512,1579],{"class":1332},[1105,5514,1506],{"class":1332},[1105,5516,5517],{"class":1115},"text-3xl sm:text-4xl text-highlighted font-bold",[1105,5519,1506],{"class":1332},[1105,5521,1553],{"class":1332},[1105,5523,5524],{"class":1107,"line":3408},[1105,5525,5526],{"class":1328},"          How can I help you today?\n",[1105,5528,5529,5532,5534],{"class":1107,"line":3440},[1105,5530,5531],{"class":1332},"        \u003C\u002F",[1105,5533,5508],{"class":1338},[1105,5535,1553],{"class":1332},[1105,5537,5538],{"class":1107,"line":3453},[1105,5539,1397],{"emptyLinePlaceholder":21},[1105,5541,5543,5545],{"class":5542,"line":3458},[1107,1557],[1105,5544,5505],{"class":1332},[1105,5546,5547],{"class":1338},"UChatPrompt\n",[1105,5549,5551,5554,5556,5558,5560],{"class":5550,"line":3464},[1107,1557],[1105,5552,5553],{"class":1575},"          v-model",[1105,5555,1579],{"class":1332},[1105,5557,1506],{"class":1332},[1105,5559,5218],{"class":1115},[1105,5561,5562],{"class":1332},"\"\n",[1105,5564,5566,5569,5571,5573,5576],{"class":5565,"line":3495},[1107,1557],[1105,5567,5568],{"class":1575},"          :status",[1105,5570,1579],{"class":1332},[1105,5572,1506],{"class":1332},[1105,5574,5575],{"class":1115},"loading ? 'streaming' : 'ready'",[1105,5577,5562],{"class":1332},[1105,5579,5581,5584,5586,5588,5591],{"class":5580,"line":3539},[1107,1557],[1105,5582,5583],{"class":1575},"          variant",[1105,5585,1579],{"class":1332},[1105,5587,1506],{"class":1332},[1105,5589,5590],{"class":1115},"subtle",[1105,5592,5562],{"class":1332},[1105,5594,5596,5599,5601,5603,5606],{"class":5595,"line":3546},[1107,1557],[1105,5597,5598],{"class":1575},"          placeholder",[1105,5600,1579],{"class":1332},[1105,5602,1506],{"class":1332},[1105,5604,5605],{"class":1115},"Ask me anything...",[1105,5607,5562],{"class":1332},[1105,5609,5611,5614,5616,5618,5621],{"class":5610,"line":3551},[1107,1557],[1105,5612,5613],{"class":1575},"          @submit",[1105,5615,1579],{"class":1332},[1105,5617,1506],{"class":1332},[1105,5619,5620],{"class":1115},"createChat",[1105,5622,5562],{"class":1332},[1105,5624,5626],{"class":5625,"line":3569},[1107,1557],[1105,5627,5628],{"class":1332},"        >\n",[1105,5630,5632,5635,5638,5641,5643,5645,5648,5650],{"class":5631,"line":3608},[1107,1557],[1105,5633,5634],{"class":1332},"          \u003C",[1105,5636,5637],{"class":1338},"UChatPromptSubmit",[1105,5639,5640],{"class":1575}," color",[1105,5642,1579],{"class":1332},[1105,5644,1506],{"class":1332},[1105,5646,5647],{"class":1115},"neutral",[1105,5649,1506],{"class":1332},[1105,5651,1599],{"class":1332},[1105,5653,5655,5657,5659],{"class":5654,"line":3614},[1107,1557],[1105,5656,5531],{"class":1332},[1105,5658,5101],{"class":1338},[1105,5660,1553],{"class":1332},[1105,5662,5663,5666,5668],{"class":1107,"line":3619},[1105,5664,5665],{"class":1332},"      \u003C\u002F",[1105,5667,5486],{"class":1338},[1105,5669,1553],{"class":1332},[1105,5671,5672,5674,5676],{"class":1107,"line":3625},[1105,5673,1604],{"class":1332},[1105,5675,1550],{"class":1338},[1105,5677,1553],{"class":1332},[1105,5679,5680,5682,5684],{"class":1107,"line":3645},[1105,5681,1614],{"class":1332},[1105,5683,5451],{"class":1338},[1105,5685,1553],{"class":1332},[1105,5687,5688,5690,5692],{"class":1107,"line":3673},[1105,5689,1623],{"class":1332},[1105,5691,1550],{"class":1338},[1105,5693,1553],{"class":1332},[995,5695,4650,5696,5700],{},[1049,5697,5698],{"href":281},[1055,5699,5101],{}," component automatically handles:",[1007,5702,5703,5710,5713,5723],{},[1010,5704,5705,5706],{},"Form submission when pressing ",[5707,5708],"kbd",{"value":5709},"enter",[1010,5711,5712],{},"Auto-resizing as you type",[1010,5714,5715,5716,5719,5720],{},"A loading state when ",[1055,5717,5718],{},"status"," is set to ",[1055,5721,5722],{},"streaming",[1010,5724,5725],{},"Focus management and keyboard shortcuts",[1133,5727,5729],{"id":5728},"setting-up-markdown-rendering","Setting up Markdown rendering",[995,5731,5732,5733,5740,5741,5748,5749,5751,5752,5757],{},"AI models often respond with Markdown formatting (code blocks, lists, bold text, etc.). Before building the chat page, create a custom ",[1049,5734,5737],{"href":5735,"rel":5736},"https:\u002F\u002Fcomark.dev",[1053],[1055,5738,5739],{},"Comark"," component that will handle streaming Markdown rendering. Using ",[1049,5742,5745],{"href":5743,"rel":5744},"https:\u002F\u002Fcomark.dev\u002Frendering\u002Fvue#code-definecomarkcomponent",[1053],[1055,5746,5747],{},"defineComarkComponent",", you can enable the ",[1055,5750,1557],{}," plugin for syntax highlighting in code blocks and register additional ",[1049,5753,5756],{"href":5754,"rel":5755},"https:\u002F\u002Fshiki.style",[1053],"Shiki"," languages beyond the defaults (TypeScript, JavaScript, Vue, Shell, JSON, YAML, Markdown):",[1305,5759,5760],{},[1096,5761,5764],{"className":1309,"code":5762,"filename":5763,"language":1311,"meta":1101,"style":1101},"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",[1055,5765,5766,5783,5799,5815,5831,5847,5851,5864,5880,5889,5898,5923,5929,5935,5949],{"__ignoreMap":1101},[1105,5767,5768,5770,5773,5776,5778,5781],{"class":1107,"line":1108},[1105,5769,1694],{"class":1318},[1105,5771,5772],{"class":1328}," highlight ",[1105,5774,5775],{"class":1318},"from",[1105,5777,1419],{"class":1332},[1105,5779,5780],{"class":1115},"@comark\u002Fnuxt\u002Fplugins\u002Fhighlight",[1105,5782,1383],{"class":1332},[1105,5784,5785,5787,5790,5792,5794,5797],{"class":1107,"line":1125},[1105,5786,1694],{"class":1318},[1105,5788,5789],{"class":1328}," python ",[1105,5791,5775],{"class":1318},[1105,5793,1419],{"class":1332},[1105,5795,5796],{"class":1115},"@shikijs\u002Flangs\u002Fpython",[1105,5798,1383],{"class":1332},[1105,5800,5801,5803,5806,5808,5810,5813],{"class":1107,"line":1348},[1105,5802,1694],{"class":1318},[1105,5804,5805],{"class":1328}," sql ",[1105,5807,5775],{"class":1318},[1105,5809,1419],{"class":1332},[1105,5811,5812],{"class":1115},"@shikijs\u002Flangs\u002Fsql",[1105,5814,1383],{"class":1332},[1105,5816,5817,5819,5822,5824,5826,5829],{"class":1107,"line":1363},[1105,5818,1694],{"class":1318},[1105,5820,5821],{"class":1328}," go ",[1105,5823,5775],{"class":1318},[1105,5825,1419],{"class":1332},[1105,5827,5828],{"class":1115},"@shikijs\u002Flangs\u002Fgo",[1105,5830,1383],{"class":1332},[1105,5832,5833,5835,5838,5840,5842,5845],{"class":1107,"line":1375},[1105,5834,1694],{"class":1318},[1105,5836,5837],{"class":1328}," rust ",[1105,5839,5775],{"class":1318},[1105,5841,1419],{"class":1332},[1105,5843,5844],{"class":1115},"@shikijs\u002Flangs\u002Frust",[1105,5846,1383],{"class":1332},[1105,5848,5849],{"class":1107,"line":1386},[1105,5850,1397],{"emptyLinePlaceholder":21},[1105,5852,5853,5855,5857,5860,5862],{"class":1107,"line":1394},[1105,5854,1319],{"class":1318},[1105,5856,1322],{"class":1318},[1105,5858,5859],{"class":1128}," defineComarkComponent",[1105,5861,1329],{"class":1328},[1105,5863,1333],{"class":1332},[1105,5865,5866,5869,5871,5873,5876,5878],{"class":1107,"line":1400},[1105,5867,5868],{"class":1338},"  name",[1105,5870,1342],{"class":1332},[1105,5872,1419],{"class":1332},[1105,5874,5875],{"class":1115},"ChatComark",[1105,5877,1357],{"class":1332},[1105,5879,1360],{"class":1332},[1105,5881,5882,5885,5887],{"class":1107,"line":1411},[1105,5883,5884],{"class":1338},"  plugins",[1105,5886,1342],{"class":1332},[1105,5888,1345],{"class":1328},[1105,5890,5891,5894,5896],{"class":1107,"line":1427},[1105,5892,5893],{"class":1128},"    highlight",[1105,5895,1329],{"class":1328},[1105,5897,1333],{"class":1332},[1105,5899,5900,5903,5905,5908,5910,5913,5915,5918,5920],{"class":1107,"line":1433},[1105,5901,5902],{"class":1338},"      languages",[1105,5904,1342],{"class":1332},[1105,5906,5907],{"class":1328}," [python",[1105,5909,1703],{"class":1332},[1105,5911,5912],{"class":1328}," sql",[1105,5914,1703],{"class":1332},[1105,5916,5917],{"class":1328}," go",[1105,5919,1703],{"class":1332},[1105,5921,5922],{"class":1328}," rust]\n",[1105,5924,5925,5927],{"class":1107,"line":1438},[1105,5926,3394],{"class":1332},[1105,5928,1467],{"class":1328},[1105,5930,5931,5933],{"class":1107,"line":1461},[1105,5932,1389],{"class":1328},[1105,5934,1360],{"class":1332},[1105,5936,5937,5940,5942,5944,5947],{"class":1107,"line":1966},[1105,5938,5939],{"class":1338},"  class",[1105,5941,1342],{"class":1332},[1105,5943,1419],{"class":1332},[1105,5945,5946],{"class":1115},"*:first:mt-0 *:last:mb-0",[1105,5948,1383],{"class":1332},[1105,5950,5951,5953],{"class":1107,"line":1993},[1105,5952,1464],{"class":1332},[1105,5954,1467],{"class":1328},[995,5956,5957,5958,5961],{},"This creates a ",[1055,5959,5960],{},"\u003CChatComark>"," component we'll use in the chat page to render assistant messages and reasoning content.",[995,5963,5964],{},"Since Comark uses Shiki with dual themes, you need to add the following CSS to your stylesheet for dark mode support:",[1096,5966,5968],{"className":1487,"code":5967,"filename":1489,"language":1490,"meta":1101,"style":1101},"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",[1055,5969,5970,5991,6014,6034,6054,6074,6094],{"__ignoreMap":1101},[1105,5971,5972,5975,5977,5980,5983,5986,5989],{"class":1107,"line":1108},[1105,5973,5974],{"class":1111},"html",[1105,5976,1795],{"class":1332},[1105,5978,5979],{"class":1111},"dark",[1105,5981,5982],{"class":1332}," .",[1105,5984,5985],{"class":1111},"shiki",[1105,5987,5988],{"class":1111}," span",[1105,5990,1408],{"class":1332},[1105,5992,5993,5997,5999,6002,6004,6007,6009,6012],{"class":1107,"line":1125},[1105,5994,5996],{"class":5995},"sqsOY","  color",[1105,5998,1342],{"class":1332},[1105,6000,6001],{"class":1128}," var",[1105,6003,1329],{"class":1332},[1105,6005,6006],{"class":1328},"--shiki-dark",[1105,6008,1869],{"class":1332},[1105,6010,6011],{"class":3586}," !important",[1105,6013,1509],{"class":1332},[1105,6015,6016,6019,6021,6023,6025,6028,6030,6032],{"class":1107,"line":1348},[1105,6017,6018],{"class":5995},"  background-color",[1105,6020,1342],{"class":1332},[1105,6022,6001],{"class":1128},[1105,6024,1329],{"class":1332},[1105,6026,6027],{"class":1328},"--shiki-dark-bg",[1105,6029,1869],{"class":1332},[1105,6031,6011],{"class":3586},[1105,6033,1509],{"class":1332},[1105,6035,6036,6039,6041,6043,6045,6048,6050,6052],{"class":1107,"line":1363},[1105,6037,6038],{"class":5995},"  font-style",[1105,6040,1342],{"class":1332},[1105,6042,6001],{"class":1128},[1105,6044,1329],{"class":1332},[1105,6046,6047],{"class":1328},"--shiki-dark-font-style",[1105,6049,1869],{"class":1332},[1105,6051,6011],{"class":3586},[1105,6053,1509],{"class":1332},[1105,6055,6056,6059,6061,6063,6065,6068,6070,6072],{"class":1107,"line":1375},[1105,6057,6058],{"class":5995},"  font-weight",[1105,6060,1342],{"class":1332},[1105,6062,6001],{"class":1128},[1105,6064,1329],{"class":1332},[1105,6066,6067],{"class":1328},"--shiki-dark-font-weight",[1105,6069,1869],{"class":1332},[1105,6071,6011],{"class":3586},[1105,6073,1509],{"class":1332},[1105,6075,6076,6079,6081,6083,6085,6088,6090,6092],{"class":1107,"line":1386},[1105,6077,6078],{"class":5995},"  text-decoration",[1105,6080,1342],{"class":1332},[1105,6082,6001],{"class":1128},[1105,6084,1329],{"class":1332},[1105,6086,6087],{"class":1328},"--shiki-dark-text-decoration",[1105,6089,1869],{"class":1332},[1105,6091,6011],{"class":3586},[1105,6093,1509],{"class":1332},[1105,6095,6096],{"class":1107,"line":1394},[1105,6097,5424],{"class":1332},[999,6099,6101],{"id":6100},"creating-the-chat-page","Creating the chat page",[995,6103,6104,6105,6111,6112,6119],{},"The chat page is where the actual conversation happens. It integrates the AI SDK's ",[1049,6106,6109],{"href":6107,"rel":6108},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fchat",[1053],[1055,6110,259],{}," class and ",[1049,6113,6116],{"href":6114,"rel":6115},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Freference\u002Fai-sdk-ui\u002Fdefault-chat-transport",[1053],[1055,6117,6118],{},"DefaultChatTransport"," for real-time streaming.",[1305,6121,6122],{},[1682,6123,6124],{},[1096,6125,6129],{"className":1537,"code":6126,"filename":6127,"highlights":6128,"language":34,"meta":1101,"style":1101},"\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",[1125,1348,1363,2216,2267,2280,2310,2316,2321,2353,2369,2387,2403,2411,3391,3408,3440,3453,3458,3464,3495,3539,3546],[1055,6130,6131,6151,6181,6202,6223,6227,6241,6255,6259,6264,6312,6316,6335,6377,6381,6385,6401,6405,6410,6428,6448,6467,6483,6510,6519,6534,6540,6567,6583,6588,6593,6608,6623,6639,6656,6670,6677,6682,6689,6693,6715,6727,6747,6775,6789,6793,6797,6801,6806,6819,6847,6858,6862,6868,6876,6880,6888,6906,6918,6937,6944,6958,6971,6976,6990,6994,7019,7097,7105,7119,7133,7147,7152,7160,7173,7186,7191,7201,7205,7228,7234,7248,7260,7272,7276,7306,7311,7320,7328,7337,7346,7354,7358,7364,7376,7390,7402,7415,7428,7432,7439,7452,7465,7479,7493,7498,7506,7514,7522,7530],{"__ignoreMap":1101},[1105,6132,6133,6135,6137,6139,6141,6143,6145,6147,6149],{"class":1107,"line":1108},[1105,6134,1547],{"class":1332},[1105,6136,5136],{"class":1338},[1105,6138,5139],{"class":1575},[1105,6140,5142],{"class":1575},[1105,6142,1579],{"class":1332},[1105,6144,1506],{"class":1332},[1105,6146,1311],{"class":1115},[1105,6148,1506],{"class":1332},[1105,6150,1553],{"class":1332},[1105,6152,6154,6156,6158,6161,6163,6166,6168,6171,6173,6175,6177,6179],{"class":6153,"line":1125},[1107,1557],[1105,6155,1694],{"class":1318},[1105,6157,1697],{"class":1332},[1105,6159,6160],{"class":1328}," DefaultChatTransport",[1105,6162,1703],{"class":1332},[1105,6164,6165],{"class":1328}," isReasoningUIPart",[1105,6167,1703],{"class":1332},[1105,6169,6170],{"class":1328}," isTextUIPart",[1105,6172,1719],{"class":1332},[1105,6174,1722],{"class":1318},[1105,6176,1419],{"class":1332},[1105,6178,2526],{"class":1115},[1105,6180,1383],{"class":1332},[1105,6182,6184,6186,6188,6191,6193,6195,6197,6200],{"class":6183,"line":1348},[1107,1557],[1105,6185,1694],{"class":1318},[1105,6187,1697],{"class":1332},[1105,6189,6190],{"class":1328}," Chat",[1105,6192,1719],{"class":1332},[1105,6194,1722],{"class":1318},[1105,6196,1419],{"class":1332},[1105,6198,6199],{"class":1115},"@ai-sdk\u002Fvue",[1105,6201,1383],{"class":1332},[1105,6203,6205,6207,6209,6212,6214,6216,6218,6221],{"class":6204,"line":1363},[1107,1557],[1105,6206,1694],{"class":1318},[1105,6208,1697],{"class":1332},[1105,6210,6211],{"class":1328}," isPartStreaming",[1105,6213,1719],{"class":1332},[1105,6215,1722],{"class":1318},[1105,6217,1419],{"class":1332},[1105,6219,6220],{"class":1115},"@nuxt\u002Fui\u002Futils\u002Fai",[1105,6222,1383],{"class":1332},[1105,6224,6225],{"class":1107,"line":1375},[1105,6226,1397],{"emptyLinePlaceholder":21},[1105,6228,6229,6231,6234,6236,6239],{"class":1107,"line":1386},[1105,6230,3054],{"class":1575},[1105,6232,6233],{"class":1328}," route ",[1105,6235,1579],{"class":1332},[1105,6237,6238],{"class":1128}," useRoute",[1105,6240,2661],{"class":1328},[1105,6242,6243,6245,6248,6250,6253],{"class":1107,"line":1394},[1105,6244,3054],{"class":1575},[1105,6246,6247],{"class":1328}," toast ",[1105,6249,1579],{"class":1332},[1105,6251,6252],{"class":1128}," useToast",[1105,6254,2661],{"class":1328},[1105,6256,6257],{"class":1107,"line":1400},[1105,6258,1397],{"emptyLinePlaceholder":21},[1105,6260,6261],{"class":1107,"line":1411},[1105,6262,6263],{"class":2683},"\u002F\u002F Fetch existing chat data\n",[1105,6265,6266,6268,6270,6273,6275,6278,6280,6282,6284,6287,6289,6291,6294,6296,6299,6301,6304,6306,6308,6310],{"class":1107,"line":1427},[1105,6267,3054],{"class":1575},[1105,6269,1697],{"class":1332},[1105,6271,6272],{"class":1338}," data",[1105,6274,1342],{"class":1332},[1105,6276,6277],{"class":1328}," chatData ",[1105,6279,1464],{"class":1332},[1105,6281,2615],{"class":1332},[1105,6283,2618],{"class":1318},[1105,6285,6286],{"class":1128}," useFetch",[1105,6288,1329],{"class":1328},[1105,6290,3699],{"class":1332},[1105,6292,6293],{"class":1115},"\u002Fapi\u002Fchats\u002F",[1105,6295,5408],{"class":1332},[1105,6297,6298],{"class":1328},"route",[1105,6300,1795],{"class":1332},[1105,6302,6303],{"class":1328},"params",[1105,6305,1795],{"class":1332},[1105,6307,2006],{"class":1328},[1105,6309,5417],{"class":1332},[1105,6311,1467],{"class":1328},[1105,6313,6314],{"class":1107,"line":1433},[1105,6315,1397],{"emptyLinePlaceholder":21},[1105,6317,6318,6321,6323,6325,6328,6330,6333],{"class":1107,"line":1438},[1105,6319,6320],{"class":1318},"if",[1105,6322,1938],{"class":1328},[1105,6324,3559],{"class":1332},[1105,6326,6327],{"class":1328},"chatData",[1105,6329,1795],{"class":1332},[1105,6331,6332],{"class":1328},"value) ",[1105,6334,1333],{"class":1332},[1105,6336,6337,6340,6342,6344,6346,6348,6350,6352,6354,6356,6358,6360,6362,6364,6366,6369,6371,6373,6375],{"class":1107,"line":1461},[1105,6338,6339],{"class":1318},"  throw",[1105,6341,2892],{"class":1128},[1105,6343,1329],{"class":1338},[1105,6345,1852],{"class":1332},[1105,6347,3581],{"class":1338},[1105,6349,1342],{"class":1332},[1105,6351,3587],{"class":3586},[1105,6353,1703],{"class":1332},[1105,6355,3592],{"class":1338},[1105,6357,1342],{"class":1332},[1105,6359,1419],{"class":1332},[1105,6361,3599],{"class":1115},[1105,6363,1357],{"class":1332},[1105,6365,1703],{"class":1332},[1105,6367,6368],{"class":1338}," fatal",[1105,6370,1342],{"class":1332},[1105,6372,4192],{"class":4191},[1105,6374,1719],{"class":1332},[1105,6376,1467],{"class":1338},[1105,6378,6379],{"class":1107,"line":1966},[1105,6380,5424],{"class":1332},[1105,6382,6383],{"class":1107,"line":1993},[1105,6384,1397],{"emptyLinePlaceholder":21},[1105,6386,6387,6389,6391,6393,6395,6397,6399],{"class":1107,"line":2039},[1105,6388,3054],{"class":1575},[1105,6390,5159],{"class":1328},[1105,6392,1579],{"class":1332},[1105,6394,5164],{"class":1128},[1105,6396,1329],{"class":1328},[1105,6398,5169],{"class":1332},[1105,6400,1467],{"class":1328},[1105,6402,6403],{"class":1107,"line":2106},[1105,6404,1397],{"emptyLinePlaceholder":21},[1105,6406,6407],{"class":1107,"line":2176},[1105,6408,6409],{"class":2683},"\u002F\u002F Initialize the Chat class from AI SDK\n",[1105,6411,6413,6415,6418,6420,6422,6424,6426],{"class":6412,"line":2216},[1107,1557],[1105,6414,3054],{"class":1575},[1105,6416,6417],{"class":1328}," chat ",[1105,6419,1579],{"class":1332},[1105,6421,1889],{"class":1332},[1105,6423,6190],{"class":1128},[1105,6425,1329],{"class":1328},[1105,6427,1333],{"class":1332},[1105,6429,6431,6433,6435,6438,6440,6442,6444,6446],{"class":6430,"line":2267},[1107,1557],[1105,6432,1785],{"class":1338},[1105,6434,1342],{"class":1332},[1105,6436,6437],{"class":1328}," chatData",[1105,6439,1795],{"class":1332},[1105,6441,3339],{"class":1328},[1105,6443,1795],{"class":1332},[1105,6445,2006],{"class":1328},[1105,6447,1360],{"class":1332},[1105,6449,6451,6453,6455,6457,6459,6461,6463,6465],{"class":6450,"line":2280},[1107,1557],[1105,6452,1945],{"class":1338},[1105,6454,1342],{"class":1332},[1105,6456,6437],{"class":1328},[1105,6458,1795],{"class":1332},[1105,6460,3339],{"class":1328},[1105,6462,1795],{"class":1332},[1105,6464,1984],{"class":1328},[1105,6466,1360],{"class":1332},[1105,6468,6470,6473,6475,6477,6479,6481],{"class":6469,"line":2310},[1107,1557],[1105,6471,6472],{"class":1338},"  transport",[1105,6474,1342],{"class":1332},[1105,6476,1889],{"class":1332},[1105,6478,6160],{"class":1128},[1105,6480,1329],{"class":1328},[1105,6482,1333],{"class":1332},[1105,6484,6486,6489,6491,6493,6495,6497,6499,6501,6503,6505,6507],{"class":6485,"line":2316},[1107,1557],[1105,6487,6488],{"class":1338},"    api",[1105,6490,1342],{"class":1332},[1105,6492,3693],{"class":1332},[1105,6494,6293],{"class":1115},[1105,6496,5408],{"class":1332},[1105,6498,6327],{"class":1328},[1105,6500,1795],{"class":1332},[1105,6502,3339],{"class":1328},[1105,6504,1795],{"class":1332},[1105,6506,2006],{"class":1328},[1105,6508,6509],{"class":1332},"}`\n",[1105,6511,6513,6515,6517],{"class":6512,"line":2321},[1107,1557],[1105,6514,2406],{"class":1332},[1105,6516,1869],{"class":1328},[1105,6518,1360],{"class":1332},[1105,6520,6522,6525,6527,6530,6532],{"class":6521,"line":2353},[1107,1557],[1105,6523,6524],{"class":1338},"  onData",[1105,6526,1329],{"class":1332},[1105,6528,6529],{"class":1929},"dataPart",[1105,6531,1869],{"class":1332},[1105,6533,1408],{"class":1332},[1105,6535,6537],{"class":6536,"line":2369},[1107,1557],[1105,6538,6539],{"class":2683},"    \u002F\u002F Refresh the chat list when a title is generated\n",[1105,6541,6543,6546,6548,6550,6552,6555,6557,6559,6561,6563,6565],{"class":6542,"line":2387},[1107,1557],[1105,6544,6545],{"class":1318},"    if",[1105,6547,1938],{"class":1338},[1105,6549,6529],{"class":1328},[1105,6551,1795],{"class":1332},[1105,6553,6554],{"class":1328},"type",[1105,6556,3366],{"class":1332},[1105,6558,1419],{"class":1332},[1105,6560,4339],{"class":1115},[1105,6562,1357],{"class":1332},[1105,6564,3564],{"class":1338},[1105,6566,1333],{"class":1332},[1105,6568,6570,6573,6575,6577,6579,6581],{"class":6569,"line":2403},[1107,1557],[1105,6571,6572],{"class":1128},"      refreshNuxtData",[1105,6574,1329],{"class":1338},[1105,6576,1357],{"class":1332},[1105,6578,1774],{"class":1115},[1105,6580,1357],{"class":1332},[1105,6582,1467],{"class":1338},[1105,6584,6586],{"class":6585,"line":2411},[1107,1557],[1105,6587,4574],{"class":1332},[1105,6589,6591],{"class":6590,"line":3391},[1107,1557],[1105,6592,1430],{"class":1332},[1105,6594,6596,6599,6601,6604,6606],{"class":6595,"line":3408},[1107,1557],[1105,6597,6598],{"class":1338},"  onError",[1105,6600,1329],{"class":1332},[1105,6602,6603],{"class":1929},"error",[1105,6605,1869],{"class":1332},[1105,6607,1408],{"class":1332},[1105,6609,6611,6614,6616,6619,6621],{"class":6610,"line":3440},[1107,1557],[1105,6612,6613],{"class":1328},"    toast",[1105,6615,1795],{"class":1332},[1105,6617,6618],{"class":1128},"add",[1105,6620,1329],{"class":1338},[1105,6622,1333],{"class":1332},[1105,6624,6626,6629,6631,6633,6635,6637],{"class":6625,"line":3453},[1107,1557],[1105,6627,6628],{"class":1338},"      title",[1105,6630,1342],{"class":1332},[1105,6632,1419],{"class":1332},[1105,6634,497],{"class":1115},[1105,6636,1357],{"class":1332},[1105,6638,1360],{"class":1332},[1105,6640,6642,6645,6647,6650,6652,6654],{"class":6641,"line":3458},[1107,1557],[1105,6643,6644],{"class":1338},"      description",[1105,6646,1342],{"class":1332},[1105,6648,6649],{"class":1328}," error",[1105,6651,1795],{"class":1332},[1105,6653,4491],{"class":1328},[1105,6655,1360],{"class":1332},[1105,6657,6659,6662,6664,6666,6668],{"class":6658,"line":3464},[1107,1557],[1105,6660,6661],{"class":1338},"      color",[1105,6663,1342],{"class":1332},[1105,6665,1419],{"class":1332},[1105,6667,6603],{"class":1115},[1105,6669,1383],{"class":1332},[1105,6671,6673,6675],{"class":6672,"line":3495},[1107,1557],[1105,6674,3394],{"class":1332},[1105,6676,1467],{"class":1338},[1105,6678,6680],{"class":6679,"line":3539},[1107,1557],[1105,6681,3611],{"class":1332},[1105,6683,6685,6687],{"class":6684,"line":3546},[1107,1557],[1105,6686,1464],{"class":1332},[1105,6688,1467],{"class":1328},[1105,6690,6691],{"class":1107,"line":3551},[1105,6692,1397],{"emptyLinePlaceholder":21},[1105,6694,6695,6698,6701,6703,6706,6708,6711,6713],{"class":1107,"line":3569},[1105,6696,6697],{"class":1575},"function",[1105,6699,6700],{"class":1128}," handleSubmit",[1105,6702,1329],{"class":1332},[1105,6704,6705],{"class":1929},"e",[1105,6707,1342],{"class":1332},[1105,6709,6710],{"class":1111}," Event",[1105,6712,1869],{"class":1332},[1105,6714,1408],{"class":1332},[1105,6716,6717,6720,6722,6725],{"class":1107,"line":3608},[1105,6718,6719],{"class":1328},"  e",[1105,6721,1795],{"class":1332},[1105,6723,6724],{"class":1128},"preventDefault",[1105,6726,2661],{"class":1338},[1105,6728,6729,6731,6733,6735,6737,6739,6741,6743,6745],{"class":1107,"line":3614},[1105,6730,3554],{"class":1318},[1105,6732,1938],{"class":1338},[1105,6734,5218],{"class":1328},[1105,6736,1795],{"class":1332},[1105,6738,3339],{"class":1328},[1105,6740,1795],{"class":1332},[1105,6742,5227],{"class":1128},[1105,6744,5230],{"class":1338},[1105,6746,1333],{"class":1332},[1105,6748,6749,6752,6754,6757,6759,6761,6763,6765,6767,6769,6771,6773],{"class":1107,"line":3619},[1105,6750,6751],{"class":1328},"    chat",[1105,6753,1795],{"class":1332},[1105,6755,6756],{"class":1128},"sendMessage",[1105,6758,1329],{"class":1338},[1105,6760,1852],{"class":1332},[1105,6762,1706],{"class":1338},[1105,6764,1342],{"class":1332},[1105,6766,5362],{"class":1328},[1105,6768,1795],{"class":1332},[1105,6770,3339],{"class":1328},[1105,6772,1719],{"class":1332},[1105,6774,1467],{"class":1338},[1105,6776,6777,6780,6782,6784,6786],{"class":1107,"line":3625},[1105,6778,6779],{"class":1328},"    input",[1105,6781,1795],{"class":1332},[1105,6783,3339],{"class":1328},[1105,6785,2615],{"class":1332},[1105,6787,6788],{"class":1332}," ''\n",[1105,6790,6791],{"class":1107,"line":3645},[1105,6792,3611],{"class":1332},[1105,6794,6795],{"class":1107,"line":3673},[1105,6796,5424],{"class":1332},[1105,6798,6799],{"class":1107,"line":3685},[1105,6800,1397],{"emptyLinePlaceholder":21},[1105,6802,6803],{"class":1107,"line":3704},[1105,6804,6805],{"class":2683},"\u002F\u002F Auto-generate response for first message\n",[1105,6807,6808,6811,6813,6815,6817],{"class":1107,"line":3732},[1105,6809,6810],{"class":1128},"onMounted",[1105,6812,1329],{"class":1328},[1105,6814,1792],{"class":1332},[1105,6816,1812],{"class":1575},[1105,6818,1408],{"class":1332},[1105,6820,6821,6823,6825,6827,6829,6831,6833,6835,6837,6839,6841,6843,6845],{"class":1107,"line":3739},[1105,6822,3554],{"class":1318},[1105,6824,1938],{"class":1338},[1105,6826,6327],{"class":1328},[1105,6828,1795],{"class":1332},[1105,6830,3339],{"class":1328},[1105,6832,3865],{"class":1332},[1105,6834,1984],{"class":1328},[1105,6836,1795],{"class":1332},[1105,6838,3844],{"class":1328},[1105,6840,3366],{"class":1332},[1105,6842,3850],{"class":3586},[1105,6844,3564],{"class":1338},[1105,6846,1333],{"class":1332},[1105,6848,6849,6851,6853,6856],{"class":1107,"line":3744},[1105,6850,6751],{"class":1328},[1105,6852,1795],{"class":1332},[1105,6854,6855],{"class":1128},"regenerate",[1105,6857,2661],{"class":1338},[1105,6859,6860],{"class":1107,"line":3810},[1105,6861,3611],{"class":1332},[1105,6863,6864,6866],{"class":1107,"line":3815},[1105,6865,1464],{"class":1332},[1105,6867,1467],{"class":1328},[1105,6869,6870,6872,6874],{"class":1107,"line":3820},[1105,6871,1623],{"class":1332},[1105,6873,5136],{"class":1338},[1105,6875,1553],{"class":1332},[1105,6877,6878],{"class":1107,"line":3826},[1105,6879,1397],{"emptyLinePlaceholder":21},[1105,6881,6882,6884,6886],{"class":1107,"line":3855},[1105,6883,1547],{"class":1332},[1105,6885,1550],{"class":1338},[1105,6887,1553],{"class":1332},[1105,6889,6890,6892,6894,6896,6898,6900,6902,6904],{"class":1107,"line":3896},[1105,6891,1560],{"class":1332},[1105,6893,5451],{"class":1338},[1105,6895,5454],{"class":1575},[1105,6897,1579],{"class":1332},[1105,6899,1506],{"class":1332},[1105,6901,5461],{"class":1115},[1105,6903,1506],{"class":1332},[1105,6905,1553],{"class":1332},[1105,6907,6908,6910,6912,6914,6916],{"class":1107,"line":3925},[1105,6909,1569],{"class":1332},[1105,6911,1550],{"class":1338},[1105,6913,5474],{"class":1332},[1105,6915,5477],{"class":1575},[1105,6917,1553],{"class":1332},[1105,6919,6920,6922,6924,6926,6928,6930,6933,6935],{"class":1107,"line":3937},[1105,6921,1593],{"class":1332},[1105,6923,5486],{"class":1338},[1105,6925,5489],{"class":1575},[1105,6927,1579],{"class":1332},[1105,6929,1506],{"class":1332},[1105,6931,6932],{"class":1115},"min-h-dvh flex flex-col py-4 sm:py-6",[1105,6934,1506],{"class":1332},[1105,6936,1553],{"class":1332},[1105,6938,6939,6941],{"class":1107,"line":3953},[1105,6940,5505],{"class":1332},[1105,6942,6943],{"class":1338},"UChatMessages\n",[1105,6945,6946,6949,6951,6953,6956],{"class":1107,"line":3967},[1105,6947,6948],{"class":1575},"          :messages",[1105,6950,1579],{"class":1332},[1105,6952,1506],{"class":1332},[1105,6954,6955],{"class":1115},"chat.messages",[1105,6957,5562],{"class":1332},[1105,6959,6960,6962,6964,6966,6969],{"class":1107,"line":3974},[1105,6961,5568],{"class":1575},[1105,6963,1579],{"class":1332},[1105,6965,1506],{"class":1332},[1105,6967,6968],{"class":1115},"chat.status",[1105,6970,5562],{"class":1332},[1105,6972,6973],{"class":1107,"line":3979},[1105,6974,6975],{"class":1575},"          should-auto-scroll\n",[1105,6977,6978,6981,6983,6985,6988],{"class":1107,"line":3984},[1105,6979,6980],{"class":1575},"          class",[1105,6982,1579],{"class":1332},[1105,6984,1506],{"class":1332},[1105,6986,6987],{"class":1115},"flex-1",[1105,6989,5562],{"class":1332},[1105,6991,6992],{"class":1107,"line":3990},[1105,6993,5628],{"class":1332},[1105,6995,6996,6998,7000,7002,7004,7006,7008,7010,7013,7015,7017],{"class":1107,"line":4007},[1105,6997,5634],{"class":1332},[1105,6999,1550],{"class":1338},[1105,7001,5474],{"class":1332},[1105,7003,371],{"class":1575},[1105,7005,1579],{"class":1332},[1105,7007,1506],{"class":1332},[1105,7009,1852],{"class":1332},[1105,7011,7012],{"class":1328}," message ",[1105,7014,1464],{"class":1332},[1105,7016,1506],{"class":1332},[1105,7018,1553],{"class":1332},[1105,7020,7021,7024,7026,7029,7031,7033,7036,7038,7041,7044,7046,7048,7050,7052,7055,7058,7060,7063,7065,7067,7069,7071,7074,7076,7079,7081,7083,7085,7087,7089,7092,7095],{"class":1107,"line":4029},[1105,7022,7023],{"class":1332},"            \u003C",[1105,7025,1550],{"class":1338},[1105,7027,7028],{"class":1318}," v-for",[1105,7030,1579],{"class":1332},[1105,7032,1506],{"class":1332},[1105,7034,7035],{"class":1328},"(part",[1105,7037,1703],{"class":1332},[1105,7039,7040],{"class":1328}," index) ",[1105,7042,7043],{"class":1332},"in",[1105,7045,2610],{"class":1328},[1105,7047,1795],{"class":1332},[1105,7049,2190],{"class":1328},[1105,7051,1506],{"class":1332},[1105,7053,7054],{"class":1332}," :",[1105,7056,7057],{"class":1575},"key",[1105,7059,1579],{"class":1332},[1105,7061,7062],{"class":1332},"\"`${",[1105,7064,4491],{"class":1328},[1105,7066,1795],{"class":1332},[1105,7068,2006],{"class":1328},[1105,7070,1464],{"class":1332},[1105,7072,7073],{"class":1115},"-",[1105,7075,5408],{"class":1332},[1105,7077,7078],{"class":1328},"part",[1105,7080,1795],{"class":1332},[1105,7082,6554],{"class":1328},[1105,7084,1464],{"class":1332},[1105,7086,7073],{"class":1115},[1105,7088,5408],{"class":1332},[1105,7090,7091],{"class":1328},"index",[1105,7093,7094],{"class":1332},"}`\"",[1105,7096,1553],{"class":1332},[1105,7098,7099,7102],{"class":1107,"line":4047},[1105,7100,7101],{"class":1332},"              \u003C",[1105,7103,7104],{"class":1338},"UChatReasoning\n",[1105,7106,7107,7110,7112,7114,7117],{"class":1107,"line":4055},[1105,7108,7109],{"class":1575},"                v-if",[1105,7111,1579],{"class":1332},[1105,7113,1506],{"class":1332},[1105,7115,7116],{"class":1115},"isReasoningUIPart(part)",[1105,7118,5562],{"class":1332},[1105,7120,7121,7124,7126,7128,7131],{"class":1107,"line":4072},[1105,7122,7123],{"class":1575},"                :text",[1105,7125,1579],{"class":1332},[1105,7127,1506],{"class":1332},[1105,7129,7130],{"class":1115},"part.text",[1105,7132,5562],{"class":1332},[1105,7134,7135,7138,7140,7142,7145],{"class":1107,"line":4093},[1105,7136,7137],{"class":1575},"                :streaming",[1105,7139,1579],{"class":1332},[1105,7141,1506],{"class":1332},[1105,7143,7144],{"class":1115},"isPartStreaming(part)",[1105,7146,5562],{"class":1332},[1105,7148,7149],{"class":1107,"line":4103},[1105,7150,7151],{"class":1332},"              >\n",[1105,7153,7154,7157],{"class":1107,"line":4113},[1105,7155,7156],{"class":1332},"                \u003C",[1105,7158,7159],{"class":1338},"ChatComark\n",[1105,7161,7162,7165,7167,7169,7171],{"class":1107,"line":4123},[1105,7163,7164],{"class":1575},"                  :markdown",[1105,7166,1579],{"class":1332},[1105,7168,1506],{"class":1332},[1105,7170,7130],{"class":1115},[1105,7172,5562],{"class":1332},[1105,7174,7175,7178,7180,7182,7184],{"class":1107,"line":4140},[1105,7176,7177],{"class":1575},"                  :streaming",[1105,7179,1579],{"class":1332},[1105,7181,1506],{"class":1332},[1105,7183,7144],{"class":1115},[1105,7185,5562],{"class":1332},[1105,7187,7188],{"class":1107,"line":4151},[1105,7189,7190],{"class":1332},"                \u002F>\n",[1105,7192,7193,7196,7199],{"class":1107,"line":4157},[1105,7194,7195],{"class":1332},"              \u003C\u002F",[1105,7197,7198],{"class":1338},"UChatReasoning",[1105,7200,1553],{"class":1332},[1105,7202,7203],{"class":1107,"line":4163},[1105,7204,1397],{"emptyLinePlaceholder":21},[1105,7206,7207,7209,7211,7214,7216,7218,7221,7224,7226],{"class":1107,"line":4173},[1105,7208,7101],{"class":1332},[1105,7210,1550],{"class":1338},[1105,7212,7213],{"class":1318}," v-else-if",[1105,7215,1579],{"class":1332},[1105,7217,1506],{"class":1332},[1105,7219,7220],{"class":1128},"isTextUIPart",[1105,7222,7223],{"class":1328},"(part)",[1105,7225,1506],{"class":1332},[1105,7227,1553],{"class":1332},[1105,7229,7230,7232],{"class":1107,"line":4183},[1105,7231,7156],{"class":1332},[1105,7233,7159],{"class":1338},[1105,7235,7236,7239,7241,7243,7246],{"class":1107,"line":4197},[1105,7237,7238],{"class":1575},"                  v-if",[1105,7240,1579],{"class":1332},[1105,7242,1506],{"class":1332},[1105,7244,7245],{"class":1115},"message.role === 'assistant'",[1105,7247,5562],{"class":1332},[1105,7249,7250,7252,7254,7256,7258],{"class":1107,"line":4212},[1105,7251,7164],{"class":1575},[1105,7253,1579],{"class":1332},[1105,7255,1506],{"class":1332},[1105,7257,7130],{"class":1115},[1105,7259,5562],{"class":1332},[1105,7261,7262,7264,7266,7268,7270],{"class":1107,"line":4217},[1105,7263,7177],{"class":1575},[1105,7265,1579],{"class":1332},[1105,7267,1506],{"class":1332},[1105,7269,7144],{"class":1115},[1105,7271,5562],{"class":1332},[1105,7273,7274],{"class":1107,"line":4222},[1105,7275,7190],{"class":1332},[1105,7277,7278,7280,7282,7284,7286,7288,7291,7293,7295,7297,7299,7302,7304],{"class":1107,"line":4232},[1105,7279,7156],{"class":1332},[1105,7281,995],{"class":1338},[1105,7283,7213],{"class":1575},[1105,7285,1579],{"class":1332},[1105,7287,1506],{"class":1332},[1105,7289,7290],{"class":1115},"message.role === 'user'",[1105,7292,1506],{"class":1332},[1105,7294,5489],{"class":1575},[1105,7296,1579],{"class":1332},[1105,7298,1506],{"class":1332},[1105,7300,7301],{"class":1115},"whitespace-pre-wrap",[1105,7303,1506],{"class":1332},[1105,7305,1553],{"class":1332},[1105,7307,7308],{"class":1107,"line":4248},[1105,7309,7310],{"class":1328},"                  {{ part.text }}\n",[1105,7312,7313,7316,7318],{"class":1107,"line":4263},[1105,7314,7315],{"class":1332},"                \u003C\u002F",[1105,7317,995],{"class":1338},[1105,7319,1553],{"class":1332},[1105,7321,7322,7324,7326],{"class":1107,"line":4269},[1105,7323,7195],{"class":1332},[1105,7325,1550],{"class":1338},[1105,7327,1553],{"class":1332},[1105,7329,7330,7333,7335],{"class":1107,"line":4275},[1105,7331,7332],{"class":1332},"            \u003C\u002F",[1105,7334,1550],{"class":1338},[1105,7336,1553],{"class":1332},[1105,7338,7339,7342,7344],{"class":1107,"line":4283},[1105,7340,7341],{"class":1332},"          \u003C\u002F",[1105,7343,1550],{"class":1338},[1105,7345,1553],{"class":1332},[1105,7347,7348,7350,7352],{"class":1107,"line":4288},[1105,7349,5531],{"class":1332},[1105,7351,5107],{"class":1338},[1105,7353,1553],{"class":1332},[1105,7355,7356],{"class":1107,"line":4294},[1105,7357,1397],{"emptyLinePlaceholder":21},[1105,7359,7360,7362],{"class":1107,"line":4314},[1105,7361,5505],{"class":1332},[1105,7363,5547],{"class":1338},[1105,7365,7366,7368,7370,7372,7374],{"class":1107,"line":4329},[1105,7367,5553],{"class":1575},[1105,7369,1579],{"class":1332},[1105,7371,1506],{"class":1332},[1105,7373,5218],{"class":1115},[1105,7375,5562],{"class":1332},[1105,7377,7378,7381,7383,7385,7388],{"class":1107,"line":4346},[1105,7379,7380],{"class":1575},"          :error",[1105,7382,1579],{"class":1332},[1105,7384,1506],{"class":1332},[1105,7386,7387],{"class":1115},"chat.error",[1105,7389,5562],{"class":1332},[1105,7391,7392,7394,7396,7398,7400],{"class":1107,"line":4369},[1105,7393,5583],{"class":1575},[1105,7395,1579],{"class":1332},[1105,7397,1506],{"class":1332},[1105,7399,5590],{"class":1115},[1105,7401,5562],{"class":1332},[1105,7403,7404,7406,7408,7410,7413],{"class":1107,"line":4380},[1105,7405,6980],{"class":1575},[1105,7407,1579],{"class":1332},[1105,7409,1506],{"class":1332},[1105,7411,7412],{"class":1115},"sticky bottom-0",[1105,7414,5562],{"class":1332},[1105,7416,7417,7419,7421,7423,7426],{"class":1107,"line":4388},[1105,7418,5613],{"class":1575},[1105,7420,1579],{"class":1332},[1105,7422,1506],{"class":1332},[1105,7424,7425],{"class":1115},"handleSubmit",[1105,7427,5562],{"class":1332},[1105,7429,7430],{"class":1107,"line":4394},[1105,7431,5628],{"class":1332},[1105,7433,7434,7436],{"class":1107,"line":4399},[1105,7435,5634],{"class":1332},[1105,7437,7438],{"class":1338},"UChatPromptSubmit\n",[1105,7440,7441,7444,7446,7448,7450],{"class":1107,"line":4422},[1105,7442,7443],{"class":1575},"            :status",[1105,7445,1579],{"class":1332},[1105,7447,1506],{"class":1332},[1105,7449,6968],{"class":1115},[1105,7451,5562],{"class":1332},[1105,7453,7454,7457,7459,7461,7463],{"class":1107,"line":4428},[1105,7455,7456],{"class":1575},"            color",[1105,7458,1579],{"class":1332},[1105,7460,1506],{"class":1332},[1105,7462,5647],{"class":1115},[1105,7464,5562],{"class":1332},[1105,7466,7467,7470,7472,7474,7477],{"class":1107,"line":4448},[1105,7468,7469],{"class":1575},"            @stop",[1105,7471,1579],{"class":1332},[1105,7473,1506],{"class":1332},[1105,7475,7476],{"class":1115},"chat.stop()",[1105,7478,5562],{"class":1332},[1105,7480,7481,7484,7486,7488,7491],{"class":1107,"line":4454},[1105,7482,7483],{"class":1575},"            @reload",[1105,7485,1579],{"class":1332},[1105,7487,1506],{"class":1332},[1105,7489,7490],{"class":1115},"chat.regenerate()",[1105,7492,5562],{"class":1332},[1105,7494,7495],{"class":1107,"line":4500},[1105,7496,7497],{"class":1332},"          \u002F>\n",[1105,7499,7500,7502,7504],{"class":1107,"line":4516},[1105,7501,5531],{"class":1332},[1105,7503,5101],{"class":1338},[1105,7505,1553],{"class":1332},[1105,7507,7508,7510,7512],{"class":1107,"line":4549},[1105,7509,5665],{"class":1332},[1105,7511,5486],{"class":1338},[1105,7513,1553],{"class":1332},[1105,7515,7516,7518,7520],{"class":1107,"line":4563},[1105,7517,1604],{"class":1332},[1105,7519,1550],{"class":1338},[1105,7521,1553],{"class":1332},[1105,7523,7524,7526,7528],{"class":1107,"line":4571},[1105,7525,1614],{"class":1332},[1105,7527,5451],{"class":1338},[1105,7529,1553],{"class":1332},[1105,7531,7532,7534,7536],{"class":1107,"line":4577},[1105,7533,1623],{"class":1332},[1105,7535,1550],{"class":1338},[1105,7537,1553],{"class":1332},[995,7539,7540],{},"Here's a breakdown of the key parts:",[995,7542,7543],{},[1013,7544,7545],{},"The Chat Class",[995,7547,4650,7548,7553,7554,7556],{},[1049,7549,7551],{"href":6107,"rel":7550},[1053],[1055,7552,259],{}," class from ",[1055,7555,6199],{}," manages the entire conversation state. It handles:",[1007,7558,7559,7564,7579,7585,7590],{},[1010,7560,7561,7562],{},"Message history with ",[1055,7563,6955],{},[1010,7565,7566,7567,1938,7569,2857,7572,2857,7575,2857,7577,1869],{},"Connection status with ",[1055,7568,6968],{},[1055,7570,7571],{},"ready",[1055,7573,7574],{},"submitted",[1055,7576,5722],{},[1055,7578,6603],{},[1010,7580,7581,7582],{},"Sending messages with ",[1055,7583,7584],{},"chat.sendMessage()",[1010,7586,7587,7588],{},"Stopping generation with ",[1055,7589,7476],{},[1010,7591,7592,7593],{},"Regenerating responses with ",[1055,7594,7490],{},[995,7596,4650,7597,7600,7601,7606,7607,7609],{},[1055,7598,7599],{},"onData"," callback receives ",[1049,7602,7605],{"href":7603,"rel":7604},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-ui\u002Fstreaming-data",[1053],"custom data events"," from the server (like ",[1055,7608,4339],{},"), allowing you to react to server-side events during streaming.",[995,7611,7612],{},[1013,7613,7614],{},"UChatMessages Component",[995,7616,4650,7617,7621],{},[1049,7618,7619],{"href":271},[1055,7620,5107],{}," component is purpose-built for AI chatbots with:",[1007,7623,7624,7627,7630,7633],{},[1010,7625,7626],{},"Auto-scroll to bottom on load",[1010,7628,7629],{},"Continuous scrolling as messages stream in",[1010,7631,7632],{},"A loading indicator while the assistant processes",[1010,7634,7635],{},"An \"Auto scroll\" button when scrolled up",[995,7637,7638],{},[1013,7639,7640],{},"Rendering Message Parts",[995,7642,7643,7644,7646,7647,1058,7649,7652,7653,7655,7656,7660,7661,7664,7665,7667],{},"We iterate over message ",[1055,7645,2190],{}," using AI SDK helpers like ",[1055,7648,7220],{},[1055,7650,7651],{},"isReasoningUIPart",", rendering assistant text with the ",[1055,7654,5960],{}," component we created earlier and reasoning content with ",[1049,7657,7658],{"href":291},[1055,7659,7198],{},". The ",[1055,7662,7663],{},"isPartStreaming"," utility from ",[1055,7666,6220],{}," detects if a part is currently being streamed.",[995,7669,7670],{},[1013,7671,7672],{},"UChatPromptSubmit Component",[995,7674,4650,7675,7679],{},[1049,7676,7677],{"href":286},[1055,7678,5637],{}," component adapts based on the chat status:",[1007,7681,7682,7685,7688],{},[1010,7683,7684],{},"Shows a send button when ready",[1010,7686,7687],{},"Shows a stop button while streaming",[1010,7689,7690],{},"Shows a reload button after an error",[999,7692,7694],{"id":7693},"adding-chat-history","Adding chat history",[995,7696,7697],{},"This section adds a dropdown menu to list previous chats and navigate between them.",[1133,7699,7701],{"id":7700},"listing-chats-api","Listing chats API",[995,7703,7704],{},"First, create an endpoint to fetch all chats:",[1305,7706,7707],{},[1096,7708,7711],{"className":1309,"code":7709,"filename":7710,"language":1311,"meta":1101,"style":1101},"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",[1055,7712,7713,7731,7753,7772,7776,7794,7819,7846,7852],{"__ignoreMap":1101},[1105,7714,7715,7717,7719,7721,7723,7725,7727,7729],{"class":1107,"line":1108},[1105,7716,1694],{"class":1318},[1105,7718,1697],{"class":1332},[1105,7720,2490],{"class":1328},[1105,7722,1719],{"class":1332},[1105,7724,1722],{"class":1318},[1105,7726,1419],{"class":1332},[1105,7728,1133],{"class":1115},[1105,7730,1383],{"class":1332},[1105,7732,7733,7735,7737,7739,7741,7743,7745,7747,7749,7751],{"class":1107,"line":1125},[1105,7734,1694],{"class":1318},[1105,7736,1697],{"class":1332},[1105,7738,2433],{"class":1328},[1105,7740,1703],{"class":1332},[1105,7742,2541],{"class":1328},[1105,7744,1719],{"class":1332},[1105,7746,1722],{"class":1318},[1105,7748,1419],{"class":1332},[1105,7750,2550],{"class":1115},[1105,7752,1383],{"class":1332},[1105,7754,7755,7757,7759,7762,7764,7766,7768,7770],{"class":1107,"line":1348},[1105,7756,1694],{"class":1318},[1105,7758,1697],{"class":1332},[1105,7760,7761],{"class":1328}," desc",[1105,7763,1719],{"class":1332},[1105,7765,1722],{"class":1318},[1105,7767,1419],{"class":1332},[1105,7769,1747],{"class":1115},[1105,7771,1383],{"class":1332},[1105,7773,7774],{"class":1107,"line":1363},[1105,7775,1397],{"emptyLinePlaceholder":21},[1105,7777,7778,7780,7782,7784,7786,7788,7790,7792],{"class":1107,"line":1375},[1105,7779,1319],{"class":1318},[1105,7781,1322],{"class":1318},[1105,7783,2490],{"class":1128},[1105,7785,1329],{"class":1328},[1105,7787,2589],{"class":1575},[1105,7789,4986],{"class":1332},[1105,7791,1812],{"class":1575},[1105,7793,1408],{"class":1332},[1105,7795,7796,7798,7800,7802,7804,7806,7808,7810,7812,7815,7817],{"class":1107,"line":1386},[1105,7797,2833],{"class":1318},[1105,7799,2618],{"class":1318},[1105,7801,2433],{"class":1328},[1105,7803,1795],{"class":1332},[1105,7805,3479],{"class":1328},[1105,7807,1795],{"class":1332},[1105,7809,1774],{"class":1328},[1105,7811,1795],{"class":1332},[1105,7813,7814],{"class":1128},"findMany",[1105,7816,1329],{"class":1338},[1105,7818,1333],{"class":1332},[1105,7820,7821,7824,7826,7828,7830,7832,7834,7836,7838,7840,7842,7844],{"class":1107,"line":1394},[1105,7822,7823],{"class":1128},"    orderBy",[1105,7825,1342],{"class":1332},[1105,7827,4986],{"class":1332},[1105,7829,1812],{"class":1575},[1105,7831,7761],{"class":1128},[1105,7833,1329],{"class":1338},[1105,7835,2710],{"class":1328},[1105,7837,1795],{"class":1332},[1105,7839,1774],{"class":1328},[1105,7841,1795],{"class":1332},[1105,7843,5003],{"class":1328},[1105,7845,1467],{"class":1338},[1105,7847,7848,7850],{"class":1107,"line":1400},[1105,7849,2406],{"class":1332},[1105,7851,1467],{"class":1338},[1105,7853,7854,7856],{"class":1107,"line":1411},[1105,7855,1464],{"class":1332},[1105,7857,1467],{"class":1328},[1133,7859,7861],{"id":7860},"building-the-chats-history-dropdown","Building the chats history dropdown",[995,7863,7864,7865,7870,7871,7876,7877,7870,7884,7886],{},"The component uses ",[1049,7866,7867],{"href":457},[1055,7868,7869],{},"UDropdownMenu"," with a ",[1049,7872,7873],{"href":230},[1055,7874,7875],{},"UButton"," as trigger. Use ",[1049,7878,7881],{"href":7879,"rel":7880},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-fetch",[1053],[1055,7882,7883],{},"useFetch",[1055,7885,7057],{}," to fetch and cache the chat list:",[1305,7888,7889],{},[1096,7890,7893],{"className":1537,"code":7891,"filename":7892,"language":34,"meta":1101,"style":1101},"\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",[1055,7894,7895,7915,7927,7931,7963,7978,7992,7998,8002,8022,8027,8043,8059,8079,8103,8107,8132,8157,8179,8205,8211,8215,8223,8227,8235,8266,8273,8290,8304,8318,8330,8344,8349,8357],{"__ignoreMap":1101},[1105,7896,7897,7899,7901,7903,7905,7907,7909,7911,7913],{"class":1107,"line":1108},[1105,7898,1547],{"class":1332},[1105,7900,5136],{"class":1338},[1105,7902,5139],{"class":1575},[1105,7904,5142],{"class":1575},[1105,7906,1579],{"class":1332},[1105,7908,1506],{"class":1332},[1105,7910,1311],{"class":1115},[1105,7912,1506],{"class":1332},[1105,7914,1553],{"class":1332},[1105,7916,7917,7919,7921,7923,7925],{"class":1107,"line":1125},[1105,7918,3054],{"class":1575},[1105,7920,6233],{"class":1328},[1105,7922,1579],{"class":1332},[1105,7924,6238],{"class":1128},[1105,7926,2661],{"class":1328},[1105,7928,7929],{"class":1107,"line":1348},[1105,7930,1397],{"emptyLinePlaceholder":21},[1105,7932,7933,7935,7937,7939,7941,7943,7945,7947,7949,7951,7953,7955,7957,7959,7961],{"class":1107,"line":1363},[1105,7934,3054],{"class":1575},[1105,7936,1697],{"class":1332},[1105,7938,6272],{"class":1338},[1105,7940,1342],{"class":1332},[1105,7942,1763],{"class":1328},[1105,7944,1464],{"class":1332},[1105,7946,2615],{"class":1332},[1105,7948,2618],{"class":1318},[1105,7950,6286],{"class":1128},[1105,7952,1329],{"class":1328},[1105,7954,1357],{"class":1332},[1105,7956,5279],{"class":1115},[1105,7958,1357],{"class":1332},[1105,7960,1703],{"class":1332},[1105,7962,1408],{"class":1332},[1105,7964,7965,7968,7970,7972,7974,7976],{"class":1107,"line":1375},[1105,7966,7967],{"class":1338},"  key",[1105,7969,1342],{"class":1332},[1105,7971,1419],{"class":1332},[1105,7973,1774],{"class":1115},[1105,7975,1357],{"class":1332},[1105,7977,1360],{"class":1332},[1105,7979,7980,7983,7985,7987,7989],{"class":1107,"line":1386},[1105,7981,7982],{"class":1128},"  default",[1105,7984,1342],{"class":1332},[1105,7986,4986],{"class":1332},[1105,7988,1812],{"class":1575},[1105,7990,7991],{"class":1328}," []\n",[1105,7993,7994,7996],{"class":1107,"line":1394},[1105,7995,1464],{"class":1332},[1105,7997,1467],{"class":1328},[1105,7999,8000],{"class":1107,"line":1400},[1105,8001,1397],{"emptyLinePlaceholder":21},[1105,8003,8004,8006,8009,8011,8014,8016,8018,8020],{"class":1107,"line":1411},[1105,8005,3054],{"class":1575},[1105,8007,8008],{"class":1328}," items ",[1105,8010,1579],{"class":1332},[1105,8012,8013],{"class":1128}," computed",[1105,8015,1329],{"class":1328},[1105,8017,1792],{"class":1332},[1105,8019,1812],{"class":1575},[1105,8021,1345],{"class":1328},[1105,8023,8024],{"class":1107,"line":1427},[1105,8025,8026],{"class":1332},"  {\n",[1105,8028,8029,8032,8034,8036,8039,8041],{"class":1107,"line":1433},[1105,8030,8031],{"class":1338},"    label",[1105,8033,1342],{"class":1332},[1105,8035,1419],{"class":1332},[1105,8037,8038],{"class":1115},"New chat",[1105,8040,1357],{"class":1332},[1105,8042,1360],{"class":1332},[1105,8044,8045,8048,8050,8052,8055,8057],{"class":1107,"line":1438},[1105,8046,8047],{"class":1338},"    to",[1105,8049,1342],{"class":1332},[1105,8051,1419],{"class":1332},[1105,8053,8054],{"class":1115},"\u002F",[1105,8056,1357],{"class":1332},[1105,8058,1360],{"class":1332},[1105,8060,8061,8064,8066,8068,8075,8077],{"class":1107,"line":1461},[1105,8062,8063],{"class":1338},"    icon",[1105,8065,1342],{"class":1332},[1105,8067,1419],{"class":1332},[1105,8069,8070,8074],{"class":1115},[8071,8072],"i",{"class":8073},"shiki-icon-highlight sRy2g","i-lucide-plus-square",[1105,8076,1357],{"class":1332},[1105,8078,1360],{"class":1332},[1105,8080,8081,8084,8086,8089,8091,8094,8097,8099,8101],{"class":1107,"line":1966},[1105,8082,8083],{"class":1338},"    active",[1105,8085,1342],{"class":1332},[1105,8087,8088],{"class":1328}," route",[1105,8090,1795],{"class":1332},[1105,8092,8093],{"class":1328},"name ",[1105,8095,8096],{"class":1332},"===",[1105,8098,1419],{"class":1332},[1105,8100,7091],{"class":1115},[1105,8102,1383],{"class":1332},[1105,8104,8105],{"class":1107,"line":1993},[1105,8106,1430],{"class":1332},[1105,8108,8109,8112,8114,8116,8118,8120,8122,8124,8126,8128,8130],{"class":1107,"line":2039},[1105,8110,8111],{"class":1332},"  ...",[1105,8113,1774],{"class":1328},[1105,8115,1795],{"class":1332},[1105,8117,3339],{"class":1328},[1105,8119,1795],{"class":1332},[1105,8121,4486],{"class":1128},[1105,8123,1329],{"class":1328},[1105,8125,262],{"class":1929},[1105,8127,1812],{"class":1575},[1105,8129,1938],{"class":1328},[1105,8131,1333],{"class":1332},[1105,8133,8134,8136,8138,8140,8142,8145,8148,8150,8153,8155],{"class":1107,"line":2106},[1105,8135,8031],{"class":1338},[1105,8137,1342],{"class":1332},[1105,8139,2783],{"class":1328},[1105,8141,1795],{"class":1332},[1105,8143,8144],{"class":1328},"title ",[1105,8146,8147],{"class":1332},"||",[1105,8149,1419],{"class":1332},[1105,8151,8152],{"class":1115},"Untitled",[1105,8154,1357],{"class":1332},[1105,8156,1360],{"class":1332},[1105,8158,8159,8161,8163,8165,8167,8169,8171,8173,8175,8177],{"class":1107,"line":2176},[1105,8160,8047],{"class":1338},[1105,8162,1342],{"class":1332},[1105,8164,3693],{"class":1332},[1105,8166,5405],{"class":1115},[1105,8168,5408],{"class":1332},[1105,8170,262],{"class":1328},[1105,8172,1795],{"class":1332},[1105,8174,2006],{"class":1328},[1105,8176,5417],{"class":1332},[1105,8178,1360],{"class":1332},[1105,8180,8181,8183,8185,8187,8189,8191,8193,8196,8198,8200,8202],{"class":1107,"line":2216},[1105,8182,8083],{"class":1338},[1105,8184,1342],{"class":1332},[1105,8186,8088],{"class":1328},[1105,8188,1795],{"class":1332},[1105,8190,6303],{"class":1328},[1105,8192,1795],{"class":1332},[1105,8194,8195],{"class":1328},"id ",[1105,8197,8096],{"class":1332},[1105,8199,2783],{"class":1328},[1105,8201,1795],{"class":1332},[1105,8203,8204],{"class":1328},"id\n",[1105,8206,8207,8209],{"class":1107,"line":2267},[1105,8208,2406],{"class":1332},[1105,8210,1959],{"class":1328},[1105,8212,8213],{"class":1107,"line":2280},[1105,8214,2313],{"class":1328},[1105,8216,8217,8219,8221],{"class":1107,"line":2310},[1105,8218,1623],{"class":1332},[1105,8220,5136],{"class":1338},[1105,8222,1553],{"class":1332},[1105,8224,8225],{"class":1107,"line":2316},[1105,8226,1397],{"emptyLinePlaceholder":21},[1105,8228,8229,8231,8233],{"class":1107,"line":2321},[1105,8230,1547],{"class":1332},[1105,8232,1550],{"class":1338},[1105,8234,1553],{"class":1332},[1105,8236,8237,8239,8241,8244,8246,8248,8251,8253,8255,8257,8259,8262,8264],{"class":1107,"line":2353},[1105,8238,1560],{"class":1332},[1105,8240,7869],{"class":1338},[1105,8242,8243],{"class":1575}," :items",[1105,8245,1579],{"class":1332},[1105,8247,1506],{"class":1332},[1105,8249,8250],{"class":1115},"items",[1105,8252,1506],{"class":1332},[1105,8254,5489],{"class":1575},[1105,8256,1579],{"class":1332},[1105,8258,1506],{"class":1332},[1105,8260,8261],{"class":1115},"m-2",[1105,8263,1506],{"class":1332},[1105,8265,1553],{"class":1332},[1105,8267,8268,8270],{"class":1107,"line":2369},[1105,8269,1569],{"class":1332},[1105,8271,8272],{"class":1338},"UButton\n",[1105,8274,8275,8278,8280,8282,8288],{"class":1107,"line":2387},[1105,8276,8277],{"class":1575},"      icon",[1105,8279,1579],{"class":1332},[1105,8281,1506],{"class":1332},[1105,8283,8284,8287],{"class":1115},[8071,8285],{"class":8286},"shiki-icon-highlight sdATh","i-lucide-messages-square",[1105,8289,5562],{"class":1332},[1105,8291,8292,8295,8297,8299,8302],{"class":1107,"line":2403},[1105,8293,8294],{"class":1575},"      variant",[1105,8296,1579],{"class":1332},[1105,8298,1506],{"class":1332},[1105,8300,8301],{"class":1115},"ghost",[1105,8303,5562],{"class":1332},[1105,8305,8306,8309,8311,8313,8316],{"class":1107,"line":2411},[1105,8307,8308],{"class":1575},"      label",[1105,8310,1579],{"class":1332},[1105,8312,1506],{"class":1332},[1105,8314,8315],{"class":1115},"Chats History",[1105,8317,5562],{"class":1332},[1105,8319,8320,8322,8324,8326,8328],{"class":1107,"line":3391},[1105,8321,6661],{"class":1575},[1105,8323,1579],{"class":1332},[1105,8325,1506],{"class":1332},[1105,8327,5647],{"class":1115},[1105,8329,5562],{"class":1332},[1105,8331,8332,8335,8337,8339,8342],{"class":1107,"line":3408},[1105,8333,8334],{"class":1575},"      class",[1105,8336,1579],{"class":1332},[1105,8338,1506],{"class":1332},[1105,8340,8341],{"class":1115},"w-fit",[1105,8343,5562],{"class":1332},[1105,8345,8346],{"class":1107,"line":3440},[1105,8347,8348],{"class":1332},"    \u002F>\n",[1105,8350,8351,8353,8355],{"class":1107,"line":3453},[1105,8352,1614],{"class":1332},[1105,8354,7869],{"class":1338},[1105,8356,1553],{"class":1332},[1105,8358,8359,8361,8363],{"class":1107,"line":3458},[1105,8360,1623],{"class":1332},[1105,8362,1550],{"class":1338},[1105,8364,1553],{"class":1332},[999,8366,8368],{"id":8367},"integrating-history-in-the-home-page","Integrating history in the home page",[1305,8370,8371],{},[1682,8372,8373],{},[1096,8374,8377],{"className":1537,"code":8375,"filename":5126,"highlights":8376,"language":34,"meta":1101,"style":1101},"\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",[2403,2411,3391],[1055,8378,8379,8399,8415,8431,8435,8447,8469,8473,8485,8489,8493,8517,8531,8539,8547,8561,8597,8601,8605,8611,8615,8619,8641,8645,8653,8657,8665,8683,8697,8707,8716,8728,8746,8764,8768,8776,8780,8786,8798,8810,8822,8834,8846,8850,8868,8876,8884,8892,8900],{"__ignoreMap":1101},[1105,8380,8381,8383,8385,8387,8389,8391,8393,8395,8397],{"class":1107,"line":1108},[1105,8382,1547],{"class":1332},[1105,8384,5136],{"class":1338},[1105,8386,5139],{"class":1575},[1105,8388,5142],{"class":1575},[1105,8390,1579],{"class":1332},[1105,8392,1506],{"class":1332},[1105,8394,1311],{"class":1115},[1105,8396,1506],{"class":1332},[1105,8398,1553],{"class":1332},[1105,8400,8401,8403,8405,8407,8409,8411,8413],{"class":1107,"line":1125},[1105,8402,3054],{"class":1575},[1105,8404,5159],{"class":1328},[1105,8406,1579],{"class":1332},[1105,8408,5164],{"class":1128},[1105,8410,1329],{"class":1328},[1105,8412,5169],{"class":1332},[1105,8414,1467],{"class":1328},[1105,8416,8417,8419,8421,8423,8425,8427,8429],{"class":1107,"line":1348},[1105,8418,3054],{"class":1575},[1105,8420,5178],{"class":1328},[1105,8422,1579],{"class":1332},[1105,8424,5164],{"class":1128},[1105,8426,1329],{"class":1328},[1105,8428,5187],{"class":4191},[1105,8430,1467],{"class":1328},[1105,8432,8433],{"class":1107,"line":1363},[1105,8434,1397],{"emptyLinePlaceholder":21},[1105,8436,8437,8439,8441,8443,8445],{"class":1107,"line":1375},[1105,8438,2589],{"class":1575},[1105,8440,5200],{"class":1575},[1105,8442,5203],{"class":1128},[1105,8444,1792],{"class":1332},[1105,8446,1408],{"class":1332},[1105,8448,8449,8451,8453,8455,8457,8459,8461,8463,8465,8467],{"class":1107,"line":1386},[1105,8450,3554],{"class":1318},[1105,8452,1938],{"class":1338},[1105,8454,3559],{"class":1332},[1105,8456,5218],{"class":1328},[1105,8458,1795],{"class":1332},[1105,8460,3339],{"class":1328},[1105,8462,1795],{"class":1332},[1105,8464,5227],{"class":1128},[1105,8466,5230],{"class":1338},[1105,8468,5233],{"class":1318},[1105,8470,8471],{"class":1107,"line":1394},[1105,8472,1397],{"emptyLinePlaceholder":21},[1105,8474,8475,8477,8479,8481,8483],{"class":1107,"line":1400},[1105,8476,5242],{"class":1328},[1105,8478,1795],{"class":1332},[1105,8480,3339],{"class":1328},[1105,8482,2615],{"class":1332},[1105,8484,4377],{"class":4191},[1105,8486,8487],{"class":1107,"line":1411},[1105,8488,1397],{"emptyLinePlaceholder":21},[1105,8490,8491],{"class":1107,"line":1427},[1105,8492,5259],{"class":2683},[1105,8494,8495,8497,8499,8501,8503,8505,8507,8509,8511,8513,8515],{"class":1107,"line":1433},[1105,8496,2605],{"class":1575},[1105,8498,2783],{"class":1328},[1105,8500,2615],{"class":1332},[1105,8502,2618],{"class":1318},[1105,8504,5272],{"class":1128},[1105,8506,1329],{"class":1338},[1105,8508,1357],{"class":1332},[1105,8510,5279],{"class":1115},[1105,8512,1357],{"class":1332},[1105,8514,1703],{"class":1332},[1105,8516,1408],{"class":1332},[1105,8518,8519,8521,8523,8525,8527,8529],{"class":1107,"line":1438},[1105,8520,5290],{"class":1338},[1105,8522,1342],{"class":1332},[1105,8524,1419],{"class":1332},[1105,8526,5297],{"class":1115},[1105,8528,1357],{"class":1332},[1105,8530,1360],{"class":1332},[1105,8532,8533,8535,8537],{"class":1107,"line":1461},[1105,8534,5306],{"class":1338},[1105,8536,1342],{"class":1332},[1105,8538,1408],{"class":1332},[1105,8540,8541,8543,8545],{"class":1107,"line":1966},[1105,8542,3379],{"class":1338},[1105,8544,1342],{"class":1332},[1105,8546,1408],{"class":1332},[1105,8548,8549,8551,8553,8555,8557,8559],{"class":1107,"line":1993},[1105,8550,4519],{"class":1338},[1105,8552,1342],{"class":1332},[1105,8554,1419],{"class":1332},[1105,8556,2138],{"class":1115},[1105,8558,1357],{"class":1332},[1105,8560,1360],{"class":1332},[1105,8562,8563,8565,8567,8569,8571,8573,8575,8577,8579,8581,8583,8585,8587,8589,8591,8593,8595],{"class":1107,"line":2039},[1105,8564,4552],{"class":1338},[1105,8566,1342],{"class":1332},[1105,8568,1446],{"class":1338},[1105,8570,1852],{"class":1332},[1105,8572,2512],{"class":1338},[1105,8574,1342],{"class":1332},[1105,8576,1419],{"class":1332},[1105,8578,5351],{"class":1115},[1105,8580,1357],{"class":1332},[1105,8582,1703],{"class":1332},[1105,8584,1706],{"class":1338},[1105,8586,1342],{"class":1332},[1105,8588,5362],{"class":1328},[1105,8590,1795],{"class":1332},[1105,8592,3339],{"class":1328},[1105,8594,1719],{"class":1332},[1105,8596,3180],{"class":1338},[1105,8598,8599],{"class":1107,"line":2106},[1105,8600,4391],{"class":1332},[1105,8602,8603],{"class":1107,"line":2176},[1105,8604,4574],{"class":1332},[1105,8606,8607,8609],{"class":1107,"line":2216},[1105,8608,2406],{"class":1332},[1105,8610,1467],{"class":1338},[1105,8612,8613],{"class":1107,"line":2267},[1105,8614,1397],{"emptyLinePlaceholder":21},[1105,8616,8617],{"class":1107,"line":2280},[1105,8618,5393],{"class":2683},[1105,8620,8621,8623,8625,8627,8629,8631,8633,8635,8637,8639],{"class":1107,"line":2310},[1105,8622,5398],{"class":1128},[1105,8624,1329],{"class":1338},[1105,8626,3699],{"class":1332},[1105,8628,5405],{"class":1115},[1105,8630,5408],{"class":1332},[1105,8632,262],{"class":1328},[1105,8634,1795],{"class":1332},[1105,8636,2006],{"class":1328},[1105,8638,5417],{"class":1332},[1105,8640,1467],{"class":1338},[1105,8642,8643],{"class":1107,"line":2316},[1105,8644,5424],{"class":1332},[1105,8646,8647,8649,8651],{"class":1107,"line":2321},[1105,8648,1623],{"class":1332},[1105,8650,5136],{"class":1338},[1105,8652,1553],{"class":1332},[1105,8654,8655],{"class":1107,"line":2353},[1105,8656,1397],{"emptyLinePlaceholder":21},[1105,8658,8659,8661,8663],{"class":1107,"line":2369},[1105,8660,1547],{"class":1332},[1105,8662,1550],{"class":1338},[1105,8664,1553],{"class":1332},[1105,8666,8667,8669,8671,8673,8675,8677,8679,8681],{"class":1107,"line":2387},[1105,8668,1560],{"class":1332},[1105,8670,5451],{"class":1338},[1105,8672,5454],{"class":1575},[1105,8674,1579],{"class":1332},[1105,8676,1506],{"class":1332},[1105,8678,5461],{"class":1115},[1105,8680,1506],{"class":1332},[1105,8682,1553],{"class":1332},[1105,8684,8686,8688,8690,8692,8695],{"class":8685,"line":2403},[1107,1557],[1105,8687,1569],{"class":1332},[1105,8689,1550],{"class":1338},[1105,8691,5474],{"class":1332},[1105,8693,8694],{"class":1575},"header",[1105,8696,1553],{"class":1332},[1105,8698,8700,8702,8705],{"class":8699,"line":2411},[1107,1557],[1105,8701,1593],{"class":1332},[1105,8703,8704],{"class":1338},"ChatsHistory",[1105,8706,1599],{"class":1332},[1105,8708,8710,8712,8714],{"class":8709,"line":3391},[1107,1557],[1105,8711,1604],{"class":1332},[1105,8713,1550],{"class":1338},[1105,8715,1553],{"class":1332},[1105,8717,8718,8720,8722,8724,8726],{"class":1107,"line":3408},[1105,8719,1569],{"class":1332},[1105,8721,1550],{"class":1338},[1105,8723,5474],{"class":1332},[1105,8725,5477],{"class":1575},[1105,8727,1553],{"class":1332},[1105,8729,8730,8732,8734,8736,8738,8740,8742,8744],{"class":1107,"line":3440},[1105,8731,1593],{"class":1332},[1105,8733,5486],{"class":1338},[1105,8735,5489],{"class":1575},[1105,8737,1579],{"class":1332},[1105,8739,1506],{"class":1332},[1105,8741,5496],{"class":1115},[1105,8743,1506],{"class":1332},[1105,8745,1553],{"class":1332},[1105,8747,8748,8750,8752,8754,8756,8758,8760,8762],{"class":1107,"line":3453},[1105,8749,5505],{"class":1332},[1105,8751,5508],{"class":1338},[1105,8753,5489],{"class":1575},[1105,8755,1579],{"class":1332},[1105,8757,1506],{"class":1332},[1105,8759,5517],{"class":1115},[1105,8761,1506],{"class":1332},[1105,8763,1553],{"class":1332},[1105,8765,8766],{"class":1107,"line":3458},[1105,8767,5526],{"class":1328},[1105,8769,8770,8772,8774],{"class":1107,"line":3464},[1105,8771,5531],{"class":1332},[1105,8773,5508],{"class":1338},[1105,8775,1553],{"class":1332},[1105,8777,8778],{"class":1107,"line":3495},[1105,8779,1397],{"emptyLinePlaceholder":21},[1105,8781,8782,8784],{"class":1107,"line":3539},[1105,8783,5505],{"class":1332},[1105,8785,5547],{"class":1338},[1105,8787,8788,8790,8792,8794,8796],{"class":1107,"line":3546},[1105,8789,5553],{"class":1575},[1105,8791,1579],{"class":1332},[1105,8793,1506],{"class":1332},[1105,8795,5218],{"class":1115},[1105,8797,5562],{"class":1332},[1105,8799,8800,8802,8804,8806,8808],{"class":1107,"line":3551},[1105,8801,5568],{"class":1575},[1105,8803,1579],{"class":1332},[1105,8805,1506],{"class":1332},[1105,8807,5575],{"class":1115},[1105,8809,5562],{"class":1332},[1105,8811,8812,8814,8816,8818,8820],{"class":1107,"line":3569},[1105,8813,5583],{"class":1575},[1105,8815,1579],{"class":1332},[1105,8817,1506],{"class":1332},[1105,8819,5590],{"class":1115},[1105,8821,5562],{"class":1332},[1105,8823,8824,8826,8828,8830,8832],{"class":1107,"line":3608},[1105,8825,5598],{"class":1575},[1105,8827,1579],{"class":1332},[1105,8829,1506],{"class":1332},[1105,8831,5605],{"class":1115},[1105,8833,5562],{"class":1332},[1105,8835,8836,8838,8840,8842,8844],{"class":1107,"line":3614},[1105,8837,5613],{"class":1575},[1105,8839,1579],{"class":1332},[1105,8841,1506],{"class":1332},[1105,8843,5620],{"class":1115},[1105,8845,5562],{"class":1332},[1105,8847,8848],{"class":1107,"line":3619},[1105,8849,5628],{"class":1332},[1105,8851,8852,8854,8856,8858,8860,8862,8864,8866],{"class":1107,"line":3625},[1105,8853,5634],{"class":1332},[1105,8855,5637],{"class":1338},[1105,8857,5640],{"class":1575},[1105,8859,1579],{"class":1332},[1105,8861,1506],{"class":1332},[1105,8863,5647],{"class":1115},[1105,8865,1506],{"class":1332},[1105,8867,1599],{"class":1332},[1105,8869,8870,8872,8874],{"class":1107,"line":3645},[1105,8871,5531],{"class":1332},[1105,8873,5101],{"class":1338},[1105,8875,1553],{"class":1332},[1105,8877,8878,8880,8882],{"class":1107,"line":3673},[1105,8879,5665],{"class":1332},[1105,8881,5486],{"class":1338},[1105,8883,1553],{"class":1332},[1105,8885,8886,8888,8890],{"class":1107,"line":3685},[1105,8887,1604],{"class":1332},[1105,8889,1550],{"class":1338},[1105,8891,1553],{"class":1332},[1105,8893,8894,8896,8898],{"class":1107,"line":3704},[1105,8895,1614],{"class":1332},[1105,8897,5451],{"class":1338},[1105,8899,1553],{"class":1332},[1105,8901,8902,8904,8906],{"class":1107,"line":3732},[1105,8903,1623],{"class":1332},[1105,8905,1550],{"class":1338},[1105,8907,1553],{"class":1332},[999,8909,8911],{"id":8910},"integrating-history-in-the-chat-page","Integrating history in the chat page",[1305,8913,8914],{},[1682,8915,8916],{},[1096,8917,8920],{"className":1537,"code":8918,"filename":6127,"highlights":8919,"language":34,"meta":1101,"style":1101},"\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",[3974,3979,3984],[1055,8921,8922,8942,8968,8986,9004,9008,9020,9032,9036,9040,9082,9086,9102,9142,9146,9150,9166,9170,9174,9190,9208,9226,9240,9264,9272,9284,9288,9312,9326,9330,9334,9346,9358,9372,9386,9398,9404,9408,9414,9418,9436,9446,9466,9492,9504,9508,9512,9516,9520,9532,9560,9570,9574,9580,9588,9592,9600,9618,9630,9638,9646,9658,9677,9684,9697,9709,9713,9725,9729,9753,9819,9825,9837,9849,9861,9865,9871,9883,9895,9899,9907,9911,9931,9937,9949,9961,9973,9977,10005,10009,10017,10025,10033,10041,10049,10053,10059,10071,10083,10095,10107,10119,10123,10129,10141,10153,10165,10177,10181,10189,10197,10205,10213],{"__ignoreMap":1101},[1105,8923,8924,8926,8928,8930,8932,8934,8936,8938,8940],{"class":1107,"line":1108},[1105,8925,1547],{"class":1332},[1105,8927,5136],{"class":1338},[1105,8929,5139],{"class":1575},[1105,8931,5142],{"class":1575},[1105,8933,1579],{"class":1332},[1105,8935,1506],{"class":1332},[1105,8937,1311],{"class":1115},[1105,8939,1506],{"class":1332},[1105,8941,1553],{"class":1332},[1105,8943,8944,8946,8948,8950,8952,8954,8956,8958,8960,8962,8964,8966],{"class":1107,"line":1125},[1105,8945,1694],{"class":1318},[1105,8947,1697],{"class":1332},[1105,8949,6160],{"class":1328},[1105,8951,1703],{"class":1332},[1105,8953,6165],{"class":1328},[1105,8955,1703],{"class":1332},[1105,8957,6170],{"class":1328},[1105,8959,1719],{"class":1332},[1105,8961,1722],{"class":1318},[1105,8963,1419],{"class":1332},[1105,8965,2526],{"class":1115},[1105,8967,1383],{"class":1332},[1105,8969,8970,8972,8974,8976,8978,8980,8982,8984],{"class":1107,"line":1348},[1105,8971,1694],{"class":1318},[1105,8973,1697],{"class":1332},[1105,8975,6190],{"class":1328},[1105,8977,1719],{"class":1332},[1105,8979,1722],{"class":1318},[1105,8981,1419],{"class":1332},[1105,8983,6199],{"class":1115},[1105,8985,1383],{"class":1332},[1105,8987,8988,8990,8992,8994,8996,8998,9000,9002],{"class":1107,"line":1363},[1105,8989,1694],{"class":1318},[1105,8991,1697],{"class":1332},[1105,8993,6211],{"class":1328},[1105,8995,1719],{"class":1332},[1105,8997,1722],{"class":1318},[1105,8999,1419],{"class":1332},[1105,9001,6220],{"class":1115},[1105,9003,1383],{"class":1332},[1105,9005,9006],{"class":1107,"line":1375},[1105,9007,1397],{"emptyLinePlaceholder":21},[1105,9009,9010,9012,9014,9016,9018],{"class":1107,"line":1386},[1105,9011,3054],{"class":1575},[1105,9013,6233],{"class":1328},[1105,9015,1579],{"class":1332},[1105,9017,6238],{"class":1128},[1105,9019,2661],{"class":1328},[1105,9021,9022,9024,9026,9028,9030],{"class":1107,"line":1394},[1105,9023,3054],{"class":1575},[1105,9025,6247],{"class":1328},[1105,9027,1579],{"class":1332},[1105,9029,6252],{"class":1128},[1105,9031,2661],{"class":1328},[1105,9033,9034],{"class":1107,"line":1400},[1105,9035,1397],{"emptyLinePlaceholder":21},[1105,9037,9038],{"class":1107,"line":1411},[1105,9039,6263],{"class":2683},[1105,9041,9042,9044,9046,9048,9050,9052,9054,9056,9058,9060,9062,9064,9066,9068,9070,9072,9074,9076,9078,9080],{"class":1107,"line":1427},[1105,9043,3054],{"class":1575},[1105,9045,1697],{"class":1332},[1105,9047,6272],{"class":1338},[1105,9049,1342],{"class":1332},[1105,9051,6277],{"class":1328},[1105,9053,1464],{"class":1332},[1105,9055,2615],{"class":1332},[1105,9057,2618],{"class":1318},[1105,9059,6286],{"class":1128},[1105,9061,1329],{"class":1328},[1105,9063,3699],{"class":1332},[1105,9065,6293],{"class":1115},[1105,9067,5408],{"class":1332},[1105,9069,6298],{"class":1328},[1105,9071,1795],{"class":1332},[1105,9073,6303],{"class":1328},[1105,9075,1795],{"class":1332},[1105,9077,2006],{"class":1328},[1105,9079,5417],{"class":1332},[1105,9081,1467],{"class":1328},[1105,9083,9084],{"class":1107,"line":1433},[1105,9085,1397],{"emptyLinePlaceholder":21},[1105,9087,9088,9090,9092,9094,9096,9098,9100],{"class":1107,"line":1438},[1105,9089,6320],{"class":1318},[1105,9091,1938],{"class":1328},[1105,9093,3559],{"class":1332},[1105,9095,6327],{"class":1328},[1105,9097,1795],{"class":1332},[1105,9099,6332],{"class":1328},[1105,9101,1333],{"class":1332},[1105,9103,9104,9106,9108,9110,9112,9114,9116,9118,9120,9122,9124,9126,9128,9130,9132,9134,9136,9138,9140],{"class":1107,"line":1461},[1105,9105,6339],{"class":1318},[1105,9107,2892],{"class":1128},[1105,9109,1329],{"class":1338},[1105,9111,1852],{"class":1332},[1105,9113,3581],{"class":1338},[1105,9115,1342],{"class":1332},[1105,9117,3587],{"class":3586},[1105,9119,1703],{"class":1332},[1105,9121,3592],{"class":1338},[1105,9123,1342],{"class":1332},[1105,9125,1419],{"class":1332},[1105,9127,3599],{"class":1115},[1105,9129,1357],{"class":1332},[1105,9131,1703],{"class":1332},[1105,9133,6368],{"class":1338},[1105,9135,1342],{"class":1332},[1105,9137,4192],{"class":4191},[1105,9139,1719],{"class":1332},[1105,9141,1467],{"class":1338},[1105,9143,9144],{"class":1107,"line":1966},[1105,9145,5424],{"class":1332},[1105,9147,9148],{"class":1107,"line":1993},[1105,9149,1397],{"emptyLinePlaceholder":21},[1105,9151,9152,9154,9156,9158,9160,9162,9164],{"class":1107,"line":2039},[1105,9153,3054],{"class":1575},[1105,9155,5159],{"class":1328},[1105,9157,1579],{"class":1332},[1105,9159,5164],{"class":1128},[1105,9161,1329],{"class":1328},[1105,9163,5169],{"class":1332},[1105,9165,1467],{"class":1328},[1105,9167,9168],{"class":1107,"line":2106},[1105,9169,1397],{"emptyLinePlaceholder":21},[1105,9171,9172],{"class":1107,"line":2176},[1105,9173,6409],{"class":2683},[1105,9175,9176,9178,9180,9182,9184,9186,9188],{"class":1107,"line":2216},[1105,9177,3054],{"class":1575},[1105,9179,6417],{"class":1328},[1105,9181,1579],{"class":1332},[1105,9183,1889],{"class":1332},[1105,9185,6190],{"class":1128},[1105,9187,1329],{"class":1328},[1105,9189,1333],{"class":1332},[1105,9191,9192,9194,9196,9198,9200,9202,9204,9206],{"class":1107,"line":2267},[1105,9193,1785],{"class":1338},[1105,9195,1342],{"class":1332},[1105,9197,6437],{"class":1328},[1105,9199,1795],{"class":1332},[1105,9201,3339],{"class":1328},[1105,9203,1795],{"class":1332},[1105,9205,2006],{"class":1328},[1105,9207,1360],{"class":1332},[1105,9209,9210,9212,9214,9216,9218,9220,9222,9224],{"class":1107,"line":2280},[1105,9211,1945],{"class":1338},[1105,9213,1342],{"class":1332},[1105,9215,6437],{"class":1328},[1105,9217,1795],{"class":1332},[1105,9219,3339],{"class":1328},[1105,9221,1795],{"class":1332},[1105,9223,1984],{"class":1328},[1105,9225,1360],{"class":1332},[1105,9227,9228,9230,9232,9234,9236,9238],{"class":1107,"line":2310},[1105,9229,6472],{"class":1338},[1105,9231,1342],{"class":1332},[1105,9233,1889],{"class":1332},[1105,9235,6160],{"class":1128},[1105,9237,1329],{"class":1328},[1105,9239,1333],{"class":1332},[1105,9241,9242,9244,9246,9248,9250,9252,9254,9256,9258,9260,9262],{"class":1107,"line":2316},[1105,9243,6488],{"class":1338},[1105,9245,1342],{"class":1332},[1105,9247,3693],{"class":1332},[1105,9249,6293],{"class":1115},[1105,9251,5408],{"class":1332},[1105,9253,6327],{"class":1328},[1105,9255,1795],{"class":1332},[1105,9257,3339],{"class":1328},[1105,9259,1795],{"class":1332},[1105,9261,2006],{"class":1328},[1105,9263,6509],{"class":1332},[1105,9265,9266,9268,9270],{"class":1107,"line":2321},[1105,9267,2406],{"class":1332},[1105,9269,1869],{"class":1328},[1105,9271,1360],{"class":1332},[1105,9273,9274,9276,9278,9280,9282],{"class":1107,"line":2353},[1105,9275,6524],{"class":1338},[1105,9277,1329],{"class":1332},[1105,9279,6529],{"class":1929},[1105,9281,1869],{"class":1332},[1105,9283,1408],{"class":1332},[1105,9285,9286],{"class":1107,"line":2369},[1105,9287,6539],{"class":2683},[1105,9289,9290,9292,9294,9296,9298,9300,9302,9304,9306,9308,9310],{"class":1107,"line":2387},[1105,9291,6545],{"class":1318},[1105,9293,1938],{"class":1338},[1105,9295,6529],{"class":1328},[1105,9297,1795],{"class":1332},[1105,9299,6554],{"class":1328},[1105,9301,3366],{"class":1332},[1105,9303,1419],{"class":1332},[1105,9305,4339],{"class":1115},[1105,9307,1357],{"class":1332},[1105,9309,3564],{"class":1338},[1105,9311,1333],{"class":1332},[1105,9313,9314,9316,9318,9320,9322,9324],{"class":1107,"line":2403},[1105,9315,6572],{"class":1128},[1105,9317,1329],{"class":1338},[1105,9319,1357],{"class":1332},[1105,9321,1774],{"class":1115},[1105,9323,1357],{"class":1332},[1105,9325,1467],{"class":1338},[1105,9327,9328],{"class":1107,"line":2411},[1105,9329,4574],{"class":1332},[1105,9331,9332],{"class":1107,"line":3391},[1105,9333,1430],{"class":1332},[1105,9335,9336,9338,9340,9342,9344],{"class":1107,"line":3408},[1105,9337,6598],{"class":1338},[1105,9339,1329],{"class":1332},[1105,9341,6603],{"class":1929},[1105,9343,1869],{"class":1332},[1105,9345,1408],{"class":1332},[1105,9347,9348,9350,9352,9354,9356],{"class":1107,"line":3440},[1105,9349,6613],{"class":1328},[1105,9351,1795],{"class":1332},[1105,9353,6618],{"class":1128},[1105,9355,1329],{"class":1338},[1105,9357,1333],{"class":1332},[1105,9359,9360,9362,9364,9366,9368,9370],{"class":1107,"line":3453},[1105,9361,6628],{"class":1338},[1105,9363,1342],{"class":1332},[1105,9365,1419],{"class":1332},[1105,9367,497],{"class":1115},[1105,9369,1357],{"class":1332},[1105,9371,1360],{"class":1332},[1105,9373,9374,9376,9378,9380,9382,9384],{"class":1107,"line":3458},[1105,9375,6644],{"class":1338},[1105,9377,1342],{"class":1332},[1105,9379,6649],{"class":1328},[1105,9381,1795],{"class":1332},[1105,9383,4491],{"class":1328},[1105,9385,1360],{"class":1332},[1105,9387,9388,9390,9392,9394,9396],{"class":1107,"line":3464},[1105,9389,6661],{"class":1338},[1105,9391,1342],{"class":1332},[1105,9393,1419],{"class":1332},[1105,9395,6603],{"class":1115},[1105,9397,1383],{"class":1332},[1105,9399,9400,9402],{"class":1107,"line":3495},[1105,9401,3394],{"class":1332},[1105,9403,1467],{"class":1338},[1105,9405,9406],{"class":1107,"line":3539},[1105,9407,3611],{"class":1332},[1105,9409,9410,9412],{"class":1107,"line":3546},[1105,9411,1464],{"class":1332},[1105,9413,1467],{"class":1328},[1105,9415,9416],{"class":1107,"line":3551},[1105,9417,1397],{"emptyLinePlaceholder":21},[1105,9419,9420,9422,9424,9426,9428,9430,9432,9434],{"class":1107,"line":3569},[1105,9421,6697],{"class":1575},[1105,9423,6700],{"class":1128},[1105,9425,1329],{"class":1332},[1105,9427,6705],{"class":1929},[1105,9429,1342],{"class":1332},[1105,9431,6710],{"class":1111},[1105,9433,1869],{"class":1332},[1105,9435,1408],{"class":1332},[1105,9437,9438,9440,9442,9444],{"class":1107,"line":3608},[1105,9439,6719],{"class":1328},[1105,9441,1795],{"class":1332},[1105,9443,6724],{"class":1128},[1105,9445,2661],{"class":1338},[1105,9447,9448,9450,9452,9454,9456,9458,9460,9462,9464],{"class":1107,"line":3614},[1105,9449,3554],{"class":1318},[1105,9451,1938],{"class":1338},[1105,9453,5218],{"class":1328},[1105,9455,1795],{"class":1332},[1105,9457,3339],{"class":1328},[1105,9459,1795],{"class":1332},[1105,9461,5227],{"class":1128},[1105,9463,5230],{"class":1338},[1105,9465,1333],{"class":1332},[1105,9467,9468,9470,9472,9474,9476,9478,9480,9482,9484,9486,9488,9490],{"class":1107,"line":3619},[1105,9469,6751],{"class":1328},[1105,9471,1795],{"class":1332},[1105,9473,6756],{"class":1128},[1105,9475,1329],{"class":1338},[1105,9477,1852],{"class":1332},[1105,9479,1706],{"class":1338},[1105,9481,1342],{"class":1332},[1105,9483,5362],{"class":1328},[1105,9485,1795],{"class":1332},[1105,9487,3339],{"class":1328},[1105,9489,1719],{"class":1332},[1105,9491,1467],{"class":1338},[1105,9493,9494,9496,9498,9500,9502],{"class":1107,"line":3625},[1105,9495,6779],{"class":1328},[1105,9497,1795],{"class":1332},[1105,9499,3339],{"class":1328},[1105,9501,2615],{"class":1332},[1105,9503,6788],{"class":1332},[1105,9505,9506],{"class":1107,"line":3645},[1105,9507,3611],{"class":1332},[1105,9509,9510],{"class":1107,"line":3673},[1105,9511,5424],{"class":1332},[1105,9513,9514],{"class":1107,"line":3685},[1105,9515,1397],{"emptyLinePlaceholder":21},[1105,9517,9518],{"class":1107,"line":3704},[1105,9519,6805],{"class":2683},[1105,9521,9522,9524,9526,9528,9530],{"class":1107,"line":3732},[1105,9523,6810],{"class":1128},[1105,9525,1329],{"class":1328},[1105,9527,1792],{"class":1332},[1105,9529,1812],{"class":1575},[1105,9531,1408],{"class":1332},[1105,9533,9534,9536,9538,9540,9542,9544,9546,9548,9550,9552,9554,9556,9558],{"class":1107,"line":3739},[1105,9535,3554],{"class":1318},[1105,9537,1938],{"class":1338},[1105,9539,6327],{"class":1328},[1105,9541,1795],{"class":1332},[1105,9543,3339],{"class":1328},[1105,9545,3865],{"class":1332},[1105,9547,1984],{"class":1328},[1105,9549,1795],{"class":1332},[1105,9551,3844],{"class":1328},[1105,9553,3366],{"class":1332},[1105,9555,3850],{"class":3586},[1105,9557,3564],{"class":1338},[1105,9559,1333],{"class":1332},[1105,9561,9562,9564,9566,9568],{"class":1107,"line":3744},[1105,9563,6751],{"class":1328},[1105,9565,1795],{"class":1332},[1105,9567,6855],{"class":1128},[1105,9569,2661],{"class":1338},[1105,9571,9572],{"class":1107,"line":3810},[1105,9573,3611],{"class":1332},[1105,9575,9576,9578],{"class":1107,"line":3815},[1105,9577,1464],{"class":1332},[1105,9579,1467],{"class":1328},[1105,9581,9582,9584,9586],{"class":1107,"line":3820},[1105,9583,1623],{"class":1332},[1105,9585,5136],{"class":1338},[1105,9587,1553],{"class":1332},[1105,9589,9590],{"class":1107,"line":3826},[1105,9591,1397],{"emptyLinePlaceholder":21},[1105,9593,9594,9596,9598],{"class":1107,"line":3855},[1105,9595,1547],{"class":1332},[1105,9597,1550],{"class":1338},[1105,9599,1553],{"class":1332},[1105,9601,9602,9604,9606,9608,9610,9612,9614,9616],{"class":1107,"line":3896},[1105,9603,1560],{"class":1332},[1105,9605,5451],{"class":1338},[1105,9607,5454],{"class":1575},[1105,9609,1579],{"class":1332},[1105,9611,1506],{"class":1332},[1105,9613,5461],{"class":1115},[1105,9615,1506],{"class":1332},[1105,9617,1553],{"class":1332},[1105,9619,9620,9622,9624,9626,9628],{"class":1107,"line":3925},[1105,9621,1569],{"class":1332},[1105,9623,1550],{"class":1338},[1105,9625,5474],{"class":1332},[1105,9627,8694],{"class":1575},[1105,9629,1553],{"class":1332},[1105,9631,9632,9634,9636],{"class":1107,"line":3937},[1105,9633,1593],{"class":1332},[1105,9635,8704],{"class":1338},[1105,9637,1599],{"class":1332},[1105,9639,9640,9642,9644],{"class":1107,"line":3953},[1105,9641,1604],{"class":1332},[1105,9643,1550],{"class":1338},[1105,9645,1553],{"class":1332},[1105,9647,9648,9650,9652,9654,9656],{"class":1107,"line":3967},[1105,9649,1569],{"class":1332},[1105,9651,1550],{"class":1338},[1105,9653,5474],{"class":1332},[1105,9655,5477],{"class":1575},[1105,9657,1553],{"class":1332},[1105,9659,9661,9663,9665,9667,9669,9671,9673,9675],{"class":9660,"line":3974},[1107,1557],[1105,9662,1593],{"class":1332},[1105,9664,5486],{"class":1338},[1105,9666,5489],{"class":1575},[1105,9668,1579],{"class":1332},[1105,9670,1506],{"class":1332},[1105,9672,6932],{"class":1115},[1105,9674,1506],{"class":1332},[1105,9676,1553],{"class":1332},[1105,9678,9680,9682],{"class":9679,"line":3979},[1107,1557],[1105,9681,5505],{"class":1332},[1105,9683,6943],{"class":1338},[1105,9685,9687,9689,9691,9693,9695],{"class":9686,"line":3984},[1107,1557],[1105,9688,6948],{"class":1575},[1105,9690,1579],{"class":1332},[1105,9692,1506],{"class":1332},[1105,9694,6955],{"class":1115},[1105,9696,5562],{"class":1332},[1105,9698,9699,9701,9703,9705,9707],{"class":1107,"line":3990},[1105,9700,5568],{"class":1575},[1105,9702,1579],{"class":1332},[1105,9704,1506],{"class":1332},[1105,9706,6968],{"class":1115},[1105,9708,5562],{"class":1332},[1105,9710,9711],{"class":1107,"line":4007},[1105,9712,6975],{"class":1575},[1105,9714,9715,9717,9719,9721,9723],{"class":1107,"line":4029},[1105,9716,6980],{"class":1575},[1105,9718,1579],{"class":1332},[1105,9720,1506],{"class":1332},[1105,9722,6987],{"class":1115},[1105,9724,5562],{"class":1332},[1105,9726,9727],{"class":1107,"line":4047},[1105,9728,5628],{"class":1332},[1105,9730,9731,9733,9735,9737,9739,9741,9743,9745,9747,9749,9751],{"class":1107,"line":4055},[1105,9732,5634],{"class":1332},[1105,9734,1550],{"class":1338},[1105,9736,5474],{"class":1332},[1105,9738,371],{"class":1575},[1105,9740,1579],{"class":1332},[1105,9742,1506],{"class":1332},[1105,9744,1852],{"class":1332},[1105,9746,7012],{"class":1328},[1105,9748,1464],{"class":1332},[1105,9750,1506],{"class":1332},[1105,9752,1553],{"class":1332},[1105,9754,9755,9757,9759,9761,9763,9765,9767,9769,9771,9773,9775,9777,9779,9781,9783,9785,9787,9789,9791,9793,9795,9797,9799,9801,9803,9805,9807,9809,9811,9813,9815,9817],{"class":1107,"line":4072},[1105,9756,7023],{"class":1332},[1105,9758,1550],{"class":1338},[1105,9760,7028],{"class":1318},[1105,9762,1579],{"class":1332},[1105,9764,1506],{"class":1332},[1105,9766,7035],{"class":1328},[1105,9768,1703],{"class":1332},[1105,9770,7040],{"class":1328},[1105,9772,7043],{"class":1332},[1105,9774,2610],{"class":1328},[1105,9776,1795],{"class":1332},[1105,9778,2190],{"class":1328},[1105,9780,1506],{"class":1332},[1105,9782,7054],{"class":1332},[1105,9784,7057],{"class":1575},[1105,9786,1579],{"class":1332},[1105,9788,7062],{"class":1332},[1105,9790,4491],{"class":1328},[1105,9792,1795],{"class":1332},[1105,9794,2006],{"class":1328},[1105,9796,1464],{"class":1332},[1105,9798,7073],{"class":1115},[1105,9800,5408],{"class":1332},[1105,9802,7078],{"class":1328},[1105,9804,1795],{"class":1332},[1105,9806,6554],{"class":1328},[1105,9808,1464],{"class":1332},[1105,9810,7073],{"class":1115},[1105,9812,5408],{"class":1332},[1105,9814,7091],{"class":1328},[1105,9816,7094],{"class":1332},[1105,9818,1553],{"class":1332},[1105,9820,9821,9823],{"class":1107,"line":4093},[1105,9822,7101],{"class":1332},[1105,9824,7104],{"class":1338},[1105,9826,9827,9829,9831,9833,9835],{"class":1107,"line":4103},[1105,9828,7109],{"class":1575},[1105,9830,1579],{"class":1332},[1105,9832,1506],{"class":1332},[1105,9834,7116],{"class":1115},[1105,9836,5562],{"class":1332},[1105,9838,9839,9841,9843,9845,9847],{"class":1107,"line":4113},[1105,9840,7123],{"class":1575},[1105,9842,1579],{"class":1332},[1105,9844,1506],{"class":1332},[1105,9846,7130],{"class":1115},[1105,9848,5562],{"class":1332},[1105,9850,9851,9853,9855,9857,9859],{"class":1107,"line":4123},[1105,9852,7137],{"class":1575},[1105,9854,1579],{"class":1332},[1105,9856,1506],{"class":1332},[1105,9858,7144],{"class":1115},[1105,9860,5562],{"class":1332},[1105,9862,9863],{"class":1107,"line":4140},[1105,9864,7151],{"class":1332},[1105,9866,9867,9869],{"class":1107,"line":4151},[1105,9868,7156],{"class":1332},[1105,9870,7159],{"class":1338},[1105,9872,9873,9875,9877,9879,9881],{"class":1107,"line":4157},[1105,9874,7164],{"class":1575},[1105,9876,1579],{"class":1332},[1105,9878,1506],{"class":1332},[1105,9880,7130],{"class":1115},[1105,9882,5562],{"class":1332},[1105,9884,9885,9887,9889,9891,9893],{"class":1107,"line":4163},[1105,9886,7177],{"class":1575},[1105,9888,1579],{"class":1332},[1105,9890,1506],{"class":1332},[1105,9892,7144],{"class":1115},[1105,9894,5562],{"class":1332},[1105,9896,9897],{"class":1107,"line":4173},[1105,9898,7190],{"class":1332},[1105,9900,9901,9903,9905],{"class":1107,"line":4183},[1105,9902,7195],{"class":1332},[1105,9904,7198],{"class":1338},[1105,9906,1553],{"class":1332},[1105,9908,9909],{"class":1107,"line":4197},[1105,9910,1397],{"emptyLinePlaceholder":21},[1105,9912,9913,9915,9917,9919,9921,9923,9925,9927,9929],{"class":1107,"line":4212},[1105,9914,7101],{"class":1332},[1105,9916,1550],{"class":1338},[1105,9918,7213],{"class":1318},[1105,9920,1579],{"class":1332},[1105,9922,1506],{"class":1332},[1105,9924,7220],{"class":1128},[1105,9926,7223],{"class":1328},[1105,9928,1506],{"class":1332},[1105,9930,1553],{"class":1332},[1105,9932,9933,9935],{"class":1107,"line":4217},[1105,9934,7156],{"class":1332},[1105,9936,7159],{"class":1338},[1105,9938,9939,9941,9943,9945,9947],{"class":1107,"line":4222},[1105,9940,7238],{"class":1575},[1105,9942,1579],{"class":1332},[1105,9944,1506],{"class":1332},[1105,9946,7245],{"class":1115},[1105,9948,5562],{"class":1332},[1105,9950,9951,9953,9955,9957,9959],{"class":1107,"line":4232},[1105,9952,7164],{"class":1575},[1105,9954,1579],{"class":1332},[1105,9956,1506],{"class":1332},[1105,9958,7130],{"class":1115},[1105,9960,5562],{"class":1332},[1105,9962,9963,9965,9967,9969,9971],{"class":1107,"line":4248},[1105,9964,7177],{"class":1575},[1105,9966,1579],{"class":1332},[1105,9968,1506],{"class":1332},[1105,9970,7144],{"class":1115},[1105,9972,5562],{"class":1332},[1105,9974,9975],{"class":1107,"line":4263},[1105,9976,7190],{"class":1332},[1105,9978,9979,9981,9983,9985,9987,9989,9991,9993,9995,9997,9999,10001,10003],{"class":1107,"line":4269},[1105,9980,7156],{"class":1332},[1105,9982,995],{"class":1338},[1105,9984,7213],{"class":1575},[1105,9986,1579],{"class":1332},[1105,9988,1506],{"class":1332},[1105,9990,7290],{"class":1115},[1105,9992,1506],{"class":1332},[1105,9994,5489],{"class":1575},[1105,9996,1579],{"class":1332},[1105,9998,1506],{"class":1332},[1105,10000,7301],{"class":1115},[1105,10002,1506],{"class":1332},[1105,10004,1553],{"class":1332},[1105,10006,10007],{"class":1107,"line":4275},[1105,10008,7310],{"class":1328},[1105,10010,10011,10013,10015],{"class":1107,"line":4283},[1105,10012,7315],{"class":1332},[1105,10014,995],{"class":1338},[1105,10016,1553],{"class":1332},[1105,10018,10019,10021,10023],{"class":1107,"line":4288},[1105,10020,7195],{"class":1332},[1105,10022,1550],{"class":1338},[1105,10024,1553],{"class":1332},[1105,10026,10027,10029,10031],{"class":1107,"line":4294},[1105,10028,7332],{"class":1332},[1105,10030,1550],{"class":1338},[1105,10032,1553],{"class":1332},[1105,10034,10035,10037,10039],{"class":1107,"line":4314},[1105,10036,7341],{"class":1332},[1105,10038,1550],{"class":1338},[1105,10040,1553],{"class":1332},[1105,10042,10043,10045,10047],{"class":1107,"line":4329},[1105,10044,5531],{"class":1332},[1105,10046,5107],{"class":1338},[1105,10048,1553],{"class":1332},[1105,10050,10051],{"class":1107,"line":4346},[1105,10052,1397],{"emptyLinePlaceholder":21},[1105,10054,10055,10057],{"class":1107,"line":4369},[1105,10056,5505],{"class":1332},[1105,10058,5547],{"class":1338},[1105,10060,10061,10063,10065,10067,10069],{"class":1107,"line":4380},[1105,10062,5553],{"class":1575},[1105,10064,1579],{"class":1332},[1105,10066,1506],{"class":1332},[1105,10068,5218],{"class":1115},[1105,10070,5562],{"class":1332},[1105,10072,10073,10075,10077,10079,10081],{"class":1107,"line":4388},[1105,10074,7380],{"class":1575},[1105,10076,1579],{"class":1332},[1105,10078,1506],{"class":1332},[1105,10080,7387],{"class":1115},[1105,10082,5562],{"class":1332},[1105,10084,10085,10087,10089,10091,10093],{"class":1107,"line":4394},[1105,10086,5583],{"class":1575},[1105,10088,1579],{"class":1332},[1105,10090,1506],{"class":1332},[1105,10092,5590],{"class":1115},[1105,10094,5562],{"class":1332},[1105,10096,10097,10099,10101,10103,10105],{"class":1107,"line":4399},[1105,10098,6980],{"class":1575},[1105,10100,1579],{"class":1332},[1105,10102,1506],{"class":1332},[1105,10104,7412],{"class":1115},[1105,10106,5562],{"class":1332},[1105,10108,10109,10111,10113,10115,10117],{"class":1107,"line":4422},[1105,10110,5613],{"class":1575},[1105,10112,1579],{"class":1332},[1105,10114,1506],{"class":1332},[1105,10116,7425],{"class":1115},[1105,10118,5562],{"class":1332},[1105,10120,10121],{"class":1107,"line":4428},[1105,10122,5628],{"class":1332},[1105,10124,10125,10127],{"class":1107,"line":4448},[1105,10126,5634],{"class":1332},[1105,10128,7438],{"class":1338},[1105,10130,10131,10133,10135,10137,10139],{"class":1107,"line":4454},[1105,10132,7443],{"class":1575},[1105,10134,1579],{"class":1332},[1105,10136,1506],{"class":1332},[1105,10138,6968],{"class":1115},[1105,10140,5562],{"class":1332},[1105,10142,10143,10145,10147,10149,10151],{"class":1107,"line":4500},[1105,10144,7456],{"class":1575},[1105,10146,1579],{"class":1332},[1105,10148,1506],{"class":1332},[1105,10150,5647],{"class":1115},[1105,10152,5562],{"class":1332},[1105,10154,10155,10157,10159,10161,10163],{"class":1107,"line":4516},[1105,10156,7469],{"class":1575},[1105,10158,1579],{"class":1332},[1105,10160,1506],{"class":1332},[1105,10162,7476],{"class":1115},[1105,10164,5562],{"class":1332},[1105,10166,10167,10169,10171,10173,10175],{"class":1107,"line":4549},[1105,10168,7483],{"class":1575},[1105,10170,1579],{"class":1332},[1105,10172,1506],{"class":1332},[1105,10174,7490],{"class":1115},[1105,10176,5562],{"class":1332},[1105,10178,10179],{"class":1107,"line":4563},[1105,10180,7497],{"class":1332},[1105,10182,10183,10185,10187],{"class":1107,"line":4571},[1105,10184,5531],{"class":1332},[1105,10186,5101],{"class":1338},[1105,10188,1553],{"class":1332},[1105,10190,10191,10193,10195],{"class":1107,"line":4577},[1105,10192,5665],{"class":1332},[1105,10194,5486],{"class":1338},[1105,10196,1553],{"class":1332},[1105,10198,10199,10201,10203],{"class":1107,"line":4584},[1105,10200,1604],{"class":1332},[1105,10202,1550],{"class":1338},[1105,10204,1553],{"class":1332},[1105,10206,10207,10209,10211],{"class":1107,"line":4589},[1105,10208,1614],{"class":1332},[1105,10210,5451],{"class":1338},[1105,10212,1553],{"class":1332},[1105,10214,10215,10217,10219],{"class":1107,"line":4607},[1105,10216,1623],{"class":1332},[1105,10218,1550],{"class":1338},[1105,10220,1553],{"class":1332},[995,10222,4650,10223,10226,10227,10229],{},[1055,10224,10225],{},"refreshNuxtData('chats')"," call in the chat page's ",[1055,10228,7599],{}," callback (as shown earlier) ensures the chat list updates automatically when a new title is generated.",[999,10231,10233],{"id":10232},"adding-multi-model-support","Adding multi-model support",[995,10235,10236,10237,10240],{},"One of the benefits of using ",[1049,10238,4619],{"href":1084,"rel":10239},[1053]," is the ability to switch between models seamlessly. This section adds a model selector to the chat.",[1133,10242,10244],{"id":10243},"creating-a-models-composable","Creating a models composable",[995,10246,10247,10248,1342],{},"Define the available models and persist the user's selection using ",[1049,10249,10252],{"href":10250,"rel":10251},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-cookie",[1053],[1055,10253,10254],{},"useCookie",[1305,10256,10257],{},[1096,10258,10261],{"className":1309,"code":10259,"filename":10260,"language":1311,"meta":1101,"style":1101},"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",[1055,10262,10263,10276,10287,10333,10377,10421,10426,10430,10460,10477,10483,10487,10493,10500,10505,10509],{"__ignoreMap":1101},[1105,10264,10265,10267,10269,10272,10274],{"class":1107,"line":1108},[1105,10266,1319],{"class":1318},[1105,10268,5200],{"class":1575},[1105,10270,10271],{"class":1128}," useModels",[1105,10273,1792],{"class":1332},[1105,10275,1408],{"class":1332},[1105,10277,10278,10280,10283,10285],{"class":1107,"line":1125},[1105,10279,2605],{"class":1575},[1105,10281,10282],{"class":1328}," models",[1105,10284,2615],{"class":1332},[1105,10286,1345],{"class":1338},[1105,10288,10289,10292,10294,10296,10298,10300,10302,10304,10306,10308,10310,10312,10314,10316,10319,10321,10323,10329,10331],{"class":1107,"line":1348},[1105,10290,10291],{"class":1332},"    {",[1105,10293,3103],{"class":1338},[1105,10295,1342],{"class":1332},[1105,10297,1419],{"class":1332},[1105,10299,3110],{"class":1115},[1105,10301,1357],{"class":1332},[1105,10303,1703],{"class":1332},[1105,10305,3089],{"class":1338},[1105,10307,1342],{"class":1332},[1105,10309,1419],{"class":1332},[1105,10311,3096],{"class":1115},[1105,10313,1357],{"class":1332},[1105,10315,1703],{"class":1332},[1105,10317,10318],{"class":1338}," icon",[1105,10320,1342],{"class":1332},[1105,10322,1419],{"class":1332},[1105,10324,10325,10328],{"class":1115},[8071,10326],{"class":10327},"shiki-icon-highlight sh9xi","i-simple-icons-openai",[1105,10330,1357],{"class":1332},[1105,10332,3115],{"class":1332},[1105,10334,10335,10337,10339,10341,10343,10345,10347,10349,10351,10353,10355,10357,10359,10361,10363,10365,10367,10373,10375],{"class":1107,"line":1363},[1105,10336,10291],{"class":1332},[1105,10338,3103],{"class":1338},[1105,10340,1342],{"class":1332},[1105,10342,1419],{"class":1332},[1105,10344,3140],{"class":1115},[1105,10346,1357],{"class":1332},[1105,10348,1703],{"class":1332},[1105,10350,3089],{"class":1338},[1105,10352,1342],{"class":1332},[1105,10354,1419],{"class":1332},[1105,10356,3064],{"class":1115},[1105,10358,1357],{"class":1332},[1105,10360,1703],{"class":1332},[1105,10362,10318],{"class":1338},[1105,10364,1342],{"class":1332},[1105,10366,1419],{"class":1332},[1105,10368,10369,10372],{"class":1115},[8071,10370],{"class":10371},"shiki-icon-highlight sNknm","i-simple-icons-anthropic",[1105,10374,1357],{"class":1332},[1105,10376,3115],{"class":1332},[1105,10378,10379,10381,10383,10385,10387,10389,10391,10393,10395,10397,10399,10401,10403,10405,10407,10409,10411,10417,10419],{"class":1107,"line":1375},[1105,10380,10291],{"class":1332},[1105,10382,3103],{"class":1338},[1105,10384,1342],{"class":1332},[1105,10386,1419],{"class":1332},[1105,10388,3170],{"class":1115},[1105,10390,1357],{"class":1332},[1105,10392,1703],{"class":1332},[1105,10394,3089],{"class":1338},[1105,10396,1342],{"class":1332},[1105,10398,1419],{"class":1332},[1105,10400,3157],{"class":1115},[1105,10402,1357],{"class":1332},[1105,10404,1703],{"class":1332},[1105,10406,10318],{"class":1338},[1105,10408,1342],{"class":1332},[1105,10410,1419],{"class":1332},[1105,10412,10413,10416],{"class":1115},[8071,10414],{"class":10415},"shiki-icon-highlight scZL3","i-simple-icons-google",[1105,10418,1357],{"class":1332},[1105,10420,3175],{"class":1332},[1105,10422,10423],{"class":1107,"line":1386},[1105,10424,10425],{"class":1338},"  ]\n",[1105,10427,10428],{"class":1107,"line":1394},[1105,10429,1397],{"emptyLinePlaceholder":21},[1105,10431,10432,10434,10436,10438,10441,10443,10445,10447,10449,10451,10454,10456,10458],{"class":1107,"line":1400},[1105,10433,2605],{"class":1575},[1105,10435,3280],{"class":1328},[1105,10437,2615],{"class":1332},[1105,10439,10440],{"class":1128}," useCookie",[1105,10442,1547],{"class":1332},[1105,10444,3253],{"class":1111},[1105,10446,2658],{"class":1332},[1105,10448,1329],{"class":1338},[1105,10450,1357],{"class":1332},[1105,10452,10453],{"class":1115},"ai-model",[1105,10455,1357],{"class":1332},[1105,10457,1703],{"class":1332},[1105,10459,1408],{"class":1332},[1105,10461,10462,10465,10467,10469,10471,10473,10475],{"class":1107,"line":1411},[1105,10463,10464],{"class":1128},"    default",[1105,10466,1342],{"class":1332},[1105,10468,4986],{"class":1332},[1105,10470,1812],{"class":1575},[1105,10472,1419],{"class":1332},[1105,10474,3064],{"class":1115},[1105,10476,1383],{"class":1332},[1105,10478,10479,10481],{"class":1107,"line":1427},[1105,10480,2406],{"class":1332},[1105,10482,1467],{"class":1338},[1105,10484,10485],{"class":1107,"line":1433},[1105,10486,1397],{"emptyLinePlaceholder":21},[1105,10488,10489,10491],{"class":1107,"line":1438},[1105,10490,2833],{"class":1318},[1105,10492,1408],{"class":1332},[1105,10494,10495,10498],{"class":1107,"line":1461},[1105,10496,10497],{"class":1328},"    models",[1105,10499,1360],{"class":1332},[1105,10501,10502],{"class":1107,"line":1966},[1105,10503,10504],{"class":1328},"    model\n",[1105,10506,10507],{"class":1107,"line":1993},[1105,10508,3611],{"class":1332},[1105,10510,10511],{"class":1107,"line":2039},[1105,10512,5424],{"class":1332},[1133,10514,10516],{"id":10515},"building-the-model-selector","Building the model selector",[995,10518,1630,10519,10524],{},[1049,10520,10521],{"href":734},[1055,10522,10523],{},"USelectMenu"," component that displays the available models:",[1305,10526,10527],{},[1096,10528,10531],{"className":1537,"code":10529,"filename":10530,"language":34,"meta":1101,"style":1101},"\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",[1055,10532,10533,10553,10586,10590,10607,10611,10629,10661,10665,10673,10677,10685,10692,10705,10719,10733,10746,10759,10764],{"__ignoreMap":1101},[1105,10534,10535,10537,10539,10541,10543,10545,10547,10549,10551],{"class":1107,"line":1108},[1105,10536,1547],{"class":1332},[1105,10538,5136],{"class":1338},[1105,10540,5139],{"class":1575},[1105,10542,5142],{"class":1575},[1105,10544,1579],{"class":1332},[1105,10546,1506],{"class":1332},[1105,10548,1311],{"class":1115},[1105,10550,1506],{"class":1332},[1105,10552,1553],{"class":1332},[1105,10554,10555,10557,10560,10562,10565,10567,10569,10571,10573,10575,10578,10580,10582,10584],{"class":1107,"line":1125},[1105,10556,3054],{"class":1575},[1105,10558,10559],{"class":1328}," model ",[1105,10561,1579],{"class":1332},[1105,10563,10564],{"class":1128}," defineModel",[1105,10566,1547],{"class":1332},[1105,10568,3253],{"class":1111},[1105,10570,2658],{"class":1332},[1105,10572,1329],{"class":1328},[1105,10574,1852],{"class":1332},[1105,10576,10577],{"class":1338}," required",[1105,10579,1342],{"class":1332},[1105,10581,4192],{"class":4191},[1105,10583,1719],{"class":1332},[1105,10585,1467],{"class":1328},[1105,10587,10588],{"class":1107,"line":1348},[1105,10589,1397],{"emptyLinePlaceholder":21},[1105,10591,10592,10594,10596,10599,10601,10603,10605],{"class":1107,"line":1363},[1105,10593,3054],{"class":1575},[1105,10595,1697],{"class":1332},[1105,10597,10598],{"class":1328}," models ",[1105,10600,1464],{"class":1332},[1105,10602,2615],{"class":1332},[1105,10604,10271],{"class":1128},[1105,10606,2661],{"class":1328},[1105,10608,10609],{"class":1107,"line":1375},[1105,10610,1397],{"emptyLinePlaceholder":21},[1105,10612,10613,10615,10618,10620,10622,10624,10626],{"class":1107,"line":1386},[1105,10614,3054],{"class":1575},[1105,10616,10617],{"class":1328}," selectedModel ",[1105,10619,1579],{"class":1332},[1105,10621,8013],{"class":1128},[1105,10623,1329],{"class":1328},[1105,10625,1792],{"class":1332},[1105,10627,10628],{"class":1575}," =>\n",[1105,10630,10631,10634,10636,10639,10641,10643,10645,10647,10649,10652,10654,10656,10658],{"class":1107,"line":1394},[1105,10632,10633],{"class":1328},"  models",[1105,10635,1795],{"class":1332},[1105,10637,10638],{"class":1128},"find",[1105,10640,1329],{"class":1328},[1105,10642,3354],{"class":1929},[1105,10644,1812],{"class":1575},[1105,10646,3359],{"class":1328},[1105,10648,1795],{"class":1332},[1105,10650,10651],{"class":1328},"value ",[1105,10653,8096],{"class":1332},[1105,10655,3280],{"class":1328},[1105,10657,1795],{"class":1332},[1105,10659,10660],{"class":1328},"value)\n",[1105,10662,10663],{"class":1107,"line":1400},[1105,10664,1467],{"class":1328},[1105,10666,10667,10669,10671],{"class":1107,"line":1411},[1105,10668,1623],{"class":1332},[1105,10670,5136],{"class":1338},[1105,10672,1553],{"class":1332},[1105,10674,10675],{"class":1107,"line":1427},[1105,10676,1397],{"emptyLinePlaceholder":21},[1105,10678,10679,10681,10683],{"class":1107,"line":1433},[1105,10680,1547],{"class":1332},[1105,10682,1550],{"class":1338},[1105,10684,1553],{"class":1332},[1105,10686,10687,10689],{"class":1107,"line":1438},[1105,10688,1560],{"class":1332},[1105,10690,10691],{"class":1338},"USelectMenu\n",[1105,10693,10694,10697,10699,10701,10703],{"class":1107,"line":1461},[1105,10695,10696],{"class":1575},"    v-model",[1105,10698,1579],{"class":1332},[1105,10700,1506],{"class":1332},[1105,10702,4663],{"class":1115},[1105,10704,5562],{"class":1332},[1105,10706,10707,10710,10712,10714,10717],{"class":1107,"line":1966},[1105,10708,10709],{"class":1575},"    :items",[1105,10711,1579],{"class":1332},[1105,10713,1506],{"class":1332},[1105,10715,10716],{"class":1115},"models",[1105,10718,5562],{"class":1332},[1105,10720,10721,10724,10726,10728,10731],{"class":1107,"line":1993},[1105,10722,10723],{"class":1575},"    :icon",[1105,10725,1579],{"class":1332},[1105,10727,1506],{"class":1332},[1105,10729,10730],{"class":1115},"selectedModel?.icon",[1105,10732,5562],{"class":1332},[1105,10734,10735,10738,10740,10742,10744],{"class":1107,"line":2039},[1105,10736,10737],{"class":1575},"    variant",[1105,10739,1579],{"class":1332},[1105,10741,1506],{"class":1332},[1105,10743,8301],{"class":1115},[1105,10745,5562],{"class":1332},[1105,10747,10748,10751,10753,10755,10757],{"class":1107,"line":2106},[1105,10749,10750],{"class":1575},"    value-key",[1105,10752,1579],{"class":1332},[1105,10754,1506],{"class":1332},[1105,10756,3339],{"class":1115},[1105,10758,5562],{"class":1332},[1105,10760,10761],{"class":1107,"line":2176},[1105,10762,10763],{"class":1332},"  \u002F>\n",[1105,10765,10766,10768,10770],{"class":1107,"line":2216},[1105,10767,1623],{"class":1332},[1105,10769,1550],{"class":1338},[1105,10771,1553],{"class":1332},[1133,10773,10775],{"id":10774},"integrating-with-the-chat","Integrating with the chat",[995,10777,10778],{},"Update the chat page to include the model selector and pass the selected model to the server:",[1305,10780,10781],{},[1682,10782,10783],{},[1096,10784,10787],{"className":1537,"code":10785,"filename":6127,"highlights":10786,"language":34,"meta":1101,"style":1101},"\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",[1400,2321,2353,2369,4329,4346,4369],[1055,10788,10789,10809,10835,10853,10871,10875,10887,10899,10916,10920,10962,10966,10982,11022,11026,11030,11046,11050,11066,11084,11102,11116,11142,11150,11166,11171,11180,11192,11216,11230,11234,11238,11250,11262,11276,11290,11302,11308,11312,11318,11322,11340,11350,11370,11396,11408,11412,11416,11420,11432,11460,11470,11474,11480,11488,11492,11500,11518,11530,11538,11546,11558,11576,11582,11594,11606,11610,11622,11626,11650,11716,11722,11734,11746,11758,11762,11768,11780,11792,11796,11804,11808,11828,11834,11846,11858,11870,11874,11902,11906,11914,11922,11930,11938,11947,11952,11959,11971,11983,11995,12007,12019,12023,12036,12056,12064,12068,12074,12086,12098,12110,12122,12126,12134,12143,12152,12161],{"__ignoreMap":1101},[1105,10790,10791,10793,10795,10797,10799,10801,10803,10805,10807],{"class":1107,"line":1108},[1105,10792,1547],{"class":1332},[1105,10794,5136],{"class":1338},[1105,10796,5139],{"class":1575},[1105,10798,5142],{"class":1575},[1105,10800,1579],{"class":1332},[1105,10802,1506],{"class":1332},[1105,10804,1311],{"class":1115},[1105,10806,1506],{"class":1332},[1105,10808,1553],{"class":1332},[1105,10810,10811,10813,10815,10817,10819,10821,10823,10825,10827,10829,10831,10833],{"class":1107,"line":1125},[1105,10812,1694],{"class":1318},[1105,10814,1697],{"class":1332},[1105,10816,6160],{"class":1328},[1105,10818,1703],{"class":1332},[1105,10820,6165],{"class":1328},[1105,10822,1703],{"class":1332},[1105,10824,6170],{"class":1328},[1105,10826,1719],{"class":1332},[1105,10828,1722],{"class":1318},[1105,10830,1419],{"class":1332},[1105,10832,2526],{"class":1115},[1105,10834,1383],{"class":1332},[1105,10836,10837,10839,10841,10843,10845,10847,10849,10851],{"class":1107,"line":1348},[1105,10838,1694],{"class":1318},[1105,10840,1697],{"class":1332},[1105,10842,6190],{"class":1328},[1105,10844,1719],{"class":1332},[1105,10846,1722],{"class":1318},[1105,10848,1419],{"class":1332},[1105,10850,6199],{"class":1115},[1105,10852,1383],{"class":1332},[1105,10854,10855,10857,10859,10861,10863,10865,10867,10869],{"class":1107,"line":1363},[1105,10856,1694],{"class":1318},[1105,10858,1697],{"class":1332},[1105,10860,6211],{"class":1328},[1105,10862,1719],{"class":1332},[1105,10864,1722],{"class":1318},[1105,10866,1419],{"class":1332},[1105,10868,6220],{"class":1115},[1105,10870,1383],{"class":1332},[1105,10872,10873],{"class":1107,"line":1375},[1105,10874,1397],{"emptyLinePlaceholder":21},[1105,10876,10877,10879,10881,10883,10885],{"class":1107,"line":1386},[1105,10878,3054],{"class":1575},[1105,10880,6233],{"class":1328},[1105,10882,1579],{"class":1332},[1105,10884,6238],{"class":1128},[1105,10886,2661],{"class":1328},[1105,10888,10889,10891,10893,10895,10897],{"class":1107,"line":1394},[1105,10890,3054],{"class":1575},[1105,10892,6247],{"class":1328},[1105,10894,1579],{"class":1332},[1105,10896,6252],{"class":1128},[1105,10898,2661],{"class":1328},[1105,10900,10902,10904,10906,10908,10910,10912,10914],{"class":10901,"line":1400},[1107,1557],[1105,10903,3054],{"class":1575},[1105,10905,1697],{"class":1332},[1105,10907,10559],{"class":1328},[1105,10909,1464],{"class":1332},[1105,10911,2615],{"class":1332},[1105,10913,10271],{"class":1128},[1105,10915,2661],{"class":1328},[1105,10917,10918],{"class":1107,"line":1411},[1105,10919,1397],{"emptyLinePlaceholder":21},[1105,10921,10922,10924,10926,10928,10930,10932,10934,10936,10938,10940,10942,10944,10946,10948,10950,10952,10954,10956,10958,10960],{"class":1107,"line":1427},[1105,10923,3054],{"class":1575},[1105,10925,1697],{"class":1332},[1105,10927,6272],{"class":1338},[1105,10929,1342],{"class":1332},[1105,10931,6277],{"class":1328},[1105,10933,1464],{"class":1332},[1105,10935,2615],{"class":1332},[1105,10937,2618],{"class":1318},[1105,10939,6286],{"class":1128},[1105,10941,1329],{"class":1328},[1105,10943,3699],{"class":1332},[1105,10945,6293],{"class":1115},[1105,10947,5408],{"class":1332},[1105,10949,6298],{"class":1328},[1105,10951,1795],{"class":1332},[1105,10953,6303],{"class":1328},[1105,10955,1795],{"class":1332},[1105,10957,2006],{"class":1328},[1105,10959,5417],{"class":1332},[1105,10961,1467],{"class":1328},[1105,10963,10964],{"class":1107,"line":1433},[1105,10965,1397],{"emptyLinePlaceholder":21},[1105,10967,10968,10970,10972,10974,10976,10978,10980],{"class":1107,"line":1438},[1105,10969,6320],{"class":1318},[1105,10971,1938],{"class":1328},[1105,10973,3559],{"class":1332},[1105,10975,6327],{"class":1328},[1105,10977,1795],{"class":1332},[1105,10979,6332],{"class":1328},[1105,10981,1333],{"class":1332},[1105,10983,10984,10986,10988,10990,10992,10994,10996,10998,11000,11002,11004,11006,11008,11010,11012,11014,11016,11018,11020],{"class":1107,"line":1461},[1105,10985,6339],{"class":1318},[1105,10987,2892],{"class":1128},[1105,10989,1329],{"class":1338},[1105,10991,1852],{"class":1332},[1105,10993,3581],{"class":1338},[1105,10995,1342],{"class":1332},[1105,10997,3587],{"class":3586},[1105,10999,1703],{"class":1332},[1105,11001,3592],{"class":1338},[1105,11003,1342],{"class":1332},[1105,11005,1419],{"class":1332},[1105,11007,3599],{"class":1115},[1105,11009,1357],{"class":1332},[1105,11011,1703],{"class":1332},[1105,11013,6368],{"class":1338},[1105,11015,1342],{"class":1332},[1105,11017,4192],{"class":4191},[1105,11019,1719],{"class":1332},[1105,11021,1467],{"class":1338},[1105,11023,11024],{"class":1107,"line":1966},[1105,11025,5424],{"class":1332},[1105,11027,11028],{"class":1107,"line":1993},[1105,11029,1397],{"emptyLinePlaceholder":21},[1105,11031,11032,11034,11036,11038,11040,11042,11044],{"class":1107,"line":2039},[1105,11033,3054],{"class":1575},[1105,11035,5159],{"class":1328},[1105,11037,1579],{"class":1332},[1105,11039,5164],{"class":1128},[1105,11041,1329],{"class":1328},[1105,11043,5169],{"class":1332},[1105,11045,1467],{"class":1328},[1105,11047,11048],{"class":1107,"line":2106},[1105,11049,1397],{"emptyLinePlaceholder":21},[1105,11051,11052,11054,11056,11058,11060,11062,11064],{"class":1107,"line":2176},[1105,11053,3054],{"class":1575},[1105,11055,6417],{"class":1328},[1105,11057,1579],{"class":1332},[1105,11059,1889],{"class":1332},[1105,11061,6190],{"class":1128},[1105,11063,1329],{"class":1328},[1105,11065,1333],{"class":1332},[1105,11067,11068,11070,11072,11074,11076,11078,11080,11082],{"class":1107,"line":2216},[1105,11069,1785],{"class":1338},[1105,11071,1342],{"class":1332},[1105,11073,6437],{"class":1328},[1105,11075,1795],{"class":1332},[1105,11077,3339],{"class":1328},[1105,11079,1795],{"class":1332},[1105,11081,2006],{"class":1328},[1105,11083,1360],{"class":1332},[1105,11085,11086,11088,11090,11092,11094,11096,11098,11100],{"class":1107,"line":2267},[1105,11087,1945],{"class":1338},[1105,11089,1342],{"class":1332},[1105,11091,6437],{"class":1328},[1105,11093,1795],{"class":1332},[1105,11095,3339],{"class":1328},[1105,11097,1795],{"class":1332},[1105,11099,1984],{"class":1328},[1105,11101,1360],{"class":1332},[1105,11103,11104,11106,11108,11110,11112,11114],{"class":1107,"line":2280},[1105,11105,6472],{"class":1338},[1105,11107,1342],{"class":1332},[1105,11109,1889],{"class":1332},[1105,11111,6160],{"class":1128},[1105,11113,1329],{"class":1328},[1105,11115,1333],{"class":1332},[1105,11117,11118,11120,11122,11124,11126,11128,11130,11132,11134,11136,11138,11140],{"class":1107,"line":2310},[1105,11119,6488],{"class":1338},[1105,11121,1342],{"class":1332},[1105,11123,3693],{"class":1332},[1105,11125,6293],{"class":1115},[1105,11127,5408],{"class":1332},[1105,11129,6327],{"class":1328},[1105,11131,1795],{"class":1332},[1105,11133,3339],{"class":1328},[1105,11135,1795],{"class":1332},[1105,11137,2006],{"class":1328},[1105,11139,5417],{"class":1332},[1105,11141,1360],{"class":1332},[1105,11143,11144,11146,11148],{"class":1107,"line":2316},[1105,11145,5306],{"class":1338},[1105,11147,1342],{"class":1332},[1105,11149,1408],{"class":1332},[1105,11151,11153,11155,11157,11159,11161,11163],{"class":11152,"line":2321},[1107,1557],[1105,11154,3676],{"class":1338},[1105,11156,1342],{"class":1332},[1105,11158,3280],{"class":1328},[1105,11160,1795],{"class":1332},[1105,11162,10651],{"class":1328},[1105,11164,11165],{"class":2683},"\u002F\u002F Pass the selected model\n",[1105,11167,11169],{"class":11168,"line":2353},[1107,1557],[1105,11170,4574],{"class":1332},[1105,11172,11174,11176,11178],{"class":11173,"line":2369},[1107,1557],[1105,11175,2406],{"class":1332},[1105,11177,1869],{"class":1328},[1105,11179,1360],{"class":1332},[1105,11181,11182,11184,11186,11188,11190],{"class":1107,"line":2387},[1105,11183,6524],{"class":1338},[1105,11185,1329],{"class":1332},[1105,11187,6529],{"class":1929},[1105,11189,1869],{"class":1332},[1105,11191,1408],{"class":1332},[1105,11193,11194,11196,11198,11200,11202,11204,11206,11208,11210,11212,11214],{"class":1107,"line":2403},[1105,11195,6545],{"class":1318},[1105,11197,1938],{"class":1338},[1105,11199,6529],{"class":1328},[1105,11201,1795],{"class":1332},[1105,11203,6554],{"class":1328},[1105,11205,3366],{"class":1332},[1105,11207,1419],{"class":1332},[1105,11209,4339],{"class":1115},[1105,11211,1357],{"class":1332},[1105,11213,3564],{"class":1338},[1105,11215,1333],{"class":1332},[1105,11217,11218,11220,11222,11224,11226,11228],{"class":1107,"line":2411},[1105,11219,6572],{"class":1128},[1105,11221,1329],{"class":1338},[1105,11223,1357],{"class":1332},[1105,11225,1774],{"class":1115},[1105,11227,1357],{"class":1332},[1105,11229,1467],{"class":1338},[1105,11231,11232],{"class":1107,"line":3391},[1105,11233,4574],{"class":1332},[1105,11235,11236],{"class":1107,"line":3408},[1105,11237,1430],{"class":1332},[1105,11239,11240,11242,11244,11246,11248],{"class":1107,"line":3440},[1105,11241,6598],{"class":1338},[1105,11243,1329],{"class":1332},[1105,11245,6603],{"class":1929},[1105,11247,1869],{"class":1332},[1105,11249,1408],{"class":1332},[1105,11251,11252,11254,11256,11258,11260],{"class":1107,"line":3453},[1105,11253,6613],{"class":1328},[1105,11255,1795],{"class":1332},[1105,11257,6618],{"class":1128},[1105,11259,1329],{"class":1338},[1105,11261,1333],{"class":1332},[1105,11263,11264,11266,11268,11270,11272,11274],{"class":1107,"line":3458},[1105,11265,6628],{"class":1338},[1105,11267,1342],{"class":1332},[1105,11269,1419],{"class":1332},[1105,11271,497],{"class":1115},[1105,11273,1357],{"class":1332},[1105,11275,1360],{"class":1332},[1105,11277,11278,11280,11282,11284,11286,11288],{"class":1107,"line":3464},[1105,11279,6644],{"class":1338},[1105,11281,1342],{"class":1332},[1105,11283,6649],{"class":1328},[1105,11285,1795],{"class":1332},[1105,11287,4491],{"class":1328},[1105,11289,1360],{"class":1332},[1105,11291,11292,11294,11296,11298,11300],{"class":1107,"line":3495},[1105,11293,6661],{"class":1338},[1105,11295,1342],{"class":1332},[1105,11297,1419],{"class":1332},[1105,11299,6603],{"class":1115},[1105,11301,1383],{"class":1332},[1105,11303,11304,11306],{"class":1107,"line":3539},[1105,11305,3394],{"class":1332},[1105,11307,1467],{"class":1338},[1105,11309,11310],{"class":1107,"line":3546},[1105,11311,3611],{"class":1332},[1105,11313,11314,11316],{"class":1107,"line":3551},[1105,11315,1464],{"class":1332},[1105,11317,1467],{"class":1328},[1105,11319,11320],{"class":1107,"line":3569},[1105,11321,1397],{"emptyLinePlaceholder":21},[1105,11323,11324,11326,11328,11330,11332,11334,11336,11338],{"class":1107,"line":3608},[1105,11325,6697],{"class":1575},[1105,11327,6700],{"class":1128},[1105,11329,1329],{"class":1332},[1105,11331,6705],{"class":1929},[1105,11333,1342],{"class":1332},[1105,11335,6710],{"class":1111},[1105,11337,1869],{"class":1332},[1105,11339,1408],{"class":1332},[1105,11341,11342,11344,11346,11348],{"class":1107,"line":3614},[1105,11343,6719],{"class":1328},[1105,11345,1795],{"class":1332},[1105,11347,6724],{"class":1128},[1105,11349,2661],{"class":1338},[1105,11351,11352,11354,11356,11358,11360,11362,11364,11366,11368],{"class":1107,"line":3619},[1105,11353,3554],{"class":1318},[1105,11355,1938],{"class":1338},[1105,11357,5218],{"class":1328},[1105,11359,1795],{"class":1332},[1105,11361,3339],{"class":1328},[1105,11363,1795],{"class":1332},[1105,11365,5227],{"class":1128},[1105,11367,5230],{"class":1338},[1105,11369,1333],{"class":1332},[1105,11371,11372,11374,11376,11378,11380,11382,11384,11386,11388,11390,11392,11394],{"class":1107,"line":3625},[1105,11373,6751],{"class":1328},[1105,11375,1795],{"class":1332},[1105,11377,6756],{"class":1128},[1105,11379,1329],{"class":1338},[1105,11381,1852],{"class":1332},[1105,11383,1706],{"class":1338},[1105,11385,1342],{"class":1332},[1105,11387,5362],{"class":1328},[1105,11389,1795],{"class":1332},[1105,11391,3339],{"class":1328},[1105,11393,1719],{"class":1332},[1105,11395,1467],{"class":1338},[1105,11397,11398,11400,11402,11404,11406],{"class":1107,"line":3645},[1105,11399,6779],{"class":1328},[1105,11401,1795],{"class":1332},[1105,11403,3339],{"class":1328},[1105,11405,2615],{"class":1332},[1105,11407,6788],{"class":1332},[1105,11409,11410],{"class":1107,"line":3673},[1105,11411,3611],{"class":1332},[1105,11413,11414],{"class":1107,"line":3685},[1105,11415,5424],{"class":1332},[1105,11417,11418],{"class":1107,"line":3704},[1105,11419,1397],{"emptyLinePlaceholder":21},[1105,11421,11422,11424,11426,11428,11430],{"class":1107,"line":3732},[1105,11423,6810],{"class":1128},[1105,11425,1329],{"class":1328},[1105,11427,1792],{"class":1332},[1105,11429,1812],{"class":1575},[1105,11431,1408],{"class":1332},[1105,11433,11434,11436,11438,11440,11442,11444,11446,11448,11450,11452,11454,11456,11458],{"class":1107,"line":3739},[1105,11435,3554],{"class":1318},[1105,11437,1938],{"class":1338},[1105,11439,6327],{"class":1328},[1105,11441,1795],{"class":1332},[1105,11443,3339],{"class":1328},[1105,11445,3865],{"class":1332},[1105,11447,1984],{"class":1328},[1105,11449,1795],{"class":1332},[1105,11451,3844],{"class":1328},[1105,11453,3366],{"class":1332},[1105,11455,3850],{"class":3586},[1105,11457,3564],{"class":1338},[1105,11459,1333],{"class":1332},[1105,11461,11462,11464,11466,11468],{"class":1107,"line":3744},[1105,11463,6751],{"class":1328},[1105,11465,1795],{"class":1332},[1105,11467,6855],{"class":1128},[1105,11469,2661],{"class":1338},[1105,11471,11472],{"class":1107,"line":3810},[1105,11473,3611],{"class":1332},[1105,11475,11476,11478],{"class":1107,"line":3815},[1105,11477,1464],{"class":1332},[1105,11479,1467],{"class":1328},[1105,11481,11482,11484,11486],{"class":1107,"line":3820},[1105,11483,1623],{"class":1332},[1105,11485,5136],{"class":1338},[1105,11487,1553],{"class":1332},[1105,11489,11490],{"class":1107,"line":3826},[1105,11491,1397],{"emptyLinePlaceholder":21},[1105,11493,11494,11496,11498],{"class":1107,"line":3855},[1105,11495,1547],{"class":1332},[1105,11497,1550],{"class":1338},[1105,11499,1553],{"class":1332},[1105,11501,11502,11504,11506,11508,11510,11512,11514,11516],{"class":1107,"line":3896},[1105,11503,1560],{"class":1332},[1105,11505,5451],{"class":1338},[1105,11507,5454],{"class":1575},[1105,11509,1579],{"class":1332},[1105,11511,1506],{"class":1332},[1105,11513,5461],{"class":1115},[1105,11515,1506],{"class":1332},[1105,11517,1553],{"class":1332},[1105,11519,11520,11522,11524,11526,11528],{"class":1107,"line":3925},[1105,11521,1569],{"class":1332},[1105,11523,1550],{"class":1338},[1105,11525,5474],{"class":1332},[1105,11527,8694],{"class":1575},[1105,11529,1553],{"class":1332},[1105,11531,11532,11534,11536],{"class":1107,"line":3937},[1105,11533,1593],{"class":1332},[1105,11535,8704],{"class":1338},[1105,11537,1599],{"class":1332},[1105,11539,11540,11542,11544],{"class":1107,"line":3953},[1105,11541,1604],{"class":1332},[1105,11543,1550],{"class":1338},[1105,11545,1553],{"class":1332},[1105,11547,11548,11550,11552,11554,11556],{"class":1107,"line":3967},[1105,11549,1569],{"class":1332},[1105,11551,1550],{"class":1338},[1105,11553,5474],{"class":1332},[1105,11555,5477],{"class":1575},[1105,11557,1553],{"class":1332},[1105,11559,11560,11562,11564,11566,11568,11570,11572,11574],{"class":1107,"line":3974},[1105,11561,1593],{"class":1332},[1105,11563,5486],{"class":1338},[1105,11565,5489],{"class":1575},[1105,11567,1579],{"class":1332},[1105,11569,1506],{"class":1332},[1105,11571,6932],{"class":1115},[1105,11573,1506],{"class":1332},[1105,11575,1553],{"class":1332},[1105,11577,11578,11580],{"class":1107,"line":3979},[1105,11579,5505],{"class":1332},[1105,11581,6943],{"class":1338},[1105,11583,11584,11586,11588,11590,11592],{"class":1107,"line":3984},[1105,11585,6948],{"class":1575},[1105,11587,1579],{"class":1332},[1105,11589,1506],{"class":1332},[1105,11591,6955],{"class":1115},[1105,11593,5562],{"class":1332},[1105,11595,11596,11598,11600,11602,11604],{"class":1107,"line":3990},[1105,11597,5568],{"class":1575},[1105,11599,1579],{"class":1332},[1105,11601,1506],{"class":1332},[1105,11603,6968],{"class":1115},[1105,11605,5562],{"class":1332},[1105,11607,11608],{"class":1107,"line":4007},[1105,11609,6975],{"class":1575},[1105,11611,11612,11614,11616,11618,11620],{"class":1107,"line":4029},[1105,11613,6980],{"class":1575},[1105,11615,1579],{"class":1332},[1105,11617,1506],{"class":1332},[1105,11619,6987],{"class":1115},[1105,11621,5562],{"class":1332},[1105,11623,11624],{"class":1107,"line":4047},[1105,11625,5628],{"class":1332},[1105,11627,11628,11630,11632,11634,11636,11638,11640,11642,11644,11646,11648],{"class":1107,"line":4055},[1105,11629,5634],{"class":1332},[1105,11631,1550],{"class":1338},[1105,11633,5474],{"class":1332},[1105,11635,371],{"class":1575},[1105,11637,1579],{"class":1332},[1105,11639,1506],{"class":1332},[1105,11641,1852],{"class":1332},[1105,11643,7012],{"class":1328},[1105,11645,1464],{"class":1332},[1105,11647,1506],{"class":1332},[1105,11649,1553],{"class":1332},[1105,11651,11652,11654,11656,11658,11660,11662,11664,11666,11668,11670,11672,11674,11676,11678,11680,11682,11684,11686,11688,11690,11692,11694,11696,11698,11700,11702,11704,11706,11708,11710,11712,11714],{"class":1107,"line":4072},[1105,11653,7023],{"class":1332},[1105,11655,1550],{"class":1338},[1105,11657,7028],{"class":1318},[1105,11659,1579],{"class":1332},[1105,11661,1506],{"class":1332},[1105,11663,7035],{"class":1328},[1105,11665,1703],{"class":1332},[1105,11667,7040],{"class":1328},[1105,11669,7043],{"class":1332},[1105,11671,2610],{"class":1328},[1105,11673,1795],{"class":1332},[1105,11675,2190],{"class":1328},[1105,11677,1506],{"class":1332},[1105,11679,7054],{"class":1332},[1105,11681,7057],{"class":1575},[1105,11683,1579],{"class":1332},[1105,11685,7062],{"class":1332},[1105,11687,4491],{"class":1328},[1105,11689,1795],{"class":1332},[1105,11691,2006],{"class":1328},[1105,11693,1464],{"class":1332},[1105,11695,7073],{"class":1115},[1105,11697,5408],{"class":1332},[1105,11699,7078],{"class":1328},[1105,11701,1795],{"class":1332},[1105,11703,6554],{"class":1328},[1105,11705,1464],{"class":1332},[1105,11707,7073],{"class":1115},[1105,11709,5408],{"class":1332},[1105,11711,7091],{"class":1328},[1105,11713,7094],{"class":1332},[1105,11715,1553],{"class":1332},[1105,11717,11718,11720],{"class":1107,"line":4093},[1105,11719,7101],{"class":1332},[1105,11721,7104],{"class":1338},[1105,11723,11724,11726,11728,11730,11732],{"class":1107,"line":4103},[1105,11725,7109],{"class":1575},[1105,11727,1579],{"class":1332},[1105,11729,1506],{"class":1332},[1105,11731,7116],{"class":1115},[1105,11733,5562],{"class":1332},[1105,11735,11736,11738,11740,11742,11744],{"class":1107,"line":4113},[1105,11737,7123],{"class":1575},[1105,11739,1579],{"class":1332},[1105,11741,1506],{"class":1332},[1105,11743,7130],{"class":1115},[1105,11745,5562],{"class":1332},[1105,11747,11748,11750,11752,11754,11756],{"class":1107,"line":4123},[1105,11749,7137],{"class":1575},[1105,11751,1579],{"class":1332},[1105,11753,1506],{"class":1332},[1105,11755,7144],{"class":1115},[1105,11757,5562],{"class":1332},[1105,11759,11760],{"class":1107,"line":4140},[1105,11761,7151],{"class":1332},[1105,11763,11764,11766],{"class":1107,"line":4151},[1105,11765,7156],{"class":1332},[1105,11767,7159],{"class":1338},[1105,11769,11770,11772,11774,11776,11778],{"class":1107,"line":4157},[1105,11771,7164],{"class":1575},[1105,11773,1579],{"class":1332},[1105,11775,1506],{"class":1332},[1105,11777,7130],{"class":1115},[1105,11779,5562],{"class":1332},[1105,11781,11782,11784,11786,11788,11790],{"class":1107,"line":4163},[1105,11783,7177],{"class":1575},[1105,11785,1579],{"class":1332},[1105,11787,1506],{"class":1332},[1105,11789,7144],{"class":1115},[1105,11791,5562],{"class":1332},[1105,11793,11794],{"class":1107,"line":4173},[1105,11795,7190],{"class":1332},[1105,11797,11798,11800,11802],{"class":1107,"line":4183},[1105,11799,7195],{"class":1332},[1105,11801,7198],{"class":1338},[1105,11803,1553],{"class":1332},[1105,11805,11806],{"class":1107,"line":4197},[1105,11807,1397],{"emptyLinePlaceholder":21},[1105,11809,11810,11812,11814,11816,11818,11820,11822,11824,11826],{"class":1107,"line":4212},[1105,11811,7101],{"class":1332},[1105,11813,1550],{"class":1338},[1105,11815,7213],{"class":1318},[1105,11817,1579],{"class":1332},[1105,11819,1506],{"class":1332},[1105,11821,7220],{"class":1128},[1105,11823,7223],{"class":1328},[1105,11825,1506],{"class":1332},[1105,11827,1553],{"class":1332},[1105,11829,11830,11832],{"class":1107,"line":4217},[1105,11831,7156],{"class":1332},[1105,11833,7159],{"class":1338},[1105,11835,11836,11838,11840,11842,11844],{"class":1107,"line":4222},[1105,11837,7238],{"class":1575},[1105,11839,1579],{"class":1332},[1105,11841,1506],{"class":1332},[1105,11843,7245],{"class":1115},[1105,11845,5562],{"class":1332},[1105,11847,11848,11850,11852,11854,11856],{"class":1107,"line":4232},[1105,11849,7164],{"class":1575},[1105,11851,1579],{"class":1332},[1105,11853,1506],{"class":1332},[1105,11855,7130],{"class":1115},[1105,11857,5562],{"class":1332},[1105,11859,11860,11862,11864,11866,11868],{"class":1107,"line":4248},[1105,11861,7177],{"class":1575},[1105,11863,1579],{"class":1332},[1105,11865,1506],{"class":1332},[1105,11867,7144],{"class":1115},[1105,11869,5562],{"class":1332},[1105,11871,11872],{"class":1107,"line":4263},[1105,11873,7190],{"class":1332},[1105,11875,11876,11878,11880,11882,11884,11886,11888,11890,11892,11894,11896,11898,11900],{"class":1107,"line":4269},[1105,11877,7156],{"class":1332},[1105,11879,995],{"class":1338},[1105,11881,7213],{"class":1575},[1105,11883,1579],{"class":1332},[1105,11885,1506],{"class":1332},[1105,11887,7290],{"class":1115},[1105,11889,1506],{"class":1332},[1105,11891,5489],{"class":1575},[1105,11893,1579],{"class":1332},[1105,11895,1506],{"class":1332},[1105,11897,7301],{"class":1115},[1105,11899,1506],{"class":1332},[1105,11901,1553],{"class":1332},[1105,11903,11904],{"class":1107,"line":4275},[1105,11905,7310],{"class":1328},[1105,11907,11908,11910,11912],{"class":1107,"line":4283},[1105,11909,7315],{"class":1332},[1105,11911,995],{"class":1338},[1105,11913,1553],{"class":1332},[1105,11915,11916,11918,11920],{"class":1107,"line":4288},[1105,11917,7195],{"class":1332},[1105,11919,1550],{"class":1338},[1105,11921,1553],{"class":1332},[1105,11923,11924,11926,11928],{"class":1107,"line":4294},[1105,11925,7332],{"class":1332},[1105,11927,1550],{"class":1338},[1105,11929,1553],{"class":1332},[1105,11931,11932,11934,11936],{"class":1107,"line":4314},[1105,11933,7341],{"class":1332},[1105,11935,1550],{"class":1338},[1105,11937,1553],{"class":1332},[1105,11939,11941,11943,11945],{"class":11940,"line":4329},[1107,1557],[1105,11942,5531],{"class":1332},[1105,11944,5107],{"class":1338},[1105,11946,1553],{"class":1332},[1105,11948,11950],{"class":11949,"line":4346},[1107,1557],[1105,11951,1397],{"emptyLinePlaceholder":21},[1105,11953,11955,11957],{"class":11954,"line":4369},[1107,1557],[1105,11956,5505],{"class":1332},[1105,11958,5547],{"class":1338},[1105,11960,11961,11963,11965,11967,11969],{"class":1107,"line":4380},[1105,11962,5553],{"class":1575},[1105,11964,1579],{"class":1332},[1105,11966,1506],{"class":1332},[1105,11968,5218],{"class":1115},[1105,11970,5562],{"class":1332},[1105,11972,11973,11975,11977,11979,11981],{"class":1107,"line":4388},[1105,11974,7380],{"class":1575},[1105,11976,1579],{"class":1332},[1105,11978,1506],{"class":1332},[1105,11980,7387],{"class":1115},[1105,11982,5562],{"class":1332},[1105,11984,11985,11987,11989,11991,11993],{"class":1107,"line":4394},[1105,11986,5583],{"class":1575},[1105,11988,1579],{"class":1332},[1105,11990,1506],{"class":1332},[1105,11992,5590],{"class":1115},[1105,11994,5562],{"class":1332},[1105,11996,11997,11999,12001,12003,12005],{"class":1107,"line":4399},[1105,11998,6980],{"class":1575},[1105,12000,1579],{"class":1332},[1105,12002,1506],{"class":1332},[1105,12004,7412],{"class":1115},[1105,12006,5562],{"class":1332},[1105,12008,12009,12011,12013,12015,12017],{"class":1107,"line":4422},[1105,12010,5613],{"class":1575},[1105,12012,1579],{"class":1332},[1105,12014,1506],{"class":1332},[1105,12016,7425],{"class":1115},[1105,12018,5562],{"class":1332},[1105,12020,12021],{"class":1107,"line":4428},[1105,12022,5628],{"class":1332},[1105,12024,12025,12027,12029,12031,12034],{"class":1107,"line":4448},[1105,12026,5634],{"class":1332},[1105,12028,1550],{"class":1338},[1105,12030,5474],{"class":1332},[1105,12032,12033],{"class":1575},"footer",[1105,12035,1553],{"class":1332},[1105,12037,12038,12040,12043,12046,12048,12050,12052,12054],{"class":1107,"line":4454},[1105,12039,7023],{"class":1332},[1105,12041,12042],{"class":1338},"ModelSelect",[1105,12044,12045],{"class":1575}," v-model",[1105,12047,1579],{"class":1332},[1105,12049,1506],{"class":1332},[1105,12051,4663],{"class":1115},[1105,12053,1506],{"class":1332},[1105,12055,1599],{"class":1332},[1105,12057,12058,12060,12062],{"class":1107,"line":4500},[1105,12059,7341],{"class":1332},[1105,12061,1550],{"class":1338},[1105,12063,1553],{"class":1332},[1105,12065,12066],{"class":1107,"line":4516},[1105,12067,1397],{"emptyLinePlaceholder":21},[1105,12069,12070,12072],{"class":1107,"line":4549},[1105,12071,5634],{"class":1332},[1105,12073,7438],{"class":1338},[1105,12075,12076,12078,12080,12082,12084],{"class":1107,"line":4563},[1105,12077,7443],{"class":1575},[1105,12079,1579],{"class":1332},[1105,12081,1506],{"class":1332},[1105,12083,6968],{"class":1115},[1105,12085,5562],{"class":1332},[1105,12087,12088,12090,12092,12094,12096],{"class":1107,"line":4571},[1105,12089,7456],{"class":1575},[1105,12091,1579],{"class":1332},[1105,12093,1506],{"class":1332},[1105,12095,5647],{"class":1115},[1105,12097,5562],{"class":1332},[1105,12099,12100,12102,12104,12106,12108],{"class":1107,"line":4577},[1105,12101,7469],{"class":1575},[1105,12103,1579],{"class":1332},[1105,12105,1506],{"class":1332},[1105,12107,7476],{"class":1115},[1105,12109,5562],{"class":1332},[1105,12111,12112,12114,12116,12118,12120],{"class":1107,"line":4584},[1105,12113,7483],{"class":1575},[1105,12115,1579],{"class":1332},[1105,12117,1506],{"class":1332},[1105,12119,7490],{"class":1115},[1105,12121,5562],{"class":1332},[1105,12123,12124],{"class":1107,"line":4589},[1105,12125,7497],{"class":1332},[1105,12127,12128,12130,12132],{"class":1107,"line":4607},[1105,12129,5531],{"class":1332},[1105,12131,5101],{"class":1338},[1105,12133,1553],{"class":1332},[1105,12135,12137,12139,12141],{"class":1107,"line":12136},114,[1105,12138,5665],{"class":1332},[1105,12140,5486],{"class":1338},[1105,12142,1553],{"class":1332},[1105,12144,12146,12148,12150],{"class":1107,"line":12145},115,[1105,12147,1604],{"class":1332},[1105,12149,1550],{"class":1338},[1105,12151,1553],{"class":1332},[1105,12153,12155,12157,12159],{"class":1107,"line":12154},116,[1105,12156,1614],{"class":1332},[1105,12158,5451],{"class":1338},[1105,12160,1553],{"class":1332},[1105,12162,12164,12166,12168],{"class":1107,"line":12163},117,[1105,12165,1623],{"class":1332},[1105,12167,1550],{"class":1338},[1105,12169,1553],{"class":1332},[999,12171,12173],{"id":12172},"going-further","Going further",[995,12175,12176],{},"You now have a working AI chatbot with database persistence! To take it further, consider adding:",[995,12178,12179],{},[1013,12180,12181],{},"User Authentication",[995,12183,12184,12185,12190],{},"Add authentication with ",[1049,12186,12189],{"href":12187,"rel":12188},"https:\u002F\u002Fgithub.com\u002Fatinux\u002Fnuxt-auth-utils",[1053],"nuxt-auth-utils"," to let users access their chat history across devices and keep conversations private.",[995,12192,12193],{},[1013,12194,12195],{},"AI Tools",[995,12197,12198,12199,12204],{},"Extend your chatbot with ",[1049,12200,12203],{"href":12201,"rel":12202},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-core\u002Ftools-and-tool-calling",[1053],"AI SDK tools"," that can fetch real-time data, generate charts, or interact with external APIs:",[1096,12206,12208],{"className":1309,"code":12207,"language":1311,"meta":1101,"style":1101},"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",[1055,12209,12210,12229,12247,12251,12266,12282,12299,12330,12338,12358,12363,12398,12402],{"__ignoreMap":1101},[1105,12211,12212,12214,12216,12219,12221,12223,12225,12227],{"class":1107,"line":1108},[1105,12213,1694],{"class":1318},[1105,12215,1697],{"class":1332},[1105,12217,12218],{"class":1328}," tool",[1105,12220,1719],{"class":1332},[1105,12222,1722],{"class":1318},[1105,12224,1419],{"class":1332},[1105,12226,2526],{"class":1115},[1105,12228,1383],{"class":1332},[1105,12230,12231,12233,12235,12237,12239,12241,12243,12245],{"class":1107,"line":1125},[1105,12232,1694],{"class":1318},[1105,12234,1697],{"class":1332},[1105,12236,2561],{"class":1328},[1105,12238,1719],{"class":1332},[1105,12240,1722],{"class":1318},[1105,12242,1419],{"class":1332},[1105,12244,2570],{"class":1115},[1105,12246,1383],{"class":1332},[1105,12248,12249],{"class":1107,"line":1348},[1105,12250,1397],{"emptyLinePlaceholder":21},[1105,12252,12253,12255,12258,12260,12262,12264],{"class":1107,"line":1363},[1105,12254,3054],{"class":1575},[1105,12256,12257],{"class":1328}," weatherTool ",[1105,12259,1579],{"class":1332},[1105,12261,12218],{"class":1128},[1105,12263,1329],{"class":1328},[1105,12265,1333],{"class":1332},[1105,12267,12268,12271,12273,12275,12278,12280],{"class":1107,"line":1375},[1105,12269,12270],{"class":1338},"  description",[1105,12272,1342],{"class":1332},[1105,12274,1419],{"class":1332},[1105,12276,12277],{"class":1115},"Get the current weather for a location",[1105,12279,1357],{"class":1332},[1105,12281,1360],{"class":1332},[1105,12283,12284,12287,12289,12291,12293,12295,12297],{"class":1107,"line":1386},[1105,12285,12286],{"class":1338},"  parameters",[1105,12288,1342],{"class":1332},[1105,12290,2561],{"class":1328},[1105,12292,1795],{"class":1332},[1105,12294,2633],{"class":1128},[1105,12296,1329],{"class":1328},[1105,12298,1333],{"class":1332},[1105,12300,12301,12304,12306,12308,12310,12312,12314,12316,12319,12321,12323,12326,12328],{"class":1107,"line":1394},[1105,12302,12303],{"class":1338},"    location",[1105,12305,1342],{"class":1332},[1105,12307,2561],{"class":1328},[1105,12309,1795],{"class":1332},[1105,12311,3253],{"class":1128},[1105,12313,1792],{"class":1328},[1105,12315,1795],{"class":1332},[1105,12317,12318],{"class":1128},"describe",[1105,12320,1329],{"class":1328},[1105,12322,1357],{"class":1332},[1105,12324,12325],{"class":1115},"The city name",[1105,12327,1357],{"class":1332},[1105,12329,1467],{"class":1328},[1105,12331,12332,12334,12336],{"class":1107,"line":1400},[1105,12333,2406],{"class":1332},[1105,12335,1869],{"class":1328},[1105,12337,1360],{"class":1332},[1105,12339,12340,12343,12345,12347,12349,12352,12354,12356],{"class":1107,"line":1411},[1105,12341,12342],{"class":1128},"  execute",[1105,12344,1342],{"class":1332},[1105,12346,4015],{"class":1575},[1105,12348,1926],{"class":1332},[1105,12350,12351],{"class":1929}," location",[1105,12353,1933],{"class":1332},[1105,12355,1812],{"class":1575},[1105,12357,1408],{"class":1332},[1105,12359,12360],{"class":1107,"line":1427},[1105,12361,12362],{"class":2683},"    \u002F\u002F Fetch weather data from an API\n",[1105,12364,12365,12368,12370,12372,12374,12377,12379,12382,12384,12387,12389,12391,12394,12396],{"class":1107,"line":1433},[1105,12366,12367],{"class":1318},"    return",[1105,12369,1697],{"class":1332},[1105,12371,12351],{"class":1328},[1105,12373,1703],{"class":1332},[1105,12375,12376],{"class":1338}," temperature",[1105,12378,1342],{"class":1332},[1105,12380,12381],{"class":3586}," 22",[1105,12383,1703],{"class":1332},[1105,12385,12386],{"class":1338}," condition",[1105,12388,1342],{"class":1332},[1105,12390,1419],{"class":1332},[1105,12392,12393],{"class":1115},"Sunny",[1105,12395,1357],{"class":1332},[1105,12397,3175],{"class":1332},[1105,12399,12400],{"class":1107,"line":1438},[1105,12401,3611],{"class":1332},[1105,12403,12404,12406],{"class":1107,"line":1461},[1105,12405,1464],{"class":1332},[1105,12407,1467],{"class":1328},[999,12409,12411],{"id":12410},"deploying-to-vercel","Deploying to Vercel",[995,12413,12414],{},"Deploy your chatbot to Vercel with zero configuration:",[1096,12416,12418],{"className":1098,"code":12417,"language":1100,"meta":1101,"style":1101},"npx vercel deploy\n",[1055,12419,12420],{"__ignoreMap":1101},[1105,12421,12422,12424,12427],{"class":1107,"line":1108},[1105,12423,1112],{"class":1111},[1105,12425,12426],{"class":1115}," vercel",[1105,12428,12429],{"class":1115}," deploy\n",[995,12431,12432],{},"Then, in the Vercel dashboard:",[1007,12434,12435,12441],{},[1010,12436,12437,12438,12440],{},"Enable ",[1013,12439,4619],{}," and add credits so requests can be processed.",[1010,12442,12443,12444,12447],{},"Add a ",[1013,12445,12446],{},"Turso"," database from the Vercel Marketplace and connect it to your project (it will provision the database and add the required environment variables automatically).",[12449,12450,12451],"blockquote",{},[995,12452,12453,12454,12459,12460,12462],{},"Note: On Vercel, you ",[1013,12455,12456,12457],{},"don’t need to manually add ",[1055,12458,1646],{}," — Vercel handles the gateway configuration for deployments. Keep using ",[1055,12461,1633],{}," locally for development.",[1469,12464,12466],{"to":1084,"target":12465},"_blank",[995,12467,12468,12469,1795],{},"Learn more about setting up AI Gateway in the ",[1013,12470,12471],{},"Vercel AI Gateway documentation",[999,12473,12475],{"id":12474},"conclusion","Conclusion",[995,12477,12478],{},"You've built a complete AI chatbot with:",[1007,12480,12481,12487,12493,12499,12504],{},[1010,12482,12483,12486],{},[1013,12484,12485],{},"A complete chat interface"," using Nuxt UI components",[1010,12488,12489,12492],{},[1013,12490,12491],{},"Real-time streaming responses"," with the AI SDK",[1010,12494,12495,12498],{},[1013,12496,12497],{},"Streaming Markdown rendering"," with Comark for rich content display",[1010,12500,12501,12503],{},[1013,12502,1033],{}," via AI Gateway",[1010,12505,12506,12509],{},[1013,12507,12508],{},"Database persistence"," with SQLite (local) \u002F Turso (production) and Drizzle ORM",[995,12511,12512],{},"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.",[995,12514,12515],{},[1013,12516,12517],{},"Resources:",[1007,12519,12520,12527,12534,12541,12547,12553],{},[1010,12521,12522],{},[1049,12523,12526],{"href":12524,"rel":12525},"https:\u002F\u002Fui.nuxt.com\u002Fcomponents\u002Fchat",[1053],"Nuxt UI Chat Components",[1010,12528,12529],{},[1049,12530,12533],{"href":12531,"rel":12532},"https:\u002F\u002Fhub.nuxt.com\u002Fdocs\u002Ffeatures\u002Fdatabase",[1053],"NuxtHub Database",[1010,12535,12536],{},[1049,12537,12540],{"href":12538,"rel":12539},"https:\u002F\u002Fai-sdk.dev",[1053],"AI SDK Documentation",[1010,12542,12543],{},[1049,12544,12546],{"href":1084,"rel":12545},[1053],"AI Gateway Documentation",[1010,12548,12549],{},[1049,12550,12552],{"href":1051,"rel":12551},[1053],"Nuxt AI Chat Template",[1010,12554,12555],{},[1049,12556,12558],{"href":1061,"rel":12557},[1053],"Vue AI Chat Template",[995,12560,12561],{},"We're excited to see what you'll build!",[12563,12564,12565],"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":1101,"searchDepth":1125,"depth":1125,"links":12567},[12568,12569,12570,12576,12581,12585,12586,12590,12591,12592,12597,12598,12599],{"id":1001,"depth":1125,"text":1002},{"id":1069,"depth":1125,"text":1070},{"id":1090,"depth":1125,"text":1091,"children":12571},[12572,12573,12574,12575],{"id":1135,"depth":1348,"text":1136},{"id":1295,"depth":1348,"text":1296},{"id":1524,"depth":1348,"text":1525},{"id":1663,"depth":1348,"text":1664},{"id":2449,"depth":1125,"text":2450,"children":12577},[12578,12579,12580],{"id":2461,"depth":1348,"text":2462},{"id":2845,"depth":1348,"text":2846},{"id":4710,"depth":1348,"text":4711},{"id":5092,"depth":1125,"text":5093,"children":12582},[12583,12584],{"id":5111,"depth":1348,"text":5112},{"id":5728,"depth":1348,"text":5729},{"id":6100,"depth":1125,"text":6101},{"id":7693,"depth":1125,"text":7694,"children":12587},[12588,12589],{"id":7700,"depth":1348,"text":7701},{"id":7860,"depth":1348,"text":7861},{"id":8367,"depth":1125,"text":8368},{"id":8910,"depth":1125,"text":8911},{"id":10232,"depth":1125,"text":10233,"children":12593},[12594,12595,12596],{"id":10243,"depth":1348,"text":10244},{"id":10515,"depth":1348,"text":10516},{"id":10774,"depth":1348,"text":10775},{"id":12172,"depth":1125,"text":12173},{"id":12410,"depth":1125,"text":12411},{"id":12474,"depth":1125,"text":12475},"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":12605},"Tutorial","\u002Fblog\u002Fhow-to-build-an-ai-chat",{"title":979,"description":12601},"blog\u002Fhow-to-build-an-ai-chat","niwtEdHQJaUBnPqldgEx0ODg9tOUK75ezMtfPw31Y0Q",{"data":12611,"body":12612},{},{"type":12613,"children":12614},"root",[12615],{"type":178,"tag":995,"props":12616,"children":12617},{},[12618,12620,12627],{"type":5351,"value":12619},"Nuxt ",{"type":178,"tag":1105,"props":12621,"children":12624},{"className":12622},[12623],"text-primary",[12625],{"type":5351,"value":12626},"UI",{"type":5351,"value":12628}," Blog",{"data":12630,"body":12631},{},{"type":12613,"children":12632},[12633],{"type":178,"tag":995,"props":12634,"children":12635},{},[12636],{"type":5351,"value":967},1776844108206]