{
  "$schema": "https://shadcn-vue.com/schema/registry-item.json",
  "name": "resizable",
  "title": "Resizable",
  "type": "registry:ui",
  "files": [
    {
      "path": "packages/registry-vue/components/resizable/ResizableHandle.vue",
      "content": "<script setup lang=\"ts\">\nimport type { SplitterResizeHandleEmits, SplitterResizeHandleProps } from 'reka-ui'\nimport type { HTMLAttributes } from 'vue'\nimport { reactiveOmit } from '@vueuse/core'\nimport { GripVertical } from 'lucide-vue-next'\nimport { SplitterResizeHandle, useForwardPropsEmits } from 'reka-ui'\nimport { cn } from '@/lib/utils'\n\nconst props = defineProps<SplitterResizeHandleProps & { class?: HTMLAttributes['class']; withHandle?: boolean }>()\nconst emits = defineEmits<SplitterResizeHandleEmits>()\n\nconst delegatedProps = reactiveOmit(props, 'class', 'withHandle')\nconst forwarded = useForwardPropsEmits(delegatedProps, emits)\n</script>\n\n<template>\n  <SplitterResizeHandle\n    data-uipkge\n    data-slot=\"resizable-handle\"\n    v-bind=\"forwarded\"\n    :class=\"\n      cn(\n        'bg-border focus-visible:ring-ring relative flex w-px items-center justify-center after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-offset-1 focus-visible:outline-hidden data-[orientation=vertical]:h-px data-[orientation=vertical]:w-full data-[orientation=vertical]:after:left-0 data-[orientation=vertical]:after:h-1 data-[orientation=vertical]:after:w-full data-[orientation=vertical]:after:translate-x-0 data-[orientation=vertical]:after:-translate-y-1/2 [&[data-orientation=vertical]>div]:rotate-90',\n        props.class,\n      )\n    \"\n  >\n    <template v-if=\"props.withHandle\">\n      <div class=\"bg-border z-10 flex h-4 w-3 items-center justify-center rounded-xs border\">\n        <slot>\n          <GripVertical class=\"size-2.5\" />\n        </slot>\n      </div>\n    </template>\n  </SplitterResizeHandle>\n</template>\n",
      "type": "registry:ui",
      "target": "~/app/components/ui/resizable/ResizableHandle.vue"
    },
    {
      "path": "packages/registry-vue/components/resizable/ResizablePanel.vue",
      "content": "<script setup lang=\"ts\">\nimport type { SplitterPanelEmits, SplitterPanelProps } from 'reka-ui'\nimport { SplitterPanel, useForwardExpose, useForwardPropsEmits } from 'reka-ui'\n\nconst props = defineProps<SplitterPanelProps>()\nconst emits = defineEmits<SplitterPanelEmits>()\n\nconst forwarded = useForwardPropsEmits(props, emits)\nconst { forwardRef } = useForwardExpose()\n</script>\n\n<template>\n  <SplitterPanel :ref=\"forwardRef\" v-slot=\"slotProps\" data-uipkge data-slot=\"resizable-panel\" v-bind=\"forwarded\">\n    <slot v-bind=\"slotProps\" />\n  </SplitterPanel>\n</template>\n",
      "type": "registry:ui",
      "target": "~/app/components/ui/resizable/ResizablePanel.vue"
    },
    {
      "path": "packages/registry-vue/components/resizable/ResizablePanelGroup.vue",
      "content": "<script setup lang=\"ts\">\nimport type { SplitterGroupEmits, SplitterGroupProps } from 'reka-ui'\nimport type { HTMLAttributes } from 'vue'\nimport { reactiveOmit } from '@vueuse/core'\nimport { SplitterGroup, useForwardPropsEmits } from 'reka-ui'\nimport { cn } from '@/lib/utils'\n\nconst props = defineProps<SplitterGroupProps & { class?: HTMLAttributes['class'] }>()\nconst emits = defineEmits<SplitterGroupEmits>()\n\nconst delegatedProps = reactiveOmit(props, 'class')\n\nconst forwarded = useForwardPropsEmits(delegatedProps, emits)\n</script>\n\n<template>\n  <SplitterGroup\n    v-slot=\"slotProps\"\n    data-uipkge\n    data-slot=\"resizable-panel-group\"\n    v-bind=\"forwarded\"\n    :class=\"cn('flex h-full w-full data-[orientation=vertical]:flex-col', props.class)\"\n  >\n    <slot v-bind=\"slotProps\" />\n  </SplitterGroup>\n</template>\n",
      "type": "registry:ui",
      "target": "~/app/components/ui/resizable/ResizablePanelGroup.vue"
    },
    {
      "path": "packages/registry-vue/components/resizable/index.ts",
      "content": "export { default as ResizableHandle } from './ResizableHandle.vue'\nexport { default as ResizablePanel } from './ResizablePanel.vue'\nexport { default as ResizablePanelGroup } from './ResizablePanelGroup.vue'\n",
      "type": "registry:ui",
      "target": "~/app/components/ui/resizable/index.ts"
    }
  ],
  "dependencies": [
    "@vueuse/core",
    "lucide-vue-next",
    "reka-ui"
  ],
  "devDependencies": [],
  "registryDependencies": [],
  "description": "Drag-to-resize panel layout — horizontal or vertical splits with persistent sizes. Use for IDE-style sidebars, split views, and any layout the user should be able to reshape.",
  "categories": [
    "layout"
  ]
}