Commit Graph

40 Commits

Author SHA1 Message Date
Milton Gonzalez 481ba008da fix: version 2.10.7 -- alinea la fecha con los iconos en las tarjetas de Notas
La fecha estaba en flujo normal (padding-bottom de la tarjeta) mientras los iconos de
compartida/arrastre estan position:absolute mas cerca del borde inferior, generando un
desnivel visible. Se pasa .notes-card-meta tambien a position:absolute con el mismo bottom
que los iconos, y se agranda el padding-bottom de la tarjeta para dejarle espacio.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-12 17:37:39 -05:00
Milton Gonzalez 24169237e1 fix: version 2.10.6 -- icono de compartida junto al de arrastre + fix de actualizacion en vivo
El icono de compartida de las tarjetas de Notas se mueve de junto a la fecha a la esquina
inferior derecha, a la izquierda del icono de arrastre. De paso se corrige que no se
actualizaba en la tarjeta tras compartir/dejar de compartir sin recargar la pagina (faltaba
un reload() de la lista principal, que es de donde sale el share_count de cada tarjeta).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-12 17:31:56 -05:00
Milton Gonzalez 0d47bba29d fix: version 2.10.5 -- mueve el icono de arrastre de Notas abajo a la derecha
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-12 16:27:58 -05:00
Milton Gonzalez 0964ffb8a8 feat: version 2.10.4 -- tarjetas de Notas arrastrables para reordenar
Nueva columna sort_order en notes (migracion 020, mismo patron que 012_sort_order.sql de
activities/tasks). Se reusa el hook useDragReorder ya existente (drag & drop nativo, sin
libreria nueva) -- el icono de agarre va solo en una esquina de la tarjeta, nunca en la
tarjeta completa, para no pisar el click que abre la edicion (mismo truco que ya usa
ListView.jsx: stopPropagation en el handle).

Solo las notas propias son arrastrables/reordenables; las compartidas conmigo quedan
siempre despues, ordenadas por fecha (el orden manual de otro usuario no tiene sentido para
mi vista). Se desactiva mientras hay un filtro de busqueda activo.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-12 16:17:51 -05:00
Milton Gonzalez 98d9196791 feat: version 2.10.2 -- icono de compartida + buscador en tarjetas de Notas
Tarjetas de Notas: icono junto a la fecha cuando la nota esta compartida (propia compartida
con alguien, via share_count nuevo en la consulta; o recibida de otro usuario). Buscador
junto al titulo que filtra las tarjetas en vivo por contenido (client-side, sin ida y vuelta
al backend ya que el contenido no esta cifrado como en Contraseñas).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-12 15:37:31 -05:00
Milton Gonzalez 926215297e feat: version 2.10.0 -- Notas en tarjetas, crear/editar en popup, compartir de solo lectura
Rediseno completo del modulo Notas (era lista inline, sin popup, sin compartir):
- Tarjetas con resumen del contenido en vez de lista vertical; la primera tarjeta siempre es
  un "+" para crear.
- Crear y editar se hacen en un DetailPopup (antes: textarea fijo arriba + edicion inline por
  tarjeta).
- Nueva tabla note_shares (migracion 019): compartir una nota con otro usuario ya registrado,
  siempre de solo lectura -- el dueño sigue siendo el unico que edita/borra/comparte (mismo
  patron que project_members pero sin rol ni invitacion por correo, ya que acá no hace falta).
  Quien recibe la nota la ve con "Compartida por {nombre}", sin ningun control de edicion.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-12 12:09:04 -05:00
Milton Gonzalez 3d220bcc20 feat: version 2.9.0 -- ver documentos .md/.txt directo, sin descargar
Agrega un boton "Ver" en Documentos (adjuntos de proyectos/actividades) para archivos de
texto plano y Markdown: se leen via blob (mismo mecanismo ya usado para descargar, que ya
maneja el Bearer token) y se muestran en un popup -- el .md se renderiza con formato (marked)
y se sanitiza con DOMPurify antes de insertarse en el DOM, para no abrir una via de XSS con
HTML/JS embebido en un documento subido por otro usuario.

De paso corrige que subir un .md fallaba con "tipo de archivo no permitido": el navegador no
manda un mimetype confiable para esa extension (varia segun SO), asi que ahora se normaliza
por extension en el fileFilter de multer en vez de depender solo del mimetype del navegador.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-07 17:17:03 -05:00
Milton Gonzalez 27cf2712fb fix: version 2.8.13 -- mueve el logo de LinkedCorp al pie del login, junto al texto
El bloque de LinkedCorp pasa de estar junto al logo de empresa (arriba) a quedar debajo de
los links de "olvidaste tu contraseña"/"crear cuenta", centrado, con el texto a la derecha
del icono. El logo de empresa vuelve a mostrarse solo y centrado como antes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-02 20:14:18 -05:00
Milton Gonzalez 4387b23f45 fix: version 2.8.12 -- logo de LinkedCorp en el login con clase propia (40px) y layout izq/der
El icono de LinkedCorp reusaba la clase del logo de empresa (80px), asi que se salia de la
tarjeta al querer achicarlo. Se le da su propia clase (40px) y el layout del login pasa a
alinear el logo de empresa a la izquierda y LinkedCorp a la derecha, sin desbordar margenes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-02 20:08:35 -05:00
Milton Gonzalez 8c92c54449 fix: version 2.8.11 -- ajusta posicion y tamaño del logo LinkedCorp en el login
Sube 50px el bloque icono+texto de LinkedCorp junto al logo de empresa, y reduce el texto a
0.9rem.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-02 19:58:58 -05:00
Milton Gonzalez 7134bdda26 feat: version 2.8.10 -- logo de LinkedCorp junto al de empresa en el login
Cuando hay un logo de empresa configurado (Configuracion > Empresa, caso exilaser), el login
ahora muestra tambien el logo de LinkedCorp a la derecha, a la misma altura, con el texto
"LinkedCorp" debajo del icono. Sin logo de empresa configurado, el login sigue igual.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-02 19:51:54 -05:00
Milton Gonzalez 028126e3a4 fix: version 2.8.9 -- reduce tamaño del texto LinkedCorp del sidebar
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-02 19:44:03 -05:00
Milton Gonzalez 38134b08f6 feat: version 2.8.7 -- nuevo icono de LinkedCorp en el sidebar, al doble de tamaño
Reemplaza el icono del pie del menu lateral por el nuevo logo entregado (sin fondo), al
doble de tamaño. Como el nuevo logo no trae el texto, se agrega "LinkedCorp" por separado
con tipografia redondeada (Baloo 2, via Google Fonts) similar a la de los logos anteriores,
que ya se adapta sola a tema claro/oscuro via las variables de color existentes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-02 18:39:29 -05:00
Milton Gonzalez 2b18c8d004 fix: version 2.8.6 -- flecha roja mas visible para ocultar logos de marca
El boton "-" para colapsar el catalogo de marcas casi no se distinguia; se reemplaza por una
flecha hacia arriba en rojo (ChevronUp), mucho mas clara.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-01 16:32:28 -05:00
Milton Gonzalez 2dd2aeae8c fix: version 2.8.5 -- boton para volver a ocultar el catalogo de marcas
Al "+" para desplegar los logos de marca le faltaba su contraparte: un boton "-" junto al
titulo del bloque para volver a colapsarlo.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-01 16:26:10 -05:00
Milton Gonzalez de5984b9d6 feat: version 2.8.4 -- catalogo de logos de marca oculto tras boton +
El selector de icono generico de Contraseñas queda igual; el catalogo de marcas (simple-icons)
pasa a estar colapsado por defecto detras de un boton "+", y se abre solo si la entrada ya
tenia un logo de marca asignado.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-01 15:12:00 -05:00
Milton Gonzalez 79a2e7f6d8 fix: version 2.8.3 -- PIN de Contraseñas ya no dispara el gestor de contraseñas de Chrome
Los campos de PIN (desbloqueo, crear, cambiar, resetear) usaban type="password", lo que hacia
que Chrome ofreciera guardar/actualizar una "contraseña de sitio" cada vez que se ingresaba.
Un PIN de 4 digitos no es una credencial de login, asi que se cambia a type="text" con
enmascarado puramente visual (-webkit-text-security), sin perder el aspecto de puntos.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-01 14:54:23 -05:00
Milton Gonzalez d5f3f05470 fix: version 2.8.2 -- overlay de progreso al actualizar + fix mountedRef en StrictMode
Agrega un overlay de pantalla completa (circulo girando + porcentaje estimado +
"Actualizando...") que bloquea todo clic mientras corre la auto-actualizacion, y recarga la
pagina sola al terminar. De paso corrige un bug real: el useEffect de mountedRef no
reactivaba el flag en su setup, asi que con React.StrictMode (dev) el polling de estado
nunca llegaba a correr -- no afectaba produccion (StrictMode no duplica efectos ahi) pero
ocultaba el problema al probar en dev. Tambien se corrigen un par de voseos que quedaron
en los textos de Actualizaciones.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-01 14:33:55 -05:00
Milton Gonzalez 8214df62ae feat: version 2.8.1 -- catalogo de logos de marca en Contraseñas (simple-icons, CC0)
Amplia el selector de icono de una credencial con ~70 logos reales de marcas conocidas
(Google, GitHub, Cloudflare, cPanel, MikroTik, WordPress, etc.), empaquetados localmente
desde el paquete simple-icons (dominio publico) y tree-shakeados por Vite. Se mantiene el
criterio de privacidad ya establecido: ninguna consulta externa de favicon por entrada.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-01 14:16:31 -05:00
Milton Gonzalez 127ca2ba7e feat: version 2.7.2 -- tarjetas con icono en Contraseñas + fix borrado de password al editar
Listado de Contraseñas pasa de tabla a tarjetas: icono elegible (
catalogo fijo, sin servicios externos de favicon por privacidad) o
inicial del nombre como fallback, junto con nombre y enlace.

Fix real: editar una credencial sin revelar la contraseña antes la
dejaba vacia al guardar -- ahora se conserva la que ya estaba si no
se escribe una nueva.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-01 12:41:22 -05:00
Milton Gonzalez 0be0712ff0 feat: version 2.7.0 -- menu Contraseñas (repositorio de credenciales privado)
Nuevo modulo backend/src/modules/vault/: contraseña y notas cifradas
en el servidor (AES-256-GCM, mismo mecanismo ya usado para la clave
SMTP). Acceso al menu protegido con un PIN de 4 digitos independiente
del login (token corto propio, header X-Vault-Token, nunca el JWT de
sesion). El PIN no participa del cifrado -- cambiarlo o restablecerlo
por correo nunca afecta las contraseñas ya guardadas. Privado por
usuario, sin excepcion. Cada accion sensible (crear/editar/eliminar/
revelar/desbloquear) queda en audit_log. Compartir con otro usuario
queda para una proxima version.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-01 12:12:54 -05:00
Milton Gonzalez 82308faeb1 feat: version 2.6.0 -- barra de progreso rediseñada + icono de compartido
Porcentaje de avance dentro de la barra (antes aparte), fondo gris
visible en vez de casi invisible sobre el tema oscuro. Nuevo icono en
el listado de Proyectos que muestra con quien esta compartido cada
proyecto y su permiso, solo si aplica.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-30 08:04:50 -05:00
Milton Gonzalez 9b20f85ae0 fix: version 2.4.0 -- menu lateral como drawer en celular
En pantallas angostas (<=768px) el sidebar arranca oculto y se abre
como panel superpuesto desde el boton de hamburguesa, con fondo
oscuro detras y cierre automatico al navegar o tocar afuera. El
escritorio no se toca: sigue igual que siempre.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 13:20:30 -05:00
Milton Gonzalez ee72b52b13 fix: version 2.2.2 -- build de auto-update y tamanos de logo
El script de auto-actualizacion heredaba NODE_ENV=production del
backend, lo que hacia que npm saltara devDependencies (vite incluido)
al instalar el frontend -- el build fallaba en silencio y el sistema
quedaba en la version vieja. Se fuerza --include=dev en ese paso.

De paso: logo de la empresa que usa el sistema al doble de tamano,
logo de LinkedCorp (desarrollador) a la mitad.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 12:27:57 -05:00
Milton Gonzalez 43fef6048e feat: version 2.1.0 -- logo de marca separado en barra lateral
El logo de empresa (Configuracion > Empresa) ahora va en un espacio
nuevo arriba de la barra lateral, solo visible si esta configurado.
El logo de LinkedCorp de abajo deja de ser configurable: identifica
siempre al desarrollador del sistema, sin importar que empresa lo use.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 11:40:55 -05:00
Milton Gonzalez 67cb58ed0b feat: el buscador de Proyectos y Actividades tambien busca en tareas
Buscador de Proyectos: ahora busca tambien en actividades y tareas de cualquier proyecto (antes
solo nombre/codigo del proyecto). Resultados en un panel flotante con la ruta completa
"Proyecto - Actividad - Tarea"; clic navega al proyecto y abre la actividad encontrada
(pestaña Tareas si el resultado era una tarea).

Buscador de Actividades (dentro de un proyecto): busca tambien en las tareas de esa actividad,
mismo panel con "Actividad - Tarea".

Nuevo GET /api/search?q=...&projectId= (global o acotado a un proyecto). Nuevos componentes/hooks
reutilizables: SearchResultsDropdown, useDebouncedValue.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-16 15:04:53 -05:00
Milton Gonzalez 696ab0d092 fix: arrastrar tareas para reordenar dejo de funcionar
Regresion del fix del checkbox (v1.15.2): draggable/onDragStart quedaron directo sobre el <svg>
del icono de agarre, que solo capta el mousedown sobre lo pintado (huecos entre sus formas), no
sobre todo su recuadro -- el navegador no siempre detectaba el inicio del arrastre. Envuelto en
un <span> con area de agarre solida, mismo patron ya usado en el listado de Actividades.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-16 14:22:26 -05:00
Milton Gonzalez 22e09c989e style: contador de pestañas en rojo en vez de azul
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-16 12:56:37 -05:00
Milton Gonzalez 1b23da7151 feat: contador en las pestañas de Tareas/Comentarios/Documentos de una actividad
Circulo con el numero al lado del nombre de la pestaña: Tareas muestra las pendientes (sin
marcar), Comentarios y Documentos el total. Soporte agregado al componente Tabs reutilizable
(tab.count), no solo al detalle de actividad.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-16 12:52:00 -05:00
Milton Gonzalez 2a1bdf1ba9 feat: nombre y logo de empresa configurables (solo dev, no desplegado a prod)
Nueva marca configurable desde Configuracion -> Empresa (solo superadmin): nombre y logo,
guardados en system_settings (mismo patron que SMTP, sin tabla nueva). Nuevo endpoint publico
GET /api/company (+ /logo) para que login/registro/recuperacion de clave puedan mostrar la marca
antes de iniciar sesion. Sin configurar, se ve "LinkedCorp" y el logo estatico de siempre.

Probado en dev (build + Playwright: panel de Configuracion, sidebar expandido/compacto, login
publico), sin desplegar a produccion por pedido explicito del usuario -- este commit sirve de
punto de control en git antes de decidir el despliegue.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-15 14:42:15 -05:00
Milton Gonzalez 7ba4a89d49 fix: version real en pie del menu + logo abajo-izquierda
El pie del menu lateral mostraba el texto fijo "v0.1.0" en vez de la version real (se lee ahora
de package.json via import JSON de Vite). El logo de LinkedCorp se mueve del encabezado del menu
al pie, sobre el numero de version, en modo expandido y compacto.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-15 13:08:55 -05:00
Milton Gonzalez 80981e9063 feat: arrastrar con el mouse para reordenar actividades y tareas
Hook reutilizable useDragReorder (drag & drop nativo HTML5, sin
libreria nueva) usado en dos lugares: ListView (opt-in via onReorder,
deshabilitado mientras haya un ordenamiento por columna activo) para
el listado de actividades de un proyecto, y el listado de tareas de
una actividad. Orden persistido en sort_order (activities y tasks,
migracion 012, posiciones siempre 1..N).

Fix real encontrado durante las pruebas: sincronizar el estado interno
del hook por la REFERENCIA del arreglo de entrada entraba en loop
infinito de renders cuando el llamador pasa "algo || []" (un arreglo
nuevo en cada render mientras los datos cargan). Corregido para
sincronizar por el contenido (ids), no por referencia.

Probado en dev con curl (persistencia del orden) y Playwright
(arrastrar filas en el navegador, orden visible y guardado
correctamente, sin errores de consola tras el fix).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-15 12:41:19 -05:00
Milton Gonzalez d3ef86c1db fix: icono de calendario invisible en campos de fecha con tema oscuro
Reportado en produccion: el icono nativo del input type="date" se
dibujaba negro sobre fondo oscuro. Se agrega color-scheme: dark para
esos inputs cuando data-theme="dark", asi el navegador elige un icono
claro automaticamente. Verificado en dev con Playwright.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-14 08:51:40 -05:00
Milton Gonzalez 869094c622 feat: boton de mostrar/ocultar clave en todos los campos de contraseña
Componente reutilizable PasswordInput (icono de ojo) usado en login, registro,
restablecer clave, cambiar clave, crear usuario y la clave SMTP de
Configuracion, para que el usuario pueda verificar que la esta escribiendo
correctamente.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-09 09:00:06 -05:00
Milton Gonzalez 7557dffc52 feat: autorregistro con verificacion de correo + aprobacion, superadmin y SMTP
- POST /api/auth/register: primer usuario del sistema -> superadmin con sesion
  directa (bootstrap, sin correo ni aprobacion); los siguientes quedan
  pending_verification y reciben un correo con enlace de un solo uso (24h).
- GET /api/auth/verify-email: pasa a pending_approval y notifica in-app a los
  admin/superadmin activos.
- admin/superadmin aprueban (POST /api/users/:id/approve, eligen rol y
  departamento) o rechazan (POST /api/users/:id/reject, borra y audita el
  email) desde Organizacion -> Usuarios (nuevo badge de estado + acciones).
- login() da mensaje especifico segun el status de la cuenta en vez del
  generico "credenciales invalidas".
- Recuperacion de clave (forgot/reset-password): respuesta siempre generica,
  token de 1 hora de un solo uso.
- Nuevo modulo settings: SMTP configurable SOLO por superadmin desde
  Configuracion -> Correo (SMTP); clave cifrada AES-256-GCM (ENCRYPTION_KEY)
  en la tabla system_settings, nunca expuesta por la API. sendMail() degrada
  a modo dev (loguea en vez de enviar) si no hay SMTP configurado, y nunca
  deja que un fallo de envio tumbe al que lo llama.
- Migracion 002_registration_and_smtp.sql: rol superadmin, columnas de ciclo
  de vida en users (status, tokens), tabla system_settings, y promueve al
  usuario mas antiguo del sistema a superadmin.
- Fix: React.StrictMode disparaba el efecto de VerifyEmailPage dos veces; la
  segunda llamada (token ya consumido) mostraba "enlace invalido" pese a que
  la verificacion ya habia funcionado. Se agrega una guarda por token.
- Fix (deuda tecnica v1.0.0): se reordena el montaje de rutas en app.js —
  subtasksRoutes (mount generico en /api) va al final, para no interceptar
  con su requireAuth interno una request sin token dirigida a un router mas
  especifico registrado despues.
- Documentacion actualizada: AGENTS.md, SPEC.md, API.md, BASE_DE_DATOS.md,
  CONFIGURACION.md, ESTADO.md, CHANGELOG.md. Version 1.1.0.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-05 23:28:46 -05:00
Milton Gonzalez 286dfda6df style: duplica el tamaño del logo (sidebar y login)
nav-logo-full 26px->52px, nav-logo-icon (modo compacto) 28px->56px, y
login-logo-img 40px->80px. Se ajusta el alto de nav-header/topbar (52->84px)
y el ancho del riel compacto (56->80px) para que el logo mas grande entre
sin recortarse y las lineas de header/topbar sigan alineadas.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-05 22:22:56 -05:00
Milton Gonzalez 7f4acb44e7 feat(ui): usa el logo real de LinkedCorp en vez del placeholder "LC"
Reemplaza el cuadro "LC" del NavigationView y del login por los logos
oficiales de /desarrollo/imgLinkedCorp: logoLinkedCorpTxtBlack (tema claro,
texto negro) y logoLinkedCorpTxt (tema oscuro, texto blanco), elegido segun
el tema activo. En modo compacto del sidebar (sin espacio para el texto) se
usa el isotipo redondo (logoLinked1) en vez del logo con texto.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-05 22:19:03 -05:00
Milton Gonzalez 6b61e5cea7 fix(ui): ComboBox y Flyout se portan a document.body con position:fixed
El panel desplegable de ComboBox se posicionaba con position:absolute dentro
de su propio contenedor. Cualquier ancestro con overflow:hidden/auto (un
Expander colapsable, el body de un DetailPopup, una tarjeta con scroll propio)
lo recortaba, dejando la lista invisible o cortada a la mitad -reproducido en
Configuracion > Apariencia, dentro del Expander-.

Fix: igual tecnica que Flyout -createPortal a document.body, position:fixed
calculado desde getBoundingClientRect() del trigger-, con cierre en click
afuera y en scroll de cualquier ancestro (capture:true, el scroll no
burbujea). De paso Flyout pasa de position:absolute a position:fixed por el
mismo motivo (evita un bug latente de desalineacion si la pagina esta
scrolleada).

Regla documentada en project-md-templates/UI-UX-WINDOWS.md (Kit de
componentes + do's/don'ts) para que no se repita en este ni otros proyectos.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-05 21:50:09 -05:00
Milton Gonzalez 1e6e7fecdd fix(ui): reemplaza panel-debajo-del-listado por DetailPopup de tamaño fijo
El detalle de un item de listado (actividad, departamento, usuario, proyecto nuevo,
catalogo) ya no se apila debajo ni al costado del listado: ahora abre en un popup que
cubre la ventana, deja el listado inactivo detras, nunca se cierra con clic afuera (solo
con el boton Cerrar o una accion explicita del formulario) y mantiene un alto FIJO por
instancia para que cambiar de pestaña interna (Info/Subtareas/Dependencias/Comentarios/
Documentos) no reajuste su tamaño.

De paso corrige un bug real de stacking: ContentDialog no usaba portal a document.body,
así que un dialogo de confirmacion abierto desde dentro de un DetailPopup quedaba oculto
detras de este. Ahora ambos son portales con una jerarquia de z-index explicita
(Flyout 100 < DetailPopup 200 < ContentDialog 250 < Toast 300).

En el detalle de actividad, Subtareas y Dependencias pasan de estar apiladas dentro de la
pestaña Info a ser cada una su propia pestaña.

Regla documentada en project-md-templates/UI-UX-WINDOWS.md (componente DetailPopup) para
que aplique a futuros proyectos de escritorio Windows del grupo.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-03 11:21:07 -05:00
Milton Gonzalez 1d22adc42e chore: estructura inicial del MVP
Backend (Express + MariaDB) y frontend (React + Vite, identidad Fluent/Windows) con el
nucleo funcional: seguridad, organizacion, proyectos, actividades, subtareas, dependencias,
dashboard, calendario, gantt, comentarios, adjuntos, notificaciones in-app y catalogos.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-03 08:37:58 -05:00