Commit Graph

106 Commits

Author SHA1 Message Date
00596bd6df Agregar opción para cargar avatar desde URL en edición de perfil
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 55s
Se añade campo de entrada para pegar URLs de imágenes directamente,
permitiendo cargar avatares desde enlaces externos. Incluye validación
de URLs, descarga de imágenes con manejo de errores CORS, validación
de tipo y tamaño (máx 5MB), con feedback visual de errores específicos.
2025-10-18 00:20:39 -06:00
470823e1a5 Limpiar y consolidar archivos PWA en nuxt4/public
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 56s
- Actualizar apple-touch-icon.png para coincidir con icon-192x192.png
- Eliminar directorio pwa_assets ya que todos los iconos están correctamente copiados en nuxt4/public
- Todos los archivos PWA ahora están organizados dentro del servicio Nuxt
2025-10-17 19:32:31 -06:00
47cf1c5e7c Integrar iconos PWA de múltiples tamaños desde pwa_assets
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 55s
- Copiar iconos desde /pwa_assets/icons/ a /public/
- Agregar iconos de 72x72, 96x96, 128x128, 144x144, 152x152, 256x256, 384x384
- Actualizar manifest con todos los tamaños de iconos
- Mejorar compatibilidad con diferentes dispositivos y resoluciones
- Mantener iconos maskable existentes para adaptive icons
2025-10-17 18:31:28 -06:00
5bb5e5092e Implementar Web Share Target API para compartir fotos con la PWA
Some checks failed
build-and-deploy / build-and-deploy (push) Has been cancelled
- Agregar share_target al manifest de la PWA
- Crear endpoint /api/share-target para recibir archivos compartidos
- Guardar archivos temporalmente en /public/temp-shared
- Modificar UserProfileForm para aceptar imágenes externas
- Detectar automáticamente imágenes compartidas y procesarlas
- Crear endpoint /api/share-target/cleanup para limpiar temporales
- Mostrar toast informativo al recibir imagen compartida
- Redirigir automáticamente al formulario de perfil
- Soportar compartir desde galería, otras apps, etc.
2025-10-17 18:29:00 -06:00
ced637a7a9 Reemplazar selector de status por chip discreto indicativo
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 59s
- Quitar botones de selección de estado de presencia
- Agregar chip compacto y discreto al lado del email
- El chip solo muestra el estado actual (no permite cambiarlo)
- El estado se manejará dinámicamente desde el backend
- Por defecto el estado es 'disponible' (online)
- Actualizar estilos para modo claro y oscuro
2025-10-17 18:04:46 -06:00
9afe54d188 Agregar carga de archivos y drag & drop para foto de perfil
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 57s
- Agregar zona de drag & drop con feedback visual
- Agregar botón para subir foto desde dispositivo
- Implementar validación de tipo de archivo (solo imágenes)
- Implementar validación de tamaño (máximo 5MB)
- Agregar estilos responsive y soporte para modo oscuro
2025-10-17 17:56:58 -06:00
a7d44f185d Agregar banner informativo sobre guardado local vs servidor
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 56s
- Banner visible en header del formulario
- Explica que cambios son locales hasta guardar
- Diseño con borde izquierdo y fondo suave
- Soporte dark mode
- Mejora UX explicando comportamiento de persistencia
2025-10-17 17:51:32 -06:00
1f16f841df Revert "Mejorar estilo Frutiger Aero del modal de confirmación de salida"
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 9s
This reverts commit 9877bbe260.
2025-10-17 17:48:18 -06:00
9877bbe260 Mejorar estilo Frutiger Aero del modal de confirmación de salida
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 57s
- Agregar efecto glassmorphism con blur y transparencia
- Mejorar bordes redondeados y sombras
- Usar colores más suaves y profesionales
- Agregar text-shadow para mejor legibilidad
- Actualizar estilos de dark mode con glassmorphism
- Mantener consistencia visual con el resto de la app
2025-10-17 17:36:57 -06:00
58a410c51d Agregar modal personalizado de confirmación de salida
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 55s
- Reemplazar prompt del navegador por modal personalizado
- Modal muestra lista de campos modificados con estilo de la app
- Distingue entre almacenamiento local y servidor
- Incluye soporte para modo oscuro
- Mejora UX con diseño responsive
2025-10-17 17:24:44 -06:00
454d98eb97 Feat: Agregar botón de reiniciar formulario
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 55s
- Nuevo botón "Reiniciar" en el footer junto a Cancelar y Guardar
- Solo aparece cuando hay cambios pendientes (v-if="hasChanges")
- Color warning con variant soft para indicar acción destructiva
- Ícono de arrow-path (flecha circular)
- Función resetForm() que:
  - Pide confirmación al usuario
  - Restaura todos los campos a valores originales
  - Limpia la cookie de borrador
  - Muestra toast informativo
- Ubicado entre botones Cancelar y Guardar cambios

El botón permite descartar todos los cambios y volver al estado
original sin tener que recargar la página.
2025-10-17 17:09:36 -06:00
e224f385d4 Improve: Mejorar mensaje de alerta al salir del formulario
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 55s
- Hacer el mensaje más claro y explicativo
- Enfatizar que los cambios NO se han enviado al servidor
- Indicar que quedarán guardados localmente en el navegador
- Agregar instrucción de cómo guardar definitivamente
- Iniciar con pregunta "¿Estás seguro de salir?"

Mensaje anterior era ambiguo, ahora es más específico sobre:
- Qué se guarda (localmente)
- Qué NO se guarda (en el servidor)
- Qué hacer para guardar definitivamente
2025-10-17 17:07:54 -06:00
2c7a12a829 Feat: Persistencia de cambios y alertas al salir del formulario
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 57s
- Agregar cookie para persistir cambios del formulario (7 días)
- Detectar y mostrar campos modificados con indicadores visuales
- Alertar al usuario antes de salir si hay cambios sin guardar
- Restaurar borrador automáticamente al reabrir formulario
- Notificar al usuario de cambios restaurados con toast
- Limpiar cookie al guardar exitosamente

Indicadores visuales:
- Label en color warning para campos modificados
- Badge "Modificado" con ícono de lápiz
- Mensaje en beforeunload listando campos pendientes

La cookie guarda todos los campos del formulario y se restauran
automáticamente al abrir el formulario de nuevo.
2025-10-17 17:01:55 -06:00
4a7f6bb5f0 Refactor: Simplificar sección de foto de perfil en formulario
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 55s
- Mover sección de foto de perfil al primer lugar del formulario
- Eliminar preview del avatar (MsnAvatar) - no repetir
- Simplificar botones: más compactos (size="sm", iconos w-4 h-4)
- Eliminar card/container extra (.avatar-section) con background y padding
- Nueva clase simple .avatar-actions-simple con solo flex y gap
- Limpiar estilos CSS no utilizados (avatar-section, avatar-preview, avatar-actions)
2025-10-17 16:55:50 -06:00
27dc90dfbe Docs: Restaurar capture_links y documentar error TypeScript intencional
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 56s
- Restaurar capture_links en PWA manifest (requerido para funcionamiento correcto)
- Agregar sección en README explicando error TS2353 intencional
- Documentar que capture_links es experimental pero funcional y necesario
- Incluir referencias a documentación oficial de la especificación

La propiedad capture_links es necesaria para capturar navegaciones
dentro del scope de la PWA en el ecosistema Nucleo V3.
2025-10-17 16:52:21 -06:00
40b0610ad9 Fix: Actualizar sintaxis de componentes Nuxt UI v4 y corregir errores de TypeScript
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 55s
- Actualizar UModal para usar v-model:open en lugar de v-model
- Envolver contenido de UModal en slot #content según nueva sintaxis
- Corregir tipos en CameraCapture: agregar verificación de objeto antes de spread
- Cambiar tipo de retorno de getAppIconUrl de null a undefined
- Comentar capture_links en manifest PWA (propiedad experimental no soportada en tipos)
- Resolver todos los errores de TypeScript y warnings de hidratación

Errores corregidos:
- TS2353: width no existe en tipo ui de UModal
- TS2698: Spread types solo de tipos objeto
- TS18048: camera posiblemente undefined
- TS2322: null no asignable a undefined
- TS2353: capture_links no existe en ManifestOptions
2025-10-17 16:45:51 -06:00
8109f7e1d0 Implementar sistema completo de captura y gestión de avatares
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 57s
- Agregar CameraCapture.vue con soporte multi-dispositivo
  * Soporte para múltiples cámaras (frontal/trasera)
  * Manejo robusto de permisos y errores
  * Preview y confirmación de foto
  * Detección automática de capacidades del dispositivo

- Crear endpoint /api/avatar/upload para subir avatares
  * Validación de tipo y tamaño de archivo
  * Almacenamiento en /public/avatars/
  * Actualización de atributos en Authentik
  * Limpieza automática de avatares antiguos

- Actualizar UserProfileForm con gestión de avatar
  * Integración con CameraCapture en modal
  * Preview del avatar actual con MsnAvatar
  * Opciones para cambiar y eliminar avatar

- Actualizar useAuthentik para avatares personalizados
  * Carga de atributos completos del usuario
  * Soporte para avatar_url desde Authentik
  * Fallback a UI Avatars si no hay custom avatar
2025-10-17 16:35:59 -06:00
66be233e3a Rehacer avatar MSN con CSS puro en lugar de SVG
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 55s
- Eliminar SVG complejo y usar CSS radial-gradient
- Implementar degradado radial que simula iluminación real
- Agregar efectos glossy con pseudo-elementos ::before y ::after
- Usar box-shadow para profundidad 3D
- Simplificar implementación para mejor rendimiento
2025-10-17 16:21:13 -06:00
6b87902119 Implementar avatar estilo Windows Live Messenger con sistema de presencia
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 55s
- Agregar componente MsnAvatar con marco SVG de grosor variable
- Implementar degradados radiales estilo Frutiger Aero
- Agregar composable usePresence con detección de inactividad
- Incluir selector de estados: Online, Away, Busy, Offline
- Actualizar UserHeader para usar el nuevo avatar
2025-10-17 13:56:59 -06:00
fa19845b8e Agregar ícono SVG para Amigos App
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 55s
- Crear ícono con diseño de usuarios/amigos
- Agregar variaciones de nombre: amigos.svg, amigos-app.svg, amigosapp.svg
- Esto cubre diferentes posibles slugs de la aplicación
2025-10-17 05:54:41 -06:00
bea01d3e5d Agregar iconos locales de servicios y mejorar fallback de iconos
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 58s
2025-10-17 05:46:30 -06:00
dc9d6ec959 Style: Agregar border-radius a los iconos de las aplicaciones
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 59s
2025-10-17 05:41:55 -06:00
2219fa8950 Restaurar configuración original del manifest PWA
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m0s
- Restaurar capture_links: 'existing-client-navigate'
- Restaurar scope_extensions con subdominios de Nucleo V3
- Ahora usamos window.open() para bypassear estas configuraciones
- Configuración correcta del manifest mantenida
2025-10-17 05:26:08 -06:00
6c34c1ecce Fix: Forzar window.open() en desktop para bypassear capture_links
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m0s
- Agregar handler @click en app-items
- En desktop, prevenir default y usar window.open() directamente
- Esto bypasea completamente el sistema capture_links del manifest
- Mantener enlaces nativos como fallback para móvil
2025-10-17 05:19:41 -06:00
d9dc2c87aa Fix: Cambiar capture_links a 'none' para respetar target='_blank'
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 57s
- Cambiar capture_links de 'existing-client-navigate' a 'none'
- Remover scope_extensions que forzaban navegación en misma ventana
- Ahora el navegador respetará target='_blank' en desktop
- Los enlaces externos abrirán en nueva ventana/PWA
2025-10-17 05:16:33 -06:00
305143b433 Fix: Usar pointer device para detectar desktop en lugar de ancho
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 56s
- Cambiar detección de desktop de min-width a (pointer: fine)
- Esto detecta si tiene mouse/trackpad (desktop) vs touch (móvil)
- Más confiable para PWAs que se abren con ancho fijo
- Mantener ancho como fallback para compatibilidad
2025-10-17 05:13:00 -06:00
d08bd81c73 Debug: Agregar logs para detectar problema con target='_blank'
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 58s
- Agregar logs en useDeviceType para ver detección de desktop
- Agregar logs en shouldOpenInNewTab para ver resultado
- Esto ayudará a diagnosticar por qué no se abren nuevas ventanas
2025-10-17 05:06:47 -06:00
b7d9e0f9cd Fix: Interceptor debe revisar target antes de parsear URL
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 56s
- Mover verificaci\u00f3n de target='_blank' antes del parseo de URL
- Esto garantiza que links con target='_blank' nunca sean interceptados
- Permite que desktop abra PWAs en nuevas ventanas correctamente
2025-10-17 05:03:10 -06:00
99062559c4 Desktop: Abrir app-items en nueva ventana para lanzar PWAs
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 58s
- Crear composable useDeviceType para detectar desktop/móvil
- Modificar ApplicationsList para usar target='_blank' en desktop
- Ajustar pwa-link-handler para permitir nuevas ventanas en desktop
- En móvil mantener comportamiento original según openInNewTab
2025-10-17 04:57:51 -06:00
c88b58aee8 Agregar mejoras de PWA: id único, launch_handler
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 2m16s
- Agregar id único (/?app=inicio) para identificar PWA
- Implementar launch_handler con navigate-existing para mantener una sola ventana
- Mejoras basadas en especificaciones actualizadas de Chrome for Developers
2025-10-17 03:23:47 -06:00
147fa4df32 Implementar scope extensions y link handling para PWAs
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 56s
- Agregar scope_extensions en manifest para capturar navegaciones a otros subdominios
- Configurar Traefik para servir archivos .well-known sin autenticación
- Documentar configuración completa del sistema
2025-10-17 02:14:02 -06:00
196108752a Formulario mejorado con iconos, headers y nuevos campos
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 54s
- Reorganizar formulario en 4 secciones con headers:
  * Información Básica (username, UID, nombre, email)
  * Conectividad (contraseña WiFi)
  * Información Personal (teléfono, cédula, fecha, avatar)
  * Seguridad y Acceso (NFC, PIN, código Nucleo)
- Agregar UID de Authentik (solo lectura)
- Agregar contraseña WiFi Nucleo (solo lectura)
- Iconos en todos los campos y secciones
- Labels personalizados con iconos heroicons
- Indicador de campos requeridos (*)
- Textos de ayuda mejorados
- Estilos glassmorphism para secciones
- Modo oscuro completo
- Responsive design mejorado
2025-10-17 00:19:22 -06:00
e535f8d937 Mejoras finales: filtro hardcoded, orientación y contador
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 54s
- Filtrar app "perfil" de la lista (hardcoded por slug y nombre)
- Búsqueda en tiempo real con v-model (sin debounce)
- Orientación "any" para respetar dispositivo móvil
- Contador de apps con glassmorphism personalizado
- Estilos matching chips y badges de la app
- Soporte completo modo día/noche para contador
2025-10-16 23:56:48 -06:00
4c6cc7ec75 PWA: Interceptar enlaces para navegación en misma ventana
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 54s
- Agregar capture_links al manifest para captura automática
- Configurar clientsClaim y skipWaiting en workbox
- Plugin de cliente para interceptar clics en enlaces
- Interceptar window.open() para enlaces internos
- Solo activo cuando la app corre como PWA instalada
- Usar router de Nuxt para navegación interna fluida
- Detectar display-mode standalone y window-controls-overlay
2025-10-16 23:44:11 -06:00
d2162507e5 Scrollbars personalizadas con color del cielo
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 56s
- Track transparente con glassmorphism
- Thumb con gradiente de color del cielo
- Día: Celeste (#87CEEB) con brillo
- Noche: Azul oscuro con tinte morado
- Bordes y sombras para efecto de profundidad
- Hover con mayor intensidad de color
- Soporte completo para WebKit y Firefox
2025-10-16 23:39:06 -06:00
7c16cbf6c3 Agregar búsqueda de aplicaciones y fix línea blanca
- Campo de búsqueda con glassmorphism
- Filtrar por nombre, URL y descripción
- Icono de lupa y botón para limpiar búsqueda
- Persistencia en cookie (1 semana)
- Estilos completos para modo día y noche
- Eliminar border-bottom blanco de barra de título
- Agregar box-shadow: none a barra de título
2025-10-16 23:38:21 -06:00
31ef1f4198 Solución agresiva para eliminar gap en barra de título
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 57s
- Forzar margin y padding 0 en html y body
- Eliminar borders y outlines que puedan crear gap
- Aplicar reglas a contenedor raíz de Nuxt (#__nuxt)
- Forzar margin-top: 0 en la barra misma
- Agregar reglas para [data-v-app] de Nuxt UI
2025-10-16 23:34:59 -06:00
529d54b7e8 Aplicar estilo glassmorphism a chips de grupos del usuario
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 58s
- Reemplazar UBadge con spans personalizados
- Aplicar mismo estilo que filtros de grupos
- Badges primarios con color primary y glassmorphism
- Badge de conteo (+N) con estilo neutral
- Hover con efecto de elevación sutil
- Soporte completo para modo oscuro con brillo ajustado
2025-10-16 23:33:15 -06:00
05e5e9e7f8 Mejorar visibilidad de patrón y eliminar gap en barra de título
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 57s
- Aumentar opacidad del patrón en modo light (0.03 → 0.08)
- Agregar margin: 0 a la barra de título
- Forzar margin y padding: 0 en body y html
- Eliminar línea blanca entre body y barra de título
2025-10-16 23:31:03 -06:00
bb47b0e25b Mejorar estilo de filtros de grupos con glassmorphism
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 58s
- Reemplazar UButton por botones nativos con estilos personalizados
- Aplicar glassmorphism consistente con el resto de la app
- Estados normal y activo con efectos de sombra y color
- Hover con translateY para efecto de elevación
- Soporte completo para modo oscuro con opacidades ajustadas
- Botones activos con color primario y borde resaltado
2025-10-16 23:29:10 -06:00
c0a9ebe8d0 Mejorar diseño de barra de título PWA
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 55s
- Barra completamente transparente con patrón sutil de cuadrícula
- Título en chip cuadrado con bordes mínimamente redondeados
- Glassmorphism en el chip para contraste y legibilidad
- Patrón discreto (3% opacidad día, 2% noche)
- Configurar pointer-events para bloquear interacción debajo
2025-10-16 23:26:51 -06:00
563e920dad Traducción completa al español y barra de título PWA
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 2m19s
- Traducir mensajes de API a español
- Configurar idioma español en HTML y manifest (lang="es")
- Actualizar nombres de app: "Perfil Nucleo"
- Crear WindowTitleBar para Window Controls Overlay
- Ajustar padding para acomodar barra de título
- Traducir campos restantes en componentes legacy
2025-10-16 23:20:06 -06:00
44c4727588 Feature: Formulario de edición en lugar de modal
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 57s
- Crear componente UserProfileForm con diseño glassmorphism
- Alternar entre lista de apps y formulario de edición
- Quitar modal de UserHeader, usar emit event
- Agregar nuevos campos deshabilitados:
  * Avatar URL
  * Teléfono
  * Cédula
  * Fecha de nacimiento
  * NFC vinculada
  * PIN numérico
  * Código Nucleo V2
- Sistema de eventos entre componentes
2025-10-16 23:12:46 -06:00
9a3dc1f0e6 Feature: Mejorar UX del tema y persistencia
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 55s
- Mover botón editar al lado del nombre (siempre visible, sutil)
- Quitar efecto hover del header
- Detectar tema del sistema operativo automáticamente
- Actualizar theme-color dinámicamente (azul cielo día / oscuro noche)
- Usar cookies para persistir tema y filtros (1 año)
- Sincronizar filtros de apps con cookies
2025-10-16 23:03:43 -06:00
8b94e81dc8 Feature: Obtener iconos automáticamente de las aplicaciones
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 54s
- Intentar meta_icon de Authentik primero
- Buscar apple-touch-icon.png del dominio (PWA)
- Intentar favicon.ico como fallback
- Mostrar icono por defecto si todo falla
- Sistema de retry inteligente para evitar requests duplicados
2025-10-16 22:56:15 -06:00
bc19956e10 Style: Cambiar color de email a gris claro en modo oscuro
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 54s
2025-10-16 22:53:48 -06:00
f090570af0 Style: Hacer cards de apps más transparentes en modo oscuro
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 55s
- Cambiar opacidad de 0.85 a 0.65
- Permite ver mejor el fondo nocturno
2025-10-16 22:52:19 -06:00
16f74829a6 Fix: Sincronizar tema con clase dark de Nuxt UI y arreglar selectores CSS
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 55s
- Agregar función applyThemeClass para sincronizar con HTML
- Aplicar clase dark/light al elemento HTML
- Agregar watcher para actualizar clase en cambios de tema
- Inicializar clase correcta en onMounted
- Separar estilos dark mode en bloque sin scoped
- Usar selectores .dark directos en lugar de :global(.dark)
- Agregar !important para superar especificidad de scoped
2025-10-16 22:49:54 -06:00
00c9d9578a Fix: Sincronizar tema con clase dark de Nuxt UI
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 53s
- Agregar función applyThemeClass para sincronizar con HTML
- Aplicar clase dark/light al elemento HTML
- Agregar watcher para actualizar clase en cambios de tema
- Inicializar clase correcta en onMounted
2025-10-16 22:22:51 -06:00
32c9006ca0 Style: Mejorar contraste en modo oscuro
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 56s
- Contenedores principales mucho más transparentes (0.15)
- Cards de aplicaciones negras sólidas (0.85)
- Mantener efectos 3D en todas las cards
2025-10-16 22:12:58 -06:00