diff --git a/src/App.tsx b/src/App.tsx index 9a8022a..955a8fa 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -5,6 +5,8 @@ import 'react-toastify/dist/ReactToastify.css'; import LandingPage from "./components/landing"; import ConfigurationPage from "./components/configuration"; import DocumentationPage from "./components/documentation"; +import LoginPage from "./components/login"; +import PasswordResetPage from "./components/password-reset"; const App: React.FC = () => { return ( @@ -12,6 +14,8 @@ const App: React.FC = () => {
} /> + } /> + } /> } /> } /> diff --git a/src/components/login/index.tsx b/src/components/login/index.tsx new file mode 100644 index 0000000..abd7417 --- /dev/null +++ b/src/components/login/index.tsx @@ -0,0 +1,167 @@ +import React, { useState } from "react"; +import { Link } from "react-router-dom"; +import { LogIn, UserPlus, Eye, EyeOff } from "lucide-react"; + +const LoginPage: React.FC = () => { + const [isLogin, setIsLogin] = useState(true); + const [firstName, setFirstName] = useState(""); + const [email, setEmail] = useState(""); + const [password, setPassword] = useState(""); + const [confirmPassword, setConfirmPassword] = useState(""); + const [showPassword, setShowPassword] = useState(false); + const [showConfirmPassword, setShowConfirmPassword] = useState(false); + const passwordsMatch = isLogin || !confirmPassword || password === confirmPassword; + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + if (isLogin) { + console.log("Login attempt:", { email, password }); + } else { + if (password !== confirmPassword) { + return; + } + + console.log("Register attempt:", { firstName, email, password, confirmPassword }); + } + }; + + const togglePanel = () => { + setIsLogin(!isLogin); + setFirstName(""); + setEmail(""); + setPassword(""); + setConfirmPassword(""); + setShowPassword(false); + setShowConfirmPassword(false); + }; + + return ( +
+
+
+
+ {isLogin ? : } +
+

+ {isLogin ? "Acessar Prisma" : "Criar sua conta"} +

+
+ +
+
+ {!isLogin && ( +
+ + setFirstName(e.target.value)} + /> +
+ )} + +
+ + setEmail(e.target.value)} + /> +
+ +
+
+ + {isLogin && ( + + Esqueceu a senha? + + )} +
+
+ setPassword(e.target.value)} + /> + +
+
+ + {!isLogin && ( +
+ +
+ setConfirmPassword(e.target.value)} + /> + +
+ {!passwordsMatch && ( +

+ As senhas não coincidem. +

+ )} +
+ )} +
+ +
+

+ {isLogin ? "Não tem uma conta?" : "Já possui uma conta?"}{' '} + +

+
+
+
+
+ ); +}; + +export default LoginPage; \ No newline at end of file diff --git a/src/components/password-reset/index.tsx b/src/components/password-reset/index.tsx new file mode 100644 index 0000000..2725ce4 --- /dev/null +++ b/src/components/password-reset/index.tsx @@ -0,0 +1,90 @@ +import React, { useState } from "react"; +import { ArrowLeft, Mail, CheckCircle } from "lucide-react"; +import { Link } from "react-router-dom"; + +const PasswordResetPage: React.FC = () => { + const [email, setEmail] = useState(""); + const [isSubmitted, setIsSubmitted] = useState(false); + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + // logica de envio de email de recuperacao + console.log("Reset password attempt:", { email }); + setIsSubmitted(true); + }; + + return ( +
+
+ + + Voltar para login + + +
+
+ +
+

+ Recuperar Senha +

+

+ {isSubmitted + ? "Verifique seu email" + : "Digite seu email para receber um link de recuperação"} +

+
+ + {!isSubmitted ? ( +
+
+ + setEmail(e.target.value)} + /> +
+ + +
+ ) : ( +
+
+ +

+ Enviamos um link de recuperação para {email} +

+

+ Verifique sua caixa de entrada e clique no link para redefinir sua senha. +

+
+ + +
+ )} +
+
+ ); +}; + +export default PasswordResetPage;