From 1fd313264727c23ad5d4edc108a135ec4f2dad59 Mon Sep 17 00:00:00 2001 From: Rigel Ramadhani Waloni <115273885+rigelra15@users.noreply.github.com> Date: Fri, 15 May 2026 09:21:24 +0700 Subject: [PATCH] feat(ui): enhance model select modal UX and modal traffic lights (#1111) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(model-select-modal): highlight added models and support bulk selection - Add addedModelValues prop to highlight already-added models with primary color - Sort models alphabetically per provider, with added models floated to top - Replace green highlight with primary brand color (orange #E56A4A) - Use check icon (10px) inline with model name instead of check_circle - Replace Done button with info bar explaining click-to-toggle behavior - Add ProviderIcon to provider group headers replacing colored dot - Import ProviderIcon, remove unused Button import * feat(cli-tools): wire addedModelValues, onDeselect, and auto-save to model select modals - Pass selectedModels as addedModelValues to ModelSelectModal in OpenCode and Copilot cards - Add onDeselect handler to remove model from list on second click - Set closeOnSelect=false to allow bulk model selection - Remove manual setModalOpen(false) from onSelect callbacks - Add saveModels() silent auto-save triggered on modal close (OpenCodeToolCard) - Use useRef to track latest selectedModels in closure-safe way * feat(modal): functional traffic light close button with hover icon and tooltip - Make red dot a clickable button that closes the modal - Show ✕ icon inside red dot on hover via group-hover opacity transition - Gray out yellow and green dots (cursor-not-allowed, no tooltip) - Increase dot size from w-3 h-3 to w-4 h-4 - Add Tooltip with brand-matched color #FF5F56 on red dot - Remove X close button from modal header * feat(tooltip): add color prop for themed tooltip backgrounds * feat(i18n): add translations for model select info bar and close tooltip - Add 'Click to add, click again to remove. Changes are saved automatically.' to all 32 locales - Add 'Close' translation to all 32 locales * fix(ui): address code review feedback on modal UX and auto-save - Modal: remove showCloseButton prop, use showTrafficLights for header condition, hide traffic lights on mobile (hidden md:flex), add mobile X button (md:hidden) with aria-label, add aria-label and title on traffic light close button - OpenCodeToolCard: validate activeModel membership before saving — fallback to models[0] or empty string; clear/reassign activeModel on deselect when removed model was the active one - CopilotToolCard: add useRef + selectedModelsRef, add saveModels() using /api/cli-tools/copilot-settings, wire auto-save on modal close - ModelSelectModal: fix JSX formatting — separate info bar closing div from Search comment onto its own line --- public/i18n/literals/ar.json | 8 +- public/i18n/literals/bn.json | 8 +- public/i18n/literals/cs.json | 8 +- public/i18n/literals/da.json | 8 +- public/i18n/literals/de.json | 8 +- public/i18n/literals/el.json | 8 +- public/i18n/literals/es.json | 8 +- public/i18n/literals/fi.json | 8 +- public/i18n/literals/fr.json | 8 +- public/i18n/literals/he.json | 8 +- public/i18n/literals/hi.json | 8 +- public/i18n/literals/hu.json | 8 +- public/i18n/literals/id.json | 8 +- public/i18n/literals/it.json | 8 +- public/i18n/literals/ja.json | 8 +- public/i18n/literals/ko.json | 8 +- public/i18n/literals/nl.json | 8 +- public/i18n/literals/no.json | 8 +- public/i18n/literals/pl.json | 8 +- public/i18n/literals/pt-BR.json | 8 +- public/i18n/literals/pt-PT.json | 8 +- public/i18n/literals/ro.json | 10 +-- public/i18n/literals/ru.json | 8 +- public/i18n/literals/sv.json | 8 +- public/i18n/literals/th.json | 8 +- public/i18n/literals/tl.json | 8 +- public/i18n/literals/tr.json | 8 +- public/i18n/literals/uk.json | 8 +- public/i18n/literals/ur.json | 8 +- public/i18n/literals/vi.json | 8 +- public/i18n/literals/zh-CN.json | 32 +------- public/i18n/literals/zh-TW.json | 8 +- .../cli-tools/components/CopilotToolCard.js | 33 +++++++- .../cli-tools/components/OpenCodeToolCard.js | 44 ++++++++++- src/shared/components/Modal.js | 38 +++++---- src/shared/components/ModelSelectModal.js | 78 ++++++++++--------- src/shared/components/Tooltip.js | 10 ++- 37 files changed, 209 insertions(+), 276 deletions(-) diff --git a/public/i18n/literals/ar.json b/public/i18n/literals/ar.json index 21cfab4c..299d9002 100644 --- a/public/i18n/literals/ar.json +++ b/public/i18n/literals/ar.json @@ -12,7 +12,7 @@ "Logout": "تسجيل الخروج", "Login": "تسجيل الدخول", "Providers": "الموفرون", - "Usage": "الاستخدام", + "Usage": "الإحصائيات", "API Key": "مفتاح API", "Connected": "متصل", "Disconnected": "غير متصل", @@ -91,9 +91,7 @@ "Dark": "داكن", "Auto": "تلقائي", "Endpoint": "نقطة نهاية", - "Providers": "الموفرون", "Combos": "تراكيب", - "Usage": "الإحصائيات", "Quota Tracker": "متتبع الحصة", "MITM": "MITM", "CLI Tools": "أدوات CLI", @@ -150,7 +148,6 @@ "No Proxy": "لا يوجد وكيل", "Comma-separated hostnames/domains to bypass the proxy.": "أسماء المضيفين/النطاقات المفصولة بفواصل لتجاوز الوكيل.", "Test proxy URL": "اختبر عنوان URL الوكيل", - "Apply": "تطبيق", "Proxy settings applied": "تم تطبيق إعدادات الوكيل", "Proxy enabled": "الوكيل مفعل", "Proxy disabled": "الوكيل معطل", @@ -178,7 +175,6 @@ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "استخدم Antigravity IDE و GitHub Copilot → مع أي موفر/نموذج من 9Router", "How it works:": "كيف يعمل:", "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "طلب Antigravity/Copilot IDE → إعادة توجيه DNS إلى localhost:443 → يعترض وكيل MITM → 9Router → الرد إلى Antigravity/Copilot", - "API Key": "مفتاح API", "No API keys — create one in Keys page": "لا توجد مفاتيح API — قم بإنشاء واحدة في صفحة المفاتيح", "sk_9router (default)": "sk_9router (افتراضي)", "Server started": "تم بدء الخادم", @@ -192,5 +188,5 @@ "Sudo Password Required": "كلمة مرور Sudo مطلوبة", "Enter your sudo password to start/stop MITM server": "أدخل كلمة مرور sudo للبدء/الإيقاف من خادم MITM", "Sudo Password": "كلمة مرور Sudo", - "Confirm": "تأكيد" + "Click to add, click again to remove. Changes are saved automatically.": "انقر للإضافة، انقر مرة أخرى للإزالة. يتم حفظ التغييرات تلقائيًا." } diff --git a/public/i18n/literals/bn.json b/public/i18n/literals/bn.json index a18aaa3e..f62f2d2b 100644 --- a/public/i18n/literals/bn.json +++ b/public/i18n/literals/bn.json @@ -12,7 +12,7 @@ "Logout": "লগ আউট", "Login": "লগ ইন", "Providers": "সরবরাহকারী", - "Usage": "ব্যবহার", + "Usage": "ব্যবহারের পরিসংখ্যান", "API Key": "API কী", "Connected": "সংযুক্ত", "Disconnected": "বিচ্ছিন্ন", @@ -91,9 +91,7 @@ "Dark": "গাঢ়", "Auto": "স্বয়ংক্রিয়", "Endpoint": "এন্ডপয়েন্ট", - "Providers": "সরবরাহকারী", "Combos": "কম্বো", - "Usage": "ব্যবহারের পরিসংখ্যান", "Quota Tracker": "কোটা ট্র্যাকার", "MITM": "MITM", "CLI Tools": "সরঞ্জাম", @@ -150,7 +148,6 @@ "No Proxy": "কোন প্রক্সি নেই", "Comma-separated hostnames/domains to bypass the proxy.": "প্রক্সি বাইপাস করার জন্য কমা-পৃথক হোস্টনাম/ডোমেইন।", "Test proxy URL": "প্রক্সি URL পরীক্ষা করুন", - "Apply": "প্রয়োগ করুন", "Proxy settings applied": "প্রক্সি সেটিংস প্রয়োগ করা হয়েছে", "Proxy enabled": "প্রক্সি সক্ষম", "Proxy disabled": "প্রক্সি অক্ষম", @@ -178,7 +175,6 @@ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "Antigravity IDE এবং GitHub Copilot ব্যবহার করুন → 9Router থেকে যেকোনো সরবরাহকারী/মডেলের সাথে", "How it works:": "এটি কীভাবে কাজ করে:", "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Antigravity/Copilot IDE অনুরোধ → DNS কে localhost:443 তে রিডিরেক্ট করুন → MITM প্রক্সি ইন্টারসেপ্ট করে → 9Router → Antigravity/Copilot এ প্রতিক্রিয়া", - "API Key": "API কী", "No API keys — create one in Keys page": "কোন API কী নেই — Keys পৃষ্ঠায় একটি তৈরি করুন", "sk_9router (default)": "sk_9router (ডিফল্ট)", "Server started": "সার্ভার শুরু হয়েছে", @@ -192,5 +188,5 @@ "Sudo Password Required": "Sudo পাসওয়ার্ড প্রয়োজন", "Enter your sudo password to start/stop MITM server": "MITM সার্ভার শুরু/বন্ধ করতে আপনার sudo পাসওয়ার্ড প্রবেশ করুন", "Sudo Password": "Sudo পাসওয়ার্ড", - "Confirm": "নিশ্চিত করুন" + "Click to add, click again to remove. Changes are saved automatically.": "যোগ করতে ক্লিক করুন, সরাতে আবার ক্লিক করুন। পরিবর্তনগুলি স্বয়ংক্রিয়ভাবে সংরক্ষিত হয়।" } diff --git a/public/i18n/literals/cs.json b/public/i18n/literals/cs.json index 5feab11a..5180d280 100644 --- a/public/i18n/literals/cs.json +++ b/public/i18n/literals/cs.json @@ -12,7 +12,7 @@ "Logout": "Odhlásit se", "Login": "Přihlásit se", "Providers": "Poskytovatelé", - "Usage": "Použití", + "Usage": "Statistika", "API Key": "Klíč API", "Connected": "Připojeno", "Disconnected": "Odpojeno", @@ -91,9 +91,7 @@ "Dark": "Tmavý", "Auto": "Automaticky", "Endpoint": "Koncový bod", - "Providers": "Poskytovatelé", "Combos": "Kombinace", - "Usage": "Statistika", "Quota Tracker": "Sledování kvót", "MITM": "MITM", "CLI Tools": "Nástroje CLI", @@ -150,7 +148,6 @@ "No Proxy": "Bez proxy", "Comma-separated hostnames/domains to bypass the proxy.": "Čárkou oddělené názvy hostitelů/domény pro obejití proxy.", "Test proxy URL": "Testovat URL proxy", - "Apply": "Aplikovat", "Proxy settings applied": "Nastavení proxy aplikováno", "Proxy enabled": "Proxy povolena", "Proxy disabled": "Proxy zakázána", @@ -178,7 +175,6 @@ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "Použijte Antigravity IDE a GitHub Copilot → s JAKÝMKOLIV poskytovatelem/modelem z 9Router", "How it works:": "Jak to funguje:", "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Požadavek Antigravity/Copilot IDE → Přesměrování DNS na localhost:443 → Proxy MITM zachycuje → 9Router → odpověď na Antigravity/Copilot", - "API Key": "Klíč API", "No API keys — create one in Keys page": "Žádné klíče API — vytvořte jeden na stránce Klíče", "sk_9router (default)": "sk_9router (výchozí)", "Server started": "Server spuštěn", @@ -192,5 +188,5 @@ "Sudo Password Required": "Je vyžadováno heslo Sudo", "Enter your sudo password to start/stop MITM server": "Zadejte heslo sudo pro spuštění/zastavení serveru MITM", "Sudo Password": "Heslo sudo", - "Confirm": "Potvrdit" + "Click to add, click again to remove. Changes are saved automatically.": "Kliknutím přidáte, dalším kliknutím odeberete. Změny se ukládají automaticky." } diff --git a/public/i18n/literals/da.json b/public/i18n/literals/da.json index 3c04bf7f..5640b802 100644 --- a/public/i18n/literals/da.json +++ b/public/i18n/literals/da.json @@ -12,7 +12,7 @@ "Logout": "Log ud", "Login": "Log ind", "Providers": "Udbydere", - "Usage": "Forbrug", + "Usage": "Forbrugsstatistik", "API Key": "API-nøgle", "Connected": "Forbundet", "Disconnected": "Afbrudt", @@ -91,9 +91,7 @@ "Dark": "Mørk", "Auto": "Automatisk", "Endpoint": "Slutpunkt", - "Providers": "Udbydere", "Combos": "Kombinationer", - "Usage": "Forbrugsstatistik", "Quota Tracker": "Kvotetracker", "MITM": "MITM", "CLI Tools": "Værktøjer", @@ -150,7 +148,6 @@ "No Proxy": "Ingen proxy", "Comma-separated hostnames/domains to bypass the proxy.": "Kommaseparerede værtsnavne/domæner for at omgå proxyen.", "Test proxy URL": "Test proxy-URL", - "Apply": "Anvend", "Proxy settings applied": "Proxyindstillinger anvendt", "Proxy enabled": "Proxy aktiveret", "Proxy disabled": "Proxy deaktiveret", @@ -178,7 +175,6 @@ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "Brug Antigravity IDE & GitHub Copilot → med ENHVER udbyder/model fra 9Router", "How it works:": "Sådan virker det:", "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Antigravity/Copilot IDE-anmodning → DNS-omdirigering til localhost:443 → MITM-proxy aflytter → 9Router → svar til Antigravity/Copilot", - "API Key": "API-nøgle", "No API keys — create one in Keys page": "Ingen API-nøgler — opret en på Keys-siden", "sk_9router (default)": "sk_9router (standard)", "Server started": "Server startet", @@ -192,5 +188,5 @@ "Sudo Password Required": "Sudo-adgangskode påkrævet", "Enter your sudo password to start/stop MITM server": "Indtast din sudo-adgangskode for at starte/stoppe MITM-server", "Sudo Password": "Sudo-adgangskode", - "Confirm": "Bekræft" + "Click to add, click again to remove. Changes are saved automatically.": "Klik for at tilføje, klik igen for at fjerne. Ændringer gemmes automatisk." } diff --git a/public/i18n/literals/de.json b/public/i18n/literals/de.json index 30a0baee..2c8b9909 100644 --- a/public/i18n/literals/de.json +++ b/public/i18n/literals/de.json @@ -12,7 +12,7 @@ "Logout": "Abmelden", "Login": "Anmelden", "Providers": "Anbieter", - "Usage": "Verwendung", + "Usage": "Statistiken", "API Key": "API-Schlüssel", "Connected": "Verbunden", "Disconnected": "Getrennt", @@ -91,9 +91,7 @@ "Dark": "Dunkel", "Auto": "Automatisch", "Endpoint": "Endpunkt", - "Providers": "Anbieter", "Combos": "Kombinationen", - "Usage": "Statistiken", "Quota Tracker": "Kontingenttracker", "MITM": "MITM", "CLI Tools": "CLI-Tools", @@ -150,7 +148,6 @@ "No Proxy": "Kein Proxy", "Comma-separated hostnames/domains to bypass the proxy.": "Kommagetrennte Hostnamen/Domänen zum Umgehen des Proxys.", "Test proxy URL": "Proxy-URL testen", - "Apply": "Anwenden", "Proxy settings applied": "Proxy-Einstellungen angewendet", "Proxy enabled": "Proxy aktiviert", "Proxy disabled": "Proxy deaktiviert", @@ -178,7 +175,6 @@ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "Verwenden Sie Antigravity IDE und GitHub Copilot → mit JEDEM Anbieter/Modell von 9Router", "How it works:": "So funktioniert es:", "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Antigravity/Copilot IDE-Anforderung → DNS-Umleitung auf localhost:443 → MITM-Proxy abfangen → 9Router → Antwort auf Antigravity/Copilot", - "API Key": "API-Schlüssel", "No API keys — create one in Keys page": "Keine API-Schlüssel — erstellen Sie einen auf der Seite Schlüssel", "sk_9router (default)": "sk_9router (Standard)", "Server started": "Server gestartet", @@ -192,5 +188,5 @@ "Sudo Password Required": "Sudo-Passwort erforderlich", "Enter your sudo password to start/stop MITM server": "Geben Sie Ihr Sudo-Passwort ein, um den MITM-Server zu starten/stoppen", "Sudo Password": "Sudo-Passwort", - "Confirm": "Bestätigen" + "Click to add, click again to remove. Changes are saved automatically.": "Klicken zum Hinzufügen, erneut klicken zum Entfernen. Änderungen werden automatisch gespeichert." } diff --git a/public/i18n/literals/el.json b/public/i18n/literals/el.json index 0e15daae..36baef7a 100644 --- a/public/i18n/literals/el.json +++ b/public/i18n/literals/el.json @@ -12,7 +12,7 @@ "Logout": "Έξοδος", "Login": "Σύνδεση", "Providers": "Παρόχοι", - "Usage": "Χρήση", + "Usage": "Στατιστικά χρήσης", "API Key": "Κλειδί API", "Connected": "Συνδεδεμένο", "Disconnected": "Αποσυνδεδεμένο", @@ -91,9 +91,7 @@ "Dark": "Σκοτεινό", "Auto": "Αυτόματο", "Endpoint": "Τελικό σημείο", - "Providers": "Παρόχοι", "Combos": "Συνδυασμοί", - "Usage": "Στατιστικά χρήσης", "Quota Tracker": "Παρακολούθηση ποσόστωσης", "MITM": "MITM", "CLI Tools": "Εργαλεία", @@ -150,7 +148,6 @@ "No Proxy": "Χωρίς διακομιστή μεσολάβησης", "Comma-separated hostnames/domains to bypass the proxy.": "Ονόματα κεντρικών υπολογιστών/τομείς χωρισμένοι με κόμμα για να παραστούν τον διακομιστή μεσολάβησης.", "Test proxy URL": "Δοκιμή URL διακομιστή μεσολάβησης", - "Apply": "Εφαρμογή", "Proxy settings applied": "Ρυθμίσεις διακομιστή μεσολάβησης εφαρμόστηκαν", "Proxy enabled": "Διακομιστής μεσολάβησης ενεργοποιημένος", "Proxy disabled": "Διακομιστής μεσολάβησης απενεργοποιημένος", @@ -178,7 +175,6 @@ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "Χρησιμοποιήστε Antigravity IDE & GitHub Copilot → με ΟΠΟΙΟΝΔΗΠΟΤΕ πάροχο/μοντέλο από 9Router", "How it works:": "Πώς λειτουργεί:", "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Αίτημα Antigravity/Copilot IDE → Ανακατεύθυνση DNS στο localhost:443 → Ο διακομιστής μεσολάβησης MITM παρεμβαίνει → 9Router → απάντηση στο Antigravity/Copilot", - "API Key": "Κλειδί API", "No API keys — create one in Keys page": "Δεν υπάρχουν κλειδιά API — δημιουργήστε ένα στη σελίδα Keys", "sk_9router (default)": "sk_9router (προεπιλεγμένο)", "Server started": "Ο διακομιστής ξεκίνησε", @@ -192,5 +188,5 @@ "Sudo Password Required": "Απαιτείται κωδικός πρόσβασης Sudo", "Enter your sudo password to start/stop MITM server": "Εισαγάγετε τον κωδικό πρόσβασης sudo για να ξεκινήσετε/διακόψετε τον διακομιστή MITM", "Sudo Password": "Κωδικός πρόσβασης Sudo", - "Confirm": "Επιβεβαίωση" + "Click to add, click again to remove. Changes are saved automatically.": "Κάντε κλικ για προσθήκη, κάντε ξανά κλικ για αφαίρεση. Οι αλλαγές αποθηκεύονται αυτόματα." } diff --git a/public/i18n/literals/es.json b/public/i18n/literals/es.json index ea7cf45b..d14e92fa 100644 --- a/public/i18n/literals/es.json +++ b/public/i18n/literals/es.json @@ -12,7 +12,7 @@ "Logout": "Cerrar sesión", "Login": "Iniciar sesión", "Providers": "Proveedores", - "Usage": "Uso", + "Usage": "Estadísticas", "API Key": "Clave API", "Connected": "Conectado", "Disconnected": "Desconectado", @@ -91,9 +91,7 @@ "Dark": "Oscuro", "Auto": "Automático", "Endpoint": "Punto final", - "Providers": "Proveedores", "Combos": "Combinaciones", - "Usage": "Estadísticas", "Quota Tracker": "Rastreador de cuota", "MITM": "MITM", "CLI Tools": "Herramientas CLI", @@ -150,7 +148,6 @@ "No Proxy": "Sin proxy", "Comma-separated hostnames/domains to bypass the proxy.": "Nombres de host/dominios separados por comas para omitir el proxy.", "Test proxy URL": "Prueba URL del proxy", - "Apply": "Aplicar", "Proxy settings applied": "Configuración de proxy aplicada", "Proxy enabled": "Proxy habilitado", "Proxy disabled": "Proxy deshabilitado", @@ -178,7 +175,6 @@ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "Use Antigravity IDE y GitHub Copilot → con CUALQUIER proveedor/modelo de 9Router", "How it works:": "Cómo funciona:", "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Solicitud de Antigravity/Copilot IDE → Redireccionamiento DNS a localhost:443 → El proxy MITM intercepta → 9Router → respuesta a Antigravity/Copilot", - "API Key": "Clave API", "No API keys — create one in Keys page": "Sin claves API — cree una en la página Claves", "sk_9router (default)": "sk_9router (predeterminado)", "Server started": "Servidor iniciado", @@ -192,5 +188,5 @@ "Sudo Password Required": "Contraseña de Sudo requerida", "Enter your sudo password to start/stop MITM server": "Ingrese su contraseña de sudo para iniciar/detener el servidor MITM", "Sudo Password": "Contraseña de sudo", - "Confirm": "Confirmar" + "Click to add, click again to remove. Changes are saved automatically.": "Haz clic para agregar, haz clic de nuevo para eliminar. Los cambios se guardan automáticamente." } diff --git a/public/i18n/literals/fi.json b/public/i18n/literals/fi.json index 54af1a42..0befaf50 100644 --- a/public/i18n/literals/fi.json +++ b/public/i18n/literals/fi.json @@ -12,7 +12,7 @@ "Logout": "Kirjaudu ulos", "Login": "Kirjaudu sisään", "Providers": "Palveluntarjoajat", - "Usage": "Käyttö", + "Usage": "Käyttötilastot", "API Key": "API-avain", "Connected": "Yhdistetty", "Disconnected": "Yhteys katkaistu", @@ -91,9 +91,7 @@ "Dark": "Tumma", "Auto": "Automaattinen", "Endpoint": "Pääteeksi", - "Providers": "Palveluntarjoajat", "Combos": "Yhdistelmät", - "Usage": "Käyttötilastot", "Quota Tracker": "Kiintiyden seuranta", "MITM": "MITM", "CLI Tools": "Työkalut", @@ -150,7 +148,6 @@ "No Proxy": "Ei välityspalvelinta", "Comma-separated hostnames/domains to bypass the proxy.": "Pilkulla erotetut isäntänimet/etäisyydet välityspalvelimen ohittamiseksi.", "Test proxy URL": "Testaa välityspalvelimen URL", - "Apply": "Käytä", "Proxy settings applied": "Välityspalvelimen asetukset käytössä", "Proxy enabled": "Välityspalvelin otettu käyttöön", "Proxy disabled": "Välityspalvelin poistettu käytöstä", @@ -178,7 +175,6 @@ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "Käytä Antigravity IDE:tä ja GitHub Copilot:ia → minkä tahansa palveluntarjoajan/mallin kanssa 9Routerista", "How it works:": "Kuinka se toimii:", "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Antigravity/Copilot IDE-pyyntö → DNS-uudelleenohjaus localhost:443:iin → MITM-välityspalvelin sieppaa → 9Router → vastaus Antigravity/Copilot:ille", - "API Key": "API-avain", "No API keys — create one in Keys page": "Ei API-avaimia — luo yksi Keys-sivulla", "sk_9router (default)": "sk_9router (oletus)", "Server started": "Palvelin käynnistetty", @@ -192,5 +188,5 @@ "Sudo Password Required": "Sudo-salasana vaaditaan", "Enter your sudo password to start/stop MITM server": "Kirjoita sudo-salasanasi MITM-palvelimen käynnistämiseksi/pysäyttämiseksi", "Sudo Password": "Sudo-salasana", - "Confirm": "Vahvista" + "Click to add, click again to remove. Changes are saved automatically.": "Napsauta lisätäksesi, napsauta uudelleen poistaaksesi. Muutokset tallennetaan automaattisesti." } diff --git a/public/i18n/literals/fr.json b/public/i18n/literals/fr.json index 5a75f5c0..e52ac65e 100644 --- a/public/i18n/literals/fr.json +++ b/public/i18n/literals/fr.json @@ -12,7 +12,7 @@ "Logout": "Déconnexion", "Login": "Connexion", "Providers": "Fournisseurs", - "Usage": "Utilisation", + "Usage": "Statistiques", "API Key": "Clé API", "Connected": "Connecté", "Disconnected": "Déconnecté", @@ -91,9 +91,7 @@ "Dark": "Sombre", "Auto": "Automatique", "Endpoint": "Point final", - "Providers": "Fournisseurs", "Combos": "Combinaisons", - "Usage": "Statistiques", "Quota Tracker": "Suivi des quotas", "MITM": "MITM", "CLI Tools": "Outils CLI", @@ -150,7 +148,6 @@ "No Proxy": "Pas de proxy", "Comma-separated hostnames/domains to bypass the proxy.": "Noms d'hôtes/domaines séparés par des virgules pour contourner le proxy.", "Test proxy URL": "Tester l'URL du proxy", - "Apply": "Appliquer", "Proxy settings applied": "Paramètres de proxy appliqués", "Proxy enabled": "Proxy activé", "Proxy disabled": "Proxy désactivé", @@ -178,7 +175,6 @@ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "Utilisez Antigravity IDE et GitHub Copilot → avec N'IMPORTE QUEL fournisseur/modèle de 9Router", "How it works:": "Comment ça marche :", "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Demande Antigravity/Copilot IDE → Redirection DNS vers localhost:443 → Le proxy MITM intercepte → 9Router → réponse à Antigravity/Copilot", - "API Key": "Clé API", "No API keys — create one in Keys page": "Aucune clé API — créez-en une dans la page Clés", "sk_9router (default)": "sk_9router (par défaut)", "Server started": "Serveur démarré", @@ -192,5 +188,5 @@ "Sudo Password Required": "Mot de passe Sudo requis", "Enter your sudo password to start/stop MITM server": "Entrez votre mot de passe sudo pour démarrer/arrêter le serveur MITM", "Sudo Password": "Mot de passe sudo", - "Confirm": "Confirmer" + "Click to add, click again to remove. Changes are saved automatically.": "Cliquez pour ajouter, cliquez à nouveau pour supprimer. Les modifications sont enregistrées automatiquement." } diff --git a/public/i18n/literals/he.json b/public/i18n/literals/he.json index bb519b3c..b7148717 100644 --- a/public/i18n/literals/he.json +++ b/public/i18n/literals/he.json @@ -12,7 +12,7 @@ "Logout": "התנתקות", "Login": "כניסה", "Providers": "ספקים", - "Usage": "שימוש", + "Usage": "סטטיסטיקה", "API Key": "מפתח API", "Connected": "מחובר", "Disconnected": "מנותק", @@ -91,9 +91,7 @@ "Dark": "אפל", "Auto": "אוטומטי", "Endpoint": "נקודת קצה", - "Providers": "ספקים", "Combos": "שילובים", - "Usage": "סטטיסטיקה", "Quota Tracker": "עוקב הקצאה", "MITM": "MITM", "CLI Tools": "כלים CLI", @@ -150,7 +148,6 @@ "No Proxy": "ללא פרוקסי", "Comma-separated hostnames/domains to bypass the proxy.": "שמות משדר/תחומים מופרדים בפסיקים לעקיפת הפרוקסי.", "Test proxy URL": "בדוק URL פרוקסי", - "Apply": "החל", "Proxy settings applied": "הגדרות פרוקסי הופעלו", "Proxy enabled": "פרוקסי הופעל", "Proxy disabled": "פרוקסי מבוטל", @@ -178,7 +175,6 @@ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "השתמש ב-Antigravity IDE ו-GitHub Copilot → עם כל ספק/מודל מ-9Router", "How it works:": "איך זה עובד:", "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "בקשת Antigravity/Copilot IDE → הפניה DNS ל-localhost:443 → פרוקסי MITM חוטף → 9Router → תגובה ל-Antigravity/Copilot", - "API Key": "מפתח API", "No API keys — create one in Keys page": "אין מפתחות API — צור אחד בעמוד Keys", "sk_9router (default)": "sk_9router (ברירת מחדל)", "Server started": "השרת התחיל", @@ -192,5 +188,5 @@ "Sudo Password Required": "סיסמת Sudo נדרשת", "Enter your sudo password to start/stop MITM server": "הזן את סיסמת sudo שלך כדי להתחיל/עצור שרת MITM", "Sudo Password": "סיסמת Sudo", - "Confirm": "אישור" + "Click to add, click again to remove. Changes are saved automatically.": "לחץ להוספה, לחץ שוב להסרה. השינויים נשמרים אוטומטית." } diff --git a/public/i18n/literals/hi.json b/public/i18n/literals/hi.json index 25bf5f04..cf4b7f3d 100644 --- a/public/i18n/literals/hi.json +++ b/public/i18n/literals/hi.json @@ -12,7 +12,7 @@ "Logout": "लॉग आउट", "Login": "लॉगिन", "Providers": "प्रदाता", - "Usage": "उपयोग", + "Usage": "उपयोग के आंकड़े", "API Key": "API कुंजी", "Connected": "जुड़ा हुआ", "Disconnected": "डिस्कनेक्ट किया गया", @@ -91,9 +91,7 @@ "Dark": "अंधेरा", "Auto": "स्वचालित", "Endpoint": "एंडपॉइंट", - "Providers": "प्रदाता", "Combos": "कॉम्बो", - "Usage": "उपयोग के आंकड़े", "Quota Tracker": "कोटा ट्रैकर", "MITM": "MITM", "CLI Tools": "उपकरण", @@ -150,7 +148,6 @@ "No Proxy": "कोई प्रॉक्सी नहीं", "Comma-separated hostnames/domains to bypass the proxy.": "प्रॉक्सी को बायपास करने के लिए अल्पविराम से अलग की गई होस्टनाम/डोमेन।", "Test proxy URL": "प्रॉक्सी URL का परीक्षण करें", - "Apply": "लागू करें", "Proxy settings applied": "प्रॉक्सी सेटिंग्स लागू की गई", "Proxy enabled": "प्रॉक्सी सक्षम", "Proxy disabled": "प्रॉक्सी अक्षम", @@ -178,7 +175,6 @@ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "Antigravity IDE और GitHub Copilot का उपयोग करें → 9Router से किसी भी प्रदाता/मॉडल के साथ", "How it works:": "यह कैसे काम करता है:", "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Antigravity/Copilot IDE अनुरोध → DNS को localhost:443 में पुनर्निर्देशित करें → MITM प्रॉक्सी इंटरसेप्ट करता है → 9Router → Antigravity/Copilot को प्रतिक्रिया", - "API Key": "API कुंजी", "No API keys — create one in Keys page": "कोई API कुंजी नहीं — Keys पृष्ठ में एक बनाएं", "sk_9router (default)": "sk_9router (डिफ़ॉल्ट)", "Server started": "सर्वर शुरू किया गया", @@ -192,5 +188,5 @@ "Sudo Password Required": "Sudo पासवर्ड आवश्यक है", "Enter your sudo password to start/stop MITM server": "MITM सर्वर शुरू/रोकने के लिए अपना sudo पासवर्ड दर्ज करें", "Sudo Password": "Sudo पासवर्ड", - "Confirm": "पुष्टि करें" + "Click to add, click again to remove. Changes are saved automatically.": "जोड़ने के लिए क्लिक करें, हटाने के लिए फिर से क्लिक करें। परिवर्तन स्वचालित रूप से सहेजे जाते हैं।" } diff --git a/public/i18n/literals/hu.json b/public/i18n/literals/hu.json index 05954a0e..263455db 100644 --- a/public/i18n/literals/hu.json +++ b/public/i18n/literals/hu.json @@ -12,7 +12,7 @@ "Logout": "Kijelentkezés", "Login": "Bejelentkezés", "Providers": "Szolgáltatók", - "Usage": "Használat", + "Usage": "Használati statisztika", "API Key": "API-kulcs", "Connected": "Csatlakoztatva", "Disconnected": "Leválasztva", @@ -91,9 +91,7 @@ "Dark": "Sötét", "Auto": "Automatikus", "Endpoint": "Végpont", - "Providers": "Szolgáltatók", "Combos": "Kombinációk", - "Usage": "Használati statisztika", "Quota Tracker": "Kvóta nyomkövetés", "MITM": "MITM", "CLI Tools": "Eszközök", @@ -150,7 +148,6 @@ "No Proxy": "Nincs proxy", "Comma-separated hostnames/domains to bypass the proxy.": "Vesszővel elválasztott gazdanév/tartomány a proxy megkerüléséhez.", "Test proxy URL": "Proxy URL-cím tesztelése", - "Apply": "Alkalmazás", "Proxy settings applied": "Proxy beállítások alkalmazva", "Proxy enabled": "Proxy engedélyezve", "Proxy disabled": "Proxy letiltva", @@ -178,7 +175,6 @@ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "Antigravity IDE és GitHub Copilot használata → az 9Router bármelyik szolgáltatójával/modelljével", "How it works:": "Hogyan működik:", "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Antigravity/Copilot IDE kérés → DNS átirányítás a localhost:443-ra → MITM proxy elfogja → 9Router → válasz Antigravity/Copilot-nak", - "API Key": "API-kulcs", "No API keys — create one in Keys page": "Nincsenek API-kulcsok — hozzon létre egyet a Keys oldalon", "sk_9router (default)": "sk_9router (alapértelmezett)", "Server started": "Szerver elindult", @@ -192,5 +188,5 @@ "Sudo Password Required": "Sudo jelszó szükséges", "Enter your sudo password to start/stop MITM server": "Adja meg sudo jelszavát a MITM szerver indításához/leállításához", "Sudo Password": "Sudo jelszó", - "Confirm": "Megerősítés" + "Click to add, click again to remove. Changes are saved automatically.": "Kattintson a hozzáadáshoz, kattintson újra az eltávolításhoz. A változtatások automatikusan mentésre kerülnek." } diff --git a/public/i18n/literals/id.json b/public/i18n/literals/id.json index 9d8e26e1..13b308b1 100644 --- a/public/i18n/literals/id.json +++ b/public/i18n/literals/id.json @@ -12,7 +12,7 @@ "Logout": "Keluar", "Login": "Masuk", "Providers": "Penyedia", - "Usage": "Penggunaan", + "Usage": "Statistik Penggunaan", "API Key": "Kunci API", "Connected": "Terhubung", "Disconnected": "Terputus", @@ -91,9 +91,7 @@ "Dark": "Gelap", "Auto": "Otomatis", "Endpoint": "Titik Akhir", - "Providers": "Penyedia", "Combos": "Kombinasi", - "Usage": "Statistik Penggunaan", "Quota Tracker": "Pelacak Kuota", "MITM": "MITM", "CLI Tools": "Alat", @@ -150,7 +148,6 @@ "No Proxy": "Tidak Ada Proxy", "Comma-separated hostnames/domains to bypass the proxy.": "Nama host/domain yang dipisahkan koma untuk melewati proxy.", "Test proxy URL": "Uji URL Proxy", - "Apply": "Terapkan", "Proxy settings applied": "Pengaturan proxy diterapkan", "Proxy enabled": "Proxy diaktifkan", "Proxy disabled": "Proxy dinonaktifkan", @@ -178,7 +175,6 @@ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "Gunakan Antigravity IDE & GitHub Copilot → dengan PENYEDIA/model APA PUN dari 9Router", "How it works:": "Cara kerjanya:", "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Permintaan Antigravity/Copilot IDE → Pengalihan DNS ke localhost:443 → Proxy MITM mengintersep → 9Router → respons ke Antigravity/Copilot", - "API Key": "Kunci API", "No API keys — create one in Keys page": "Tidak ada kunci API — buat satu di halaman Keys", "sk_9router (default)": "sk_9router (bawaan)", "Server started": "Server dimulai", @@ -192,5 +188,5 @@ "Sudo Password Required": "Kata Sandi Sudo Diperlukan", "Enter your sudo password to start/stop MITM server": "Masukkan kata sandi sudo Anda untuk memulai/menghentikan server MITM", "Sudo Password": "Kata Sandi Sudo", - "Confirm": "Konfirmasi" + "Click to add, click again to remove. Changes are saved automatically.": "Klik untuk menambah, klik lagi untuk menghapus. Perubahan disimpan secara otomatis." } diff --git a/public/i18n/literals/it.json b/public/i18n/literals/it.json index 18264329..37a11525 100644 --- a/public/i18n/literals/it.json +++ b/public/i18n/literals/it.json @@ -12,7 +12,7 @@ "Logout": "Esci", "Login": "Accedi", "Providers": "Provider", - "Usage": "Utilizzo", + "Usage": "Statistiche di utilizzo", "API Key": "Chiave API", "Connected": "Connesso", "Disconnected": "Disconnesso", @@ -91,9 +91,7 @@ "Dark": "Scuro", "Auto": "Automatico", "Endpoint": "Endpoint", - "Providers": "Provider", "Combos": "Combinazioni", - "Usage": "Statistiche di utilizzo", "Quota Tracker": "Tracker quota", "MITM": "MITM", "CLI Tools": "Strumenti", @@ -150,7 +148,6 @@ "No Proxy": "Nessun proxy", "Comma-separated hostnames/domains to bypass the proxy.": "Nomi host/domini separati da virgole per ignorare il proxy.", "Test proxy URL": "Test URL proxy", - "Apply": "Applica", "Proxy settings applied": "Impostazioni proxy applicate", "Proxy enabled": "Proxy abilitato", "Proxy disabled": "Proxy disabilitato", @@ -178,7 +175,6 @@ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "Usa Antigravity IDE & GitHub Copilot → con QUALSIASI provider/modello da 9Router", "How it works:": "Come funziona:", "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Richiesta Antigravity/Copilot IDE → Reindirizzamento DNS a localhost:443 → Il proxy MITM intercetta → 9Router → Risposta a Antigravity/Copilot", - "API Key": "Chiave API", "No API keys — create one in Keys page": "Nessuna chiave API — crearne una nella pagina Chiavi", "sk_9router (default)": "sk_9router (predefinito)", "Server started": "Server avviato", @@ -192,5 +188,5 @@ "Sudo Password Required": "Password Sudo richiesta", "Enter your sudo password to start/stop MITM server": "Inserisci la tua password sudo per avviare/arrestare il server MITM", "Sudo Password": "Password Sudo", - "Confirm": "Conferma" + "Click to add, click again to remove. Changes are saved automatically.": "Clicca per aggiungere, clicca di nuovo per rimuovere. Le modifiche vengono salvate automaticamente." } diff --git a/public/i18n/literals/ja.json b/public/i18n/literals/ja.json index bfb63aa3..a43855c2 100644 --- a/public/i18n/literals/ja.json +++ b/public/i18n/literals/ja.json @@ -12,7 +12,7 @@ "Logout": "ログアウト", "Login": "ログイン", "Providers": "プロバイダー", - "Usage": "使用状況", + "Usage": "統計", "API Key": "APIキー", "Connected": "接続済み", "Disconnected": "未接続", @@ -91,9 +91,7 @@ "Dark": "ダーク", "Auto": "自動", "Endpoint": "エンドポイント", - "Providers": "プロバイダー", "Combos": "コンボ", - "Usage": "統計", "Quota Tracker": "クォータトラッカー", "MITM": "MITM", "CLI Tools": "CLIツール", @@ -150,7 +148,6 @@ "No Proxy": "プロキシなし", "Comma-separated hostnames/domains to bypass the proxy.": "プロキシをバイパスするためのコンマ区切りのホスト名/ドメイン。", "Test proxy URL": "プロキシURLをテスト", - "Apply": "適用", "Proxy settings applied": "プロキシ設定が適用されました", "Proxy enabled": "プロキシが有効になりました", "Proxy disabled": "プロキシが無効になりました", @@ -178,7 +175,6 @@ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "Antigravity IDE & GitHub Copilot → 9Router の任意のプロバイダー/モデルを使用", "How it works:": "しくみ:", "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Antigravity/Copilot IDE リクエスト → localhost:443 への DNS リダイレクト → MITM プロキシが傍受 → 9Router → Antigravity/Copilot への応答", - "API Key": "APIキー", "No API keys — create one in Keys page": "APIキーがありません — キーページで1つ作成してください", "sk_9router (default)": "sk_9router(デフォルト)", "Server started": "サーバーが開始されました", @@ -192,5 +188,5 @@ "Sudo Password Required": "Sudoパスワードが必要です", "Enter your sudo password to start/stop MITM server": "MITMサーバーを開始/停止するには、sudoパスワードを入力してください", "Sudo Password": "Sudoパスワード", - "Confirm": "確認" + "Click to add, click again to remove. Changes are saved automatically.": "クリックで追加、もう一度クリックで削除。変更は自動的に保存されます。" } diff --git a/public/i18n/literals/ko.json b/public/i18n/literals/ko.json index 85deabe4..9dd94337 100644 --- a/public/i18n/literals/ko.json +++ b/public/i18n/literals/ko.json @@ -12,7 +12,7 @@ "Logout": "로그아웃", "Login": "로그인", "Providers": "제공자", - "Usage": "사용 현황", + "Usage": "통계", "API Key": "API 키", "Connected": "연결됨", "Disconnected": "연결 해제됨", @@ -91,9 +91,7 @@ "Dark": "어두움", "Auto": "자동", "Endpoint": "엔드포인트", - "Providers": "제공자", "Combos": "조합", - "Usage": "통계", "Quota Tracker": "할당량 추적", "MITM": "MITM", "CLI Tools": "CLI 도구", @@ -150,7 +148,6 @@ "No Proxy": "프록시 없음", "Comma-separated hostnames/domains to bypass the proxy.": "프록시를 우회하기 위한 쉼표로 구분된 호스트명/도메인입니다.", "Test proxy URL": "프록시 URL 테스트", - "Apply": "적용", "Proxy settings applied": "프록시 설정이 적용되었습니다", "Proxy enabled": "프록시 활성화됨", "Proxy disabled": "프록시 비활성화됨", @@ -178,7 +175,6 @@ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "Antigravity IDE 및 GitHub Copilot 사용 → 9Router의 모든 제공자/모델과 함께", "How it works:": "작동 방식:", "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Antigravity/Copilot IDE 요청 → localhost:443로 DNS 리디렉션 → MITM 프록시가 가로챔 → 9Router → Antigravity/Copilot으로 응답", - "API Key": "API 키", "No API keys — create one in Keys page": "API 키 없음 — 키 페이지에서 만들기", "sk_9router (default)": "sk_9router (기본값)", "Server started": "서버 시작됨", @@ -192,5 +188,5 @@ "Sudo Password Required": "Sudo 암호 필요", "Enter your sudo password to start/stop MITM server": "MITM 서버를 시작/중지하려면 sudo 암호를 입력하세요", "Sudo Password": "Sudo 암호", - "Confirm": "확인" + "Click to add, click again to remove. Changes are saved automatically.": "클릭하여 추가, 다시 클릭하여 제거. 변경 사항은 자동으로 저장됩니다." } diff --git a/public/i18n/literals/nl.json b/public/i18n/literals/nl.json index 38ca28e8..8119df98 100644 --- a/public/i18n/literals/nl.json +++ b/public/i18n/literals/nl.json @@ -12,7 +12,7 @@ "Logout": "Afmelden", "Login": "Aanmelden", "Providers": "Providers", - "Usage": "Gebruik", + "Usage": "Statistieken", "API Key": "API-sleutel", "Connected": "Verbonden", "Disconnected": "Verbroken", @@ -91,9 +91,7 @@ "Dark": "Donker", "Auto": "Automatisch", "Endpoint": "Eindpunt", - "Providers": "Providers", "Combos": "Combinaties", - "Usage": "Statistieken", "Quota Tracker": "Quotabijhouder", "MITM": "MITM", "CLI Tools": "CLI-tools", @@ -150,7 +148,6 @@ "No Proxy": "Geen proxy", "Comma-separated hostnames/domains to bypass the proxy.": "Door komma's gescheiden hostnamen/domeinen om de proxy te omzeilen.", "Test proxy URL": "Proxy-URL testen", - "Apply": "Toepassen", "Proxy settings applied": "Proxy-instellingen toegepast", "Proxy enabled": "Proxy ingeschakeld", "Proxy disabled": "Proxy uitgeschakeld", @@ -178,7 +175,6 @@ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "Gebruik Antigravity IDE en GitHub Copilot → met ELKE provider/model van 9Router", "How it works:": "Hoe het werkt:", "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Antigravity/Copilot IDE-aanvraag → DNS-omleiding naar localhost:443 → MITM-proxy onderschept → 9Router → antwoord naar Antigravity/Copilot", - "API Key": "API-sleutel", "No API keys — create one in Keys page": "Geen API-sleutels — maak er één aan op de pagina Sleutels", "sk_9router (default)": "sk_9router (standaard)", "Server started": "Server gestart", @@ -192,5 +188,5 @@ "Sudo Password Required": "Sudo-wachtwoord vereist", "Enter your sudo password to start/stop MITM server": "Voer uw sudo-wachtwoord in om de MITM-server te starten/stoppen", "Sudo Password": "Sudo-wachtwoord", - "Confirm": "Bevestigen" + "Click to add, click again to remove. Changes are saved automatically.": "Klik om toe te voegen, klik opnieuw om te verwijderen. Wijzigingen worden automatisch opgeslagen." } diff --git a/public/i18n/literals/no.json b/public/i18n/literals/no.json index e9af007c..54b0ae6c 100644 --- a/public/i18n/literals/no.json +++ b/public/i18n/literals/no.json @@ -12,7 +12,7 @@ "Logout": "Logg ut", "Login": "Logg inn", "Providers": "Leverandører", - "Usage": "Bruk", + "Usage": "Bruksstatistikk", "API Key": "API-nøkkel", "Connected": "Tilkoblet", "Disconnected": "Frakoblet", @@ -91,9 +91,7 @@ "Dark": "Mørk", "Auto": "Automatisk", "Endpoint": "Endepunkt", - "Providers": "Leverandører", "Combos": "Kombinasjoner", - "Usage": "Bruksstatistikk", "Quota Tracker": "Kvotasporer", "MITM": "MITM", "CLI Tools": "Verktøy", @@ -150,7 +148,6 @@ "No Proxy": "Ingen proxy", "Comma-separated hostnames/domains to bypass the proxy.": "Kommaseparerte vertsnavner/domener for å omgå proxyen.", "Test proxy URL": "Test proxy-URL", - "Apply": "Bruk", "Proxy settings applied": "Proxyinnstillinger brukt", "Proxy enabled": "Proxy aktivert", "Proxy disabled": "Proxy deaktivert", @@ -178,7 +175,6 @@ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "Bruk Antigravity IDE & GitHub Copilot → med ENHVER leverandør/modell fra 9Router", "How it works:": "Slik fungerer det:", "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Antigravity/Copilot IDE-forespørsel → DNS-omdirigering til localhost:443 → MITM-proxy avlytt → 9Router → svar til Antigravity/Copilot", - "API Key": "API-nøkkel", "No API keys — create one in Keys page": "Ingen API-nøkler — lag en på Keys-siden", "sk_9router (default)": "sk_9router (standard)", "Server started": "Server startet", @@ -192,5 +188,5 @@ "Sudo Password Required": "Sudo-passord påkrevd", "Enter your sudo password to start/stop MITM server": "Skriv inn sudo-passordet ditt for å starte/stoppe MITM-server", "Sudo Password": "Sudo-passord", - "Confirm": "Bekreft" + "Click to add, click again to remove. Changes are saved automatically.": "Klikk for å legge til, klikk igjen for å fjerne. Endringer lagres automatisk." } diff --git a/public/i18n/literals/pl.json b/public/i18n/literals/pl.json index 4c857330..0d7a9173 100644 --- a/public/i18n/literals/pl.json +++ b/public/i18n/literals/pl.json @@ -12,7 +12,7 @@ "Logout": "Wyloguj się", "Login": "Zaloguj się", "Providers": "Dostawcy", - "Usage": "Użycie", + "Usage": "Statystyka", "API Key": "Klucz API", "Connected": "Połączony", "Disconnected": "Rozłączony", @@ -91,9 +91,7 @@ "Dark": "Ciemny", "Auto": "Automatycznie", "Endpoint": "Punkt końcowy", - "Providers": "Dostawcy", "Combos": "Kombinacje", - "Usage": "Statystyka", "Quota Tracker": "Śledzenie limitów", "MITM": "MITM", "CLI Tools": "Narzędzia CLI", @@ -150,7 +148,6 @@ "No Proxy": "Bez serwera proxy", "Comma-separated hostnames/domains to bypass the proxy.": "Nazwy hostów/domeny oddzielone przecinkami do pominięcia serwera proxy.", "Test proxy URL": "Przetestuj URL serwera proxy", - "Apply": "Zastosuj", "Proxy settings applied": "Ustawienia serwera proxy zastosowane", "Proxy enabled": "Serwer proxy włączony", "Proxy disabled": "Serwer proxy wyłączony", @@ -178,7 +175,6 @@ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "Użyj Antigravity IDE i GitHub Copilot → z DOWOLNYM dostawcą/modelem z 9Router", "How it works:": "Jak to działa:", "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Żądanie Antigravity/Copilot IDE → Przekierowanie DNS na localhost:443 → Serwer proxy MITM przechwytuje → 9Router → odpowiedź do Antigravity/Copilot", - "API Key": "Klucz API", "No API keys — create one in Keys page": "Brak kluczy API — utwórz jeden na stronie Klucze", "sk_9router (default)": "sk_9router (domyślnie)", "Server started": "Serwer uruchomiony", @@ -192,5 +188,5 @@ "Sudo Password Required": "Wymagane hasło Sudo", "Enter your sudo password to start/stop MITM server": "Wprowadź hasło sudo, aby uruchomić/zatrzymać serwer MITM", "Sudo Password": "Hasło sudo", - "Confirm": "Potwierdź" + "Click to add, click again to remove. Changes are saved automatically.": "Kliknij, aby dodać, kliknij ponownie, aby usunąć. Zmiany są zapisywane automatycznie." } diff --git a/public/i18n/literals/pt-BR.json b/public/i18n/literals/pt-BR.json index e487d74b..08a453c0 100644 --- a/public/i18n/literals/pt-BR.json +++ b/public/i18n/literals/pt-BR.json @@ -12,7 +12,7 @@ "Logout": "Sair", "Login": "Conectar", "Providers": "Provedores", - "Usage": "Uso", + "Usage": "Estatísticas", "API Key": "Chave API", "Connected": "Conectado", "Disconnected": "Desconectado", @@ -91,9 +91,7 @@ "Dark": "Escuro", "Auto": "Automático", "Endpoint": "Ponto de extremidade", - "Providers": "Provedores", "Combos": "Combinações", - "Usage": "Estatísticas", "Quota Tracker": "Rastreador de cota", "MITM": "MITM", "CLI Tools": "Ferramentas CLI", @@ -150,7 +148,6 @@ "No Proxy": "Sem proxy", "Comma-separated hostnames/domains to bypass the proxy.": "Nomes de host/domínios separados por vírgula para contornar o proxy.", "Test proxy URL": "Testar URL do proxy", - "Apply": "Aplicar", "Proxy settings applied": "Configurações de proxy aplicadas", "Proxy enabled": "Proxy ativado", "Proxy disabled": "Proxy desativado", @@ -178,7 +175,6 @@ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "Use Antigravity IDE e GitHub Copilot → com QUALQUER provedor/modelo do 9Router", "How it works:": "Como funciona:", "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Solicitação do Antigravity/Copilot IDE → Redirecionamento DNS para localhost:443 → Proxy MITM intercepta → 9Router → resposta para Antigravity/Copilot", - "API Key": "Chave API", "No API keys — create one in Keys page": "Sem chaves de API — crie uma na página Chaves", "sk_9router (default)": "sk_9router (padrão)", "Server started": "Servidor iniciado", @@ -192,5 +188,5 @@ "Sudo Password Required": "Senha Sudo necessária", "Enter your sudo password to start/stop MITM server": "Digite sua senha sudo para iniciar/parar o servidor MITM", "Sudo Password": "Senha sudo", - "Confirm": "Confirmar" + "Click to add, click again to remove. Changes are saved automatically.": "Clique para adicionar, clique novamente para remover. As alterações são salvas automaticamente." } diff --git a/public/i18n/literals/pt-PT.json b/public/i18n/literals/pt-PT.json index 0d3719f8..2106ceda 100644 --- a/public/i18n/literals/pt-PT.json +++ b/public/i18n/literals/pt-PT.json @@ -12,7 +12,7 @@ "Logout": "Terminar sessão", "Login": "Iniciar sessão", "Providers": "Fornecedores", - "Usage": "Utilização", + "Usage": "Estatísticas", "API Key": "Chave API", "Connected": "Ligado", "Disconnected": "Desligado", @@ -91,9 +91,7 @@ "Dark": "Escuro", "Auto": "Automático", "Endpoint": "Ponto final", - "Providers": "Fornecedores", "Combos": "Combinações", - "Usage": "Estatísticas", "Quota Tracker": "Rastreador de quota", "MITM": "MITM", "CLI Tools": "Ferramentas CLI", @@ -150,7 +148,6 @@ "No Proxy": "Sem proxy", "Comma-separated hostnames/domains to bypass the proxy.": "Nomes de host/domínios separados por vírgulas para contornar o proxy.", "Test proxy URL": "Testar URL do proxy", - "Apply": "Aplicar", "Proxy settings applied": "Definições de proxy aplicadas", "Proxy enabled": "Proxy ativado", "Proxy disabled": "Proxy desativado", @@ -178,7 +175,6 @@ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "Utilize o Antigravity IDE e GitHub Copilot → com QUALQUER fornecedor/modelo do 9Router", "How it works:": "Como funciona:", "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Pedido do Antigravity/Copilot IDE → Redirecionamento DNS para localhost:443 → Proxy MITM interceta → 9Router → resposta para Antigravity/Copilot", - "API Key": "Chave API", "No API keys — create one in Keys page": "Sem chaves de API — crie uma na página Chaves", "sk_9router (default)": "sk_9router (predefinição)", "Server started": "Servidor iniciado", @@ -192,5 +188,5 @@ "Sudo Password Required": "Palavra-passe Sudo necessária", "Enter your sudo password to start/stop MITM server": "Introduza a sua palavra-passe sudo para iniciar/parar o servidor MITM", "Sudo Password": "Palavra-passe sudo", - "Confirm": "Confirmar" + "Click to add, click again to remove. Changes are saved automatically.": "Clique para adicionar, clique novamente para remover. As alterações são guardadas automaticamente." } diff --git a/public/i18n/literals/ro.json b/public/i18n/literals/ro.json index bd599f8f..85eef983 100644 --- a/public/i18n/literals/ro.json +++ b/public/i18n/literals/ro.json @@ -3,7 +3,7 @@ "Delete": "Ștergere", "Edit": "Editare", "Save": "Salvare", - "Close": "Închidere", + "Close": "Închide", "Add": "Adăugare", "Remove": "Eliminare", "Settings": "Setări", @@ -12,7 +12,7 @@ "Logout": "Ieșire", "Login": "Conectare", "Providers": "Furnizori", - "Usage": "Utilizare", + "Usage": "Statistici de utilizare", "API Key": "Cheie API", "Connected": "Conectat", "Disconnected": "Deconectat", @@ -91,9 +91,7 @@ "Dark": "Întunecat", "Auto": "Automat", "Endpoint": "Punct final", - "Providers": "Furnizori", "Combos": "Combinații", - "Usage": "Statistici de utilizare", "Quota Tracker": "Urmăritor cote", "MITM": "MITM", "CLI Tools": "Instrumente", @@ -150,7 +148,6 @@ "No Proxy": "Nicio delegare", "Comma-separated hostnames/domains to bypass the proxy.": "Nume de gazdă/domenii separate prin virgulă pentru a ocoli proxy-ul.", "Test proxy URL": "Testare URL proxy", - "Apply": "Aplicare", "Proxy settings applied": "Setările proxy au fost aplicate", "Proxy enabled": "Proxy activat", "Proxy disabled": "Proxy dezactivat", @@ -178,7 +175,6 @@ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "Folosiți Antigravity IDE & GitHub Copilot → cu ORICE furnizor/model din 9Router", "How it works:": "Cum funcționează:", "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Solicitare Antigravity/Copilot IDE → Redirecționare DNS la localhost:443 → Proxy MITM interceptează → 9Router → răspuns la Antigravity/Copilot", - "API Key": "Cheie API", "No API keys — create one in Keys page": "Nicio cheie API — creați una în pagina Chei", "sk_9router (default)": "sk_9router (implicit)", "Server started": "Server pornit", @@ -192,5 +188,5 @@ "Sudo Password Required": "Parola Sudo este necesară", "Enter your sudo password to start/stop MITM server": "Introduceți parola sudo pentru a porni/opri serverul MITM", "Sudo Password": "Parola Sudo", - "Confirm": "Confirmare" + "Click to add, click again to remove. Changes are saved automatically.": "Faceți clic pentru a adăuga, faceți clic din nou pentru a elimina. Modificările sunt salvate automat." } diff --git a/public/i18n/literals/ru.json b/public/i18n/literals/ru.json index 779a8bd0..f580a6a4 100644 --- a/public/i18n/literals/ru.json +++ b/public/i18n/literals/ru.json @@ -12,7 +12,7 @@ "Logout": "Выход", "Login": "Вход", "Providers": "Провайдеры", - "Usage": "Использование", + "Usage": "Статистика", "API Key": "Ключ API", "Connected": "Подключено", "Disconnected": "Отключено", @@ -91,9 +91,7 @@ "Dark": "Темная", "Auto": "Автоматически", "Endpoint": "Конечная точка", - "Providers": "Провайдеры", "Combos": "Комбинации", - "Usage": "Статистика", "Quota Tracker": "Отслеживание квоты", "MITM": "MITM", "CLI Tools": "Инструменты CLI", @@ -150,7 +148,6 @@ "No Proxy": "Без прокси", "Comma-separated hostnames/domains to bypass the proxy.": "Разделенные запятыми имена хостов/домены для обхода прокси.", "Test proxy URL": "Протестировать URL прокси", - "Apply": "Применить", "Proxy settings applied": "Параметры прокси применены", "Proxy enabled": "Прокси включен", "Proxy disabled": "Прокси отключен", @@ -178,7 +175,6 @@ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "Используйте Antigravity IDE и GitHub Copilot → с ЛЮБЫМ провайдером/моделью от 9Router", "How it works:": "Как это работает:", "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Запрос Antigravity/Copilot IDE → Перенаправление DNS на localhost:443 → Прокси MITM перехватывает → 9Router → ответ для Antigravity/Copilot", - "API Key": "Ключ API", "No API keys — create one in Keys page": "Нет ключей API — создайте один на странице ключей", "sk_9router (default)": "sk_9router (по умолчанию)", "Server started": "Сервер запущен", @@ -192,5 +188,5 @@ "Sudo Password Required": "Требуется пароль Sudo", "Enter your sudo password to start/stop MITM server": "Введите пароль sudo для запуска/остановки сервера MITM", "Sudo Password": "Пароль sudo", - "Confirm": "Подтвердить" + "Click to add, click again to remove. Changes are saved automatically.": "Нажмите, чтобы добавить, нажмите ещё раз, чтобы удалить. Изменения сохраняются автоматически." } diff --git a/public/i18n/literals/sv.json b/public/i18n/literals/sv.json index e77b89b0..58033883 100644 --- a/public/i18n/literals/sv.json +++ b/public/i18n/literals/sv.json @@ -12,7 +12,7 @@ "Logout": "Logga ut", "Login": "Logga in", "Providers": "Leverantörer", - "Usage": "Användning", + "Usage": "Användarstatistik", "API Key": "API-nyckel", "Connected": "Ansluten", "Disconnected": "Frånkopplad", @@ -91,9 +91,7 @@ "Dark": "Mörk", "Auto": "Automatisk", "Endpoint": "Slutpunkt", - "Providers": "Leverantörer", "Combos": "Kombinationer", - "Usage": "Användarstatistik", "Quota Tracker": "Kvotspårare", "MITM": "MITM", "CLI Tools": "Verktyg", @@ -150,7 +148,6 @@ "No Proxy": "Ingen proxy", "Comma-separated hostnames/domains to bypass the proxy.": "Kommaseparerade värdnamn/domäner för att kringgå proxyn.", "Test proxy URL": "Testa proxy-URL", - "Apply": "Verkställ", "Proxy settings applied": "Proxyinställningar tillämpade", "Proxy enabled": "Proxy aktiverad", "Proxy disabled": "Proxy inaktiverad", @@ -178,7 +175,6 @@ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "Använd Antigravity IDE & GitHub Copilot → med VALFRI leverantör/modell från 9Router", "How it works:": "Hur det fungerar:", "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Antigravity/Copilot IDE-begäran → DNS-omdirigering till localhost:443 → MITM-proxy avlyssnar → 9Router → svar till Antigravity/Copilot", - "API Key": "API-nyckel", "No API keys — create one in Keys page": "Inga API-nycklar — skapa en på nyckelsidan", "sk_9router (default)": "sk_9router (standard)", "Server started": "Servern startad", @@ -192,5 +188,5 @@ "Sudo Password Required": "Sudo-lösenord krävs", "Enter your sudo password to start/stop MITM server": "Ange ditt sudo-lösenord för att starta/stoppa MITM-servern", "Sudo Password": "Sudo-lösenord", - "Confirm": "Bekräfta" + "Click to add, click again to remove. Changes are saved automatically.": "Klicka för att lägga till, klicka igen för att ta bort. Ändringar sparas automatiskt." } diff --git a/public/i18n/literals/th.json b/public/i18n/literals/th.json index d0a7248e..a325bc6f 100644 --- a/public/i18n/literals/th.json +++ b/public/i18n/literals/th.json @@ -12,7 +12,7 @@ "Logout": "ออกจากระบบ", "Login": "เข้าสู่ระบบ", "Providers": "ผู้ให้บริการ", - "Usage": "การใช้งาน", + "Usage": "สถิติการใช้งาน", "API Key": "คีย์ API", "Connected": "เชื่อมต่อแล้ว", "Disconnected": "ตัดการเชื่อมต่อ", @@ -91,9 +91,7 @@ "Dark": "มืด", "Auto": "อัตโนมัติ", "Endpoint": "จุดสิ้นสุด", - "Providers": "ผู้ให้บริการ", "Combos": "ชุดรวม", - "Usage": "สถิติการใช้งาน", "Quota Tracker": "ตัวติดตามโควต้า", "MITM": "MITM", "CLI Tools": "เครื่องมือ", @@ -150,7 +148,6 @@ "No Proxy": "ไม่มี Proxy", "Comma-separated hostnames/domains to bypass the proxy.": "ชื่อโฮสต์/โดเมนคั่นด้วยเครื่องหมายจุลภาค เพื่อข้าม proxy", "Test proxy URL": "ทดสอบ URL Proxy", - "Apply": "ใช้", "Proxy settings applied": "ใช้การตั้งค่า proxy แล้ว", "Proxy enabled": "เปิดใช้งาน proxy", "Proxy disabled": "ปิดใช้งาน proxy", @@ -178,7 +175,6 @@ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "ใช้ Antigravity IDE & GitHub Copilot → ที่มีผู้ให้บริการ/โมเดลใด ๆ จาก 9Router", "How it works:": "วิธีการทำงาน:", "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "คำขอ Antigravity/Copilot IDE → เปลี่ยนเส้นทาง DNS เป็น localhost:443 → MITM proxy สกัดปะท่อ → 9Router → ตอบสนอง Antigravity/Copilot", - "API Key": "คีย์ API", "No API keys — create one in Keys page": "ไม่มีคีย์ API — สร้างคีย์ในหน้า Keys", "sk_9router (default)": "sk_9router (ค่าเริ่มต้น)", "Server started": "เซิร์ฟเวอร์เริ่มต้นแล้ว", @@ -192,5 +188,5 @@ "Sudo Password Required": "ต้องการรหัสผ่าน Sudo", "Enter your sudo password to start/stop MITM server": "ป้อนรหัสผ่าน sudo ของคุณเพื่อเริ่ม/หยุดเซิร์ฟเวอร์ MITM", "Sudo Password": "รหัสผ่าน Sudo", - "Confirm": "ยืนยัน" + "Click to add, click again to remove. Changes are saved automatically.": "คลิกเพื่อเพิ่ม คลิกอีกครั้งเพื่อลบ การเปลี่ยนแปลงจะถูกบันทึกโดยอัตโนมัติ" } diff --git a/public/i18n/literals/tl.json b/public/i18n/literals/tl.json index 8c436767..600b8190 100644 --- a/public/i18n/literals/tl.json +++ b/public/i18n/literals/tl.json @@ -12,7 +12,7 @@ "Logout": "Maglog out", "Login": "Magsimula ng sesyon", "Providers": "Mga Provider", - "Usage": "Paggamit", + "Usage": "Mga Istatistika ng Paggamit", "API Key": "Susi ng API", "Connected": "Konektado", "Disconnected": "Hindi Konektado", @@ -91,9 +91,7 @@ "Dark": "Madilim", "Auto": "Awtomatiko", "Endpoint": "Endpoint", - "Providers": "Mga Provider", "Combos": "Mga Combo", - "Usage": "Mga Istatistika ng Paggamit", "Quota Tracker": "Quota Tracker", "MITM": "MITM", "CLI Tools": "Mga Tool", @@ -150,7 +148,6 @@ "No Proxy": "Walang Proxy", "Comma-separated hostnames/domains to bypass the proxy.": "Mga hostname/domain na pinagseparang komma upang lampasan ang proxy.", "Test proxy URL": "Subukan ang Proxy URL", - "Apply": "Ilapat", "Proxy settings applied": "Ang mga setting ng proxy ay inilapat", "Proxy enabled": "Ang proxy ay pinagana", "Proxy disabled": "Ang proxy ay hindi pinagana", @@ -178,7 +175,6 @@ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "Gamitin ang Antigravity IDE & GitHub Copilot → sa ANUMANG provider/model mula sa 9Router", "How it works:": "Paano ito gumagana:", "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Antigravity/Copilot IDE request → DNS redirect sa localhost:443 → MITM proxy intercepts → 9Router → response sa Antigravity/Copilot", - "API Key": "Susi ng API", "No API keys — create one in Keys page": "Walang API keys — lumikha ng isa sa Keys page", "sk_9router (default)": "sk_9router (default)", "Server started": "Ang server ay nagsimula", @@ -192,5 +188,5 @@ "Sudo Password Required": "Kailangan ng Sudo Password", "Enter your sudo password to start/stop MITM server": "Ipasok ang iyong sudo password upang simulan/ihinto ang MITM server", "Sudo Password": "Sudo Password", - "Confirm": "Kumpirmahin" + "Click to add, click again to remove. Changes are saved automatically.": "I-click para idagdag, i-click muli para alisin. Ang mga pagbabago ay awtomatikong nase-save." } diff --git a/public/i18n/literals/tr.json b/public/i18n/literals/tr.json index aac02428..92566bf3 100644 --- a/public/i18n/literals/tr.json +++ b/public/i18n/literals/tr.json @@ -12,7 +12,7 @@ "Logout": "Çıkış Yap", "Login": "Giriş Yap", "Providers": "Sağlayıcılar", - "Usage": "Kullanım", + "Usage": "Kullanım İstatistikleri", "API Key": "API Anahtarı", "Connected": "Bağlı", "Disconnected": "Bağlantısı Kesildi", @@ -91,9 +91,7 @@ "Dark": "Koyu", "Auto": "Otomatik", "Endpoint": "Uç Nokta", - "Providers": "Sağlayıcılar", "Combos": "Kombinasyonlar", - "Usage": "Kullanım İstatistikleri", "Quota Tracker": "Kota İzleyici", "MITM": "MITM", "CLI Tools": "Araçlar", @@ -150,7 +148,6 @@ "No Proxy": "Proxy Yok", "Comma-separated hostnames/domains to bypass the proxy.": "Proxy'yi atlamak için virgülle ayrılmış ana bilgisayar adları/etki alanları.", "Test proxy URL": "Test Proxy URL'si", - "Apply": "Uygula", "Proxy settings applied": "Proxy ayarları uygulandı", "Proxy enabled": "Proxy etkinleştirildi", "Proxy disabled": "Proxy devre dışı bırakıldı", @@ -178,7 +175,6 @@ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "Antigravity IDE & GitHub Copilot kullanın → 9Router'dan HERHANGİ bir sağlayıcı/model ile", "How it works:": "Nasıl çalışır:", "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Antigravity/Copilot IDE isteği → DNS'i localhost:443'e yönlendir → MITM proxy yakalar → 9Router → Antigravity/Copilot'a yanıt", - "API Key": "API Anahtarı", "No API keys — create one in Keys page": "API anahtarı yok — Keys sayfasında bir tane oluşturun", "sk_9router (default)": "sk_9router (varsayılan)", "Server started": "Sunucu başlatıldı", @@ -192,5 +188,5 @@ "Sudo Password Required": "Sudo Parolası Gerekli", "Enter your sudo password to start/stop MITM server": "MITM sunucusunu başlatmak/durdurmak için sudo parolanızı girin", "Sudo Password": "Sudo Parolası", - "Confirm": "Onayla" + "Click to add, click again to remove. Changes are saved automatically.": "Eklemek için tıklayın, kaldırmak için tekrar tıklayın. Değişiklikler otomatik olarak kaydedilir." } diff --git a/public/i18n/literals/uk.json b/public/i18n/literals/uk.json index 2b509536..73e7382d 100644 --- a/public/i18n/literals/uk.json +++ b/public/i18n/literals/uk.json @@ -12,7 +12,7 @@ "Logout": "Вийти", "Login": "Увійти", "Providers": "Постачальники", - "Usage": "Використання", + "Usage": "Статистика використання", "API Key": "Ключ API", "Connected": "Підключено", "Disconnected": "Відключено", @@ -91,9 +91,7 @@ "Dark": "Темна", "Auto": "Авто", "Endpoint": "Кінцева точка", - "Providers": "Постачальники", "Combos": "Комбо", - "Usage": "Статистика використання", "Quota Tracker": "Відстеження квоти", "MITM": "MITM", "CLI Tools": "Інструменти", @@ -150,7 +148,6 @@ "No Proxy": "Без проксі", "Comma-separated hostnames/domains to bypass the proxy.": "Розділені комами імена хостів/домени для обходу проксі.", "Test proxy URL": "Протестувати URL проксі", - "Apply": "Застосувати", "Proxy settings applied": "Параметри проксі застосовані", "Proxy enabled": "Проксі увімкнено", "Proxy disabled": "Проксі вимкнено", @@ -178,7 +175,6 @@ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "Використовуйте Antigravity IDE & GitHub Copilot → з БУДЬ-ЯКИМ постачальником/моделлю від 9Router", "How it works:": "Як це працює:", "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Запит Antigravity/Copilot IDE → Перенаправлення DNS на localhost:443 → MITM проксі перехопити → 9Router → відповідь на Antigravity/Copilot", - "API Key": "Ключ API", "No API keys — create one in Keys page": "Немає ключів API — створіть один на сторінці ключів", "sk_9router (default)": "sk_9router (за замовчуванням)", "Server started": "Сервер запущено", @@ -192,5 +188,5 @@ "Sudo Password Required": "Потрібен пароль Sudo", "Enter your sudo password to start/stop MITM server": "Введіть пароль sudo для запуску/зупинення MITM сервера", "Sudo Password": "Пароль Sudo", - "Confirm": "Підтвердити" + "Click to add, click again to remove. Changes are saved automatically.": "Натисніть, щоб додати, натисніть ще раз, щоб видалити. Зміни зберігаються автоматично." } diff --git a/public/i18n/literals/ur.json b/public/i18n/literals/ur.json index a7bcc5ff..34d1be9c 100644 --- a/public/i18n/literals/ur.json +++ b/public/i18n/literals/ur.json @@ -12,7 +12,7 @@ "Logout": "لاگ آؤٹ", "Login": "لاگ ان", "Providers": "فراہم کنندگان", - "Usage": "استعمال", + "Usage": "استعمال کے اعدادوشمار", "API Key": "API کلید", "Connected": "منسلک", "Disconnected": "منقطع", @@ -91,9 +91,7 @@ "Dark": "تاریک", "Auto": "خودکار", "Endpoint": "اختتام نقطہ", - "Providers": "فراہم کنندگان", "Combos": "امتزاجات", - "Usage": "استعمال کے اعدادوشمار", "Quota Tracker": "کوٹہ ٹریکر", "MITM": "MITM", "CLI Tools": "آلات", @@ -150,7 +148,6 @@ "No Proxy": "کوئی پروکسی نہیں", "Comma-separated hostnames/domains to bypass the proxy.": "پروکسی کو نظر انداز کرنے کے لیے کوما سے الگ شدہ ہوسٹ ناموں/ڈومین۔", "Test proxy URL": "پروکسی URL کو ٹیسٹ کریں", - "Apply": "لاگو کریں", "Proxy settings applied": "پروکسی ترتیبات لاگو کی گئیں", "Proxy enabled": "پروکسی فعال", "Proxy disabled": "پروکسی غیر فعال", @@ -178,7 +175,6 @@ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "Antigravity IDE اور GitHub Copilot استعمال کریں → 9Router سے کسی بھی فراہم کنندہ/ماڈل کے ساتھ", "How it works:": "یہ کیسے کام کرتا ہے:", "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Antigravity/Copilot IDE درخواست → DNS کو localhost:443 کی طرف ری ڈائریکٹ کریں → MITM پروکسی روکے → 9Router → Antigravity/Copilot کو جواب", - "API Key": "API کلید", "No API keys — create one in Keys page": "کوئی API کلید نہیں — Keys صفحہ میں ایک بنائیں", "sk_9router (default)": "sk_9router (ڈیفالٹ)", "Server started": "سرور شروع ہوگیا", @@ -192,5 +188,5 @@ "Sudo Password Required": "Sudo پاس ورڈ درکار ہے", "Enter your sudo password to start/stop MITM server": "MITM سرور شروع/بند کرنے کے لیے اپنا sudo پاس ورڈ داخل کریں", "Sudo Password": "Sudo پاس ورڈ", - "Confirm": "تصدیق کریں" + "Click to add, click again to remove. Changes are saved automatically.": "شامل کرنے کے لیے کلک کریں، ہٹانے کے لیے دوبارہ کلک کریں۔ تبدیلیاں خودکار طور پر محفوظ ہو جاتی ہیں۔" } diff --git a/public/i18n/literals/vi.json b/public/i18n/literals/vi.json index a876310b..142475f6 100644 --- a/public/i18n/literals/vi.json +++ b/public/i18n/literals/vi.json @@ -12,7 +12,7 @@ "Logout": "Đăng xuất", "Login": "Đăng nhập", "Providers": "Nhà cung cấp", - "Usage": "Sử dụng", + "Usage": "Thống kê", "API Key": "Khóa API", "Connected": " Đã kết nối", "Disconnected": "Chưa kết nối", @@ -91,9 +91,7 @@ "Dark": "Tối", "Auto": "Tự động", "Endpoint": "Điểm cuối", - "Providers": "Nhà cung cấp", "Combos": "Kết hợp", - "Usage": "Thống kê", "Quota Tracker": "Theo dõi hạn mức", "MITM": "MITM", "CLI Tools": "Công cụ", @@ -150,7 +148,6 @@ "No Proxy": "Không có Proxy", "Comma-separated hostnames/domains to bypass the proxy.": "Tên máy chủ/tên miền được phân tách bằng dấu phẩy để bỏ qua proxy.", "Test proxy URL": "Kiểm tra URL proxy", - "Apply": "Áp dụng", "Proxy settings applied": "Đã áp dụng cài đặt proxy", "Proxy enabled": "Đã bật proxy", "Proxy disabled": "Đã tắt proxy", @@ -178,7 +175,6 @@ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "Sử dụng Antigravity IDE & GitHub Copilot → với BẤT KỲ nhà cung cấp/mô hình nào từ 9Router", "How it works:": "Cách hoạt động:", "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Yêu cầu Antigravity/Copilot IDE → Chuyển hướng DNS đến localhost:443 → MITM proxy chặn → 9Router → phản hồi đến Antigravity/Copilot", - "API Key": "Khóa API", "No API keys — create one in Keys page": "Không có khóa API — tạo một khóa trong trang Keys", "sk_9router (default)": "sk_9router (mặc định)", "Server started": "Đã khởi động máy chủ", @@ -192,5 +188,5 @@ "Sudo Password Required": "Yêu cầu mật khẩu Sudo", "Enter your sudo password to start/stop MITM server": "Nhập mật khẩu sudo của bạn để khởi động/dừng máy chủ MITM", "Sudo Password": "Mật khẩu Sudo", - "Confirm": "Xác nhận" + "Click to add, click again to remove. Changes are saved automatically.": "Nhấp để thêm, nhấp lại để xóa. Thay đổi được lưu tự động." } diff --git a/public/i18n/literals/zh-CN.json b/public/i18n/literals/zh-CN.json index 9351be8d..c08e9ddd 100644 --- a/public/i18n/literals/zh-CN.json +++ b/public/i18n/literals/zh-CN.json @@ -512,13 +512,11 @@ "The proxy server has been stopped.": "代理服务器已停止。", "Reload Page": "重新加载页面", "Service is running in terminal. You can close this web page. Shutdown will stop the service.": "服务正在终端中运行。您可以关闭此网页。关闭将停止服务。", - "One Endpoint for": "统一端点,接入", "All AI Providers": "所有 AI 提供商", "Route AI requests through subscription, cheap, and free tiers with auto-fallback. One endpoint for Claude, GPT, Gemini, and more.": "通过订阅、低价和免费层级路由 AI 请求并自动回退。一个端点接入 Claude、GPT、Gemini 等。", "Get Started": "开始使用", "View on GitHub": "在 GitHub 上查看", - "How 9Router Works": "9Router 工作原理", "Data flows seamlessly through our intelligent routing system": "数据通过我们的智能路由系统无缝流转", "1. CLI & SDKs": "1. CLI 和 SDK", @@ -527,7 +525,6 @@ "Our engine analyzes the prompt and routes through your subscription, cheap, and free provider tiers with automatic fallback.": "我们的引擎分析提示词并通过您的订阅、低价和免费提供商层级路由,自动回退。", "3. AI Providers": "3. AI 提供商", "The request is fulfilled by OpenAI, Anthropic, Gemini, or others instantly.": "请求由 OpenAI、Anthropic、Gemini 或其他提供商即时响应。", - "Powerful Features": "强大功能", "Everything you need to manage your AI infrastructure efficiently.": "高效管理 AI 基础设施所需的一切。", "Unified Endpoint": "统一端点", @@ -546,7 +543,6 @@ "Native CLI tool support for Cursor, Claude, Copilot, and more.": "原生支持 Cursor、Claude、Copilot 等 CLI 工具。", "Dashboard": "仪表盘", "Beautiful web dashboard for managing providers and monitoring usage.": "精美的 Web 仪表盘,用于管理提供商和监控使用情况。", - "Get Started in 30 Seconds": "30 秒快速上手", "Install 9Router": "安装 9Router", "Open Dashboard": "打开仪表盘", @@ -554,13 +550,10 @@ "npm install -g 9router": "npm install -g 9router", "open http://localhost:9099": "open http://localhost:9099", "Ready! Requests route automatically through your configured providers.": "就绪!请求将自动通过您配置的提供商路由。", - "How it Works": "工作原理", "Docs": "文档", "GitHub": "GitHub", - "Legal": "法律", - "Manage your AI provider connections": "管理您的 AI 提供商连接", "Model combos with fallback": "模型组合及回退", "Monitor your API usage, token consumption, and request logs": "监控您的 API 使用量、Token 消耗和请求日志", @@ -575,15 +568,12 @@ "MITM Proxy": "MITM 代理", "Translator": "翻译器", "Media Providers": "媒体提供商", - "Theme": "主题", "Remote": "远程", "Logout": "退出登录", "Change Log": "更新日志", - "Proxy Pools": "代理池", "MITM": "MITM", - "Loading...": "加载中...", "Enter your password to access the dashboard": "输入密码以访问仪表盘", "Password": "密码", @@ -592,7 +582,6 @@ "Default password is 123456": "默认密码为 123456", "Invalid password": "密码错误", "An error occurred. Please try again.": "发生错误,请重试。", - "light": "浅色", "dark": "深色", "system": "跟随系统", @@ -602,11 +591,9 @@ "Record request details for inspection in the logs view": "记录请求详情以在日志视图中查看", "Update Password": "修改密码", "Set Password": "设置密码", - "Overview": "概览", "Details": "详情", "Search...": "搜索...", - "Saving...": "保存中...", "Save": "保存", "Save Changes": "保存更改", @@ -615,27 +602,22 @@ "Import": "导入", "Deploying... (may take ~1 min)": "部署中...(可能需要约 1 分钟)", "Deploy": "部署", - "Enable": "启用", "Disable": "禁用", "Token Saver": "Token 节省器", "Experimental": "实验性", "Compress tool output to reduce token usage.": "压缩工具输出以减少 Token 使用量。", "sk_9router (default)": "sk_9router(默认)", - "Install Tailscale": "安装 Tailscale", "Installing Tailscale...": "正在安装 Tailscale...", "Tailscale installed": "Tailscale 已安装", "Tailscale Funnel": "Tailscale Funnel", "Allow dashboard access via tunnel": "允许通过隧道访问仪表盘", - "Disconnected from server": "与服务器断开连接", "Attempting to reconnect...": "正在尝试重新连接...", "Click to retry": "点击重试", - "Failed to load changelog:": "加载更新日志失败:", "Copied!": "已复制!", - "Manage reusable per-connection proxies and bind them to provider connections.": "管理可复用的连接代理并绑定到提供商连接。", "Vercel Relay": "Vercel Relay", "Batch Import": "批量导入", @@ -665,7 +647,6 @@ "Proxy pool deleted": "代理池已删除", "Proxy test passed": "代理测试通过", "Proxy test failed": "代理测试失败", - "Replay request flow — matches log files": "重放请求流程——匹配日志文件", "Client Request": "客户端请求", "Source Body": "源请求体", @@ -678,7 +659,6 @@ "Send": "发送", "→ OpenAI": "→ OpenAI", "→ Target": "→ 目标", - "Terminal": "终端", "Full shell access": "完整 Shell 访问", "Desktop": "桌面", @@ -690,7 +670,6 @@ "Works on any device": "适用于任何设备", "Access your terminal, desktop & files from anywhere": "从任何地方访问您的终端、桌面和文件", "Get 9Remote": "获取 9Remote", - "Manual configuration is still available if 9router is deployed on a remote server.": "如果 9router 部署在远程服务器上,仍可使用手动配置。", "How to Install": "如何安装", "Hide": "隐藏", @@ -714,9 +693,7 @@ "Trust Cert": "信任证书", "Trusted": "已信任", "not detected locally": "未在本地检测到", - "Select to pre-fill, then edit model ID in the input": "选择以预填充,然后在输入框中编辑模型 ID", - "Free & Free Tier Providers": "免费及免费额度提供商", "Testing...": "测试中...", "Test All": "全部测试", @@ -740,13 +717,11 @@ "Model ID (optional)": "模型 ID(可选)", "If provider lacks /models endpoint, enter a model ID to validate via chat/completions instead.": "如果提供商不支持 /models 端点,请输入模型 ID 通过 chat/completions 进行验证。", "(via inference test)": "(通过推理测试)", - "Delete this combo?": "删除此组合?", "Name is required": "名称为必填项", "Failed to create combo": "创建组合失败", "Failed to update combo": "更新组合失败", "Only letters, numbers, -, _ and . allowed": "仅允许使用字母、数字、-、_ 和 .", - "Input Cost": "输入成本", "Output Cost": "输出成本", "Total Cost": "总成本", @@ -755,18 +730,15 @@ "Just now": "刚刚", "m ago": "分钟前", "h ago": "小时前", - "None": "无", "disabled": "已禁用", "OAuth Account": "OAuth 账号", "no_proxy:": "无代理:", "Pool:": "代理池:", "Legacy:": "旧版:", - "Error": "错误", "more": "更多", "Proxy": "代理", - "No authentication required": "无需身份验证", "This provider is ready to use.": "此提供商已准备就绪。", "Available Models": "可用模型", @@ -788,5 +760,7 @@ "connections": "个连接", "Suggested free models (≥200k context):": "推荐的免费模型(≥200k 上下文):", "Get API Key →": "获取 API 密钥 →", - "OAuth": "OAuth" + "OAuth": "OAuth", + "Click to add, click again to remove. Changes are saved automatically.": "点击添加,再次点击删除。更改将自动保存。", + "Close": "关闭" } diff --git a/public/i18n/literals/zh-TW.json b/public/i18n/literals/zh-TW.json index 0fb9c424..50fe70e7 100644 --- a/public/i18n/literals/zh-TW.json +++ b/public/i18n/literals/zh-TW.json @@ -12,7 +12,7 @@ "Logout": "登出", "Login": "登錄", "Providers": "提供者", - "Usage": "使用情況", + "Usage": "統計", "API Key": "API 金鑰", "Connected": "已連接", "Disconnected": "未連接", @@ -91,9 +91,7 @@ "Dark": "深色", "Auto": "自動", "Endpoint": "端點", - "Providers": "提供者", "Combos": "組合", - "Usage": "統計", "Quota Tracker": "配額跟蹤", "MITM": "MITM", "CLI Tools": "CLI 工具", @@ -150,7 +148,6 @@ "No Proxy": "無代理", "Comma-separated hostnames/domains to bypass the proxy.": "逗號分隔的主機名/域以繞過代理。", "Test proxy URL": "測試代理 URL", - "Apply": "應用", "Proxy settings applied": "已應用代理設置", "Proxy enabled": "已啟用代理", "Proxy disabled": "已禁用代理", @@ -178,7 +175,6 @@ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "使用 Antigravity IDE 和 GitHub Copilot → 與 9Router 中的任何提供者/模型一起", "How it works:": "工作原理:", "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Antigravity/Copilot IDE 請求 → DNS 重定向到 localhost:443 → MITM 代理攔截 → 9Router → 响應到 Antigravity/Copilot", - "API Key": "API 金鑰", "No API keys — create one in Keys page": "沒有 API 金鑰 — 在金鑰頁面中創建一個", "sk_9router (default)": "sk_9router(默認)", "Server started": "服務器已啟動", @@ -192,5 +188,5 @@ "Sudo Password Required": "需要 Sudo 密碼", "Enter your sudo password to start/stop MITM server": "輸入您的 Sudo 密碼以啟動/停止 MITM 服務器", "Sudo Password": "Sudo 密碼", - "Confirm": "確認" + "Click to add, click again to remove. Changes are saved automatically.": "點擊新增,再次點擊移除。變更將自動儲存。" } diff --git a/src/app/(dashboard)/dashboard/cli-tools/components/CopilotToolCard.js b/src/app/(dashboard)/dashboard/cli-tools/components/CopilotToolCard.js index 3c9e9736..5987688d 100644 --- a/src/app/(dashboard)/dashboard/cli-tools/components/CopilotToolCard.js +++ b/src/app/(dashboard)/dashboard/cli-tools/components/CopilotToolCard.js @@ -1,6 +1,6 @@ "use client"; -import { useState, useEffect } from "react"; +import { useState, useEffect, useRef } from "react"; import { Card, Button, ModelSelectModal, ManualConfigModal } from "@/shared/components"; import Image from "next/image"; import BaseUrlSelect from "./BaseUrlSelect"; @@ -19,6 +19,11 @@ export default function CopilotToolCard({ tool, isExpanded, onToggle, baseUrl, a const [showManualConfigModal, setShowManualConfigModal] = useState(false); const [selectedModels, setSelectedModels] = useState([]); const [modalOpen, setModalOpen] = useState(false); + const selectedModelsRef = useRef([]); + + useEffect(() => { + selectedModelsRef.current = selectedModels; + }, [selectedModels]); useEffect(() => { if (apiKeys?.length > 0 && !selectedApiKey) { @@ -58,6 +63,21 @@ export default function CopilotToolCard({ tool, isExpanded, onToggle, baseUrl, a } }; + const saveModels = async (models) => { + try { + const keyToUse = (selectedApiKey && selectedApiKey.trim()) + ? selectedApiKey + : (!cloudEnabled ? "sk_9router" : selectedApiKey); + await fetch("/api/cli-tools/copilot-settings", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ baseUrl: getEffectiveBaseUrl(), apiKey: keyToUse, models }), + }); + } catch (error) { + console.log("Error saving models:", error); + } + }; + const getConfigStatus = () => { if (!status) return null; if (!status.has9Router) return "not_configured"; @@ -272,16 +292,23 @@ export default function CopilotToolCard({ tool, isExpanded, onToggle, baseUrl, a setModalOpen(false)} + onClose={() => { + setModalOpen(false); + saveModels(selectedModelsRef.current); + }} onSelect={(model) => { if (!selectedModels.includes(model.value)) { setSelectedModels([...selectedModels, model.value]); } - setModalOpen(false); + }} + onDeselect={(model) => { + setSelectedModels(selectedModels.filter(m => m !== model.value)); }} selectedModel={null} activeProviders={activeProviders} modelAliases={modelAliases} + addedModelValues={selectedModels} + closeOnSelect={false} title="Add Model for GitHub Copilot" /> diff --git a/src/app/(dashboard)/dashboard/cli-tools/components/OpenCodeToolCard.js b/src/app/(dashboard)/dashboard/cli-tools/components/OpenCodeToolCard.js index 0ffee80c..f8157355 100644 --- a/src/app/(dashboard)/dashboard/cli-tools/components/OpenCodeToolCard.js +++ b/src/app/(dashboard)/dashboard/cli-tools/components/OpenCodeToolCard.js @@ -1,6 +1,6 @@ "use client"; -import { useState, useEffect } from "react"; +import { useState, useEffect, useRef } from "react"; import { Card, Button, ModelSelectModal, ManualConfigModal } from "@/shared/components"; import Image from "next/image"; import BaseUrlSelect from "./BaseUrlSelect"; @@ -24,6 +24,11 @@ export default function OpenCodeToolCard({ tool, isExpanded, onToggle, baseUrl, const [customBaseUrl, setCustomBaseUrl] = useState(""); const [selectedModels, setSelectedModels] = useState([]); const [activeModel, setActiveModel] = useState(""); + const selectedModelsRef = useRef([]); + + useEffect(() => { + selectedModelsRef.current = selectedModels; + }, [selectedModels]); useEffect(() => { if (apiKeys?.length > 0 && !selectedApiKey) { @@ -68,6 +73,28 @@ export default function OpenCodeToolCard({ tool, isExpanded, onToggle, baseUrl, } }; + const saveModels = async (models) => { + try { + const keyToUse = (selectedApiKey && selectedApiKey.trim()) + ? selectedApiKey + : (!cloudEnabled ? "sk_9router" : selectedApiKey); + const validActiveModel = models.includes(activeModel) ? activeModel : (models[0] || ""); + await fetch("/api/cli-tools/opencode-settings", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + baseUrl: getEffectiveBaseUrl(), + apiKey: keyToUse, + models, + activeModel: validActiveModel, + subagentModel, + }), + }); + } catch (error) { + console.log("Error saving models:", error); + } + }; + const getConfigStatus = () => { if (!status?.installed) return null; if (!status.config) return "not_configured"; @@ -427,17 +454,28 @@ export default function OpenCodeToolCard({ tool, isExpanded, onToggle, baseUrl, setModalOpen(false)} + onClose={() => { + setModalOpen(false); + saveModels(selectedModelsRef.current); + }} onSelect={(model) => { if (!selectedModels.includes(model.value)) { setSelectedModels([...selectedModels, model.value]); if (!activeModel) setActiveModel(model.value); } - setModalOpen(false); + }} + onDeselect={(model) => { + const remaining = selectedModels.filter(m => m !== model.value); + setSelectedModels(remaining); + if (activeModel === model.value) { + setActiveModel(remaining[0] || ""); + } }} selectedModel={null} activeProviders={activeProviders} modelAliases={modelAliases} + addedModelValues={selectedModels} + closeOnSelect={false} title="Add Model for OpenCode" /> diff --git a/src/shared/components/Modal.js b/src/shared/components/Modal.js index 517809ac..4b5f1f5a 100644 --- a/src/shared/components/Modal.js +++ b/src/shared/components/Modal.js @@ -3,6 +3,7 @@ import { useEffect } from "react"; import { cn } from "@/shared/utils/cn"; import Button from "./Button"; +import Tooltip from "./Tooltip"; export default function Modal({ isOpen, @@ -12,7 +13,6 @@ export default function Modal({ footer, size = "md", closeOnOverlay = true, - showCloseButton = true, showTrafficLights = true, className, }) { @@ -63,28 +63,38 @@ export default function Modal({ )} > {/* Header */} - {(title || showCloseButton) && ( + {(title || showTrafficLights) && (
+ {/* Traffic lights — desktop only */} {showTrafficLights && ( -
-
-
-
+
+ + + +
+
)} {title && (

{title}

)}
- {showCloseButton && ( - - )} + {/* X button — mobile only */} +
)} diff --git a/src/shared/components/ModelSelectModal.js b/src/shared/components/ModelSelectModal.js index b7b682ad..6abb8867 100644 --- a/src/shared/components/ModelSelectModal.js +++ b/src/shared/components/ModelSelectModal.js @@ -3,7 +3,7 @@ import { useState, useMemo, useEffect } from "react"; import PropTypes from "prop-types"; import Modal from "./Modal"; -import Button from "./Button"; +import ProviderIcon from "./ProviderIcon"; import { getModelsByProviderId } from "@/shared/constants/models"; import { OAUTH_PROVIDERS, APIKEY_PROVIDERS, FREE_PROVIDERS, FREE_TIER_PROVIDERS, AI_PROVIDERS, isOpenAICompatibleProvider, isAnthropicCompatibleProvider, getProviderAlias } from "@/shared/constants/providers"; @@ -318,32 +318,37 @@ export default function ModelSelectModal({ return combos.filter(c => c.name.toLowerCase().includes(query)); }, [combos, searchQuery, kindFilter]); + // Sort models alphabetically, with added models floated to top + const sortModels = (models) => { + const added = models.filter(m => addedModelValues.includes(m.value)).sort((a, b) => a.name.localeCompare(b.name)); + const rest = models.filter(m => !addedModelValues.includes(m.value)).sort((a, b) => a.name.localeCompare(b.name)); + return [...added, ...rest]; + }; + // Filter models by search query const filteredGroups = useMemo(() => { - if (!searchQuery.trim()) return groupedModels; + const query = searchQuery.trim().toLowerCase(); - const query = searchQuery.toLowerCase(); const filtered = {}; - Object.entries(groupedModels).forEach(([providerId, group]) => { - const matchedModels = group.models.filter( - (m) => - m.name.toLowerCase().includes(query) || - m.id.toLowerCase().includes(query) - ); - - const providerNameMatches = group.name.toLowerCase().includes(query); - - if (matchedModels.length > 0 || providerNameMatches) { - filtered[providerId] = { - ...group, - models: matchedModels, - }; + let models = group.models; + if (query) { + const providerNameMatches = group.name.toLowerCase().includes(query); + models = models.filter( + (m) => + m.name.toLowerCase().includes(query) || + m.id.toLowerCase().includes(query) + ); + if (models.length === 0 && !providerNameMatches) return; } + filtered[providerId] = { + ...group, + models: sortModels(models), + }; }); return filtered; - }, [groupedModels, searchQuery]); + }, [groupedModels, searchQuery, addedModelValues]); const handleSelect = (model) => { const value = model?.value || model?.name || model; @@ -371,20 +376,14 @@ export default function ModelSelectModal({ title={title} size="md" className="p-4!" - footer={ - !closeOnSelect ? ( - - ) : null - } + footer={null} > + {/* Info bar */} +
+ info + Click to add, click again to remove. Changes are saved automatically. +
+ {/* Search - compact */}
@@ -423,13 +422,13 @@ export default function ModelSelectModal({ ${isSelected ? "bg-primary text-white border-primary" : addedModelValues.includes(combo.name) - ? "bg-green-500/10 border-green-500/30 text-green-700 dark:text-green-400 hover:border-green-500/50" + ? "bg-primary border-primary text-white hover:bg-primary-hover" : "bg-surface border-border text-text-main hover:border-primary/50 hover:bg-primary/5" } `} > {addedModelValues.includes(combo.name) && ( - check_circle + check )} {combo.name} @@ -444,9 +443,12 @@ export default function ModelSelectModal({
{/* Provider header */}
-
{group.name} @@ -472,14 +474,14 @@ export default function ModelSelectModal({ : isSelected ? "bg-primary text-white border-primary" : addedModelValues.includes(model.value) - ? "bg-green-500/10 border-green-500/30 text-green-700 dark:text-green-400 hover:border-green-500/50" + ? "bg-primary border-primary text-white hover:bg-primary-hover" : "bg-surface border-border text-text-main hover:border-primary/50 hover:bg-primary/5" } `} > {addedModelValues.includes(model.value) && !isPlaceholder && ( - check_circle + check )} {isPlaceholder ? ( <> diff --git a/src/shared/components/Tooltip.js b/src/shared/components/Tooltip.js index b7d0c0cf..9e1c7e1c 100644 --- a/src/shared/components/Tooltip.js +++ b/src/shared/components/Tooltip.js @@ -1,6 +1,6 @@ "use client"; -export default function Tooltip({ text, children, position = "top" }) { +export default function Tooltip({ text, children, position = "top", color }) { const posClass = { top: "bottom-full left-1/2 -translate-x-1/2 mb-1.5", bottom: "top-full left-1/2 -translate-x-1/2 mt-1.5", @@ -8,10 +8,16 @@ export default function Tooltip({ text, children, position = "top" }) { right: "left-full top-1/2 -translate-y-1/2 ml-1.5", }[position]; + const bgStyle = color ? { backgroundColor: color } : {}; + const bgClass = color ? "" : "bg-gray-900"; + return (
{children} -
+
{text}