{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "drawer", "title": "Drawer", "description": "Terminal-style bottom drawer built on Vaul: border-top structure, subtle slide from bottom, no radius/shadow, focus-first interactions.", "dependencies": [ "vaul" ], "registryDependencies": [ "utils", "theme-catppuccin-mocha", "font-jetbrains-mono" ], "files": [ { "path": "registry/ui/drawer.tsx", "content": "import * as React from \"react\";\nimport { Drawer as DrawerPrimitive } from \"vaul\";\nimport { cn } from \"@/lib/utils\";\n\nfunction Drawer({\n\tshouldScaleBackground = false,\n\t...props\n}: React.ComponentProps) {\n\treturn (\n\t\t\n\t);\n}\n\nfunction DrawerTrigger({\n\t...props\n}: React.ComponentProps) {\n\treturn ;\n}\n\nfunction DrawerPortal({\n\t...props\n}: React.ComponentProps) {\n\treturn ;\n}\n\nfunction DrawerClose({\n\t...props\n}: React.ComponentProps) {\n\treturn ;\n}\n\nfunction DrawerOverlay({\n\tclassName,\n\t...props\n}: React.ComponentProps) {\n\treturn (\n\t\t\n\t);\n}\n\nfunction DrawerContent({\n\tclassName,\n\tchildren,\n\t...props\n}: React.ComponentProps) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t{children}\n\t\t\t\n\t\t\n\t);\n}\n\nfunction DrawerHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n\treturn (\n\t\t\n\t);\n}\n\nfunction DrawerFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n\treturn (\n\t\t\n\t);\n}\n\nfunction DrawerTitle({\n\tclassName,\n\tchildren,\n\t...props\n}: React.ComponentProps) {\n\treturn (\n\t\t\n\t\t\t{children}\n\t\t\n\t);\n}\n\nfunction DrawerDescription({\n\tclassName,\n\t...props\n}: React.ComponentProps) {\n\treturn (\n\t\t\n\t);\n}\n\nexport {\n\tDrawer,\n\tDrawerPortal,\n\tDrawerOverlay,\n\tDrawerTrigger,\n\tDrawerClose,\n\tDrawerContent,\n\tDrawerHeader,\n\tDrawerFooter,\n\tDrawerTitle,\n\tDrawerDescription,\n};\n", "type": "registry:ui" } ], "cssVars": { "theme": { "--termcn-slide-offset": "1rem" } }, "css": { "@keyframes termcn-fade": { "from": { "opacity": "0" }, "to": { "opacity": "1" } }, "@keyframes termcn-fade-out": { "from": { "opacity": "1" }, "to": { "opacity": "0" } }, "@keyframes termcn-slide-in-from-bottom": { "from": { "opacity": "0", "transform": "translateY(var(--termcn-slide-offset))" }, "to": { "opacity": "1", "transform": "translateY(0)" } }, "@keyframes termcn-slide-out-to-bottom": { "from": { "opacity": "1", "transform": "translateY(0)" }, "to": { "opacity": "0", "transform": "translateY(var(--termcn-slide-offset))" } } }, "type": "registry:ui" }