feat: refonte UX du dashboard (coquille, tri/filtre/pagination, ⌘K, toasts)

Refonte front (packages/web) : coquille applicative partagée (sidebar desktop +
barre d'onglets mobile + PageHeader, langue/push/logout centralisés) pilotée par
route.meta.layout ; design system (BaseButton/BaseBadge/SegmentedControl/EmptyState/
SkeletonRow, anneau de focus, icônes @lucide/vue) ; tri/filtre/recherche/pagination
côté client via useListControls (+ synchro URL) sur sessions/worktrees/groupes ;
section « À traiter », palette de commandes ⌘K, toasts. Aucune modif serveur/protocole/DB.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Johan LEROY
2026-06-18 11:47:36 +02:00
co-authored by Claude Opus 4.8
parent 8a8018a6fc
commit b0e8a93caa
41 changed files with 2416 additions and 448 deletions
@@ -0,0 +1,17 @@
<template>
<div class="flex flex-col items-center gap-2 rounded-xl border border-dashed border-zinc-800 px-6 py-10 text-center">
<component :is="icon" v-if="icon" :size="32" class="text-zinc-600" :stroke-width="1.5" />
<p class="text-sm font-medium text-zinc-300">{{ title }}</p>
<p v-if="hint" class="max-w-sm text-xs text-zinc-500">{{ hint }}</p>
<div v-if="$slots.action" class="mt-1">
<slot name="action" />
</div>
</div>
</template>
<script setup lang="ts">
// État vide soigné (icône + titre + indice + CTA) — remplace les <p text-zinc-500> plats.
import type { Component } from 'vue';
defineProps<{ icon?: Component; title: string; hint?: string }>();
</script>