diff --git a/packages/web/src/components/SessionStateBadge.vue b/packages/web/src/components/SessionStateBadge.vue index 40343b0..235eb6c 100644 --- a/packages/web/src/components/SessionStateBadge.vue +++ b/packages/web/src/components/SessionStateBadge.vue @@ -13,6 +13,7 @@ import { computed } from 'vue'; import { useI18n } from 'vue-i18n'; import type { SessionSummary } from '@arboretum/shared'; +import { TONE_BADGE, TONE_DOT, activityTone, activityPulses } from '../lib/status-tokens'; const props = defineProps<{ session: SessionSummary }>(); const { t } = useI18n(); @@ -20,14 +21,7 @@ const { t } = useI18n(); // activity (P3-B, managées) prime ; registryStatus (P2, découvertes) en repli. const activity = computed(() => props.session.activity ?? props.session.registryStatus ?? null); const label = computed(() => (activity.value ? t(`sessions.registryStatus.${activity.value}`) : t('sessions.live'))); -const badgeClass = computed(() => ({ - 'bg-amber-950 text-amber-300': activity.value === 'waiting', - 'bg-sky-950 text-sky-300': activity.value === 'busy', - 'bg-emerald-950 text-emerald-400': activity.value === 'idle' || activity.value === null, -})); -const dotClass = computed(() => ({ - 'bg-amber-300 animate-pulse': activity.value === 'waiting', - 'bg-sky-300 animate-pulse': activity.value === 'busy', - 'bg-emerald-400': activity.value === 'idle' || activity.value === null, -})); +const tone = computed(() => activityTone(activity.value)); +const badgeClass = computed(() => TONE_BADGE[tone.value]); +const dotClass = computed(() => [TONE_DOT[tone.value], activityPulses(activity.value) ? 'animate-pulse' : '']); diff --git a/packages/web/src/components/TerminalCell.vue b/packages/web/src/components/TerminalCell.vue index 6ea2c07..e90ecd4 100644 --- a/packages/web/src/components/TerminalCell.vue +++ b/packages/web/src/components/TerminalCell.vue @@ -1,6 +1,6 @@