import type { LocaleKey } from '@/modules/i18n/i18n.types'; import type { Component, ParentComponent } from 'solid-js'; import { useI18n } from '@/modules/i18n/i18n.provider'; import { Button } from '@/modules/ui/components/button'; import { A, useLocation, useNavigate } from '@solidjs/router'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from '../components/dropdown-menu'; import { useThemeStore } from '../themes/theme.store'; import { cn } from '../utils/cn'; const ThemeSwitcher: Component = () => { const themeStore = useThemeStore(); const { t } = useI18n(); return ( <> themeStore.setColorMode({ mode: 'light' })} class="flex items-center gap-2 cursor-pointer">
{t('navbar.theme.light-mode')}
themeStore.setColorMode({ mode: 'dark' })} class="flex items-center gap-2 cursor-pointer">
{t('navbar.theme.dark-mode')}
themeStore.setColorMode({ mode: 'system' })} class="flex items-center gap-2 cursor-pointer">
{t('navbar.theme.system-mode')}
); }; const LanguageSwitcher: Component = () => { const { t, getLocale, setLocale, locales } = useI18n(); const navigate = useNavigate(); const location = useLocation(); const changeLocale = (locale: LocaleKey) => { setLocale(locale); const pathWithoutLocale = location.pathname.split('/').slice(2).join('/'); const newPath = [locale, pathWithoutLocale].filter(Boolean).join('/'); navigate(`/${newPath}`); }; return ( <> {locales.map(locale => ( changeLocale(locale.key)} class={cn('flex items-center gap-2 cursor-pointer', { 'font-semibold': getLocale() === locale.key })}> {locale.name} ))} {t('navbar.contribute-to-i18n')} ); }; export const Navbar: Component = () => { const themeStore = useThemeStore(); const { t } = useI18n(); return (
{/* Mobile only items */}
{t('navbar.github')}
{t('navbar.theme.theme')}
{t('navbar.language')}
{/* Default items */}
{t('navbar.report-bug')}
{t('navbar.support')}
); }; export const AppLayout: ParentComponent = (props) => { return (
{props.children}
); };