"use client"; import { Dialog as DialogPrimitive } from "@base-ui/react/dialog"; import { mergeProps } from "@base-ui/react/merge-props"; import { useRender } from "@base-ui/react/use-render"; import { XIcon } from "lucide-react"; import type React from "react"; import { cn } from "@/lib/utils"; import { Button } from "@/components/ui/button"; import { ScrollArea } from "@/components/ui/scroll-area"; export const DialogCreateHandle: typeof DialogPrimitive.createHandle = DialogPrimitive.createHandle; export const Dialog: typeof DialogPrimitive.Root = DialogPrimitive.Root; export const DialogPortal: typeof DialogPrimitive.Portal = DialogPrimitive.Portal; export function DialogTrigger( props: DialogPrimitive.Trigger.Props, ): React.ReactElement { return ; } export function DialogClose( props: DialogPrimitive.Close.Props, ): React.ReactElement { return ; } export function DialogBackdrop({ className, ...props }: DialogPrimitive.Backdrop.Props): React.ReactElement { return ( ); } export function DialogViewport({ className, ...props }: DialogPrimitive.Viewport.Props): React.ReactElement { return ( ); } export function DialogPopup({ className, children, showCloseButton = true, bottomStickOnMobile = true, closeProps, portalProps, ...props }: DialogPrimitive.Popup.Props & { showCloseButton?: boolean; bottomStickOnMobile?: boolean; closeProps?: DialogPrimitive.Close.Props; portalProps?: DialogPrimitive.Portal.Props; }): React.ReactElement { return ( {children} {showCloseButton && ( } {...closeProps} > )} ); } export function DialogHeader({ className, render, ...props }: useRender.ComponentProps<"div">): React.ReactElement { const defaultProps = { className: cn( "flex flex-col gap-2 p-6 in-[[data-slot=dialog-popup]:has([data-slot=dialog-panel])]:pb-3 max-sm:pb-4", className, ), "data-slot": "dialog-header", }; return useRender({ defaultTagName: "div", props: mergeProps<"div">(defaultProps, props), render, }); } export function DialogFooter({ className, variant = "default", render, ...props }: useRender.ComponentProps<"div"> & { variant?: "default" | "bare"; }): React.ReactElement { const defaultProps = { className: cn( "flex flex-col-reverse gap-2 px-6 sm:flex-row sm:justify-end sm:rounded-b-[calc(var(--radius-2xl)-1px)]", variant === "default" && "border-t bg-muted/72 py-4", variant === "bare" && "in-[[data-slot=dialog-popup]:has([data-slot=dialog-panel])]:pt-3 pt-4 pb-6", className, ), "data-slot": "dialog-footer", }; return useRender({ defaultTagName: "div", props: mergeProps<"div">(defaultProps, props), render, }); } export function DialogTitle({ className, ...props }: DialogPrimitive.Title.Props): React.ReactElement { return ( ); } export function DialogDescription({ className, ...props }: DialogPrimitive.Description.Props): React.ReactElement { return ( ); } export function DialogPanel({ className, scrollFade = true, render, ...props }: useRender.ComponentProps<"div"> & { scrollFade?: boolean; }): React.ReactElement { const defaultProps = { className: cn( "p-6 in-[[data-slot=dialog-popup]:has([data-slot=dialog-header])]:pt-1 in-[[data-slot=dialog-popup]:has([data-slot=dialog-footer]:not(.border-t))]:pb-1", className, ), "data-slot": "dialog-panel", }; return ( {useRender({ defaultTagName: "div", props: mergeProps<"div">(defaultProps, props), render, })} ); } export { DialogPrimitive, DialogBackdrop as DialogOverlay, DialogPopup as DialogContent, };