transactions-mfe 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +84 -0
- package/dist/index.cjs +1165 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.js +1155 -0
- package/dist/index.js.map +1 -0
- package/dist/styles.css +2 -0
- package/dist/types/app/components/EmbeddedShell.d.ts +3 -0
- package/dist/types/app/components/Sidebar.d.ts +1 -0
- package/dist/types/app/edit/[id]/page.d.ts +1 -0
- package/dist/types/app/layout.d.ts +6 -0
- package/dist/types/app/new/page.d.ts +1 -0
- package/dist/types/app/page.d.ts +1 -0
- package/dist/types/lib/index.d.ts +28 -0
- package/package.json +68 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../app/page.tsx","../app/new/page.tsx","../app/edit/%5Bid%5D/page.tsx","../app/components/Sidebar.tsx","../app/components/EmbeddedShell.tsx"],"names":["jsx","jsxs","useState","useCallback","useEffect","Link","useRouter","COINS","useParams","usePathname"],"mappings":"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","file":"index.cjs","sourcesContent":["\"use client\";\n\n/**\n * Página principal del MFE — Lista de Transacciones\n *\n * Funcionalidades:\n * - Listar todas las transacciones (GET /api/transactions)\n * - Eliminar transacción (DELETE /api/transactions/:id)\n * - Filtrar por moneda y usuario\n * - Link a crear nueva transacción\n * - Link a editar transacción\n *\n * Llama a la API del host: process.env.NEXT_PUBLIC_API_URL/api/transactions\n * En desarrollo: http://localhost:3000/api/transactions\n */\n\nimport { useEffect, useState, useCallback } from \"react\";\nimport Link from \"next/link\";\n\n// ── Tipos ───────────────────────────────────────────────────────────\ntype Transaction = {\n _id: string;\n user: string;\n coin: string;\n amount: number;\n createdAt: string;\n};\n\n// ── Colores por moneda (badge) ──────────────────────────────────────\nconst COIN_STYLES: Record<string, { bg: string; color: string; border: string }> = {\n btc: { bg: \"rgba(217,119,6,0.10)\", color: \"#b45309\", border: \"rgba(217,119,6,0.20)\" },\n bitcoin: { bg: \"rgba(217,119,6,0.10)\", color: \"#b45309\", border: \"rgba(217,119,6,0.20)\" },\n eth: { bg: \"rgba(79,70,229,0.10)\", color: \"#4338ca\", border: \"rgba(79,70,229,0.20)\" },\n ethereum: { bg: \"rgba(79,70,229,0.10)\", color: \"#4338ca\", border: \"rgba(79,70,229,0.20)\" },\n sol: { bg: \"rgba(124,58,237,0.10)\", color: \"#6d28d9\", border: \"rgba(124,58,237,0.20)\" },\n solana: { bg: \"rgba(124,58,237,0.10)\", color: \"#6d28d9\", border: \"rgba(124,58,237,0.20)\" },\n usdt: { bg: \"rgba(5,150,105,0.10)\", color: \"#047857\", border: \"rgba(5,150,105,0.20)\" },\n usdc: { bg: \"rgba(2,132,199,0.10)\", color: \"#0369a1\", border: \"rgba(2,132,199,0.20)\" },\n bnb: { bg: \"rgba(202,138,4,0.10)\", color: \"#a16207\", border: \"rgba(202,138,4,0.20)\" },\n xrp: { bg: \"rgba(37,99,235,0.10)\", color: \"#1d4ed8\", border: \"rgba(37,99,235,0.20)\" },\n doge: { bg: \"rgba(234,88,12,0.10)\", color: \"#c2410c\", border: \"rgba(234,88,12,0.20)\" },\n};\nconst DEFAULT_COIN = { bg: \"rgba(145,158,171,0.12)\", color: \"#637381\", border: \"rgba(145,158,171,0.24)\" };\n\nconst CoinBadge = ({ coin }: { coin: string }) => {\n const s = COIN_STYLES[coin.toLowerCase()] ?? DEFAULT_COIN;\n return (\n <span\n className=\"inline-flex items-center text-[11px] font-bold px-2.5 py-0.5 rounded-full\"\n style={{ backgroundColor: s.bg, color: s.color, border: `1px solid ${s.border}`, letterSpacing: \"0.05em\" }}\n >\n {coin.toUpperCase()}\n </span>\n );\n};\n\n// ── Avatar ──────────────────────────────────────────────────────────\nconst GRADIENTS = [\n \"linear-gradient(135deg,#6366f1,#4f46e5)\", \"linear-gradient(135deg,#a78bfa,#7c3aed)\",\n \"linear-gradient(135deg,#38bdf8,#0284c7)\", \"linear-gradient(135deg,#34d399,#059669)\",\n \"linear-gradient(135deg,#fb7185,#e11d48)\", \"linear-gradient(135deg,#fbbf24,#d97706)\",\n];\nconst Avatar = ({ name }: { name: string }) => {\n const ch = name?.charAt(0)?.toUpperCase() ?? \"?\";\n const g = GRADIENTS[(ch.charCodeAt(0) - 65) % GRADIENTS.length];\n return (\n <div className=\"w-8 h-8 rounded-full flex items-center justify-center text-white text-xs font-bold shrink-0\"\n style={{ background: g, boxShadow: \"0 3px 6px rgba(0,0,0,0.12)\" }}>\n {ch}\n </div>\n );\n};\n\n// ── Skeleton ────────────────────────────────────────────────────────\nconst Skeleton = () => (\n <div className=\"animate-pulse\">\n {[1,2,3,4,5,6].map(i => (\n <div key={i} className=\"flex items-center gap-4 px-6 py-4\"\n style={{ borderBottom: \"1px solid rgba(145,158,171,0.12)\" }}>\n <div className=\"w-8 h-8 rounded-full bg-gray-200 shrink-0\" />\n <div className=\"flex-1 h-4 bg-gray-200 rounded w-28\" />\n <div className=\"h-5 bg-gray-100 rounded-full w-14\" />\n <div className=\"h-4 bg-gray-100 rounded w-20 ml-auto\" />\n <div className=\"h-4 bg-gray-100 rounded w-24\" />\n <div className=\"flex gap-2\">\n <div className=\"w-7 h-7 bg-gray-100 rounded-lg\" />\n <div className=\"w-7 h-7 bg-gray-100 rounded-lg\" />\n </div>\n </div>\n ))}\n </div>\n);\n\n// ── Página principal ────────────────────────────────────────────────\nexport default function TransactionsPage() {\n const [transactions, setTransactions] = useState<Transaction[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [deletingId, setDeletingId] = useState<string | null>(null);\n const [filterCoin, setFilterCoin] = useState(\"\");\n const [filterUser, setFilterUser] = useState(\"\");\n\n const API = process.env.NEXT_PUBLIC_API_URL ?? \"http://localhost:3000\";\n\n // ── Cargar transacciones ──────────────────────────────────────────\n const load = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const res = await fetch(`${API}/api/transactions`);\n if (!res.ok) throw new Error(`Error ${res.status}`);\n const data = await res.json();\n setTransactions(data);\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Error desconocido\");\n } finally {\n setLoading(false);\n }\n }, [API]);\n\n useEffect(() => { load(); }, [load]);\n\n // ── Eliminar ──────────────────────────────────────────────────────\n const handleDelete = async (id: string) => {\n if (!confirm(\"¿Eliminar esta transacción? Esta acción no se puede deshacer.\")) return;\n setDeletingId(id);\n try {\n const res = await fetch(`${API}/api/transactions/${id}`, { method: \"DELETE\" });\n if (!res.ok) throw new Error(\"No se pudo eliminar\");\n setTransactions(prev => prev.filter(t => t._id !== id));\n } catch (e) {\n alert(e instanceof Error ? e.message : \"Error al eliminar\");\n } finally {\n setDeletingId(null);\n }\n };\n\n // ── Filtrado ──────────────────────────────────────────────────────\n const filtered = transactions.filter(t => {\n const matchCoin = !filterCoin || t.coin.toLowerCase().includes(filterCoin.toLowerCase());\n const matchUser = !filterUser || t.user.toLowerCase().includes(filterUser.toLowerCase());\n return matchCoin && matchUser;\n });\n\n // Monedas únicas para el selector\n const coins = [...new Set(transactions.map(t => t.coin))].sort();\n\n const formatDate = (iso: string) =>\n new Date(iso).toLocaleDateString(\"es-MX\", { day: \"numeric\", month: \"short\", year: \"numeric\" });\n const formatTime = (iso: string) =>\n new Date(iso).toLocaleTimeString(\"es-MX\", { hour: \"2-digit\", minute: \"2-digit\" });\n\n return (\n <div className=\"p-6 space-y-5\">\n\n {/* ── Barra de acciones ────────────────────────────────── */}\n <div className=\"flex flex-wrap items-center gap-3\">\n\n {/* Filtro por moneda */}\n <select\n value={filterCoin}\n onChange={e => setFilterCoin(e.target.value)}\n className=\"text-sm px-3 py-2 rounded-lg transition-all outline-none\"\n style={{\n border: \"1px solid var(--border)\",\n backgroundColor: \"white\",\n color: \"var(--text-primary)\",\n minWidth: 140,\n }}\n >\n <option value=\"\">Todas las monedas</option>\n {coins.map(c => (\n <option key={c} value={c}>{c.toUpperCase()}</option>\n ))}\n </select>\n\n {/* Filtro por usuario */}\n <input\n type=\"text\"\n value={filterUser}\n onChange={e => setFilterUser(e.target.value)}\n placeholder=\"Buscar usuario...\"\n className=\"text-sm px-3 py-2 rounded-lg transition-all outline-none\"\n style={{\n border: \"1px solid var(--border)\",\n backgroundColor: \"white\",\n color: \"var(--text-primary)\",\n minWidth: 180,\n }}\n />\n\n {/* Contador */}\n {!loading && (\n <span className=\"text-xs ml-1\" style={{ color: \"var(--text-disabled)\" }}>\n {filtered.length} de {transactions.length} transacciones\n </span>\n )}\n\n {/* Spacer */}\n <div className=\"flex-1\" />\n\n {/* Refresh */}\n <button\n onClick={load}\n disabled={loading}\n className=\"w-9 h-9 rounded-lg flex items-center justify-center transition-all duration-150\"\n style={{ backgroundColor: \"white\", border: \"1px solid var(--border)\", color: \"var(--text-secondary)\" }}\n title=\"Refrescar\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\"\n className={loading ? \"animate-spin\" : \"\"}>\n <polyline points=\"23 4 23 10 17 10\" />\n <polyline points=\"1 20 1 14 7 14\" />\n <path d=\"M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n\n {/* Botón nueva transacción */}\n <Link\n href=\"/new\"\n className=\"inline-flex items-center gap-2 px-4 py-2.5 rounded-lg text-sm font-bold text-white transition-all duration-200\"\n style={{\n background: \"linear-gradient(135deg, #6366f1 0%, #4f46e5 100%)\",\n boxShadow: \"0 8px 16px 0 rgba(79,70,229,0.28)\",\n letterSpacing: \"0.03em\",\n }}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\">\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" /><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n Nueva Transacción\n </Link>\n </div>\n\n {/* ── Card contenedora ─────────────────────────────────── */}\n <div className=\"bg-white rounded-xl overflow-hidden\" style={{ boxShadow: \"var(--shadow-card)\" }}>\n\n {/* Header de la card */}\n <div className=\"px-6 py-4 flex items-center justify-between\"\n style={{ borderBottom: \"1px solid rgba(145,158,171,0.16)\" }}>\n <div>\n <h2 className=\"text-base font-bold\" style={{ color: \"var(--text-primary)\" }}>\n Historial de Transacciones\n </h2>\n <p className=\"text-xs mt-0.5\" style={{ color: \"var(--text-secondary)\" }}>\n CRUD completo · Llamando a {API}/api/transactions\n </p>\n </div>\n {/* Indicador de estado de la API */}\n {!loading && !error && (\n <div className=\"flex items-center gap-1.5 text-xs font-semibold px-2.5 py-1 rounded-full\"\n style={{ backgroundColor: \"rgba(34,197,94,0.10)\", color: \"#16a34a\", border: \"1px solid rgba(34,197,94,0.24)\" }}>\n <span className=\"w-1.5 h-1.5 rounded-full bg-green-500 animate-pulse\" />\n API conectada\n </div>\n )}\n </div>\n\n {/* ── Loading ──────────────────────────────────────────── */}\n {loading && <Skeleton />}\n\n {/* ── Error ────────────────────────────────────────────── */}\n {!loading && error && (\n <div className=\"px-6 py-12 text-center\">\n <div className=\"w-14 h-14 rounded-full mx-auto mb-3 flex items-center justify-center\"\n style={{ backgroundColor: \"rgba(239,68,68,0.08)\" }}>\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#dc2626\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n </div>\n <p className=\"font-semibold mb-1\" style={{ color: \"#dc2626\" }}>{error}</p>\n <p className=\"text-xs mb-4\" style={{ color: \"var(--text-secondary)\" }}>\n Verifica que el servidor principal esté corriendo en {API}\n </p>\n <button onClick={load}\n className=\"px-4 py-2 rounded-lg text-sm font-semibold text-white\"\n style={{ background: \"var(--primary)\" }}>\n Reintentar\n </button>\n </div>\n )}\n\n {/* ── Sin resultados ────────────────────────────────────── */}\n {!loading && !error && filtered.length === 0 && (\n <div className=\"px-6 py-14 text-center\">\n <div className=\"w-14 h-14 rounded-full mx-auto mb-3 flex items-center justify-center\"\n style={{ backgroundColor: \"rgba(145,158,171,0.08)\" }}>\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--text-disabled)\" strokeWidth=\"1.5\">\n <path d=\"M12 2v20M17 5H9.5a3.5 3.5 0 1 0 0 7h5a3.5 3.5 0 1 1 0 7H6\" />\n </svg>\n </div>\n <p className=\"font-semibold\" style={{ color: \"var(--text-primary)\" }}>\n {transactions.length === 0 ? \"Sin transacciones\" : \"Sin resultados para los filtros aplicados\"}\n </p>\n {transactions.length === 0 && (\n <Link href=\"/new\"\n className=\"inline-block mt-4 px-4 py-2 rounded-lg text-sm font-semibold text-white\"\n style={{ background: \"var(--primary)\" }}>\n Crear primera transacción\n </Link>\n )}\n </div>\n )}\n\n {/* ── Tabla ─────────────────────────────────────────────── */}\n {!loading && !error && filtered.length > 0 && (\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm min-w-[700px]\">\n <thead>\n <tr style={{ backgroundColor: \"#F4F6F8\", borderBottom: \"1px solid rgba(145,158,171,0.24)\" }}>\n {[\"Usuario\", \"Moneda\", \"Monto\", \"Fecha\", \"Acciones\"].map((h, i) => (\n <th key={h}\n className=\"px-6 py-3 text-xs font-semibold uppercase tracking-[0.08em]\"\n style={{\n color: \"var(--text-secondary)\",\n textAlign: i >= 2 ? (i === 4 ? \"center\" : \"right\") : \"left\"\n }}>\n {h}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {filtered.map((tx, idx) => {\n const isLast = idx === filtered.length - 1;\n return (\n <tr key={tx._id}\n className=\"transition-colors\"\n style={{ borderBottom: isLast ? \"none\" : \"1px solid rgba(145,158,171,0.10)\" }}\n onMouseEnter={e => (e.currentTarget as HTMLElement).style.backgroundColor = \"rgba(145,158,171,0.04)\"}\n onMouseLeave={e => (e.currentTarget as HTMLElement).style.backgroundColor = \"transparent\"}\n >\n {/* Usuario */}\n <td className=\"px-6 py-3.5\">\n <div className=\"flex items-center gap-2.5\">\n <Avatar name={tx.user} />\n <span className=\"font-medium truncate max-w-[140px]\"\n style={{ color: \"var(--text-primary)\" }}>\n {tx.user}\n </span>\n </div>\n </td>\n\n {/* Moneda */}\n <td className=\"px-6 py-3.5\">\n <CoinBadge coin={tx.coin} />\n </td>\n\n {/* Monto */}\n <td className=\"px-6 py-3.5 text-right\">\n <span className=\"font-semibold font-mono text-sm\"\n style={{ color: \"var(--text-primary)\" }}>\n {typeof tx.amount === \"number\"\n ? tx.amount.toLocaleString(\"en-US\", { maximumFractionDigits: 6 })\n : tx.amount}\n </span>\n </td>\n\n {/* Fecha */}\n <td className=\"px-6 py-3.5 text-right\">\n <p className=\"text-xs font-medium\" style={{ color: \"var(--text-primary)\" }}>\n {formatDate(tx.createdAt)}\n </p>\n <p className=\"text-[10px] mt-0.5\" style={{ color: \"var(--text-disabled)\" }}>\n {formatTime(tx.createdAt)}\n </p>\n </td>\n\n {/* Acciones */}\n <td className=\"px-6 py-3.5\">\n <div className=\"flex items-center justify-center gap-1.5\">\n {/* Editar */}\n <Link\n href={`/edit/${tx._id}`}\n className=\"w-8 h-8 rounded-lg flex items-center justify-center transition-all duration-150\"\n style={{ color: \"var(--text-secondary)\", border: \"1px solid var(--border)\" }}\n onMouseEnter={e => {\n const el = e.currentTarget as HTMLElement;\n el.style.backgroundColor = \"rgba(79,70,229,0.08)\";\n el.style.borderColor = \"rgba(79,70,229,0.30)\";\n el.style.color = \"var(--primary)\";\n }}\n onMouseLeave={e => {\n const el = e.currentTarget as HTMLElement;\n el.style.backgroundColor = \"transparent\";\n el.style.borderColor = \"var(--border)\";\n el.style.color = \"var(--text-secondary)\";\n }}\n title=\"Editar\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\" />\n <path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\" />\n </svg>\n </Link>\n\n {/* Eliminar */}\n <button\n onClick={() => handleDelete(tx._id)}\n disabled={deletingId === tx._id}\n className=\"w-8 h-8 rounded-lg flex items-center justify-center transition-all duration-150\"\n style={{ color: \"var(--text-secondary)\", border: \"1px solid var(--border)\" }}\n onMouseEnter={e => {\n const el = e.currentTarget as HTMLElement;\n el.style.backgroundColor = \"rgba(239,68,68,0.08)\";\n el.style.borderColor = \"rgba(239,68,68,0.30)\";\n el.style.color = \"#dc2626\";\n }}\n onMouseLeave={e => {\n const el = e.currentTarget as HTMLElement;\n el.style.backgroundColor = \"transparent\";\n el.style.borderColor = \"var(--border)\";\n el.style.color = \"var(--text-secondary)\";\n }}\n title=\"Eliminar\"\n >\n {deletingId === tx._id ? (\n <span className=\"w-3 h-3 border-2 border-gray-300 border-t-red-500 rounded-full animate-spin\" />\n ) : (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"3 6 5 6 21 6\" />\n <path d=\"M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6\" />\n <path d=\"M10 11v6M14 11v6\" />\n <path d=\"M9 6V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2\" />\n </svg>\n )}\n </button>\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n\n {/* Footer de tabla */}\n <div className=\"px-6 py-3 flex items-center justify-between\"\n style={{ borderTop: \"1px solid rgba(145,158,171,0.16)\", backgroundColor: \"#FAFAFA\" }}>\n <p className=\"text-xs\" style={{ color: \"var(--text-disabled)\" }}>\n {filtered.length} {filtered.length === 1 ? \"transacción\" : \"transacciones\"}\n {filterCoin || filterUser ? ` (filtradas de ${transactions.length})` : \" en total\"}\n </p>\n <div className=\"flex items-center gap-1.5\">\n <div className=\"w-1.5 h-1.5 rounded-full bg-green-500 animate-pulse\" />\n <span className=\"text-xs font-medium\" style={{ color: \"var(--text-secondary)\" }}>\n {API}\n </span>\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n","\"use client\";\n\n/**\n * Página: Nueva Transacción — /dashboard/transactions/new\n *\n * Formulario para crear una transacción llamando a:\n * POST {NEXT_PUBLIC_API_URL}/api/transactions\n *\n * Body: { user, coin, amount }\n */\n\nimport { useState, FormEvent } from \"react\";\nimport { useRouter } from \"next/navigation\";\nimport Link from \"next/link\";\n\nconst COINS = [\n { value: \"BTC\", label: \"Bitcoin (BTC)\" },\n { value: \"ETH\", label: \"Ethereum (ETH)\" },\n { value: \"SOL\", label: \"Solana (SOL)\" },\n { value: \"BNB\", label: \"BNB Chain (BNB)\"},\n { value: \"XRP\", label: \"XRP\" },\n { value: \"USDT\", label: \"Tether (USDT)\" },\n { value: \"USDC\", label: \"USD Coin (USDC)\"},\n { value: \"DOGE\", label: \"Dogecoin (DOGE)\"},\n { value: \"ADA\", label: \"Cardano (ADA)\" },\n { value: \"MATIC\",label: \"Polygon (MATIC)\"},\n];\n\n// ── Campo de formulario ─────────────────────────────────────────────\nconst Field = ({\n id, label, children, hint,\n}: {\n id: string; label: string; hint?: string; children: React.ReactNode;\n}) => (\n <div>\n <div className=\"flex items-center justify-between mb-1.5\">\n <label htmlFor={id} className=\"text-xs font-semibold\"\n style={{ color: \"var(--text-secondary)\" }}>\n {label}\n </label>\n {hint && <span className=\"text-[10px]\" style={{ color: \"var(--text-disabled)\" }}>{hint}</span>}\n </div>\n {children}\n </div>\n);\n\n// ── Página ──────────────────────────────────────────────────────────\nexport default function NewTransactionPage() {\n const router = useRouter();\n const API = process.env.NEXT_PUBLIC_API_URL ?? \"http://localhost:3000\";\n\n const [user, setUser] = useState(\"\");\n const [coin, setCoin] = useState(\"BTC\");\n const [amount, setAmount] = useState(\"\");\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [success, setSuccess] = useState(false);\n\n const inputStyle = (focused: boolean) => ({\n width: \"100%\",\n padding: focused ? \"11px 13px\" : \"12px 14px\",\n border: `${focused ? 2 : 1}px solid ${focused ? \"var(--primary)\" : \"var(--border)\"}`,\n borderRadius: 8,\n fontSize: \"0.875rem\",\n color: \"var(--text-primary)\",\n backgroundColor: \"white\",\n boxShadow: focused ? \"0 0 0 3px rgba(79,70,229,0.08)\" : \"none\",\n outline: \"none\",\n transition: \"all 0.2s\",\n });\n\n const [focusedField, setFocusedField] = useState<string | null>(null);\n\n const handleSubmit = async (e: FormEvent) => {\n e.preventDefault();\n\n if (!user.trim()) { setError(\"El nombre de usuario es requerido\"); return; }\n if (!coin) { setError(\"Selecciona una moneda\"); return; }\n if (!amount || isNaN(Number(amount)) || Number(amount) <= 0) {\n setError(\"Ingresa un monto válido mayor a 0\");\n return;\n }\n\n setLoading(true);\n setError(null);\n\n try {\n const res = await fetch(`${API}/api/transactions`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ user: user.trim(), coin, amount: Number(amount) }),\n });\n\n if (!res.ok) {\n const data = await res.json().catch(() => ({}));\n throw new Error(data.message ?? `Error ${res.status}`);\n }\n\n setSuccess(true);\n // Redirigir a lista después de 1.2s\n setTimeout(() => router.push(\"/\"), 1200);\n\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Error al crear la transacción\");\n } finally {\n setLoading(false);\n }\n };\n\n // ── Pantalla de éxito ─────────────────────────────────────────────\n if (success) {\n return (\n <div className=\"p-6 flex items-center justify-center min-h-[60vh]\">\n <div className=\"text-center\">\n <div className=\"w-16 h-16 rounded-full mx-auto mb-4 flex items-center justify-center\"\n style={{ background: \"linear-gradient(135deg, #34d399, #059669)\" }}>\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"white\" strokeWidth=\"2.5\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n </div>\n <h2 className=\"text-xl font-bold mb-1\" style={{ color: \"var(--text-primary)\" }}>\n ¡Transacción creada!\n </h2>\n <p className=\"text-sm\" style={{ color: \"var(--text-secondary)\" }}>\n Redirigiendo a la lista...\n </p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"p-6\">\n <div className=\"max-w-lg mx-auto\">\n\n {/* Volver */}\n <Link href=\"/\"\n className=\"inline-flex items-center gap-2 text-sm mb-6 transition-colors\"\n style={{ color: \"var(--text-secondary)\" }}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <line x1=\"19\" y1=\"12\" x2=\"5\" y2=\"12\" />\n <polyline points=\"12 19 5 12 12 5\" />\n </svg>\n Volver a la lista\n </Link>\n\n {/* Card del formulario */}\n <div className=\"bg-white rounded-xl overflow-hidden\" style={{ boxShadow: \"var(--shadow-card)\" }}>\n\n {/* Header */}\n <div className=\"px-6 py-5\" style={{ borderBottom: \"1px solid rgba(145,158,171,0.16)\" }}>\n <div className=\"flex items-center gap-3\">\n <div className=\"w-10 h-10 rounded-xl flex items-center justify-center text-white\"\n style={{ background: \"linear-gradient(135deg, #6366f1, #4f46e5)\", boxShadow: \"0 8px 16px rgba(79,70,229,0.28)\" }}>\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"white\" strokeWidth=\"2.5\">\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n </div>\n <div>\n <h2 className=\"text-base font-bold\" style={{ color: \"var(--text-primary)\" }}>\n Nueva Transacción\n </h2>\n <p className=\"text-xs mt-0.5\" style={{ color: \"var(--text-secondary)\" }}>\n POST {API}/api/transactions\n </p>\n </div>\n </div>\n </div>\n\n {/* Formulario */}\n <form onSubmit={handleSubmit} className=\"px-6 py-6 space-y-5\">\n\n {/* Error global */}\n {error && (\n <div className=\"rounded-xl px-4 py-3 text-sm flex items-center gap-2.5\"\n style={{ backgroundColor: \"rgba(239,68,68,0.08)\", border: \"1px solid rgba(239,68,68,0.24)\", color: \"#dc2626\" }}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n {error}\n </div>\n )}\n\n {/* Usuario */}\n <Field id=\"user\" label=\"Nombre de usuario\" hint=\"Quien realiza la transacción\">\n <input\n id=\"user\" type=\"text\" required\n value={user}\n onChange={e => setUser(e.target.value)}\n onFocus={() => setFocusedField(\"user\")}\n onBlur={() => setFocusedField(null)}\n placeholder=\"ej. Juan Pérez\"\n style={inputStyle(focusedField === \"user\")}\n />\n </Field>\n\n {/* Moneda */}\n <Field id=\"coin\" label=\"Criptomoneda\">\n <select\n id=\"coin\" required\n value={coin}\n onChange={e => setCoin(e.target.value)}\n onFocus={() => setFocusedField(\"coin\")}\n onBlur={() => setFocusedField(null)}\n style={inputStyle(focusedField === \"coin\")}\n >\n {COINS.map(c => (\n <option key={c.value} value={c.value}>{c.label}</option>\n ))}\n </select>\n </Field>\n\n {/* Monto */}\n <Field id=\"amount\" label=\"Monto\" hint=\"Número de unidades de la criptomoneda\">\n <input\n id=\"amount\" type=\"number\" required min=\"0.000001\" step=\"any\"\n value={amount}\n onChange={e => setAmount(e.target.value)}\n onFocus={() => setFocusedField(\"amount\")}\n onBlur={() => setFocusedField(null)}\n placeholder=\"ej. 0.5\"\n style={inputStyle(focusedField === \"amount\")}\n />\n </Field>\n\n {/* Preview del body que se enviará */}\n {(user || amount) && (\n <div className=\"rounded-xl p-4\" style={{ backgroundColor: \"#F4F6F8\" }}>\n <p className=\"text-[10px] font-semibold uppercase tracking-[0.08em] mb-2\"\n style={{ color: \"var(--text-disabled)\" }}>\n Request body (JSON)\n </p>\n <pre className=\"text-xs font-mono\" style={{ color: \"var(--text-primary)\" }}>\n{JSON.stringify({\n user: user || \"...\",\n coin: coin,\n amount: amount ? Number(amount) : \"...\",\n}, null, 2)}\n </pre>\n </div>\n )}\n\n {/* Botones */}\n <div className=\"flex gap-3 pt-1\">\n <Link href=\"/\"\n className=\"flex-1 py-3 rounded-lg text-sm font-bold text-center transition-all duration-150\"\n style={{ border: \"1px solid var(--border)\", color: \"var(--text-secondary)\", backgroundColor: \"white\" }}>\n Cancelar\n </Link>\n\n <button\n type=\"submit\"\n disabled={loading}\n className=\"flex-1 py-3 rounded-lg text-sm font-bold text-white transition-all duration-200\"\n style={{\n background: loading ? \"rgba(79,70,229,0.6)\" : \"linear-gradient(135deg, #6366f1, #4f46e5)\",\n boxShadow: loading ? \"none\" : \"0 8px 16px rgba(79,70,229,0.28)\",\n cursor: loading ? \"not-allowed\" : \"pointer\",\n letterSpacing: \"0.04em\",\n }}\n >\n {loading ? (\n <span className=\"flex items-center justify-center gap-2\">\n <span className=\"w-4 h-4 border-2 rounded-full animate-spin\"\n style={{ borderColor: \"rgba(255,255,255,0.3)\", borderTopColor: \"white\" }} />\n Creando...\n </span>\n ) : (\n \"CREAR TRANSACCIÓN\"\n )}\n </button>\n </div>\n </form>\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\n/**\n * Página: Editar Transacción — /dashboard/transactions/edit/:id\n *\n * Carga la transacción existente y envía un PUT al host:\n * PUT {NEXT_PUBLIC_API_URL}/api/transactions/:id\n */\n\nimport { useState, useEffect, FormEvent } from \"react\";\nimport { useRouter, useParams } from \"next/navigation\";\nimport Link from \"next/link\";\n\nconst COINS = [\n \"BTC\",\"ETH\",\"SOL\",\"BNB\",\"XRP\",\"USDT\",\"USDC\",\"DOGE\",\"ADA\",\"MATIC\",\n];\n\ntype Transaction = {\n _id: string;\n user: string;\n coin: string;\n amount: number;\n};\n\nexport default function EditTransactionPage() {\n const { id } = useParams<{ id: string }>();\n const router = useRouter();\n const API = process.env.NEXT_PUBLIC_API_URL ?? \"http://localhost:3000\";\n\n const [user, setUser] = useState(\"\");\n const [coin, setCoin] = useState(\"BTC\");\n const [amount, setAmount] = useState(\"\");\n const [loading, setLoading] = useState(false);\n const [fetching, setFetching] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [success, setSuccess] = useState(false);\n const [focusedField, setFocusedField] = useState<string | null>(null);\n\n // Cargar datos actuales\n useEffect(() => {\n const load = async () => {\n try {\n // La API del host devuelve todas las transacciones; buscamos la que coincide con id\n const res = await fetch(`${API}/api/transactions`);\n if (!res.ok) throw new Error(`Error ${res.status}`);\n const data: Transaction[] = await res.json();\n const tx = data.find(t => t._id === id);\n if (!tx) throw new Error(\"Transacción no encontrada\");\n setUser(tx.user);\n setCoin(tx.coin.toUpperCase());\n setAmount(String(tx.amount));\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Error cargando datos\");\n } finally {\n setFetching(false);\n }\n };\n load();\n }, [id, API]);\n\n const inputStyle = (focused: boolean) => ({\n width: \"100%\",\n padding: focused ? \"11px 13px\" : \"12px 14px\",\n border: `${focused ? 2 : 1}px solid ${focused ? \"var(--primary)\" : \"var(--border)\"}`,\n borderRadius: 8,\n fontSize: \"0.875rem\",\n color: \"var(--text-primary)\",\n backgroundColor: \"white\",\n boxShadow: focused ? \"0 0 0 3px rgba(79,70,229,0.08)\" : \"none\",\n outline: \"none\",\n transition: \"all 0.2s\",\n });\n\n const handleSubmit = async (e: FormEvent) => {\n e.preventDefault();\n if (!user.trim()) { setError(\"El nombre de usuario es requerido\"); return; }\n if (isNaN(Number(amount)) || Number(amount) <= 0) {\n setError(\"Ingresa un monto válido mayor a 0\");\n return;\n }\n setLoading(true);\n setError(null);\n\n try {\n const res = await fetch(`${API}/api/transactions/${id}`, {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ user: user.trim(), coin, amount: Number(amount) }),\n });\n if (!res.ok) {\n const data = await res.json().catch(() => ({}));\n throw new Error(data.message ?? `Error ${res.status}`);\n }\n setSuccess(true);\n setTimeout(() => router.push(\"/\"), 1200);\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Error al actualizar\");\n } finally {\n setLoading(false);\n }\n };\n\n if (success) {\n return (\n <div className=\"p-6 flex items-center justify-center min-h-[60vh]\">\n <div className=\"text-center\">\n <div className=\"w-16 h-16 rounded-full mx-auto mb-4 flex items-center justify-center\"\n style={{ background: \"linear-gradient(135deg, #34d399, #059669)\" }}>\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"white\" strokeWidth=\"2.5\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n </div>\n <h2 className=\"text-xl font-bold mb-1\" style={{ color: \"var(--text-primary)\" }}>\n ¡Transacción actualizada!\n </h2>\n <p className=\"text-sm\" style={{ color: \"var(--text-secondary)\" }}>Redirigiendo...</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"p-6\">\n <div className=\"max-w-lg mx-auto\">\n\n <Link href=\"/\" className=\"inline-flex items-center gap-2 text-sm mb-6 transition-colors\"\n style={{ color: \"var(--text-secondary)\" }}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <line x1=\"19\" y1=\"12\" x2=\"5\" y2=\"12\" /><polyline points=\"12 19 5 12 12 5\" />\n </svg>\n Volver a la lista\n </Link>\n\n <div className=\"bg-white rounded-xl overflow-hidden\" style={{ boxShadow: \"var(--shadow-card)\" }}>\n\n {/* Header */}\n <div className=\"px-6 py-5\" style={{ borderBottom: \"1px solid rgba(145,158,171,0.16)\" }}>\n <div className=\"flex items-center gap-3\">\n <div className=\"w-10 h-10 rounded-xl flex items-center justify-center text-white\"\n style={{ background: \"linear-gradient(135deg, #a78bfa, #7c3aed)\", boxShadow: \"0 8px 16px rgba(124,58,237,0.28)\" }}>\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"white\" strokeWidth=\"2.5\">\n <path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\" />\n <path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\" />\n </svg>\n </div>\n <div>\n <h2 className=\"text-base font-bold\" style={{ color: \"var(--text-primary)\" }}>\n Editar Transacción\n </h2>\n <p className=\"text-xs mt-0.5 font-mono\" style={{ color: \"var(--text-disabled)\" }}>\n ID: {id?.slice(-12)}\n </p>\n </div>\n </div>\n </div>\n\n {/* Cargando datos */}\n {fetching ? (\n <div className=\"px-6 py-12 animate-pulse space-y-4\">\n {[1,2,3].map(i => (\n <div key={i}>\n <div className=\"h-3 w-20 bg-gray-200 rounded mb-2\" />\n <div className=\"h-11 bg-gray-100 rounded-lg\" />\n </div>\n ))}\n </div>\n ) : (\n <form onSubmit={handleSubmit} className=\"px-6 py-6 space-y-5\">\n\n {error && (\n <div className=\"rounded-xl px-4 py-3 text-sm flex items-center gap-2.5\"\n style={{ backgroundColor: \"rgba(239,68,68,0.08)\", border: \"1px solid rgba(239,68,68,0.24)\", color: \"#dc2626\" }}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n {error}\n </div>\n )}\n\n {/* Usuario */}\n <div>\n <label htmlFor=\"user\" className=\"block text-xs font-semibold mb-1.5\"\n style={{ color: \"var(--text-secondary)\" }}>Nombre de usuario</label>\n <input id=\"user\" type=\"text\" required value={user}\n onChange={e => setUser(e.target.value)}\n onFocus={() => setFocusedField(\"user\")}\n onBlur={() => setFocusedField(null)}\n style={inputStyle(focusedField === \"user\")} />\n </div>\n\n {/* Moneda */}\n <div>\n <label htmlFor=\"coin\" className=\"block text-xs font-semibold mb-1.5\"\n style={{ color: \"var(--text-secondary)\" }}>Criptomoneda</label>\n <select id=\"coin\" required value={coin}\n onChange={e => setCoin(e.target.value)}\n onFocus={() => setFocusedField(\"coin\")}\n onBlur={() => setFocusedField(null)}\n style={inputStyle(focusedField === \"coin\")}>\n {COINS.map(c => <option key={c} value={c}>{c}</option>)}\n </select>\n </div>\n\n {/* Monto */}\n <div>\n <label htmlFor=\"amount\" className=\"block text-xs font-semibold mb-1.5\"\n style={{ color: \"var(--text-secondary)\" }}>Monto</label>\n <input id=\"amount\" type=\"number\" required min=\"0.000001\" step=\"any\"\n value={amount}\n onChange={e => setAmount(e.target.value)}\n onFocus={() => setFocusedField(\"amount\")}\n onBlur={() => setFocusedField(null)}\n style={inputStyle(focusedField === \"amount\")} />\n </div>\n\n <div className=\"flex gap-3 pt-1\">\n <Link href=\"/\"\n className=\"flex-1 py-3 rounded-lg text-sm font-bold text-center\"\n style={{ border: \"1px solid var(--border)\", color: \"var(--text-secondary)\", backgroundColor: \"white\" }}>\n Cancelar\n </Link>\n <button type=\"submit\" disabled={loading}\n className=\"flex-1 py-3 rounded-lg text-sm font-bold text-white\"\n style={{\n background: loading ? \"rgba(124,58,237,0.6)\" : \"linear-gradient(135deg, #a78bfa, #7c3aed)\",\n boxShadow: loading ? \"none\" : \"0 8px 16px rgba(124,58,237,0.28)\",\n cursor: loading ? \"not-allowed\" : \"pointer\",\n letterSpacing: \"0.04em\",\n }}>\n {loading ? (\n <span className=\"flex items-center justify-center gap-2\">\n <span className=\"w-4 h-4 border-2 rounded-full animate-spin\"\n style={{ borderColor: \"rgba(255,255,255,0.3)\", borderTopColor: \"white\" }} />\n Guardando...\n </span>\n ) : \"GUARDAR CAMBIOS\"}\n </button>\n </div>\n </form>\n )}\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport Link from \"next/link\";\nimport { usePathname } from \"next/navigation\";\n\n// ── Iconos SVG ──────────────────────────────────────────────────────\n\nconst IconList = () => (\n <svg width=\"19\" height=\"19\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"8\" y1=\"6\" x2=\"21\" y2=\"6\" />\n <line x1=\"8\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"8\" y1=\"18\" x2=\"21\" y2=\"18\" />\n <line x1=\"3\" y1=\"6\" x2=\"3.01\" y2=\"6\" />\n <line x1=\"3\" y1=\"12\" x2=\"3.01\" y2=\"12\" />\n <line x1=\"3\" y1=\"18\" x2=\"3.01\" y2=\"18\" />\n </svg>\n);\n\nconst IconPlus = () => (\n <svg width=\"19\" height=\"19\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"16\" />\n <line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\" />\n </svg>\n);\n\nconst IconArrowLeft = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"19\" y1=\"12\" x2=\"5\" y2=\"12\" />\n <polyline points=\"12 19 5 12 12 5\" />\n </svg>\n);\n\nconst IconLogo = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M12 2v20M17 5H9.5a3.5 3.5 0 1 0 0 7h5a3.5 3.5 0 1 1 0 7H6\" />\n </svg>\n);\n\n// ── Nav items del MFE ───────────────────────────────────────────────\n// Con basePath='/dashboard/transactions', Link href=\"/\" → /dashboard/transactions\n// y href=\"/new\" → /dashboard/transactions/new\nconst NAV_ITEMS = [\n { href: \"/\", label: \"Lista de Transacciones\", icon: <IconList /> },\n { href: \"/new\", label: \"Nueva Transacción\", icon: <IconPlus /> },\n];\n\nexport default function Sidebar() {\n const pathname = usePathname();\n\n return (\n <aside\n className=\"w-64 min-h-screen flex flex-col shrink-0\"\n style={{\n backgroundColor: \"var(--sidebar-bg)\",\n borderRight: \"1px solid var(--sidebar-border)\",\n }}\n >\n {/* ── Header del MFE ──────────────────────────────────── */}\n <div\n className=\"px-5 py-5\"\n style={{ borderBottom: \"1px solid var(--sidebar-border)\" }}\n >\n {/* Logo + nombre */}\n <div className=\"flex items-center gap-3 mb-3\">\n <div\n className=\"w-9 h-9 rounded-lg flex items-center justify-center text-white shrink-0\"\n style={{\n background: \"linear-gradient(135deg, #6366f1 0%, #4f46e5 100%)\",\n boxShadow: \"0 8px 16px 0 rgba(79,70,229,0.35)\",\n }}\n >\n <IconLogo />\n </div>\n <div>\n <h1 className=\"text-sm font-bold text-white leading-none\">\n Crypto Dashboard\n </h1>\n <p className=\"text-[11px] mt-0.5 leading-none\" style={{ color: \"#637381\" }}>\n Panel de Control\n </p>\n </div>\n </div>\n\n {/* Badge \"Microfrontend\" */}\n <div\n className=\"inline-flex items-center gap-1.5 text-[10px] font-bold px-2.5 py-1 rounded-full\"\n style={{\n backgroundColor: \"rgba(79,70,229,0.20)\",\n color: \"#818CF8\",\n border: \"1px solid rgba(79,70,229,0.30)\",\n }}\n >\n <span className=\"w-1.5 h-1.5 rounded-full bg-indigo-400 animate-pulse\" />\n MFE · Transacciones · :3001\n </div>\n </div>\n\n {/* ── Navegación ──────────────────────────────────────── */}\n <nav className=\"flex-1 px-3 py-5\">\n <p\n className=\"text-[10px] font-bold uppercase tracking-[0.1em] px-3 mb-2\"\n style={{ color: \"rgba(145,158,171,0.48)\" }}\n >\n Módulo\n </p>\n\n <div className=\"space-y-0.5\">\n {NAV_ITEMS.map((item) => {\n // Calcular si está activo comparando el path completo\n // basePath = /dashboard/transactions\n // pathname \"/\" → activo en /dashboard/transactions\n // pathname \"/new\" → activo en /dashboard/transactions/new\n const fullPath = `/dashboard/transactions${item.href === \"/\" ? \"\" : item.href}`;\n const isActive = pathname === fullPath;\n\n return (\n <Link\n key={item.href}\n href={item.href}\n className=\"group flex items-center gap-3 px-3 py-2.5 rounded-lg text-sm font-medium transition-all duration-150 relative\"\n style={{\n color: isActive ? \"var(--sidebar-text-active)\" : \"var(--sidebar-text)\",\n backgroundColor: isActive ? \"var(--sidebar-active-bg)\" : \"transparent\",\n }}\n onMouseEnter={e => {\n if (!isActive) {\n (e.currentTarget as HTMLElement).style.backgroundColor = \"rgba(255,255,255,0.06)\";\n (e.currentTarget as HTMLElement).style.color = \"#C4CDD5\";\n }\n }}\n onMouseLeave={e => {\n if (!isActive) {\n (e.currentTarget as HTMLElement).style.backgroundColor = \"transparent\";\n (e.currentTarget as HTMLElement).style.color = \"var(--sidebar-text)\";\n }\n }}\n >\n {/* Barra lateral activa */}\n {isActive && (\n <span\n className=\"absolute left-0 top-1/2 -translate-y-1/2 w-[3px] h-6 rounded-r-full\"\n style={{ backgroundColor: \"#818CF8\" }}\n />\n )}\n <span style={{ color: isActive ? \"#818CF8\" : \"#637381\" }}>\n {item.icon}\n </span>\n <span>{item.label}</span>\n </Link>\n );\n })}\n </div>\n </nav>\n\n {/* ── Footer: Volver al host ───────────────────────────── */}\n <div\n className=\"px-3 py-4\"\n style={{ borderTop: \"1px solid var(--sidebar-border)\" }}\n >\n {/* Volver al dashboard principal */}\n <a\n href=\"http://localhost:3000/dashboard\"\n className=\"flex items-center gap-3 px-3 py-2.5 rounded-lg text-sm font-medium transition-all duration-150 w-full\"\n style={{ color: \"#637381\" }}\n onMouseEnter={e => {\n (e.currentTarget as HTMLElement).style.color = \"#C4CDD5\";\n (e.currentTarget as HTMLElement).style.backgroundColor = \"rgba(255,255,255,0.06)\";\n }}\n onMouseLeave={e => {\n (e.currentTarget as HTMLElement).style.color = \"#637381\";\n (e.currentTarget as HTMLElement).style.backgroundColor = \"transparent\";\n }}\n >\n <IconArrowLeft />\n <span>Dashboard Principal</span>\n </a>\n </div>\n </aside>\n );\n}\n","\"use client\";\n\n/**\n * EmbeddedShell\n *\n * Detecta si el MFE está corriendo dentro de un iframe (embebido en el host)\n * o de forma standalone en localhost:3001.\n *\n * - Standalone → muestra Sidebar + TopBar propios del MFE\n * - Embebido → solo renderiza el contenido, sin chrome extra\n */\n\nimport { useState, useEffect } from \"react\";\nimport Sidebar from \"./Sidebar\";\n\nexport default function EmbeddedShell({ children }: { children: React.ReactNode }) {\n const [isEmbedded, setIsEmbedded] = useState(false);\n\n useEffect(() => {\n try {\n // Si window.self !== window.top → estamos dentro de un iframe\n setIsEmbedded(window.self !== window.top);\n } catch {\n // Si lanza error (cross-origin) → definitivamente en iframe\n setIsEmbedded(true);\n }\n }, []);\n\n // Modo embebido: solo el contenido, sin sidebar ni topbar propios\n if (isEmbedded) {\n return (\n <div style={{ backgroundColor: \"var(--background)\", minHeight: \"100vh\" }}>\n {children}\n </div>\n );\n }\n\n // Modo standalone (localhost:3001 directo): layout completo con sidebar\n return (\n <div className=\"flex min-h-screen\" style={{ backgroundColor: \"var(--background)\" }}>\n <Sidebar />\n\n <div className=\"flex-1 flex flex-col min-w-0\">\n {/* TopBar del MFE */}\n <header\n className=\"h-16 flex items-center px-6 shrink-0\"\n style={{\n backgroundColor: \"rgba(244,246,248,0.95)\",\n borderBottom: \"1px solid rgba(145,158,171,0.24)\",\n position: \"sticky\",\n top: 0,\n zIndex: 40,\n }}\n >\n <div className=\"flex-1\">\n <nav className=\"flex items-center gap-1.5 text-xs mb-0.5\">\n <span style={{ color: \"var(--text-secondary)\" }}>Inicio</span>\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n <span style={{ color: \"var(--text-secondary)\" }}>Gestión</span>\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n <span className=\"font-semibold\" style={{ color: \"var(--text-primary)\" }}>\n Transacciones\n </span>\n </nav>\n <h1 className=\"text-xl font-bold leading-none\" style={{ color: \"var(--text-primary)\" }}>\n Transacciones\n </h1>\n </div>\n\n <div\n className=\"hidden sm:flex items-center gap-2 text-xs font-semibold px-3 py-1.5 rounded-full\"\n style={{\n backgroundColor: \"rgba(79,70,229,0.10)\",\n color: \"var(--primary)\",\n border: \"1px solid rgba(79,70,229,0.20)\",\n }}\n >\n <span className=\"w-1.5 h-1.5 rounded-full bg-indigo-500 animate-pulse\" />\n Microfrontend · Puerto 3001\n </div>\n </header>\n\n <main className=\"flex-1 overflow-auto\">\n {children}\n </main>\n </div>\n </div>\n );\n}\n"]}
|