UNPKG

mt-flowbite-react

Version:

Official React components built for Flowbite and Tailwind CSS

120 lines (119 loc) 5.28 kB
'use client'; import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import * as SheetPrimitive from '@radix-ui/react-dialog'; import { cva } from 'class-variance-authority'; import { X } from 'lucide-react'; import * as React from 'react'; import { cn } from '~/src/lib/utils'; const Sheet = SheetPrimitive.Root; const SheetTrigger = SheetPrimitive.Trigger; const portalVariants = cva('fixed inset-0 z-50 flex', { variants: { position: { top: 'items-start', bottom: 'items-end', left: 'justify-start', right: 'justify-end', }, }, defaultVariants: { position: 'right' }, }); const SheetPortal = ({ position, className, children, ...props }) => (_jsx(SheetPrimitive.Portal, { className: cn(className), ...props, children: _jsx("div", { className: portalVariants({ position }), children: children }) })); SheetPortal.displayName = SheetPrimitive.Portal.displayName; const SheetOverlay = React.forwardRef(({ className, children, ...props }, ref) => (_jsx(SheetPrimitive.Overlay, { className: cn('bg-background/80 data-[state=closed]:animate-out data-[state=closed]:fade-out data-[state=open]:fade-in fixed inset-0 z-50 backdrop-blur-sm transition-all duration-100', className), ...props, ref: ref }))); SheetOverlay.displayName = SheetPrimitive.Overlay.displayName; const sheetVariants = cva('fixed z-50 scale-100 gap-4 bg-background p-6 opacity-100 shadow-lg border', { variants: { position: { top: 'animate-in slide-in-from-top w-full duration-300', bottom: 'animate-in slide-in-from-bottom w-full duration-300', left: 'animate-in slide-in-from-left h-full duration-300', right: 'animate-in slide-in-from-right h-full duration-300', }, size: { content: '', default: '', sm: '', lg: '', xl: '', full: '', }, }, compoundVariants: [ { position: ['top', 'bottom'], size: 'content', class: 'max-h-screen', }, { position: ['top', 'bottom'], size: 'default', class: 'h-1/3', }, { position: ['top', 'bottom'], size: 'sm', class: 'h-1/4', }, { position: ['top', 'bottom'], size: 'lg', class: 'h-1/2', }, { position: ['top', 'bottom'], size: 'xl', class: 'h-5/6', }, { position: ['top', 'bottom'], size: 'full', class: 'h-screen', }, { position: ['right', 'left'], size: 'content', class: 'max-w-screen', }, { position: ['right', 'left'], size: 'default', class: 'w-1/3', }, { position: ['right', 'left'], size: 'sm', class: 'w-1/4', }, { position: ['right', 'left'], size: 'lg', class: 'w-1/2', }, { position: ['right', 'left'], size: 'xl', class: 'w-5/6', }, { position: ['right', 'left'], size: 'full', class: 'w-screen', }, ], defaultVariants: { position: 'right', size: 'default', }, }); const SheetContent = React.forwardRef(({ position, size, className, children, ...props }, ref) => (_jsxs(SheetPortal, { position: position, children: [_jsx(SheetOverlay, {}), _jsxs(SheetPrimitive.Content, { ref: ref, className: cn(sheetVariants({ position, size }), className), ...props, children: [children, _jsxs(SheetPrimitive.Close, { className: "ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:pointer-events-none", children: [_jsx(X, { className: "h-4 w-4" }), _jsx("span", { className: "sr-only", children: "Close" })] })] })] }))); SheetContent.displayName = SheetPrimitive.Content.displayName; const SheetHeader = ({ className, ...props }) => (_jsx("div", { className: cn('flex flex-col space-y-2 text-center sm:text-left', className), ...props })); SheetHeader.displayName = 'SheetHeader'; const SheetFooter = ({ className, ...props }) => (_jsx("div", { className: cn('flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', className), ...props })); SheetFooter.displayName = 'SheetFooter'; const SheetTitle = React.forwardRef(({ className, ...props }, ref) => (_jsx(SheetPrimitive.Title, { ref: ref, className: cn('text-foreground text-lg font-semibold', className), ...props }))); SheetTitle.displayName = SheetPrimitive.Title.displayName; const SheetDescription = React.forwardRef(({ className, ...props }, ref) => (_jsx(SheetPrimitive.Description, { ref: ref, className: cn('text-muted-foreground text-sm', className), ...props }))); SheetDescription.displayName = SheetPrimitive.Description.displayName; export { Sheet, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger };