/** * Sheet — WealthX DS overrides (shadcn / base-ui dialog) * * Changes from shadcn default: * - SheetOverlay: `bg-black/50` -- `bg-foreground/50` — DS foreground token (matches Figma) * - SheetContent: `shadow-lg` removed — flat panels per Figma * - SheetTitle: added `text-lg` — matches Figma Text-lg/Semibold * - Close button: matches DialogClose — no radius, `hover:bg-foreground/5`, `focus:ring-border` */ import { type ReactElement } from "react"; import * as React from "react"; import { XIcon } from "lucide-react"; import { Dialog as SheetPrimitive } from "@base-ui/react/dialog"; import { cn } from "@/lib/utils"; import { asChildProps } from "@/lib/as-child"; import { useThemeVars } from "@/lib/theme-provider"; // --------------------------------------------------------------------------- // Side-specific panel classes // --------------------------------------------------------------------------- const SIDE_CLASSES = { right: "inset-y-0 right-0 h-full w-1/2 border-l data-ending-style:slide-out-to-right data-open:slide-in-from-right", left: "inset-y-0 left-0 h-full w-1/2 border-r data-ending-style:slide-out-to-left data-open:slide-in-from-left", top: "inset-x-0 top-0 h-auto border-b data-ending-style:slide-out-to-top data-open:slide-in-from-top", bottom: "inset-x-0 bottom-0 h-auto border-t data-ending-style:slide-out-to-bottom data-open:slide-in-from-bottom", } satisfies Record; // --------------------------------------------------------------------------- // Components // --------------------------------------------------------------------------- export type SheetProps = React.ComponentProps; function Sheet({ ...props }: SheetProps): ReactElement { return ; } export type SheetTriggerProps = React.ComponentProps< typeof SheetPrimitive.Trigger > & { /** shadcn-compatible alias for Base UI's `render`: replaces the trigger with its single child. */ asChild?: boolean; }; function SheetTrigger({ asChild, children, ...props }: SheetTriggerProps): ReactElement { return ( ); } export type SheetCloseProps = React.ComponentProps; function SheetClose({ ...props }: SheetCloseProps): ReactElement { return ; } export type SheetPortalProps = React.ComponentProps< typeof SheetPrimitive.Portal >; function SheetPortal({ ...props }: SheetPortalProps): ReactElement { return ; } function SheetOverlay({ className, ...props }: React.ComponentProps): ReactElement { return ( ); } export type SheetContentProps = React.ComponentProps< typeof SheetPrimitive.Popup > & { side?: keyof typeof SIDE_CLASSES; showCloseButton?: boolean; }; function SheetContent({ className, children, side = "right", showCloseButton = true, style, ...props }: SheetContentProps): ReactElement { const themeVars = useThemeVars(); return ( {children} {showCloseButton ? ( Close ) : null} ); } export type SheetHeaderProps = React.ComponentProps<"div">; function SheetHeader({ className, ...props }: SheetHeaderProps): ReactElement { return (
); } export type SheetFooterProps = React.ComponentProps<"div">; function SheetFooter({ className, ...props }: SheetFooterProps): ReactElement { return (
); } export type SheetTitleProps = React.ComponentProps; function SheetTitle({ className, ...props }: SheetTitleProps): ReactElement { return ( ); } export type SheetDescriptionProps = React.ComponentProps< typeof SheetPrimitive.Description >; function SheetDescription({ className, ...props }: SheetDescriptionProps): ReactElement { return ( ); } export { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetPortal, SheetTitle, SheetTrigger, };