import * as React from "react" import { View } from "@tarojs/components" import { cn } from "@/lib/utils" import { Portal } from "@/components/ui/portal" const DrawerContext = React.createContext<{ open?: boolean onOpenChange?: (open: boolean) => void } | null>(null) interface DrawerProps extends React.ComponentPropsWithoutRef { shouldScaleBackground?: boolean open?: boolean defaultOpen?: boolean onOpenChange?: (open: boolean) => void } const Drawer = ({ shouldScaleBackground = true, children, open: openProp, defaultOpen, onOpenChange, ...props }: DrawerProps) => { const [openState, setOpenState] = React.useState(defaultOpen || false) const open = openProp !== undefined ? openProp : openState const handleOpenChange = (newOpen: boolean) => { if (openProp === undefined) { setOpenState(newOpen) } onOpenChange?.(newOpen) } return ( {children} ) } Drawer.displayName = "Drawer" const DrawerTrigger = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef & { asChild?: boolean } >(({ className, children, asChild, ...props }, ref) => { const context = React.useContext(DrawerContext) return ( { e.stopPropagation() context?.onOpenChange?.(true) }} {...props} > {children} ) }) DrawerTrigger.displayName = "DrawerTrigger" const DrawerPortal = ({ children }: { children: React.ReactNode }) => { const context = React.useContext(DrawerContext) if (!context?.open) return null return {children} } const DrawerClose = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef & { asChild?: boolean } >(({ className, children, asChild, ...props }, ref) => { const context = React.useContext(DrawerContext) return ( { e.stopPropagation() context?.onOpenChange?.(false) }} {...props} > {children} ) }) DrawerClose.displayName = "DrawerClose" const DrawerOverlay = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => { const context = React.useContext(DrawerContext) return ( context?.onOpenChange?.(false)} {...props} /> ) }) DrawerOverlay.displayName = "DrawerOverlay" const DrawerContent = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, children, ...props }, ref) => ( {children} )) DrawerContent.displayName = "DrawerContent" const DrawerHeader = ({ className, ...props }: React.ComponentPropsWithoutRef) => ( ) DrawerHeader.displayName = "DrawerHeader" const DrawerFooter = ({ className, ...props }: React.ComponentPropsWithoutRef) => ( ) DrawerFooter.displayName = "DrawerFooter" const DrawerTitle = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( )) DrawerTitle.displayName = "DrawerTitle" const DrawerDescription = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( )) DrawerDescription.displayName = "DrawerDescription" export { Drawer, DrawerPortal, DrawerOverlay, DrawerTrigger, DrawerClose, DrawerContent, DrawerHeader, DrawerFooter, DrawerTitle, DrawerDescription, }