import * as React from 'react'
import { Drawer, Box, Text, Group } from '@mantine/core'
type SheetSide = 'top' | 'bottom' | 'left' | 'right'
interface SheetProps {
open?: boolean
onOpenChange?: (open: boolean) => void
children: React.ReactNode
}
interface SheetContentProps extends React.ComponentProps<'div'> {
side?: SheetSide
showCloseButton?: boolean
children?: React.ReactNode
}
const SheetContext = React.createContext<{
open: boolean
setOpen: (open: boolean) => void
}>({ open: false, setOpen: () => {} })
function Sheet({ open: controlledOpen, onOpenChange, children }: SheetProps) {
const [internalOpen, setInternalOpen] = React.useState(false)
const open = controlledOpen ?? internalOpen
const setOpen = React.useCallback(
(v: boolean) => {
onOpenChange?.(v)
if (controlledOpen === undefined) setInternalOpen(v)
},
[controlledOpen, onOpenChange],
)
return (
{children}
)
}
function SheetTrigger({ children, ...props }: React.ComponentProps<'button'>) {
const { setOpen } = React.useContext(SheetContext)
return (
)
}
function SheetClose({ children, ...props }: React.ComponentProps<'button'>) {
const { setOpen } = React.useContext(SheetContext)
return (
)
}
function SheetPortal({ children }: { children: React.ReactNode }) {
return <>{children}>
}
function SheetOverlay() {
return null
}
const sizeMap: Record = {
left: 'sm',
right: 'sm',
top: 'md',
bottom: 'md',
}
function SheetContent({ side = 'right', showCloseButton = true, children, className, ...props }: SheetContentProps) {
const { open, setOpen } = React.useContext(SheetContext)
return (
setOpen(false)}
position={side}
withCloseButton={showCloseButton}
size={sizeMap[side]}
padding="md"
data-slot="sheet-content"
className={className}
{...props}
>
{children}
)
}
function SheetHeader({ className, ...props }: React.ComponentProps<'div'>) {
return
}
function SheetFooter({ className, ...props }: React.ComponentProps<'div'>) {
return (
)
}
function SheetTitle({ className, children, ...props }: React.ComponentProps<'div'>) {
return (
{children}
)
}
function SheetDescription({ className, children, ...props }: React.ComponentProps<'div'>) {
return (
{children}
)
}
const sheetVariants = {} as const
export { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, sheetVariants }
export type { SheetContentProps }