Agents for developpement added + frontend add + backend added. Git viewer created + agent and template creator + layout and project creator
2.6 KiB
2.6 KiB
L10 — Fenêtres & multi-window
Binôme : dev-windows / test-windows
Zones : application, app-tauri, frontend/app
Dépendances amont : L0, L1, L2, L4.
Objectif
Gestion des fenêtres et onglets : un onglet par projet ; drag d'un onglet hors de la fenêtre → nouvelle fenêtre OS portant ce projet.
Périmètre (DEV)
- Entités
Workspace/Window/Tab+ persistance (workspace.json, machine-local). - Use case
MoveTabToNewWindow(réaffectationWindowId, l'onglet est déplacé, pas dupliqué). app-tauri: création deWebviewWindow, transfert d'état, fermeture de l'onglet source.- Front : barre d'onglets, drag & drop, restauration de session.
Périmètre (TEST)
MoveTabToNewWindow: invariants (un projet dans un seul onglet à la fois ; fenêtre ≥ 1 onglet ou fermée).- Persistance workspace round-trip.
- Front : interactions onglets (mock).
Definition of Done
cargo test+vitestverts ; détacher un onglet en nouvelle fenêtre fonctionne (dev manuel).
Avancement
✅ Backend (vert)
- Domaine : opération pure
Workspace::move_tab_to_new_window(tab, new_window)(layout.rs) — l'onglet est déplacé (jamais dupliqué) ; fenêtre source vidée → supprimée ; onglet actif déplacé → repli sur un onglet restant. Variante d'erreurLayoutError::TabNotFound. 4 tests domaine. - Application (
application/window/) :MoveTabToNewWindow(charge le workspace, mintWindowId, applique l'op pure, persiste viaProjectStore). 2 tests (store mock). La persistance round-trip du workspace est déjà couverte parFsProjectStore(L2). cargo test --workspace: 323 verts, 0 régression ; clippy clean.
✅ IPC app-tauri (vert)
- Composition root : use case
MoveTabToNewWindowinjecté. Commandemove_tab_to_new_window(tabId): applique la topologie (persistée) et ouvre une vraieWebviewWindow(primitive de détach résolue). DTOMoveTabResultDto+parse_tab_id. Testtests/dto_window.rs(2). Workspace 325 verts, 0 régression, clippy clean.
⏳ Reste (fait pendant la refonte disposition L11)
- Front multi-fenêtres : adopter le modèle
Workspace/Window/Tabpersistant (aujourd'hui les onglets vivent en state React transitoire), barre d'onglets, DnD detach + handoff d'état vers la nouvelle fenêtre. Couplé à la refonte de disposition IDE (L11), donc traité là-bas pour éviter de construire une barre d'onglets jetable.
Spike (cf. ARCHITECTURE §13)
- DnD inter-fenêtres Tauri (le DnD HTML ne traverse pas les fenêtres OS) → protocole « detach » via store + event.