Commit Graph

15 Commits

Author SHA1 Message Date
6c9ad356b1 Fix: Actualizar modal a sintaxis Nuxt UI v4 y aplicar estilos consistentes
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m6s
- Actualizar ModalAsignacionRapida a sintaxis correcta de Nuxt UI v4
  - Usar v-model:open en lugar de v-model
  - Usar slots #body y #footer directamente
  - Eliminar UCard (deprecado)

- Aplicar clases cata-* para mantener consistencia con el resto de la app
  - Usar cata-text para textos
  - Usar cata-button para botones
  - Usar cata-input para inputs
  - Usar cata-outline-box para bordes

- Respetar colores personalizados del usuario mediante variables CSS
  - selected-category usa var(--cata-primary)
  - Soporte para modo oscuro con efectos de sombra

- Eliminar icono de estrella/rayo del BotonNubeCaustica
  - Simplificar diseño dejando solo la nube con patrones cáusticos
  - Eliminar animación sparkle asociada

- Integrar modal correctamente en FormularioMuestra
  - Mover botón dentro del slot por defecto del modal
  - Eliminar modal duplicado del template
2025-10-19 01:01:55 -06:00
f6dc2c3bce Feat: Implementar asignación rápida de puntajes con botón de nube cáustica
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m8s
- Crear ModalAsignacionRapida.vue con lógica de distribución por múltiplos de 8
  - Input numérico (8-80) para puntaje total deseado
  - Cálculo automático del múltiplo de 8 más cercano
  - Si múltiplo < valor: permite seleccionar categorías que sobresalen (+1)
  - Si múltiplo > valor: permite seleccionar categorías que palidecen (-1)
  - Si múltiplo = valor: asignación directa sin ajustes

- Crear BotonNubeCaustica.vue con diseño especial
  - Forma de nube usando SVG path
  - Animación de patrones de luz cáustica con gradientes animados
  - Efectos de brillo y ondas al hacer hover
  - Icono de rayo mágico con animación sparkle

- Integrar funcionalidad en FormularioMuestra.vue
  - Ubicar botón en esquina superior izquierda de sección Descriptiva/Afectiva
  - Aplicar puntajes calculados a todas las categorías descriptivas
  - Actualizar puntaje final automáticamente

- Corregir comentario: "Suma de valores descriptivos" (era "afectivos")
2025-10-19 00:56:20 -06:00
4e14ec0a3e Feat: Agregar Sensación en Boca y Gustos Predominantes a Impresión Global
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m6s
- Incluir selector de Sensación en la Boca en la sección Organoléptica de Impresión Global
- Incluir selector de Gustos Predominantes en la sección Organoléptica de Impresión Global
- Mantener la misma funcionalidad y estilos que en la tab Organoléptica
2025-10-18 17:18:18 -06:00
d1c644ec25 Feat: Compactar inputs de valoración y mejorar filtrado restrictivo de sliders
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m6s
- Reducir tamaño de iconos de 1.5rem a 1rem en SelectorIntensidad
- Reducir espaciado entre iconos y padding del contenedor
- Cambiar gap de grids de sliders de 4 a 2
- Implementar filtrado restrictivo por tipo (descriptiva/afectiva) y categoría
- Agregar computed properties individuales para cada slider
- Cuando se selecciona "Afectiva" + "Sensación en la Boca", solo se muestra ese slider específico
2025-10-18 17:14:06 -06:00
816a3e860a Fix: Refactorizar sensaciones en boca y hacer checkboxes ultra compactos
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m7s
CAMBIOS EN SENSACIONES EN BOCA:
- Reducir opciones a solo 5: Áspero, Aceitoso, Metálico, Deja seca la boca, Suave
- Cambiar de selección múltiple a selección única
- Actualizar tipo de sensacionEnBoca: SensacionBoca[] → SensacionBoca | null

CAMBIOS EN CHECKBOXES (sensaciones y gustos):
- Hacer checkboxes tan compactos como subcategorías de SelectorFamilia
- Usar flex-wrap en todos los breakpoints (eliminar grid en desktop)
- Dimensiones ultra compactas:
  * Desktop: min-height 32px, padding 0.375rem 0.5rem, font-size 0.75rem
  * Mobile: min-height 28px, padding 0.25rem 0.375rem, font-size 0.6875rem
  * Touch: min-height 36px para dispositivos táctiles

ARCHIVOS MODIFICADOS:
- app/types/catacion.ts: Actualizar SensacionBoca y SENSACIONES_BOCA
- app/composables/useCatacion.ts: Cambiar actualizarSensacionBoca a selección única
- app/components/cata/FormularioMuestra.vue: UI compacta y selección única
- app/components/cata/ResumenMuestra.vue: Adaptar a sensacionEnBoca única
2025-10-18 16:55:37 -06:00
4a927c57d4 Fix: Compactar checkboxes de sensaciones en boca y gustos predominantes
- Cambiar layout de grid fijo a flex-wrap en mobile para sensaciones y gustos
- Mantener grid responsive en desktop (3 columnas para sensaciones, 5 para gustos)
- Reducir significativamente todas las dimensiones para mayor compactación:
  * Desktop: min-height 36px, padding 0.375rem 0.5rem
  * Mobile: min-height 28px, padding 0.25rem 0.375rem
  * Font-size: 0.75rem desktop, 0.6875rem mobile
- Agregar animaciones y estados focus consistentes
- Touch-friendly en dispositivos táctiles (36px min-height)
2025-10-18 16:48:57 -06:00
c2ba2a561b Feat: Mejorar diseño de accordions y eliminar headers redundantes
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m4s
- Alinear puntaje final a la derecha en ResumenMuestra (ml-auto)
- Cambiar estilo de accordion: underline simple sin gap entre items
- Ajustar ancho 100% en móviles sin padding lateral (px-0 sm:px-4)
- Eliminar headers redundantes en tabs específicas:
  * Organoléptica: eliminar 'Características Organolépticas'
  * Descriptiva/Afectiva: eliminar 'Intensidades Descriptivas y Afectivas'
  * Defectos: eliminar 'Defectos y Uniformidad'
- Mantener headers en tab Impresión Global para mejor navegación
2025-10-18 16:23:49 -06:00
b1aa431549 Feat: Agregar iconos a categorías de intensidad y simplificar chips de resumen
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m5s
- Agregar función getCategoryIcon() en FormularioMuestra y ResumenMuestra
- Iconos Lucide para cada categoría:
  * fragancia: flower-2, aroma: wind, sabor: candy
  * saborResidual: timer, acidez: citrus, dulzor: cookie
  * sensacionBoca: droplets, impresionGlobal: star
- Actualizar todos los títulos de sección con iconos
- Modificar chips de ResumenMuestra para mostrar solo icono + valor descriptivo
- Eliminar valores afectivos y emojis de chips
- Agregar estilos CSS para .chip-icon
2025-10-18 16:14:11 -06:00
417b430863 Feat: Reemplazar sliders por selector de intensidad con iconos
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m6s
Crea nuevo componente SelectorIntensidad que reemplaza los sliders tradicionales por un selector tipo "rating" con iconos clicables:

Características del nuevo componente:
- Usa círculos (circle/circle-dot) para intensidad descriptiva
- Usa corazones (heart) para intensidad afectiva
- Los iconos se llenan hasta el valor seleccionado
- Efecto hover para preview
- Mismo rango: descriptiva (1-10), afectiva (1-15)
- Click en mismo valor lo deselecciona (vuelve a null)
- Soporte para colores personalizados
- Efectos de glow en modo oscuro
- Responsive (iconos más pequeños en móvil)

Cambios técnicos:
- Nuevo archivo: app/components/cata/SelectorIntensidad.vue
- Modificado: app/components/cata/FormularioMuestra.vue
  - Reemplazado CataSliderIntensidad por CataSelectorIntensidad (global)
- Mantiene la misma interfaz de props y eventos que SliderIntensidad
2025-10-18 15:03:52 -06:00
c27da68682 Feat: Mover Sensación en Boca y Gustos Predominantes a tab Organoléptica
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m8s
- Mover sección Sensaciones en Boca de Impresión Global a Organoléptica
- Mover sección Gustos Predominantes de Impresión Global a Organoléptica
- Agregar v-if mostrarSensacionBocaOrganoleptica para filtrado por subcategoría
- Agregar v-if mostrarGustosPredominantes para filtrado por subcategoría
- Renombrar Detalles Adicionales a Notas Adicionales en Impresión Global
2025-10-18 14:50:33 -06:00
8cf62f0057 Feat: Implementar selección múltiple y filtrado de subcategorías
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m5s
- Cambiar subcategoriaActiva a subcategoriasActivas (array) para permitir selección múltiple
- Agregar flex-wrap a barra de subcategorías en lugar de scroll horizontal
- Implementar toggleSubcategoria para agregar/quitar subcategorías
- Pasar subcategoriasActivas a FormularioMuestra como prop
- Agregar helpers deberMostrarSeccion para filtrar inputs
- Aplicar v-if a todas las secciones según subcategorías activas
- Botón Limpiar Todo para resetear filtros
2025-10-18 14:47:38 -06:00
ab47142966 Fix: Validar estructura de datos de colores personalizados
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m6s
- Agregar validación completa en loadCustomColors para detectar formato incompatible
- Proteger setCustomColors asegurando que la estructura existe antes de asignar
- Validar estructura en getCurrentColors y retornar defaults si no existe
- Validar estructura en hasCustomColors y retornar false si no existe
- Validar estructura en inicializar antes de aplicar colores
- Limpiar localStorage automáticamente si detecta formato antiguo o corrupto

Soluciona error: TypeError Cannot create property 'primary' on string
cuando localStorage contiene datos de versión anterior
2025-10-18 03:25:28 -06:00
9ffba43ab4 Feat: Implementar paleta de colores por categoría en sliders
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m6s
- Agregar composable useCategoryColors con 8 colores coordinados (light/dark)
- Colores por categoría: Fragancia (lavanda), Aroma (verde menta), Sabor (rojo),
  Sabor Residual (naranja), Acidez (amarillo), Dulzor (rosa), Sensación en Boca (azul),
  Impresión Global (turquesa)
- Eliminar hints de texto de SliderIntensidad (showDescription = false por defecto)
- Aplicar colores dinámicos a headers y sliders de cada categoría
- Aumentar font-weight de headers a 700 (bold)
- Los colores se adaptan automáticamente al tema light/dark
2025-10-18 03:16:30 -06:00
48e0d2f7dc Feat: Reorganizar tabs y permitir selección múltiple de categorías en notas
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m1s
- **Nuevas tabs reorganizadas:**
  - Organoléptica: Selectores de familia de fragancia-aroma y sabor
  - Descriptiva/Afectiva: Todos los sliders de intensidad (incluye impresión global)
  - Defectos: Tazas no uniformes, defectuosas y tipo de defecto
  - Impresión Global: Vista completa con todos los componentes

- **Selector de categorías mejorado:**
  - Permitir selección múltiple de categorías padre
  - Las subcategorías son la unión de las subcategorías de los padres seleccionados
  - Permitir selección múltiple de subcategorías
  - Actualizar resumen visual de selección

- **Tipos actualizados:**
  - NotaSeleccionada ahora usa arrays para categorias y subcategorias
  - TabCatacion actualizado con las nuevas tabs
  - Funciones de actualización modificadas para trabajar con arrays

- **Correcciones TypeScript:**
  - Usar JSON.parse(JSON.stringify()) para crear copias mutables de arrays readonly
  - Resolver incompatibilidades de tipos entre readonly y mutable arrays
2025-10-18 02:57:14 -06:00
87fb92d210 Feat: Implementar UI completa de RioCata - Sistema de catación de café
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m3s
Agregar sistema completo de catación de café con las siguientes características:

- Tipos TypeScript completos para sesiones, muestras, intensidades y notas
- Composable useIndexedDB para gestión de sesión activa en cliente
- Composable useCatacion con lógica de negocio para actualización de muestras
- Componentes reutilizables:
  * SliderIntensidad: Slider dual para valores descriptivos (1-10) y afectivos (1-15)
  * SelectorFamilia: Selector jerárquico de familias de notas (3 niveles)
  * SelectorTazas: Selector de tazas (1-5) para uniformidad y defectos
  * ResumenMuestra: Header de accordion con progreso y estadísticas
  * FormularioMuestra: Formulario completo con 3 tabs (Fragancia/Aroma, Sabor, Impresión Global)
- Páginas:
  * /cata: Gestión de sesiones (crear nueva o continuar existente)
  * /cata/sesion: Interfaz principal de catación con accordions y tabs
- Tema dual:
  * Modo claro: Fondo blanco, texto negro, outlines azules
  * Modo oscuro: Fondo negro, texto verde terminal, estilo monospace
- Diseño mobile-first responsive con CSS vanilla (sin @apply de Tailwind)
- Configuración PWA con almacenamiento en IndexedDB
2025-10-18 01:39:27 -06:00