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 (
);
};