Drawer
solid-ui/drawerFreeComponent
A drawer component
Live preview
live · rendered by the registry
Rendered by solid-ui on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://www.solid-ui.com/r/drawer.jsonSource
1import type { Component, ComponentProps, JSX, ValidComponent } from "solid-js"2import { splitProps } from "solid-js"34import type {5 ContentProps,6 DescriptionProps,7 DynamicProps,8 LabelProps,9 OverlayProps10} from "@corvu/drawer"11import DrawerPrimitive from "@corvu/drawer"1213import { cn } from "~/lib/utils"1415const Drawer = DrawerPrimitive1617const DrawerTrigger = DrawerPrimitive.Trigger1819const DrawerPortal = DrawerPrimitive.Portal2021const DrawerClose = DrawerPrimitive.Close2223type DrawerOverlayProps<T extends ValidComponent = "div"> = OverlayProps<T> & { class?: string }2425const DrawerOverlay = <T extends ValidComponent = "div">(26 props: DynamicProps<T, DrawerOverlayProps<T>>27) => {28 const [, rest] = splitProps(props as DrawerOverlayProps, ["class"])29 const drawerContext = DrawerPrimitive.useContext()30 return (31 <DrawerPrimitive.Overlay32 class={cn(33 "fixed inset-0 z-50 data-[transitioning]:transition-colors data-[transitioning]:duration-300",34 props.class35 )}36 style={{37 "background-color": `rgb(0 0 0 / ${0.8 * drawerContext.openPercentage()})`38 }}39 {...rest}40 />41 )42}4344type DrawerContentProps<T extends ValidComponent = "div"> = ContentProps<T> & {45 class?: string46 children?: JSX.Element47}4849const DrawerContent = <T extends ValidComponent = "div">(50 props: DynamicProps<T, DrawerContentProps<T>>51) => {52 const [, rest] = splitProps(props as DrawerContentProps, ["class", "children"])53 return (54 <DrawerPortal>55 <DrawerOverlay />56 <DrawerPrimitive.Content57 class={cn(58 "fixed inset-x-0 bottom-0 z-50 mt-24 flex h-auto flex-col rounded-t-[10px] border bg-background after:absolute after:inset-x-0 after:top-full after:h-1/2 after:bg-inherit data-[transitioning]:transition-transform data-[transitioning]:duration-300 md:select-none",59 props.class60 )}61 {...rest}62 >63 <div class="mx-auto mt-4 h-2 w-[100px] rounded-full bg-muted" />64 {props.children}65 </DrawerPrimitive.Content>66 </DrawerPortal>67 )68}6970const DrawerHeader: Component<ComponentProps<"div">> = (props) => {71 const [, rest] = splitProps(props, ["class"])72 return <div class={cn("grid gap-1.5 p-4 text-center sm:text-left", props.class)} {...rest} />73}7475const DrawerFooter: Component<ComponentProps<"div">> = (props) => {76 const [, rest] = splitProps(props, ["class"])77 return <div class={cn("t-auto flex flex-col gap-2 p-4", props.class)} {...rest} />78}7980// … truncated
What it pulls in
npm packages
Files it writes
More from solid-ui
All 55 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Accordionaccordion | solid-ui | Components | Free | 2 deps | |
| Alertalert | solid-ui | Components | Free | 3 deps | |
| Alert Dialogalert-dialog | solid-ui | Components | Free | 2 deps | |
| Aspect Ratioaspect-ratio | solid-ui | Components | Free | 1 dep | |
| Avataravatar | solid-ui | Components | Free | 2 deps | |
| Badgebadge | solid-ui | Components | Free | 2 deps | |
| Badge Deltabadge-delta | solid-ui | Components | Free | 2 deps | |
| Bar Listbar-list | solid-ui | Components | Free | 1 dep |
