import type { Component, ParentComponent } from 'solid-js'; import { useCommandPalette } from '@/modules/command-palette/command-palette.provider'; import { useI18n } from '@/modules/i18n/i18n.provider'; import { Button } from '@/modules/ui/components/button'; import { A } from '@solidjs/router'; import { Badge } from '../components/badge'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from '../components/dropdown-menu'; import { useThemeStore } from '../themes/theme.store'; import { cn } from '../utils/cn'; import { socialLinks } from './app.layouts.constants'; 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, changeLocale, locales } = useI18n(); 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(); const { openCommandPalette } = useCommandPalette(); const getIsMacOs = () => navigator?.userAgent?.match(/Macintosh;/); return (
{/* Mobile only items */}
{t('navbar.github')}
{t('navbar.theme.theme')}
{t('navbar.language')}
{/* Default items */}
{t('navbar.report-bug')}
{t('navbar.support')}
); }; const Footer: Component = () => { const { t, createLocalizedUrl } = useI18n(); const getFooterSections = () => [ { title: t('footer.resources.title'), items: [ { label: t('footer.resources.all-tools'), to: createLocalizedUrl({ path: '/tools' }) }, { label: t('footer.resources.github'), href: 'https://github.com/CorentinTh/it-tools' }, { label: t('footer.resources.support'), href: 'https://buymeacoffee.com/cthmsst' }, { label: 'Humans.txt', href: '/humans.txt' }, { label: t('footer.resources.license'), href: 'https://github.com/CorentinTh/it-tools/blob/main/LICENSE' }, ], }, { title: t('footer.support.title'), items: [ { label: t('footer.support.report-bug'), href: 'https://github.com/CorentinTh/it-tools/issues/new/choose' }, { label: t('footer.support.request-feature'), href: 'https://github.com/CorentinTh/it-tools/issues/new/choose' }, { label: t('footer.support.contribute'), href: 'https://github.com/CorentinTh/it-tools/blob/main/CONTRIBUTING.md' }, { label: t('footer.support.contact'), href: 'https://github.com/CorentinTh/it-tools/issues/new/choose' }, ], }, { title: t('footer.friends.title'), items: [ { label: 'Jugly.io', href: 'https://jugly.io' }, { label: 'Enclosed.cc', href: 'https://enclosed.cc' }, ], }, ]; return ( ); }; export const AppLayout: ParentComponent = (props) => { return (
{props.children}
); };