[{"data":1,"prerenderedAt":1460},["ShallowReactive",2],{"navigation":3,"$f2vxmxe0ttlw1b":470,"\u002Fdocs\u002Fcomponents\u002Fbubble":481,"surround-\u002Fdocs\u002Fcomponents\u002Fbubble":1457},[4],{"title":5,"path":6,"stem":7,"children":8,"page":18},"Docs","\u002Fdocs","docs",[9,298,324,342,348,365,391,405],{"title":10,"path":11,"stem":12,"children":13,"new":18,"type":297},"Components","\u002Fdocs\u002Fcomponents","docs\u002F02.components",[14,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,196,200,205,209,213,217,221,225,229,233,237,241,245,249,253,257,261,265,269,273,277,281,285,289,293],{"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":18,"type":19,"children":-1},"Collapsible","\u002Fdocs\u002Fcomponents\u002Fcollapsible","docs\u002Fcomponents\u002Fcollapsible",{"title":85,"path":86,"stem":87,"new":18,"type":19,"children":-1},"Combobox","\u002Fdocs\u002Fcomponents\u002Fcombobox","docs\u002Fcomponents\u002Fcombobox",{"title":89,"path":90,"stem":91,"new":18,"type":19,"children":-1},"Command","\u002Fdocs\u002Fcomponents\u002Fcommand","docs\u002Fcomponents\u002Fcommand",{"title":93,"path":94,"stem":95,"new":18,"type":19,"children":-1},"Context Menu","\u002Fdocs\u002Fcomponents\u002Fcontext-menu","docs\u002Fcomponents\u002Fcontext-menu",{"title":97,"path":98,"stem":99,"new":18,"type":19,"children":-1},"Data Table","\u002Fdocs\u002Fcomponents\u002Fdata-table","docs\u002Fcomponents\u002Fdata-table",{"title":101,"path":102,"stem":103,"new":18,"type":19,"children":-1},"Date Picker","\u002Fdocs\u002Fcomponents\u002Fdate-picker","docs\u002Fcomponents\u002Fdate-picker",{"title":105,"path":106,"stem":107,"new":18,"type":19,"children":-1},"Dialog","\u002Fdocs\u002Fcomponents\u002Fdialog","docs\u002Fcomponents\u002Fdialog",{"title":109,"path":110,"stem":111,"new":18,"type":19,"children":-1},"Drawer","\u002Fdocs\u002Fcomponents\u002Fdrawer","docs\u002Fcomponents\u002Fdrawer",{"title":113,"path":114,"stem":115,"new":18,"type":19,"children":-1},"Dropdown Menu","\u002Fdocs\u002Fcomponents\u002Fdropdown-menu","docs\u002Fcomponents\u002Fdropdown-menu",{"title":117,"path":118,"stem":119,"new":18,"type":19,"children":-1},"Empty","\u002Fdocs\u002Fcomponents\u002Fempty","docs\u002Fcomponents\u002Fempty",{"title":121,"path":122,"stem":123,"new":18,"type":19,"children":-1},"Field","\u002Fdocs\u002Fcomponents\u002Ffield","docs\u002Fcomponents\u002Ffield",{"title":125,"path":126,"stem":127,"new":18,"type":19,"children":-1},"Form","\u002Fdocs\u002Fcomponents\u002Fform","docs\u002Fcomponents\u002Fform",{"title":129,"path":130,"stem":131,"new":18,"type":19,"children":-1},"Hover Card","\u002Fdocs\u002Fcomponents\u002Fhover-card","docs\u002Fcomponents\u002Fhover-card",{"title":133,"path":134,"stem":135,"new":18,"type":19,"children":-1},"Input","\u002Fdocs\u002Fcomponents\u002Finput","docs\u002Fcomponents\u002Finput",{"title":137,"path":138,"stem":139,"new":18,"type":19,"children":-1},"Input Group","\u002Fdocs\u002Fcomponents\u002Finput-group","docs\u002Fcomponents\u002Finput-group",{"title":141,"path":142,"stem":143,"new":18,"type":19,"children":-1},"Input OTP","\u002Fdocs\u002Fcomponents\u002Finput-otp","docs\u002Fcomponents\u002Finput-otp",{"title":145,"path":146,"stem":147,"new":18,"type":19,"children":-1},"Item","\u002Fdocs\u002Fcomponents\u002Fitem","docs\u002Fcomponents\u002Fitem",{"title":149,"path":150,"stem":151,"new":18,"type":19,"children":-1},"Kbd","\u002Fdocs\u002Fcomponents\u002Fkbd","docs\u002Fcomponents\u002Fkbd",{"title":153,"path":154,"stem":155,"new":18,"type":19,"children":-1},"Label","\u002Fdocs\u002Fcomponents\u002Flabel","docs\u002Fcomponents\u002Flabel",{"title":157,"path":158,"stem":159,"new":18,"type":19,"children":-1},"Marker","\u002Fdocs\u002Fcomponents\u002Fmarker","docs\u002Fcomponents\u002Fmarker",{"title":161,"path":162,"stem":163,"new":18,"type":19,"children":-1},"Menubar","\u002Fdocs\u002Fcomponents\u002Fmenubar","docs\u002Fcomponents\u002Fmenubar",{"title":165,"path":166,"stem":167,"new":18,"type":19,"children":-1},"Message","\u002Fdocs\u002Fcomponents\u002Fmessage","docs\u002Fcomponents\u002Fmessage",{"title":169,"path":170,"stem":171,"new":18,"type":19,"children":-1},"Message Scroller","\u002Fdocs\u002Fcomponents\u002Fmessage-scroller","docs\u002Fcomponents\u002Fmessage-scroller",{"title":173,"path":174,"stem":175,"new":18,"type":19,"children":-1},"Native Select","\u002Fdocs\u002Fcomponents\u002Fnative-select","docs\u002Fcomponents\u002Fnative-select",{"title":177,"path":178,"stem":179,"new":18,"type":19,"children":-1},"Navigation Menu","\u002Fdocs\u002Fcomponents\u002Fnavigation-menu","docs\u002Fcomponents\u002Fnavigation-menu",{"title":181,"path":182,"stem":183,"new":18,"type":19,"children":-1},"Number Field","\u002Fdocs\u002Fcomponents\u002Fnumber-field","docs\u002Fcomponents\u002Fnumber-field",{"title":185,"path":186,"stem":187,"new":18,"type":19,"children":-1},"Pagination","\u002Fdocs\u002Fcomponents\u002Fpagination","docs\u002Fcomponents\u002Fpagination",{"title":189,"path":190,"stem":191,"new":18,"type":19,"children":-1},"Pin Input","\u002Fdocs\u002Fcomponents\u002Fpin-input","docs\u002Fcomponents\u002Fpin-input",{"title":193,"path":194,"stem":195,"new":18,"type":19,"children":-1},"Popover","\u002Fdocs\u002Fcomponents\u002Fpopover","docs\u002Fcomponents\u002Fpopover",{"title":197,"path":198,"stem":199,"new":18,"type":19,"children":-1},"Progress","\u002Fdocs\u002Fcomponents\u002Fprogress","docs\u002Fcomponents\u002Fprogress",{"title":201,"path":202,"stem":203,"new":204,"type":19,"children":-1},"Questionnaire","\u002Fdocs\u002Fcomponents\u002Fquestionnaire","docs\u002Fcomponents\u002Fquestionnaire",true,{"title":206,"path":207,"stem":208,"new":18,"type":19,"children":-1},"Radio Group","\u002Fdocs\u002Fcomponents\u002Fradio-group","docs\u002Fcomponents\u002Fradio-group",{"title":210,"path":211,"stem":212,"new":18,"type":19,"children":-1},"Range Calendar","\u002Fdocs\u002Fcomponents\u002Frange-calendar","docs\u002Fcomponents\u002Frange-calendar",{"title":214,"path":215,"stem":216,"new":18,"type":19,"children":-1},"Resizable","\u002Fdocs\u002Fcomponents\u002Fresizable","docs\u002Fcomponents\u002Fresizable",{"title":218,"path":219,"stem":220,"new":18,"type":19,"children":-1},"Scroll Area","\u002Fdocs\u002Fcomponents\u002Fscroll-area","docs\u002Fcomponents\u002Fscroll-area",{"title":222,"path":223,"stem":224,"new":18,"type":19,"children":-1},"Select","\u002Fdocs\u002Fcomponents\u002Fselect","docs\u002Fcomponents\u002Fselect",{"title":226,"path":227,"stem":228,"new":18,"type":19,"children":-1},"Separator","\u002Fdocs\u002Fcomponents\u002Fseparator","docs\u002Fcomponents\u002Fseparator",{"title":230,"path":231,"stem":232,"new":18,"type":19,"children":-1},"Sheet","\u002Fdocs\u002Fcomponents\u002Fsheet","docs\u002Fcomponents\u002Fsheet",{"title":234,"path":235,"stem":236,"new":18,"type":19,"children":-1},"Sidebar","\u002Fdocs\u002Fcomponents\u002Fsidebar","docs\u002Fcomponents\u002Fsidebar",{"title":238,"path":239,"stem":240,"new":18,"type":19,"children":-1},"Skeleton","\u002Fdocs\u002Fcomponents\u002Fskeleton","docs\u002Fcomponents\u002Fskeleton",{"title":242,"path":243,"stem":244,"new":18,"type":19,"children":-1},"Slider","\u002Fdocs\u002Fcomponents\u002Fslider","docs\u002Fcomponents\u002Fslider",{"title":246,"path":247,"stem":248,"new":18,"type":19,"children":-1},"Sonner","\u002Fdocs\u002Fcomponents\u002Fsonner","docs\u002Fcomponents\u002Fsonner",{"title":250,"path":251,"stem":252,"new":18,"type":19,"children":-1},"Spinner","\u002Fdocs\u002Fcomponents\u002Fspinner","docs\u002Fcomponents\u002Fspinner",{"title":254,"path":255,"stem":256,"new":18,"type":19,"children":-1},"Stepper","\u002Fdocs\u002Fcomponents\u002Fstepper","docs\u002Fcomponents\u002Fstepper",{"title":258,"path":259,"stem":260,"new":18,"type":19,"children":-1},"Switch","\u002Fdocs\u002Fcomponents\u002Fswitch","docs\u002Fcomponents\u002Fswitch",{"title":262,"path":263,"stem":264,"new":18,"type":19,"children":-1},"Table","\u002Fdocs\u002Fcomponents\u002Ftable","docs\u002Fcomponents\u002Ftable",{"title":266,"path":267,"stem":268,"new":18,"type":19,"children":-1},"Tabs","\u002Fdocs\u002Fcomponents\u002Ftabs","docs\u002Fcomponents\u002Ftabs",{"title":270,"path":271,"stem":272,"new":18,"type":19,"children":-1},"Tags Input","\u002Fdocs\u002Fcomponents\u002Ftags-input","docs\u002Fcomponents\u002Ftags-input",{"title":274,"path":275,"stem":276,"new":18,"type":19,"children":-1},"Textarea","\u002Fdocs\u002Fcomponents\u002Ftextarea","docs\u002Fcomponents\u002Ftextarea",{"title":278,"path":279,"stem":280,"new":18,"type":19,"children":-1},"Toast","\u002Fdocs\u002Fcomponents\u002Ftoast","docs\u002Fcomponents\u002Ftoast",{"title":282,"path":283,"stem":284,"new":18,"type":19,"children":-1},"Toggle","\u002Fdocs\u002Fcomponents\u002Ftoggle","docs\u002Fcomponents\u002Ftoggle",{"title":286,"path":287,"stem":288,"new":18,"type":19,"children":-1},"Toggle Group","\u002Fdocs\u002Fcomponents\u002Ftoggle-group","docs\u002Fcomponents\u002Ftoggle-group",{"title":290,"path":291,"stem":292,"new":18,"type":19,"children":-1},"Tooltip","\u002Fdocs\u002Fcomponents\u002Ftooltip","docs\u002Fcomponents\u002Ftooltip",{"title":294,"path":295,"stem":296,"new":18,"type":19,"children":-1},"Typography","\u002Fdocs\u002Fcomponents\u002Ftypography","docs\u002Fcomponents\u002Ftypography","group",{"title":299,"path":300,"stem":301,"children":302,"new":18,"type":297},"Installation","\u002Fdocs\u002Finstallation","docs\u002F02.installation",[303,308,312,316,320],{"title":304,"path":305,"stem":306,"new":18,"type":307,"children":-1},"Vite","\u002Fdocs\u002Finstallation\u002Fvite","docs\u002Finstallation\u002F01.vite","page",{"title":309,"path":310,"stem":311,"new":18,"type":307,"children":-1},"Nuxt","\u002Fdocs\u002Finstallation\u002Fnuxt","docs\u002Finstallation\u002F02.nuxt",{"title":313,"path":314,"stem":315,"new":18,"type":307,"children":-1},"Astro","\u002Fdocs\u002Finstallation\u002Fastro","docs\u002Finstallation\u002F03.astro",{"title":317,"path":318,"stem":319,"new":18,"type":307,"children":-1},"Laravel","\u002Fdocs\u002Finstallation\u002Flaravel","docs\u002Finstallation\u002F04.laravel",{"title":321,"path":322,"stem":323,"new":18,"type":307,"children":-1},"Manual Installation","\u002Fdocs\u002Finstallation\u002Fmanual","docs\u002Finstallation\u002F05.manual",{"title":325,"path":326,"stem":327,"children":328,"new":18,"type":297},"Dark Mode","\u002Fdocs\u002Fdark-mode","docs\u002F05.dark-mode",[329,332,335,339],{"title":304,"path":330,"stem":331,"new":18,"type":307,"children":-1},"\u002Fdocs\u002Fdark-mode\u002Fvite","docs\u002Fdark-mode\u002F01.vite",{"title":309,"path":333,"stem":334,"new":18,"type":307,"children":-1},"\u002Fdocs\u002Fdark-mode\u002Fnuxt","docs\u002Fdark-mode\u002F02.nuxt",{"title":336,"path":337,"stem":338,"new":18,"type":307,"children":-1},"Vitepress","\u002Fdocs\u002Fdark-mode\u002Fvitepress","docs\u002Fdark-mode\u002F03.vitepress",{"title":313,"path":340,"stem":341,"new":18,"type":307,"children":-1},"\u002Fdocs\u002Fdark-mode\u002Fastro","docs\u002Fdark-mode\u002F04.astro",{"title":343,"path":344,"stem":345,"children":346,"new":18,"type":297},"Directory","\u002Fdocs\u002Fdirectory","docs\u002Fdirectory\u002Findex",[347],{"title":343,"path":344,"stem":345,"new":18,"type":307,"children":-1},{"title":349,"path":350,"stem":351,"children":352,"new":18,"type":297},"Forms","\u002Fdocs\u002Fforms","docs\u002Fforms",[353,357,361],{"title":354,"path":355,"stem":356,"new":18,"type":307,"children":-1},"VeeValidate","\u002Fdocs\u002Fforms\u002Fvee-validate","docs\u002Fforms\u002F01.vee-validate",{"title":358,"path":359,"stem":360,"new":18,"type":307,"children":-1},"TanStack Form","\u002Fdocs\u002Fforms\u002Ftanstack-form","docs\u002Fforms\u002F02.tanstack-form",{"title":362,"path":363,"stem":364,"new":18,"type":307,"children":-1},"Formisch","\u002Fdocs\u002Fforms\u002Fformisch","docs\u002Fforms\u002F03.formisch",{"title":366,"path":367,"stem":368,"children":369,"new":18,"type":297},"Registry","\u002Fdocs\u002Fregistry","docs\u002Fregistry\u002Findex",[370,371,375,379,383,387],{"title":366,"path":367,"stem":368,"new":18,"type":307,"children":-1},{"title":372,"path":373,"stem":374,"new":18,"type":307,"children":-1},"Examples","\u002Fdocs\u002Fregistry\u002Fexamples","docs\u002Fregistry\u002Fexamples",{"title":376,"path":377,"stem":378,"new":18,"type":307,"children":-1},"FAQ","\u002Fdocs\u002Fregistry\u002Ffaq","docs\u002Fregistry\u002Ffaq",{"title":380,"path":381,"stem":382,"new":18,"type":307,"children":-1},"Getting Started","\u002Fdocs\u002Fregistry\u002Fgetting-started","docs\u002Fregistry\u002Fgetting-started",{"title":384,"path":385,"stem":386,"new":18,"type":307,"children":-1},"registry-item.json","\u002Fdocs\u002Fregistry\u002Fregistry-item-json","docs\u002Fregistry\u002Fregistry-item-json",{"title":388,"path":389,"stem":390,"new":18,"type":307,"children":-1},"registry.json","\u002Fdocs\u002Fregistry\u002Fregistry-json","docs\u002Fregistry\u002Fregistry-json",{"title":392,"path":393,"stem":394,"children":395,"new":18,"type":297},"Utilities","\u002Fdocs\u002Futilities","docs\u002Futilities\u002Findex",[396,397,401],{"title":392,"path":393,"stem":394,"new":18,"type":307,"children":-1},{"title":398,"path":399,"stem":400,"new":18,"type":307,"children":-1},"scroll-fade","\u002Fdocs\u002Futilities\u002Fscroll-fade","docs\u002Futilities\u002Fscroll-fade",{"title":402,"path":403,"stem":404,"new":18,"type":307,"children":-1},"shimmer","\u002Fdocs\u002Futilities\u002Fshimmer","docs\u002Futilities\u002Fshimmer",{"path":6,"stem":7,"title":406,"type":297,"children":407},"Get Started",[408,412,419,423,427,433,437,441,445,449,453,457,461,465],{"title":409,"path":410,"stem":411,"new":18,"type":307,"children":-1},"Introduction","\u002Fdocs\u002Fintroduction","docs\u002F01.introduction",{"title":299,"path":300,"stem":301,"children":413,"new":18,"type":297},[414,415,416,417,418],{"title":304,"path":305,"stem":306,"new":18,"type":307,"children":-1},{"title":309,"path":310,"stem":311,"new":18,"type":307,"children":-1},{"title":313,"path":314,"stem":315,"new":18,"type":307,"children":-1},{"title":317,"path":318,"stem":319,"new":18,"type":307,"children":-1},{"title":321,"path":322,"stem":323,"new":18,"type":307,"children":-1},{"title":420,"path":421,"stem":422,"new":18,"type":307,"children":-1},"components.json","\u002Fdocs\u002Fcomponents-json","docs\u002F03.components-json",{"title":424,"path":425,"stem":426,"new":18,"type":307,"children":-1},"Theming","\u002Fdocs\u002Ftheming","docs\u002F04.theming",{"title":325,"path":326,"stem":327,"children":428,"new":18,"type":297},[429,430,431,432],{"title":304,"path":330,"stem":331,"new":18,"type":307,"children":-1},{"title":309,"path":333,"stem":334,"new":18,"type":307,"children":-1},{"title":336,"path":337,"stem":338,"new":18,"type":307,"children":-1},{"title":313,"path":340,"stem":341,"new":18,"type":307,"children":-1},{"title":434,"path":435,"stem":436,"new":18,"type":307,"children":-1},"CLI","\u002Fdocs\u002Fcli","docs\u002F06.cli",{"title":438,"path":439,"stem":440,"new":18,"type":307,"children":-1},"JavaScript","\u002Fdocs\u002Fjavascript","docs\u002F07.javascript",{"title":442,"path":443,"stem":444,"new":18,"type":307,"children":-1},"RTL","\u002Fdocs\u002Frtl","docs\u002F08.rtl",{"title":446,"path":447,"stem":448,"new":18,"type":307,"children":-1},"Figma","\u002Fdocs\u002Ffigma","docs\u002F09.figma",{"title":450,"path":451,"stem":452,"new":18,"type":307,"children":-1},"Changelog","\u002Fdocs\u002Fchangelog","docs\u002F10.changelog",{"title":454,"path":455,"stem":456,"new":18,"type":307,"children":-1},"Legacy Docs","\u002Fdocs\u002Flegacy","docs\u002F11.legacy",{"title":458,"path":459,"stem":460,"new":18,"type":307,"children":-1},"Skills","\u002Fdocs\u002Fskills","docs\u002Fskills",{"title":462,"path":463,"stem":464,"new":18,"type":307,"children":-1},"Typeset","\u002Fdocs\u002Ftypeset","docs\u002Ftypeset",{"title":392,"path":393,"stem":394,"children":466,"new":18,"type":297},[467,468,469],{"title":392,"path":393,"stem":394,"new":18,"type":307,"children":-1},{"title":398,"path":399,"stem":400,"new":18,"type":307,"children":-1},{"title":402,"path":403,"stem":404,"new":18,"type":307,"children":-1},{"repo":471},{"id":472,"name":473,"repo":474,"description":475,"createdAt":476,"updatedAt":477,"pushedAt":478,"stars":479,"watchers":479,"forks":479,"defaultBranch":480},1360880822,"v-design","v-stella\u002Fv-design","An open-source Vue design system and component registry.","2026-09-08T03:28:46Z","2026-09-09T08:39:14Z","2026-09-09T08:36:47Z",0,"dev",{"id":482,"title":49,"body":483,"description":1450,"extension":1451,"links":1452,"meta":1453,"navigation":204,"new":18,"path":50,"rawbody":1454,"seo":1455,"stem":51,"__hash__":1456},"content\u002Fdocs\u002Fcomponents\u002Fbubble.md",{"type":484,"value":485,"toc":1421},"minimark",[486,491,499,516,520,574,578,587,591,594,602,609,615,619,653,656,661,667,670,760,766,770,779,782,814,831,835,849,854,857,861,870,873,879,883,904,907,911,923,926,929,937,940,943,951,954,958,963,967,986,992,997,1003,1007,1026,1032,1036,1042,1046,1059,1062,1065,1177,1180,1183,1246,1249,1252,1352,1355,1358],[487,488],"component-preview",{"name":489,"previewClass":490},"BubbleDemo","h-auto theme-blue",[492,493,494,495,498],"p",{},"The ",[496,497,49],"code",{}," component displays framed conversational content. Use it for chat text, short structured output, quoted replies, suggestions, and reactions.",[492,500,501,502,507,508,510,511,515],{},"For full-featured chat interfaces, use the ",[503,504,505],"a",{"href":166},[496,506,165],{}," component. ",[496,509,49],{}," is intentionally scoped to the bubble surface. Place avatars, names, timestamps, metadata, and message-level actions in ",[503,512,513],{"href":166},[496,514,165],{},".",[517,518,299],"h2",{"id":519},"installation",[521,522,523,538,551],"code-tabs",{},[524,525,526,532],"tabs-list",{},[527,528,530],"tabs-trigger",{"value":529},"cli",[492,531,434],{},[527,533,535],{"value":534},"manual",[492,536,537],{},"Manual",[539,540,541],"tabs-content",{"value":529},[542,543,549],"pre",{"className":544,"code":546,"language":547,"meta":548},[545],"language-bash","npx shadcn-vue@latest add bubble\n","bash","",[496,550,546],{"__ignoreMap":548},[539,552,553],{"value":534},[554,555,556,569],"steps",{},[557,558,559],"step",{},[492,560,561,562,568],{},"Copy and paste the ",[503,563,567],{"href":564,"rel":565},"https:\u002F\u002Fgithub.com\u002Funovue\u002Fshadcn-vue\u002Ftree\u002Fdev\u002Fapps\u002Fv4\u002Fregistry\u002Fnew-york-v4\u002Fui\u002Fbubble",[566],"nofollow","GitHub source code"," into your project.",[557,570,571],{},[492,572,573],{},"Update the import paths to match your project setup.",[517,575,577],{"id":576},"usage","Usage",[542,579,585],{"className":580,"code":582,"language":583,"meta":584},[581],"language-vue","\u003Cscript setup lang=\"ts\">\nimport { Bubble, BubbleContent, BubbleReactions } from '@\u002Fcomponents\u002Fui\u002Fbubble'\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CBubble>\n    \u003CBubbleContent>\n      I checked the registry output and removed the stale route.\n    \u003C\u002FBubbleContent>\n    \u003CBubbleReactions>\n      \u003Cspan>👍\u003C\u002Fspan>\n    \u003C\u002FBubbleReactions>\n  \u003C\u002FBubble>\n\u003C\u002Ftemplate>\n","vue","showLineNumbers",[496,586,582],{"__ignoreMap":548},[517,588,590],{"id":589},"composition","Composition",[492,592,593],{},"Use the following composition to build a bubble:",[542,595,600],{"className":596,"code":598,"language":599,"meta":548},[597],"language-text","Bubble\n├── BubbleContent\n└── BubbleReactions\n","text",[496,601,598],{"__ignoreMap":548},[492,603,604,605,608],{},"Use ",[496,606,607],{},"BubbleGroup"," to group consecutive bubbles from the same sender:",[542,610,613],{"className":611,"code":612,"language":599,"meta":548},[597],"BubbleGroup\n├── Bubble\n│   └── BubbleContent\n└── Bubble\n    └── BubbleContent\n",[496,614,612],{"__ignoreMap":548},[517,616,618],{"id":617},"features","Features",[620,621,622,626,629,632,635,646],"ul",{},[623,624,625],"li",{},"Seven visual variants, from a strong primary bubble to unframed ghost content",[623,627,628],{},"Start and end alignment for sender and receiver bubbles",[623,630,631],{},"Reactions that anchor to the bubble edge with configurable side and alignment",[623,633,634],{},"Bubbles size to their content, up to 80% of the container width",[623,636,637,638,641,642,645],{},"Polymorphic content via ",[496,639,640],{},"as"," or ",[496,643,644],{},"as-child"," for link and button bubbles",[623,647,648,649,652],{},"Customizable styling through the ",[496,650,651],{},"class"," prop on every part",[517,654,372],{"id":655},"examples",[657,658,660],"h3",{"id":659},"variants","Variants",[492,662,604,663,666],{},[496,664,665],{},"variant"," to change the visual treatment of the bubble.",[487,668],{"name":669,"previewClass":490},"BubbleVariantsDemo",[671,672,673,686],"table",{},[674,675,676],"thead",{},[677,678,679,683],"tr",{},[680,681,682],"th",{},"Variant",[680,684,685],{},"Description",[687,688,689,700,710,720,730,740,750],"tbody",{},[677,690,691,697],{},[692,693,694],"td",{},[496,695,696],{},"default",[692,698,699],{},"A strong primary bubble, usually for the current user.",[677,701,702,707],{},[692,703,704],{},[496,705,706],{},"secondary",[692,708,709],{},"The standard neutral bubble for conversation content.",[677,711,712,717],{},[692,713,714],{},[496,715,716],{},"muted",[692,718,719],{},"A lower-emphasis bubble for quiet supporting content.",[677,721,722,727],{},[692,723,724],{},[496,725,726],{},"tinted",[692,728,729],{},"A subtle primary-tinted bubble.",[677,731,732,737],{},[692,733,734],{},[496,735,736],{},"outline",[692,738,739],{},"A bordered bubble for secondary or rich content.",[677,741,742,747],{},[692,743,744],{},[496,745,746],{},"ghost",[692,748,749],{},"Unframed content for assistant text or rich content.",[677,751,752,757],{},[692,753,754],{},[496,755,756],{},"destructive",[692,758,759],{},"A destructive bubble for error or failed actions.",[492,761,762,763,765],{},"A bubble sizes to its content, up to 80% of the container width. The ",[496,764,746],{}," variant removes the max-width so assistant text and rich content can span the full row.",[657,767,769],{"id":768},"alignment","Alignment",[492,771,604,772,775,776,778],{},[496,773,774],{},"align"," on ",[496,777,49],{}," to align the bubble to the start or end of the conversation.",[487,780],{"name":781,"previewClass":490},"BubbleAlignmentDemo",[671,783,784,792],{},[674,785,786],{},[677,787,788,790],{},[680,789,774],{},[680,791,685],{},[687,793,794,804],{},[677,795,796,801],{},[692,797,798],{},[496,799,800],{},"start",[692,802,803],{},"Align the bubble to the start of the conversation.",[677,805,806,811],{},[692,807,808],{},[496,809,810],{},"end",[692,812,813],{},"Align the bubble to the end of the conversation.",[492,815,816,820,821,823,824,826,827,830],{},[817,818,819],"strong",{},"Note:"," When building chat interfaces, you probably want to set ",[496,822,774],{}," on the ",[496,825,165],{}," component itself. Bubbles inside ",[496,828,829],{},"MessageContent"," automatically follow the message alignment.",[657,832,834],{"id":833},"bubble-group","Bubble Group",[492,836,604,837,839,840,842,843,845,846,848],{},[496,838,607],{}," to group consecutive bubbles from the same sender. Note the ",[496,841,774],{}," prop should be set on the ",[496,844,49],{}," component itself, not the ",[496,847,607],{}," component.",[542,850,852],{"className":851,"code":612,"language":599,"meta":548},[597],[496,853,612],{"__ignoreMap":548},[487,855],{"name":856,"previewClass":490},"BubbleGroupDemo",[657,858,860],{"id":859},"links-and-buttons","Links and Buttons",[492,862,604,863,865,866,869],{},[496,864,644],{}," to merge ",[496,867,868],{},"BubbleContent"," styling and attributes onto a link or button passed through its default slot.",[487,871],{"name":872,"previewClass":490},"BubbleLinksAndButtonsDemo",[542,874,877],{"className":875,"code":876,"language":583,"meta":584},[581],"\u003Cscript setup lang=\"ts\">\nimport { Bubble, BubbleContent } from '@\u002Fcomponents\u002Fui\u002Fbubble'\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CBubble variant=\"muted\">\n    \u003CBubbleContent as-child>\n      \u003Cbutton type=\"button\">Click here\u003C\u002Fbutton>\n    \u003C\u002FBubbleContent>\n  \u003C\u002FBubble>\n\u003C\u002Ftemplate>\n",[496,878,876],{"__ignoreMap":548},[657,880,882],{"id":881},"reactions","Reactions",[492,884,604,885,888,889,892,893,895,896,899,900,903],{},[496,886,887],{},"BubbleReactions"," for bubble reactions. You can use it to display reactions or quick action buttons. Use ",[496,890,891],{},"side"," and ",[496,894,774],{}," to position the row — ",[496,897,898],{},"side=\"top\""," anchors it to the upper edge. Reactions overlap the bubble edge, so leave vertical space between rows — the examples below use a larger ",[496,901,902],{},"gap"," for this reason.",[487,905],{"name":906,"previewClass":490},"BubbleReactionsDemo",[657,908,910],{"id":909},"show-more-collapsible","Show More \u002F Collapsible",[492,912,913,914,918,919,922],{},"Long bubble content can be composed with ",[503,915,916],{"href":82},[496,917,81],{}," to allow for a show more or show less interaction. Use the ",[496,920,921],{},"CollapsibleTrigger"," component to trigger the collapsible content.",[487,924],{"name":925,"previewClass":490},"BubbleCollapsibleDemo",[657,927,290],{"id":928},"tooltip",[492,930,931,932,936],{},"Wrap a bubble in a ",[503,933,934],{"href":291},[496,935,290],{}," to reveal metadata on hover, such as when a message was read.",[487,938],{"name":939,"previewClass":490},"BubbleTooltipDemo",[657,941,193],{"id":942},"popover",[492,944,945,946,950],{},"Pair a bubble with a ",[503,947,948],{"href":194},[496,949,193],{}," to surface more information on demand, such as the full error message for a failed action.",[487,952],{"name":953,"previewClass":490},"BubblePopoverDemo",[517,955,957],{"id":956},"accessibility","Accessibility",[492,959,960,962],{},[496,961,49],{}," renders the presentational message surface. Keep conversation-level semantics on the surrounding container and follow the guidelines below.",[657,964,966],{"id":965},"labeling-reactions","Labeling Reactions",[492,968,969,970,973,974,977,978,981,982,985],{},"Reactions render as a row of emoji. A screen reader reads each glyph with no context, and counters like ",[496,971,972],{},"+8"," are announced as \"plus eight\". Group the row as a single image with a descriptive ",[496,975,976],{},"aria-label"," so it announces once. ",[496,979,980],{},"role=\"img\""," also hides the individual emoji from assistive tech, so no ",[496,983,984],{},"aria-hidden"," is needed.",[542,987,990],{"className":988,"code":989,"language":583,"meta":584},[581],"\u003CBubbleReactions role=\"img\" aria-label=\"Reactions: thumbs up, fire, and 8 more\">\n  \u003Cspan>👍\u003C\u002Fspan>\n  \u003Cspan>🔥\u003C\u002Fspan>\n  \u003Cspan>+8\u003C\u002Fspan>\n\u003C\u002FBubbleReactions>\n",[496,991,989],{"__ignoreMap":548},[492,993,994,995,515],{},"When reactions are interactive, render buttons instead and give icon-only buttons an ",[496,996,976],{},[542,998,1001],{"className":999,"code":1000,"language":583,"meta":584},[581],"\u003CBubbleReactions>\n  \u003CButton aria-label=\"Thumbs up\" variant=\"secondary\" size=\"icon-xs\">\n    \u003CThumbsUpIcon \u002F>\n  \u003C\u002FButton>\n\u003C\u002FBubbleReactions>\n",[496,1002,1000],{"__ignoreMap":548},[657,1004,1006],{"id":1005},"interactive-bubbles","Interactive Bubbles",[492,1008,1009,1010,641,1013,1016,1017,1019,1020,1022,1023,1025],{},"When a bubble is clickable, pass a real ",[496,1011,1012],{},"\u003Cbutton>",[496,1014,1015],{},"\u003Ca>"," through ",[496,1018,868],{}," with ",[496,1021,644],{}," so it is focusable and exposes the correct role. ",[496,1024,868],{}," ships a visible focus ring for interactive elements, and the accessible name comes from the bubble text. No extra label is needed.",[542,1027,1030],{"className":1028,"code":1029,"language":583,"meta":584},[581],"\u003CBubble variant=\"muted\" align=\"end\">\n  \u003CBubbleContent as-child>\n    \u003Cbutton type=\"button\" @click=\"onReply\">\n      I forgot my password\n    \u003C\u002Fbutton>\n  \u003C\u002FBubbleContent>\n\u003C\u002FBubble>\n",[496,1031,1029],{"__ignoreMap":548},[657,1033,1035],{"id":1034},"meaning-beyond-color","Meaning Beyond Color",[492,1037,1038,1039,1041],{},"Bubble variants signal role and tone with color. Pair them with text, alignment, or icons so meaning is not conveyed by color alone. For a ",[496,1040,756],{}," bubble, keep the error context in the message text rather than relying on the color treatment.",[517,1043,1045],{"id":1044},"api-reference","API Reference",[492,1047,1048,1049,1052,1053,1055,1056,1058],{},"All Bubble parts render a ",[496,1050,1051],{},"\u003Cdiv>"," by default. Use ",[496,1054,640],{}," to choose another element, or ",[496,1057,644],{}," to merge the component's attributes and styles onto the single element or component in its default slot.",[657,1060,49],{"id":1061},"bubble",[492,1063,1064],{},"The root bubble wrapper.",[671,1066,1067,1082],{},[674,1068,1069],{},[677,1070,1071,1074,1077,1080],{},[680,1072,1073],{},"Prop",[680,1075,1076],{},"Type",[680,1078,1079],{},"Default",[680,1081,685],{},[687,1083,1084,1103,1122,1141,1160],{},[677,1085,1086,1090,1095,1100],{},[692,1087,1088],{},[496,1089,665],{},[692,1091,1092],{},[496,1093,1094],{},"\"default\" | \"secondary\" | \"muted\" | \"tinted\" | \"outline\" | \"ghost\" | \"destructive\"",[692,1096,1097],{},[496,1098,1099],{},"\"default\"",[692,1101,1102],{},"The bubble visual treatment.",[677,1104,1105,1109,1114,1119],{},[692,1106,1107],{},[496,1108,774],{},[692,1110,1111],{},[496,1112,1113],{},"\"start\" | \"end\"",[692,1115,1116],{},[496,1117,1118],{},"\"start\"",[692,1120,1121],{},"The inline alignment of the bubble.",[677,1123,1124,1128,1133,1138],{},[692,1125,1126],{},[496,1127,640],{},[692,1129,1130],{},[496,1131,1132],{},"string | Component",[692,1134,1135],{},[496,1136,1137],{},"\"div\"",[692,1139,1140],{},"The element or component to render.",[677,1142,1143,1147,1152,1157],{},[692,1144,1145],{},[496,1146,644],{},[692,1148,1149],{},[496,1150,1151],{},"boolean",[692,1153,1154],{},[496,1155,1156],{},"false",[692,1158,1159],{},"Render the default slot as the root and merge props onto it.",[677,1161,1162,1166,1171,1174],{},[692,1163,1164],{},[496,1165,651],{},[692,1167,1168],{},[496,1169,1170],{},"string",[692,1172,1173],{},"-",[692,1175,1176],{},"Additional classes to apply to the root element.",[657,1178,868],{"id":1179},"bubblecontent",[492,1181,1182],{},"The bubble content wrapper.",[671,1184,1185,1197],{},[674,1186,1187],{},[677,1188,1189,1191,1193,1195],{},[680,1190,1073],{},[680,1192,1076],{},[680,1194,1079],{},[680,1196,685],{},[687,1198,1199,1215,1231],{},[677,1200,1201,1205,1209,1213],{},[692,1202,1203],{},[496,1204,640],{},[692,1206,1207],{},[496,1208,1132],{},[692,1210,1211],{},[496,1212,1137],{},[692,1214,1140],{},[677,1216,1217,1221,1225,1229],{},[692,1218,1219],{},[496,1220,644],{},[692,1222,1223],{},[496,1224,1151],{},[692,1226,1227],{},[496,1228,1156],{},[692,1230,1159],{},[677,1232,1233,1237,1241,1243],{},[692,1234,1235],{},[496,1236,651],{},[692,1238,1239],{},[496,1240,1170],{},[692,1242,1173],{},[692,1244,1245],{},"Additional classes to apply to the content element.",[657,1247,887],{"id":1248},"bubblereactions",[492,1250,1251],{},"Displays overlapped reactions for a bubble.",[671,1253,1254,1266],{},[674,1255,1256],{},[677,1257,1258,1260,1262,1264],{},[680,1259,1073],{},[680,1261,1076],{},[680,1263,1079],{},[680,1265,685],{},[687,1267,1268,1287,1305,1321,1337],{},[677,1269,1270,1274,1279,1284],{},[692,1271,1272],{},[496,1273,891],{},[692,1275,1276],{},[496,1277,1278],{},"\"top\" | \"bottom\"",[692,1280,1281],{},[496,1282,1283],{},"\"bottom\"",[692,1285,1286],{},"The side of the bubble to anchor the reactions.",[677,1288,1289,1293,1297,1302],{},[692,1290,1291],{},[496,1292,774],{},[692,1294,1295],{},[496,1296,1113],{},[692,1298,1299],{},[496,1300,1301],{},"\"end\"",[692,1303,1304],{},"The inline alignment of the reactions.",[677,1306,1307,1311,1315,1319],{},[692,1308,1309],{},[496,1310,640],{},[692,1312,1313],{},[496,1314,1132],{},[692,1316,1317],{},[496,1318,1137],{},[692,1320,1140],{},[677,1322,1323,1327,1331,1335],{},[692,1324,1325],{},[496,1326,644],{},[692,1328,1329],{},[496,1330,1151],{},[692,1332,1333],{},[496,1334,1156],{},[692,1336,1159],{},[677,1338,1339,1343,1347,1349],{},[692,1340,1341],{},[496,1342,651],{},[692,1344,1345],{},[496,1346,1170],{},[692,1348,1173],{},[692,1350,1351],{},"Additional classes to apply to the reaction row.",[657,1353,607],{"id":1354},"bubblegroup",[492,1356,1357],{},"Groups consecutive bubbles from the same sender.",[671,1359,1360,1372],{},[674,1361,1362],{},[677,1363,1364,1366,1368,1370],{},[680,1365,1073],{},[680,1367,1076],{},[680,1369,1079],{},[680,1371,685],{},[687,1373,1374,1390,1406],{},[677,1375,1376,1380,1384,1388],{},[692,1377,1378],{},[496,1379,640],{},[692,1381,1382],{},[496,1383,1132],{},[692,1385,1386],{},[496,1387,1137],{},[692,1389,1140],{},[677,1391,1392,1396,1400,1404],{},[692,1393,1394],{},[496,1395,644],{},[692,1397,1398],{},[496,1399,1151],{},[692,1401,1402],{},[496,1403,1156],{},[692,1405,1159],{},[677,1407,1408,1412,1416,1418],{},[692,1409,1410],{},[496,1411,651],{},[692,1413,1414],{},[496,1415,1170],{},[692,1417,1173],{},[692,1419,1420],{},"Additional classes to apply to the group root.",{"title":548,"searchDepth":1422,"depth":1422,"links":1423},2,[1424,1425,1426,1427,1428,1439,1444],{"id":519,"depth":1422,"text":299},{"id":576,"depth":1422,"text":577},{"id":589,"depth":1422,"text":590},{"id":617,"depth":1422,"text":618},{"id":655,"depth":1422,"text":372,"children":1429},[1430,1432,1433,1434,1435,1436,1437,1438],{"id":659,"depth":1431,"text":660},3,{"id":768,"depth":1431,"text":769},{"id":833,"depth":1431,"text":834},{"id":859,"depth":1431,"text":860},{"id":881,"depth":1431,"text":882},{"id":909,"depth":1431,"text":910},{"id":928,"depth":1431,"text":290},{"id":942,"depth":1431,"text":193},{"id":956,"depth":1422,"text":957,"children":1440},[1441,1442,1443],{"id":965,"depth":1431,"text":966},{"id":1005,"depth":1431,"text":1006},{"id":1034,"depth":1431,"text":1035},{"id":1044,"depth":1422,"text":1045,"children":1445},[1446,1447,1448,1449],{"id":1061,"depth":1431,"text":49},{"id":1179,"depth":1431,"text":868},{"id":1248,"depth":1431,"text":887},{"id":1354,"depth":1431,"text":607},"Displays conversational content in a message bubble. Supports variants, alignment, grouping, reactions, and collapsible content.","md",null,{"component":204},"---\ntitle: Bubble\ndescription: Displays conversational content in a message bubble. Supports variants, alignment, grouping, reactions, and collapsible content.\ncomponent: true\n---\n\n::component-preview\n---\nname: BubbleDemo\npreviewClass: h-auto theme-blue\n---\n::\n\nThe `Bubble` component displays framed conversational content. Use it for chat text, short structured output, quoted replies, suggestions, and reactions.\n\nFor full-featured chat interfaces, use the [`Message`](\u002Fdocs\u002Fcomponents\u002Fmessage) component. `Bubble` is intentionally scoped to the bubble surface. Place avatars, names, timestamps, metadata, and message-level actions in [`Message`](\u002Fdocs\u002Fcomponents\u002Fmessage).\n\n\n## Installation\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 bubble\n```\n\n::\n\n::::tabs-content{value=\"manual\"}\n  :::steps\n    ::step\n    Copy and paste the [GitHub source code](https:\u002F\u002Fgithub.com\u002Funovue\u002Fshadcn-vue\u002Ftree\u002Fdev\u002Fapps\u002Fv4\u002Fregistry\u002Fnew-york-v4\u002Fui\u002Fbubble) 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 { Bubble, BubbleContent, BubbleReactions } from '@\u002Fcomponents\u002Fui\u002Fbubble'\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CBubble>\n    \u003CBubbleContent>\n      I checked the registry output and removed the stale route.\n    \u003C\u002FBubbleContent>\n    \u003CBubbleReactions>\n      \u003Cspan>👍\u003C\u002Fspan>\n    \u003C\u002FBubbleReactions>\n  \u003C\u002FBubble>\n\u003C\u002Ftemplate>\n```\n\n## Composition\n\nUse the following composition to build a bubble:\n\n```text\nBubble\n├── BubbleContent\n└── BubbleReactions\n```\n\nUse `BubbleGroup` to group consecutive bubbles from the same sender:\n\n```text\nBubbleGroup\n├── Bubble\n│   └── BubbleContent\n└── Bubble\n    └── BubbleContent\n```\n\n## Features\n\n- Seven visual variants, from a strong primary bubble to unframed ghost content\n- Start and end alignment for sender and receiver bubbles\n- Reactions that anchor to the bubble edge with configurable side and alignment\n- Bubbles size to their content, up to 80% of the container width\n- Polymorphic content via `as` or `as-child` for link and button bubbles\n- Customizable styling through the `class` prop on every part\n\n## Examples\n\n### Variants\n\nUse `variant` to change the visual treatment of the bubble.\n\n::component-preview\n---\nname: BubbleVariantsDemo\npreviewClass: h-auto theme-blue\n---\n::\n\n| Variant       | Description                                            |\n| ------------- | ------------------------------------------------------ |\n| `default`     | A strong primary bubble, usually for the current user. |\n| `secondary`   | The standard neutral bubble for conversation content.  |\n| `muted`       | A lower-emphasis bubble for quiet supporting content.  |\n| `tinted`      | A subtle primary-tinted bubble.                        |\n| `outline`     | A bordered bubble for secondary or rich content.       |\n| `ghost`       | Unframed content for assistant text or rich content.   |\n| `destructive` | A destructive bubble for error or failed actions.      |\n\nA bubble sizes to its content, up to 80% of the container width. The `ghost` variant removes the max-width so assistant text and rich content can span the full row.\n\n### Alignment\n\nUse `align` on `Bubble` to align the bubble to the start or end of the conversation.\n\n::component-preview\n---\nname: BubbleAlignmentDemo\npreviewClass: h-auto theme-blue\n---\n::\n\n| align   | Description                                        |\n| ------- | -------------------------------------------------- |\n| `start` | Align the bubble to the start of the conversation. |\n| `end`   | Align the bubble to the end of the conversation.   |\n\n**Note:** When building chat interfaces, you probably want to set `align` on the `Message` component itself. Bubbles inside `MessageContent` automatically follow the message alignment.\n\n### Bubble Group\n\nUse `BubbleGroup` to group consecutive bubbles from the same sender. Note the `align` prop should be set on the `Bubble` component itself, not the `BubbleGroup` component.\n\n```text\nBubbleGroup\n├── Bubble\n│   └── BubbleContent\n└── Bubble\n    └── BubbleContent\n```\n\n::component-preview\n---\nname: BubbleGroupDemo\npreviewClass: h-auto theme-blue\n---\n::\n\n### Links and Buttons\n\nUse `as-child` to merge `BubbleContent` styling and attributes onto a link or button passed through its default slot.\n\n::component-preview\n---\nname: BubbleLinksAndButtonsDemo\npreviewClass: h-auto theme-blue\n---\n::\n\n```vue showLineNumbers\n\u003Cscript setup lang=\"ts\">\nimport { Bubble, BubbleContent } from '@\u002Fcomponents\u002Fui\u002Fbubble'\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CBubble variant=\"muted\">\n    \u003CBubbleContent as-child>\n      \u003Cbutton type=\"button\">Click here\u003C\u002Fbutton>\n    \u003C\u002FBubbleContent>\n  \u003C\u002FBubble>\n\u003C\u002Ftemplate>\n```\n\n### Reactions\n\nUse `BubbleReactions` for bubble reactions. You can use it to display reactions or quick action buttons. Use `side` and `align` to position the row — `side=\"top\"` anchors it to the upper edge. Reactions overlap the bubble edge, so leave vertical space between rows — the examples below use a larger `gap` for this reason.\n\n::component-preview\n---\nname: BubbleReactionsDemo\npreviewClass: h-auto theme-blue\n---\n::\n\n### Show More \u002F Collapsible\n\nLong bubble content can be composed with [`Collapsible`](\u002Fdocs\u002Fcomponents\u002Fcollapsible) to allow for a show more or show less interaction. Use the `CollapsibleTrigger` component to trigger the collapsible content.\n\n::component-preview\n---\nname: BubbleCollapsibleDemo\npreviewClass: h-auto theme-blue\n---\n::\n\n### Tooltip\n\nWrap a bubble in a [`Tooltip`](\u002Fdocs\u002Fcomponents\u002Ftooltip) to reveal metadata on hover, such as when a message was read.\n\n::component-preview\n---\nname: BubbleTooltipDemo\npreviewClass: h-auto theme-blue\n---\n::\n\n### Popover\n\nPair a bubble with a [`Popover`](\u002Fdocs\u002Fcomponents\u002Fpopover) to surface more information on demand, such as the full error message for a failed action.\n\n::component-preview\n---\nname: BubblePopoverDemo\npreviewClass: h-auto theme-blue\n---\n::\n\n## Accessibility\n\n`Bubble` renders the presentational message surface. Keep conversation-level semantics on the surrounding container and follow the guidelines below.\n\n### Labeling Reactions\n\nReactions render as a row of emoji. A screen reader reads each glyph with no context, and counters like `+8` are announced as \"plus eight\". Group the row as a single image with a descriptive `aria-label` so it announces once. `role=\"img\"` also hides the individual emoji from assistive tech, so no `aria-hidden` is needed.\n\n```vue showLineNumbers\n\u003CBubbleReactions role=\"img\" aria-label=\"Reactions: thumbs up, fire, and 8 more\">\n  \u003Cspan>👍\u003C\u002Fspan>\n  \u003Cspan>🔥\u003C\u002Fspan>\n  \u003Cspan>+8\u003C\u002Fspan>\n\u003C\u002FBubbleReactions>\n```\n\nWhen reactions are interactive, render buttons instead and give icon-only buttons an `aria-label`.\n\n```vue showLineNumbers\n\u003CBubbleReactions>\n  \u003CButton aria-label=\"Thumbs up\" variant=\"secondary\" size=\"icon-xs\">\n    \u003CThumbsUpIcon \u002F>\n  \u003C\u002FButton>\n\u003C\u002FBubbleReactions>\n```\n\n### Interactive Bubbles\n\nWhen a bubble is clickable, pass a real `\u003Cbutton>` or `\u003Ca>` through `BubbleContent` with `as-child` so it is focusable and exposes the correct role. `BubbleContent` ships a visible focus ring for interactive elements, and the accessible name comes from the bubble text. No extra label is needed.\n\n```vue showLineNumbers\n\u003CBubble variant=\"muted\" align=\"end\">\n  \u003CBubbleContent as-child>\n    \u003Cbutton type=\"button\" @click=\"onReply\">\n      I forgot my password\n    \u003C\u002Fbutton>\n  \u003C\u002FBubbleContent>\n\u003C\u002FBubble>\n```\n\n### Meaning Beyond Color\n\nBubble variants signal role and tone with color. Pair them with text, alignment, or icons so meaning is not conveyed by color alone. For a `destructive` bubble, keep the error context in the message text rather than relying on the color treatment.\n\n## API Reference\n\nAll Bubble parts render a `\u003Cdiv>` by default. Use `as` to choose another element, or `as-child` to merge the component's attributes and styles onto the single element or component in its default slot.\n\n### Bubble\n\nThe root bubble wrapper.\n\n| Prop       | Type                                                                                       | Default     | Description                                                     |\n| ---------- | ------------------------------------------------------------------------------------------ | ----------- | --------------------------------------------------------------- |\n| `variant`  | `\"default\" \\| \"secondary\" \\| \"muted\" \\| \"tinted\" \\| \"outline\" \\| \"ghost\" \\| \"destructive\"` | `\"default\"` | The bubble visual treatment.                                    |\n| `align`    | `\"start\" \\| \"end\"`                                                                         | `\"start\"`   | The inline alignment of the bubble.                             |\n| `as`       | `string \\| Component`                                                                       | `\"div\"`     | The element or component to render.                             |\n| `as-child` | `boolean`                                                                                    | `false`     | Render the default slot as the root and merge props onto it.    |\n| `class`    | `string`                                                                                     | -           | Additional classes to apply to the root element.                |\n\n### BubbleContent\n\nThe bubble content wrapper.\n\n| Prop       | Type                 | Default | Description                                                  |\n| ---------- | -------------------- | ------- | ------------------------------------------------------------ |\n| `as`       | `string \\| Component` | `\"div\"` | The element or component to render.                          |\n| `as-child` | `boolean`            | `false` | Render the default slot as the root and merge props onto it. |\n| `class`    | `string`             | -       | Additional classes to apply to the content element.          |\n\n### BubbleReactions\n\nDisplays overlapped reactions for a bubble.\n\n| Prop       | Type                 | Default    | Description                                                  |\n| ---------- | -------------------- | ---------- | ------------------------------------------------------------ |\n| `side`     | `\"top\" \\| \"bottom\"` | `\"bottom\"` | The side of the bubble to anchor the reactions.              |\n| `align`    | `\"start\" \\| \"end\"`  | `\"end\"`    | The inline alignment of the reactions.                       |\n| `as`       | `string \\| Component` | `\"div\"`    | The element or component to render.                          |\n| `as-child` | `boolean`            | `false`    | Render the default slot as the root and merge props onto it. |\n| `class`    | `string`             | -          | Additional classes to apply to the reaction row.             |\n\n### BubbleGroup\n\nGroups consecutive bubbles from the same sender.\n\n| Prop       | Type                 | Default | Description                                                  |\n| ---------- | -------------------- | ------- | ------------------------------------------------------------ |\n| `as`       | `string \\| Component` | `\"div\"` | The element or component to render.                          |\n| `as-child` | `boolean`            | `false` | Render the default slot as the root and merge props onto it. |\n| `class`    | `string`             | -       | Additional classes to apply to the group root.               |\n",{"title":49,"description":1450},"wG_jDgDhyYIucKziMOPPfB2vKJl3POaT0vBPzhOXuNU",[1458,1459],{"title":45,"path":46,"stem":47,"children":-1},{"title":53,"path":54,"stem":55,"children":-1},1788943231282]