diff --git a/landing/components/layout/LanguageSwitcher.vue b/landing/components/layout/LanguageSwitcher.vue index a00ac10d..13826664 100644 --- a/landing/components/layout/LanguageSwitcher.vue +++ b/landing/components/layout/LanguageSwitcher.vue @@ -23,6 +23,9 @@ const flagIconMap: Record = { hi: "circle-flags:in", ar: "circle-flags:sa", pt: "circle-flags:br", + fr: "circle-flags:fr", + ja: "circle-flags:jp", + de: "circle-flags:de", ru: "circle-flags:ru" }; @@ -43,6 +46,25 @@ const currentFlagIcon = computed(() => { }); const iconMenuOpen = ref(false); +const searchQuery = ref(""); +const searchInputRef = ref(null); + +const filteredDropdownItems = computed(() => { + const q = searchQuery.value.toLowerCase().trim(); + if (!q) return dropdownItems.value; + return dropdownItems.value.filter( + (item) => + item.title.toLowerCase().includes(q) || + item.value.toLowerCase().includes(q) + ); +}); + +watch(iconMenuOpen, (open) => { + if (open) { + searchQuery.value = ""; + nextTick(() => searchInputRef.value?.focus()); + } +}); const { trackLanguageSwitch } = useAnalytics(); @@ -51,8 +73,8 @@ const onChange = async (value: string | LocaleCode) => { iconMenuOpen.value = false; trackLanguageSwitch(locale.value as string, nextLocale); localeStore.setLocale(nextLocale, true); - if (nuxtApp.$i18n?.setLocale) { - await nuxtApp.$i18n.setLocale(nextLocale); + if ((nuxtApp.$i18n as any)?.setLocale) { + await (nuxtApp.$i18n as any).setLocale(nextLocale); } else { locale.value = nextLocale; } @@ -64,27 +86,44 @@ const onChange = async (value: string | LocaleCode) => {