From 5302bf29ae45e94cd3403ddd00a164f850c25140 Mon Sep 17 00:00:00 2001 From: Johan LEROY Date: Fri, 17 Jul 2026 17:14:40 +0200 Subject: [PATCH] =?UTF-8?q?feat(web):=20dock=20terminaux=20en=20bas=20(mul?= =?UTF-8?q?ti-sessions=20attach=C3=A9es)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit components/ide/TerminalDock.vue + TerminalDockTabs.vue : dock à onglets, une TerminalView par session du dock, toutes montées en v-show pour préserver l'attache WS (seule l'active visible). Fermer un onglet démonte réellement la vue -> detach() propre, pas de fuite. DialogPrompt au-dessus du terminal actif en attente. Repli via la barre de statut ou le chevron. Branché dans IdeShell (section dock redimensionnable, splitter inversé). 427 tests. --- packages/web/src/components/ide/IdeShell.vue | 9 +-- .../web/src/components/ide/TerminalDock.vue | 50 ++++++++++++++ .../src/components/ide/TerminalDockTabs.vue | 67 +++++++++++++++++++ 3 files changed, 120 insertions(+), 6 deletions(-) create mode 100644 packages/web/src/components/ide/TerminalDock.vue create mode 100644 packages/web/src/components/ide/TerminalDockTabs.vue diff --git a/packages/web/src/components/ide/IdeShell.vue b/packages/web/src/components/ide/IdeShell.vue index 02eed44..74c53fb 100644 --- a/packages/web/src/components/ide/IdeShell.vue +++ b/packages/web/src/components/ide/IdeShell.vue @@ -13,11 +13,11 @@ - + @@ -32,8 +32,6 @@ // zone centrale (éditeur), dock terminaux et barre de statut. Propriétaire de la réconciliation // des ressources ouvertes contre les données live (worktrees / sessions). import { watch } from 'vue'; -import { useI18n } from 'vue-i18n'; -import { SquareTerminal } from '@lucide/vue'; import { useIdeStore, wtKey } from '../../stores/ide'; import { useWorktreesStore } from '../../stores/worktrees'; import { useSessionsStore } from '../../stores/sessions'; @@ -42,9 +40,8 @@ import PrimarySidebar from './PrimarySidebar.vue'; import PanelSplitter from './PanelSplitter.vue'; import StatusBar from './StatusBar.vue'; import EditorArea from './EditorArea.vue'; -import EmptyState from '../ui/EmptyState.vue'; +import TerminalDock from './TerminalDock.vue'; -const { t } = useI18n(); const ide = useIdeStore(); const worktrees = useWorktreesStore(); const sessions = useSessionsStore(); diff --git a/packages/web/src/components/ide/TerminalDock.vue b/packages/web/src/components/ide/TerminalDock.vue new file mode 100644 index 0000000..161e02e --- /dev/null +++ b/packages/web/src/components/ide/TerminalDock.vue @@ -0,0 +1,50 @@ + + + diff --git a/packages/web/src/components/ide/TerminalDockTabs.vue b/packages/web/src/components/ide/TerminalDockTabs.vue new file mode 100644 index 0000000..25343ff --- /dev/null +++ b/packages/web/src/components/ide/TerminalDockTabs.vue @@ -0,0 +1,67 @@ + + +