Files
thrilltrack-explorer/src-old/components/ui/bottom-sheet.tsx

116 lines
3.1 KiB
TypeScript

import * as React from "react"
import { Drawer as DrawerPrimitive } from "vaul"
import { cn } from "@/lib/utils"
const BottomSheet = ({
shouldScaleBackground = true,
...props
}: React.ComponentProps<typeof DrawerPrimitive.Root>) => (
<DrawerPrimitive.Root
shouldScaleBackground={shouldScaleBackground}
{...props}
/>
)
BottomSheet.displayName = "BottomSheet"
const BottomSheetTrigger = DrawerPrimitive.Trigger
const BottomSheetPortal = DrawerPrimitive.Portal
const BottomSheetClose = DrawerPrimitive.Close
const BottomSheetOverlay = React.forwardRef<
React.ElementRef<typeof DrawerPrimitive.Overlay>,
React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Overlay>
>(({ className, ...props }, ref) => (
<DrawerPrimitive.Overlay
ref={ref}
className={cn("fixed inset-0 z-50 bg-background/80 backdrop-blur-sm", className)}
{...props}
/>
))
BottomSheetOverlay.displayName = DrawerPrimitive.Overlay.displayName
const BottomSheetContent = React.forwardRef<
React.ElementRef<typeof DrawerPrimitive.Content>,
React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Content>
>(({ className, children, ...props }, ref) => (
<BottomSheetPortal>
<BottomSheetOverlay />
<DrawerPrimitive.Content
ref={ref}
className={cn(
"fixed inset-x-0 bottom-0 z-50 mt-24 flex h-auto flex-col rounded-t-[10px] border border-border bg-card",
className
)}
{...props}
>
<div className="mx-auto mt-4 h-2 w-[100px] rounded-full bg-muted" />
{children}
</DrawerPrimitive.Content>
</BottomSheetPortal>
))
BottomSheetContent.displayName = "BottomSheetContent"
const BottomSheetHeader = ({
className,
...props
}: React.HTMLAttributes<HTMLDivElement>) => (
<div
className={cn("grid gap-1.5 p-4 text-center sm:text-left", className)}
{...props}
/>
)
BottomSheetHeader.displayName = "BottomSheetHeader"
const BottomSheetFooter = ({
className,
...props
}: React.HTMLAttributes<HTMLDivElement>) => (
<div
className={cn("mt-auto flex flex-col gap-2 p-4", className)}
{...props}
/>
)
BottomSheetFooter.displayName = "BottomSheetFooter"
const BottomSheetTitle = React.forwardRef<
React.ElementRef<typeof DrawerPrimitive.Title>,
React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Title>
>(({ className, ...props }, ref) => (
<DrawerPrimitive.Title
ref={ref}
className={cn(
"text-lg font-semibold leading-none tracking-tight",
className
)}
{...props}
/>
))
BottomSheetTitle.displayName = DrawerPrimitive.Title.displayName
const BottomSheetDescription = React.forwardRef<
React.ElementRef<typeof DrawerPrimitive.Description>,
React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Description>
>(({ className, ...props }, ref) => (
<DrawerPrimitive.Description
ref={ref}
className={cn("text-sm text-muted-foreground", className)}
{...props}
/>
))
BottomSheetDescription.displayName = DrawerPrimitive.Description.displayName
export {
BottomSheet,
BottomSheetPortal,
BottomSheetOverlay,
BottomSheetTrigger,
BottomSheetClose,
BottomSheetContent,
BottomSheetHeader,
BottomSheetFooter,
BottomSheetTitle,
BottomSheetDescription,
}