{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "theme-switcher-multi-button",
  "title": "Theme Switcher Multi Button",
  "description": "Multi-button theme switcher with system/light/dark options",
  "dependencies": [
    "next-themes"
  ],
  "registryDependencies": [],
  "files": [
    {
      "path": "registry/default/blocks/theme-switcher/theme-switcher-multi-button/components/elements/theme-switcher-multi-button.tsx",
      "content": "\"use client\";\n\nimport type React from \"react\";\nimport { useEffect, useState } from \"react\";\n\nimport { MonitorIcon, MoonIcon, SunIcon } from \"lucide-react\";\nimport { useTheme } from \"next-themes\";\n\nimport { cn } from \"@/lib/utils\";\n\ninterface ThemeSwitcherMultiButtonProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  className?: string;\n}\n\nexport function ThemeSwitcherMultiButton({\n  className,\n  ...props\n}: ThemeSwitcherMultiButtonProps) {\n  const { theme, setTheme } = useTheme();\n  const [mounted, setMounted] = useState(false);\n\n  useEffect(() => {\n    setMounted(true);\n  }, []);\n\n  if (!mounted) {\n    return (\n      <div\n        className={cn(\n          \"relative isolate inline-flex h-8 items-center rounded-full border border-dotted px-1\",\n          className,\n        )}\n        {...props}\n      >\n        <div className=\"flex space-x-0\">\n          <div className=\"size-6 rounded-full bg-input animate-pulse\" />\n          <div className=\"size-6 rounded-full bg-input animate-pulse\" />\n          <div className=\"size-6 rounded-full bg-input animate-pulse\" />\n        </div>\n      </div>\n    );\n  }\n\n  const themes = [\n    { value: \"system\", icon: MonitorIcon, label: \"Switch to system theme\" },\n    { value: \"light\", icon: SunIcon, label: \"Switch to light theme\" },\n    { value: \"dark\", icon: MoonIcon, label: \"Switch to dark theme\" },\n  ];\n\n  return (\n    <div\n      className={cn(\n        \"relative isolate inline-flex h-8 items-center rounded-full border border-dotted px-1\",\n        className,\n      )}\n      {...props}\n    >\n      {themes.map(({ value, icon: Icon, label }) => (\n        <button\n          key={value}\n          aria-label={label}\n          title={label}\n          type=\"button\"\n          onClick={() => setTheme(value)}\n          className=\"group relative size-6 rounded-full transition duration-200 ease-out\"\n        >\n          {theme === value && (\n            <div className=\"-z-1 absolute inset-0 rounded-full bg-muted\" />\n          )}\n          <Icon\n            className={`relative m-auto size-3.5 transition duration-200 ease-out ${\n              theme === value\n                ? \"text-foreground\"\n                : \"text-secondary-foreground group-hover:text-foreground group-focus-visible:text-foreground\"\n            }`}\n            aria-hidden=\"true\"\n          />\n        </button>\n      ))}\n    </div>\n  );\n}\n",
      "type": "registry:component"
    },
    {
      "path": "registry/default/blocks/theme-switcher/theme-switcher-multi-button/routes/layout.tsx",
      "content": "import { Geist, Geist_Mono } from \"next/font/google\";\n\nimport { ThemeProvider } from \"next-themes\";\n\nconst geistSans = Geist({\n  variable: \"--font-geist-sans\",\n  subsets: [\"latin\"],\n});\n\nconst geistMono = Geist_Mono({\n  variable: \"--font-geist-mono\",\n  subsets: [\"latin\"],\n});\n\nexport default function RootLayout({\n  children,\n}: Readonly<{\n  children: React.ReactNode;\n}>) {\n  return (\n    <html lang=\"en\" suppressHydrationWarning>\n      <body\n        className={`${geistSans.variable} ${geistMono.variable} antialiased`}\n      >\n        <ThemeProvider\n          attribute=\"class\"\n          defaultTheme=\"system\"\n          enableSystem\n          disableTransitionOnChange\n        >\n          {children}\n        </ThemeProvider>\n      </body>\n    </html>\n  );\n}\n",
      "type": "registry:page",
      "target": "app/layout.tsx"
    },
    {
      "path": "registry/default/blocks/theme-switcher/theme-switcher-multi-button/routes/page.tsx",
      "content": "\"use client\";\n\nimport { ThemeSwitcherMultiButton } from \"@/registry/default/blocks/theme-switcher/theme-switcher-multi-button/components/elements/theme-switcher-multi-button\";\n\nexport default function ThemeSwitcherMultiButtonPage() {\n  return (\n    <div className=\"min-h-screen bg-background text-foreground\">\n      <div className=\"container mx-auto px-4 py-16\">\n        <div className=\"max-w-2xl mx-auto text-center space-y-8\">\n          <div className=\"space-y-4\">\n            <h1 className=\"text-3xl font-bold\">Theme Switcher Multi Button</h1>\n            <p className=\"text-muted-foreground\">\n              A multi-button theme switcher with system, light, and dark options\n              in a button group.\n            </p>\n          </div>\n\n          <div className=\"flex justify-center\">\n            <ThemeSwitcherMultiButton />\n          </div>\n\n          <div className=\"bg-card border rounded-lg p-6 text-left space-y-4\">\n            <h2 className=\"text-lg font-semibold\">Features</h2>\n            <ul className=\"space-y-2 text-sm text-muted-foreground\">\n              <li>• Three theme buttons: System, Light, Dark</li>\n              <li>• Visual active state indication</li>\n              <li>• Icon representation for each theme</li>\n              <li>• Button group layout</li>\n              <li>• Loading state with skeleton</li>\n            </ul>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n}\n",
      "type": "registry:page",
      "target": "app/theme-switcher-multi-button/page.tsx"
    }
  ],
  "docs": "⚠️ Requires ThemeProvider setup! Wrap your app with <ThemeProvider> and add suppressHydrationWarning to <html>. Multi-button with system/light/dark options.",
  "type": "registry:ui"
}