Files
arboretum/packages/web/src/components/ide/StatusBar.vue
T
johanleroy 063f5e928b feat(web): refonte visuelle « Emerald » (thème clair/sombre, polices, tokens)
Adopte le langage visuel du design system Emerald dans l'IDE web :
neutres zinc + accent emerald, polices auto-hébergées Inter + JetBrains
Mono, radii/pills mono, points de statut, motif terminal, halo/grain.
Refonte purement visuelle et additive (layout, routing, stores, protocole
inchangés).

- style.css : défauts sombres dans @theme + override clair sous
  html[data-theme=light] ; accent scindé (bright #34d399 / solid #059669 /
  hover) ; tokens border-soft/info/warn/danger/coffee ; idiomes globaux
  (focus/selection accent, scrollbars fines, jl-pulse/jl-blink, classes
  .chip/.status/.eyebrow/.label-mono/.caret/.halo/.grain, .btn*/.badge pill).
- lib/theme.ts : singleton themeMode/resolvedTheme (dark/light/system,
  persistedRef arb.theme) + application dataset.theme/metas ; script
  anti-FOUC inline dans index.html ; toggle ActivityBar + Réglages.
- Thèmes Monaco + xterm dark/light réactifs (palette ANSI + coloration
  syntaxique) ; fonts.ready + remeasureFonts pour l'alignement des glyphes.
- status-tokens : tons sémantiques tokenisés ; balayage des ~340 couleurs
  Tailwind brutes vers les tokens sur tout components/* et views/*
  (exceptions assumées commentées).
- GroupSummary.color exploité : icône de groupe teintée + ColorSwatchPicker
  (lib/group-colors.ts) dans les modals de groupe.
- Polices via @fontsource-variable/{inter,jetbrains-mono} (offline).
2026-07-20 21:30:57 +02:00

52 lines
1.8 KiB
Vue

<template>
<footer
class="flex h-[var(--ide-statusbar-h)] shrink-0 items-center gap-3 border-t border-border bg-surface-1 px-3 text-[11px] text-fg-muted"
>
<span class="flex items-center gap-1.5" :title="wsStatus">
<span class="h-2 w-2 rounded-full" :class="wsDot" />
{{ t('common.appName') }}
</span>
<GitStatusBadge v-if="activeWt" :git="activeWt.git" :branch="activeWt.branch" />
<span v-else class="text-fg-subtle">{{ t('ide.ready') }}</span>
<button
type="button"
class="ml-auto rounded px-1.5 py-0.5 transition-colors hover:bg-surface-2 hover:text-fg"
:class="ide.bottomVisible ? 'text-fg' : ''"
:title="t('ide.terminals')"
@click="ide.toggleBottom()"
>
<span class="inline-flex items-center gap-1"><SquareTerminal :size="12" /> {{ dockCount }}</span>
</button>
</footer>
</template>
<script setup lang="ts">
import { computed } from 'vue';
import { useI18n } from 'vue-i18n';
import { SquareTerminal } from '@lucide/vue';
import { useIdeStore } from '../../stores/ide';
import { useWorktreesStore } from '../../stores/worktrees';
import { wsClient } from '../../lib/ws-client';
import GitStatusBadge from '../workspace/GitStatusBadge.vue';
const { t } = useI18n();
const ide = useIdeStore();
const worktrees = useWorktreesStore();
const activeWt = computed(() => {
const c = ide.activeContext;
if (!c) return null;
return worktrees.worktrees.find((w) => w.repoId === c.repoId && w.path === c.wtPath) ?? null;
});
const wsStatus = computed(() => wsClient.status.value);
const wsDot = computed(() =>
wsStatus.value === 'open'
? 'bg-accent'
: wsStatus.value === 'reconnecting' || wsStatus.value === 'connecting'
? 'bg-warn'
: 'bg-fg-subtle',
);
const dockCount = computed(() => ide.dockSessionIds.length);
</script>