{ "name": "switch-button", "type": "registry:component", "dependencies": [ "lucide-react" ], "registryDependencies": [ "button" ], "files": [ { "type": "registry:component", "content": "\"use client\";\n\n/**\n * @author: @dorianbaffier\n * @description: Switch Button\n * @version: 1.0.0\n * @date: 2025-06-26\n * @license: MIT\n * @website: https://kokonutui.com\n * @github: https://github.com/kokonut-labs/kokonutui\n */\n\nimport { Sun } from \"lucide-react\";\nimport { useTheme } from \"next-themes\";\nimport { Button } from \"@/components/ui/button\";\nimport { cn } from \"@/lib/utils\";\n\ninterface SwitchButtonProps\n extends React.ButtonHTMLAttributes {\n variant?: \"minimal\";\n size?: \"sm\" | \"default\" | \"lg\";\n showLabel?: boolean;\n}\n\nexport default function SwitchButton({\n className,\n variant = \"minimal\",\n size = \"default\",\n showLabel = true,\n ...props\n}: SwitchButtonProps) {\n const { setTheme, theme } = useTheme();\n\n const handleThemeToggle = () => {\n setTheme(theme === \"dark\" ? \"light\" : \"dark\");\n };\n\n const variants = {\n minimal: [\n \"rounded-lg\",\n \"bg-gradient-to-b from-zinc-50/95 to-zinc-100/95 dark:from-zinc-800/95 dark:to-zinc-900/95\",\n \"hover:from-zinc-100/95 hover:to-zinc-200/95 dark:hover:from-zinc-700/95 dark:hover:to-zinc-800/95\",\n \"border border-zinc-200 dark:border-zinc-700/80\",\n \"hover:border-zinc-300 dark:hover:border-zinc-600\",\n \"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)]\",\n \"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)]\",\n \"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)]\",\n \"transition-all duration-200 ease-out\",\n \"backdrop-blur-sm\",\n \"relative\",\n \"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\",\n \"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\",\n ],\n };\n\n const sizes = {\n sm: \"h-8 px-3 text-sm\",\n default: \"h-10 px-4\",\n lg: \"h-11 px-5\",\n };\n\n return (\n \n \n \n {showLabel && (\n \n \n Light\n \n \n \n Dark\n \n \n Light\n \n )}\n \n \n \n \n );\n}\n", "path": "/components/kokonutui/switch-button.tsx", "target": "components/kokonutui/switch-button.tsx" } ] }