Switch Button
kokonut-ui/switch-buttonFreeComponent
Animated shadow theme switcher button.
Live preview
live · rendered by the registry
Rendered by kokonut-ui on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://kokonutui.com/r/switch-button.jsonSource
1"use client";23/**4 * @author: @dorianbaffier5 * @description: Switch Button6 * @version: 1.0.07 * @date: 2025-06-268 * @license: MIT9 * @website: https://kokonutui.com10 * @github: https://github.com/kokonut-labs/kokonutui11 */1213import { Sun } from "lucide-react";14import { useTheme } from "next-themes";15import { Button } from "@/components/ui/button";16import { cn } from "@/lib/utils";1718interface SwitchButtonProps19 extends React.ButtonHTMLAttributes<HTMLButtonElement> {20 variant?: "minimal";21 size?: "sm" | "default" | "lg";22 showLabel?: boolean;23}2425export default function SwitchButton({26 className,27 variant = "minimal",28 size = "default",29 showLabel = true,30 ...props31}: SwitchButtonProps) {32 const { setTheme, theme } = useTheme();3334 const handleThemeToggle = () => {35 setTheme(theme === "dark" ? "light" : "dark");36 };3738 const variants = {39 minimal: [40 "rounded-lg",41 "bg-gradient-to-b from-zinc-50/95 to-zinc-100/95 dark:from-zinc-800/95 dark:to-zinc-900/95",42 "hover:from-zinc-100/95 hover:to-zinc-200/95 dark:hover:from-zinc-700/95 dark:hover:to-zinc-800/95",43 "border border-zinc-200 dark:border-zinc-700/80",44 "hover:border-zinc-300 dark:hover:border-zinc-600",45 "shadow-[0_1px_2px_-1px_rgb(0_0_0/0.1),0_1px_3px_-2px_rgb(0_0_0/0.1)] dark:shadow-[0_1px_2px_-1px_rgb(0_0_0/0.3),0_1px_3px_-2px_rgb(0_0_0/0.3)]",46 "hover:shadow-[0_2px_4px_-2px_rgb(0_0_0/0.15),0_2px_6px_-3px_rgb(0_0_0/0.15)] dark:hover:shadow-[0_2px_4px_-2px_rgb(0_0_0/0.4),0_2px_6px_-3px_rgb(0_0_0/0.4)]",47 "active:shadow-[0_0px_1px_0_rgb(0_0_0/0.1)] dark:active:shadow-[0_0px_1px_0_rgb(0_0_0/0.2)]",48 "transition-all duration-200 ease-out",49 "backdrop-blur-sm",50 "relative",51 "after:absolute after:inset-0 after:rounded-lg after:bg-gradient-to-t after:from-white/10 after:to-transparent after:opacity-0 hover:after:opacity-100 after:transition-opacity",52 "before:absolute before:inset-[1px] before:rounded-[7px] before:bg-gradient-to-b before:from-white/20 before:to-transparent before:opacity-0 hover:before:opacity-100 before:transition-opacity dark:before:from-white/5",53 ],54 };5556 const sizes = {57 sm: "h-8 px-3 text-sm",58 default: "h-10 px-4",59 lg: "h-11 px-5",60 };6162 return (63 <Button64 className={cn(65 "group relative",66 "transition-all duration-300 ease-out",67 "text-zinc-600 dark:text-zinc-300",68 "hover:text-zinc-800 dark:hover:text-zinc-100",69 variants[variant],70// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from kokonut-ui
All 40 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Action Search Baraction-search-bar | kokonut-ui | Components | Free | 2 deps · 2 files | |
| AI Input Searchai-input-search | kokonut-ui | Components | Free | 1 dep · 2 files | |
| AI State Loadingai-loading | kokonut-ui | Components | Free | 1 dep | |
| AI Input Selectorai-prompt | kokonut-ui | Components | Free | 2 deps · 4 files | |
| AI Text Loadingai-text-loading | kokonut-ui | Components | Free | 1 dep | |
| AI Voiceai-voice | kokonut-ui | Components | Free | 2 deps | |
| Apple Activity Cardapple-activity-card | kokonut-ui | Components | Free | 1 dep | |
| Magnet Buttonattract-button | kokonut-ui | Components | Free | 2 deps |
