{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "theme-switch", "title": "Theme Switch", "description": "Theme switch component with dark/light mode toggle. | ダーク/ライトモード切り替えコンポーネント。", "dependencies": [ "next-themes", "motion" ], "files": [ { "path": "components/button/theme-switch.tsx", "content": "\"use client\";\n\nimport { useTheme } from \"next-themes\";\nimport { useEffect, useState } from \"react\";\nimport { motion } from \"motion/react\";\nimport { cn } from \"@/lib/utils\";\nexport function ThemeSwitch({ className }: { className?: string }) {\n const { setTheme, resolvedTheme } = useTheme();\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n if (!mounted) {\n return
;\n }\n\n const isDark = resolvedTheme === \"dark\";\n \n const defaultClassNames =\n \"relative size-8 rounded-lg bg-card/20 backdrop-blur-xs border border-border/50 shadow-sm overflow-hidden group cursor-pointer\";\n\n return (\n setTheme(isDark ? \"light\" : \"dark\")}\n className={cn(defaultClassNames, className)}\n aria-label={`Switch to ${isDark ? \"light\" : \"dark\"} mode`}\n whileHover={{ scale: 1.05 }}\n whileTap={{ scale: 0.95 }}\n transition={{ duration: 0.2 }}\n >\n {/* Sun icon */}\n \n \n \n \n \n \n\n {/* Moon icon */}\n \n \n \n \n \n\n {/* Hover ring */}\n
\n \n );\n}\n", "type": "registry:ui" } ], "type": "registry:ui" }