sonner.tsx 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. "use client";
  2. import {
  3. CircleCheckIcon,
  4. InfoIcon,
  5. Loader2Icon,
  6. OctagonXIcon,
  7. TriangleAlertIcon,
  8. } from "lucide-react";
  9. import { useTheme } from "next-themes";
  10. import { Toaster as Sonner, type ToasterProps } from "sonner";
  11. const Toaster = ({ ...props }: ToasterProps) => {
  12. const { theme = "system" } = useTheme();
  13. return (
  14. <Sonner
  15. theme={theme as ToasterProps["theme"]}
  16. className="toaster group"
  17. icons={{
  18. success: <CircleCheckIcon className="size-4" />,
  19. info: <InfoIcon className="size-4" />,
  20. warning: <TriangleAlertIcon className="size-4" />,
  21. error: <OctagonXIcon className="size-4" />,
  22. loading: <Loader2Icon className="size-4 animate-spin" />,
  23. }}
  24. style={
  25. {
  26. "--normal-bg": "var(--popover)",
  27. "--normal-text": "var(--popover-foreground)",
  28. "--normal-border": "var(--border)",
  29. "--border-radius": "var(--radius)",
  30. } as React.CSSProperties
  31. }
  32. {...props}
  33. />
  34. );
  35. };
  36. export { Toaster };