Registry

Command Palette

Search for a command to run...

Login
registry:component

Aavya Theme Toggle

v0.1.0beta

Persisted light/dark toggle backed by HTML class state.

Registry Endpoint
Open JSON

npx shadcn@latest add @aavya/aavya-theme-toggle

One-time setup — add the @aavya registry to your components.json so branded dependencies resolve to Aavya (not stock shadcn):

"registries": { "@aavya": "https://registry-dev.aavya.com/r/{name}.json" }

Or install by full URL: npx shadcn@latest add https://registry-dev.aavya.com/r/aavya-theme-toggle.json

Live Preview

Toggle light/dark theme

Usage Snippet
import { ThemeToggle } from '@/components/layout/theme-toggle'

export default function Example() {
  return (
    <div className="p-6">
      <ThemeToggle />
    </div>
  )
}
Source Preview
'use client'

import { useSyncExternalStore } from 'react'
import { useTheme } from 'next-themes'
import { Moon, Sun } from 'lucide-react'
import { Button } from '@/components/ui/button'

function useIsMounted() {
  return useSyncExternalStore(() => () => {}, () => true, () => false)
}

export function ThemeToggle() {
  const { resolvedTheme, setTheme } = useTheme()
  const mounted = useIsMounted()

  const handleToggle = () => {
    setTheme(resolvedTheme === 'dark' ? 'light' : 'dark')
  }

  return (
    <Button variant="ghost" size="icon" onClick={handleToggle}>
      {mounted && resolvedTheme === 'dark'
        ? <Sun className="h-4 w-4" />
        : <Moon className="h-4 w-4" />}
      <span className="sr-only">Toggle theme</span>
    </Button>
  )
}