From bbab04f77969b4463b0de1a0e5a3139f52ad3951 Mon Sep 17 00:00:00 2001 From: Nayan Sawyer <33187059+GShadow5@users.noreply.github.com> Date: Tue, 17 Jun 2025 12:12:24 -0400 Subject: [PATCH] add next-themes and theme toggle --- bun.lockb | Bin 186322 -> 205585 bytes package.json | 3 + src/app/layout.tsx | 11 +- src/components/ui/button.tsx | 59 +++++++ src/components/ui/dropdown-menu.tsx | 257 ++++++++++++++++++++++++++++ src/components/util/themetoggle.tsx | 40 +++++ 6 files changed, 368 insertions(+), 2 deletions(-) create mode 100644 src/components/ui/button.tsx create mode 100644 src/components/ui/dropdown-menu.tsx create mode 100644 src/components/util/themetoggle.tsx diff --git a/bun.lockb b/bun.lockb index 40b2861c9e64c7599a987bf69d44d30166d99d7e..6e98eea627761d68441d50a7189e13112049434b 100644 GIT binary patch delta 48232 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 XtMuypWsWkg2ko%c&W3r)%-a70;V#(X delta 34902 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%0Da=3D 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 nJDW|@f2yr|KdYD6Irsh_z&I4QYUeo_S!e|zk diff --git a/package.json b/package.json index aff887d..1c6c8d6 100644 --- a/package.json +++ b/package.json @@ -12,11 +12,14 @@ }, "dependencies": { "@clerk/nextjs": "^6.22.0", + "@radix-ui/react-dropdown-menu": "^2.1.15", + "@radix-ui/react-slot": "^1.2.3", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "convex": "^1.24.8", "lucide-react": "^0.514.0", "next": "15.3.3", + "next-themes": "^0.4.6", "react": "^19.0.0", "react-dom": "^19.0.0", "tailwind-merge": "^3.3.1" diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 8850714..08afdc4 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -3,6 +3,8 @@ import { Geist, Geist_Mono } from "next/font/google"; import "./globals.css"; import { ClerkProvider } from "@clerk/nextjs"; import ConvexClientProvider from "@/providors/ConvexClientProvider"; +import { ThemeProvider } from "next-themes"; +import { ThemeToggle } from "@/components/util/themetoggle"; const geistSans = Geist({ variable: "--font-geist-sans", @@ -27,11 +29,16 @@ export default function RootLayout({ return ( - + - {children} + + {children} +
+ +
+
diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx new file mode 100644 index 0000000..a2df8dc --- /dev/null +++ b/src/components/ui/button.tsx @@ -0,0 +1,59 @@ +import * as React from "react" +import { Slot } from "@radix-ui/react-slot" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const buttonVariants = cva( + "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", + { + variants: { + variant: { + default: + "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90", + destructive: + "bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60", + outline: + "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50", + secondary: + "bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80", + ghost: + "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-9 px-4 py-2 has-[>svg]:px-3", + sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5", + lg: "h-10 rounded-md px-6 has-[>svg]:px-4", + icon: "size-9", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +) + +function Button({ + className, + variant, + size, + asChild = false, + ...props +}: React.ComponentProps<"button"> & + VariantProps & { + asChild?: boolean + }) { + const Comp = asChild ? Slot : "button" + + return ( + + ) +} + +export { Button, buttonVariants } diff --git a/src/components/ui/dropdown-menu.tsx b/src/components/ui/dropdown-menu.tsx new file mode 100644 index 0000000..ec51e9c --- /dev/null +++ b/src/components/ui/dropdown-menu.tsx @@ -0,0 +1,257 @@ +"use client" + +import * as React from "react" +import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu" +import { CheckIcon, ChevronRightIcon, CircleIcon } from "lucide-react" + +import { cn } from "@/lib/utils" + +function DropdownMenu({ + ...props +}: React.ComponentProps) { + return +} + +function DropdownMenuPortal({ + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function DropdownMenuTrigger({ + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function DropdownMenuContent({ + className, + sideOffset = 4, + ...props +}: React.ComponentProps) { + return ( + + + + ) +} + +function DropdownMenuGroup({ + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function DropdownMenuItem({ + className, + inset, + variant = "default", + ...props +}: React.ComponentProps & { + inset?: boolean + variant?: "default" | "destructive" +}) { + return ( + + ) +} + +function DropdownMenuCheckboxItem({ + className, + children, + checked, + ...props +}: React.ComponentProps) { + return ( + + + + + + + {children} + + ) +} + +function DropdownMenuRadioGroup({ + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function DropdownMenuRadioItem({ + className, + children, + ...props +}: React.ComponentProps) { + return ( + + + + + + + {children} + + ) +} + +function DropdownMenuLabel({ + className, + inset, + ...props +}: React.ComponentProps & { + inset?: boolean +}) { + return ( + + ) +} + +function DropdownMenuSeparator({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function DropdownMenuShortcut({ + className, + ...props +}: React.ComponentProps<"span">) { + return ( + + ) +} + +function DropdownMenuSub({ + ...props +}: React.ComponentProps) { + return +} + +function DropdownMenuSubTrigger({ + className, + inset, + children, + ...props +}: React.ComponentProps & { + inset?: boolean +}) { + return ( + + {children} + + + ) +} + +function DropdownMenuSubContent({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +export { + DropdownMenu, + DropdownMenuPortal, + DropdownMenuTrigger, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuLabel, + DropdownMenuItem, + DropdownMenuCheckboxItem, + DropdownMenuRadioGroup, + DropdownMenuRadioItem, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuSub, + DropdownMenuSubTrigger, + DropdownMenuSubContent, +} diff --git a/src/components/util/themetoggle.tsx b/src/components/util/themetoggle.tsx new file mode 100644 index 0000000..55f6696 --- /dev/null +++ b/src/components/util/themetoggle.tsx @@ -0,0 +1,40 @@ +"use client" + +import * as React from "react" +import { Moon, Sun } from "lucide-react" +import { useTheme } from "next-themes" + +import { Button } from "@/components/ui/button" +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu" + +export function ThemeToggle() { + const { setTheme } = useTheme() + + return ( + + + + + + setTheme("light")}> + Light + + setTheme("dark")}> + Dark + + setTheme("system")}> + System + + + + ) +}