"use client"; import * as React from "react"; import * as ToastPrimitives from "@radix-ui/react-toast"; import { cva, type VariantProps } from "class-variance-authority"; import { X } from "lucide-react"; import { cn } from "@/lib/utils"; const ToastProvider = ToastPrimitives.Provider; const toastViewportVariants = cva( "fixed z-[100] flex max-h-screen w-full flex-col-reverse p-4 md:max-w-[420px]", { variants: { position: { "top-right": "top-0 right-0", "top-left": "top-0 left-0", "bottom-right": "bottom-0 right-0 flex-col", "bottom-left": "bottom-0 left-0 flex-col", "top-center": "top-0 left-1/2 -translate-x-1/2", "bottom-center": "bottom-0 left-1/2 -translate-x-1/2 flex-col", }, }, defaultVariants: { position: "top-right", }, } ); interface ToastViewportProps extends React.ComponentPropsWithoutRef, VariantProps {} const ToastViewport = React.forwardRef< React.ElementRef, ToastViewportProps >(({ className, position, ...props }, ref) => ( )); ToastViewport.displayName = ToastPrimitives.Viewport.displayName; const toastVariants = cva( "group pointer-events-auto relative flex w-full items-center justify-between space-x-2 overflow-hidden rounded-md border p-4 pr-6 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80", { variants: { variant: { default: "border bg-background text-foreground", destructive: "destructive group border-destructive bg-destructive text-destructive-foreground", success: "border-green-500 bg-green-500 text-white", warning: "border-yellow-500 bg-yellow-500 text-white", info: "border-blue-500 bg-blue-500 text-white", }, position: { "top-right": "data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-right-full", "top-left": "data-[state=closed]:slide-out-to-left-full data-[state=open]:slide-in-from-left-full", "bottom-right": "data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-right-full", "bottom-left": "data-[state=closed]:slide-out-to-left-full data-[state=open]:slide-in-from-left-full", "top-center": "data-[state=closed]:slide-out-to-top-full data-[state=open]:slide-in-from-top-full", "bottom-center": "data-[state=closed]:slide-out-to-bottom-full data-[state=open]:slide-in-from-bottom-full", }, }, defaultVariants: { variant: "default", position: "top-right", }, } ); interface ToastProps extends React.ComponentPropsWithoutRef, VariantProps {} const Toast = React.forwardRef< React.ElementRef, ToastProps >(({ className, variant, position, ...props }, ref) => { return ( ); }); Toast.displayName = ToastPrimitives.Root.displayName; // Rest of the components remain the same const ToastAction = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( )); ToastAction.displayName = ToastPrimitives.Action.displayName; const ToastClose = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( )); ToastClose.displayName = ToastPrimitives.Close.displayName; const ToastTitle = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( )); ToastTitle.displayName = ToastPrimitives.Title.displayName; const ToastDescription = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( )); ToastDescription.displayName = ToastPrimitives.Description.displayName; type ToastActionElement = React.ReactElement; export { type ToastProps, type ToastActionElement, ToastProvider, ToastViewport, Toast, ToastTitle, ToastDescription, ToastClose, ToastAction, };