/* Copyright 2026 Marimo. All rights reserved. */ import { cva, type VariantProps } from "class-variance-authority"; import { X } from "lucide-react"; import { Toast as ToastPrimitives } from "radix-ui"; import * as React from "react"; import { cn } from "@/utils/cn"; const ToastProvider = ToastPrimitives.Provider; const ToastViewport = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( )); ToastViewport.displayName = ToastPrimitives.Viewport.displayName; const VARIANT_CLASSES = { default: "bg-background border", danger: "group destructive text-error border-destructive bg-(--red-1) shadow-md-solid shadow-error", } as const satisfies Record; type ToastVariant = keyof typeof VARIANT_CLASSES; const toastVariants = cva( "data-[swipe=move]:transition-none group relative pointer-events-auto flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-6 pr-8 shadow-lg transition-all data-[swipe=move]:translate-x-(--radix-toast-swipe-move-x) data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-(--radix-toast-swipe-end-x) data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=open]:slide-in-from-top-full sm:data-[state=open]:slide-in-from-bottom-full data-[state=closed]:slide-out-to-right-full", { variants: { variant: VARIANT_CLASSES, }, defaultVariants: { variant: "default" satisfies ToastVariant, }, }, ); function isToastVariant(value: unknown): value is ToastVariant { return typeof value === "string" && value in VARIANT_CLASSES; } const Toast = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef & VariantProps >(({ className, variant, ...props }, ref) => { const resolvedVariant = isToastVariant(variant) ? variant : "default"; return ( ); }); Toast.displayName = ToastPrimitives.Root.displayName; 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 ToastProps = React.ComponentPropsWithoutRef; type ToastActionElement = React.ReactElement< React.ComponentProps >; export { type ToastProps, type ToastActionElement, ToastProvider, ToastViewport, Toast, ToastTitle, ToastDescription, ToastClose, ToastAction, };