Feat: Reorganizar controles de sesión y mejorar UX
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m5s
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m5s
- 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
This commit is contained in:
@@ -51,6 +51,13 @@
|
|||||||
>
|
>
|
||||||
<UIcon name="i-lucide-download" class="w-5 h-5" />
|
<UIcon name="i-lucide-download" class="w-5 h-5" />
|
||||||
</button>
|
</button>
|
||||||
|
<button
|
||||||
|
class="cata-button p-2 flex items-center justify-center hidden sm:flex"
|
||||||
|
title="Finalizar sesión"
|
||||||
|
@click="finalizarSesion"
|
||||||
|
>
|
||||||
|
<UIcon name="i-lucide-check-circle" class="w-5 h-5" />
|
||||||
|
</button>
|
||||||
<button
|
<button
|
||||||
class="cata-button p-2 flex items-center justify-center"
|
class="cata-button p-2 flex items-center justify-center"
|
||||||
@click="toggleTheme"
|
@click="toggleTheme"
|
||||||
@@ -97,6 +104,13 @@
|
|||||||
<UIcon name="i-lucide-download" class="w-4 h-4 inline mr-2" />
|
<UIcon name="i-lucide-download" class="w-4 h-4 inline mr-2" />
|
||||||
Exportar Sesión
|
Exportar Sesión
|
||||||
</button>
|
</button>
|
||||||
|
<button
|
||||||
|
class="menu-item cata-text w-full text-left px-3 py-2 hover:bg-primary/10 rounded"
|
||||||
|
@click="finalizarSesion"
|
||||||
|
>
|
||||||
|
<UIcon name="i-lucide-check-circle" class="w-4 h-4 inline mr-2" />
|
||||||
|
Finalizar Sesión
|
||||||
|
</button>
|
||||||
<button
|
<button
|
||||||
class="menu-item cata-text w-full text-left px-3 py-2 hover:bg-primary/10 rounded text-error"
|
class="menu-item cata-text w-full text-left px-3 py-2 hover:bg-primary/10 rounded text-error"
|
||||||
@click="confirmarEliminar"
|
@click="confirmarEliminar"
|
||||||
@@ -136,7 +150,7 @@
|
|||||||
:items="accordionItems"
|
:items="accordionItems"
|
||||||
:ui="{
|
:ui="{
|
||||||
item: 'mb-4 last:mb-0 cata-outline-box rounded-lg overflow-hidden',
|
item: 'mb-4 last:mb-0 cata-outline-box rounded-lg overflow-hidden',
|
||||||
trigger: 'w-full px-4 py-3 hover:bg-primary/5 transition-colors',
|
trigger: 'accordion-trigger w-full px-4 py-3 transition-colors',
|
||||||
content: 'border-t border-default',
|
content: 'border-t border-default',
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
@@ -164,14 +178,17 @@
|
|||||||
</UAccordion>
|
</UAccordion>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Botón flotante de finalizar -->
|
<!-- Botón flotante para colapsar/expandir -->
|
||||||
<div class="floating-action">
|
<div class="floating-action">
|
||||||
<button
|
<button
|
||||||
class="cata-button px-6 py-3 shadow-lg"
|
class="cata-button p-3 rounded-full shadow-lg"
|
||||||
@click="finalizarSesion"
|
@click="toggleCollapseAll"
|
||||||
|
:title="todosColapsados ? 'Expandir todas las muestras' : 'Colapsar todas las muestras'"
|
||||||
>
|
>
|
||||||
<UIcon name="i-lucide-check-circle" class="w-5 h-5 inline mr-2" />
|
<UIcon
|
||||||
Finalizar Sesión
|
:name="todosColapsados ? 'i-lucide-maximize-2' : 'i-lucide-minimize-2'"
|
||||||
|
class="w-6 h-6"
|
||||||
|
/>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -252,6 +269,22 @@ const obtenerMuestraPorValue = (value: string): Muestra | null => {
|
|||||||
return sesionActiva.value.muestras.find(m => m.muestraId === muestraId) || 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
|
// Inicializar al montar
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
await inicializar()
|
await inicializar()
|
||||||
@@ -385,6 +418,15 @@ onMounted(() => {
|
|||||||
gap: 0.25rem;
|
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 button */
|
||||||
.floating-action {
|
.floating-action {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
|
|||||||
Reference in New Issue
Block a user