[{"data":1,"prerenderedAt":873},["ShallowReactive",2],{"navigation":3,"$fd9cvft0wf4ga":587,"\u002Fdocs\u002Fai-elements\u002Fmessage":600,"surround-\u002Fdocs\u002Fai-elements\u002Fmessage":870},[4],{"title":5,"path":6,"stem":7,"children":8,"page":18},"Docs","\u002Fdocs","docs",[9,306,332,350,438,444,461,487,500],{"title":10,"path":11,"stem":12,"children":13,"new":18,"type":305},"Components","\u002Fdocs\u002Fcomponents","docs\u002F02.components",[14,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,85,89,93,97,101,105,109,113,117,121,125,129,133,137,141,145,149,153,157,161,165,169,173,177,181,185,189,193,197,201,205,209,213,217,221,225,229,233,237,241,245,249,253,257,261,265,269,273,277,281,285,289,293,297,301],{"title":15,"path":16,"stem":17,"new":18,"type":19,"children":-1},"Accordion","\u002Fdocs\u002Fcomponents\u002Faccordion","docs\u002Fcomponents\u002Faccordion",false,"component",{"title":21,"path":22,"stem":23,"new":18,"type":19,"children":-1},"Alert","\u002Fdocs\u002Fcomponents\u002Falert","docs\u002Fcomponents\u002Falert",{"title":25,"path":26,"stem":27,"new":18,"type":19,"children":-1},"Alert Dialog","\u002Fdocs\u002Fcomponents\u002Falert-dialog","docs\u002Fcomponents\u002Falert-dialog",{"title":29,"path":30,"stem":31,"new":18,"type":19,"children":-1},"Aspect Ratio","\u002Fdocs\u002Fcomponents\u002Faspect-ratio","docs\u002Fcomponents\u002Faspect-ratio",{"title":33,"path":34,"stem":35,"new":18,"type":19,"children":-1},"Attachment","\u002Fdocs\u002Fcomponents\u002Fattachment","docs\u002Fcomponents\u002Fattachment",{"title":37,"path":38,"stem":39,"new":18,"type":19,"children":-1},"Avatar","\u002Fdocs\u002Fcomponents\u002Favatar","docs\u002Fcomponents\u002Favatar",{"title":41,"path":42,"stem":43,"new":18,"type":19,"children":-1},"Badge","\u002Fdocs\u002Fcomponents\u002Fbadge","docs\u002Fcomponents\u002Fbadge",{"title":45,"path":46,"stem":47,"new":18,"type":19,"children":-1},"Breadcrumb","\u002Fdocs\u002Fcomponents\u002Fbreadcrumb","docs\u002Fcomponents\u002Fbreadcrumb",{"title":49,"path":50,"stem":51,"new":18,"type":19,"children":-1},"Bubble","\u002Fdocs\u002Fcomponents\u002Fbubble","docs\u002Fcomponents\u002Fbubble",{"title":53,"path":54,"stem":55,"new":18,"type":19,"children":-1},"Button","\u002Fdocs\u002Fcomponents\u002Fbutton","docs\u002Fcomponents\u002Fbutton",{"title":57,"path":58,"stem":59,"new":18,"type":19,"children":-1},"Button Group","\u002Fdocs\u002Fcomponents\u002Fbutton-group","docs\u002Fcomponents\u002Fbutton-group",{"title":61,"path":62,"stem":63,"new":18,"type":19,"children":-1},"Calendar","\u002Fdocs\u002Fcomponents\u002Fcalendar","docs\u002Fcomponents\u002Fcalendar",{"title":65,"path":66,"stem":67,"new":18,"type":19,"children":-1},"Card","\u002Fdocs\u002Fcomponents\u002Fcard","docs\u002Fcomponents\u002Fcard",{"title":69,"path":70,"stem":71,"new":18,"type":19,"children":-1},"Carousel","\u002Fdocs\u002Fcomponents\u002Fcarousel","docs\u002Fcomponents\u002Fcarousel",{"title":73,"path":74,"stem":75,"new":18,"type":19,"children":-1},"Chart","\u002Fdocs\u002Fcomponents\u002Fchart","docs\u002Fcomponents\u002Fchart",{"title":77,"path":78,"stem":79,"new":18,"type":19,"children":-1},"Checkbox","\u002Fdocs\u002Fcomponents\u002Fcheckbox","docs\u002Fcomponents\u002Fcheckbox",{"title":81,"path":82,"stem":83,"new":84,"type":19,"children":-1},"Code Block","\u002Fdocs\u002Fcomponents\u002Fcode-block","docs\u002Fcomponents\u002Fcode-block",true,{"title":86,"path":87,"stem":88,"new":18,"type":19,"children":-1},"Collapsible","\u002Fdocs\u002Fcomponents\u002Fcollapsible","docs\u002Fcomponents\u002Fcollapsible",{"title":90,"path":91,"stem":92,"new":18,"type":19,"children":-1},"Combobox","\u002Fdocs\u002Fcomponents\u002Fcombobox","docs\u002Fcomponents\u002Fcombobox",{"title":94,"path":95,"stem":96,"new":18,"type":19,"children":-1},"Command","\u002Fdocs\u002Fcomponents\u002Fcommand","docs\u002Fcomponents\u002Fcommand",{"title":98,"path":99,"stem":100,"new":18,"type":19,"children":-1},"Context Menu","\u002Fdocs\u002Fcomponents\u002Fcontext-menu","docs\u002Fcomponents\u002Fcontext-menu",{"title":102,"path":103,"stem":104,"new":18,"type":19,"children":-1},"Data Table","\u002Fdocs\u002Fcomponents\u002Fdata-table","docs\u002Fcomponents\u002Fdata-table",{"title":106,"path":107,"stem":108,"new":18,"type":19,"children":-1},"Date Picker","\u002Fdocs\u002Fcomponents\u002Fdate-picker","docs\u002Fcomponents\u002Fdate-picker",{"title":110,"path":111,"stem":112,"new":18,"type":19,"children":-1},"Dialog","\u002Fdocs\u002Fcomponents\u002Fdialog","docs\u002Fcomponents\u002Fdialog",{"title":114,"path":115,"stem":116,"new":18,"type":19,"children":-1},"Drawer","\u002Fdocs\u002Fcomponents\u002Fdrawer","docs\u002Fcomponents\u002Fdrawer",{"title":118,"path":119,"stem":120,"new":18,"type":19,"children":-1},"Dropdown Menu","\u002Fdocs\u002Fcomponents\u002Fdropdown-menu","docs\u002Fcomponents\u002Fdropdown-menu",{"title":122,"path":123,"stem":124,"new":18,"type":19,"children":-1},"Empty","\u002Fdocs\u002Fcomponents\u002Fempty","docs\u002Fcomponents\u002Fempty",{"title":126,"path":127,"stem":128,"new":18,"type":19,"children":-1},"Field","\u002Fdocs\u002Fcomponents\u002Ffield","docs\u002Fcomponents\u002Ffield",{"title":130,"path":131,"stem":132,"new":18,"type":19,"children":-1},"Form","\u002Fdocs\u002Fcomponents\u002Fform","docs\u002Fcomponents\u002Fform",{"title":134,"path":135,"stem":136,"new":18,"type":19,"children":-1},"Hover Card","\u002Fdocs\u002Fcomponents\u002Fhover-card","docs\u002Fcomponents\u002Fhover-card",{"title":138,"path":139,"stem":140,"new":18,"type":19,"children":-1},"Input","\u002Fdocs\u002Fcomponents\u002Finput","docs\u002Fcomponents\u002Finput",{"title":142,"path":143,"stem":144,"new":18,"type":19,"children":-1},"Input Group","\u002Fdocs\u002Fcomponents\u002Finput-group","docs\u002Fcomponents\u002Finput-group",{"title":146,"path":147,"stem":148,"new":18,"type":19,"children":-1},"Input OTP","\u002Fdocs\u002Fcomponents\u002Finput-otp","docs\u002Fcomponents\u002Finput-otp",{"title":150,"path":151,"stem":152,"new":18,"type":19,"children":-1},"Item","\u002Fdocs\u002Fcomponents\u002Fitem","docs\u002Fcomponents\u002Fitem",{"title":154,"path":155,"stem":156,"new":18,"type":19,"children":-1},"Kbd","\u002Fdocs\u002Fcomponents\u002Fkbd","docs\u002Fcomponents\u002Fkbd",{"title":158,"path":159,"stem":160,"new":18,"type":19,"children":-1},"Label","\u002Fdocs\u002Fcomponents\u002Flabel","docs\u002Fcomponents\u002Flabel",{"title":162,"path":163,"stem":164,"new":18,"type":19,"children":-1},"Marker","\u002Fdocs\u002Fcomponents\u002Fmarker","docs\u002Fcomponents\u002Fmarker",{"title":166,"path":167,"stem":168,"new":18,"type":19,"children":-1},"Menubar","\u002Fdocs\u002Fcomponents\u002Fmenubar","docs\u002Fcomponents\u002Fmenubar",{"title":170,"path":171,"stem":172,"new":18,"type":19,"children":-1},"Message","\u002Fdocs\u002Fcomponents\u002Fmessage","docs\u002Fcomponents\u002Fmessage",{"title":174,"path":175,"stem":176,"new":18,"type":19,"children":-1},"Message Scroller","\u002Fdocs\u002Fcomponents\u002Fmessage-scroller","docs\u002Fcomponents\u002Fmessage-scroller",{"title":178,"path":179,"stem":180,"new":18,"type":19,"children":-1},"Native Select","\u002Fdocs\u002Fcomponents\u002Fnative-select","docs\u002Fcomponents\u002Fnative-select",{"title":182,"path":183,"stem":184,"new":18,"type":19,"children":-1},"Navigation Menu","\u002Fdocs\u002Fcomponents\u002Fnavigation-menu","docs\u002Fcomponents\u002Fnavigation-menu",{"title":186,"path":187,"stem":188,"new":18,"type":19,"children":-1},"Number Field","\u002Fdocs\u002Fcomponents\u002Fnumber-field","docs\u002Fcomponents\u002Fnumber-field",{"title":190,"path":191,"stem":192,"new":18,"type":19,"children":-1},"Pagination","\u002Fdocs\u002Fcomponents\u002Fpagination","docs\u002Fcomponents\u002Fpagination",{"title":194,"path":195,"stem":196,"new":18,"type":19,"children":-1},"Pin Input","\u002Fdocs\u002Fcomponents\u002Fpin-input","docs\u002Fcomponents\u002Fpin-input",{"title":198,"path":199,"stem":200,"new":18,"type":19,"children":-1},"Popover","\u002Fdocs\u002Fcomponents\u002Fpopover","docs\u002Fcomponents\u002Fpopover",{"title":202,"path":203,"stem":204,"new":18,"type":19,"children":-1},"Progress","\u002Fdocs\u002Fcomponents\u002Fprogress","docs\u002Fcomponents\u002Fprogress",{"title":206,"path":207,"stem":208,"new":84,"type":19,"children":-1},"Questionnaire","\u002Fdocs\u002Fcomponents\u002Fquestionnaire","docs\u002Fcomponents\u002Fquestionnaire",{"title":210,"path":211,"stem":212,"new":18,"type":19,"children":-1},"Radio Group","\u002Fdocs\u002Fcomponents\u002Fradio-group","docs\u002Fcomponents\u002Fradio-group",{"title":214,"path":215,"stem":216,"new":18,"type":19,"children":-1},"Range Calendar","\u002Fdocs\u002Fcomponents\u002Frange-calendar","docs\u002Fcomponents\u002Frange-calendar",{"title":218,"path":219,"stem":220,"new":18,"type":19,"children":-1},"Resizable","\u002Fdocs\u002Fcomponents\u002Fresizable","docs\u002Fcomponents\u002Fresizable",{"title":222,"path":223,"stem":224,"new":18,"type":19,"children":-1},"Scroll Area","\u002Fdocs\u002Fcomponents\u002Fscroll-area","docs\u002Fcomponents\u002Fscroll-area",{"title":226,"path":227,"stem":228,"new":18,"type":19,"children":-1},"Select","\u002Fdocs\u002Fcomponents\u002Fselect","docs\u002Fcomponents\u002Fselect",{"title":230,"path":231,"stem":232,"new":18,"type":19,"children":-1},"Separator","\u002Fdocs\u002Fcomponents\u002Fseparator","docs\u002Fcomponents\u002Fseparator",{"title":234,"path":235,"stem":236,"new":18,"type":19,"children":-1},"Sheet","\u002Fdocs\u002Fcomponents\u002Fsheet","docs\u002Fcomponents\u002Fsheet",{"title":238,"path":239,"stem":240,"new":18,"type":19,"children":-1},"Sidebar","\u002Fdocs\u002Fcomponents\u002Fsidebar","docs\u002Fcomponents\u002Fsidebar",{"title":242,"path":243,"stem":244,"new":18,"type":19,"children":-1},"Skeleton","\u002Fdocs\u002Fcomponents\u002Fskeleton","docs\u002Fcomponents\u002Fskeleton",{"title":246,"path":247,"stem":248,"new":18,"type":19,"children":-1},"Slider","\u002Fdocs\u002Fcomponents\u002Fslider","docs\u002Fcomponents\u002Fslider",{"title":250,"path":251,"stem":252,"new":18,"type":19,"children":-1},"Sonner","\u002Fdocs\u002Fcomponents\u002Fsonner","docs\u002Fcomponents\u002Fsonner",{"title":254,"path":255,"stem":256,"new":18,"type":19,"children":-1},"Spinner","\u002Fdocs\u002Fcomponents\u002Fspinner","docs\u002Fcomponents\u002Fspinner",{"title":258,"path":259,"stem":260,"new":18,"type":19,"children":-1},"Stepper","\u002Fdocs\u002Fcomponents\u002Fstepper","docs\u002Fcomponents\u002Fstepper",{"title":262,"path":263,"stem":264,"new":18,"type":19,"children":-1},"Switch","\u002Fdocs\u002Fcomponents\u002Fswitch","docs\u002Fcomponents\u002Fswitch",{"title":266,"path":267,"stem":268,"new":18,"type":19,"children":-1},"Table","\u002Fdocs\u002Fcomponents\u002Ftable","docs\u002Fcomponents\u002Ftable",{"title":270,"path":271,"stem":272,"new":18,"type":19,"children":-1},"Tabs","\u002Fdocs\u002Fcomponents\u002Ftabs","docs\u002Fcomponents\u002Ftabs",{"title":274,"path":275,"stem":276,"new":18,"type":19,"children":-1},"Tags Input","\u002Fdocs\u002Fcomponents\u002Ftags-input","docs\u002Fcomponents\u002Ftags-input",{"title":278,"path":279,"stem":280,"new":18,"type":19,"children":-1},"Textarea","\u002Fdocs\u002Fcomponents\u002Ftextarea","docs\u002Fcomponents\u002Ftextarea",{"title":282,"path":283,"stem":284,"new":18,"type":19,"children":-1},"Toast","\u002Fdocs\u002Fcomponents\u002Ftoast","docs\u002Fcomponents\u002Ftoast",{"title":286,"path":287,"stem":288,"new":18,"type":19,"children":-1},"Toggle","\u002Fdocs\u002Fcomponents\u002Ftoggle","docs\u002Fcomponents\u002Ftoggle",{"title":290,"path":291,"stem":292,"new":18,"type":19,"children":-1},"Toggle Group","\u002Fdocs\u002Fcomponents\u002Ftoggle-group","docs\u002Fcomponents\u002Ftoggle-group",{"title":294,"path":295,"stem":296,"new":18,"type":19,"children":-1},"Tooltip","\u002Fdocs\u002Fcomponents\u002Ftooltip","docs\u002Fcomponents\u002Ftooltip",{"title":298,"path":299,"stem":300,"new":84,"type":19,"children":-1},"Trace","\u002Fdocs\u002Fcomponents\u002Ftrace","docs\u002Fcomponents\u002Ftrace",{"title":302,"path":303,"stem":304,"new":18,"type":19,"children":-1},"Typography","\u002Fdocs\u002Fcomponents\u002Ftypography","docs\u002Fcomponents\u002Ftypography","group",{"title":307,"path":308,"stem":309,"children":310,"new":18,"type":305},"Installation","\u002Fdocs\u002Finstallation","docs\u002F02.installation",[311,316,320,324,328],{"title":312,"path":313,"stem":314,"new":18,"type":315,"children":-1},"Vite","\u002Fdocs\u002Finstallation\u002Fvite","docs\u002Finstallation\u002F01.vite","page",{"title":317,"path":318,"stem":319,"new":18,"type":315,"children":-1},"Nuxt","\u002Fdocs\u002Finstallation\u002Fnuxt","docs\u002Finstallation\u002F02.nuxt",{"title":321,"path":322,"stem":323,"new":18,"type":315,"children":-1},"Astro","\u002Fdocs\u002Finstallation\u002Fastro","docs\u002Finstallation\u002F03.astro",{"title":325,"path":326,"stem":327,"new":18,"type":315,"children":-1},"Laravel","\u002Fdocs\u002Finstallation\u002Flaravel","docs\u002Finstallation\u002F04.laravel",{"title":329,"path":330,"stem":331,"new":18,"type":315,"children":-1},"Manual Installation","\u002Fdocs\u002Finstallation\u002Fmanual","docs\u002Finstallation\u002F05.manual",{"title":333,"path":334,"stem":335,"children":336,"new":18,"type":305},"Dark Mode","\u002Fdocs\u002Fdark-mode","docs\u002F05.dark-mode",[337,340,343,347],{"title":312,"path":338,"stem":339,"new":18,"type":315,"children":-1},"\u002Fdocs\u002Fdark-mode\u002Fvite","docs\u002Fdark-mode\u002F01.vite",{"title":317,"path":341,"stem":342,"new":18,"type":315,"children":-1},"\u002Fdocs\u002Fdark-mode\u002Fnuxt","docs\u002Fdark-mode\u002F02.nuxt",{"title":344,"path":345,"stem":346,"new":18,"type":315,"children":-1},"Vitepress","\u002Fdocs\u002Fdark-mode\u002Fvitepress","docs\u002Fdark-mode\u002F03.vitepress",{"title":321,"path":348,"stem":349,"new":18,"type":315,"children":-1},"\u002Fdocs\u002Fdark-mode\u002Fastro","docs\u002Fdark-mode\u002F04.astro",{"title":351,"path":352,"stem":353,"children":354,"new":18,"type":305},"AI Elements","\u002Fdocs\u002Fai-elements","docs\u002Fai-elements",[355,359,363,367,371,375,379,383,386,390,394,398,402,406,410,414,418,422,426,430,434],{"title":356,"path":357,"stem":358,"new":84,"type":315,"children":-1},"Chain of Thought","\u002Fdocs\u002Fai-elements\u002Fchain-of-thought","docs\u002Fai-elements\u002Fchain-of-thought",{"title":360,"path":361,"stem":362,"new":84,"type":315,"children":-1},"Chat","\u002Fdocs\u002Fai-elements\u002Fchat","docs\u002Fai-elements\u002Fchat",{"title":364,"path":365,"stem":366,"new":84,"type":315,"children":-1},"Checkpoint","\u002Fdocs\u002Fai-elements\u002Fcheckpoint","docs\u002Fai-elements\u002Fcheckpoint",{"title":368,"path":369,"stem":370,"new":84,"type":315,"children":-1},"Confirmation","\u002Fdocs\u002Fai-elements\u002Fconfirmation","docs\u002Fai-elements\u002Fconfirmation",{"title":372,"path":373,"stem":374,"new":84,"type":315,"children":-1},"Context","\u002Fdocs\u002Fai-elements\u002Fcontext","docs\u002Fai-elements\u002Fcontext",{"title":376,"path":377,"stem":378,"new":84,"type":315,"children":-1},"File Tree","\u002Fdocs\u002Fai-elements\u002Ffile-tree","docs\u002Fai-elements\u002Ffile-tree",{"title":380,"path":381,"stem":382,"new":84,"type":315,"children":-1},"Inline Citation","\u002Fdocs\u002Fai-elements\u002Finline-citation","docs\u002Fai-elements\u002Finline-citation",{"title":170,"path":384,"stem":385,"new":84,"type":315,"children":-1},"\u002Fdocs\u002Fai-elements\u002Fmessage","docs\u002Fai-elements\u002Fmessage",{"title":387,"path":388,"stem":389,"new":84,"type":315,"children":-1},"Model Selector","\u002Fdocs\u002Fai-elements\u002Fmodel-selector","docs\u002Fai-elements\u002Fmodel-selector",{"title":391,"path":392,"stem":393,"new":84,"type":315,"children":-1},"Plan","\u002Fdocs\u002Fai-elements\u002Fplan","docs\u002Fai-elements\u002Fplan",{"title":395,"path":396,"stem":397,"new":84,"type":315,"children":-1},"Prompt Input","\u002Fdocs\u002Fai-elements\u002Fprompt-input","docs\u002Fai-elements\u002Fprompt-input",{"title":399,"path":400,"stem":401,"new":84,"type":315,"children":-1},"Queue","\u002Fdocs\u002Fai-elements\u002Fqueue","docs\u002Fai-elements\u002Fqueue",{"title":403,"path":404,"stem":405,"new":84,"type":315,"children":-1},"Reasoning","\u002Fdocs\u002Fai-elements\u002Freasoning","docs\u002Fai-elements\u002Freasoning",{"title":407,"path":408,"stem":409,"new":84,"type":315,"children":-1},"Sources","\u002Fdocs\u002Fai-elements\u002Fsources","docs\u002Fai-elements\u002Fsources",{"title":411,"path":412,"stem":413,"new":84,"type":315,"children":-1},"Stack Trace","\u002Fdocs\u002Fai-elements\u002Fstack-trace","docs\u002Fai-elements\u002Fstack-trace",{"title":415,"path":416,"stem":417,"new":84,"type":315,"children":-1},"Subagent","\u002Fdocs\u002Fai-elements\u002Fsubagent","docs\u002Fai-elements\u002Fsubagent",{"title":419,"path":420,"stem":421,"new":84,"type":315,"children":-1},"Suggestion","\u002Fdocs\u002Fai-elements\u002Fsuggestion","docs\u002Fai-elements\u002Fsuggestion",{"title":423,"path":424,"stem":425,"new":84,"type":315,"children":-1},"Task","\u002Fdocs\u002Fai-elements\u002Ftask","docs\u002Fai-elements\u002Ftask",{"title":427,"path":428,"stem":429,"new":84,"type":315,"children":-1},"Terminal","\u002Fdocs\u002Fai-elements\u002Fterminal","docs\u002Fai-elements\u002Fterminal",{"title":431,"path":432,"stem":433,"new":84,"type":315,"children":-1},"Test Results","\u002Fdocs\u002Fai-elements\u002Ftest-results","docs\u002Fai-elements\u002Ftest-results",{"title":435,"path":436,"stem":437,"new":84,"type":315,"children":-1},"Tool","\u002Fdocs\u002Fai-elements\u002Ftool","docs\u002Fai-elements\u002Ftool",{"title":439,"path":440,"stem":441,"children":442,"new":18,"type":305},"Directory","\u002Fdocs\u002Fdirectory","docs\u002Fdirectory\u002Findex",[443],{"title":439,"path":440,"stem":441,"new":18,"type":315,"children":-1},{"title":445,"path":446,"stem":447,"children":448,"new":18,"type":305},"Forms","\u002Fdocs\u002Fforms","docs\u002Fforms",[449,453,457],{"title":450,"path":451,"stem":452,"new":18,"type":315,"children":-1},"VeeValidate","\u002Fdocs\u002Fforms\u002Fvee-validate","docs\u002Fforms\u002F01.vee-validate",{"title":454,"path":455,"stem":456,"new":18,"type":315,"children":-1},"TanStack Form","\u002Fdocs\u002Fforms\u002Ftanstack-form","docs\u002Fforms\u002F02.tanstack-form",{"title":458,"path":459,"stem":460,"new":18,"type":315,"children":-1},"Formisch","\u002Fdocs\u002Fforms\u002Fformisch","docs\u002Fforms\u002F03.formisch",{"title":462,"path":463,"stem":464,"children":465,"new":18,"type":305},"Registry","\u002Fdocs\u002Fregistry","docs\u002Fregistry\u002Findex",[466,467,471,475,479,483],{"title":462,"path":463,"stem":464,"new":18,"type":315,"children":-1},{"title":468,"path":469,"stem":470,"new":18,"type":315,"children":-1},"Examples","\u002Fdocs\u002Fregistry\u002Fexamples","docs\u002Fregistry\u002Fexamples",{"title":472,"path":473,"stem":474,"new":18,"type":315,"children":-1},"FAQ","\u002Fdocs\u002Fregistry\u002Ffaq","docs\u002Fregistry\u002Ffaq",{"title":476,"path":477,"stem":478,"new":18,"type":315,"children":-1},"Getting Started","\u002Fdocs\u002Fregistry\u002Fgetting-started","docs\u002Fregistry\u002Fgetting-started",{"title":480,"path":481,"stem":482,"new":18,"type":315,"children":-1},"registry-item.json","\u002Fdocs\u002Fregistry\u002Fregistry-item-json","docs\u002Fregistry\u002Fregistry-item-json",{"title":484,"path":485,"stem":486,"new":18,"type":315,"children":-1},"registry.json","\u002Fdocs\u002Fregistry\u002Fregistry-json","docs\u002Fregistry\u002Fregistry-json",{"title":488,"path":489,"stem":490,"children":491,"page":18,"type":305},"Utilities","\u002Fdocs\u002Futilities","docs\u002Futilities",[492,496],{"title":493,"path":494,"stem":495,"new":18,"type":315,"children":-1},"scroll-fade","\u002Fdocs\u002Futilities\u002Fscroll-fade","docs\u002Futilities\u002Fscroll-fade",{"title":497,"path":498,"stem":499,"new":18,"type":315,"children":-1},"shimmer","\u002Fdocs\u002Futilities\u002Fshimmer","docs\u002Futilities\u002Fshimmer",{"path":6,"stem":7,"title":501,"type":305,"children":502},"Get Started",[503,507,514,518,522,528,532,536,540,544,548,552,575,579,583],{"title":504,"path":505,"stem":506,"new":18,"type":315,"children":-1},"Introduction","\u002Fdocs\u002Fintroduction","docs\u002F01.introduction",{"title":307,"path":308,"stem":309,"children":508,"new":18,"type":305},[509,510,511,512,513],{"title":312,"path":313,"stem":314,"new":18,"type":315,"children":-1},{"title":317,"path":318,"stem":319,"new":18,"type":315,"children":-1},{"title":321,"path":322,"stem":323,"new":18,"type":315,"children":-1},{"title":325,"path":326,"stem":327,"new":18,"type":315,"children":-1},{"title":329,"path":330,"stem":331,"new":18,"type":315,"children":-1},{"title":515,"path":516,"stem":517,"new":18,"type":315,"children":-1},"components.json","\u002Fdocs\u002Fcomponents-json","docs\u002F03.components-json",{"title":519,"path":520,"stem":521,"new":18,"type":315,"children":-1},"Theming","\u002Fdocs\u002Ftheming","docs\u002F04.theming",{"title":333,"path":334,"stem":335,"children":523,"new":18,"type":305},[524,525,526,527],{"title":312,"path":338,"stem":339,"new":18,"type":315,"children":-1},{"title":317,"path":341,"stem":342,"new":18,"type":315,"children":-1},{"title":344,"path":345,"stem":346,"new":18,"type":315,"children":-1},{"title":321,"path":348,"stem":349,"new":18,"type":315,"children":-1},{"title":529,"path":530,"stem":531,"new":18,"type":315,"children":-1},"CLI","\u002Fdocs\u002Fcli","docs\u002F06.cli",{"title":533,"path":534,"stem":535,"new":18,"type":315,"children":-1},"JavaScript","\u002Fdocs\u002Fjavascript","docs\u002F07.javascript",{"title":537,"path":538,"stem":539,"new":18,"type":315,"children":-1},"RTL","\u002Fdocs\u002Frtl","docs\u002F08.rtl",{"title":541,"path":542,"stem":543,"new":18,"type":315,"children":-1},"Figma","\u002Fdocs\u002Ffigma","docs\u002F09.figma",{"title":545,"path":546,"stem":547,"new":18,"type":315,"children":-1},"Changelog","\u002Fdocs\u002Fchangelog","docs\u002F10.changelog",{"title":549,"path":550,"stem":551,"new":18,"type":315,"children":-1},"Legacy Docs","\u002Fdocs\u002Flegacy","docs\u002F11.legacy",{"title":351,"path":352,"stem":353,"children":553,"new":18,"type":305},[554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574],{"title":356,"path":357,"stem":358,"new":84,"type":315,"children":-1},{"title":360,"path":361,"stem":362,"new":84,"type":315,"children":-1},{"title":364,"path":365,"stem":366,"new":84,"type":315,"children":-1},{"title":368,"path":369,"stem":370,"new":84,"type":315,"children":-1},{"title":372,"path":373,"stem":374,"new":84,"type":315,"children":-1},{"title":376,"path":377,"stem":378,"new":84,"type":315,"children":-1},{"title":380,"path":381,"stem":382,"new":84,"type":315,"children":-1},{"title":170,"path":384,"stem":385,"new":84,"type":315,"children":-1},{"title":387,"path":388,"stem":389,"new":84,"type":315,"children":-1},{"title":391,"path":392,"stem":393,"new":84,"type":315,"children":-1},{"title":395,"path":396,"stem":397,"new":84,"type":315,"children":-1},{"title":399,"path":400,"stem":401,"new":84,"type":315,"children":-1},{"title":403,"path":404,"stem":405,"new":84,"type":315,"children":-1},{"title":407,"path":408,"stem":409,"new":84,"type":315,"children":-1},{"title":411,"path":412,"stem":413,"new":84,"type":315,"children":-1},{"title":415,"path":416,"stem":417,"new":84,"type":315,"children":-1},{"title":419,"path":420,"stem":421,"new":84,"type":315,"children":-1},{"title":423,"path":424,"stem":425,"new":84,"type":315,"children":-1},{"title":427,"path":428,"stem":429,"new":84,"type":315,"children":-1},{"title":431,"path":432,"stem":433,"new":84,"type":315,"children":-1},{"title":435,"path":436,"stem":437,"new":84,"type":315,"children":-1},{"title":576,"path":577,"stem":578,"new":18,"type":315,"children":-1},"Skills","\u002Fdocs\u002Fskills","docs\u002Fskills",{"title":580,"path":581,"stem":582,"new":18,"type":315,"children":-1},"Typeset","\u002Fdocs\u002Ftypeset","docs\u002Ftypeset",{"title":488,"path":489,"stem":490,"children":584,"page":18,"type":305},[585,586],{"title":493,"path":494,"stem":495,"new":18,"type":315,"children":-1},{"title":497,"path":498,"stem":499,"new":18,"type":315,"children":-1},{"repo":588},{"id":589,"name":590,"repo":591,"description":592,"createdAt":593,"updatedAt":594,"pushedAt":595,"stars":596,"watchers":597,"forks":598,"defaultBranch":599},658791894,"shadcn-vue","unovue\u002Fshadcn-vue","Vue port of shadcn-ui","2023-06-26T13:53:23Z","2026-10-15T03:21:33Z","2026-10-14T03:11:00Z",10691,36,681,"dev",{"id":601,"title":170,"body":602,"description":863,"extension":864,"links":865,"meta":866,"navigation":84,"new":84,"path":384,"rawbody":867,"seo":868,"stem":385,"__hash__":869},"content\u002Fdocs\u002Fai-elements\u002Fmessage.md",{"type":603,"value":604,"toc":854},"minimark",[605,612,631,635,647,712,716,725,730,734,741,778,782,806,812,816,823,829,833,846],[606,607],"component-preview",{"className":608,"name":610,"previewClass":611},[609],"style-rhea","MessagePatternDemo","h-auto",[613,614,615,616,619,620,622,623,627,628,630],"p",{},"Use Message for one turn in a thread. The person's text is a ",[617,618,49],"a",{"href":50}," on a ",[617,621,170],{"href":171}," with ",[624,625,626],"code",{},"align=\"end\"",". The agent's reply is markdown on a Message, with actions under it. A thread of these turns is ",[617,629,360],{"href":361},".",[632,633,307],"h2",{"id":634},"installation",[613,636,637,638,640,641,643,644,646],{},"Message is built with the ",[617,639,170],{"href":171},", ",[617,642,49],{"href":50},", and ",[617,645,294],{"href":295}," components.",[648,649,650,665,678],"code-tabs",{},[651,652,653,659],"tabs-list",{},[654,655,657],"tabs-trigger",{"value":656},"cli",[613,658,529],{},[654,660,662],{"value":661},"manual",[613,663,664],{},"Manual",[666,667,668],"tabs-content",{"value":656},[669,670,676],"pre",{"className":671,"code":673,"language":674,"meta":675},[672],"language-bash","npx shadcn-vue@latest add message bubble tooltip\n","bash","",[624,677,673],{"__ignoreMap":675},[666,679,680],{"value":661},[681,682,683,689,695,707],"steps",{},[684,685,686],"step",{},[613,687,688],{},"Install the required shadcn-vue dependencies:",[669,690,693],{"className":691,"code":692,"language":674,"meta":675},[672],"npx shadcn-vue@latest add bubble tooltip\n",[624,694,692],{"__ignoreMap":675},[684,696,697],{},[613,698,699,700,706],{},"Copy and paste the ",[617,701,705],{"href":702,"rel":703},"https:\u002F\u002Fgithub.com\u002Funovue\u002Fshadcn-vue\u002Ftree\u002Fdev\u002Fapps\u002Fv4\u002Fregistry\u002Fbases\u002Freka\u002Fui\u002Fmessage",[704],"nofollow","GitHub source code"," into your project.",[684,708,709],{},[613,710,711],{},"Update the import paths to match your project setup.",[632,713,715],{"id":714},"usage","Usage",[669,717,723],{"className":718,"code":720,"language":721,"meta":722},[719],"language-vue","\u003Cscript setup lang=\"ts\">\nimport { CopyIcon } from '@lucide\u002Fvue'\nimport { Bubble, BubbleContent } from '@\u002Fcomponents\u002Fui\u002Fbubble'\nimport { Button } from '@\u002Fcomponents\u002Fui\u002Fbutton'\nimport { Message, MessageContent, MessageFooter } from '@\u002Fcomponents\u002Fui\u002Fmessage'\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CMessage align=\"end\">\n    \u003CMessageContent>\n      \u003CBubble align=\"end\" variant=\"muted\">\n        \u003CBubbleContent>How do I add a settings dialog?\u003C\u002FBubbleContent>\n      \u003C\u002FBubble>\n    \u003C\u002FMessageContent>\n  \u003C\u002FMessage>\n  \u003CMessage>\n    \u003CMessageContent class=\"gap-2\">\n      \u003Cp>Install Dialog, then open it from the gear button.\u003C\u002Fp>\n      \u003CMessageFooter>\n        \u003CButton variant=\"ghost\" size=\"icon-sm\" aria-label=\"Copy\">\n          \u003CCopyIcon \u002F>\n        \u003C\u002FButton>\n      \u003C\u002FMessageFooter>\n    \u003C\u002FMessageContent>\n  \u003C\u002FMessage>\n\u003C\u002Ftemplate>\n","vue","showLineNumbers",[624,724,720],{"__ignoreMap":675},[613,726,727,728,630],{},"See ",[617,729,170],{"href":171},[632,731,733],{"id":732},"actions","Actions",[613,735,736,737,740],{},"Put actions in ",[624,738,739],{},"MessageFooter",". It follows the message alignment, so on the person's turn the actions sit on the right. Use ghost icon buttons with a tooltip for each.",[742,743,744,752,766,772],"ul",{},[745,746,747,751],"li",{},[748,749,750],"strong",{},"Copy"," writes the reply to the clipboard and swaps to a check for two seconds.",[745,753,754,757,758,761,762,765],{},[748,755,756],{},"Good response"," and ",[748,759,760],{},"Bad response"," are toggles. Set ",[624,763,764],{},"aria-pressed"," so screen readers announce the state.",[745,767,768,771],{},[748,769,770],{},"Retry"," runs the turn again.",[745,773,774,777],{},[748,775,776],{},"Edit"," on the person's turn puts the text back in the field.",[632,779,781],{"id":780},"markdown","Markdown",[613,783,784,785,790,791,794,795,798,799,801,802,805],{},"The reply streams as markdown. Render it with ",[617,786,789],{"href":787,"rel":788},"https:\u002F\u002Fcomark.dev",[704],"Comark"," (",[624,792,793],{},"@comark\u002Fvue",") and route fenced code to a ",[617,796,81],{"href":797},"\u002Fdocs\u002Fcomponents\u002Fcode-block#markdown"," with a custom ",[624,800,669],{}," component, so code in the reply gets line numbers and a copy button. Pass ",[624,803,804],{},"streaming"," while the reply streams, so unfinished syntax is closed as it renders.",[669,807,810],{"className":808,"code":809,"language":721,"meta":722},[719],"\u003Cscript setup lang=\"ts\">\nimport { Markdown } from '@comark\u002Fvue'\nimport MarkdownCodeBlock from '.\u002FMarkdownCodeBlock.vue'\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CMarkdown\n    class=\"typeset\"\n    :value=\"text\"\n    :components=\"{ pre: MarkdownCodeBlock }\"\n    :streaming=\"isStreaming\"\n  \u002F>\n\u003C\u002Ftemplate>\n",[624,811,809],{"__ignoreMap":675},[632,813,815],{"id":814},"ai-sdk","AI SDK",[613,817,818,819,822],{},"Branch on the message role. The person's turn is the bubble. The agent's turn is the reply, and ",[624,820,821],{},"chat.regenerate"," with the message id runs it again.",[669,824,827],{"className":825,"code":826,"language":721,"meta":722},[719],"\u003Cscript setup lang=\"ts\">\nimport type { UIMessage } from 'ai'\nimport { Chat } from '@ai-sdk\u002Fvue'\nimport { Markdown } from '@comark\u002Fvue'\nimport { RefreshCcwIcon } from '@lucide\u002Fvue'\nimport MarkdownCodeBlock from '.\u002FMarkdownCodeBlock.vue'\n\nconst chat = new Chat({})\n\nfunction getText(message: UIMessage) {\n  return message.parts.map(part => (part.type === 'text' ? part.text : '')).join('')\n}\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Ctemplate v-for=\"message in chat.messages\" :key=\"message.id\">\n    \u003CMessage v-if=\"message.role === 'user'\" align=\"end\">\n      \u003CMessageContent>\n        \u003CBubble align=\"end\" variant=\"muted\">\n          \u003CBubbleContent>{{ getText(message) }}\u003C\u002FBubbleContent>\n        \u003C\u002FBubble>\n      \u003C\u002FMessageContent>\n    \u003C\u002FMessage>\n    \u003CMessage v-else>\n      \u003CMessageContent class=\"gap-2\">\n        \u003CMarkdown\n          class=\"typeset\"\n          :value=\"getText(message)\"\n          :components=\"{ pre: MarkdownCodeBlock }\"\n          :streaming=\"chat.status === 'streaming' && message === chat.messages.at(-1)\"\n        \u002F>\n        \u003CMessageFooter>\n          \u003CButton\n            variant=\"ghost\"\n            size=\"icon-sm\"\n            aria-label=\"Retry\"\n            @click=\"chat.regenerate({ messageId: message.id })\"\n          >\n            \u003CRefreshCcwIcon \u002F>\n          \u003C\u002FButton>\n        \u003C\u002FMessageFooter>\n      \u003C\u002FMessageContent>\n    \u003C\u002FMessage>\n  \u003C\u002Ftemplate>\n\u003C\u002Ftemplate>\n",[624,828,826],{"__ignoreMap":675},[632,830,832],{"id":831},"migrating-from-ai-elements-vue","Migrating from AI Elements Vue",[613,834,835,836,841,842,845],{},"If you added Message from ",[617,837,840],{"href":838,"rel":839},"https:\u002F\u002Fwww.ai-elements-vue.com",[704],"AI Elements Vue",", your project has a ",[624,843,844],{},"components\u002Fai-elements\u002Fmessage\u002F"," folder. Paste this prompt into your coding agent to rebuild it on Message, Bubble and Tooltip. Every export keeps its name and props, so the code that uses it keeps working.",[669,847,852],{"className":848,"code":850,"language":851,"meta":675},[849],"language-txt","Migrate components\u002Fai-elements\u002Fmessage\u002F from AI Elements Vue to the shadcn-vue Message, Bubble and Tooltip components.\n\nKeep every export, with the same name and props, so the code that imports it keeps working. Only change how each part renders.\n\n1. Install the components: npx shadcn-vue@latest add message bubble tooltip\n2. Read https:\u002F\u002Fwww.shadcn-vue.com\u002Fdocs\u002Fai-elements\u002Fmessage and build Message the same way.\n3. Rebuild each part:\n   - This folder exports Message and MessageContent too, so import the shadcn-vue parts under other names, like MessageRoot and MessageBody.\n   - Message renders the shadcn-vue Message, with align=\"end\" when from is \"user\". Pass from down with provide\u002Finject.\n   - MessageContent renders the shadcn-vue MessageContent. For the person's messages, wrap the slot in a Bubble with align=\"end\" and variant=\"muted\".\n   - MessageActions renders a MessageFooter.\n   - MessageAction renders a Button with variant=\"ghost\" and size=\"icon-sm\" in a Tooltip, with its label as the aria-label.\n   - Keep MessageResponse on the markdown renderer it already uses, and keep the branch parts and MessageToolbar as they are.\n4. Remove the imports the files no longer use.\n5. Run vue-tsc and fix any errors.\n","txt",[624,853,850],{"__ignoreMap":675},{"title":675,"searchDepth":855,"depth":855,"links":856},2,[857,858,859,860,861,862],{"id":634,"depth":855,"text":307},{"id":714,"depth":855,"text":715},{"id":732,"depth":855,"text":733},{"id":780,"depth":855,"text":781},{"id":814,"depth":855,"text":815},{"id":831,"depth":855,"text":832},"One turn. The person's message, and the agent's reply with its actions.","md",null,{"component":84},"---\ntitle: Message\ndescription: One turn. The person's message, and the agent's reply with its actions.\ncomponent: true\nnew: true\n---\n\n::component-preview\n---\nname: MessagePatternDemo\nclass: style-rhea\npreviewClass: h-auto\n---\n::\n\nUse Message for one turn in a thread. The person's text is a [Bubble](\u002Fdocs\u002Fcomponents\u002Fbubble) on a [Message](\u002Fdocs\u002Fcomponents\u002Fmessage) with `align=\"end\"`. The agent's reply is markdown on a Message, with actions under it. A thread of these turns is [Chat](\u002Fdocs\u002Fai-elements\u002Fchat).\n\n## Installation\n\nMessage is built with the [Message](\u002Fdocs\u002Fcomponents\u002Fmessage), [Bubble](\u002Fdocs\u002Fcomponents\u002Fbubble), and [Tooltip](\u002Fdocs\u002Fcomponents\u002Ftooltip) components.\n\n:::::code-tabs\n\n:::tabs-list\n\n  ::tabs-trigger{value=\"cli\"}\n  CLI\n  ::\n\n  ::tabs-trigger{value=\"manual\"}\n  Manual\n  ::\n\n:::\n\n::tabs-content{value=\"cli\"}\n\n```bash\nnpx shadcn-vue@latest add message bubble tooltip\n```\n\n::\n\n::::tabs-content{value=\"manual\"}\n  :::steps\n    ::step\n    Install the required shadcn-vue dependencies:\n    ::\n\n    ```bash\n    npx shadcn-vue@latest add bubble tooltip\n    ```\n\n    ::step\n    Copy and paste the [GitHub source code](https:\u002F\u002Fgithub.com\u002Funovue\u002Fshadcn-vue\u002Ftree\u002Fdev\u002Fapps\u002Fv4\u002Fregistry\u002Fbases\u002Freka\u002Fui\u002Fmessage) into your project.\n    ::\n\n    ::step\n    Update the import paths to match your project setup.\n    ::\n  :::\n::::\n\n:::::\n\n## Usage\n\n```vue showLineNumbers\n\u003Cscript setup lang=\"ts\">\nimport { CopyIcon } from '@lucide\u002Fvue'\nimport { Bubble, BubbleContent } from '@\u002Fcomponents\u002Fui\u002Fbubble'\nimport { Button } from '@\u002Fcomponents\u002Fui\u002Fbutton'\nimport { Message, MessageContent, MessageFooter } from '@\u002Fcomponents\u002Fui\u002Fmessage'\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CMessage align=\"end\">\n    \u003CMessageContent>\n      \u003CBubble align=\"end\" variant=\"muted\">\n        \u003CBubbleContent>How do I add a settings dialog?\u003C\u002FBubbleContent>\n      \u003C\u002FBubble>\n    \u003C\u002FMessageContent>\n  \u003C\u002FMessage>\n  \u003CMessage>\n    \u003CMessageContent class=\"gap-2\">\n      \u003Cp>Install Dialog, then open it from the gear button.\u003C\u002Fp>\n      \u003CMessageFooter>\n        \u003CButton variant=\"ghost\" size=\"icon-sm\" aria-label=\"Copy\">\n          \u003CCopyIcon \u002F>\n        \u003C\u002FButton>\n      \u003C\u002FMessageFooter>\n    \u003C\u002FMessageContent>\n  \u003C\u002FMessage>\n\u003C\u002Ftemplate>\n```\n\nSee [Message](\u002Fdocs\u002Fcomponents\u002Fmessage).\n\n## Actions\n\nPut actions in `MessageFooter`. It follows the message alignment, so on the person's turn the actions sit on the right. Use ghost icon buttons with a tooltip for each.\n\n- **Copy** writes the reply to the clipboard and swaps to a check for two seconds.\n- **Good response** and **Bad response** are toggles. Set `aria-pressed` so screen readers announce the state.\n- **Retry** runs the turn again.\n- **Edit** on the person's turn puts the text back in the field.\n\n## Markdown\n\nThe reply streams as markdown. Render it with [Comark](https:\u002F\u002Fcomark.dev) (`@comark\u002Fvue`) and route fenced code to a [Code Block](\u002Fdocs\u002Fcomponents\u002Fcode-block#markdown) with a custom `pre` component, so code in the reply gets line numbers and a copy button. Pass `streaming` while the reply streams, so unfinished syntax is closed as it renders.\n\n```vue showLineNumbers\n\u003Cscript setup lang=\"ts\">\nimport { Markdown } from '@comark\u002Fvue'\nimport MarkdownCodeBlock from '.\u002FMarkdownCodeBlock.vue'\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CMarkdown\n    class=\"typeset\"\n    :value=\"text\"\n    :components=\"{ pre: MarkdownCodeBlock }\"\n    :streaming=\"isStreaming\"\n  \u002F>\n\u003C\u002Ftemplate>\n```\n\n## AI SDK\n\nBranch on the message role. The person's turn is the bubble. The agent's turn is the reply, and `chat.regenerate` with the message id runs it again.\n\n```vue showLineNumbers\n\u003Cscript setup lang=\"ts\">\nimport type { UIMessage } from 'ai'\nimport { Chat } from '@ai-sdk\u002Fvue'\nimport { Markdown } from '@comark\u002Fvue'\nimport { RefreshCcwIcon } from '@lucide\u002Fvue'\nimport MarkdownCodeBlock from '.\u002FMarkdownCodeBlock.vue'\n\nconst chat = new Chat({})\n\nfunction getText(message: UIMessage) {\n  return message.parts.map(part => (part.type === 'text' ? part.text : '')).join('')\n}\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Ctemplate v-for=\"message in chat.messages\" :key=\"message.id\">\n    \u003CMessage v-if=\"message.role === 'user'\" align=\"end\">\n      \u003CMessageContent>\n        \u003CBubble align=\"end\" variant=\"muted\">\n          \u003CBubbleContent>{{ getText(message) }}\u003C\u002FBubbleContent>\n        \u003C\u002FBubble>\n      \u003C\u002FMessageContent>\n    \u003C\u002FMessage>\n    \u003CMessage v-else>\n      \u003CMessageContent class=\"gap-2\">\n        \u003CMarkdown\n          class=\"typeset\"\n          :value=\"getText(message)\"\n          :components=\"{ pre: MarkdownCodeBlock }\"\n          :streaming=\"chat.status === 'streaming' && message === chat.messages.at(-1)\"\n        \u002F>\n        \u003CMessageFooter>\n          \u003CButton\n            variant=\"ghost\"\n            size=\"icon-sm\"\n            aria-label=\"Retry\"\n            @click=\"chat.regenerate({ messageId: message.id })\"\n          >\n            \u003CRefreshCcwIcon \u002F>\n          \u003C\u002FButton>\n        \u003C\u002FMessageFooter>\n      \u003C\u002FMessageContent>\n    \u003C\u002FMessage>\n  \u003C\u002Ftemplate>\n\u003C\u002Ftemplate>\n```\n\n## Migrating from AI Elements Vue\n\nIf you added Message from [AI Elements Vue](https:\u002F\u002Fwww.ai-elements-vue.com), your project has a `components\u002Fai-elements\u002Fmessage\u002F` folder. Paste this prompt into your coding agent to rebuild it on Message, Bubble and Tooltip. Every export keeps its name and props, so the code that uses it keeps working.\n\n```txt\nMigrate components\u002Fai-elements\u002Fmessage\u002F from AI Elements Vue to the shadcn-vue Message, Bubble and Tooltip components.\n\nKeep every export, with the same name and props, so the code that imports it keeps working. Only change how each part renders.\n\n1. Install the components: npx shadcn-vue@latest add message bubble tooltip\n2. Read https:\u002F\u002Fwww.shadcn-vue.com\u002Fdocs\u002Fai-elements\u002Fmessage and build Message the same way.\n3. Rebuild each part:\n   - This folder exports Message and MessageContent too, so import the shadcn-vue parts under other names, like MessageRoot and MessageBody.\n   - Message renders the shadcn-vue Message, with align=\"end\" when from is \"user\". Pass from down with provide\u002Finject.\n   - MessageContent renders the shadcn-vue MessageContent. For the person's messages, wrap the slot in a Bubble with align=\"end\" and variant=\"muted\".\n   - MessageActions renders a MessageFooter.\n   - MessageAction renders a Button with variant=\"ghost\" and size=\"icon-sm\" in a Tooltip, with its label as the aria-label.\n   - Keep MessageResponse on the markdown renderer it already uses, and keep the branch parts and MessageToolbar as they are.\n4. Remove the imports the files no longer use.\n5. Run vue-tsc and fix any errors.\n```\n",{"title":170,"description":863},"oABglvOvI9mYdb2dM1yL6e5OFBypTzQSqNRvsyCWz4E",[871,872],{"title":380,"path":381,"stem":382,"children":-1},{"title":387,"path":388,"stem":389,"children":-1},1792076488118]