diff --git a/src/app/globals.css b/src/app/globals.css index f4c1e9b..3039db9 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -42,72 +42,150 @@ } :root { - --radius: 0.625rem; - --background: oklch(1 0 0); - --foreground: oklch(0.145 0 0); + --background: oklch(0.9689 0.009 314.7819); + --foreground: oklch(0.3729 0.0306 259.7328); --card: oklch(1 0 0); - --card-foreground: oklch(0.145 0 0); + --card-foreground: oklch(0.3729 0.0306 259.7328); --popover: oklch(1 0 0); - --popover-foreground: oklch(0.145 0 0); - --primary: oklch(0.205 0 0); - --primary-foreground: oklch(0.985 0 0); - --secondary: oklch(0.97 0 0); - --secondary-foreground: oklch(0.205 0 0); - --muted: oklch(0.97 0 0); - --muted-foreground: oklch(0.556 0 0); - --accent: oklch(0.97 0 0); - --accent-foreground: oklch(0.205 0 0); - --destructive: oklch(0.577 0.245 27.325); - --border: oklch(0.922 0 0); - --input: oklch(0.922 0 0); - --ring: oklch(0.708 0 0); - --chart-1: oklch(0.646 0.222 41.116); - --chart-2: oklch(0.6 0.118 184.704); - --chart-3: oklch(0.398 0.07 227.392); - --chart-4: oklch(0.828 0.189 84.429); - --chart-5: oklch(0.769 0.188 70.08); - --sidebar: oklch(0.985 0 0); - --sidebar-foreground: oklch(0.145 0 0); - --sidebar-primary: oklch(0.205 0 0); - --sidebar-primary-foreground: oklch(0.985 0 0); - --sidebar-accent: oklch(0.97 0 0); - --sidebar-accent-foreground: oklch(0.205 0 0); - --sidebar-border: oklch(0.922 0 0); - --sidebar-ring: oklch(0.708 0 0); + --popover-foreground: oklch(0.3729 0.0306 259.7328); + --primary: oklch(0.709 0.1592 293.5412); + --primary-foreground: oklch(1 0 0); + --secondary: oklch(0.9073 0.053 306.0902); + --secondary-foreground: oklch(0.4461 0.0263 256.8018); + --muted: oklch(0.9464 0.0327 307.1745); + --muted-foreground: oklch(0.551 0.0234 264.3637); + --accent: oklch(0.9376 0.026 321.9388); + --accent-foreground: oklch(0.3729 0.0306 259.7328); + --destructive: oklch(0.8077 0.1035 19.5706); + --destructive-foreground: oklch(1 0 0); + --border: oklch(0.9073 0.053 306.0902); + --input: oklch(0.9073 0.053 306.0902); + --ring: oklch(0.709 0.1592 293.5412); + --chart-1: oklch(0.709 0.1592 293.5412); + --chart-2: oklch(0.6056 0.2189 292.7172); + --chart-3: oklch(0.5413 0.2466 293.009); + --chart-4: oklch(0.4907 0.2412 292.5809); + --chart-5: oklch(0.432 0.2106 292.7591); + --sidebar: oklch(0.9073 0.053 306.0902); + --sidebar-foreground: oklch(0.3729 0.0306 259.7328); + --sidebar-primary: oklch(0.709 0.1592 293.5412); + --sidebar-primary-foreground: oklch(1 0 0); + --sidebar-accent: oklch(0.9376 0.026 321.9388); + --sidebar-accent-foreground: oklch(0.3729 0.0306 259.7328); + --sidebar-border: oklch(0.9073 0.053 306.0902); + --sidebar-ring: oklch(0.709 0.1592 293.5412); + --radius: 0.55rem; + --shadow-2xs: 0px 8px 16px -4px hsl(0 0% 0% / 0.1); + --shadow-xs: 0px 8px 16px -4px hsl(0 0% 0% / 0.1); + --shadow-sm: 0px 8px 16px -4px hsl(0 0% 0% / 0.2), + 0px 1px 2px -5px hsl(0 0% 0% / 0.2); + --shadow: 0px 8px 16px -4px hsl(0 0% 0% / 0.2), + 0px 1px 2px -5px hsl(0 0% 0% / 0.2); + --shadow-md: 0px 8px 16px -4px hsl(0 0% 0% / 0.2), + 0px 2px 4px -5px hsl(0 0% 0% / 0.2); + --shadow-lg: 0px 8px 16px -4px hsl(0 0% 0% / 0.2), + 0px 4px 6px -5px hsl(0 0% 0% / 0.2); + --shadow-xl: 0px 8px 16px -4px hsl(0 0% 0% / 0.2), + 0px 8px 10px -5px hsl(0 0% 0% / 0.2); + --shadow-2xl: 0px 8px 16px -4px hsl(0 0% 0% / 0.5); } .dark { - --background: oklch(0.145 0 0); - --foreground: oklch(0.985 0 0); - --card: oklch(0.205 0 0); - --card-foreground: oklch(0.985 0 0); - --popover: oklch(0.205 0 0); - --popover-foreground: oklch(0.985 0 0); - --primary: oklch(0.922 0 0); - --primary-foreground: oklch(0.205 0 0); - --secondary: oklch(0.269 0 0); - --secondary-foreground: oklch(0.985 0 0); - --muted: oklch(0.269 0 0); - --muted-foreground: oklch(0.708 0 0); - --accent: oklch(0.269 0 0); - --accent-foreground: oklch(0.985 0 0); - --destructive: oklch(0.704 0.191 22.216); - --border: oklch(1 0 0 / 10%); - --input: oklch(1 0 0 / 15%); - --ring: oklch(0.556 0 0); - --chart-1: oklch(0.488 0.243 264.376); - --chart-2: oklch(0.696 0.17 162.48); - --chart-3: oklch(0.769 0.188 70.08); - --chart-4: oklch(0.627 0.265 303.9); - --chart-5: oklch(0.645 0.246 16.439); - --sidebar: oklch(0.205 0 0); - --sidebar-foreground: oklch(0.985 0 0); - --sidebar-primary: oklch(0.488 0.243 264.376); - --sidebar-primary-foreground: oklch(0.985 0 0); - --sidebar-accent: oklch(0.269 0 0); - --sidebar-accent-foreground: oklch(0.985 0 0); - --sidebar-border: oklch(1 0 0 / 10%); - --sidebar-ring: oklch(0.556 0 0); + --background: oklch(0.2161 0.0061 56.0434); + --foreground: oklch(0.9299 0.0334 272.7879); + --card: oklch(0.2805 0.0309 307.2326); + --card-foreground: oklch(0.9299 0.0334 272.7879); + --popover: oklch(0.2805 0.0309 307.2326); + --popover-foreground: oklch(0.9299 0.0334 272.7879); + --primary: oklch(0.7874 0.1179 295.7538); + --primary-foreground: oklch(0.2161 0.0061 56.0434); + --secondary: oklch(0.3416 0.0444 308.8496); + --secondary-foreground: oklch(0.8717 0.0093 258.3382); + --muted: oklch(0.2805 0.0309 307.2326); + --muted-foreground: oklch(0.7137 0.0192 261.3246); + --accent: oklch(0.3858 0.0509 304.6383); + --accent-foreground: oklch(0.8717 0.0093 258.3382); + --destructive: oklch(0.8077 0.1035 19.5706); + --destructive-foreground: oklch(0.2161 0.0061 56.0434); + --border: oklch(0.3416 0.0444 308.8496); + --input: oklch(0.3416 0.0444 308.8496); + --ring: oklch(0.7874 0.1179 295.7538); + --chart-1: oklch(0.7874 0.1179 295.7538); + --chart-2: oklch(0.709 0.1592 293.5412); + --chart-3: oklch(0.6056 0.2189 292.7172); + --chart-4: oklch(0.5413 0.2466 293.009); + --chart-5: oklch(0.4907 0.2412 292.5809); + --sidebar: oklch(0.3416 0.0444 308.8496); + --sidebar-foreground: oklch(0.9299 0.0334 272.7879); + --sidebar-primary: oklch(0.7874 0.1179 295.7538); + --sidebar-primary-foreground: oklch(0.2161 0.0061 56.0434); + --sidebar-accent: oklch(0.3858 0.0509 304.6383); + --sidebar-accent-foreground: oklch(0.8717 0.0093 258.3382); + --sidebar-border: oklch(0.3416 0.0444 308.8496); + --sidebar-ring: oklch(0.7874 0.1179 295.7538); + --radius: 0.55rem; + --shadow-2xs: 0px 8px 16px -4px hsl(0 0% 0% / 0.1); + --shadow-xs: 0px 8px 16px -4px hsl(0 0% 0% / 0.1); + --shadow-sm: 0px 8px 16px -4px hsl(0 0% 0% / 0.2), + 0px 1px 2px -5px hsl(0 0% 0% / 0.2); + --shadow: 0px 8px 16px -4px hsl(0 0% 0% / 0.2), + 0px 1px 2px -5px hsl(0 0% 0% / 0.2); + --shadow-md: 0px 8px 16px -4px hsl(0 0% 0% / 0.2), + 0px 2px 4px -5px hsl(0 0% 0% / 0.2); + --shadow-lg: 0px 8px 16px -4px hsl(0 0% 0% / 0.2), + 0px 4px 6px -5px hsl(0 0% 0% / 0.2); + --shadow-xl: 0px 8px 16px -4px hsl(0 0% 0% / 0.2), + 0px 8px 10px -5px hsl(0 0% 0% / 0.2); + --shadow-2xl: 0px 8px 16px -4px hsl(0 0% 0% / 0.5); +} + +@theme inline { + --color-background: var(--background); + --color-foreground: var(--foreground); + --color-card: var(--card); + --color-card-foreground: var(--card-foreground); + --color-popover: var(--popover); + --color-popover-foreground: var(--popover-foreground); + --color-primary: var(--primary); + --color-primary-foreground: var(--primary-foreground); + --color-secondary: var(--secondary); + --color-secondary-foreground: var(--secondary-foreground); + --color-muted: var(--muted); + --color-muted-foreground: var(--muted-foreground); + --color-accent: var(--accent); + --color-accent-foreground: var(--accent-foreground); + --color-destructive: var(--destructive); + --color-destructive-foreground: var(--destructive-foreground); + --color-border: var(--border); + --color-input: var(--input); + --color-ring: var(--ring); + --color-chart-1: var(--chart-1); + --color-chart-2: var(--chart-2); + --color-chart-3: var(--chart-3); + --color-chart-4: var(--chart-4); + --color-chart-5: var(--chart-5); + --color-sidebar: var(--sidebar); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-ring: var(--sidebar-ring); + + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); + + --shadow-2xs: var(--shadow-2xs); + --shadow-xs: var(--shadow-xs); + --shadow-sm: var(--shadow-sm); + --shadow: var(--shadow); + --shadow-md: var(--shadow-md); + --shadow-lg: var(--shadow-lg); + --shadow-xl: var(--shadow-xl); + --shadow-2xl: var(--shadow-2xl); } @layer base { diff --git a/src/components/dashboard/sidebar-theme-toggle.tsx b/src/components/dashboard/sidebar-theme-toggle.tsx new file mode 100644 index 0000000..40495ad --- /dev/null +++ b/src/components/dashboard/sidebar-theme-toggle.tsx @@ -0,0 +1,95 @@ +"use client" + +import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu" +import { SidebarMenu, SidebarMenuButton, SidebarMenuItem } from "@/components/ui/sidebar" +import { ChevronDown, Monitor, Moon, Sun } from "lucide-react" +import { useTheme } from "next-themes" +import { useEffect, useState } from "react" + +export function SidebarThemeToggle() { + const { theme, setTheme } = useTheme() + const [mounted, setMounted] = useState(false) + + // Prevent hydration mismatch + useEffect(() => { + setMounted(true) + }, []) + + if (!mounted) { + return ( + + + + + Theme + + + + ) + } + + const getIcon = () => { + switch (theme) { + case "light": + return + case "dark": + return + default: + return + } + } + + const getThemeLabel = () => { + switch (theme) { + case "light": + return "Light" + case "dark": + return "Dark" + default: + return "System" + } + } + + const cycleTheme = () => { + if (theme === "light") { + setTheme("dark") + } else if (theme === "dark") { + setTheme("system") + } else { + setTheme("light") + } + } + + return ( + + + + + + {getIcon()} + Theme ({getThemeLabel()}) + + + + + setTheme("light")}> + + Light + + setTheme("dark")}> + + Dark + + setTheme("system")}> + + System + + + + + + ) +} diff --git a/src/components/dashboard/sidebar.tsx b/src/components/dashboard/sidebar.tsx index 4daa3cf..05fd3d5 100644 --- a/src/components/dashboard/sidebar.tsx +++ b/src/components/dashboard/sidebar.tsx @@ -17,6 +17,7 @@ import { SidebarMenuItem, useSidebar } from "@/components/ui/sidebar" +import { SidebarThemeToggle } from "./sidebar-theme-toggle" import { SidebarUserDropdown } from "./sidebar-user-dropdown" const items = [ @@ -82,6 +83,7 @@ export function DashboardSidebar() { +