diff --git a/webui/messages/ar.json b/webui/messages/ar.json
index f582a127..f9459aab 100644
--- a/webui/messages/ar.json
+++ b/webui/messages/ar.json
@@ -363,5 +363,6 @@
"app_menu_edit_plan": "app_menu_edit_plan",
"add_repo_modal_field_auto_unlock_tooltip": "ستؤدي خاصية الفتح التلقائي إلى إزالة ملفات القفل عند بدء معظم العمليات. قد يكون هذا غير آمن إذا تمت مشاركة المستودع بين عدة أجهزة عميلة، وإلا يُنصح باستخدامه في إعدادات العميل الواحد.",
"op_row_cancel_op": "إلغاء العملية",
- "op_row_confirm_cancel": "تأكيد إلغاء؟"
+ "op_row_confirm_cancel": "تأكيد إلغاء؟",
+ "app_menu_dashboard": "لوحة التحكم"
}
diff --git a/webui/messages/bn.json b/webui/messages/bn.json
index b3b3dd37..5ba82dd8 100644
--- a/webui/messages/bn.json
+++ b/webui/messages/bn.json
@@ -363,5 +363,6 @@
"app_menu_edit_plan": "অ্যাপ_মেনু_সম্পাদনা_পরিকল্পনা",
"add_repo_modal_field_auto_unlock_tooltip": "বেশিরভাগ অপারেশনের শুরুতেই অটো-আনলক লকফাইলগুলি সরিয়ে ফেলবে। একাধিক ক্লায়েন্ট ডিভাইস দ্বারা রেপো শেয়ার করা হলে এটি সম্ভাব্যভাবে অনিরাপদ, অন্যথায় একক-ক্লায়েন্ট সেটআপের জন্য সুপারিশ করা হয়।",
"op_row_cancel_op": "অপারেশন বাতিল করুন",
- "op_row_confirm_cancel": "বাতিল নিশ্চিত করবেন?"
+ "op_row_confirm_cancel": "বাতিল নিশ্চিত করবেন?",
+ "app_menu_dashboard": "ড্যাশবোর্ড"
}
diff --git a/webui/messages/de.json b/webui/messages/de.json
index bb1d89bb..ff922663 100644
--- a/webui/messages/de.json
+++ b/webui/messages/de.json
@@ -363,5 +363,6 @@
"app_menu_edit_plan": "app_menu_edit_plan",
"add_repo_modal_field_auto_unlock_tooltip": "Die automatische Entsperrung entfernt Sperrdateien zu Beginn der meisten Operationen. Dies kann unsicher sein, wenn das Repository von mehreren Clientgeräten gemeinsam genutzt wird; ansonsten wird diese Option für Einzelclient-Setups empfohlen.",
"op_row_cancel_op": "Vorgang abbrechen",
- "op_row_confirm_cancel": "Abbrechen bestätigen?"
+ "op_row_confirm_cancel": "Abbrechen bestätigen?",
+ "app_menu_dashboard": "Armaturenbrett"
}
diff --git a/webui/messages/en.json b/webui/messages/en.json
index ef78c84b..6f65de41 100644
--- a/webui/messages/en.json
+++ b/webui/messages/en.json
@@ -145,6 +145,7 @@
"app_menu_add_repo": "Add Repo",
"app_menu_remote_instances": "Remote Instances",
"app_menu_settings": "Settings",
+ "app_menu_dashboard": "Dashboard",
"app_error_initial_config": "Failed to fetch initial config, typically this means the UI could not connect to the backend",
"login_success": "Logged in",
"login_error": "Login failed: ",
diff --git a/webui/messages/es.json b/webui/messages/es.json
index 0ac66200..fbdca3ba 100644
--- a/webui/messages/es.json
+++ b/webui/messages/es.json
@@ -363,5 +363,6 @@
"app_menu_edit_plan": "menú_aplicación_editar_plan",
"add_repo_modal_field_auto_unlock_tooltip": "El desbloqueo automático eliminará los archivos de bloqueo al inicio de la mayoría de las operaciones. Esto puede ser peligroso si el repositorio se comparte entre varios dispositivos cliente; de lo contrario, se recomienda para configuraciones de un solo cliente.",
"op_row_cancel_op": "Cancelar operación",
- "op_row_confirm_cancel": "¿Confirmar Cancelar?"
+ "op_row_confirm_cancel": "¿Confirmar Cancelar?",
+ "app_menu_dashboard": "Panel"
}
diff --git a/webui/messages/fr.json b/webui/messages/fr.json
index bee71e0c..9caaba7e 100644
--- a/webui/messages/fr.json
+++ b/webui/messages/fr.json
@@ -363,5 +363,6 @@
"app_menu_edit_plan": "app_menu_edit_plan",
"add_repo_modal_field_auto_unlock_tooltip": "Le déverrouillage automatique supprime les fichiers de verrouillage au début de la plupart des opérations. Cette opération peut s'avérer dangereuse si le dépôt est partagé par plusieurs appareils clients ; elle est par ailleurs recommandée pour les configurations mono-client.",
"op_row_cancel_op": "Opération annulée",
- "op_row_confirm_cancel": "Confirmer Annuler ?"
+ "op_row_confirm_cancel": "Confirmer Annuler ?",
+ "app_menu_dashboard": "Tableau de bord"
}
diff --git a/webui/messages/hi.json b/webui/messages/hi.json
index 8b7b9dc7..fabd2189 100644
--- a/webui/messages/hi.json
+++ b/webui/messages/hi.json
@@ -363,5 +363,6 @@
"app_menu_edit_plan": "ऐप_मेनू_एडिट_प्लान",
"add_repo_modal_field_auto_unlock_tooltip": "अधिकांश कार्यों की शुरुआत में ऑटो-अनलॉक लॉकफाइलों को हटा देगा। यदि रिपॉजिटरी को कई क्लाइंट डिवाइसों द्वारा साझा किया जाता है तो यह संभावित रूप से असुरक्षित हो सकता है, अन्यथा एकल-क्लाइंट सेटअप के लिए इसकी अनुशंसा की जाती है।",
"op_row_cancel_op": "ऑपरेशन रद्द करें",
- "op_row_confirm_cancel": "पुष्टि करें/रद्द करें?"
+ "op_row_confirm_cancel": "पुष्टि करें/रद्द करें?",
+ "app_menu_dashboard": "डैशबोर्ड"
}
diff --git a/webui/messages/id.json b/webui/messages/id.json
index 656cef6d..90ec7d2a 100644
--- a/webui/messages/id.json
+++ b/webui/messages/id.json
@@ -363,5 +363,6 @@
"app_menu_edit_plan": "app_menu_edit_plan",
"add_repo_modal_field_auto_unlock_tooltip": "Fitur buka kunci otomatis akan menghapus file kunci di awal sebagian besar operasi. Ini berpotensi tidak aman jika repositori digunakan bersama oleh beberapa perangkat klien, jika tidak, fitur ini direkomendasikan untuk pengaturan klien tunggal.",
"op_row_cancel_op": "Batalkan Operasi",
- "op_row_confirm_cancel": "Konfirmasi Batal?"
+ "op_row_confirm_cancel": "Konfirmasi Batal?",
+ "app_menu_dashboard": "Dasbor"
}
diff --git a/webui/messages/it.json b/webui/messages/it.json
index 8a0c4c36..c4d3ad8e 100644
--- a/webui/messages/it.json
+++ b/webui/messages/it.json
@@ -363,5 +363,6 @@
"app_menu_edit_plan": "app_menu_edit_plan",
"add_repo_modal_field_auto_unlock_tooltip": "Lo sblocco automatico rimuoverà i file di blocco all'inizio della maggior parte delle operazioni. Questa opzione è potenzialmente pericolosa se il repository è condiviso da più dispositivi client, altrimenti è consigliata per configurazioni con un solo client.",
"op_row_cancel_op": "Annulla operazione",
- "op_row_confirm_cancel": "Confermare l'annullamento?"
+ "op_row_confirm_cancel": "Confermare l'annullamento?",
+ "app_menu_dashboard": "Pannello di controllo"
}
diff --git a/webui/messages/pt.json b/webui/messages/pt.json
index f5a84fd5..5b4faa86 100644
--- a/webui/messages/pt.json
+++ b/webui/messages/pt.json
@@ -363,5 +363,6 @@
"app_menu_edit_plan": "app_menu_editar_plano",
"add_repo_modal_field_auto_unlock_tooltip": "O desbloqueio automático removerá os arquivos de bloqueio no início da maioria das operações. Isso pode ser inseguro se o repositório for compartilhado por vários dispositivos cliente; caso contrário, é recomendado para configurações com um único cliente.",
"op_row_cancel_op": "Cancelar operação",
- "op_row_confirm_cancel": "Confirmar Cancelar?"
+ "op_row_confirm_cancel": "Confirmar Cancelar?",
+ "app_menu_dashboard": "Painel"
}
diff --git a/webui/messages/ru.json b/webui/messages/ru.json
index 6a95d173..527a8ec5 100644
--- a/webui/messages/ru.json
+++ b/webui/messages/ru.json
@@ -363,5 +363,6 @@
"app_menu_edit_plan": "app_menu_edit_plan",
"add_repo_modal_field_auto_unlock_tooltip": "Автоматическая разблокировка удаляет файлы блокировки в начале большинства операций. Это потенциально небезопасно, если репозиторий используется несколькими клиентскими устройствами, в противном случае рекомендуется для конфигураций с одним клиентом.",
"op_row_cancel_op": "Отменить операцию",
- "op_row_confirm_cancel": "Подтвердить отмену?"
+ "op_row_confirm_cancel": "Подтвердить отмену?",
+ "app_menu_dashboard": "Панель управления"
}
diff --git a/webui/messages/zh.json b/webui/messages/zh.json
index f8ee56a1..886019d5 100644
--- a/webui/messages/zh.json
+++ b/webui/messages/zh.json
@@ -365,5 +365,6 @@
"op_row_cancel_op": "取消操作",
"op_row_confirm_cancel": "确认取消?",
"op_row_delete": "删除操作",
- "op_row_confirm_delete": "确认删除?"
+ "op_row_confirm_delete": "确认删除?",
+ "app_menu_dashboard": "仪表板"
}
diff --git a/webui/src/app/App.tsx b/webui/src/app/App.tsx
index 3bb9bab9..eb3fffe2 100644
--- a/webui/src/app/App.tsx
+++ b/webui/src/app/App.tsx
@@ -12,6 +12,7 @@ import {
FiServer,
FiEdit2,
FiMenu,
+ FiHome,
} from "react-icons/fi";
import {
@@ -237,6 +238,21 @@ const SidebarContent = ({ onClose }: { onClose?: () => void }) => {
defaultValue={["plans", "repos", "authorized-clients"]}
variant="plain"
>
+ {/* DASHBOARD */}
+ handleNav("/")}
+ px={4}
+ py={2}
+ _hover={{ bg: "bg.muted" }}
+ userSelect="none"
+ >
+
+
+ {m.app_menu_dashboard()}
+
+
+
{/* PLANS SECTION */}
diff --git a/webui/src/components/common/DynamicList.tsx b/webui/src/components/common/DynamicList.tsx
index 7305ac7e..45cb6887 100644
--- a/webui/src/components/common/DynamicList.tsx
+++ b/webui/src/components/common/DynamicList.tsx
@@ -283,9 +283,9 @@ export const DynamicList = ({
{tooltip && (
-
+
{tooltip}
-
+
)}
);
diff --git a/webui/src/components/common/FormModal.tsx b/webui/src/components/common/FormModal.tsx
index 0fd4f4b6..fa87fe51 100644
--- a/webui/src/components/common/FormModal.tsx
+++ b/webui/src/components/common/FormModal.tsx
@@ -20,7 +20,20 @@ interface FormModalProps {
title: string;
children: React.ReactNode;
footer?: React.ReactNode;
- size?: "default" | "large";
+ size?:
+ | "xs"
+ | "sm"
+ | "md"
+ | "lg"
+ | "xl"
+ | "2xl"
+ | "3xl"
+ | "4xl"
+ | "5xl"
+ | "6xl"
+ | "full"
+ | "default"
+ | "large";
}
export const FormModal: React.FC = ({
@@ -33,19 +46,28 @@ export const FormModal: React.FC = ({
}) => {
// Map size "default" to "md" and "large" to "xl" or "2xl"
// Chakra default sizes are xs, sm, md, lg, xl, 2xl, etc.
- const chakraSize = size === "large" ? "xl" : "md";
+ let chakraSize = size;
+ if (size === "default") chakraSize = "md";
+ if (size === "large") chakraSize = "xl";
+
+ // Identify if the requested size is supported by the DialogRoot component directly
+ // definition: "xs" | "sm" | "md" | "lg" | "xl" | "full" | "cover" | undefined
+ const validRootSizes = ["xs", "sm", "md", "lg", "xl", "full", "cover"];
+ const isRootSize = validRootSizes.includes(chakraSize);
+ const rootSize = isRootSize ? (chakraSize as any) : undefined;
+ const contentMaxW = !isRootSize ? chakraSize : undefined;
return (
!e.open && onClose()}
- size={chakraSize}
+ size={rootSize}
scrollBehavior="inside"
>
-
+
{title}
diff --git a/webui/src/components/common/LogView.tsx b/webui/src/components/common/LogView.tsx
index 033d287e..5a42f287 100644
--- a/webui/src/components/common/LogView.tsx
+++ b/webui/src/components/common/LogView.tsx
@@ -98,8 +98,8 @@ export const LogView = ({ logref }: { logref: string }) => {
))}
{loading && lines.length === 0 && (
-
-
+
+
)}
diff --git a/webui/src/features/auth/LoginModal.tsx b/webui/src/features/auth/LoginModal.tsx
index 60d66769..223f8c33 100644
--- a/webui/src/features/auth/LoginModal.tsx
+++ b/webui/src/features/auth/LoginModal.tsx
@@ -51,6 +51,7 @@ export const LoginModal = () => {
isOpen={true}
onClose={() => {}} // Non-closable
title={m.login_title()}
+ size="2xl"
footer={