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:
@@ -5,6 +5,12 @@ export default {
|
||||
cancel: 'Cancel',
|
||||
logout: 'Log out',
|
||||
language: 'Language',
|
||||
refresh: 'Refresh',
|
||||
back: 'Back',
|
||||
search: 'Search',
|
||||
settings: 'Settings',
|
||||
close: 'Close',
|
||||
retry: 'Retry',
|
||||
},
|
||||
login: {
|
||||
title: 'Sign in with your access token',
|
||||
@@ -163,4 +169,127 @@ export default {
|
||||
ws: {
|
||||
reconnecting: 'Connection lost — reconnecting…',
|
||||
},
|
||||
nav: {
|
||||
worktrees: 'Worktrees',
|
||||
sessions: 'Sessions',
|
||||
groups: 'Groups',
|
||||
settings: 'Settings',
|
||||
waiting: 'waiting',
|
||||
},
|
||||
controls: {
|
||||
searchPlaceholder: 'Search…',
|
||||
results: 'no result | 1 result | {n} results',
|
||||
sortBy: 'Sort by',
|
||||
filters: 'Filters',
|
||||
clearAll: 'Clear',
|
||||
},
|
||||
sort: {
|
||||
asc: 'Ascending',
|
||||
desc: 'Descending',
|
||||
session: {
|
||||
state: 'State',
|
||||
recent: 'Most recent',
|
||||
clients: 'Clients',
|
||||
cwd: 'Directory',
|
||||
command: 'Command',
|
||||
},
|
||||
worktree: {
|
||||
main: 'Main first',
|
||||
branch: 'Branch',
|
||||
dirty: 'Changes',
|
||||
ahead: 'Ahead',
|
||||
behind: 'Behind',
|
||||
activity: 'Activity',
|
||||
},
|
||||
repo: {
|
||||
label: 'Name',
|
||||
created: 'Created',
|
||||
worktrees: 'Worktrees',
|
||||
activity: 'Activity',
|
||||
},
|
||||
group: {
|
||||
label: 'Name',
|
||||
created: 'Created',
|
||||
repos: 'Repositories',
|
||||
activeSessions: 'Active sessions',
|
||||
},
|
||||
},
|
||||
filter: {
|
||||
state: {
|
||||
label: 'State',
|
||||
live: 'Live',
|
||||
waiting: 'Waiting',
|
||||
busy: 'Busy',
|
||||
idle: 'Idle',
|
||||
exited: 'Exited',
|
||||
resumable: 'Resumable',
|
||||
},
|
||||
command: {
|
||||
label: 'Command',
|
||||
},
|
||||
source: {
|
||||
label: 'Source',
|
||||
managed: 'Managed',
|
||||
discovered: 'Discovered',
|
||||
},
|
||||
repo: {
|
||||
label: 'Repository',
|
||||
},
|
||||
worktree: {
|
||||
dirtiness: 'Changes',
|
||||
dirty: 'Dirty',
|
||||
clean: 'Clean',
|
||||
session: 'Session',
|
||||
with: 'With session',
|
||||
without: 'Without session',
|
||||
flags: 'Flags',
|
||||
locked: 'Locked',
|
||||
prunable: 'Prunable',
|
||||
},
|
||||
},
|
||||
pagination: {
|
||||
prev: 'Previous',
|
||||
next: 'Next',
|
||||
pageOf: 'Page {page} / {pageCount}',
|
||||
perPage: 'Per page',
|
||||
all: 'All',
|
||||
},
|
||||
palette: {
|
||||
placeholder: 'Jump to repo, worktree, session, group…',
|
||||
empty: 'No match',
|
||||
hint: '↑↓ navigate · ↵ open · esc close',
|
||||
types: {
|
||||
repo: 'Repo',
|
||||
worktree: 'Worktree',
|
||||
session: 'Session',
|
||||
group: 'Group',
|
||||
action: 'Action',
|
||||
},
|
||||
actions: {
|
||||
newSession: 'New session',
|
||||
addRepo: 'Add repo',
|
||||
newGroup: 'New group',
|
||||
},
|
||||
},
|
||||
toast: {
|
||||
sessionCreated: 'Session started',
|
||||
sessionKilled: 'Session killed',
|
||||
sessionResumed: 'Session resumed',
|
||||
sessionForked: 'Session forked',
|
||||
repoAdded: 'Repository added',
|
||||
repoRemoved: 'Repository removed',
|
||||
worktreeCreated: 'Worktree created',
|
||||
worktreeDeleted: 'Worktree deleted',
|
||||
pruned: 'Worktrees pruned',
|
||||
groupCreated: 'Group created',
|
||||
groupUpdated: 'Group updated',
|
||||
groupDeleted: 'Group deleted',
|
||||
genericError: 'Something went wrong',
|
||||
dismiss: 'Dismiss',
|
||||
},
|
||||
attention: {
|
||||
title: 'Needs attention',
|
||||
count: 'no session waiting | 1 session waiting | {n} sessions waiting',
|
||||
empty: 'Nothing waiting',
|
||||
},
|
||||
};
|
||||
|
||||
@@ -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 d’accè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 d’abord',
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user