Commit Graph

87 Commits

Author SHA1 Message Date
1ef86d4281 Feat: Aumentar blur del overlay en modal de asignación rápida
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m7s
CAMBIOS:

1. Blur aumentado de 4px a 10px:
   - Antes: backdrop-filter: blur(4px)
   - Ahora: backdrop-filter: blur(10px)
   - Efecto más agresivo en el fondo

2. Opacidad aumentada de 0.85 a 0.90:
   - Fondo ligeramente más oscuro
   - Mejor enfoque en el modal

3. Compatibilidad mejorada:
   - Agregado -webkit-backdrop-filter para WebKit
   - Mejor soporte en Safari y navegadores basados en Chromium

RESULTADO:
El modal ahora tiene un efecto de blur medianamente agresivo
que ayuda a enfocar la atención en el contenido del modal.
2025-10-19 02:57:04 -06:00
281fc23118 Feat: Usar UInputNumber con botones +/- y sincronización automática
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m6s
CAMBIOS PRINCIPALES:

1. Reemplazar inputs normales por UInputNumber:
   - Ahora tienen botones +/- integrados
   - Mejor UX con controles visuales
   - Validación automática de min/max/step

2. Configuración de cada input:
   - Sumatoria Afectiva: step="1" (8-72)
   - SCAA Score: step="0.25" (58.00-100.00)
   - SCAA con format-options para 2 decimales

3. Doble sistema de handlers:

   a) Para botones +/- (@update:model-value):
      - onSumatoriaChangeFromButtons()
      - onScaaChangeFromButtons()
      - Sincronización AUTOMÁTICA e INMEDIATA
      - No espera blur, actualiza al instante

   b) Para escritura manual (@blur):
      - onSumatoriaBlur()
      - onScaaBlur()
      - Validación solo al perder foco
      - Permite edición libre

4. Sincronización bidireccional:
   - Modificar Sumatoria → actualiza SCAA
   - Modificar SCAA → actualiza Sumatoria
   - Funciona con botones +/- Y con escritura manual

BENEFICIOS:
 Botones +/- funcionan de 1 en 1 y 0.25 en 0.25
 Sincronización automática al usar botones
 Edición manual sigue funcionando (solo valida en blur)
 Mejor UX con controles visuales
 SCAA Score muestra siempre 2 decimales
2025-10-19 02:53:51 -06:00
4e6c5f7b5d Fix: Mejorar UX de inputs en asignación rápida
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m5s
PROBLEMAS RESUELTOS:

1. Inputs actualizaban en cada tecla (@input):
   - Impedía borrar números (ej: no se podía borrar el 9)
   - Hacía malabares para cambiar valores

2. Rango incorrecto de Sumatoria Afectiva:
   - Era 9-90 pero debería ser 8-72
   - 8 categorías × 1 punto mínimo = 8
   - 8 categorías × 9 puntos máximo = 72

SOLUCIONES:

1. Cambio de eventos:
   - @input → @blur en ambos inputs
   - Ahora solo actualiza al perder el foco
   - Permite editar libremente (borrar, reescribir)

2. Rangos corregidos:
   - Sumatoria Afectiva: 8-72 (antes 9-90)
   - SCAA Score: 58.00-100.00 (antes 58.75-112.00)
   - Valor por defecto: 40 (antes 45)

3. Validaciones mejoradas:
   - No valida mientras se escribe
   - Solo valida al perder foco (blur)
   - Maneja valores inválidos (NaN, null) reseteando a 40
   - Permite borrar y reescribir sin restricciones

BENEFICIOS:
- Ahora se puede borrar el 9 sin problemas
- Se puede escribir cualquier número sin interferencias
- La sincronización ocurre solo al terminar de editar
2025-10-19 02:46:18 -06:00
e36d7dac6b Fix: Redondear SCAA Score a múltiplos de 0.25
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m5s
PROBLEMA:
El SCAA Score debe moverse en steps de 0.25 (no aceptar
cualquier valor decimal racional).

SOLUCIÓN:

1. Nueva función en catacion.ts:
   - redondearA025(): Redondea al múltiplo de 0.25 más cercano
   - Math.round(valor / 0.25) * 0.25

2. Aplicado en todas las funciones de SCAA:
   - calcularSCAA(): redondea el resultado final
   - sumatoriaAfectivaASCAA(): redondea la conversión

3. ModalAsignacionRapida.vue:
   - Input step cambiado de 0.01 a 0.25
   - onScaaChange(): redondea el valor ingresado
   - Placeholder actualizado: 58.75-112.00

VALORES VÁLIDOS:
Ahora el SCAA Score solo puede tener valores como:
- 85.00, 85.25, 85.50, 85.75, 86.00, etc.
- Nunca valores como 85.17 o 85.33

La visualización con .toFixed(2) sigue mostrando 2 decimales
correctamente.
2025-10-19 02:37:35 -06:00
b1f008ab26 Feat: Mostrar SCAA Score en header de acordeones
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m6s
CAMBIOS EN ResumenMuestra.vue:

1. Header de acordeón ahora muestra DOS puntajes:
   - Sumatoria Afectiva (Σ): suma de valores afectivos (1-9)
   - SCAA Score: score calculado con fórmula completa

2. Layout:
   - Ambos badges alineados a la derecha
   - Centrados verticalmente en el header
   - Sumatoria con color neutro (primary)
   - SCAA con colores según valor (excelente/muy-bueno/bueno/regular/bajo)

3. Badges compactos:
   - Label abreviado: "Σ" para Sumatoria, "SCAA" para SCAA Score
   - Valores con 2 decimales para SCAA
   - Responsive: se ajustan en mobile

4. Colores según SCAA Score:
   - ≥90: Verde (excelente)
   - ≥85: Azul (muy bueno)
   - ≥80: Naranja (bueno)
   - ≥70: Rojo (regular)
   - <70: Gris (bajo)
2025-10-19 02:31:44 -06:00
58751467cf Feat: Implementar SCAA Score y conversión bidireccional
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m7s
CAMBIOS PRINCIPALES:

1. Nueva fórmula de SCAA Score:
   - S = 0.65625 × Σhᵢ + 52.75 - 2u - 4d
   - Donde hᵢ = puntaje afectivo (1-9)
   - u = tazas no uniformes, d = tazas defectuosas

2. Funciones de cálculo (catacion.ts):
   - calcularSumatoriaAfectiva(): suma de valores afectivos
   - calcularSCAA(): calcula SCAA Score con penalizaciones
   - scaaASumatoriaAfectiva(): conversión inversa (sin penalizaciones)
   - sumatoriaAfectivaASCAA(): conversión directa (sin penalizaciones)

3. FormularioMuestra.vue:
   - Mostrar ambos scores en el acordeón
   - "Sumatoria Afectiva" (entero, suma de afectivos)
   - "SCAA Score" (decimal, con 2 decimales)

4. ModalAsignacionRapida.vue:
   - Doble input: Sumatoria Afectiva + SCAA Score
   - Sincronización bidireccional automática
   - Al modificar Sumatoria → actualiza SCAA
   - Al modificar SCAA → calcula Sumatoria más cercana
   - Validación y redondeo para mantener enteros válidos
   - Rango: Sumatoria 9-90, SCAA 58.65-112.00

NOTAS:
- En asignación rápida no se toman en cuenta penalizaciones
- SCAA Score acepta decimales, Sumatoria solo enteros
- Múltiples SCAA Scores pueden apuntar al mismo entero
2025-10-19 02:26:37 -06:00
e5275d223e Fix: Corregir escalas de intensidad y cálculo de puntaje final
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m6s
CAMBIOS CRÍTICOS EN ESCALAS:
- Escala descriptiva: 1-10 → 1-15
- Escala afectiva: 1-15 → 1-9
- Puntaje final: suma de afectivos (no descriptivos)
- Rango puntaje final: 9-90 (8 categorías × 1-9 afectivo)

Iconos de selección en SelectorFamilia:
- Fragancia/Aroma: i-heroicons-check-circle-solid
- Sabor: i-heroicons-check-badge-solid
- Eliminar textos de títulos para interfaz más limpia

Actualizar calcularPuntajeFinal (catacion.ts):
- Cambiar suma de descriptivos a afectivos
- Actualizar comentarios JSDoc

Actualizar SelectorIntensidad:
- Máximo descriptiva: 10 → 15
- Máximo afectiva: 15 → 9
- Actualizar comentarios y tipos

Actualizar ModalAsignacionRapida:
- Rango de entrada: 8-80 → 9-90
- Modificar valores afectivos (no descriptivos)
- Valor por defecto: 40 → 45
- Actualizar validaciones de rango

Actualizar FormularioMuestra:
- aplicarAsignacionRapida usa tipo 'afectiva'
- Texto: "Suma de valores afectivos"

IMPORTANTE: Estos cambios afectan toda la lógica de puntuación
2025-10-19 01:52:08 -06:00
fe24b3e724 Refactor: Simplificar SelectorFamilia y agregar iconos contextuales
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m7s
- Eliminar títulos de secciones para interfaz más limpia
  - Quitar "Categorías (selección múltiple)"
  - Quitar "Subcategorías (selección múltiple)"
  - Quitar "Nota Específica"

- Implementar iconos contextuales para marcar selecciones
  - Fragancia/Aroma: i-lucide-wind (viento/aroma)
  - Sabor: i-lucide-ice-cream-cone (comida/sabor)
  - Aplicar tanto en categorías como subcategorías
  - Reemplazar check genérico por iconos específicos según tipo

- Interfaz más intuitiva con iconos semánticos
2025-10-19 01:40:06 -06:00
7ba16e99bf Refactor: Mejorar badges y chips de la interfaz
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m5s
- Reemplazar texto "Target:" por icono de diana (i-lucide-target)
  - Mostrar icono con color primario + puntaje deseado
  - Más visual e intuitivo

- Igualar opacidad de badges descriptivo y afectivo
  - Cambiar todos los badges descriptivos de opacity: 0.4 a 0.7
  - Ahora ambos badges tienen la misma tonalidad/visibilidad
  - Aplica en todas las categorías (Fragancia, Aroma, Sabor, etc.)

- Hacer badges de filtro rectangulares
  - Cambiar border-radius de subcategoria-chip de 9999px a 0.375rem
  - Consistencia visual con el resto de badges y botones rectangulares
  - Aplica a filtros de subcategorías debajo de tabs
2025-10-19 01:31:35 -06:00
fd0de74c2e Feat: Personalizar backdrop del modal y agregar puntaje target en footer
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m5s
- Cambiar color del backdrop/overlay del modal
  - Usar color de fondo del usuario (var(--cata-bg))
  - Aplicar opacidad de 0.85
  - Mantener blur de 4px para efecto de profundidad

- Agregar puntaje target en footer del paso 2
  - Mostrar "Target: [puntaje]" alineado a la izquierda
  - Botones (Cancelar/Aplicar) alineados a la derecha
  - Usar justify-between para distribución espaciada

- Mejorar experiencia visual con colores personalizados del usuario
2025-10-19 01:25:30 -06:00
5049e54d37 Refactor: Simplificar botón de asignación rápida y arreglar estilos del modal
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m5s
- Eliminar componente BotonNubeCaustica.vue (ya no necesario)
- Reemplazar botón especial por botón estándar con clase cata-button
- Arreglar estilos del modal para respetar colores personalizados del usuario
  - Aplicar clases cata-bg a content, header, body y footer
  - Aplicar clase cata-text al título mediante slot personalizado
  - Aplicar clase cata-outline-box al content para bordes consistentes
  - Agregar backdrop-blur-sm al overlay
- Mantener consistencia visual con el resto de la aplicación
2025-10-19 01:21:00 -06:00
7bb531056c Fix: Asegurar inicialización correcta del valor por defecto en modal
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m8s
- Agregar watcher que resetea el estado cuando el modal se abre
- Asegurar que puntajeDeseado siempre inicie en 40
- Eliminar setTimeout del método cerrar() (ya no necesario)
- Soluciona problema donde el botón Continuar no funcionaba con valor 40
2025-10-19 01:15:01 -06:00
f7fea29437 Refactor: Simplificar modal de asignación rápida eliminando textos explicativos
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m7s
- Eliminar descripción del modal
- Simplificar paso 1: solo input sin textos explicativos
- Simplificar paso 2: subtítulo compacto con [icono] + "Sobresale"/"Palidece" + x/t
- Eliminar texto de contador duplicado
- Eliminar sección de resumen de distribución
- Interfaz más limpia y directa
2025-10-19 01:12:43 -06:00
0a8ad036c4 Feat: Usar flechas contextuales en selección de categorías
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m7s
- Categorías que sobresalen: flecha arriba (i-heroicons-arrow-up-circle-solid)
- Categorías que palidecen: flecha abajo (i-heroicons-arrow-down-circle-solid)
- Mantener color del icono según el color de cada categoría
2025-10-19 01:07:15 -06:00
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
23e94fca2f Fix: Cambiar cálculo de puntaje final para usar valores descriptivos
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m6s
- Modificar calcularPuntajeFinal para sumar intensidades descriptivas
  en lugar de afectivas
- Actualizar comentarios JSDoc para reflejar el cambio
- El puntaje final ahora refleja correctamente la suma de todas las
  puntuaciones descriptivas (1-10) de cada categoría
2025-10-19 00:38:39 -06:00
cec471bc32 Fix: Mejorar comportamiento de selectores de puntaje en Descriptiva/Afectiva
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m5s
- Evitar deselección al presionar el mismo corazón/círculo ya seleccionado
- Cambiar iconos de corazón de Lucide a Heroicons para mejor distinción visual
  - No seleccionado: i-heroicons-heart (outline)
  - Seleccionado: i-heroicons-heart-solid (relleno)
- Eliminar clase CSS icono-filled innecesaria
2025-10-19 00:34:44 -06:00
0fbc11e8f9 Feat: Implementar filtrado de muestras en tab Impresión Global
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m5s
- Crear subcategorías dinámicas basadas en las muestras de la sesión
- Los filtros en Impresión Global ahora controlan qué muestras se muestran
- Filtrar accordionItems según subcategorías activas en impresion-global
- Cada muestra aparece como opción de filtro con su nombre o "Muestra #"
2025-10-18 17:22:18 -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
d0cb7c1420 Fix: Activar flex-wrap en categorías de familia para todos los breakpoints
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m11s
- Eliminar grid en desktop para categorías principales de SelectorFamilia
- Usar flex-wrap en todos los tamaños de pantalla (igual que subcategorías)
- Mantener solo incremento de min-height en desktop (40px vs 32px)
- Resultado: categorías ahora fluyen en una sola fila con wrap cuando es necesario
2025-10-18 17:01:53 -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
d64083e831 Feat: Compactar checkboxes de SelectorFamilia y optimizar layout
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m6s
- Hacer TODOS los checkboxes mucho más compactos:
  * Categorías: min-height 36px → 32px móvil, padding reducido
  * Subcategorías: min-height 32px → 28px móvil, padding reducido
  * Iconos: 1.25rem → 1rem → 0.875rem móvil
  * Texto: 0.875rem → 0.75rem → 0.6875rem móvil
  * Gaps y espaciados reducidos en toda la UI

- Cambiar layout de categorías (padres):
  * Móvil (<= 640px): flex wrap (como subcategorías)
  * Desktop (>= 768px): grid 3 columnas
  * Permite mejor uso del espacio horizontal

- Mantener subcategorías con flex wrap (ya estaba así)
- Ajustar touch-friendly para mantener usabilidad táctil
2025-10-18 16:39:33 -06:00
0cdae3d4f5 Fix: Cambiar accordion de multiple a single con collapsible
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m6s
- Cambiar de type='multiple' a type='single' (solo un item abierto a la vez)
- Todos los accordions pueden estar cerrados (collapsible: true por defecto)
- Actualizar estado accordionAbierto de string[] a string | undefined
- Actualizar lógica toggleCollapseAll para modo single
- Agregar border-t al content del accordion para mejor separación visual
- Actualizar títulos del botón flotante: 'Abrir primera muestra' / 'Cerrar muestra abierta'
2025-10-18 16:33:24 -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
3eb9e987c7 Feat: Filtrar chips de ResumenMuestra según tab activa
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m6s
- Agregar prop tabActiva a ResumenMuestra.vue
- Implementar computed properties para filtrado:
  * mostrarChipsOrganolepticos (organoleptica + impresion-global)
  * mostrarChipsIntensidades (descriptiva-afectiva + impresion-global)
  * mostrarChipsDefectos (defectos + impresion-global)
- Envolver grupos de chips con template v-if según filtrado
- Pasar prop :tab-activa desde sesion.vue a ResumenMuestra
- En impresion-global se muestran TODOS los chips
- En otras tabs solo chips pertinentes a esa categoría
2025-10-18 16:06:35 -06:00
70051d985c Feat: Hacer chips ultra-compactos en ResumenMuestra
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m6s
- Reducir font-size de chips de 0.75rem a 0.625rem (0.5625rem en mobile)
- Reducir padding de chips de 0.25/0.5rem a 0.15/0.35rem
- Reducir gaps: entre chips de 1rem a 0.5rem, en línea de 2rem a 1.5rem
- Reducir tamaño de puntaje final y nombre de muestra
- Abreviar todas las etiquetas de chips:
  * F/A (Fragancia/Aroma), Sab (Sabor), Gus (Gustos), Sen (Sensación)
  * Fra, Aro, Sb, S.R (Sabor Residual), Aci, Dul, Sn, Imp
  * NoUnif (No Uniformes), Defec (Defectuosas)
- Eliminar espacios en arrays join (coma sin espacio)
- Optimizar responsive para mobile aún más compacto
2025-10-18 16:00:43 -06:00
e786379764 Fix: Corregir nombres de propiedades de intensidades en ResumenMuestra
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m5s
- Cambiar 'cuerpo' por 'sensacionBoca' (propiedad correcta del tipo)
- Cambiar 'balance' por 'impresionGlobal' (propiedad correcta del tipo)
- Las propiedades ahora coinciden con la interfaz Intensidades definida en catacion.ts
2025-10-18 15:54:25 -06:00
6851a9674a Feat: Agregar chips informativos completos a ResumenMuestra
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m5s
- Agregar puntaje final con badge color-coded según rangos
- Agregar chips para categorías organolépticas (fragancia/aroma, sabor, gustos, sensación)
- Agregar chips para todos los valores de intensidad (afectiva ❤️ y descriptiva 📊)
- Agregar chips condicionales para tazas no uniformes (warning)
- Agregar chips condicionales para tazas defectuosas con tipo de defecto (error)
- Layout de dos líneas: header con #/nombre/puntaje y chips informativos
- Diseño compacto y responsive
2025-10-18 15:51:13 -06:00
c624bbefa9 Refactor: Eliminar tooltips e indicadores numéricos del SelectorIntensidad
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m7s
Limpia la UI del selector de intensidad para una experiencia más minimalista:
- Eliminado atributo title que mostraba tooltips con el valor
- Eliminada sección completa de indicadores numéricos (min/valor/max)
- El componente ahora solo muestra los iconos interactivos
- Mantiene toda la funcionalidad (selección, hover, deselección)

La interfaz es ahora más limpia y el usuario puede confiar en el feedback visual de los iconos activos para conocer el valor seleccionado.
2025-10-18 15:09:15 -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
45d4b1d663 Feat: Agregar persistencia de subcategorías seleccionadas por tab
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m8s
Implementa la funcionalidad para que las subcategorías seleccionadas persistan:
- Entre cambios de tabs (cada tab mantiene sus propias subcategorías)
- Entre refrescos de página (guardado en localStorage)

Cambios técnicos:
- Modificado useCatacion.ts para guardar subcategorías por tab en lugar de array global
- Agregada función actualizarSubcategorias() que persiste en localStorage
- subcategoriasActivas ahora es computed basado en la tab activa
- Removida limpieza de subcategorías al cambiar de tab en sesion.vue
- Actualizado toggleSubcategoria para usar la nueva función de persistencia
2025-10-18 14:56:09 -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
b639aa24bb Feat: Agregar barra de subcategorías sticky debajo de tabs principales
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m7s
2025-10-18 14:38:21 -06:00
2737a9c39b Feat: Hacer accordions más compactos - reducir padding y gaps
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m7s
2025-10-18 14:26:12 -06:00
af6664c931 Refactor: Eliminar métricas y estadísticas del UI de catación para simplificar interfaz
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m8s
2025-10-18 14:16:55 -06:00
75f56c4ba9 Feat: Agregar colores representativos a iconos de categorías de familia
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m7s
2025-10-18 14:09:55 -06:00
62138b97b4 Feat: Agregar iconos representativos a categorías de familia y eliminar cuadro de selección actual
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m9s
2025-10-18 14:04:51 -06:00
261d38d7dc Feat: Agregar logo de la app junto al título RioCata en todas las páginas
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m6s
2025-10-18 04:00:39 -06:00
2509f77aa6 Fix: Eliminar estado de carga durante actualizaciones para evitar desmontaje de UI
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m9s
- No activar cargando.value durante actualizar() en useIndexedDB
- Evitar que el loading spinner desmonte todo el formulario al guardar
- Mantener UI fluida durante actualizaciones en tiempo real
2025-10-18 03:52:26 -06:00
ac98bfbc51 Fix: Usar toRaw() para convertir Proxies de Vue antes de guardar en IndexedDB
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m4s
- Usar toRaw() + JSON.parse/stringify para deep clone sin Proxies
- No modificar modificadoEn en objeto reactivo, solo en copia
- Evitar re-renderizados innecesarios manteniendo referencias estables
2025-10-18 03:48:43 -06:00
0656f15366 Feat: Mejorar diseño del botón flotante de colapsar/expandir
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m4s
- Reducir padding del botón de p-3 a p-2 (más compacto)
- Reducir tamaño del icono de w-6 h-6 a w-5 h-5
- Agregar flex items-center justify-center para centrar el icono
- Eliminar shadow con glow de color
- Usar fondo sólido con var(--cata-bg) en lugar de transparente
- Aplicar sombra simple con rgba (sin color del tema)
- Eliminar ajustes responsive de padding innecesarios
- Mejorar z-index para que se sobreponga correctamente a elementos
2025-10-18 03:43:15 -06:00
35a7898312 Fix: Clonar sesión al guardar en IndexedDB para eliminar proxies de Vue
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m6s
- Agregar clonación en saveSession() y updateSession()
- Mantener mutaciones directas en el estado reactivo
- Resolver error DataCloneError al guardar objetos reactivos en IndexedDB
2025-10-18 03:41:23 -06:00
f17ff66613 Fix: Eliminar re-renderizados usando mutaciones directas en lugar de clonaciones
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m4s
- Modificar useIndexedDB para no reemplazar sesionActiva en actualizar()
- Modificar useCatacion para mutar directamente las propiedades
- Eliminar todas las clonaciones con JSON.parse/stringify
- Mantener referencias de objetos estables para Vue reactivity
2025-10-18 03:36:13 -06:00
9daafc2a3e Feat: Reorganizar controles de sesión y mejorar UX
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
2025-10-18 03:33:09 -06:00
8ad0b0b131 Fix: Eliminar re-renderizados innecesarios en accordiones
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m5s
- Remover JSON.parse(JSON.stringify()) de accordionItems computed
- Remover clonación innecesaria en obtenerMuestraPorValue
- Pasar referencias directas en lugar de copias profundas
- Los accordiones ahora mantienen su estado sin parpadeos
- Mejora significativa en la fluidez de la interfaz

El problema era que al clonar las muestras en cada render, Vue detectaba
objetos "nuevos" y re-montaba completamente los componentes accordion,
causando un efecto visual de parpadeo cada vez que se actualizaba un valor.
2025-10-18 03:30:40 -06:00