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.
This commit is contained in:
2026-06-18 11:47:36 +02:00
parent c1390bfe06
commit d6c110fc3b
41 changed files with 2416 additions and 448 deletions

View File

@@ -7,6 +7,12 @@ const fr: typeof en = {
cancel: 'Annuler',
logout: 'Se déconnecter',
language: 'Langue',
refresh: 'Rafraîchir',
back: 'Retour',
search: 'Rechercher',
settings: 'Réglages',
close: 'Fermer',
retry: 'Réessayer',
},
login: {
title: 'Connectez-vous avec votre jeton daccès',
@@ -166,6 +172,129 @@ const fr: typeof en = {
ws: {
reconnecting: 'Connexion perdue — reconnexion…',
},
nav: {
worktrees: 'Worktrees',
sessions: 'Sessions',
groups: 'Groupes',
settings: 'Réglages',
waiting: 'en attente',
},
controls: {
searchPlaceholder: 'Rechercher…',
results: 'aucun résultat | 1 résultat | {n} résultats',
sortBy: 'Trier par',
filters: 'Filtres',
clearAll: 'Effacer',
},
sort: {
asc: 'Croissant',
desc: 'Décroissant',
session: {
state: 'État',
recent: 'Plus récentes',
clients: 'Clients',
cwd: 'Répertoire',
command: 'Commande',
},
worktree: {
main: 'Principal dabord',
branch: 'Branche',
dirty: 'Modifications',
ahead: 'En avance',
behind: 'En retard',
activity: 'Activité',
},
repo: {
label: 'Nom',
created: 'Créé le',
worktrees: 'Worktrees',
activity: 'Activité',
},
group: {
label: 'Nom',
created: 'Créé le',
repos: 'Dépôts',
activeSessions: 'Sessions actives',
},
},
filter: {
state: {
label: 'État',
live: 'Active',
waiting: 'En attente',
busy: 'Occupée',
idle: 'Au repos',
exited: 'Terminée',
resumable: 'Reprenable',
},
command: {
label: 'Commande',
},
source: {
label: 'Source',
managed: 'Gérée',
discovered: 'Découverte',
},
repo: {
label: 'Dépôt',
},
worktree: {
dirtiness: 'Modifications',
dirty: 'Modifié',
clean: 'Propre',
session: 'Session',
with: 'Avec session',
without: 'Sans session',
flags: 'Drapeaux',
locked: 'Verrouillé',
prunable: 'Élaguable',
},
},
pagination: {
prev: 'Précédent',
next: 'Suivant',
pageOf: 'Page {page} / {pageCount}',
perPage: 'Par page',
all: 'Tout',
},
palette: {
placeholder: 'Aller à un dépôt, worktree, session, groupe…',
empty: 'Aucun résultat',
hint: '↑↓ naviguer · ↵ ouvrir · échap fermer',
types: {
repo: 'Dépôt',
worktree: 'Worktree',
session: 'Session',
group: 'Groupe',
action: 'Action',
},
actions: {
newSession: 'Nouvelle session',
addRepo: 'Ajouter un dépôt',
newGroup: 'Nouveau groupe',
},
},
toast: {
sessionCreated: 'Session démarrée',
sessionKilled: 'Session tuée',
sessionResumed: 'Session reprise',
sessionForked: 'Session dupliquée',
repoAdded: 'Dépôt ajouté',
repoRemoved: 'Dépôt retiré',
worktreeCreated: 'Worktree créé',
worktreeDeleted: 'Worktree supprimé',
pruned: 'Worktrees élagués',
groupCreated: 'Groupe créé',
groupUpdated: 'Groupe mis à jour',
groupDeleted: 'Groupe supprimé',
genericError: 'Une erreur est survenue',
dismiss: 'Fermer',
},
attention: {
title: 'À traiter',
count: 'aucune session en attente | 1 session en attente | {n} sessions en attente',
empty: 'Rien à traiter',
},
};
export default fr;