Toast
adn-ui/toastFreeComponent
Toast notification primitive built with Base UI for generating toast messages.
Live preview
live · rendered by the registry
Rendered by adn-ui on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://ui.awaiden.com/r/toast.jsonSource
1"use client";23import "./toast.css";4import { Toast as BaseToast } from "@base-ui/react/toast";5import React from "react";6import { cn } from "tailwind-variants";78import { ToastContext, useToastContext } from "./toast.context";9import { toastVariants, type ToastVariants } from "./toast.variants";1011export type ToastProviderProps = React.ComponentProps<typeof BaseToast.Provider> & {12 /**13 * Whether to render the default toast viewport and list automatically.14 * @default true15 */16 defaultViewport?: boolean;17};1819function DefaultToastList() {20 const { toasts } = BaseToast.useToastManager();2122 if (!toasts || toasts.length === 0) return null;2324 return (25 <ToastPortal>26 <ToastViewport>27 {toasts.map((toast) => (28 <ToastRoot key={toast.id} toast={toast} variant={(toast as any).variant ?? "default"}>29 <ToastContent>30 <div className="flex flex-col gap-1">31 {toast.title && <ToastTitle>{toast.title}</ToastTitle>}32 {toast.description && <ToastDescription>{toast.description}</ToastDescription>}33 </div>34 <ToastClose />35 </ToastContent>36 </ToastRoot>37 ))}38 </ToastViewport>39 </ToastPortal>40 );41}4243export const ToastProvider = ({44 children,45 defaultViewport = true,46 ...props47}: ToastProviderProps) => {48 return (49 <BaseToast.Provider {...props}>50 {children}51 {defaultViewport && <DefaultToastList />}52 </BaseToast.Provider>53 );54};5556export type ToastPortalProps = React.ComponentProps<typeof BaseToast.Portal>;5758export const ToastPortal = (props: ToastPortalProps) => {59 return <BaseToast.Portal {...props} />;60};6162export type ToastViewportProps = React.ComponentProps<typeof BaseToast.Viewport>;6364export const ToastViewport = ({ className, ...props }: ToastViewportProps) => {65 const slots = toastVariants();66 return <BaseToast.Viewport className={cn(slots.viewport(), className)} {...props} />;67};6869export type ToastRootProps = ToastVariants & React.ComponentProps<typeof BaseToast.Root>;7071export const ToastRoot = ({ children, className, variant, ...props }: ToastRootProps) => {72 const slots = toastVariants({ variant });7374 return (75 <ToastContext.Provider value={{ slots }}>76 <BaseToast.Root className={cn(slots.root(), className)} {...props}>77 {children}78 </BaseToast.Root>79 </ToastContext.Provider>80 );81};8283export type ToastContentProps = React.ComponentProps<typeof BaseToast.Content>;8485// … truncated
What it pulls in
npm packages
Files it writes
More from adn-ui
All 46 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Accordionaccordion | adn-ui | Components | Free | 2 deps · 5 files | |
| Alert Dialogalert-dialog | adn-ui | Components | Free | 2 deps · 5 files | |
| Aspect Ratioaspect-ratio | adn-ui | Components | Free | 1 dep · 5 files | |
| Autocompleteautocomplete | adn-ui | Components | Free | 2 deps · 5 files | |
| Avataravatar | adn-ui | Components | Free | 2 deps · 5 files | |
| Badgebadge | adn-ui | Components | Free | 1 dep · 5 files | |
| Breadcrumbbreadcrumb | adn-ui | Components | Free | 1 dep · 5 files | |
| Buttonbutton | adn-ui | Components | Free | 1 dep · 4 files |
