From 442fc96693b7f5f7368e9474884e9c1a424d3c38 Mon Sep 17 00:00:00 2001 From: summerdev96 Date: Thu, 31 Jul 2025 20:58:54 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20shadCn=20sonner=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80,=20app=20=ED=8E=98=EC=9D=B4=EC=A7=80=20Toaster=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 20 ++++++++++++++++++++ package.json | 2 ++ src/components/ui/sonner.tsx | 29 +++++++++++++++++++++++++++++ src/pages/_app.tsx | 21 +++++++++++++++++++++ 4 files changed, 72 insertions(+) create mode 100644 src/components/ui/sonner.tsx diff --git a/package-lock.json b/package-lock.json index ac0eef6..ad2657c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,9 +24,11 @@ "clsx": "^2.1.1", "embla-carousel-react": "^8.6.0", "lucide-react": "^0.525.0", + "next-themes": "^0.4.6", "react": "^18", "react-dom": "^18", "react-hook-form": "^7.59.0", + "sonner": "^2.0.6", "tailwind-merge": "^3.3.1", "tailwindcss-animate": "^1.0.7", "use-sync-external-store": "^1.5.0", @@ -8324,6 +8326,15 @@ } } }, + "node_modules/next-themes": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.4.6.tgz", + "integrity": "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==", + "peerDependencies": { + "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" + } + }, "node_modules/next/node_modules/postcss": { "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", @@ -9760,6 +9771,15 @@ "tslib": "^2.0.3" } }, + "node_modules/sonner": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/sonner/-/sonner-2.0.6.tgz", + "integrity": "sha512-yHFhk8T/DK3YxjFQXIrcHT1rGEeTLliVzWbO0xN8GberVun2RiBnxAjXAYpZrqwEVHBG9asI/Li8TAAhN9m59Q==", + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", diff --git a/package.json b/package.json index 0855757..3a69253 100644 --- a/package.json +++ b/package.json @@ -29,9 +29,11 @@ "clsx": "^2.1.1", "embla-carousel-react": "^8.6.0", "lucide-react": "^0.525.0", + "next-themes": "^0.4.6", "react": "^18", "react-dom": "^18", "react-hook-form": "^7.59.0", + "sonner": "^2.0.6", "tailwind-merge": "^3.3.1", "tailwindcss-animate": "^1.0.7", "use-sync-external-store": "^1.5.0", diff --git a/src/components/ui/sonner.tsx b/src/components/ui/sonner.tsx new file mode 100644 index 0000000..b52d2fe --- /dev/null +++ b/src/components/ui/sonner.tsx @@ -0,0 +1,29 @@ +import React from 'react'; + +import { useTheme } from 'next-themes'; +import { Toaster as Sonner } from 'sonner'; + +type ToasterProps = React.ComponentProps; + +const Toaster = ({ ...props }: ToasterProps) => { + const { theme = 'system' } = useTheme(); + + return ( + + ); +}; + +export { Toaster }; diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 87f1614..bff307c 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -6,10 +6,12 @@ import { HydrationBoundary, QueryClient, QueryClientProvider } from '@tanstack/r import clsx from 'clsx'; import Head from 'next/head'; import { useRouter } from 'next/router'; +import { toast, Toaster } from 'sonner'; import ErrorBoundary from '@/components/common/ErrorBoundary'; import Gnb from '@/components/common/Gnb'; import { LoadingOverlay } from '@/components/common/LoadingOverlay'; +import { Button } from '@/components/ui/button'; import { useInitUser } from '@/hooks/useInitUser'; import type { AppProps } from 'next/app'; @@ -39,6 +41,16 @@ export default function App({ Component, pageProps }: AppProps) { + {!hideHeader && } @@ -50,6 +62,15 @@ export default function App({ Component, pageProps }: AppProps) { })} > + From 02194161dd0eda3ba6d31b599a51d5f20121c97b Mon Sep 17 00:00:00 2001 From: summerdev96 Date: Thu, 31 Jul 2025 21:02:12 +0900 Subject: [PATCH 2/2] =?UTF-8?q?chore:=20app=20=ED=8E=98=EC=9D=B4=EC=A7=80?= =?UTF-8?q?=20=EB=82=B4=20=ED=86=A0=EC=8A=A4=ED=8A=B8=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/_app.tsx | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index bff307c..0ca1000 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -6,12 +6,11 @@ import { HydrationBoundary, QueryClient, QueryClientProvider } from '@tanstack/r import clsx from 'clsx'; import Head from 'next/head'; import { useRouter } from 'next/router'; -import { toast, Toaster } from 'sonner'; +import { Toaster } from 'sonner'; import ErrorBoundary from '@/components/common/ErrorBoundary'; import Gnb from '@/components/common/Gnb'; import { LoadingOverlay } from '@/components/common/LoadingOverlay'; -import { Button } from '@/components/ui/button'; import { useInitUser } from '@/hooks/useInitUser'; import type { AppProps } from 'next/app'; @@ -62,15 +61,6 @@ export default function App({ Component, pageProps }: AppProps) { })} > -