mirror of
https://github.com/supabase/supabase.git
synced 2026-10-16 06:39:09 +03:00
* add sidebar * sidebar docs added * add sidebar * fixed issues * fix mobile * move settings icon back down * remove old stuff * Delete SideBar.tsx * use ProfileImage component * spelling * Update ThemeSettings.tsx * Update ThemeSettings.tsx * Update Sidebar.tsx * layout udpate * Update Sidebar.tsx * fixes * Minor lints * Update Sidebar.tsx * create a alt user dropdown for self hosting and local * add fragment back in * Adds Theme Selector for local/self hosting * Update UserDropdown.tsx * fix theme selector for local self host * Update index.ts * move dropdown and fix * Update LayoutHeader.tsx * update const --------- Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
83 lines
2.2 KiB
TypeScript
83 lines
2.2 KiB
TypeScript
import { Palette } from 'lucide-react'
|
|
import { useTheme } from 'next-themes'
|
|
|
|
import { useLocalStorageQuery } from 'hooks/misc/useLocalStorage'
|
|
import { LOCAL_STORAGE_KEYS } from 'lib/constants'
|
|
import {
|
|
cn,
|
|
DropdownMenu,
|
|
DropdownMenuContent,
|
|
DropdownMenuGroup,
|
|
DropdownMenuLabel,
|
|
DropdownMenuRadioGroup,
|
|
DropdownMenuRadioItem,
|
|
DropdownMenuTrigger,
|
|
sidebarMenuButtonVariants,
|
|
singleThemes,
|
|
Theme,
|
|
Tooltip,
|
|
TooltipContent,
|
|
TooltipTrigger,
|
|
} from 'ui'
|
|
import {
|
|
DEFAULT_SIDEBAR_BEHAVIOR,
|
|
ICON_SIZE,
|
|
ICON_STROKE_WIDTH,
|
|
SidebarBehaviourType,
|
|
} from './Sidebar'
|
|
|
|
export const ThemeDropdown = () => {
|
|
const { theme, setTheme } = useTheme()
|
|
const [sidebarBehaviour] = useLocalStorageQuery<SidebarBehaviourType>(
|
|
LOCAL_STORAGE_KEYS.SIDEBAR_BEHAVIOR,
|
|
DEFAULT_SIDEBAR_BEHAVIOR
|
|
)
|
|
|
|
const button = (
|
|
<button
|
|
data-sidebar="menu-button"
|
|
data-has-icon={true}
|
|
className={cn(
|
|
sidebarMenuButtonVariants({ variant: 'default', size: 'default', hasIcon: true })
|
|
)}
|
|
>
|
|
<Palette size={ICON_SIZE} strokeWidth={ICON_STROKE_WIDTH} />
|
|
<span>Theme</span>
|
|
</button>
|
|
)
|
|
|
|
return (
|
|
<DropdownMenu>
|
|
{sidebarBehaviour === 'closed' ? (
|
|
<Tooltip>
|
|
<TooltipTrigger asChild>
|
|
<DropdownMenuTrigger asChild>{button}</DropdownMenuTrigger>
|
|
</TooltipTrigger>
|
|
<TooltipContent side="right" align="center">
|
|
<span>Theme</span>
|
|
</TooltipContent>
|
|
</Tooltip>
|
|
) : (
|
|
<DropdownMenuTrigger asChild>{button}</DropdownMenuTrigger>
|
|
)}
|
|
<DropdownMenuContent side="top" align="start">
|
|
<DropdownMenuGroup>
|
|
<DropdownMenuLabel>Theme</DropdownMenuLabel>
|
|
<DropdownMenuRadioGroup
|
|
value={theme}
|
|
onValueChange={(value) => {
|
|
setTheme(value)
|
|
}}
|
|
>
|
|
{singleThemes.map((theme: Theme) => (
|
|
<DropdownMenuRadioItem key={theme.value} value={theme.value}>
|
|
{theme.name}
|
|
</DropdownMenuRadioItem>
|
|
))}
|
|
</DropdownMenuRadioGroup>
|
|
</DropdownMenuGroup>
|
|
</DropdownMenuContent>
|
|
</DropdownMenu>
|
|
)
|
|
}
|