Commit Graph

137 Commits

Author SHA1 Message Date
893e57611b fix: renombrar app a NucleoV3
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 58s
2025-12-05 13:14:50 -06:00
a2b50c8b30 fix: actualizar iconos maskable con diseño azul
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m0s
2025-12-05 13:10:44 -06:00
eeaf64e9f4 fix: unificar iconos PWA y corregir favicon
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m0s
2025-12-05 13:06:07 -06:00
cf00b0340e Activar filtro Presentes por defecto
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 57s
2025-12-05 12:20:09 -06:00
eb5fa191c1 Agregar filtro Solo Presentes y reorganizar filtros
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 57s
- Reorganizar filtros (ID, Teléfono, Empleados, Presentes) en una fila con wrap
- Agregar checkbox 'Presentes' basado en tabla Asistencias de Supabase
- Crear endpoint /api/contacts/presentes que consulta última asistencia sin salida
- Integrar filtro de presentes en useContacts con carga lazy
2025-12-05 12:17:15 -06:00
39a01d351b Corregir componentes de contactos y filtrar solo con teléfono
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m0s
- Renombrar componentes: ContactsFilters→Filters, ContactItem→Item, ContactsList→List
- Actualizar referencias en List.vue y app.vue
- Filtrar solo contactos con teléfono registrado
- Los filtros ahora deberían mostrarse correctamente
2025-12-05 12:10:16 -06:00
a017423282 Corregir binding reactivo de filtros en ContactsFilters
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 57s
- Cambiar de computed único a computed individuales por filtro
- Cada filtro ahora emite correctamente update:modelValue
- Los filtros funcionan en tiempo real (nombre fuzzy, ID, teléfono, empleado)
2025-12-05 12:06:03 -06:00
6da1552ae1 fix: usar field IDs numéricos en query Metabase
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 59s
El filtro de empleados no funcionaba porque Metabase
requiere IDs de campo numéricos (463 para empleado, 453 para id)
en lugar de nombres de campo como strings.
2025-12-05 12:01:20 -06:00
ed2f8b1107 Importar ContactsList explícitamente en app.vue
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 57s
2025-12-05 11:57:53 -06:00
d98c182a2d Redeploy con variables de Metabase configuradas
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 9s
2025-12-05 11:45:40 -06:00
59f25adabe Agregar sección Contactos con UTabs y conexión a Metabase
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 2m37s
- Implementar UTabs (Contactos, Aplicaciones, Perfil) en app.vue
- Crear componentes ContactsList, ContactsFilters, ContactItem
- Agregar server routes para obtener contactos via Metabase API
- Sistema de aliases por usuario guardados en archivos JSON
- Filtros: nombre (fuzzy search), ID, teléfono, empleado
- Click en contacto abre WhatsApp
- Estilo glassmorphism consistente con la app
2025-12-05 11:41:26 -06:00
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