From 4741e5c506533217ddc92cda0a415d9aa62224b0 Mon Sep 17 00:00:00 2001 From: riyadhafraa <49757212-riyadhafraa@users.noreply.replit.com> Date: Mon, 20 Apr 2026 12:21:35 +0000 Subject: [PATCH] Update login page with a new two-pane design and improved accessibility Redesign the login page with a two-pane layout, add new i18n keys, and fix a11y issues with the password visibility toggle. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 77cfe984-2c65-4152-bb7a-0df28274fe66 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: dec93827-1135-4c56-a2a9-80eab0f95359 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/c3c252e4-c83d-40ca-9fff-99a3ea60701e/77cfe984-2c65-4152-bb7a-0df28274fe66/dffA2SQ Replit-Helium-Checkpoint-Created: true --- artifacts/teaboy-os/public/opengraph.jpg | Bin 18117 -> 34853 bytes artifacts/teaboy-os/src/locales/ar.json | 15 +- artifacts/teaboy-os/src/locales/en.json | 15 +- artifacts/teaboy-os/src/pages/login.tsx | 293 +++++++++++++++++------ 4 files changed, 251 insertions(+), 72 deletions(-) diff --git a/artifacts/teaboy-os/public/opengraph.jpg b/artifacts/teaboy-os/public/opengraph.jpg index ac85dc36bdf8d1b7784e9ec87642accf25d7a418..530741e05a9a6cd14899319f807bd1b9ac6ed98d 100644 GIT binary patch literal 34853 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 literal 18117 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 KKv$f5{J#Lg6V7e` diff --git a/artifacts/teaboy-os/src/locales/ar.json b/artifacts/teaboy-os/src/locales/ar.json index cd2f5b0a..0c166b33 100644 --- a/artifacts/teaboy-os/src/locales/ar.json +++ b/artifacts/teaboy-os/src/locales/ar.json @@ -19,7 +19,20 @@ "createAccount": "حساب جديد", "registrationClosed": "إنشاء الحسابات العامة مغلق حالياً. تواصل مع مدير النظام.", "displayNameAr": "الاسم (عربي)", - "displayNameEn": "الاسم (إنجليزي)" + "displayNameEn": "الاسم (إنجليزي)", + "subtitle": "سجّل دخولك للمتابعة", + "signingIn": "جارٍ الدخول...", + "noAccount": "ليس لديك حساب؟", + "showPassword": "إظهار كلمة المرور", + "hidePassword": "إخفاء كلمة المرور", + "errRequired": "الرجاء إدخال اسم المستخدم وكلمة المرور.", + "errInvalid": "اسم مستخدم أو كلمة مرور غير صحيحة.", + "heroTitle": "مرحباً بك في منصتك الموحدة.", + "heroSubtitle": "سجّل دخولك لإدارة كل شيء من مكان واحد.", + "feat1": "كل أدواتك في لوحة تحكم واحدة", + "feat2": "تحديثات لحظية", + "feat3": "وصول آمن بالجلسات", + "rights": "جميع الحقوق محفوظة." }, "home": { "myApps": "تطبيقاتي" diff --git a/artifacts/teaboy-os/src/locales/en.json b/artifacts/teaboy-os/src/locales/en.json index b10796f1..0e69a2ae 100644 --- a/artifacts/teaboy-os/src/locales/en.json +++ b/artifacts/teaboy-os/src/locales/en.json @@ -19,7 +19,20 @@ "createAccount": "Create Account", "registrationClosed": "Public registration is currently closed. Please contact the administrator.", "displayNameAr": "Name (Arabic)", - "displayNameEn": "Name (English)" + "displayNameEn": "Name (English)", + "subtitle": "Sign in to your account to continue", + "signingIn": "Signing in...", + "noAccount": "Don't have an account?", + "showPassword": "Show password", + "hidePassword": "Hide password", + "errRequired": "Please enter your username and password.", + "errInvalid": "Invalid username or password.", + "heroTitle": "Welcome to your unified workspace.", + "heroSubtitle": "Sign in to manage everything from one place.", + "feat1": "All your tools in one dashboard", + "feat2": "Real-time updates", + "feat3": "Secure session-based access", + "rights": "All rights reserved." }, "home": { "myApps": "My Apps" diff --git a/artifacts/teaboy-os/src/pages/login.tsx b/artifacts/teaboy-os/src/pages/login.tsx index 873ff2dc..44734330 100644 --- a/artifacts/teaboy-os/src/pages/login.tsx +++ b/artifacts/teaboy-os/src/pages/login.tsx @@ -1,31 +1,44 @@ -import { useState } from "react"; +import { useState, type FormEvent } from "react"; import { useTranslation } from "react-i18next"; import { useLocation } from "wouter"; -import { useLogin } from "@workspace/api-client-react"; +import { useLogin, getGetMeQueryKey } from "@workspace/api-client-react"; import { useQueryClient } from "@tanstack/react-query"; -import { getGetMeQueryKey } from "@workspace/api-client-react"; -import { Button } from "@/components/ui/button"; -import { Input } from "@/components/ui/input"; -import { Label } from "@/components/ui/label"; -import { useToast } from "@/hooks/use-toast"; import { useAppName, useAppSettings } from "@/hooks/use-app-settings"; import i18n from "@/i18n"; +import { + Sparkles, + CheckCircle2, + Eye, + EyeOff, + Loader2, + AlertCircle, +} from "lucide-react"; export default function LoginPage() { - const { t } = useTranslation(); + const { t, i18n: i18nInstance } = useTranslation(); + const lang = i18nInstance.language; + const dir = lang === "ar" ? "rtl" : "ltr"; const appName = useAppName(); const { data: settings } = useAppSettings(); const [, setLocation] = useLocation(); - const { toast } = useToast(); const queryClient = useQueryClient(); - const [form, setForm] = useState({ username: "", password: "" }); + + const [username, setUsername] = useState(""); + const [password, setPassword] = useState(""); + const [showPassword, setShowPassword] = useState(false); + const [error, setError] = useState(null); const login = useLogin(); - const handleSubmit = (e: React.FormEvent) => { + const handleSubmit = (e: FormEvent) => { e.preventDefault(); + if (!username.trim() || !password) { + setError(t("auth.errRequired")); + return; + } + setError(null); login.mutate( - { data: { username: form.username, password: form.password } }, + { data: { username: username.trim(), password } }, { onSuccess: (user) => { if (user.preferredLanguage) { @@ -35,77 +48,217 @@ export default function LoginPage() { setLocation("/"); }, onError: () => { - toast({ - title: t("common.error"), - description: t("auth.login"), - variant: "destructive", - }); + setError(t("auth.errInvalid")); }, }, ); }; + const toggleLanguage = () => i18n.changeLanguage(lang === "ar" ? "en" : "ar"); + + const features = [ + t("auth.feat1"), + t("auth.feat2"), + t("auth.feat3"), + ]; + return ( -
-
-
-
{appName}
-

{t("auth.welcomeBack")}

+
+ {/* Left brand panel — hidden on small screens */} +
+
+ +
+
+
+ +
+ + {appName} + +
+ +
+

+ {t("auth.heroTitle")} +

+

+ {t("auth.heroSubtitle")} +

+
+ {features.map((feat) => ( +
+ + {feat} +
+ ))} +
+
-
-
- - setForm((f) => ({ ...f, username: e.target.value }))} - required - className="bg-white/70 border-slate-200 text-foreground placeholder:text-muted-foreground" - /> -
+
+ © {new Date().getFullYear()} {appName}. {t("auth.rights")} +
+
-
- - setForm((f) => ({ ...f, password: e.target.value }))} - required - className="bg-white/70 border-slate-200 text-foreground placeholder:text-muted-foreground" - /> -
- - - - - {settings?.registrationOpen && ( -
- -
- )} - -
+ {/* Right form panel */} +
+ {/* Language toggle */} +
+ + {/* Mobile brand */} +
+
+ +
+ {appName} +
+ +
+
+

+ {t("auth.welcomeBack")} +

+

+ {t("auth.subtitle")} +

+
+ +
+
+ {/* Username */} +
+ + { + setUsername(e.target.value); + setError(null); + }} + disabled={login.isPending} + className="block w-full h-10 rounded-md border border-input bg-background px-3 text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-primary focus:border-primary disabled:opacity-60" + /> +
+ + {/* Password */} +
+ +
+ { + setPassword(e.target.value); + setError(null); + }} + disabled={login.isPending} + className={`block w-full h-10 rounded-md border border-input bg-background px-3 text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-primary focus:border-primary disabled:opacity-60 ${ + dir === "rtl" ? "pl-10" : "pr-10" + }`} + /> + +
+
+ + {/* Error alert */} + {error && ( +
+ + {error} +
+ )} + + {/* Submit */} + + + {settings?.registrationOpen && ( +
+ {t("auth.noAccount")}{" "} + +
+ )} +
+
+
);