feat: move snippets, keybinding actions and macros out of core into plugins

This commit is contained in:
LukeGus committed 2026-09-29 11:39:14 -05:00
1 parent d9bba10612
commit e0c30a4e6f
262 files changed
+9091 -10744

No files matched your search

+1 -21
View File
@@ -54,10 +54,6 @@
"processesRunning": "running",
"loginStats": "SSH Login Statistics",
"noRecentLoginData": "No recent login data",
"executingQuickAction": "Executing {{name}}...",
"quickActionSuccess": "{{name}} completed successfully",
"quickActionFailed": "{{name}} failed",
"quickActionError": "Failed to execute {{name}}",
"ports": {
"title": "Listening Ports",
"protocol": "Protocol",
@@ -182,8 +178,7 @@
"wgLastHandshake": "Last handshake",
"wgHandshakeNever": "Never",
"wgTransfer": "Transfer"
},
"snippetsUnavailable": "Snippets are turned off, so quick actions cannot run."
}
},
"metricsHistory": {
"title": "Metrics History",
@@ -219,12 +214,6 @@
"addExcludedMount": "Add",
"visibleWidgets": "Visible Widgets",
"widgetsMovedToHostMetrics": "Cards are now added, arranged, and resized directly in the Host Metrics tab. Open Host Metrics for this host and use Customize to choose which cards are shown.",
"quickActionsLabel": "Quick Actions",
"quickActionsToolbar": "Quick actions appear as buttons in the Host Metrics toolbar for one-click command execution.",
"noQuickActions": "No quick actions yet.",
"buttonLabel": "Button label",
"selectSnippetPlaceholder": "Select snippet...",
"addActionBtn": "Add Action",
"hostNotFound": "Host not found",
"loadingHost": "Loading host..."
},
@@ -269,15 +258,6 @@
"dashboardTab": {
"disk": "Disk"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "Cancel",
"confirmRunButton": "Run",
"confirmRunMessage": "Run \"{{name}}\"?"
}
}
},
"terminal": {
"connected": "Connected"
},
@@ -51,10 +51,6 @@
"processesRunning": "hardloop",
"loginStats": "SSH-aanmeldingstatistieke",
"noRecentLoginData": "Geen onlangse aanmelddata nie",
"executingQuickAction": "Voer tans {{name}} uit ...",
"quickActionSuccess": "{{name}} suksesvol voltooi",
"quickActionFailed": "{{name}} het misluk",
"quickActionError": "Kon nie {{name}} uitvoer nie",
"ports": {
"title": "Luisterpoorte",
"protocol": "Protokol",
@@ -235,12 +231,6 @@
"addExcludedMount": "Voeg by",
"visibleWidgets": "Sigbare Widgets",
"widgetsMovedToHostMetrics": "Kaarte word nou direk in die Gasheermetrieke-oortjie bygevoeg, gerangskik en herskaal. Maak Gasheermetrieke vir hierdie gasheer oop en gebruik Pasmaak om te kies watter kaarte gewys word.",
"quickActionsLabel": "Vinnige Aksies",
"quickActionsToolbar": "Vinnige aksies verskyn as knoppies in die Host Metrics-nutsbalk vir die uitvoering van opdragte met een klik.",
"noQuickActions": "Geen vinnige aksies nog nie.",
"buttonLabel": "Knoppie-etiket",
"selectSnippetPlaceholder": "Kies uittreksel...",
"addActionBtn": "Voeg Aksie by",
"hostNotFound": "Gasheer nie gevind nie",
"loadingHost": "Laai gasheer..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "Skyf"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "Kanselleer",
"confirmRunButton": "Hardloop",
"confirmRunMessage": "Begin \"{{name}}\"?"
}
}
},
"terminal": {
"connected": "Verbonde"
}
@@ -51,10 +51,6 @@
"processesRunning": "قيد التشغيل",
"loginStats": "إحصائيات تسجيل الدخول عبر SSH",
"noRecentLoginData": "لا توجد بيانات تسجيل دخول حديثة",
"executingQuickAction": "جارٍ تنفيذ {{name}}...",
"quickActionSuccess": "تم إكمال {{name}} بنجاح",
"quickActionFailed": "فشل {{name}}",
"quickActionError": "فشل تنفيذ {{name}}",
"ports": {
"title": "المنافذ المستمعة",
"protocol": "البروتوكول",
@@ -235,12 +231,6 @@
"addExcludedMount": "يضيف",
"visibleWidgets": "الأدوات المرئية",
"widgetsMovedToHostMetrics": "تتم الآن إضافة البطاقات وترتيبها وتغيير حجمها مباشرةً في علامة تبويب مقاييس المضيف. افتح مقاييس المضيف لهذا المضيف واستخدم تخصيص لاختيار البطاقات التي ستظهر.",
"quickActionsLabel": "إجراءات سريعة",
"quickActionsToolbar": "تظهر الإجراءات السريعة كأزرار في شريط أدوات مقاييس المضيف لتنفيذ الأوامر بنقرة واحدة.",
"noQuickActions": "لا توجد إجراءات سريعة بعد.",
"buttonLabel": "تسمية الزر",
"selectSnippetPlaceholder": "اختر مقتطفًا...",
"addActionBtn": "إضافة إجراء",
"hostNotFound": "المضيف غير موجود",
"loadingHost": "جارٍ تحميل المضيف..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "القرص"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "إلغاء",
"confirmRunButton": "تشغيل",
"confirmRunMessage": "تشغيل \"{{name}}\"؟"
}
}
},
"terminal": {
"connected": "متصل"
}
@@ -51,10 +51,6 @@
"processesRunning": "бягане",
"loginStats": "Статистика за SSH вход",
"noRecentLoginData": "Няма скорошни данни за вход",
"executingQuickAction": "Изпълнява се {{name}}...",
"quickActionSuccess": "{{name}} завършено успешно",
"quickActionFailed": "{{name}} неуспешно",
"quickActionError": "Неуспешно изпълнение на {{name}}",
"ports": {
"title": "Портове за слушане",
"protocol": "Протокол",
@@ -235,12 +231,6 @@
"addExcludedMount": "Добавяне",
"visibleWidgets": "Видими джаджи",
"widgetsMovedToHostMetrics": "Картите вече се добавят, подреждат и преоразмеряват директно в раздела „Показатели за хоста“. Отворете „Показатели за хоста“ за този хост и използвайте „Персонализиране“, за да изберете кои карти да се показват.",
"quickActionsLabel": "Бързи действия",
"quickActionsToolbar": "Бързите действия се показват като бутони в лентата с инструменти Host Metrics за изпълнение на команди с едно щракване.",
"noQuickActions": "Все още няма бързи действия.",
"buttonLabel": "Етикет на бутона",
"selectSnippetPlaceholder": "Изберете фрагмент...",
"addActionBtn": "Добавяне на действие",
"hostNotFound": "Хостът не е намерен",
"loadingHost": "Зареждане на хоста..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "Диск"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "Отказ",
"confirmRunButton": "Бягане",
"confirmRunMessage": "Изпълни „{{name}}“?"
}
}
},
"terminal": {
"connected": "Свързан"
}
@@ -51,10 +51,6 @@
"processesRunning": "দৌড়ানো",
"loginStats": "SSH লগইন পরিসংখ্যান",
"noRecentLoginData": "সাম্প্রতিক কোনো লগইন ডেটা নেই",
"executingQuickAction": "{{name}} কার্যকর করা হচ্ছে ...",
"quickActionSuccess": "{{name}} সফলভাবে সম্পন্ন হয়েছে",
"quickActionFailed": "{{name}} ব্যর্থ হয়েছে",
"quickActionError": "{{name}} কার্যকর করতে ব্যর্থ হয়েছে",
"ports": {
"title": "লিসেনিং পোর্ট",
"protocol": "প্রোটোকল",
@@ -235,12 +231,6 @@
"addExcludedMount": "যোগ করুন",
"visibleWidgets": "দৃশ্যমান উইজেট",
"widgetsMovedToHostMetrics": "এখন কার্ডগুলি সরাসরি হোস্ট মেট্রিক্স ট্যাবে যোগ, সাজানো এবং আকার পরিবর্তন করা যায়। এই হোস্টের জন্য হোস্ট মেট্রিক্স খুলুন এবং কোন কার্ডগুলি দেখানো হবে তা বেছে নিতে কাস্টমাইজ ব্যবহার করুন।",
"quickActionsLabel": "দ্রুত পদক্ষেপ",
"quickActionsToolbar": "এক ক্লিকে কমান্ড কার্যকর করার জন্য কুইক অ্যাকশনগুলো হোস্ট মেট্রিক্স টুলবারে বাটন হিসেবে প্রদর্শিত হয়।",
"noQuickActions": "এখনো কোনো দ্রুত পদক্ষেপ নেওয়া হয়নি।",
"buttonLabel": "বোতাম লেবেল",
"selectSnippetPlaceholder": "স্নিপেট নির্বাচন করুন...",
"addActionBtn": "অ্যাকশন যোগ করুন",
"hostNotFound": "হোস্ট খুঁজে পাওয়া যায়নি",
"loadingHost": "হোস্ট লোড হচ্ছে..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "ডিস্ক"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "বাতিল করুন",
"confirmRunButton": "দৌড়",
"confirmRunMessage": "\"{{name}} \" চালান?"
}
}
},
"terminal": {
"connected": "সংযুক্ত"
}
@@ -51,10 +51,6 @@
"processesRunning": "corrent",
"loginStats": "Estadístiques d'inici de sessió SSH",
"noRecentLoginData": "Sense dades d'inici de sessió recents",
"executingQuickAction": "Executant {{name}}...",
"quickActionSuccess": "{{name}} s'ha completat correctament",
"quickActionFailed": "{{name}} ha fallat",
"quickActionError": "No s'ha pogut executar {{name}}",
"ports": {
"title": "Ports d'escolta",
"protocol": "Protocol",
@@ -235,12 +231,6 @@
"addExcludedMount": "Afegeix",
"visibleWidgets": "Widgets visibles",
"widgetsMovedToHostMetrics": "Ara les targetes s'afegeixen, s'organitzen i es canvien de mida directament a la pestanya Mètriques de l'amfitrió. Obriu Mètriques de l'amfitrió per a aquest amfitrió i utilitzeu Personalitza per triar quines targetes es mostren.",
"quickActionsLabel": "Accions ràpides",
"quickActionsToolbar": "Les accions ràpides apareixen com a botons a la barra d'eines de mètriques de l'amfitrió per executar ordres amb un sol clic.",
"noQuickActions": "Encara no hi ha accions ràpides.",
"buttonLabel": "Etiqueta del botó",
"selectSnippetPlaceholder": "Selecciona un fragment...",
"addActionBtn": "Afegeix una acció",
"hostNotFound": "No s'ha trobat l'amfitrió",
"loadingHost": "S'està carregant l'amfitrió..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "Disc"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "Cancel·la",
"confirmRunButton": "Corre",
"confirmRunMessage": "Executar \"{{name}}\"?"
}
}
},
"terminal": {
"connected": "Connectat"
}
@@ -51,10 +51,6 @@
"processesRunning": "běh",
"loginStats": "Statistiky přihlášení SSH",
"noRecentLoginData": "Žádné nedávné přihlašovací údaje",
"executingQuickAction": "Spouštění {{name}}...",
"quickActionSuccess": "{{name}} úspěšně dokončeno",
"quickActionFailed": "{{name}} selhalo",
"quickActionError": "Nepodařilo se spustit {{name}}",
"ports": {
"title": "Poslouchající porty",
"protocol": "Protokol",
@@ -235,12 +231,6 @@
"addExcludedMount": "Přidat",
"visibleWidgets": "Viditelné widgety",
"widgetsMovedToHostMetrics": "Karty se nyní přidávají, uspořádávají a mění jejich velikost přímo na kartě Metriky hostitele. Otevřete Metriky hostitele pro tohoto hostitele a pomocí možnosti Přizpůsobit vyberte, které karty se zobrazí.",
"quickActionsLabel": "Rychlé akce",
"quickActionsToolbar": "Rychlé akce se zobrazují jako tlačítka v panelu nástrojů Metriky hostitele pro spuštění příkazů jedním kliknutím.",
"noQuickActions": "Zatím žádné rychlé akce.",
"buttonLabel": "Štítek tlačítka",
"selectSnippetPlaceholder": "Vybrat úryvek...",
"addActionBtn": "Přidat akci",
"hostNotFound": "Hostitel nenalezen",
"loadingHost": "Načítání hostitele..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "Disk"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "Zrušit",
"confirmRunButton": "Běh",
"confirmRunMessage": "Spustit „{{name}}“?"
}
}
},
"terminal": {
"connected": "Připojeno"
}
@@ -51,10 +51,6 @@
"processesRunning": "løb",
"loginStats": "SSH-loginstatistik",
"noRecentLoginData": "Ingen nylige logindata",
"executingQuickAction": "Udfører {{name}}...",
"quickActionSuccess": "{{name}} gennemført",
"quickActionFailed": "{{name}} mislykkedes",
"quickActionError": "Kunne ikke udføre {{name}}",
"ports": {
"title": "Lytteporte",
"protocol": "Protokol",
@@ -235,12 +231,6 @@
"addExcludedMount": "Tilføje",
"visibleWidgets": "Synlige widgets",
"widgetsMovedToHostMetrics": "Kort tilføjes, arrangeres og skaleres nu direkte i fanen Værtsmål. Åbn Værtsmål for denne vært, og brug Tilpas til at vælge, hvilke kort der vises.",
"quickActionsLabel": "Hurtige handlinger",
"quickActionsToolbar": "Hurtige handlinger vises som knapper i værktøjslinjen Host Metrics til udførelse af kommandoer med et enkelt klik.",
"noQuickActions": "Ingen hurtige handlinger endnu.",
"buttonLabel": "Knapmærke",
"selectSnippetPlaceholder": "Vælg uddrag...",
"addActionBtn": "Tilføj handling",
"hostNotFound": "Værten blev ikke fundet",
"loadingHost": "Indlæser vært..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "Disk"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "Ophæve",
"confirmRunButton": "Løbe",
"confirmRunMessage": "Kør \"{{name}}\"?"
}
}
},
"terminal": {
"connected": "Forbundet"
}
@@ -51,10 +51,6 @@
"processesRunning": "laufend",
"loginStats": "SSH-Anmeldestatistiken",
"noRecentLoginData": "Keine aktuellen Anmeldedaten",
"executingQuickAction": "{{name}} wird ausgeführt...",
"quickActionSuccess": "{{name}} erfolgreich abgeschlossen",
"quickActionFailed": "{{name}} fehlgeschlagen",
"quickActionError": "Fehler beim Ausführen von {{name}}",
"ports": {
"title": "Lauschende Ports",
"protocol": "Protokoll",
@@ -235,12 +231,6 @@
"addExcludedMount": "Hinzufügen",
"visibleWidgets": "Sichtbare Widgets",
"widgetsMovedToHostMetrics": "Karten werden jetzt direkt im Tab „Host-Metriken“ hinzugefügt, angeordnet und in der Größe verändert. Öffnen Sie die Host-Metriken für diesen Host und verwenden Sie „Anpassen“, um auszuwählen, welche Karten angezeigt werden.",
"quickActionsLabel": "Schnellaktionen",
"quickActionsToolbar": "Schnellaktionen erscheinen als Schaltflächen in der Host-Metriken-Symbolleiste zur Ausführung von Befehlen mit einem Klick.",
"noQuickActions": "Noch keine Schnellaktionen.",
"buttonLabel": "Schaltflächenbeschriftung",
"selectSnippetPlaceholder": "Snippet auswählen...",
"addActionBtn": "Aktion hinzufügen",
"hostNotFound": "Host nicht gefunden",
"loadingHost": "Host wird geladen..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "Datenträger"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "Abbrechen",
"confirmRunButton": "Ausführen",
"confirmRunMessage": "„{{name}}“ ausführen?"
}
}
},
"terminal": {
"connected": "Verbunden"
}
@@ -51,10 +51,6 @@
"processesRunning": "τρέξιμο",
"loginStats": "Στατιστικά στοιχεία σύνδεσης SSH",
"noRecentLoginData": "Δεν υπάρχουν πρόσφατα δεδομένα σύνδεσης",
"executingQuickAction": "Εκτέλεση {{name}}...",
"quickActionSuccess": "{{name}} ολοκληρώθηκε με επιτυχία",
"quickActionFailed": "{{name}} απέτυχε",
"quickActionError": "Αποτυχία εκτέλεσης {{name}}",
"ports": {
"title": "Θύρες ακρόασης",
"protocol": "Πρωτόκολλο",
@@ -235,12 +231,6 @@
"addExcludedMount": "Προσθέτω",
"visibleWidgets": "Ορατά γραφικά στοιχεία",
"widgetsMovedToHostMetrics": "Οι κάρτες προστίθενται, ταξινομούνται και αλλάζουν μέγεθος απευθείας στην καρτέλα Μετρήσεις κεντρικού υπολογιστή. Ανοίξτε τις Μετρήσεις κεντρικού υπολογιστή για αυτόν τον κεντρικό υπολογιστή και χρησιμοποιήστε την Προσαρμογή για να επιλέξετε ποιες κάρτες θα εμφανίζονται.",
"quickActionsLabel": "Γρήγορες ενέργειες",
"quickActionsToolbar": "Οι γρήγορες ενέργειες εμφανίζονται ως κουμπιά στη γραμμή εργαλείων Μετρήσεων κεντρικού υπολογιστή για εκτέλεση εντολών με ένα κλικ.",
"noQuickActions": "Δεν υπάρχουν ακόμη γρήγορες ενέργειες.",
"buttonLabel": "Ετικέτα κουμπιού",
"selectSnippetPlaceholder": "Επιλογή αποσπάσματος...",
"addActionBtn": "Προσθήκη ενέργειας",
"hostNotFound": "Δεν βρέθηκε κεντρικός υπολογιστής",
"loadingHost": "Φόρτωση κεντρικού υπολογιστή..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "Δίσκος"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "Ματαίωση",
"confirmRunButton": "Τρέξιμο",
"confirmRunMessage": "Εκτέλεση \"{{name}}\";"
}
}
},
"terminal": {
"connected": "Συνδεδεμένος"
}
@@ -51,10 +51,6 @@
"processesRunning": "en ejecución",
"loginStats": "Estadísticas de inicio de sesión SSH",
"noRecentLoginData": "No hay datos de inicio de sesión recientes",
"executingQuickAction": "Ejecutando {{name}}...",
"quickActionSuccess": "{{name}} completado correctamente",
"quickActionFailed": "{{name}} falló",
"quickActionError": "Error al ejecutar {{name}}",
"ports": {
"title": "Puertos en escucha",
"protocol": "Protocolo",
@@ -235,12 +231,6 @@
"addExcludedMount": "Agregar",
"visibleWidgets": "Widgets visibles",
"widgetsMovedToHostMetrics": "Ahora las tarjetas se añaden, organizan y redimensionan directamente en la pestaña Métricas del host. Abre Métricas del host para este host y usa Personalizar para elegir qué tarjetas se muestran.",
"quickActionsLabel": "Acciones rápidas",
"quickActionsToolbar": "Las acciones rápidas aparecen como botones en la barra de herramientas de Métricas del host para la ejecución de comandos con un solo clic.",
"noQuickActions": "Aún no hay acciones rápidas.",
"buttonLabel": "Etiqueta del botón",
"selectSnippetPlaceholder": "Seleccionar fragmento...",
"addActionBtn": "Añadir acción",
"hostNotFound": "Host no encontrado",
"loadingHost": "Cargando host..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "Disco"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "Cancelar",
"confirmRunButton": "Ejecutar",
"confirmRunMessage": "¿Ejecutar \"{{name}}\"?"
}
}
},
"terminal": {
"connected": "Conectado"
}
@@ -51,10 +51,6 @@
"processesRunning": "juokseminen",
"loginStats": "SSH-kirjautumistilastot",
"noRecentLoginData": "Ei viimeaikaisia kirjautumistietoja",
"executingQuickAction": "Suoritetaan {{name}}...",
"quickActionSuccess": "{{name}} suoritettu onnistuneesti",
"quickActionFailed": "{{name}} epäonnistui",
"quickActionError": "Suoritus epäonnistui {{name}}",
"ports": {
"title": "Kuunteluportit",
"protocol": "Protokolla",
@@ -235,12 +231,6 @@
"addExcludedMount": "Lisätä",
"visibleWidgets": "Näkyvät widgetit",
"widgetsMovedToHostMetrics": "Kortteja lisätään, järjestetään ja niiden kokoa muutetaan nyt suoraan Isännän mittarit -välilehdellä. Avaa tämän isännän Isännän mittarit ja valitse näytettävät kortit Mukauta-toiminnolla.",
"quickActionsLabel": "Pikatoiminnot",
"quickActionsToolbar": "Pikatoiminnot näkyvät painikkeina isäntämetriikkatyökalurivillä komentojen suorittamista varten yhdellä napsautuksella.",
"noQuickActions": "Ei vielä nopeita toimia.",
"buttonLabel": "Painikkeen nimi",
"selectSnippetPlaceholder": "Valitse katkelma...",
"addActionBtn": "Lisää toiminto",
"hostNotFound": "Isäntää ei löydy",
"loadingHost": "Ladataan isäntää..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "Levy"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "Peruuttaa",
"confirmRunButton": "Juokse",
"confirmRunMessage": "Suorittaa \"{{name}}\"?"
}
}
},
"terminal": {
"connected": "Yhdistetty"
}
@@ -51,10 +51,6 @@
"processesRunning": "en cours",
"loginStats": "Statistiques de connexion SSH",
"noRecentLoginData": "Aucune donnée de connexion récente",
"executingQuickAction": "Exécution de {{name}}...",
"quickActionSuccess": "{{name}} terminé avec succès",
"quickActionFailed": "Échec de {{name}}",
"quickActionError": "Échec de l'exécution de {{name}}",
"ports": {
"title": "Ports en écoute",
"protocol": "Protocole",
@@ -235,12 +231,6 @@
"addExcludedMount": "Ajouter",
"visibleWidgets": "Widgets visibles",
"widgetsMovedToHostMetrics": "Les cartes sont désormais ajoutées, organisées et redimensionnées directement dans l'onglet Métriques de l'hôte. Ouvrez les métriques de cet hôte et utilisez Personnaliser pour choisir les cartes à afficher.",
"quickActionsLabel": "Actions rapides",
"quickActionsToolbar": "Les actions rapides apparaissent sous forme de boutons dans la barre d'outils Métriques de l'hôte pour une exécution en un clic.",
"noQuickActions": "Aucune action rapide pour le moment.",
"buttonLabel": "Étiquette du bouton",
"selectSnippetPlaceholder": "Sélectionner un snippet...",
"addActionBtn": "Ajouter une action",
"hostNotFound": "Hôte introuvable",
"loadingHost": "Chargement de l'hôte..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "Disque"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "Annuler",
"confirmRunButton": "Exécuter",
"confirmRunMessage": "Exécuter « {{name}} » ?"
}
}
},
"terminal": {
"connected": "Connecté"
}
@@ -51,10 +51,6 @@
"processesRunning": "רִיצָה",
"loginStats": "סטטיסטיקות כניסה ל-SSH",
"noRecentLoginData": "אין נתוני התחברות אחרונים",
"executingQuickAction": "מבצע {{name}}...",
"quickActionSuccess": "{{name}} הושלם בהצלחה",
"quickActionFailed": "{{name}} נכשל",
"quickActionError": "נכשל בביצוע {{name}}",
"ports": {
"title": "יציאות האזנה",
"protocol": "פּרוֹטוֹקוֹל",
@@ -235,12 +231,6 @@
"addExcludedMount": "לְהוֹסִיף",
"visibleWidgets": "ווידג'טים גלויים",
"widgetsMovedToHostMetrics": "כעת ניתן להוסיף, לסידור ולשנות את גודל הכרטיסים ישירות בכרטיסייה 'מדדי מארח'. פתחו את 'מדדי מארח' עבור מארח זה והשתמשו באפשרות 'התאמה אישית' כדי לבחור אילו כרטיסים יוצגו.",
"quickActionsLabel": "פעולות מהירות",
"quickActionsToolbar": "פעולות מהירות מופיעות ככפתורים בסרגל הכלים של Host Metrics לביצוע פקודה בלחיצה אחת.",
"noQuickActions": "אין עדיין פעולות מהירות.",
"buttonLabel": "תווית כפתור",
"selectSnippetPlaceholder": "בחר קטע...",
"addActionBtn": "הוסף פעולה",
"hostNotFound": "המארח לא נמצא",
"loadingHost": "טוען מארח..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "דִיסק"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "לְבַטֵל",
"confirmRunButton": "לָרוּץ",
"confirmRunMessage": "להפעיל את \"{{name}}\"?"
}
}
},
"terminal": {
"connected": "מְחוּבָּר"
}
@@ -51,10 +51,6 @@
"processesRunning": "चल रहे",
"loginStats": "SSH लॉगिन आँकड़े",
"noRecentLoginData": "कोई हालिया लॉगिन डेटा नहीं",
"executingQuickAction": "{{name}} निष्पादित हो रहा है...",
"quickActionSuccess": "{{name}} सफलतापूर्वक पूर्ण हुआ",
"quickActionFailed": "{{name}} विफल रहा",
"quickActionError": "{{name}} निष्पादित करने में विफल",
"ports": {
"title": "लिसनिंग पोर्ट",
"protocol": "प्रोटोकॉल",
@@ -235,12 +231,6 @@
"addExcludedMount": "जोड़ना",
"visibleWidgets": "दृश्यमान विजेट्स",
"widgetsMovedToHostMetrics": "कार्ड अब सीधे होस्ट मेट्रिक्स टैब में जोड़े, व्यवस्थित और आकार बदले जा सकते हैं। इस होस्ट के लिए होस्ट मेट्रिक्स खोलें और यह चुनने के लिए कस्टमाइज़ का उपयोग करें कि कौन से कार्ड दिखाए जाएँ।",
"quickActionsLabel": "त्वरित कार्रवाइयाँ",
"quickActionsToolbar": "त्वरित कार्रवाइयाँ एक-क्लिक कमांड निष्पादन के लिए होस्ट मेट्रिक्स टूलबार में बटन के रूप में दिखाई देती हैं।",
"noQuickActions": "अभी तक कोई त्वरित कार्रवाई नहीं।",
"buttonLabel": "बटन लेबल",
"selectSnippetPlaceholder": "स्निपेट चुनें...",
"addActionBtn": "कार्रवाई जोड़ें",
"hostNotFound": "होस्ट नहीं मिला",
"loadingHost": "होस्ट लोड हो रहा है..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "डिस्क"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "रद्द करें",
"confirmRunButton": "चलाएँ",
"confirmRunMessage": "\"{{name}}\" चलाएँ?"
}
}
},
"terminal": {
"connected": "कनेक्टेड"
}
@@ -51,10 +51,6 @@
"processesRunning": "futás",
"loginStats": "SSH bejelentkezési statisztikák",
"noRecentLoginData": "Nincsenek friss bejelentkezési adatok",
"executingQuickAction": "{{name}} végrehajtása ...",
"quickActionSuccess": "{{name}} sikeresen befejeződött",
"quickActionFailed": "{{name}} sikertelen",
"quickActionError": "Nem sikerült végrehajtani a {{name}} parancsot.",
"ports": {
"title": "Figyelő portok",
"protocol": "Jegyzőkönyv",
@@ -235,12 +231,6 @@
"addExcludedMount": "Hozzáadás",
"visibleWidgets": "Látható widgetek",
"widgetsMovedToHostMetrics": "A kártyák mostantól közvetlenül a Gazdagép metrikái lapon adhatók hozzá, rendezhetők el és méretezhetők át. Nyissa meg a Gazdagép metrikái oldalt ehhez a gazdagéphez, és a Testreszabás gombbal válassza ki, hogy mely kártyák jelenjenek meg.",
"quickActionsLabel": "Gyors műveletek",
"quickActionsToolbar": "A gyors műveletek gombokként jelennek meg a Host Metrics eszköztáron, így egyetlen kattintással végrehajthatók a parancsok.",
"noQuickActions": "Még nincsenek gyors intézkedések.",
"buttonLabel": "Gomb felirata",
"selectSnippetPlaceholder": "Válasszon részletet...",
"addActionBtn": "Művelet hozzáadása",
"hostNotFound": "Nem található gazdagép",
"loadingHost": "Gazdagép betöltése..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "Korong"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "Mégsem",
"confirmRunButton": "Fut",
"confirmRunMessage": "Futtassa a \"{{name}} \" programot?"
}
}
},
"terminal": {
"connected": "Csatlakoztatva"
}
@@ -51,10 +51,6 @@
"processesRunning": "berlari",
"loginStats": "Statistik Login SSH",
"noRecentLoginData": "Tidak ada data login terbaru.",
"executingQuickAction": "Menjalankan {{name}}...",
"quickActionSuccess": "{{name}} berhasil diselesaikan",
"quickActionFailed": "{{name}} gagal",
"quickActionError": "Gagal mengeksekusi {{name}}",
"ports": {
"title": "Port Pendengaran",
"protocol": "Protokol",
@@ -235,12 +231,6 @@
"addExcludedMount": "Menambahkan",
"visibleWidgets": "Widget yang Terlihat",
"widgetsMovedToHostMetrics": "Kartu sekarang ditambahkan, diatur, dan diubah ukurannya langsung di tab Metrik Host. Buka Metrik Host untuk host ini dan gunakan Sesuaikan untuk memilih kartu mana yang akan ditampilkan.",
"quickActionsLabel": "Tindakan Cepat",
"quickActionsToolbar": "Tindakan cepat muncul sebagai tombol di bilah alat Metrik Host untuk eksekusi perintah sekali klik.",
"noQuickActions": "Belum ada tindakan cepat.",
"buttonLabel": "Label tombol",
"selectSnippetPlaceholder": "Pilih cuplikan...",
"addActionBtn": "Tambahkan Tindakan",
"hostNotFound": "Host tidak ditemukan",
"loadingHost": "Memuat host..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "Disk"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "Membatalkan",
"confirmRunButton": "Berlari",
"confirmRunMessage": "Jalankan \"{{name}}\"?"
}
}
},
"terminal": {
"connected": "Terhubung"
}
@@ -51,10 +51,6 @@
"processesRunning": "in esecuzione",
"loginStats": "Statistiche di accesso SSH",
"noRecentLoginData": "Nessun dato di accesso recente",
"executingQuickAction": "Esecuzione di {{name}}...",
"quickActionSuccess": "{{name}} completato con successo",
"quickActionFailed": "{{name}} non riuscito",
"quickActionError": "Impossibile eseguire {{name}}",
"ports": {
"title": "Porte in ascolto",
"protocol": "Protocollo",
@@ -235,12 +231,6 @@
"addExcludedMount": "Aggiungere",
"visibleWidgets": "Widget visibili",
"widgetsMovedToHostMetrics": "Le schede ora vengono aggiunte, disposte e ridimensionate direttamente nella scheda Metriche host. Apri Metriche host per questo host e usa Personalizza per scegliere quali schede mostrare.",
"quickActionsLabel": "Azioni Rapide",
"quickActionsToolbar": "Le azioni rapide appaiono come pulsanti nella barra delle metriche host per l'esecuzione di comandi con un clic.",
"noQuickActions": "Nessuna azione rapida ancora.",
"buttonLabel": "Etichetta pulsante",
"selectSnippetPlaceholder": "Seleziona snippet...",
"addActionBtn": "Aggiungi Azione",
"hostNotFound": "Host non trovato",
"loadingHost": "Caricamento host..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "Disco"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "Annulla",
"confirmRunButton": "Esegui",
"confirmRunMessage": "Eseguire \"{{name}}\"?"
}
}
},
"terminal": {
"connected": "Connesso"
}
@@ -51,10 +51,6 @@
"processesRunning": "実行中",
"loginStats": "SSHログイン統計",
"noRecentLoginData": "最近のログインデータがありません",
"executingQuickAction": "{{name}} を実行中...",
"quickActionSuccess": "{{name}} が正常に完了しました",
"quickActionFailed": "{{name}} が失敗しました",
"quickActionError": "{{name}} の実行に失敗しました",
"ports": {
"title": "リスニングポート",
"protocol": "プロトコル",
@@ -235,12 +231,6 @@
"addExcludedMount": "追加",
"visibleWidgets": "表示するウィジェット",
"widgetsMovedToHostMetrics": "カードは、ホストメトリクスタブで直接追加、配置、サイズ変更できるようになりました。このホストのホストメトリクスを開き、カスタマイズを使用して表示するカードを選択してください。",
"quickActionsLabel": "クイックアクション",
"quickActionsToolbar": "クイックアクションはホストメトリクスツールバーにボタンとして表示され、ワンクリックでコマンドを実行できます。",
"noQuickActions": "クイックアクションはまだありません",
"buttonLabel": "ボタンラベル",
"selectSnippetPlaceholder": "スニペットを選択...",
"addActionBtn": "アクションを追加",
"hostNotFound": "ホストが見つかりません",
"loadingHost": "ホストを読み込み中..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "ディスク"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "キャンセル",
"confirmRunButton": "実行",
"confirmRunMessage": "「{{name}}」を実行しますか?"
}
}
},
"terminal": {
"connected": "接続中"
}
@@ -51,10 +51,6 @@
"processesRunning": "실행 중",
"loginStats": "SSH 로그인 통계",
"noRecentLoginData": "최근 로그인 데이터가 없습니다.",
"executingQuickAction": "{{name}} 실행 중...",
"quickActionSuccess": "{{name}}이(가) 성공적으로 완료되었습니다.",
"quickActionFailed": "{{name}} 실패",
"quickActionError": "{{name}} 실행에 실패했습니다.",
"ports": {
"title": "수신 대기 포트",
"protocol": "프로토콜",
@@ -235,12 +231,6 @@
"addExcludedMount": "추가하다",
"visibleWidgets": "표시 위젯",
"widgetsMovedToHostMetrics": "카드는 이제 호스트 메트릭 탭에서 직접 추가, 정렬 및 크기 조정됩니다. 이 호스트의 호스트 메트릭을 열고 사용자 정의를 사용하여 표시할 카드를 선택하세요.",
"quickActionsLabel": "빠른 작업",
"quickActionsToolbar": "빠른 작업은 한 번의 클릭으로 명령을 실행할 수 있도록 호스트 메트릭 도구 모음에 버튼으로 표시됩니다.",
"noQuickActions": "아직 빠른 작업이 없습니다.",
"buttonLabel": "버튼 레이블",
"selectSnippetPlaceholder": "스니펫 선택...",
"addActionBtn": "작업 추가",
"hostNotFound": "호스트를 찾을 수 없습니다",
"loadingHost": "호스트 로드 중..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "디스크"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "취소",
"confirmRunButton": "실행",
"confirmRunMessage": "\"{{name}}\"을(를) 실행하시겠습니까?"
}
}
},
"terminal": {
"connected": "연결됨"
}
@@ -51,10 +51,6 @@
"processesRunning": "rennen",
"loginStats": "SSH-aanmeldingsstatistieken",
"noRecentLoginData": "Geen recente inloggegevens",
"executingQuickAction": "Het uitvoeren van {{name}}...",
"quickActionSuccess": "{{name}} succesvol voltooid",
"quickActionFailed": "{{name}} mislukt",
"quickActionError": "Het uitvoeren van {{name}} is mislukt.",
"ports": {
"title": "Luisterpoorten",
"protocol": "Protocol",
@@ -235,12 +231,6 @@
"addExcludedMount": "Toevoegen",
"visibleWidgets": "Zichtbare widgets",
"widgetsMovedToHostMetrics": "Kaarten kunnen nu rechtstreeks in het tabblad Hoststatistieken worden toegevoegd, gerangschikt en van formaat worden veranderd. Open Hoststatistieken voor deze host en gebruik Aanpassen om te kiezen welke kaarten worden weergegeven.",
"quickActionsLabel": "Snelle acties",
"quickActionsToolbar": "Snelle acties verschijnen als knoppen in de Host Metrics-werkbalk, zodat u opdrachten met één klik kunt uitvoeren.",
"noQuickActions": "Nog geen snelle acties ondernomen.",
"buttonLabel": "Knoplabel",
"selectSnippetPlaceholder": "Selecteer fragment...",
"addActionBtn": "Actie toevoegen",
"hostNotFound": "Host niet gevonden",
"loadingHost": "Host wordt geladen..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "Schijf"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "Annuleren",
"confirmRunButton": "Loop",
"confirmRunMessage": "Run \"{{name}}\"?"
}
}
},
"terminal": {
"connected": "Aangesloten"
}
@@ -51,10 +51,6 @@
"processesRunning": "løping",
"loginStats": "SSH-påloggingsstatistikk",
"noRecentLoginData": "Ingen nylige påloggingsdata",
"executingQuickAction": "Utfører {{name}}...",
"quickActionSuccess": "{{name}} fullført",
"quickActionFailed": "{{name}} mislyktes",
"quickActionError": "Kunne ikke utføre {{name}}",
"ports": {
"title": "Lytteporter",
"protocol": "Protokoll",
@@ -235,12 +231,6 @@
"addExcludedMount": "Legge til",
"visibleWidgets": "Synlige widgeter",
"widgetsMovedToHostMetrics": "Kort legges nå til, arrangeres og endres i størrelse direkte i fanen Vertsmålinger. Åpne Vertsmålinger for denne verten og bruk Tilpass for å velge hvilke kort som vises.",
"quickActionsLabel": "Hurtighandlinger",
"quickActionsToolbar": "Hurtighandlinger vises som knapper i verktøylinjen for vertsmålinger for utførelse av kommandoer med ett klikk.",
"noQuickActions": "Ingen hurtighandlinger ennå.",
"buttonLabel": "Knappetikett",
"selectSnippetPlaceholder": "Velg utdrag...",
"addActionBtn": "Legg til handling",
"hostNotFound": "Verten ble ikke funnet",
"loadingHost": "Laster inn vert ..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "Disk"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "Kansellere",
"confirmRunButton": "Løp",
"confirmRunMessage": "Kjør \"{{name}}\"?"
}
}
},
"terminal": {
"connected": "Tilkoblet"
}
@@ -51,10 +51,6 @@
"processesRunning": "działa",
"loginStats": "Statystyki logowania SSH",
"noRecentLoginData": "Brak ostatnich danych logowania",
"executingQuickAction": "Wykonywanie {{name}}...",
"quickActionSuccess": "{{name}} ukończono pomyślnie",
"quickActionFailed": "{{name}} nie powiodło się",
"quickActionError": "Nie udało się wykonać {{name}}",
"ports": {
"title": "Porty nasłuchujące",
"protocol": "Protokół",
@@ -235,12 +231,6 @@
"addExcludedMount": "Dodaj",
"visibleWidgets": "Widoczne widżety",
"widgetsMovedToHostMetrics": "Karty dodaje się, układa i skaluje bezpośrednio na karcie „Metryki hosta”. Otwórz Metryki hosta dla tego hosta i użyj opcji „Dostosuj”, aby wybrać wyświetlane karty.",
"quickActionsLabel": "Szybkie akcje",
"quickActionsToolbar": "Szybkie akcje pojawiają się jako przyciski na pasku narzędzi Metryki hosta, umożliwiając wykonanie polecenia jednym kliknięciem.",
"noQuickActions": "Brak szybkich akcji.",
"buttonLabel": "Etykieta przycisku",
"selectSnippetPlaceholder": "Wybierz snippet...",
"addActionBtn": "Dodaj akcję",
"hostNotFound": "Nie znaleziono hosta",
"loadingHost": "Ładowanie hosta..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "Dysk"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "Anuluj",
"confirmRunButton": "Uruchom",
"confirmRunMessage": "Uruchomić „{{name}}”?"
}
}
},
"terminal": {
"connected": "Połączono"
}
@@ -51,10 +51,6 @@
"processesRunning": "correndo",
"loginStats": "Estatísticas de login SSH",
"noRecentLoginData": "Nenhum dado de login recente",
"executingQuickAction": "Executando {{name}}...",
"quickActionSuccess": "{{name}} concluído com sucesso",
"quickActionFailed": "{{name}} falhou",
"quickActionError": "Falha ao executar {{name}}",
"ports": {
"title": "Portas de escuta",
"protocol": "Protocolo",
@@ -235,12 +231,6 @@
"addExcludedMount": "Adicionar",
"visibleWidgets": "Widgets Visíveis",
"widgetsMovedToHostMetrics": "Agora, os cartões podem ser adicionados, organizados e redimensionados diretamente na guia Métricas do Host. Abra as Métricas do Host para este host e use a opção Personalizar para escolher quais cartões serão exibidos.",
"quickActionsLabel": "Ações rápidas",
"quickActionsToolbar": "As ações rápidas aparecem como botões na barra de ferramentas do Host Metrics para execução de comandos com um único clique.",
"noQuickActions": "Nenhuma ação imediata ainda.",
"buttonLabel": "Rótulo do botão",
"selectSnippetPlaceholder": "Selecione o trecho...",
"addActionBtn": "Adicionar ação",
"hostNotFound": "Host não encontrado",
"loadingHost": "Carregando host..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "Disco"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "Cancelar",
"confirmRunButton": "Correr",
"confirmRunMessage": "Executar \"{{name}}\"?"
}
}
},
"terminal": {
"connected": "Conectado"
}
@@ -51,10 +51,6 @@
"processesRunning": "em execução",
"loginStats": "Estatísticas de início de sessão SSH",
"noRecentLoginData": "Sem dados de início de sessão recentes",
"executingQuickAction": "A executar {{name}}...",
"quickActionSuccess": "{{name}} concluído com sucesso",
"quickActionFailed": "{{name}} falhou",
"quickActionError": "Falha ao executar {{name}}",
"ports": {
"title": "Portas em escuta",
"protocol": "Protocolo",
@@ -235,12 +231,6 @@
"addExcludedMount": "Adicionar",
"visibleWidgets": "Widgets Visíveis",
"widgetsMovedToHostMetrics": "Os cartões são agora adicionados, organizados e redimensionados diretamente no separador Métricas do Host. Abra as Métricas do Host para este host e use Personalizar para escolher quais os cartões a mostrar.",
"quickActionsLabel": "Ações Rápidas",
"quickActionsToolbar": "As ações rápidas aparecem como botões na barra de ferramentas de Métricas do Host para execução de comandos com um clique.",
"noQuickActions": "Ainda não existem ações rápidas.",
"buttonLabel": "Texto do botão",
"selectSnippetPlaceholder": "Selecionar snippet...",
"addActionBtn": "Adicionar Ação",
"hostNotFound": "Host não encontrado",
"loadingHost": "A carregar o host..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "Disco"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "Cancelar",
"confirmRunButton": "Executar",
"confirmRunMessage": "Executar \"{{name}}\"?"
}
}
},
"terminal": {
"connected": "Ligado"
}
@@ -51,10 +51,6 @@
"processesRunning": "funcţionare",
"loginStats": "Statistici de conectare SSH",
"noRecentLoginData": "Nu există date de conectare recente",
"executingQuickAction": "Se execută {{name}}...",
"quickActionSuccess": "{{name}} finalizat cu succes",
"quickActionFailed": "{{name}} a eșuat",
"quickActionError": "Executarea {{name}} a eșuat",
"ports": {
"title": "Porturi de ascultare",
"protocol": "Protocol",
@@ -235,12 +231,6 @@
"addExcludedMount": "Adăuga",
"visibleWidgets": "Widgeturi vizibile",
"widgetsMovedToHostMetrics": "Cardurile sunt acum adăugate, aranjate și redimensionate direct în fila Indicatori gazdă. Deschideți Indicatori gazdă pentru această gazdă și utilizați Personalizare pentru a alege ce carduri sunt afișate.",
"quickActionsLabel": "Acțiuni rapide",
"quickActionsToolbar": "Acțiunile rapide apar sub formă de butoane în bara de instrumente Host Metrics pentru executarea comenzilor cu un singur clic.",
"noQuickActions": "Nicio acțiune rapidă încă.",
"buttonLabel": "Etichetă buton",
"selectSnippetPlaceholder": "Selectați fragmentul...",
"addActionBtn": "Adăugați o acțiune",
"hostNotFound": "Gazdă negăsită",
"loadingHost": "Se încarcă gazda..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "Disc"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "Anula",
"confirmRunButton": "Aleargă",
"confirmRunMessage": "Executați „{{name}}”?"
}
}
},
"terminal": {
"connected": "Conectat"
}
@@ -51,10 +51,6 @@
"processesRunning": "выполняется",
"loginStats": "Статистика входов SSH",
"noRecentLoginData": "Нет данных о недавних входах",
"executingQuickAction": "Выполняется {{name}}...",
"quickActionSuccess": "{{name}} успешно завершено",
"quickActionFailed": "{{name}} не удалось",
"quickActionError": "Не удалось выполнить {{name}}",
"ports": {
"title": "Прослушиваемые порты",
"protocol": "Протокол",
@@ -235,12 +231,6 @@
"addExcludedMount": "Добавлять",
"visibleWidgets": "Видимые виджеты",
"widgetsMovedToHostMetrics": "Карточки теперь добавляются, упорядочиваются и изменяются в размере непосредственно на вкладке «Метрики хоста». Откройте метрики для этого хоста и используйте «Настроить», чтобы выбрать отображаемые карточки.",
"quickActionsLabel": "Быстрые действия",
"quickActionsToolbar": "Быстрые действия отображаются в виде кнопок на панели инструментов метрик хоста для выполнения команд в один клик.",
"noQuickActions": "Пока нет быстрых действий.",
"buttonLabel": "Надпись кнопки",
"selectSnippetPlaceholder": "Выбрать сниппет...",
"addActionBtn": "Добавить действие",
"hostNotFound": "Хост не найден",
"loadingHost": "Загрузка хоста..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "Диск"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "Отмена",
"confirmRunButton": "Запустить",
"confirmRunMessage": "Запустить \"{{name}}\"?"
}
}
},
"terminal": {
"connected": "Подключено"
}
@@ -51,10 +51,6 @@
"processesRunning": "трчање",
"loginStats": "Статистика SSH пријава",
"noRecentLoginData": "Нема скорашњих података за пријављивање",
"executingQuickAction": "Извршава се {{name}}...",
"quickActionSuccess": "{{name}} успешно завршено",
"quickActionFailed": "{{name}} није успело",
"quickActionError": "Није успело извршавање {{name}}",
"ports": {
"title": "Портови за слушање",
"protocol": "Протокол",
@@ -235,12 +231,6 @@
"addExcludedMount": "Додај",
"visibleWidgets": "Видљиви виџети",
"widgetsMovedToHostMetrics": "Картице се сада додају, распоређују и мењају им се величина директно на картици „Host Metrics“. Отворите „Host Metrics“ за овог хоста и користите „Customize“ да бисте изабрали које ће картице бити приказане.",
"quickActionsLabel": "Брзе акције",
"quickActionsToolbar": "Брзе акције се појављују као дугмад у траци са алаткама Host Metrics за извршавање команди једним кликом.",
"noQuickActions": "Још нема брзих акција.",
"buttonLabel": "Ознака дугмета",
"selectSnippetPlaceholder": "Изаберите исечак...",
"addActionBtn": "Додај акцију",
"hostNotFound": "Хост није пронађен",
"loadingHost": "Учитавање хоста..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "Диск"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "Откажи",
"confirmRunButton": "Трчи",
"confirmRunMessage": "Покрени „{{name}}“?"
}
}
},
"terminal": {
"connected": "Повезано"
}
@@ -51,10 +51,6 @@
"processesRunning": "spring",
"loginStats": "SSH-inloggningsstatistik",
"noRecentLoginData": "Inga aktuella inloggningsuppgifter",
"executingQuickAction": "Kör {{name}}...",
"quickActionSuccess": "{{name}} slutfört",
"quickActionFailed": "{{name}} misslyckades",
"quickActionError": "Misslyckades med att köra {{name}}",
"ports": {
"title": "Lyssningsportar",
"protocol": "Protokoll",
@@ -235,12 +231,6 @@
"addExcludedMount": "Tillägga",
"visibleWidgets": "Synliga widgetar",
"widgetsMovedToHostMetrics": "Kort läggs nu till, ordnas och ändras i storlek direkt på fliken Värdstatistik. Öppna Värdstatistik för den här värden och använd Anpassa för att välja vilka kort som visas.",
"quickActionsLabel": "Snabbåtgärder",
"quickActionsToolbar": "Snabbåtgärder visas som knappar i verktygsfältet Host Metrics för att köra kommandon med ett klick.",
"noQuickActions": "Inga snabba åtgärder ännu.",
"buttonLabel": "Knappetikett",
"selectSnippetPlaceholder": "Välj utdrag...",
"addActionBtn": "Lägg till åtgärd",
"hostNotFound": "Värden hittades inte",
"loadingHost": "Laddar värd..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "Disk"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "Avboka",
"confirmRunButton": "Sikt",
"confirmRunMessage": "Kör \"{{name}}\"?"
}
}
},
"terminal": {
"connected": "Ansluten"
}
@@ -51,10 +51,6 @@
"processesRunning": "วิ่ง",
"loginStats": "สถิติการเข้าสู่ระบบ SSH",
"noRecentLoginData": "ไม่มีข้อมูลการเข้าสู่ระบบล่าสุด",
"executingQuickAction": "กำลังดำเนินการ {{name}}...",
"quickActionSuccess": "{{name}} เสร็จสมบูรณ์เรียบร้อยแล้ว",
"quickActionFailed": "{{name}} ล้มเหลว",
"quickActionError": "ไม่สามารถดำเนินการ {{name}} ได้",
"ports": {
"title": "พอร์ตรับฟัง",
"protocol": "โปรโตคอล",
@@ -235,12 +231,6 @@
"addExcludedMount": "เพิ่ม",
"visibleWidgets": "วิดเจ็ตที่มองเห็นได้",
"widgetsMovedToHostMetrics": "ขณะนี้สามารถเพิ่ม จัดเรียง และปรับขนาดการ์ดได้โดยตรงในแท็บเมตริกโฮสต์ เปิดเมตริกโฮสต์สำหรับโฮสต์นี้แล้วใช้ ปรับแต่ง เพื่อเลือกการ์ดที่จะแสดง",
"quickActionsLabel": "การดำเนินการด่วน",
"quickActionsToolbar": "การดำเนินการด่วนจะปรากฏเป็นปุ่มในแถบเครื่องมือ Host Metrics เพื่อให้สามารถเรียกใช้คำสั่งได้ด้วยการคลิกเพียงครั้งเดียว",
"noQuickActions": "ยังไม่มีการดำเนินการใดๆ อย่างเร่งด่วนในขณะนี้",
"buttonLabel": "ป้ายกำกับปุ่ม",
"selectSnippetPlaceholder": "เลือกส่วนย่อย...",
"addActionBtn": "เพิ่มการดำเนินการ",
"hostNotFound": "ไม่พบโฮสต์",
"loadingHost": "กำลังโหลดโฮสต์..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "ดิสก์"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "ยกเลิก",
"confirmRunButton": "วิ่ง",
"confirmRunMessage": "เรียกใช้ \"{{name}}\"?"
}
}
},
"terminal": {
"connected": "เชื่อมต่อแล้ว"
}
@@ -51,10 +51,6 @@
"processesRunning": "çalışan",
"loginStats": "SSH Giriş İstatistikleri",
"noRecentLoginData": "Son giriş verisi yok",
"executingQuickAction": "{{name}} çalıştırılıyor...",
"quickActionSuccess": "{{name}} başarıyla tamamlandı",
"quickActionFailed": "{{name}} başarısız oldu",
"quickActionError": "{{name}} çalıştırılamadı",
"ports": {
"title": "Dinlenen Portlar",
"protocol": "Protokol",
@@ -235,12 +231,6 @@
"addExcludedMount": "Eklemek",
"visibleWidgets": "Görünür Widget'lar",
"widgetsMovedToHostMetrics": "Kartlar artık doğrudan Sunucu Metrikleri sekmesinde eklenir, düzenlenir ve yeniden boyutlandırılır. Bu sunucu için Sunucu Metrikleri'ni açın ve hangi kartların gösterileceğini seçmek için Özelleştir'i kullanın.",
"quickActionsLabel": "Hızlı Eylemler",
"quickActionsToolbar": "Hızlı eylemler, tek tıklamayla komut çalıştırmak için Ana Bilgisayar Metrikleri araç çubuğunda düğme olarak görünür.",
"noQuickActions": "Henüz hızlı eylem yok.",
"buttonLabel": "Düğme etiketi",
"selectSnippetPlaceholder": "Parçacık seç...",
"addActionBtn": "Eylem Ekle",
"hostNotFound": "Host bulunamadı",
"loadingHost": "Host yükleniyor..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "Disk"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "İptal",
"confirmRunButton": "Çalıştır",
"confirmRunMessage": "\"{{name}}\" çalıştırılsın mı?"
}
}
},
"terminal": {
"connected": "Bağlandı"
}
@@ -51,10 +51,6 @@
"processesRunning": "біг",
"loginStats": "Статистика входу SSH",
"noRecentLoginData": "Немає останніх даних для входу",
"executingQuickAction": "Виконання {{name}}...",
"quickActionSuccess": "{{name}} успішно завершено",
"quickActionFailed": "{{name}} не вдалося",
"quickActionError": "Не вдалося виконати {{name}}",
"ports": {
"title": "Порти прослуховування",
"protocol": "Протокол",
@@ -235,12 +231,6 @@
"addExcludedMount": "Додати",
"visibleWidgets": "Видимі віджети",
"widgetsMovedToHostMetrics": "Тепер картки додаються, упорядковуються та змінюються за розміром безпосередньо на вкладці «Метрики хоста». Відкрийте «Метрики хоста» для цього хоста та скористайтеся функцією «Налаштувати», щоб вибрати, які картки відображатимуться.",
"quickActionsLabel": "Швидкі дії",
"quickActionsToolbar": "Швидкі дії відображаються як кнопки на панелі інструментів «Метрики хоста» для виконання команд одним клацанням миші.",
"noQuickActions": "Поки що жодних швидких дій.",
"buttonLabel": "Мітка кнопки",
"selectSnippetPlaceholder": "Вибрати фрагмент...",
"addActionBtn": "Додати дію",
"hostNotFound": "Хост не знайдено",
"loadingHost": "Завантаження хоста..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "Диск"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "Скасувати",
"confirmRunButton": "Бігти",
"confirmRunMessage": "Запустити \"{{name}}\"?"
}
}
},
"terminal": {
"connected": "Підключено"
}
@@ -51,10 +51,6 @@
"processesRunning": "đang chạy",
"loginStats": "Thống kê đăng nhập SSH",
"noRecentLoginData": "Không có dữ liệu đăng nhập gần đây",
"executingQuickAction": "Đang thực thi {{name}}...",
"quickActionSuccess": "{{name}} đã hoàn tất thành công",
"quickActionFailed": "{{name}} thất bại",
"quickActionError": "Thực thi {{name}} thất bại",
"ports": {
"title": "Cổng đang lắng nghe",
"protocol": "Giao thức",
@@ -235,12 +231,6 @@
"addExcludedMount": "Thêm vào",
"visibleWidgets": "Widget hiển thị",
"widgetsMovedToHostMetrics": "Các thẻ hiện được thêm, sắp xếp và thay đổi kích thước trực tiếp trong tab Số liệu máy. Mở Số liệu máy cho máy này và dùng Tùy chỉnh để chọn thẻ hiển thị.",
"quickActionsLabel": "Hành động nhanh",
"quickActionsToolbar": "Hành động nhanh xuất hiện dưới dạng nút trên thanh công cụ Chỉ số máy để thực thi lệnh một lần nhấp.",
"noQuickActions": "Chưa có hành động nhanh nào.",
"buttonLabel": "Nhãn nút",
"selectSnippetPlaceholder": "Chọn đoạn mã...",
"addActionBtn": "Thêm hành động",
"hostNotFound": "Không tìm thấy máy chủ",
"loadingHost": "Đang tải máy chủ..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "Ổ đĩa"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "Hủy",
"confirmRunButton": "Chạy",
"confirmRunMessage": "Chạy \"{{name}}\"?"
}
}
},
"terminal": {
"connected": "Đã kết nối"
}
@@ -51,10 +51,6 @@
"processesRunning": "运行中",
"loginStats": "SSH 登录统计",
"noRecentLoginData": "无最近登录数据",
"executingQuickAction": "正在执行 {{name}}...",
"quickActionSuccess": "{{name}} 执行成功",
"quickActionFailed": "{{name}} 执行失败",
"quickActionError": "执行 {{name}} 失败",
"ports": {
"title": "监听端口",
"protocol": "协议",
@@ -235,12 +231,6 @@
"addExcludedMount": "添加",
"visibleWidgets": "可见小部件",
"widgetsMovedToHostMetrics": "卡片现在可在“主机指标”选项卡中直接添加、排列和调整大小。打开此主机的“主机指标”,使用“自定义”选择要显示的卡片。",
"quickActionsLabel": "快速操作",
"quickActionsToolbar": "快速操作以按钮形式显示在主机指标工具栏中,以便一键执行命令。",
"noQuickActions": "尚无快速操作。",
"buttonLabel": "按钮标签",
"selectSnippetPlaceholder": "选择代码片段...",
"addActionBtn": "添加操作",
"hostNotFound": "未找到主机",
"loadingHost": "正在加载主机..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "磁盘"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "取消",
"confirmRunButton": "运行",
"confirmRunMessage": "运行“{{name}}”?"
}
}
},
"terminal": {
"connected": "已连接"
}
@@ -51,10 +51,6 @@
"processesRunning": "執行中",
"loginStats": "SSH 登入統計資訊",
"noRecentLoginData": "沒有最近的登入資料",
"executingQuickAction": "正在執行 {{name}}...",
"quickActionSuccess": "{{name}} 已成功完成",
"quickActionFailed": "{{name}} 失敗",
"quickActionError": "無法執行 {{name}}",
"ports": {
"title": "監聽中的連接埠",
"protocol": "通訊協定",
@@ -235,12 +231,6 @@
"addExcludedMount": "添加",
"visibleWidgets": "可見的小工具",
"widgetsMovedToHostMetrics": "現在卡片可直接在主機指標分頁中新增、排列和調整大小。開啟此主機的主機指標,然後使用自訂功能選擇要顯示的卡片。",
"quickActionsLabel": "快速動作",
"quickActionsToolbar": "快速動作會以按鈕形式顯示在主機計量工具列上,可一鍵執行指令。",
"noQuickActions": "尚無快速動作。",
"buttonLabel": "按鈕標籤",
"selectSnippetPlaceholder": "選取程式碼片段...",
"addActionBtn": "新增動作",
"hostNotFound": "找不到主機",
"loadingHost": "正在載入主機..."
},
@@ -282,15 +272,6 @@
"dashboardTab": {
"disk": "磁碟"
},
"newUi": {
"sidebar": {
"snippets": {
"cancel": "取消",
"confirmRunButton": "執行",
"confirmRunMessage": "執行 \"{{name}}\"?"
}
}
},
"terminal": {
"connected": "已連線"
}
+4
View File
@@ -137,6 +137,10 @@
{
"id": "host-metrics.managers",
"accepts": ["component"]
},
{
"id": "host-metrics.toolbar",
"accepts": ["component"]
}
],
"uiPresets": {
@@ -4,7 +4,6 @@ import {
SectionCard,
SettingRow,
FakeSwitch,
Select2,
} from "@termix/plugin-sdk/ui";
import { useEffect, useState } from "react";
import {
@@ -12,33 +11,24 @@ import {
useTranslation,
type HostEditorSectionProps,
} from "@termix/plugin-sdk/frontend";
import {
HardDrive,
LayoutDashboard,
Plus,
Server,
Trash2,
Zap,
} from "lucide-react";
import { HardDrive, LayoutDashboard, Plus, Server, Trash2 } from "lucide-react";
import { readHostMetricsSettings } from "../shared/stats-widgets.js";
const PLUGIN_ID = "host-metrics";
type PluginSettingsBag = Record<string, Record<string, unknown>>;
type QuickActionRow = { name: string; snippetId: string };
/**
* The Host Metrics section of the host editor. Its values are this plugin's
* host settings, carried on form.pluginSettings and saved by the editor after
* the host itself. Quick actions are a core host field.
* the host itself.
*/
export function HostStatsTab({
form,
setField,
updateForm,
host,
snippets,
}: HostEditorSectionProps) {
const { t } = useTranslation();
const [newMount, setNewMount] = useState("");
@@ -49,8 +39,6 @@ export function HostStatsTab({
];
const settings = readHostMetricsSettings(bag);
const { excludedMounts, monitoredMounts } = settings;
const quickActions = (form.quickActions ?? []) as QuickActionRow[];
const snippetOptions = (snippets ?? []) as { id: number; name: string }[];
const api = usePluginApi();
const patch = (values: Record<string, unknown>) =>
@@ -288,84 +276,6 @@ export function HostStatsTab({
</p>
</div>
</SectionCard>
<SectionCard
title={t("hosts.quickActionsLabel")}
icon={<Zap className="size-3.5" />}
action={
<Button
variant="outline"
size="sm"
className="h-6 text-[10px] px-2 border-accent-brand/40 text-accent-brand"
onClick={() =>
setField("quickActions", [
...quickActions,
{ name: "", snippetId: "" },
])
}
>
<Plus className="size-3 mr-1" /> {t("hosts.addActionBtn")}
</Button>
}
>
<div className="flex flex-col gap-3 py-3">
<p className="text-xs text-muted-foreground">
{t("hosts.quickActionsToolbar")}
</p>
{quickActions.length === 0 && (
<div className="flex flex-col items-center justify-center py-4 text-muted-foreground/40 gap-1.5">
<Zap className="size-6" />
<span className="text-xs">{t("hosts.noQuickActions")}</span>
</div>
)}
{quickActions.map((a, i) => (
<div
key={i}
className="flex items-center gap-2 p-2 bg-muted/20 border border-border group"
>
<Input
className="h-7 text-xs flex-1"
placeholder={t("hosts.buttonLabel")}
value={a.name}
onChange={(e) => {
const updated = [...quickActions];
updated[i] = { ...updated[i], name: e.target.value };
setField("quickActions", updated);
}}
/>
<Select2
className="h-7 text-xs flex-1 border border-border bg-background px-2 outline-none focus:ring-1 focus:ring-ring"
value={a.snippetId}
onChange={(e) => {
const updated = [...quickActions];
updated[i] = {
...updated[i],
snippetId: e.target.value,
};
setField("quickActions", updated);
}}
>
<option value="">{t("hosts.selectSnippetPlaceholder")}</option>
{snippetOptions.map((s) => (
<option key={s.id} value={String(s.id)}>
{s.name}
</option>
))}
</Select2>
<button
className="text-muted-foreground hover:text-destructive opacity-0 group-hover:opacity-100 transition-opacity"
onClick={() =>
setField(
"quickActions",
quickActions.filter((_, idx) => idx !== i),
)
}
>
<Trash2 className="size-3.5" />
</button>
</div>
))}
</div>
</SectionCard>
</>
);
}
@@ -1,7 +1,6 @@
import {
Separator,
Button,
useConfirmation,
ComponentSlot,
TOTPDialog,
useTabsSafe,
ConnectionLogProvider,
@@ -11,7 +10,6 @@ import {
CardGridCanvas,
ColumnCountStepper,
type GridCardCatalogEntry,
SnippetVariablesDialog,
} from "@termix/plugin-sdk/ui";
import { readHostMetricsSettings } from "../shared/stats-widgets.js";
import {
@@ -23,33 +21,12 @@ import type { ServerMetrics } from "../shared/metrics.js";
import React from "react";
import { useHostMetricsApi } from "./host-metrics-api";
interface Snippet {
id: number;
name: string;
content: string;
}
function errorText(error: unknown): string {
if (error instanceof Error && error.message) return error.message;
return typeof error === "string" ? error : "";
}
// Mirrors the snippets plugin's own hasSnippetInputs: a pure check for
// whether a snippet still has $INPUT_n placeholders once host variables are
// substituted, so the quick-action dialog knows to ask before running.
const SNIPPET_INPUT_PATTERN =
/\$\{INPUT_(\d+)(?::([^}$]+))?\}|\$INPUT_(\d+)(?![a-zA-Z0-9_])/g;
function hasSnippetInputs(content: string): boolean {
SNIPPET_INPUT_PATTERN.lastIndex = 0;
return SNIPPET_INPUT_PATTERN.test(content);
}
import {
useTranslation,
useSlotContributions,
useConnectionRetry,
useHost,
useHostStatus,
invokeAction,
logActivity,
usePluginUiPreferences,
} from "@termix/plugin-sdk/frontend";
@@ -70,11 +47,6 @@ import { metricsChangeKey } from "./metrics-change-key";
const HISTORY_LEN = 30;
interface QuickAction {
name: string;
snippetId: number;
}
type ConnectionLogPayload = Parameters<
ReturnType<typeof useConnectionLog>["addLog"]
>[0];
@@ -87,7 +59,6 @@ interface HostConfig {
name: string;
ip: string;
username: string;
quickActions?: QuickAction[];
statusCheckEnabled?: boolean;
pluginSettings?: Record<string, Record<string, unknown>>;
authType?: string;
@@ -127,9 +98,6 @@ function HostMetricsInner({
});
const [currentHostConfig, setCurrentHostConfig] = React.useState(hostConfig);
const [isRefreshing, setIsRefreshing] = React.useState(false);
const [executingActions, setExecutingActions] = React.useState<Set<number>>(
new Set(),
);
const [totpRequired, setTotpRequired] = React.useState(false);
const [totpSessionId, setTotpSessionId] = React.useState<string | null>(null);
const [totpPrompt, setTotpPrompt] = React.useState<string>("");
@@ -139,15 +107,9 @@ function HostMetricsInner({
null,
);
const [editMode, setEditMode] = React.useState(false);
const [runningAction, setRunningAction] = React.useState<{
action: QuickAction;
snippet: Snippet;
} | null>(null);
const { confirmWithToast } = useConfirmation();
const activityLoggedRef = React.useRef(false);
const activityLoggingRef = React.useRef(false);
const snippetsCacheRef = React.useRef(new Map<number, Snippet>());
const statsConfig = React.useMemo(() => {
const settings = readHostMetricsSettings(
@@ -532,102 +494,6 @@ function HostMetricsInner({
}
};
async function executeQuickAction(
action: QuickAction,
inputValues: Record<string, string>,
) {
if (!currentHostConfig) return;
setExecutingActions((prev) => new Set(prev).add(action.snippetId));
toast.loading(
t("hostMetrics.executingQuickAction", { name: action.name }),
{
id: `quick-action-${action.snippetId}`,
},
);
try {
const result = (await invokeAction(
"snippets.execute",
action.snippetId,
currentHostConfig.id,
Object.keys(inputValues).length > 0 ? inputValues : undefined,
)) as { success: boolean; output?: string; error?: string } | undefined;
if (!result) {
toast.error(t("hostMetrics.quickActionError", { name: action.name }), {
id: `quick-action-${action.snippetId}`,
description: t("hostMetrics.snippetsUnavailable"),
duration: 5000,
});
} else if (result.success) {
toast.success(
t("hostMetrics.quickActionSuccess", { name: action.name }),
{
id: `quick-action-${action.snippetId}`,
description: result.output?.substring(0, 200),
duration: 5000,
},
);
} else {
toast.error(t("hostMetrics.quickActionFailed", { name: action.name }), {
id: `quick-action-${action.snippetId}`,
description: result.error || result.output,
duration: 5000,
});
}
} catch (error) {
toast.error(t("hostMetrics.quickActionError", { name: action.name }), {
id: `quick-action-${action.snippetId}`,
description: errorText(error),
duration: 5000,
});
} finally {
setExecutingActions((prev) => {
const next = new Set(prev);
next.delete(action.snippetId);
return next;
});
}
}
function runQuickActionWithConfirm(
action: QuickAction,
inputValues: Record<string, string>,
) {
const shouldConfirm =
localStorage.getItem("confirmSnippetExecution") === "true";
const run = () => void executeQuickAction(action, inputValues);
if (!shouldConfirm) {
run();
return;
}
confirmWithToast(
t("newUi.sidebar.snippets.confirmRunMessage", { name: action.name }),
run,
t("newUi.sidebar.snippets.confirmRunButton"),
t("newUi.sidebar.snippets.cancel"),
{ confirmOnEnter: true, duration: 6000 },
);
}
async function runQuickAction(action: QuickAction) {
if (!currentHostConfig) return;
try {
let snippet = snippetsCacheRef.current.get(action.snippetId);
if (!snippet) {
snippet =
((await invokeAction("snippets.get", action.snippetId)) as
Snippet | null | undefined) ?? undefined;
if (snippet) snippetsCacheRef.current.set(snippet.id, snippet);
}
if (snippet && hasSnippetInputs(snippet.content)) {
setRunningAction({ action, snippet });
return;
}
} catch {
// fall through and run with no inputs if the snippet lookup fails
}
runQuickActionWithConfirm(action, {});
}
const showCards =
metricsEnabled && metricsRetry.status === "connected" && metrics;
const showOffline =
@@ -653,43 +519,13 @@ function HostMetricsInner({
<h1 className="text-lg font-bold md:text-2xl">{title}</h1>
</div>
<div className="flex items-center gap-0">
{currentHostConfig?.quickActions &&
currentHostConfig.quickActions.length > 0 && (
<>
<div className="mr-3 flex flex-wrap gap-2">
{currentHostConfig.quickActions.map(
(action, index) => {
const isExecuting = executingActions.has(
action.snippetId,
);
return (
<Button
key={index}
variant="outline"
size="sm"
className="h-8 text-xs font-semibold"
disabled={isExecuting}
onClick={() => void runQuickAction(action)}
>
{isExecuting ? (
<>
<RefreshCw className="mr-1 size-3 animate-spin" />
{action.name}
</>
) : (
action.name
)}
</Button>
);
},
)}
</div>
<Separator
orientation="vertical"
className="mx-3 h-8"
/>
</>
)}
<ComponentSlot
slotId="host-metrics.toolbar"
props={{
hostId: currentHostConfig?.id,
host: currentHostConfig,
}}
/>
{editMode && (
<>
<ColumnCountStepper
@@ -806,32 +642,6 @@ function HostMetricsInner({
onCancel={handleTOTPCancel}
backgroundColor="var(--bg-canvas)"
/>
{runningAction && (
<SnippetVariablesDialog
snippet={
runningAction.snippet as Parameters<
typeof SnippetVariablesDialog
>[0]["snippet"]
}
host={
currentHostConfig
? {
ip: currentHostConfig.ip,
username: currentHostConfig.username,
port: currentHostConfig.port,
name: currentHostConfig.name,
}
: null
}
onCancel={() => setRunningAction(null)}
onConfirm={(_resolvedContent, inputValues) => {
const action = runningAction.action;
setRunningAction(null);
runQuickActionWithConfirm(action, inputValues);
}}
/>
)}
</div>
);
}
@@ -140,4 +140,10 @@ export async function activate(app: TermixApp): Promise<void> {
id: "host-metrics.managers",
accepts: ["component"],
});
// Buttons before the toolbar's own controls, drawn with { hostId, host }.
// The snippets plugin puts a host's quick actions here.
app.declareActionSlot({
id: "host-metrics.toolbar",
accepts: ["component"],
});
}
@@ -7,7 +7,6 @@ afterEach(cleanup);
function renderSection(pluginSettings: Record<string, unknown> = {}) {
let form: Record<string, unknown> = {
quickActions: [],
pluginSettings: { "host-metrics": pluginSettings, other: { keep: 1 } },
};
const updateForm = vi.fn(
@@ -21,7 +20,6 @@ function renderSection(pluginSettings: Record<string, unknown> = {}) {
setField={vi.fn()}
updateForm={updateForm as never}
host={{ id: "7", name: "h", ip: "10.0.0.7", port: 22 }}
snippets={[]}
protocols={{ ssh: true }}
/>,
);