registry:component
Toast
v1.0.0ga
Application toast provider and hook for transient notifications.
Registry Endpoint
Open JSONhttps://registry.aavya.com/r/ui-toast.json
npx shadcn@latest add https://registry.aavya.com/r/ui-toast.json
Live Preview
Toast Provider
This app includes a context-based toast provider via `useToast`.
Usage Snippet
import Toast from '@/components/ui/toast.tsx'
export default function Example() {
return (
<div className="p-6">
<Toast />
</div>
)
}
Source Preview
'use client'
import * as React from 'react'
import * as ToastPrimitives from '@radix-ui/react-toast'
import { cva, type VariantProps } from 'class-variance-authority'
import { cn } from '@/lib/utils'
import { X } from 'lucide-react'
export interface Toast {
id: string
title?: string
description?: string
variant?: 'default' | 'destructive'
}
interface ToastContextValue {
toasts: Toast[]
addToast: (toast: Omit<Toast, 'id'>) => void
removeToast: (id: string) => void
}
const ToastContext = React.createContext<ToastContextValue | undefined>(undefined)
export function ToastProvider({ children }: { children: React.ReactNode }) {
const [toasts, setToasts] = React.useState<Toast[]>([])
const addToast = React.useCallback((toast: Omit<Toast, 'id'>) => {
const id = crypto.randomUUID()
setToasts((prev) => [...prev, { ...toast, id }])
// Auto-dismiss after 5 seconds
setTimeout(() => {
setToasts((prev) => prev.filter((t) => t.id !== id))
}, 5000)
}, [])
const removeToast = React.useCallback((id: string) => {
setToasts((prev) => prev.filter((t) => t.id !== id))
}, [])
return (
<ToastContext.Provider value={{ toasts, addToast, removeToast }}>
<ToastPrimitives.Provider swipeDirection="right">
{children}
{toasts.map((toast) => (
<ToastRoot
key={toast.id}
open
var