refactor(ui): Rediseño completo de UI con Nuxt UI 4

- Nuevo layout responsivo mobile-first con tabs inferiores
- Sidebar colapsable en desktop con cola de impresión
- Sistema de templates reutilizables con localStorage
- Soporte Dark/Light mode con UColorModeButton
- Composables usePrintQueue y useTemplates para estado global
- Componentes modulares: CommandBuilder, QuickActions, PrintQueue, QueueItem
- Navegación por tabs: Constructor | Cola | Templates
This commit is contained in:
2025-11-24 17:46:20 -06:00
parent f3c13b356b
commit 470ecef4f1
39 changed files with 16114 additions and 1856 deletions

View File

@@ -0,0 +1,47 @@
<script setup lang="ts">
const queue = usePrintQueue()
</script>
<template>
<div class="space-y-3">
<div v-if="queue.operations.value.length === 0" class="text-center py-8">
<UIcon name="i-heroicons-queue-list" class="w-12 h-12 text-gray-400 dark:text-gray-600 mx-auto mb-2" />
<p class="text-gray-500 dark:text-gray-400">
No hay comandos en la cola
</p>
<p class="text-sm text-gray-400 dark:text-gray-500">
Usa el constructor para agregar comandos
</p>
</div>
<TransitionGroup name="list" tag="div" class="space-y-2">
<QueueQueueItem
v-for="(op, index) in queue.operations.value"
:key="index"
:operation="op"
:index="index"
:is-first="index === 0"
:is-last="index === queue.operations.value.length - 1"
@update="(newOp) => queue.updateOperation(index, newOp)"
@remove="queue.removeOperation(index)"
@move-up="queue.moveOperation(index, 'up')"
@move-down="queue.moveOperation(index, 'down')"
/>
</TransitionGroup>
</div>
</template>
<style scoped>
.list-enter-active,
.list-leave-active {
transition: all 0.3s ease;
}
.list-enter-from,
.list-leave-to {
opacity: 0;
transform: translateX(-30px);
}
.list-move {
transition: transform 0.3s ease;
}
</style>