Estados del icono de la barra de menú
Autor: steipete · Actualizado: 2025-12-06 · Alcance: app macOS (apps/macos)
- Inactivo: Animación normal del icono (parpadeo, movimiento ocasional).
- Pausado: El elemento de estado usa
appearsDisabled; sin movimiento. - Activación por voz (orejas grandes): El detector de activación por voz llama a
AppState.triggerVoiceEars(ttl: nil)cuando se escucha la palabra de activación, manteniendoearBoostActive=truemientras se captura la pronunciación. Las orejas se agrandan (1.9x), obtienen agujeros circulares para legibilidad, y luego bajan víastopVoiceEars()tras 1s de silencio. Solo se dispara desde el pipeline de voz de la app. - Trabajando (agente activo):
AppState.isWorking=trueimpulsa un micro-movimiento de “cola/patas corriendo”: movimiento de patas más rápido y ligero desplazamiento mientras hay trabajo en curso. Actualmente se alterna en las ejecuciones del agente de WebChat; añade el mismo toggle en otras tareas largas cuando las conectes.
Puntos de conexión
- Activación por voz: el runtime/tester llama a
AppState.triggerVoiceEars(ttl: nil)al activarse ystopVoiceEars()tras 1s de silencio para coincidir con la ventana de captura. - Actividad del agente: configura
AppStateStore.shared.setWorking(true/false)alrededor de los períodos de trabajo (ya implementado en la llamada del agente de WebChat). Mantén los períodos cortos y resetea en bloquesdeferpara evitar animaciones atascadas.
Formas y tamaños
- El icono base se dibuja en
CritterIconRenderer.makeIcon(blink:legWiggle:earWiggle:earScale:earHoles:). - La escala de orejas por defecto es
1.0; el boost de voz estableceearScale=1.9y alternaearHoles=truesin cambiar el frame general (imagen de plantilla de 18×18 pt renderizada en un backing store Retina de 36×36 px). - El movimiento usa wiggle de patas hasta ~1.0 con un pequeño temblor horizontal; es aditivo a cualquier wiggle de inactividad existente.
Notas de comportamiento
- No hay toggle externo de CLI/broker para orejas/trabajando; mantenlo interno a las señales propias de la app para evitar parpadeo accidental.
- Mantén los TTLs cortos (<10s) para que el icono vuelva al estado base rápidamente si un trabajo se cuelga.