{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "toast", "title": "Toast", "description": "A neumorphic toast notification system.", "dependencies": [ "@base-ui/react", "@phosphor-icons/react", "class-variance-authority" ], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/toast.tsx", "content": "\"use client\";\n\nimport { Toast as BaseToast } from \"@base-ui/react/toast\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { CheckCircle, Info, Warning, X, XCircle } from \"@phosphor-icons/react\";\nimport type { ComponentProps, ReactNode } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nconst toastManager = BaseToast.createToastManager();\n\nfunction ToastProvider({ children }: { children: ReactNode }) {\n return (\n \n {children}\n \n );\n}\n\nconst ToastPortal = BaseToast.Portal;\n\nfunction useToast() {\n return BaseToast.useToastManager();\n}\n\nfunction ToastViewport({\n className,\n ...props\n}: ComponentProps) {\n return (\n \n );\n}\n\nconst toastVariants = cva(\n [\n \"group pointer-events-auto absolute bottom-0 left-0 right-0 flex w-full items-start gap-3 overflow-hidden rounded-xl border bg-surface p-4 shadow-neu\",\n \"transition-all duration-300 ease-out\",\n \"z-[calc(100-var(--toast-index))]\",\n \"translate-y-[calc(var(--toast-index)*8px)]\",\n \"scale-[calc(1-var(--toast-index)*0.05)]\",\n \"origin-top\",\n \"data-[expanded]:translate-y-[calc((var(--toast-offset-y)*-1)-(var(--toast-index)*12px))]\",\n \"data-[expanded]:scale-100\",\n \"data-[swipe-direction]:transition-transform\",\n \"data-[starting-style]:opacity-0 data-[starting-style]:translate-y-full\",\n \"data-[ending-style]:opacity-0 data-[ending-style]:translate-y-full\",\n ],\n {\n variants: {\n variant: {\n default: \"border-foreground/10\",\n success: \"border-success/30\",\n error: \"border-destructive/30\",\n warning: \"border-warning/30\",\n info: \"border-primary/30\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nconst variantIcons: Record = {\n default: null,\n success: (\n \n ),\n error: ,\n warning: ,\n info: ,\n};\n\nexport type ToastRootProps = ComponentProps &\n VariantProps;\n\nfunction ToastRoot({\n className,\n variant = \"default\",\n children,\n ...props\n}: ToastRootProps) {\n return (\n \n {variantIcons[variant ?? \"default\"]}\n \n {children}\n \n \n );\n}\n\nfunction ToastTitle({\n className,\n ...props\n}: ComponentProps) {\n return (\n \n );\n}\n\nfunction ToastDescription({\n className,\n ...props\n}: ComponentProps) {\n return (\n \n );\n}\n\nfunction ToastClose({\n className,\n ...props\n}: ComponentProps) {\n return (\n \n \n Close\n \n );\n}\n\nfunction ToastAction({\n className,\n ...props\n}: ComponentProps) {\n return (\n \n );\n}\n\nexport {\n toastManager,\n ToastProvider,\n ToastPortal,\n ToastViewport,\n ToastRoot,\n ToastTitle,\n ToastDescription,\n ToastClose,\n ToastAction,\n useToast,\n toastVariants,\n};\n", "type": "registry:ui" } ], "type": "registry:ui" }