{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "resizable",
  "type": "registry:ui",
  "title": "Resizable",
  "description": "Draggable split panes with persistent sizes for dashboards and editor layouts.",
  "dependencies": [
    "@saasflare/ui",
    "react-resizable-panels"
  ],
  "files": [
    {
      "path": "components/ui/resizable.tsx",
      "type": "registry:ui",
      "content": "// @toreview\n\"use client\"\n\n/**\n * @fileoverview Resizable primitive — drag-to-resize panel groups with optional grip handles.\n * Built on react-resizable-panels. Part of the Saasflare base component layer.\n * @module packages/ui/components/ui/resizable\n * @layer core\n *\n * @requires react-resizable-panels — peer dependency.\n *\n * @component\n * @example\n * import { ResizablePanelGroup, ResizablePanel, ResizableHandle } from '@saasflare/ui';\n * <ResizablePanelGroup direction=\"horizontal\">\n *   <ResizablePanel>Left</ResizablePanel>\n *   <ResizableHandle withHandle />\n *   <ResizablePanel>Right</ResizablePanel>\n * </ResizablePanelGroup>\n */\n\nimport { DotsSixVerticalIcon } from \"@saasflare/ui\"\nimport * as ResizablePrimitive from \"react-resizable-panels\"\n\nimport { cn } from \"@saasflare/ui\"\nimport { useSaasflareProps, type SaasflareComponentProps } from \"@saasflare/ui\"\n\n/**\n * Props for {@link ResizablePanelGroup}.\n *\n * Extends the `react-resizable-panels` group props (e.g. `direction`) with\n * {@link SaasflareComponentProps}.\n */\ntype ResizablePanelGroupProps = ResizablePrimitive.GroupProps & SaasflareComponentProps\n\n/**\n * Container that lays out {@link ResizablePanel}s along a horizontal or\n * vertical axis and coordinates their drag-to-resize behavior. Use it for\n * split views like editors, file trees, and inspector layouts.\n *\n * @component\n * @layer core\n */\nfunction ResizablePanelGroup({\n  className,\n  surface,\n  radius,\n  animated,\n  iconWeight,\n  ...props\n}: ResizablePanelGroupProps) {\n  const sf = useSaasflareProps({ surface, radius, animated, iconWeight })\n\n  return (\n    <ResizablePrimitive.Group\n      {...props}\n      data-slot=\"resizable-panel-group\"\n      data-surface={sf.surface}\n      data-radius={sf.radius}\n      data-animated={String(sf.animated)}\n      className={cn(\n        \"flex h-full w-full aria-[orientation=vertical]:flex-col\",\n        className\n      )}\n    />\n  )\n}\n\n/**\n * A single resizable region within a {@link ResizablePanelGroup}.\n *\n * @component\n * @layer core\n */\nfunction ResizablePanel({ ...props }: ResizablePrimitive.PanelProps) {\n  return <ResizablePrimitive.Panel data-slot=\"resizable-panel\" {...props} />\n}\n\n/**\n * Draggable divider between two {@link ResizablePanel}s. Set `withHandle` to\n * render a visible grip affordance centered on the divider.\n *\n * @component\n * @layer core\n */\nfunction ResizableHandle({\n  withHandle,\n  className,\n  surface,\n  radius,\n  animated,\n  iconWeight,\n  ...props\n}: ResizablePrimitive.SeparatorProps & {\n  /** Render a visible grip affordance centered on the handle. */\n  withHandle?: boolean\n} & SaasflareComponentProps) {\n  const sf = useSaasflareProps({ surface, radius, animated, iconWeight })\n  return (\n    <ResizablePrimitive.Separator\n      data-slot=\"resizable-handle\"\n      data-surface={sf.surface}\n      data-radius={sf.radius}\n      data-animated={String(sf.animated)}\n      className={cn(\n        \"relative flex w-px items-center justify-center bg-border 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-ring focus-visible:ring-offset-1 focus-visible:outline-hidden aria-[orientation=horizontal]:h-px aria-[orientation=horizontal]:w-full aria-[orientation=horizontal]:after:left-0 aria-[orientation=horizontal]:after:h-1 aria-[orientation=horizontal]:after:w-full aria-[orientation=horizontal]:after:translate-x-0 aria-[orientation=horizontal]:after:-translate-y-1/2 [&[aria-orientation=horizontal]>div]:rotate-90\",\n        className\n      )}\n      {...props}\n    >\n      {withHandle && (\n        <div className=\"z-10 flex h-4 w-3 items-center justify-center rounded-xs border bg-border\">\n          <DotsSixVerticalIcon weight={sf.iconWeight} className=\"size-2.5\" />\n        </div>\n      )}\n    </ResizablePrimitive.Separator>\n  )\n}\n\nexport { ResizableHandle, ResizablePanel, ResizablePanelGroup, type ResizablePanelGroupProps }\n",
      "target": "components/ui/resizable.tsx"
    }
  ],
  "$meta": {
    "source": "https://ui.saasflare.io/r/resizable.json"
  }
}
