From 355abb86c52c0f99020027b1515eff1d44b0cc38 Mon Sep 17 00:00:00 2001 From: ANDEV09 Date: Sun, 15 Mar 2026 03:57:09 +0700 Subject: [PATCH] feat: add dark mode theme system with smooth transition --- package-lock.json | 11 ++ package.json | 1 + src/app/page.tsx | 72 ++++++----- src/components/common/theme-provider.tsx | 8 ++ src/components/common/theme-toggle.tsx | 23 ++++ src/components/common/ui/dropdown-menu.tsx | 138 +++++++++++++++++++++ src/components/common/ui/index.ts | 15 ++- src/provider/index.tsx | 20 ++- 8 files changed, 250 insertions(+), 38 deletions(-) create mode 100644 src/components/common/theme-provider.tsx create mode 100644 src/components/common/theme-toggle.tsx create mode 100644 src/components/common/ui/dropdown-menu.tsx diff --git a/package-lock.json b/package-lock.json index 563fd4d..d4d33c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,6 +31,7 @@ "js-cookie": "^3.0.5", "lucide-react": "^0.554.0", "next": "^16.1.6", + "next-themes": "^0.4.6", "react": "^19.2.3", "react-apexcharts": "^1.9.0", "react-day-picker": "^9.13.0", @@ -7235,6 +7236,16 @@ } } }, + "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==", + "license": "MIT", + "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", diff --git a/package.json b/package.json index 7465e27..763404e 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "js-cookie": "^3.0.5", "lucide-react": "^0.554.0", "next": "^16.1.6", + "next-themes": "^0.4.6", "react": "^19.2.3", "react-apexcharts": "^1.9.0", "react-day-picker": "^9.13.0", diff --git a/src/app/page.tsx b/src/app/page.tsx index ec89aa0..5a9ee4a 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,45 +1,49 @@ import Link from "next/link"; import Image from "next/image"; import { Button } from "@/components/common/ui/button"; +import { ThemeToggle } from "@/components/common/theme-toggle"; export default function HomePage(): React.ReactElement { return ( -
+
{/* Header */} -
+
N
- + NextApp
- +
+ + +
@@ -48,21 +52,21 @@ export default function HomePage(): React.ReactElement {
-
+
Mới ra mắt
-

+

Xây dựng sản phẩm
nhanh hơn, tốt hơn

-

+

Nền tảng giúp bạn tập trung vào những gì quan trọng nhất. Đơn giản, hiệu quả và dễ sử dụng cho mọi dự án.

@@ -73,15 +77,15 @@ export default function HomePage(): React.ReactElement {
-
-
+
+
Dashboard preview {/* Features */} -
+
-

+

Tính năng nổi bật

-

Mọi thứ bạn cần để bắt đầu

+

+ Mọi thứ bạn cần để bắt đầu +

{[ @@ -127,17 +133,19 @@ export default function HomePage(): React.ReactElement { ].map((feature, i) => (
{feature.icon}
-

+

{feature.title}

-

{feature.desc}

+

+ {feature.desc} +

))}
@@ -155,13 +163,15 @@ export default function HomePage(): React.ReactElement { ].map((stat, i) => (
{stat.icon}
-
+
{stat.value}
-
{stat.label}
+
+ {stat.label} +
))}
@@ -169,7 +179,7 @@ export default function HomePage(): React.ReactElement {
{/* CTA */} -
+

Sẵn sàng bắt đầu? @@ -185,7 +195,7 @@ export default function HomePage(): React.ReactElement {

{/* Footer */} -