From 260c267af4d92eabf5d62182f26ff61585363c6e Mon Sep 17 00:00:00 2001 From: GeorgeCodec <89489744+DavidCodec@users.noreply.github.com> Date: Sun, 26 Apr 2026 15:39:27 -0400 Subject: [PATCH 1/3] feat(i18n): replace native language select with custom dropdown (#117) --- components/language-switcher.tsx | 109 +++++++++++++++++++++++++++---- 1 file changed, 98 insertions(+), 11 deletions(-) diff --git a/components/language-switcher.tsx b/components/language-switcher.tsx index d4e7d37..2984c07 100644 --- a/components/language-switcher.tsx +++ b/components/language-switcher.tsx @@ -1,23 +1,110 @@ "use client"; +import { useEffect, useRef, useState } from "react"; import { useTranslation } from "./language-provider"; import { cn } from "../lib/utils"; export function LanguageSwitcher() { const { locale, setLocale, locales, dir } = useTranslation(); + const [open, setOpen] = useState(false); + const wrapperRef = useRef(null); + + const currentLocale = locales.find((item) => item.value === locale); + + useEffect(() => { + function onPointerDown(event: MouseEvent) { + if (!wrapperRef.current?.contains(event.target as Node)) { + setOpen(false); + } + } + + function onEscape(event: KeyboardEvent) { + if (event.key === "Escape") { + setOpen(false); + } + } + + document.addEventListener("mousedown", onPointerDown); + document.addEventListener("keydown", onEscape); + + return () => { + document.removeEventListener("mousedown", onPointerDown); + document.removeEventListener("keydown", onEscape); + }; + }, []); + + function onSelect(nextLocale: (typeof locales)[number]["value"]) { + setLocale(nextLocale); + setOpen(false); + } + return ( -
- + {currentLocale?.label ?? locale} + + + + {open && ( + + )}
); } From 862241388444e80508247d15890459453018c8e5 Mon Sep 17 00:00:00 2001 From: Bhathiya Vicum Date: Sun, 26 Apr 2026 09:19:17 +0530 Subject: [PATCH 2/3] fix: enable swap and reset buttons when data is present --- components/compare-form.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/compare-form.tsx b/components/compare-form.tsx index 56c4d5a..ef9e3ca 100644 --- a/components/compare-form.tsx +++ b/components/compare-form.tsx @@ -94,7 +94,7 @@ export function CompareForm({