Some checks failed
Deploy analytics worker / Deploy analytics worker to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
i18n upload strings / Upload latest strings (push) Failing after 1s
Deploy bemo / Deploy bemo to ${{ (github.ref == 'refs/heads/bemo-production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
Deploy grafana resources / ${{ github.event_name == 'push' && 'Deploy grafana resources' || 'Validate grafana resources (dry run)' }} (push) Failing after 0s
End to end tests (dotcom) / Check for relevant changes (push) Failing after 0s
End to end tests (examples) / Check for relevant changes (push) Failing after 0s
End to end tests (mermaid readability) / Check for relevant changes (push) Failing after 1s
End to end tests (perf) / Check for relevant changes (push) Failing after 0s
Publish editor extensions / Publish editor extensions (push) Failing after 1s
Publish SDK packages / Remove the publish-packages label (push) Has been skipped
Checks / Tests & checks (push) Has been cancelled
Checks / Build all projects (push) Has been cancelled
Deploy templates / Deploy templates (push) Has been cancelled
End to end tests (dotcom) / End to end tests (dotcom) (push) Has been cancelled
End to end tests (mermaid readability) / End to end tests (mermaid readability) (push) Has been cancelled
End to end tests (perf) / End to end tests (perf) (push) Has been cancelled
Deploy .com / Deploy dotcom to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Has been cancelled
End to end tests (examples) / End to end tests (examples) (push) Has been cancelled
Publish SDK packages / Publish SDK packages (push) Has been cancelled
Publish SDK packages / Tell user released version (push) Has been cancelled
Publish SDK packages / Publishes code templates to separate repositories (push) Has been cancelled
Publish SDK packages / Deploys the template demos with the new SDK version (push) Has been cancelled
44 lines
1.3 KiB
TypeScript
44 lines
1.3 KiB
TypeScript
'use client'
|
|
|
|
import { MoonIcon, SunIcon } from '@heroicons/react/20/solid'
|
|
import { useTheme } from 'next-themes'
|
|
import { useEffect, useState } from 'react'
|
|
import { cn } from '@/utils/cn'
|
|
|
|
const themes = [
|
|
{ id: 'light', name: 'Light Mode', icon: SunIcon },
|
|
{ id: 'dark', name: 'Dark Mode', icon: MoonIcon },
|
|
// { id: 'system', name: 'System Preference', icon: Cog6ToothIcon },
|
|
]
|
|
|
|
export function ThemeSwitch() {
|
|
const { theme: initialTheme, setTheme: persistTheme } = useTheme()
|
|
const [theme, setTheme] = useState<string>()
|
|
const Icon = themes.find((t) => t.id === theme)?.icon ?? SunIcon
|
|
|
|
useEffect(() => {
|
|
setTheme(initialTheme)
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
}, [])
|
|
|
|
const setThemeAndPersist = () => {
|
|
const nextTheme = theme === 'light' ? 'dark' : 'light'
|
|
persistTheme(nextTheme)
|
|
setTheme(nextTheme)
|
|
}
|
|
|
|
return (
|
|
<div className="flex flex-col items-end sm:flex-row sm:items-center gap-4 ml-2 md:ml-0">
|
|
<div className="hidden md:block h-px sm:h-5 w-full sm:w-px bg-zinc-100 sm:bg-zinc-200 dark:bg-zinc-800 dark:sm:bg-zinc-700" />
|
|
<button
|
|
onClick={() => setThemeAndPersist()}
|
|
className="hover:text-zinc-600 dark:hover:text-zinc-100"
|
|
>
|
|
<div className={cn('transition-opacity duration-300', theme ? 'opacity-100' : 'opacity-0')}>
|
|
<Icon className="size-5" />
|
|
</div>
|
|
</button>
|
|
</div>
|
|
)
|
|
}
|