[{"data":1,"prerenderedAt":1431},["ShallowReactive",2],{"navigation":3,"$f2vxmxe0ttlw1b":470,"\u002Fdocs\u002Fcomponents\u002Fattachment":481,"surround-\u002Fdocs\u002Fcomponents\u002Fattachment":1428},[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":33,"body":483,"description":1421,"extension":1422,"links":1423,"meta":1424,"navigation":204,"new":18,"path":34,"rawbody":1425,"seo":1426,"stem":35,"__hash__":1427},"content\u002Fdocs\u002Fcomponents\u002Fattachment.md",{"type":484,"value":485,"toc":1389},"minimark",[486,491,499,503,558,562,571,575,578,586,593,599,603,657,660,665,683,686,690,705,708,712,728,731,734,740,743,747,753,756,762,766,785,789,798,804,808,816,822,831,835,850,854,863,867,870,873,974,977,980,1033,1037,1040,1071,1075,1083,1114,1117,1120,1151,1155,1158,1189,1192,1202,1271,1274,1282,1352,1355,1358],[487,488],"component-preview",{"name":489,"previewClass":490},"AttachmentDemo","h-auto theme-blue bg-surface dark:bg-background",[492,493,494,495,498],"p",{},"The ",[496,497,33],"code",{}," component displays a file or image attachment, its media, name, and metadata, with optional actions and upload state. Use it for files and images in chat composers, message threads, and upload lists.",[500,501,299],"h2",{"id":502},"installation",[504,505,506,521,534],"code-tabs",{},[507,508,509,515],"tabs-list",{},[510,511,513],"tabs-trigger",{"value":512},"cli",[492,514,434],{},[510,516,518],{"value":517},"manual",[492,519,520],{},"Manual",[522,523,524],"tabs-content",{"value":512},[525,526,532],"pre",{"className":527,"code":529,"language":530,"meta":531},[528],"language-bash","npx shadcn-vue@latest add attachment\n","bash","",[496,533,529],{"__ignoreMap":531},[522,535,536],{"value":517},[537,538,539,553],"steps",{},[540,541,542],"step",{},[492,543,544,545,552],{},"Copy and paste the ",[546,547,551],"a",{"href":548,"rel":549},"https:\u002F\u002Fgithub.com\u002Funovue\u002Fshadcn-vue\u002Ftree\u002Fdev\u002Fapps\u002Fv4\u002Fregistry\u002Fbases\u002Freka\u002Fui\u002Fattachment",[550],"nofollow","GitHub source code"," into your project.",[540,554,555],{},[492,556,557],{},"Update the import paths to match your project setup.",[500,559,561],{"id":560},"usage","Usage",[525,563,569],{"className":564,"code":566,"language":567,"meta":568},[565],"language-vue","\u003Cscript setup lang=\"ts\">\nimport { FileTextIcon, XIcon } from '@lucide\u002Fvue'\nimport {\n  Attachment,\n  AttachmentAction,\n  AttachmentActions,\n  AttachmentContent,\n  AttachmentDescription,\n  AttachmentMedia,\n  AttachmentTitle,\n} from '@\u002Fcomponents\u002Fui\u002Fattachment'\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CAttachment>\n    \u003CAttachmentMedia>\n      \u003CFileTextIcon \u002F>\n    \u003C\u002FAttachmentMedia>\n    \u003CAttachmentContent>\n      \u003CAttachmentTitle>sales-dashboard.pdf\u003C\u002FAttachmentTitle>\n      \u003CAttachmentDescription>PDF · 2.4 MB\u003C\u002FAttachmentDescription>\n    \u003C\u002FAttachmentContent>\n    \u003CAttachmentActions>\n      \u003CAttachmentAction aria-label=\"Remove sales-dashboard.pdf\">\n        \u003CXIcon \u002F>\n      \u003C\u002FAttachmentAction>\n    \u003C\u002FAttachmentActions>\n  \u003C\u002FAttachment>\n\u003C\u002Ftemplate>\n","vue","showLineNumbers",[496,570,566],{"__ignoreMap":531},[500,572,574],{"id":573},"composition","Composition",[492,576,577],{},"Use the following composition to build an attachment:",[525,579,584],{"className":580,"code":582,"language":583,"meta":531},[581],"language-text","Attachment\n├── AttachmentMedia\n├── AttachmentContent\n│   ├── AttachmentTitle\n│   └── AttachmentDescription\n├── AttachmentActions\n│   └── AttachmentAction\n└── AttachmentTrigger\n","text",[496,585,582],{"__ignoreMap":531},[492,587,588,589,592],{},"Use ",[496,590,591],{},"AttachmentGroup"," to lay out multiple attachments in a scrollable row:",[525,594,597],{"className":595,"code":596,"language":583,"meta":531},[581],"AttachmentGroup\n├── Attachment\n└── Attachment\n",[496,598,596],{"__ignoreMap":531},[500,600,602],{"id":601},"features","Features",[604,605,606,613,634,637,644,650],"ul",{},[607,608,609,610],"li",{},"Icon and image media through ",[496,611,612],{},"AttachmentMedia",[607,614,615,616,619,620,619,623,619,626,629,630,633],{},"Upload states: ",[496,617,618],{},"idle",", ",[496,621,622],{},"uploading",[496,624,625],{},"processing",[496,627,628],{},"error",", and ",[496,631,632],{},"done"," with built-in styling and a shimmer while in progress",[607,635,636],{},"Three sizes and horizontal or vertical orientation",[607,638,639,640,643],{},"A full-card ",[496,641,642],{},"AttachmentTrigger"," that opens a link or dialog while the actions stay independently clickable",[607,645,646,647,649],{},"Scrollable, snapping ",[496,648,591],{}," with an edge fade",[607,651,652,653,656],{},"Customizable styling through the Vue ",[496,654,655],{},"class"," attribute on every part",[500,658,372],{"id":659},"examples",[661,662,664],"h3",{"id":663},"image","Image",[492,666,667,668,671,672,674,675,678,679,682],{},"Set ",[496,669,670],{},"variant=\"image\""," on ",[496,673,612],{}," and render an ",[496,676,677],{},"\u003Cimg>"," inside it. Use ",[496,680,681],{},"orientation=\"vertical\""," to stack the media above the content.",[487,684],{"name":685,"previewClass":490},"AttachmentImageDemo",[661,687,689],{"id":688},"states","States",[492,691,667,692,695,696,698,699,701,702,704],{},[496,693,694],{},"state"," to reflect the upload lifecycle. ",[496,697,622],{}," and ",[496,700,625],{}," shimmer the title, and ",[496,703,628],{}," switches to a destructive treatment.",[487,706],{"name":707,"previewClass":490},"AttachmentStatesDemo",[661,709,711],{"id":710},"sizes","Sizes",[492,713,588,714,717,718,619,721,629,724,727],{},[496,715,716],{},"size"," to switch between ",[496,719,720],{},"default",[496,722,723],{},"sm",[496,725,726],{},"xs",".",[487,729],{"name":730,"previewClass":490},"AttachmentSizesDemo",[661,732,733],{"id":297},"Group",[492,735,736,737,739],{},"Wrap attachments in ",[496,738,591],{}," to lay them out in a horizontally scrollable, snapping row with an edge fade.",[487,741],{"name":742,"previewClass":490},"AttachmentGroupDemo",[661,744,746],{"id":745},"trigger","Trigger",[492,748,749,750,752],{},"Add an ",[496,751,642],{}," to make the whole card open a link or dialog. It fills the card behind the actions, so the actions stay clickable.",[487,754],{"name":755,"previewClass":490},"AttachmentTriggerDemo",[525,757,760],{"className":758,"code":759,"language":567,"meta":568},[565],"\u003Ctemplate>\n  \u003CDialog>\n    \u003CAttachment>\n      \u003C!-- media, content, actions -->\n      \u003CDialogTrigger as-child>\n        \u003CAttachmentTrigger aria-label=\"Preview research-summary.pdf\" \u002F>\n      \u003C\u002FDialogTrigger>\n    \u003C\u002FAttachment>\n    \u003CDialogContent>\n      \u003C!-- ... -->\n    \u003C\u002FDialogContent>\n  \u003C\u002FDialog>\n\u003C\u002Ftemplate>\n",[496,761,759],{"__ignoreMap":531},[500,763,765],{"id":764},"accessibility","Accessibility",[492,767,768,771,772,629,774,776,777,780,781,784],{},[496,769,770],{},"AttachmentAction"," renders a ",[496,773,53],{},[496,775,642],{}," renders a real ",[496,778,779],{},"\u003Cbutton>"," (or your element via ",[496,782,783],{},"as-child","). Follow the guidance below so both are operable and announced.",[661,786,788],{"id":787},"label-icon-only-actions","Label icon-only actions",[492,790,791,793,794,797],{},[496,792,770],{}," is usually icon-only, so give each one an ",[496,795,796],{},"aria-label"," describing the action and its target.",[525,799,802],{"className":800,"code":801,"language":567,"meta":568},[565],"\u003Ctemplate>\n  \u003CAttachmentAction aria-label=\"Remove sales-dashboard.pdf\">\n    \u003CXIcon \u002F>\n  \u003C\u002FAttachmentAction>\n\u003C\u002Ftemplate>\n",[496,803,801],{"__ignoreMap":531},[661,805,807],{"id":806},"label-the-trigger","Label the trigger",[492,809,810,812,813,815],{},[496,811,642],{}," covers the card with no text of its own, so give it an ",[496,814,796],{}," for what activating it does.",[525,817,820],{"className":818,"code":819,"language":567,"meta":568},[565],"\u003Ctemplate>\n  \u003CAttachmentTrigger as-child>\n    \u003Ca\n      :href=\"url\"\n      target=\"_blank\"\n      rel=\"noreferrer\"\n      aria-label=\"Open workspace.png\"\n    \u002F>\n  \u003C\u002FAttachmentTrigger>\n\u003C\u002Ftemplate>\n",[496,821,819],{"__ignoreMap":531},[492,823,824,825,827,828,830],{},"The trigger sits behind the actions in the stacking order, so an ",[496,826,770],{}," and the ",[496,829,642],{}," never trap each other — both remain separately focusable and clickable.",[661,832,834],{"id":833},"keyboard-scrolling","Keyboard scrolling",[492,836,837,838,840,841,619,844,847,848,727],{},"An ",[496,839,591],{}," scrolls horizontally. When its attachments are interactive: a trigger or actions, keyboard users reach off-screen items by tabbing to them. For a row of presentational attachments, make the group itself focusable and scrollable by adding ",[496,842,843],{},"tabindex=\"0\"",[496,845,846],{},"role=\"group\"",", and an ",[496,849,796],{},[661,851,853],{"id":852},"meaning-beyond-color","Meaning beyond color",[492,855,494,856,858,859,862],{},[496,857,628],{}," state uses a destructive color. Keep the failure reason in ",[496,860,861],{},"AttachmentDescription"," so the state is not conveyed by color alone.",[500,864,866],{"id":865},"api-reference","API Reference",[661,868,33],{"id":869},"attachment",[492,871,872],{},"The root attachment container.",[874,875,876,895],"table",{},[877,878,879],"thead",{},[880,881,882,886,889,892],"tr",{},[883,884,885],"th",{},"Prop",[883,887,888],{},"Type",[883,890,891],{},"Default",[883,893,894],{},"Description",[896,897,898,918,937,957],"tbody",{},[880,899,900,905,910,915],{},[901,902,903],"td",{},[496,904,694],{},[901,906,907],{},[496,908,909],{},"\"idle\" | \"uploading\" | \"processing\" | \"error\" | \"done\"",[901,911,912],{},[496,913,914],{},"\"done\"",[901,916,917],{},"The upload state. Drives styling and the shimmer.",[880,919,920,924,929,934],{},[901,921,922],{},[496,923,716],{},[901,925,926],{},[496,927,928],{},"\"default\" | \"sm\" | \"xs\"",[901,930,931],{},[496,932,933],{},"\"default\"",[901,935,936],{},"The attachment size.",[880,938,939,944,949,954],{},[901,940,941],{},[496,942,943],{},"orientation",[901,945,946],{},[496,947,948],{},"\"horizontal\" | \"vertical\"",[901,950,951],{},[496,952,953],{},"\"horizontal\"",[901,955,956],{},"Lay the media beside or above the content.",[880,958,959,963,968,971],{},[901,960,961],{},[496,962,655],{},[901,964,965],{},[496,966,967],{},"HTMLAttributes[\"class\"]",[901,969,970],{},"-",[901,972,973],{},"Additional classes to apply to the root element.",[661,975,612],{"id":976},"attachmentmedia",[492,978,979],{},"The media slot for an icon or image preview.",[874,981,982,994],{},[877,983,984],{},[880,985,986,988,990,992],{},[883,987,885],{},[883,989,888],{},[883,991,891],{},[883,993,894],{},[896,995,996,1018],{},[880,997,998,1003,1008,1013],{},[901,999,1000],{},[496,1001,1002],{},"variant",[901,1004,1005],{},[496,1006,1007],{},"\"icon\" | \"image\"",[901,1009,1010],{},[496,1011,1012],{},"\"icon\"",[901,1014,1015,1016,727],{},"Whether the media holds an icon or an ",[496,1017,677],{},[880,1019,1020,1024,1028,1030],{},[901,1021,1022],{},[496,1023,655],{},[901,1025,1026],{},[496,1027,967],{},[901,1029,970],{},[901,1031,1032],{},"Additional classes to apply to the media slot.",[661,1034,1036],{"id":1035},"attachmentcontent","AttachmentContent",[492,1038,1039],{},"Wraps the title and description.",[874,1041,1042,1054],{},[877,1043,1044],{},[880,1045,1046,1048,1050,1052],{},[883,1047,885],{},[883,1049,888],{},[883,1051,891],{},[883,1053,894],{},[896,1055,1056],{},[880,1057,1058,1062,1066,1068],{},[901,1059,1060],{},[496,1061,655],{},[901,1063,1064],{},[496,1065,967],{},[901,1067,970],{},[901,1069,1070],{},"Additional classes to apply to the content slot.",[661,1072,1074],{"id":1073},"attachmenttitle","AttachmentTitle",[492,1076,1077,1078,1080,1081,727],{},"The attachment name. Shimmers while the attachment is ",[496,1079,622],{}," or ",[496,1082,625],{},[874,1084,1085,1097],{},[877,1086,1087],{},[880,1088,1089,1091,1093,1095],{},[883,1090,885],{},[883,1092,888],{},[883,1094,891],{},[883,1096,894],{},[896,1098,1099],{},[880,1100,1101,1105,1109,1111],{},[901,1102,1103],{},[496,1104,655],{},[901,1106,1107],{},[496,1108,967],{},[901,1110,970],{},[901,1112,1113],{},"Additional classes to apply to the title.",[661,1115,861],{"id":1116},"attachmentdescription",[492,1118,1119],{},"Secondary metadata such as the file type, size, or upload status.",[874,1121,1122,1134],{},[877,1123,1124],{},[880,1125,1126,1128,1130,1132],{},[883,1127,885],{},[883,1129,888],{},[883,1131,891],{},[883,1133,894],{},[896,1135,1136],{},[880,1137,1138,1142,1146,1148],{},[901,1139,1140],{},[496,1141,655],{},[901,1143,1144],{},[496,1145,967],{},[901,1147,970],{},[901,1149,1150],{},"Additional classes to apply to the description.",[661,1152,1154],{"id":1153},"attachmentactions","AttachmentActions",[492,1156,1157],{},"A container for one or more actions, aligned to the end of the attachment.",[874,1159,1160,1172],{},[877,1161,1162],{},[880,1163,1164,1166,1168,1170],{},[883,1165,885],{},[883,1167,888],{},[883,1169,891],{},[883,1171,894],{},[896,1173,1174],{},[880,1175,1176,1180,1184,1186],{},[901,1177,1178],{},[496,1179,655],{},[901,1181,1182],{},[496,1183,967],{},[901,1185,970],{},[901,1187,1188],{},"Additional classes to apply to the actions.",[661,1190,770],{"id":1191},"attachmentaction",[492,1193,1194,1195,1199,1200,727],{},"An action button. Renders a ",[546,1196,1197],{"href":54},[496,1198,53],{}," and accepts Vue fallthrough attributes such as ",[496,1201,796],{},[874,1203,1204,1216],{},[877,1205,1206],{},[880,1207,1208,1210,1212,1214],{},[883,1209,885],{},[883,1211,888],{},[883,1213,891],{},[883,1215,894],{},[896,1217,1218,1237,1256],{},[880,1219,1220,1224,1229,1234],{},[901,1221,1222],{},[496,1223,1002],{},[901,1225,1226],{},[496,1227,1228],{},"ButtonVariants[\"variant\"]",[901,1230,1231],{},[496,1232,1233],{},"\"ghost\"",[901,1235,1236],{},"The button variant.",[880,1238,1239,1243,1248,1253],{},[901,1240,1241],{},[496,1242,716],{},[901,1244,1245],{},[496,1246,1247],{},"ButtonVariants[\"size\"]",[901,1249,1250],{},[496,1251,1252],{},"\"icon-xs\"",[901,1254,1255],{},"The button size.",[880,1257,1258,1262,1266,1268],{},[901,1259,1260],{},[496,1261,655],{},[901,1263,1264],{},[496,1265,967],{},[901,1267,970],{},[901,1269,1270],{},"Additional classes to apply to the action.",[661,1272,642],{"id":1273},"attachmenttrigger",[492,1275,1276,1277,1279,1280,727],{},"A full-card overlay that activates the attachment. Renders a ",[496,1278,779],{}," by default and accepts Vue fallthrough attributes such as ",[496,1281,796],{},[874,1283,1284,1296],{},[877,1285,1286],{},[880,1287,1288,1290,1292,1294],{},[883,1289,885],{},[883,1291,888],{},[883,1293,891],{},[883,1295,894],{},[896,1297,1298,1318,1337],{},[880,1299,1300,1305,1310,1315],{},[901,1301,1302],{},[496,1303,1304],{},"as",[901,1306,1307],{},[496,1308,1309],{},"PrimitiveProps[\"as\"]",[901,1311,1312],{},[496,1313,1314],{},"\"button\"",[901,1316,1317],{},"Element or component to render.",[880,1319,1320,1324,1329,1334],{},[901,1321,1322],{},[496,1323,783],{},[901,1325,1326],{},[496,1327,1328],{},"boolean",[901,1330,1331],{},[496,1332,1333],{},"false",[901,1335,1336],{},"Render as the child element, such as a link.",[880,1338,1339,1343,1347,1349],{},[901,1340,1341],{},[496,1342,655],{},[901,1344,1345],{},[496,1346,967],{},[901,1348,970],{},[901,1350,1351],{},"Additional classes to apply to the trigger.",[661,1353,591],{"id":1354},"attachmentgroup",[492,1356,1357],{},"Lays out attachments in a horizontally scrollable, snapping row.",[874,1359,1360,1372],{},[877,1361,1362],{},[880,1363,1364,1366,1368,1370],{},[883,1365,885],{},[883,1367,888],{},[883,1369,891],{},[883,1371,894],{},[896,1373,1374],{},[880,1375,1376,1380,1384,1386],{},[901,1377,1378],{},[496,1379,655],{},[901,1381,1382],{},[496,1383,967],{},[901,1385,970],{},[901,1387,1388],{},"Additional classes to apply to the group.",{"title":531,"searchDepth":1390,"depth":1390,"links":1391},2,[1392,1393,1394,1395,1396,1404,1410],{"id":502,"depth":1390,"text":299},{"id":560,"depth":1390,"text":561},{"id":573,"depth":1390,"text":574},{"id":601,"depth":1390,"text":602},{"id":659,"depth":1390,"text":372,"children":1397},[1398,1400,1401,1402,1403],{"id":663,"depth":1399,"text":664},3,{"id":688,"depth":1399,"text":689},{"id":710,"depth":1399,"text":711},{"id":297,"depth":1399,"text":733},{"id":745,"depth":1399,"text":746},{"id":764,"depth":1390,"text":765,"children":1405},[1406,1407,1408,1409],{"id":787,"depth":1399,"text":788},{"id":806,"depth":1399,"text":807},{"id":833,"depth":1399,"text":834},{"id":852,"depth":1399,"text":853},{"id":865,"depth":1390,"text":866,"children":1411},[1412,1413,1414,1415,1416,1417,1418,1419,1420],{"id":869,"depth":1399,"text":33},{"id":976,"depth":1399,"text":612},{"id":1035,"depth":1399,"text":1036},{"id":1073,"depth":1399,"text":1074},{"id":1116,"depth":1399,"text":861},{"id":1153,"depth":1399,"text":1154},{"id":1191,"depth":1399,"text":770},{"id":1273,"depth":1399,"text":642},{"id":1354,"depth":1399,"text":591},"Displays a file or image attachment with media, metadata, upload state, and actions.","md",null,{"component":204},"---\ntitle: Attachment\ndescription: Displays a file or image attachment with media, metadata, upload state, and actions.\ncomponent: true\n---\n\n::component-preview\n---\nname: AttachmentDemo\npreviewClass: h-auto theme-blue bg-surface dark:bg-background\n---\n::\n\nThe `Attachment` component displays a file or image attachment, its media, name, and metadata, with optional actions and upload state. Use it for files and images in chat composers, message threads, and upload lists.\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 attachment\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\u002Fbases\u002Freka\u002Fui\u002Fattachment) into your project.\n    ::\n\n    ::step\n    Update the import paths to match your project setup.\n    ::\n  :::\n::::\n\n:::::\n\n\n## Usage\n\n```vue showLineNumbers\n\u003Cscript setup lang=\"ts\">\nimport { FileTextIcon, XIcon } from '@lucide\u002Fvue'\nimport {\n  Attachment,\n  AttachmentAction,\n  AttachmentActions,\n  AttachmentContent,\n  AttachmentDescription,\n  AttachmentMedia,\n  AttachmentTitle,\n} from '@\u002Fcomponents\u002Fui\u002Fattachment'\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CAttachment>\n    \u003CAttachmentMedia>\n      \u003CFileTextIcon \u002F>\n    \u003C\u002FAttachmentMedia>\n    \u003CAttachmentContent>\n      \u003CAttachmentTitle>sales-dashboard.pdf\u003C\u002FAttachmentTitle>\n      \u003CAttachmentDescription>PDF · 2.4 MB\u003C\u002FAttachmentDescription>\n    \u003C\u002FAttachmentContent>\n    \u003CAttachmentActions>\n      \u003CAttachmentAction aria-label=\"Remove sales-dashboard.pdf\">\n        \u003CXIcon \u002F>\n      \u003C\u002FAttachmentAction>\n    \u003C\u002FAttachmentActions>\n  \u003C\u002FAttachment>\n\u003C\u002Ftemplate>\n```\n\n## Composition\n\nUse the following composition to build an attachment:\n\n```text\nAttachment\n├── AttachmentMedia\n├── AttachmentContent\n│   ├── AttachmentTitle\n│   └── AttachmentDescription\n├── AttachmentActions\n│   └── AttachmentAction\n└── AttachmentTrigger\n```\n\nUse `AttachmentGroup` to lay out multiple attachments in a scrollable row:\n\n```text\nAttachmentGroup\n├── Attachment\n└── Attachment\n```\n\n## Features\n\n- Icon and image media through `AttachmentMedia`\n- Upload states: `idle`, `uploading`, `processing`, `error`, and `done` with built-in styling and a shimmer while in progress\n- Three sizes and horizontal or vertical orientation\n- A full-card `AttachmentTrigger` that opens a link or dialog while the actions stay independently clickable\n- Scrollable, snapping `AttachmentGroup` with an edge fade\n- Customizable styling through the Vue `class` attribute on every part\n\n## Examples\n\n### Image\n\nSet `variant=\"image\"` on `AttachmentMedia` and render an `\u003Cimg>` inside it. Use `orientation=\"vertical\"` to stack the media above the content.\n\n::component-preview\n---\nname: AttachmentImageDemo\npreviewClass: h-auto theme-blue bg-surface dark:bg-background\n---\n::\n\n### States\n\nSet `state` to reflect the upload lifecycle. `uploading` and `processing` shimmer the title, and `error` switches to a destructive treatment.\n\n::component-preview\n---\nname: AttachmentStatesDemo\npreviewClass: h-auto theme-blue bg-surface dark:bg-background\n---\n::\n\n### Sizes\n\nUse `size` to switch between `default`, `sm`, and `xs`.\n\n::component-preview\n---\nname: AttachmentSizesDemo\npreviewClass: h-auto theme-blue bg-surface dark:bg-background\n---\n::\n\n### Group\n\nWrap attachments in `AttachmentGroup` to lay them out in a horizontally scrollable, snapping row with an edge fade.\n\n\n::component-preview\n---\nname: AttachmentGroupDemo\npreviewClass: h-auto theme-blue bg-surface dark:bg-background\n---\n::\n\n### Trigger\n\nAdd an `AttachmentTrigger` to make the whole card open a link or dialog. It fills the card behind the actions, so the actions stay clickable.\n\n::component-preview\n---\nname: AttachmentTriggerDemo\npreviewClass: h-auto theme-blue bg-surface dark:bg-background\n---\n::\n\n```vue showLineNumbers\n\u003Ctemplate>\n  \u003CDialog>\n    \u003CAttachment>\n      \u003C!-- media, content, actions -->\n      \u003CDialogTrigger as-child>\n        \u003CAttachmentTrigger aria-label=\"Preview research-summary.pdf\" \u002F>\n      \u003C\u002FDialogTrigger>\n    \u003C\u002FAttachment>\n    \u003CDialogContent>\n      \u003C!-- ... -->\n    \u003C\u002FDialogContent>\n  \u003C\u002FDialog>\n\u003C\u002Ftemplate>\n```\n\n## Accessibility\n\n`AttachmentAction` renders a `Button`, and `AttachmentTrigger` renders a real `\u003Cbutton>` (or your element via `as-child`). Follow the guidance below so both are operable and announced.\n\n### Label icon-only actions\n\n`AttachmentAction` is usually icon-only, so give each one an `aria-label` describing the action and its target.\n\n```vue showLineNumbers\n\u003Ctemplate>\n  \u003CAttachmentAction aria-label=\"Remove sales-dashboard.pdf\">\n    \u003CXIcon \u002F>\n  \u003C\u002FAttachmentAction>\n\u003C\u002Ftemplate>\n```\n\n### Label the trigger\n\n`AttachmentTrigger` covers the card with no text of its own, so give it an `aria-label` for what activating it does.\n\n```vue showLineNumbers\n\u003Ctemplate>\n  \u003CAttachmentTrigger as-child>\n    \u003Ca\n      :href=\"url\"\n      target=\"_blank\"\n      rel=\"noreferrer\"\n      aria-label=\"Open workspace.png\"\n    \u002F>\n  \u003C\u002FAttachmentTrigger>\n\u003C\u002Ftemplate>\n```\n\nThe trigger sits behind the actions in the stacking order, so an `AttachmentAction` and the `AttachmentTrigger` never trap each other — both remain separately focusable and clickable.\n\n### Keyboard scrolling\n\nAn `AttachmentGroup` scrolls horizontally. When its attachments are interactive: a trigger or actions, keyboard users reach off-screen items by tabbing to them. For a row of presentational attachments, make the group itself focusable and scrollable by adding `tabindex=\"0\"`, `role=\"group\"`, and an `aria-label`.\n\n### Meaning beyond color\n\nThe `error` state uses a destructive color. Keep the failure reason in `AttachmentDescription` so the state is not conveyed by color alone.\n\n## API Reference\n\n### Attachment\n\nThe root attachment container.\n\n| Prop          | Type                                                         | Default        | Description                                       |\n| ------------- | ------------------------------------------------------------ | -------------- | ------------------------------------------------- |\n| `state`       | `\"idle\" \\| \"uploading\" \\| \"processing\" \\| \"error\" \\| \"done\"` | `\"done\"`       | The upload state. Drives styling and the shimmer. |\n| `size`        | `\"default\" \\| \"sm\" \\| \"xs\"`                                  | `\"default\"`    | The attachment size.                              |\n| `orientation` | `\"horizontal\" \\| \"vertical\"`                                 | `\"horizontal\"` | Lay the media beside or above the content.        |\n| `class`       | `HTMLAttributes[\"class\"]`                                    | -              | Additional classes to apply to the root element.  |\n\n### AttachmentMedia\n\nThe media slot for an icon or image preview.\n\n| Prop        | Type                | Default  | Description                                    |\n| ----------- | ------------------- | -------- | ---------------------------------------------- |\n| `variant`   | `\"icon\" \\| \"image\"` | `\"icon\"` | Whether the media holds an icon or an `\u003Cimg>`. |\n| `class`   | `HTMLAttributes[\"class\"]` | -        | Additional classes to apply to the media slot. |\n\n### AttachmentContent\n\nWraps the title and description.\n\n| Prop        | Type     | Default | Description                                      |\n| ----------- | -------- | ------- | ------------------------------------------------ |\n| `class` | `HTMLAttributes[\"class\"]` | -       | Additional classes to apply to the content slot. |\n\n### AttachmentTitle\n\nThe attachment name. Shimmers while the attachment is `uploading` or `processing`.\n\n| Prop        | Type     | Default | Description                               |\n| ----------- | -------- | ------- | ----------------------------------------- |\n| `class` | `HTMLAttributes[\"class\"]` | -       | Additional classes to apply to the title. |\n\n### AttachmentDescription\n\nSecondary metadata such as the file type, size, or upload status.\n\n| Prop        | Type     | Default | Description                                     |\n| ----------- | -------- | ------- | ----------------------------------------------- |\n| `class` | `HTMLAttributes[\"class\"]` | -       | Additional classes to apply to the description. |\n\n### AttachmentActions\n\nA container for one or more actions, aligned to the end of the attachment.\n\n| Prop        | Type     | Default | Description                                 |\n| ----------- | -------- | ------- | ------------------------------------------- |\n| `class` | `HTMLAttributes[\"class\"]` | -       | Additional classes to apply to the actions. |\n\n### AttachmentAction\n\nAn action button. Renders a [`Button`](\u002Fdocs\u002Fcomponents\u002Fbutton) and accepts Vue fallthrough attributes such as `aria-label`.\n\n| Prop       | Type                       | Default     | Description                                  |\n| ---------- | -------------------------- | ----------- | -------------------------------------------- |\n| `variant`  | `ButtonVariants[\"variant\"]` | `\"ghost\"`   | The button variant.                          |\n| `size`     | `ButtonVariants[\"size\"]`   | `\"icon-xs\"` | The button size.                             |\n| `class`    | `HTMLAttributes[\"class\"]`  | -           | Additional classes to apply to the action.   |\n\n### AttachmentTrigger\n\nA full-card overlay that activates the attachment. Renders a `\u003Cbutton>` by default and accepts Vue fallthrough attributes such as `aria-label`.\n\n| Prop       | Type                             | Default | Description                                  |\n| ---------- | -------------------------------- | ------- | -------------------------------------------- |\n| `as`       | `PrimitiveProps[\"as\"]`           | `\"button\"` | Element or component to render.           |\n| `as-child` | `boolean`                        | `false` | Render as the child element, such as a link. |\n| `class`    | `HTMLAttributes[\"class\"]`        | -       | Additional classes to apply to the trigger.  |\n\n### AttachmentGroup\n\nLays out attachments in a horizontally scrollable, snapping row.\n\n| Prop        | Type     | Default | Description                               |\n| ----------- | -------- | ------- | ----------------------------------------- |\n| `class` | `HTMLAttributes[\"class\"]` | -       | Additional classes to apply to the group. |\n",{"title":33,"description":1421},"OEsqC-C93ay-e1PE2KLnwF96KGkFSaFy4wmokEEEgag",[1429,1430],{"title":29,"path":30,"stem":31,"children":-1},{"title":37,"path":38,"stem":39,"children":-1},1788943230757]