From e370552055501132e06a9f65defb06090291279f Mon Sep 17 00:00:00 2001 From: Agent Zero Date: Thu, 27 Aug 2026 07:21:19 +0200 Subject: [PATCH] task(A4.13): dynamic v2 tool section in ribbon behind flag --- frontend/src/App.tsx | 14 ++++++++++++ frontend/src/components/RibbonBar.tsx | 33 +++++++++++++++++++++++++++ frontend/src/types/ui.types.ts | 2 ++ 3 files changed, 49 insertions(+) diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index acb9ef7..755b20d 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1148,6 +1148,15 @@ const CADEditor: React.FC = ({ projectId, token, onNavigateBack if (action === 'measure') { setActiveTool('dimension'); setCommandHistory((prev) => [...prev, { prefix: '·', text: 'Messwerkzeug aktiv', type: 'info' }]); return; } if (action === 'history') { setHistoryPanelOpen((prev) => !prev); return; } + // ─── V2 tools (Task A4.13): 'v2tool:' → aktives Tool umschalten. Der + // bestehende CanvasArea-Sync aus A4.1 routet es an den Dispatcher (Flag aktiv). + if (action.startsWith('v2tool:')) { + const toolId = action.slice('v2tool:'.length); + setActiveTool(toolId); + setCommandHistory((prev) => [...prev, { prefix: '·', text: `V2-Werkzeug aktiv: ${toolId}`, type: 'info' }]); + return; + } + // ─── Background ─── if (action === 'background-import') { setBgImportOpen(true); return; } @@ -1564,6 +1573,11 @@ const CADEditor: React.FC = ({ projectId, token, onNavigateBack activeTab={activeRibbonTab} onTabChange={setActiveRibbonTab} onAction={handleRibbonAction} + onIsV2ToolActive={(toolId: string) => + import.meta.env.VITE_TOOL_DISPATCHER === 'v2' && + activeTool === toolId && + !!pluginRegistry.getToolV2(toolId) + } canvasBgColor={canvasBgColor} gridColor={gridColor} rulerEnabled={rulerEnabled} diff --git a/frontend/src/components/RibbonBar.tsx b/frontend/src/components/RibbonBar.tsx index 58ab756..7cb73cc 100644 --- a/frontend/src/components/RibbonBar.tsx +++ b/frontend/src/components/RibbonBar.tsx @@ -1,5 +1,6 @@ import React from 'react'; import type { RibbonBarProps, RibbonTab } from '../types/ui.types'; +import { pluginRegistry } from '../plugins'; const tabs: Array<{ id: RibbonTab; label: string; svg: React.ReactNode }> = [ { id: 'start', label: 'Start', svg: }, @@ -15,6 +16,7 @@ const RibbonBar: React.FC = ({ activeTab, onTabChange, onAction, canvasBgColor = '#1e1e2e', gridColor = '#3a3a4a', rulerEnabled = true, onCanvasBgColorChange, onGridColorChange, onToggleRuler, + onIsV2ToolActive, }) => { return (