diff --git a/packages/ui/package.json b/packages/ui/package.json
index 31e65d0bd4..32602956f0 100644
--- a/packages/ui/package.json
+++ b/packages/ui/package.json
@@ -62,7 +62,9 @@
"clsx": "^2.1.1",
"cmdk": "^1.1.1",
"lucide-react": "^0.545.0",
+ "next-themes": "^0.4.6",
"react-dropzone": "^14.3.8",
+ "sonner": "^2.0.7",
"tailwind-merge": "^2.5.5"
},
"devDependencies": {
diff --git a/packages/ui/src/components/primitives/sonner.tsx b/packages/ui/src/components/primitives/sonner.tsx
new file mode 100644
index 0000000000..9f46e06d5c
--- /dev/null
+++ b/packages/ui/src/components/primitives/sonner.tsx
@@ -0,0 +1,38 @@
+import {
+ CircleCheckIcon,
+ InfoIcon,
+ Loader2Icon,
+ OctagonXIcon,
+ TriangleAlertIcon,
+} from "lucide-react"
+import { useTheme } from "next-themes"
+import { Toaster as Sonner, type ToasterProps } from "sonner"
+
+const Toaster = ({ ...props }: ToasterProps) => {
+ const { theme = "system" } = useTheme()
+
+ return (
+ ,
+ info: ,
+ warning: ,
+ error: ,
+ loading: ,
+ }}
+ style={
+ {
+ "--normal-bg": "var(--popover)",
+ "--normal-text": "var(--popover-foreground)",
+ "--normal-border": "var(--border)",
+ "--border-radius": "var(--radius)",
+ } as React.CSSProperties
+ }
+ {...props}
+ />
+ )
+}
+
+export { Toaster }
diff --git a/yarn.lock b/yarn.lock
index e88e1bbe9a..053712671e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2252,9 +2252,11 @@ __metadata:
framer-motion: "npm:^12.23.12"
linguist-languages: "npm:^9.0.0"
lucide-react: "npm:^0.545.0"
+ next-themes: "npm:^0.4.6"
react: "npm:^19.0.0"
react-dom: "npm:^19.0.0"
react-dropzone: "npm:^14.3.8"
+ sonner: "npm:^2.0.7"
storybook: "npm:^10.0.5"
styled-components: "npm:^6.1.15"
tailwind-merge: "npm:^2.5.5"
@@ -23693,6 +23695,16 @@ __metadata:
languageName: node
linkType: hard
+"next-themes@npm:^0.4.6":
+ version: 0.4.6
+ resolution: "next-themes@npm:0.4.6"
+ peerDependencies:
+ react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
+ checksum: 10c0/83590c11d359ce7e4ced14f6ea9dd7a691d5ce6843fe2dc520fc27e29ae1c535118478d03e7f172609c41b1ef1b8da6b8dd2d2acd6cd79cac1abbdbd5b99f2c4
+ languageName: node
+ linkType: hard
+
"no-case@npm:^3.0.4":
version: 3.0.4
resolution: "no-case@npm:3.0.4"
@@ -27901,6 +27913,16 @@ __metadata:
languageName: node
linkType: hard
+"sonner@npm:^2.0.7":
+ version: 2.0.7
+ resolution: "sonner@npm:2.0.7"
+ peerDependencies:
+ react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ checksum: 10c0/6966ab5e892ed6aab579a175e4a24f3b48747f0fc21cb68c3e33cb41caa7a0eebeb098c210545395e47a18d585eb8734ae7dd12d2bd18c8a3294a1ee73f997d9
+ languageName: node
+ linkType: hard
+
"source-map-js@npm:^1.0.1, source-map-js@npm:^1.2.0, source-map-js@npm:^1.2.1":
version: 1.2.1
resolution: "source-map-js@npm:1.2.1"