diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index ea1819c..ca2447d 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1540,7 +1540,7 @@ const CADEditor: React.FC = ({ projectId, token, onNavigateBack selectedTemplate={selectedTemplate} onTemplateSelect={handleTemplateSelect} className={mobileLeftOpen ? 'open' : ''} - onCollapse={() => setMobileLeftOpen(false)} + onCollapse={() => { setMobileLeftOpen(false); setLeftSidebarCollapsed(true); }} collapsed={leftSidebarCollapsed} onToggleCollapse={() => setLeftSidebarCollapsed((p) => !p)} blocks={blocks} diff --git a/frontend/src/components/LeftSidebar.tsx b/frontend/src/components/LeftSidebar.tsx index 3a67ceb..bcbeb0c 100644 --- a/frontend/src/components/LeftSidebar.tsx +++ b/frontend/src/components/LeftSidebar.tsx @@ -13,7 +13,6 @@ interface ToolDef { const sectionAuswahlen: ToolDef[] = [ { tool: 'select', title: 'Auswählen (V)', label: 'Auswahl', kbd: 'V', svg: }, { tool: 'pan', title: 'Pan (P / Leertaste)', label: 'Pan', kbd: 'P', svg: }, - { tool: 'zoom-win', title: 'Zoom-Fenster (Z)', label: 'Zoom', kbd: 'Z', svg: }, { tool: 'measure', title: 'Messen', label: 'Messen', kbd: 'M', svg: }, ]; diff --git a/frontend/src/interaction/index.ts b/frontend/src/interaction/index.ts index e24cc25..d470fe7 100644 --- a/frontend/src/interaction/index.ts +++ b/frontend/src/interaction/index.ts @@ -293,9 +293,6 @@ export class InteractionEngine { case 'hatch': this.handleHatchDown(final); break; - case 'zoom-win': - this.handleZoomWinDown(final); - break; case 'measure': this.handleMeasureDown(final); break; @@ -669,25 +666,6 @@ export class InteractionEngine { this.requestRender(); } - private handleZoomWinDown(pt: { x: number; y: number }): void { - // Zoom window: two clicks define the zoom area - if (this.state.points.length === 0) { - this.state.points.push(pt); - this.state.phase = 'drawing'; - this.onCommandTrigger?.('zoom: click opposite corner'); - } else { - const first = this.state.points[0]; - const minX = Math.min(first.x, pt.x); - const minY = Math.min(first.y, pt.y); - const maxX = Math.max(first.x, pt.x); - const maxY = Math.max(first.y, pt.y); - this.zoomPan.zoomToRect({ minX, minY, maxX, maxY }); - this.state.points = []; - this.state.phase = 'idle'; - this.requestRender(); - } - } - private handleMeasureDown(pt: { x: number; y: number }): void { // Measure: two clicks, display distance if (this.state.points.length === 0) { @@ -1084,7 +1062,6 @@ export class InteractionEngine { }; break; } - case 'zoom-win': case 'measure': { // Show a dashed line preview from first point to cursor this.state.previewElement = { diff --git a/frontend/src/styles.css b/frontend/src/styles.css index 906a80e..1a4e64b 100644 --- a/frontend/src/styles.css +++ b/frontend/src/styles.css @@ -520,7 +520,7 @@ a:hover { text-decoration: underline; } } .tool-grid { display: grid; - grid-template-columns: 1fr 1fr; + grid-template-columns: repeat(auto-fill, minmax(72px, 1fr)); gap: 4px; } .tool-btn { @@ -1197,7 +1197,7 @@ a:hover { text-decoration: underline; } } /* Tools collapse to icon-only on tablet */ .leftbar-title, .tool-section-label, .tool-btn-label { display: none; } - .tool-grid { grid-template-columns: 1fr 1fr; gap: 2px; } + .tool-grid { grid-template-columns: repeat(auto-fill, minmax(72px, 1fr)); gap: 2px; } .tool-btn { padding: 10px 4px; } .leftbar-header { justify-content: center; padding: 6px; } .leftbar-toggle { display: none; } @@ -1318,7 +1318,7 @@ a:hover { text-decoration: underline; } .leftbar-title { display: block; } .tool-section-label { display: block; padding: 0 6px 6px; } .tool-btn-label { display: block; } - .tool-grid { grid-template-columns: 1fr 1fr; gap: 4px; } + .tool-grid { grid-template-columns: repeat(auto-fill, minmax(72px, 1fr)); gap: 4px; } .rightbar { overflow-y: auto; -webkit-overflow-scrolling: touch; }} /* Right tab bar (vertical icon bar, ALWAYS visible on mobile) */ @@ -1429,7 +1429,7 @@ a:hover { text-decoration: underline; } /* Left drawer content: tool palette */ .drawer-left .drawer-body { padding: var(--spacing-sm); } .drawer-left .tool-section { padding: 8px; } - .drawer-left .tool-grid { grid-template-columns: repeat(4, 1fr); gap: 4px; } + .drawer-left .tool-grid { grid-template-columns: repeat(auto-fill, minmax(72px, 1fr)); gap: 4px; } .drawer-left .tool-btn { padding: 10px 4px; } .drawer-left .tool-btn-kbd { display: none; } .drawer-left .tool-btn-label { display: block; } diff --git a/frontend/src/types/cad.types.ts b/frontend/src/types/cad.types.ts index 585fabf..5f024c3 100644 --- a/frontend/src/types/cad.types.ts +++ b/frontend/src/types/cad.types.ts @@ -111,7 +111,7 @@ export interface ExportResult { } export type ToolType = - | 'select' | 'pan' | 'zoom-win' | 'line' | 'polyline' | 'circle' | 'arc' + | 'select' | 'pan' | 'line' | 'polyline' | 'circle' | 'arc' | 'rect' | 'polygon' | 'text' | 'dimension' | 'hatch' | 'move' | 'copy' | 'rotate' | 'scale' | 'mirror' | 'trim' | 'extend' | 'fillet' | 'offset'