= ({ delay = 0 }) => {
return (
+ {/* Icono central fijo */}
- {iconClasses.map((iconClass, i) => (
-
-
-
- ))}
+ >
+ {iconClasses.map((iconClass, i) => {
+ const angle = (i * 45) * (Math.PI / 180); // Convertir a radianes
+ const radius = 130;
+ const x = Math.cos(angle) * radius;
+ const y = Math.sin(angle) * radius;
+
+ return (
+
+
+
+ );
+ })}
+
);
};
diff --git a/src/app/landing/globals.css b/src/app/landing/globals.css
index 4ed1e28..52cbd2b 100644
--- a/src/app/landing/globals.css
+++ b/src/app/landing/globals.css
@@ -28,7 +28,7 @@
header div:first-child {
font-size: 1.5rem;
- color: #5b2edd;
+ color: #003d79;
}
.nav-links {
@@ -84,7 +84,7 @@
/* Botón principal */
div > button {
margin-top: 1rem;
- background-color: #5b2edd;
+ background-color: #003d79;
color: white;
padding: 0.7rem 2rem;
border: none;
diff --git a/src/app/landing/landing_body.tsx b/src/app/landing/landing_body.tsx
index d7664aa..3f3ea96 100644
--- a/src/app/landing/landing_body.tsx
+++ b/src/app/landing/landing_body.tsx
@@ -14,14 +14,17 @@ export default function LandingBody() {
>
- Explore markets ready for trading
+ Servicios de soporte técnico PCPUMA
- Explore 300+ trading instruments across 10+ asset classes with Alchemy
- Markets. Trade Forex, Stocks, Indices, and more!
+ Accede a PC PUMA Conecta para reportes especializados, módulos de soporte físico
+ en campus, servicio de correo institucional y herramientas de gestión académica.
+
-
Start Trading
+
window.open('https://www.acatlan.unam.mx/pcpuma/', '_blank')}>
+ Conoce PCPUMA
+
diff --git a/src/app/landing/new_header.tsx b/src/app/landing/new_header.tsx
index cb8e887..e25a155 100644
--- a/src/app/landing/new_header.tsx
+++ b/src/app/landing/new_header.tsx
@@ -3,16 +3,50 @@
import { motion } from "framer-motion";
import Image from "next/image";
import Link from "next/link";
+import { useState, useEffect } from "react";
interface HeaderProps {
- onNavClick: (page: string) => void;
+ onNavClick: (page: any) => void;
}
export default function Header({ onNavClick }: HeaderProps) {
+ const [hasToken, setHasToken] = useState(false);
+
+ useEffect(() => {
+ // Función para verificar token
+ const checkToken = () => {
+ const token = localStorage.getItem('token');
+ setHasToken(!!token);
+ };
+
+ // Verificar token al montar
+ checkToken();
+
+ // Escuchar cambios en localStorage
+ const handleStorageChange = (e: StorageEvent) => {
+ if (e.key === 'token') {
+ checkToken();
+ }
+ };
+
+ // Escuchar evento personalizado para cambios de token
+ const handleTokenChange = () => {
+ checkToken();
+ };
+
+ window.addEventListener('storage', handleStorageChange);
+ window.addEventListener('tokenChanged', handleTokenChange);
+
+ return () => {
+ window.removeEventListener('storage', handleStorageChange);
+ window.removeEventListener('tokenChanged', handleTokenChange);
+ };
+ }, []);
+
return (
{[
- { label: "Landing", page: "landing" },
- { label: "Login", page: "login" },
- { label: "carga", page: "carga" },
- { label: "consulta", page: "consulta" },
- { label: "Público", page: "publico" },
+ { label: "Inicio", page: "landing" },
+ { label: "Login", page: "login", isLogin: true },
+ ...(hasToken ? [
+ { label: "Carga", page: "carga" },
+ { label: "Consulta", page: "consulta" },
+ ] : [])
].map((item) => (
onNavClick(item.page)}
+ className={item.isLogin ? "text-dorado fw-bold" : ""}
+ style={item.isLogin ? { color: '#fbbf24', fontWeight: 'bold' } : {}}
>
{item.label}
diff --git a/src/app/page.tsx b/src/app/page.tsx
new file mode 100644
index 0000000..1095263
--- /dev/null
+++ b/src/app/page.tsx
@@ -0,0 +1,93 @@
+"use client";
+
+import "./landing/globals.css";
+import "bootstrap-icons/font/bootstrap-icons.css";
+import IconCircle from "./landing/IconCircle";
+import { motion } from "framer-motion";
+import Image from "next/image";
+import Link from "next/link";
+
+
+import Header from "./landing/new_header"; // ajusta la ruta si estás en otra carpeta
+import Footer from "@/components/layout/footer";
+import LandingBody from "./landing/landing_body";
+import { useState } from "react";
+import Page from "./(auth)/page";
+import Dashboard from "./carga/page";
+import Consulta from "./visualizacion/page";
+
+
+type PageKey = "landing" | "login" | "carga" | "consulta" | "publico";
+
+
+const Home = () => {
+
+
+ const [page, setPage] = useState("landing");
+
+
+
+
+ return (
+
+
+ {[150, 300, 450, 600, 900].map((size, i) => (
+
+ ))}
+
+
+ {/* ⬇️ Tu contenido principal */}
+
+
+ {/* */}
+ {/* renderiza el body según el estado `page` */}
+ {page === "landing" && }
+ {page === "login" && }
+ {page === "carga" && }
+
+ {page === "consulta" && }
+
+
+
+ {/*
+
+
+
+
+
+ */}
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default Home;
\ No newline at end of file
diff --git a/src/components/password.tsx b/src/components/password.tsx
index d643c0d..2c58547 100644
--- a/src/components/password.tsx
+++ b/src/components/password.tsx
@@ -48,12 +48,18 @@ export default function PasswordInput(props: PasswordInputProps) {
{label}
)}
-