From 9daafc2a3e4efae7361077ccb355fe81d40bfa0c Mon Sep 17 00:00:00 2001 From: josedario87 Date: Sat, 18 Oct 2025 03:33:09 -0600 Subject: [PATCH] =?UTF-8?q?Feat:=20Reorganizar=20controles=20de=20sesi?= =?UTF-8?q?=C3=B3n=20y=20mejorar=20UX?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Mover botón Finalizar Sesión del flotante al header - Cambiar botón flotante para colapsar/expandir todos los acordiones - Agregar opción Finalizar Sesión al menú desplegable móvil - Implementar función toggleCollapseAll para control de acordiones - Agregar computed todosColapsados para estado de acordiones - Usar iconos maximize-2/minimize-2 según estado - Hacer botón flotante circular para mejor identificación - Arreglar hover de acordiones para usar color personalizado - Agregar estilos :deep() para .accordion-trigger:hover - Usar color-mix con var(--cata-primary) en hover - Aplicar 5% opacidad en modo claro, 10% en modo oscuro --- nuxt4/app/pages/cata/sesion.vue | 54 +++++++++++++++++++++++++++++---- 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/nuxt4/app/pages/cata/sesion.vue b/nuxt4/app/pages/cata/sesion.vue index 0b9b9dd..e0cb420 100644 --- a/nuxt4/app/pages/cata/sesion.vue +++ b/nuxt4/app/pages/cata/sesion.vue @@ -51,6 +51,13 @@ > + + @@ -252,6 +269,22 @@ const obtenerMuestraPorValue = (value: string): Muestra | null => { return sesionActiva.value.muestras.find(m => m.muestraId === muestraId) || null } +// Verificar si todos los acordiones están colapsados +const todosColapsados = computed(() => { + return accordionAbierto.value.length === 0 +}) + +// Colapsar o expandir todos los acordiones +const toggleCollapseAll = () => { + if (todosColapsados.value) { + // Expandir todos: agregar todos los values + accordionAbierto.value = accordionItems.value.map(item => item.value) + } else { + // Colapsar todos: vaciar el array + accordionAbierto.value = [] + } +} + // Inicializar al montar onMounted(async () => { await inicializar() @@ -385,6 +418,15 @@ onMounted(() => { gap: 0.25rem; } +/* Accordion hover usando color personalizado */ +:deep(.accordion-trigger:hover) { + background-color: color-mix(in srgb, var(--cata-primary) 5%, transparent); +} + +:deep(.dark .accordion-trigger:hover) { + background-color: color-mix(in srgb, var(--cata-primary) 10%, transparent); +} + /* Floating action button */ .floating-action { position: fixed;