{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "toast",
  "title": "Toast",
  "description": "A provider-driven notification system with a global hook, queued announcements, actions, and swipe dismissal.",
  "dependencies": [
    "@base-ui/react",
    "lucide-react"
  ],
  "files": [
    {
      "path": "registry/rivetui/components/toast/toast.tsx",
      "content": "\"use client\";\n\nimport { Toast as ToastPrimitive } from \"@base-ui/react/toast\";\nimport { X } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\n\nfunction ToastProvider(props: ToastPrimitive.Provider.Props) {\n  return <ToastPrimitive.Provider {...props} />;\n}\n\nfunction Toast({ className, ...props }: ToastPrimitive.Root.Props) {\n  return (\n    <ToastPrimitive.Root\n      data-slot=\"toast\"\n      className={cn(\n        \"group/toast absolute right-0 bottom-0 z-[calc(1000-var(--toast-index))] w-full origin-bottom border border-border bg-background text-foreground outline-none [--gap:0.5rem] [--height:var(--toast-frontmost-height,var(--toast-height))] [--offset-y:calc(var(--toast-offset-y)*-1+calc(var(--toast-index)*var(--gap)*-1)+var(--toast-swipe-movement-y))] [--peek:0.5rem] [--scale:calc(max(0,1-(var(--toast-index)*0.06)))] [--shrink:calc(1-var(--scale))] [transform:translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)-(var(--toast-index)*var(--peek))-(var(--shrink)*var(--height))))_scale(var(--scale))] after:absolute after:top-full after:left-0 after:h-[calc(var(--gap)+1px)] after:w-full after:content-[''] focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/40 data-expanded:h-(--toast-height) data-expanded:[transform:translateX(var(--toast-swipe-movement-x))_translateY(var(--offset-y))] data-limited:opacity-0 data-ending-style:opacity-0 data-starting-style:translate-y-[calc(100%+1rem)] data-[type=error]:border-destructive/50 h-(--height) transition-[transform,opacity,height] duration-200 select-none motion-reduce:transition-none\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction ToastViewport({ className, ...props }: ToastPrimitive.Viewport.Props) {\n  return (\n    <ToastPrimitive.Portal>\n      <ToastPrimitive.Viewport\n        data-slot=\"toast-viewport\"\n        className={cn(\n          \"fixed right-4 bottom-4 z-50 w-[calc(100vw-2rem)] max-w-sm outline-none sm:right-6 sm:bottom-6\",\n          className,\n        )}\n        {...props}\n      />\n    </ToastPrimitive.Portal>\n  );\n}\n\nfunction ToastContent({ className, ...props }: ToastPrimitive.Content.Props) {\n  return (\n    <ToastPrimitive.Content\n      data-slot=\"toast-content\"\n      className={cn(\n        \"flex min-h-20 items-start gap-3 overflow-hidden p-4 transition-opacity duration-150 data-behind:opacity-0 data-expanded:opacity-100 motion-reduce:transition-none\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction ToastTitle({ className, ...props }: ToastPrimitive.Title.Props) {\n  return (\n    <ToastPrimitive.Title\n      data-slot=\"toast-title\"\n      className={cn(\"text-sm font-semibold leading-none tracking-tight\", className)}\n      {...props}\n    />\n  );\n}\n\nfunction ToastDescription({ className, ...props }: ToastPrimitive.Description.Props) {\n  return (\n    <ToastPrimitive.Description\n      data-slot=\"toast-description\"\n      className={cn(\"mt-1.5 text-sm leading-relaxed text-muted-foreground\", className)}\n      {...props}\n    />\n  );\n}\n\nfunction ToastAction({ className, ...props }: ToastPrimitive.Action.Props) {\n  return (\n    <ToastPrimitive.Action\n      data-slot=\"toast-action\"\n      className={cn(\n        \"inline-flex h-8 shrink-0 items-center justify-center border border-border bg-background px-3 text-xs font-medium outline-none transition-[background-color,border-color,box-shadow] duration-100 hover:bg-muted focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/40 motion-reduce:transition-none\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction ToastClose({\n  className,\n  children,\n  \"aria-label\": ariaLabel = \"Dismiss notification\",\n  ...props\n}: ToastPrimitive.Close.Props) {\n  return (\n    <ToastPrimitive.Close\n      data-slot=\"toast-close\"\n      aria-label={ariaLabel}\n      className={cn(\n        \"inline-flex size-8 shrink-0 items-center justify-center border border-transparent text-muted-foreground outline-none transition-[background-color,border-color,box-shadow,color] duration-100 hover:border-border hover:bg-muted hover:text-foreground focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/40 motion-reduce:transition-none\",\n        className,\n      )}\n      {...props}\n    >\n      {children ?? <X className=\"size-4\" aria-hidden=\"true\" />}\n    </ToastPrimitive.Close>\n  );\n}\n\nfunction Toaster() {\n  const { toasts } = ToastPrimitive.useToastManager();\n\n  return (\n    <ToastViewport>\n      {toasts.map((toast) => (\n        <Toast key={toast.id} toast={toast}>\n          <ToastContent>\n            <span\n              className=\"mt-1 size-2 shrink-0 bg-foreground group-data-[type=error]/toast:bg-destructive group-data-[type=success]/toast:bg-emerald-600 group-data-[type=warning]/toast:bg-amber-600\"\n              aria-hidden=\"true\"\n            />\n            <div className=\"min-w-0 flex-1\">\n              <ToastTitle />\n              <ToastDescription />\n            </div>\n            {toast.actionProps ? <ToastAction {...toast.actionProps} /> : null}\n            <ToastClose />\n          </ToastContent>\n        </Toast>\n      ))}\n    </ToastViewport>\n  );\n}\n\nconst useToast = ToastPrimitive.useToastManager;\n\nexport {\n  Toast,\n  ToastAction,\n  ToastClose,\n  ToastContent,\n  ToastDescription,\n  Toaster,\n  ToastProvider,\n  ToastTitle,\n  ToastViewport,\n  useToast,\n};\n",
      "type": "registry:ui"
    }
  ],
  "type": "registry:ui"
}