Files
ChatApp/apps/desktop/src/components/LanguageSwitcher.tsx
T
byGalax 12bb585081 style(auth): migrate auth + language switcher to semantic color tokens
Swaps hardcoded brand-/white-/neutral- utilities for the accent / surface
/ fg / line / fg-muted tokens so light-mode and theme overrides behave
correctly. Also moves focus rings from `focus:` to `focus-visible:`.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 23:03:24 +02:00

46 lines
1.3 KiB
TypeScript

import { changeLocale, SUPPORTED_LOCALES, type SupportedLocale } from '@chat-app/shared/i18n';
import { useTranslation } from 'react-i18next';
const LABELS: Record<SupportedLocale, string> = {
en: 'EN',
de: 'DE',
};
export function LanguageSwitcher({ compact = false }: { compact?: boolean }) {
const { i18n } = useTranslation();
const current = (i18n.resolvedLanguage ?? i18n.language) as SupportedLocale;
return (
<div
role="group"
aria-label="Language"
className={
'inline-flex items-center rounded-full border border-line bg-surface-2 p-0.5 text-[11px] font-medium ' +
(compact ? '' : '')
}
>
{SUPPORTED_LOCALES.map((locale) => {
const active = locale === current;
return (
<button
key={locale}
type="button"
aria-pressed={active}
onClick={() => {
if (!active) void changeLocale(locale);
}}
className={
'cursor-pointer rounded-full px-2.5 py-1 transition focus:outline-none focus-visible:ring-2 focus-visible:ring-accent/40 ' +
(active
? 'bg-accent/15 text-accent ring-1 ring-accent/30'
: 'text-fg-muted hover:text-fg')
}
>
{LABELS[locale]}
</button>
);
})}
</div>
);
}