From 8c779ccd88826be87f0b8b38e9de1ed002ec2bec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Kr=C3=BCger?= Date: Wed, 19 Nov 2025 11:56:59 +0100 Subject: [PATCH] fix: improve overlay visibility with header controls and lighter backdrop MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Changes to automation and effects overlays: - Reduced backdrop opacity from bg-black/60 to bg-black/30 (less dark) - Added header to automation overlay with parameter name display - Added close button to automation overlay (ChevronDown icon) - Wrapped automation lane in rounded card with border and shadow - Both overlays now have consistent visual styling - Added ChevronDown import to TrackList This makes the overlays less obtrusive and adds proper controls for closing the automation view, matching the effects overlay pattern. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- components/tracks/TrackList.tsx | 149 +++++++++++++++++++------------- 1 file changed, 87 insertions(+), 62 deletions(-) diff --git a/components/tracks/TrackList.tsx b/components/tracks/TrackList.tsx index 0f27c81..931f247 100644 --- a/components/tracks/TrackList.tsx +++ b/components/tracks/TrackList.tsx @@ -1,7 +1,7 @@ 'use client'; import * as React from 'react'; -import { Plus, Upload } from 'lucide-react'; +import { Plus, Upload, ChevronDown } from 'lucide-react'; import { Button } from '@/components/ui/Button'; import { Track } from './Track'; import { TrackExtensions } from './TrackExtensions'; @@ -294,73 +294,98 @@ export function TrackList({ {/* Automation Lane Overlay */} {!track.collapsed && track.automation?.showAutomation && ( -
-
- {track.automation.lanes - .filter((lane) => lane.parameterId === track.automation.selectedParameterId) - .map((lane) => ( - { - const newPoint = createAutomationPoint(time, value); - const updatedLanes = track.automation.lanes.map((l) => - l.id === lane.id - ? { ...l, points: [...l.points, newPoint].sort((a, b) => a.time - b.time) } - : l - ); - onUpdateTrack(track.id, { - automation: { ...track.automation, lanes: updatedLanes }, - }); - }} - onUpdatePoint={(pointId, updates) => { - const updatedLanes = track.automation.lanes.map((l) => - l.id === lane.id - ? { - ...l, - points: l.points.map((p) => - p.id === pointId ? { ...p, ...updates } : p - ), - } - : l - ); - onUpdateTrack(track.id, { - automation: { ...track.automation, lanes: updatedLanes }, - }); - }} - onRemovePoint={(pointId) => { - const updatedLanes = track.automation.lanes.map((l) => - l.id === lane.id - ? { ...l, points: l.points.filter((p) => p.id !== pointId) } - : l - ); - onUpdateTrack(track.id, { - automation: { ...track.automation, lanes: updatedLanes }, - }); - }} - onUpdateLane={(updates) => { - const updatedLanes = track.automation.lanes.map((l) => - l.id === lane.id ? { ...l, ...updates } : l - ); - onUpdateTrack(track.id, { - automation: { ...track.automation, lanes: updatedLanes }, - }); - }} - onSeek={onSeek} - /> - ))} +
+
+
+ {/* Header */} +
+
+ Automation + + {track.automation.selectedParameterId || 'Volume'} + +
+ +
+ + {/* Automation Lane */} +
+ {track.automation.lanes + .filter((lane) => lane.parameterId === track.automation.selectedParameterId) + .map((lane) => ( + { + const newPoint = createAutomationPoint(time, value); + const updatedLanes = track.automation.lanes.map((l) => + l.id === lane.id + ? { ...l, points: [...l.points, newPoint].sort((a, b) => a.time - b.time) } + : l + ); + onUpdateTrack(track.id, { + automation: { ...track.automation, lanes: updatedLanes }, + }); + }} + onUpdatePoint={(pointId, updates) => { + const updatedLanes = track.automation.lanes.map((l) => + l.id === lane.id + ? { + ...l, + points: l.points.map((p) => + p.id === pointId ? { ...p, ...updates } : p + ), + } + : l + ); + onUpdateTrack(track.id, { + automation: { ...track.automation, lanes: updatedLanes }, + }); + }} + onRemovePoint={(pointId) => { + const updatedLanes = track.automation.lanes.map((l) => + l.id === lane.id + ? { ...l, points: l.points.filter((p) => p.id !== pointId) } + : l + ); + onUpdateTrack(track.id, { + automation: { ...track.automation, lanes: updatedLanes }, + }); + }} + onUpdateLane={(updates) => { + const updatedLanes = track.automation.lanes.map((l) => + l.id === lane.id ? { ...l, ...updates } : l + ); + onUpdateTrack(track.id, { + automation: { ...track.automation, lanes: updatedLanes }, + }); + }} + onSeek={onSeek} + /> + ))} +
+
)} {/* Effects Overlay */} {!track.collapsed && track.showEffects && ( -
+