{
  "$schema": "https://shadcn-vue.com/schema/registry-item.json",
  "name": "collapsible",
  "title": "Collapsible",
  "type": "registry:ui",
  "files": [
    {
      "path": "packages/registry-vue/components/collapsible/Collapsible.vue",
      "content": "<script setup lang=\"ts\">\nimport type { CollapsibleRootEmits, CollapsibleRootProps } from 'reka-ui'\nimport type { HTMLAttributes } from 'vue'\nimport { CollapsibleRoot, useForwardPropsEmits } from 'reka-ui'\n\n// CLAUDE.md mandate: bare `defineProps<RekaUiX>()` can bail under Vue 3.5+\n// because reka-ui has no exports.types. The intersection form delegates\n// type extraction to TS via the installed typescript package.\nconst props = defineProps<CollapsibleRootProps & { class?: HTMLAttributes['class'] }>()\nconst emits = defineEmits<CollapsibleRootEmits>()\n\nconst forwarded = useForwardPropsEmits(props, emits)\n</script>\n\n<template>\n  <CollapsibleRoot v-slot=\"slotProps\" data-uipkge data-slot=\"collapsible\" v-bind=\"forwarded\">\n    <slot v-bind=\"slotProps\" />\n  </CollapsibleRoot>\n</template>\n",
      "type": "registry:ui",
      "target": "~/app/components/ui/collapsible/Collapsible.vue"
    },
    {
      "path": "packages/registry-vue/components/collapsible/CollapsibleContent.vue",
      "content": "<script setup lang=\"ts\">\nimport type { CollapsibleContentProps } from 'reka-ui'\nimport type { HTMLAttributes } from 'vue'\nimport { CollapsibleContent } from 'reka-ui'\n\n// CLAUDE.md mandate: intersection form delegates type extraction to TS.\nconst props = defineProps<CollapsibleContentProps & { class?: HTMLAttributes['class'] }>()\n</script>\n\n<template>\n  <CollapsibleContent data-uipkge data-slot=\"collapsible-content\" v-bind=\"props\">\n    <slot />\n  </CollapsibleContent>\n</template>\n",
      "type": "registry:ui",
      "target": "~/app/components/ui/collapsible/CollapsibleContent.vue"
    },
    {
      "path": "packages/registry-vue/components/collapsible/CollapsibleTrigger.vue",
      "content": "<script setup lang=\"ts\">\nimport type { CollapsibleTriggerProps } from 'reka-ui'\nimport type { HTMLAttributes } from 'vue'\nimport { CollapsibleTrigger } from 'reka-ui'\n\n// CLAUDE.md mandate: intersection form delegates type extraction to TS.\nconst props = defineProps<CollapsibleTriggerProps & { class?: HTMLAttributes['class'] }>()\n</script>\n\n<template>\n  <CollapsibleTrigger data-uipkge data-slot=\"collapsible-trigger\" v-bind=\"props\">\n    <slot />\n  </CollapsibleTrigger>\n</template>\n",
      "type": "registry:ui",
      "target": "~/app/components/ui/collapsible/CollapsibleTrigger.vue"
    },
    {
      "path": "packages/registry-vue/components/collapsible/index.ts",
      "content": "export { default as Collapsible } from './Collapsible.vue'\nexport { default as CollapsibleContent } from './CollapsibleContent.vue'\nexport { default as CollapsibleTrigger } from './CollapsibleTrigger.vue'\n",
      "type": "registry:ui",
      "target": "~/app/components/ui/collapsible/index.ts"
    }
  ],
  "dependencies": [
    "reka-ui"
  ],
  "devDependencies": [],
  "registryDependencies": [],
  "description": "Headless single-region show/hide primitive. Use it when Accordion is overkill — a single toggle reveals one panel of content. Smooth height animation built in.",
  "categories": [
    "disclosure"
  ]
}