diff --git a/services/webmail/messages/en.json b/services/webmail/messages/en.json index ebf1590..aabb645 100644 --- a/services/webmail/messages/en.json +++ b/services/webmail/messages/en.json @@ -564,5 +564,27 @@ "draftDiscarded": "Reply discarded", "sentReply": "Reply sent", "moreMessages": "Show {count} earlier messages" + }, + "appearance": { + "title": "Appearance", + "dark": "Dark", + "light": "Light", + "system": "System" + }, + "palette": { + "placeholder": "Type a command, a folder or something to search for", + "empty": "Nothing matches. Press Enter to search your mail for this.", + "searchFor": "Search mail for \"{query}\"", + "goTo": "Go to {name}", + "actions": "Actions", + "navigate": "Go to", + "theme": "Appearance", + "accounts": "Accounts", + "switchTo": "Switch to {email}", + "hintMove": "move", + "hintOpen": "open", + "hintClose": "close", + "open": "Command menu", + "signOut": "Sign out" } } diff --git a/services/webmail/messages/es.json b/services/webmail/messages/es.json index 3adcd61..db81fb9 100644 --- a/services/webmail/messages/es.json +++ b/services/webmail/messages/es.json @@ -564,5 +564,27 @@ "draftDiscarded": "Respuesta descartada", "sentReply": "Respuesta enviada", "moreMessages": "Mostrar {count} mensajes anteriores" + }, + "appearance": { + "title": "Apariencia", + "dark": "Oscuro", + "light": "Claro", + "system": "Sistema" + }, + "palette": { + "placeholder": "Escribe un comando, una carpeta o algo que buscar", + "empty": "Sin resultados. Pulsa Enter para buscar esto en tu correo.", + "searchFor": "Buscar \"{query}\" en el correo", + "goTo": "Ir a {name}", + "actions": "Acciones", + "navigate": "Ir a", + "theme": "Apariencia", + "accounts": "Cuentas", + "switchTo": "Cambiar a {email}", + "hintMove": "mover", + "hintOpen": "abrir", + "hintClose": "cerrar", + "open": "Menú de comandos", + "signOut": "Cerrar sesión" } } diff --git a/services/webmail/messages/pt-BR.json b/services/webmail/messages/pt-BR.json index 9b35718..6c9ecd6 100644 --- a/services/webmail/messages/pt-BR.json +++ b/services/webmail/messages/pt-BR.json @@ -564,5 +564,27 @@ "draftDiscarded": "Resposta descartada", "sentReply": "Resposta enviada", "moreMessages": "Mostrar {count} mensagens anteriores" + }, + "appearance": { + "title": "Aparência", + "dark": "Escuro", + "light": "Claro", + "system": "Sistema" + }, + "palette": { + "placeholder": "Digite um comando, uma pasta ou algo para buscar", + "empty": "Nada encontrado. Pressione Enter para buscar este texto nos seus e-mails.", + "searchFor": "Buscar \"{query}\" nos e-mails", + "goTo": "Ir para {name}", + "actions": "Ações", + "navigate": "Ir para", + "theme": "Aparência", + "accounts": "Contas", + "switchTo": "Trocar para {email}", + "hintMove": "mover", + "hintOpen": "abrir", + "hintClose": "fechar", + "open": "Menu de comandos", + "signOut": "Sair" } } diff --git a/services/webmail/package-lock.json b/services/webmail/package-lock.json index 188b692..53f0856 100644 --- a/services/webmail/package-lock.json +++ b/services/webmail/package-lock.json @@ -8,6 +8,7 @@ "name": "@lambdamail/webmail", "version": "0.1.0", "dependencies": { + "@fontsource-variable/geist": "^5.3.0", "clsx": "^2.1.1", "dompurify": "^3.4.14", "framer-motion": "^11.18.2", @@ -718,6 +719,15 @@ } } }, + "node_modules/@fontsource-variable/geist": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@fontsource-variable/geist/-/geist-5.3.0.tgz", + "integrity": "sha512-j0m+vLQuG5XAYoHtGCVu0spvlGreR3EzpECUVzkFmI1mTVnAO38l/NEPDCFgZ177JxzYJCLSmTQibIiYPilGrA==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, "node_modules/@img/colour": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", diff --git a/services/webmail/package.json b/services/webmail/package.json index 6768627..ab4be0a 100644 --- a/services/webmail/package.json +++ b/services/webmail/package.json @@ -10,6 +10,7 @@ "lint": "tsc --noEmit" }, "dependencies": { + "@fontsource-variable/geist": "^5.3.0", "clsx": "^2.1.1", "dompurify": "^3.4.14", "framer-motion": "^11.18.2", diff --git a/services/webmail/public/icons/icon-192.png b/services/webmail/public/icons/icon-192.png new file mode 100644 index 0000000..cfb73b0 Binary files /dev/null and b/services/webmail/public/icons/icon-192.png differ diff --git a/services/webmail/public/icons/icon-512.png b/services/webmail/public/icons/icon-512.png new file mode 100644 index 0000000..dbfbea3 Binary files /dev/null and b/services/webmail/public/icons/icon-512.png differ diff --git a/services/webmail/public/icons/maskable-512.png b/services/webmail/public/icons/maskable-512.png new file mode 100644 index 0000000..afe8553 Binary files /dev/null and b/services/webmail/public/icons/maskable-512.png differ diff --git a/services/webmail/src/app/(admin)/admin/layout.tsx b/services/webmail/src/app/(admin)/admin/layout.tsx index fdb40bf..55fd12e 100644 --- a/services/webmail/src/app/(admin)/admin/layout.tsx +++ b/services/webmail/src/app/(admin)/admin/layout.tsx @@ -22,6 +22,8 @@ import { useTranslations } from "../../../i18n/provider"; import { LanguageSwitcher } from "../../../i18n/LanguageSwitcher"; import { useAccount } from "../../../lib/useAccount"; import { initialsFor } from "../../../lib/initials"; +import { Logo } from "../../../components/Logo"; +import { ThemeToggle } from "../../../components/ThemeToggle"; export default function AdminLayout({ children }: { children: React.ReactNode }) { const t = useTranslations(); @@ -52,12 +54,10 @@ export default function AdminLayout({ children }: { children: React.ReactNode }) const SidebarContent = (
-
- {"\u03bb"} -
+
LambdaMail
-
+
{t("common.adminPortal")}
@@ -91,7 +91,7 @@ export default function AdminLayout({ children }: { children: React.ReactNode })
{t("admin.backToWebmail")} @@ -103,7 +103,7 @@ export default function AdminLayout({ children }: { children: React.ReactNode })
- + {initialsFor(account?.email)} @@ -122,12 +122,13 @@ export default function AdminLayout({ children }: { children: React.ReactNode })
+ @@ -139,11 +140,9 @@ export default function AdminLayout({ children }: { children: React.ReactNode }) return (
{/* Mobile Top Header */} -
+
-
- {"\u03bb"} -
+ {t("common.appName")} {t("common.adminPortal")} @@ -152,14 +151,14 @@ export default function AdminLayout({ children }: { children: React.ReactNode }) onClick={() => setMobileOpen(!mobileOpen)} aria-label={t("ui.toggleMenu")} aria-expanded={mobileOpen} - className="flex h-9 w-9 flex-none items-center justify-center rounded-[10px] text-slate-300 transition-colors hover:bg-white/[0.07] hover:text-slate-100" + className="flex h-9 w-9 flex-none items-center justify-center rounded-[10px] text-slate-300 transition-colors hover:bg-ink/[0.07] hover:text-slate-100" > {mobileOpen ? : }
{/* Desktop rail */} -