feat(web): IDE unique comme seule coquille, ancien dashboard retiré
L'IDE (/ide) devient l'unique interface sur tous les supports (navigateur, PWA, app Electron chargent la même SPA). Tout le cycle de vie de l'ancien monde est réintégré dans l'IDE ; AppShell et les vues Dashboard / Sessions / Groups / GroupView / SessionView sont supprimés. - Infra: pile de modals Teleport (stores/modals.ts + ModalHost) et menu contextuel (useContextMenu + ContextMenu), montés dans IdeShell sans le démonter (attaches WS du dock préservées). - Explorer: créer worktree (branche + baseRef + session), travailler sur main, prune, promote (escalade force), supprimer worktree, commit/push, masquer/ supprimer repo, ajouter dépôt local ou cloner. - Sessions: create/kill/resume/fork, hide/unhide, archive/unarchive, masquer les découvertes, supervision AttentionList + réponse aux dialogues. - Groupes: create/delete, composition, lancement de session de groupe (ouvre le terminal dans le dock). - Compte: Réglages et Aide en overlays par-dessus l'IDE ; langue, push/PWA, tokens, connexions git, RGPD, déconnexion. Command Palette et deep-links recâblés pour rester dans l'IDE. - Routes: les anciens chemins rendent IdeShell via meta (overlay/panel/ terminal) ; /workspace/:repoId/:wt inchangé (contrat extension VS Code). Mobile: nav à 6 panneaux (explorer/editor/terminal/git/sessions/groups). La grille multi-terminaux de groupe est retirée (supplantée par la session de groupe unique P6 via --add-dir + le dock multi-onglets).
This commit is contained in:
@@ -1,31 +1,40 @@
|
||||
import { createRouter, createWebHistory } from 'vue-router';
|
||||
import { useAuthStore } from '../stores/auth';
|
||||
|
||||
// Type du layout choisi par App.vue : 'bare' (login, sans coquille),
|
||||
// 'shell' (sidebar + contenu centré), 'fullbleed' (terminal plein écran dans la coquille),
|
||||
// 'ide' (vue Workspace plein écran SANS coquille : gère son propre layout 3 panneaux).
|
||||
// Type du layout choisi par App.vue : 'bare' (login, plein écran) ou 'ide' (la coquille unique).
|
||||
// L'ancienne coquille (AppShell, layouts 'shell'/'fullbleed') a été retirée : tout vit dans l'IDE.
|
||||
// Les champs `overlay`/`panel`/`terminal` portent l'intention des anciennes routes (rétro-compat) :
|
||||
// l'IdeShell les lit à l'arrivée pour ouvrir l'overlay, le panneau ou le terminal correspondant.
|
||||
declare module 'vue-router' {
|
||||
interface RouteMeta {
|
||||
layout?: 'bare' | 'shell' | 'fullbleed' | 'ide';
|
||||
layout?: 'bare' | 'ide';
|
||||
overlay?: 'settings' | 'help';
|
||||
panel?: 'sessions' | 'groups';
|
||||
terminal?: boolean;
|
||||
}
|
||||
}
|
||||
|
||||
const IdeShell = () => import('../components/ide/IdeShell.vue');
|
||||
|
||||
export const router = createRouter({
|
||||
history: createWebHistory(),
|
||||
routes: [
|
||||
{ path: '/login', name: 'login', component: () => import('../views/LoginView.vue'), meta: { layout: 'bare' } },
|
||||
// Desktop : l'IDE est la vue par défaut. Mobile : supervision (dashboard + nav mobile),
|
||||
// l'IDE reste accessible via la nav mais dégrade en panneau unique.
|
||||
{ path: '/', redirect: () => (typeof window !== 'undefined' && window.innerWidth < 768 ? { name: 'dashboard' } : { name: 'ide' }) },
|
||||
{ path: '/dashboard', name: 'dashboard', component: () => import('../views/DashboardView.vue'), meta: { layout: 'shell' } },
|
||||
{ path: '/sessions', name: 'sessions', component: () => import('../views/SessionsListView.vue'), meta: { layout: 'shell' } },
|
||||
{ path: '/sessions/:id', name: 'session', component: () => import('../views/SessionView.vue'), meta: { layout: 'fullbleed' } },
|
||||
{ path: '/ide', name: 'ide', component: () => import('../components/ide/IdeShell.vue'), meta: { layout: 'ide' } },
|
||||
{ path: '/workspace/:repoId/:wt', name: 'workspace', component: () => import('../components/ide/IdeShell.vue'), meta: { layout: 'ide' } },
|
||||
{ path: '/groups', name: 'groups', component: () => import('../views/GroupsListView.vue'), meta: { layout: 'shell' } },
|
||||
{ path: '/groups/:id', name: 'group', component: () => import('../views/GroupView.vue'), meta: { layout: 'shell' } },
|
||||
{ path: '/settings', name: 'settings', component: () => import('../views/SettingsView.vue'), meta: { layout: 'shell' } },
|
||||
{ path: '/help', name: 'help', component: () => import('../views/HelpView.vue'), meta: { layout: 'shell' } },
|
||||
// L'IDE est l'unique coquille, sur tous les gabarits (dégrade en panneau unique sous 768px).
|
||||
{ path: '/', redirect: { name: 'ide' } },
|
||||
{ path: '/ide', name: 'ide', component: IdeShell, meta: { layout: 'ide' } },
|
||||
{ path: '/workspace/:repoId/:wt', name: 'workspace', component: IdeShell, meta: { layout: 'ide' } },
|
||||
// Rétro-compatibilité (bookmarks, PWA, deep-links, notifications, extension VS Code) : les
|
||||
// anciens chemins rendent l'IDE et ouvrent l'élément correspondant via `meta`. IdeShell étant le
|
||||
// même composant que /ide, vue-router réutilise l'instance sans démonter le dock (terminaux
|
||||
// préservés). `/workspace/:repoId/:wt` reste inchangé (contrat de l'extension VS Code).
|
||||
{ path: '/dashboard', redirect: { name: 'ide' } },
|
||||
{ path: '/sessions', name: 'sessions', component: IdeShell, meta: { layout: 'ide', panel: 'sessions' } },
|
||||
{ path: '/sessions/:id', name: 'session', component: IdeShell, meta: { layout: 'ide', terminal: true } },
|
||||
{ path: '/groups', name: 'groups', component: IdeShell, meta: { layout: 'ide', panel: 'groups' } },
|
||||
{ path: '/groups/:id', name: 'group', component: IdeShell, meta: { layout: 'ide', panel: 'groups' } },
|
||||
{ path: '/settings', name: 'settings', component: IdeShell, meta: { layout: 'ide', overlay: 'settings' } },
|
||||
{ path: '/help', name: 'help', component: IdeShell, meta: { layout: 'ide', overlay: 'help' } },
|
||||
{ path: '/:pathMatch(.*)*', redirect: '/' },
|
||||
],
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user