- {editor && (
+ {editor && (
@@ -21,7 +23,10 @@ export default function EditorTest() {
+
)}
);
}
+
+
diff --git a/frontend/src/domains/TextEditor/Editor_biblioteca.css b/frontend/src/frontend_domains/TextEditor/Editor_biblioteca.css
similarity index 100%
rename from frontend/src/domains/TextEditor/Editor_biblioteca.css
rename to frontend/src/frontend_domains/TextEditor/Editor_biblioteca.css
diff --git a/frontend/src/frontend_domains/Usuarios/Login.page.tsx b/frontend/src/frontend_domains/Usuarios/Login.page.tsx
new file mode 100644
index 0000000..d861183
--- /dev/null
+++ b/frontend/src/frontend_domains/Usuarios/Login.page.tsx
@@ -0,0 +1,66 @@
+import { useState } from 'react';
+import { TextInput, PasswordInput, Button, Paper, Title, Container, Group, Alert } from '@mantine/core';
+import UserIcon from '../../assets/icons/outlined/user.svg?react';
+import LockIcon from '../../assets/icons/outlined/lock.svg?react';
+
+export function LoginPage() {
+ const [email, setEmail] = useState('');
+ const [password, setPassword] = useState('');
+ const [error, setError] = useState('');
+ const [loading, setLoading] = useState(false);
+
+ const handleSubmit = async (e: React.FormEvent) => {
+ e.preventDefault();
+ setLoading(true);
+ setError('');
+ // AquΓ deberΓas llamar a tu endpoint de login (ajusta la URL y payload)
+ try {
+ const res = await fetch('/api/v1/usuarios/login', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({ email, password })
+ });
+ if (!res.ok) throw new Error('Credenciales incorrectas');
+ // AquΓ puedes guardar el usuario/token en el estado global o localStorage
+ window.location.href = '/';
+ } catch (err: any) {
+ setError(err.message);
+ } finally {
+ setLoading(false);
+ }
+ };
+
+ return (
+