feat(ui): mission control pane header actions + status tinting

This commit is contained in:
Mika Kuns
2026-06-25 16:29:14 +02:00
parent fbcffce79c
commit e2fad88f37
3 changed files with 70 additions and 13 deletions

View File

@@ -1166,4 +1166,30 @@
<Setter Property="Background" Value="{DynamicResource AccentBrush}"/> <Setter Property="Background" Value="{DynamicResource AccentBrush}"/>
</Style> </Style>
<!-- ============================================================ -->
<!-- MISSION CONTROL PANE STATUS TINTING -->
<!-- Base neutral grey; tints layer on by status. -->
<!-- Running / idle / queued: no class → fall through to base. -->
<!-- ============================================================ -->
<Style Selector="Border.monitor-pane">
<Setter Property="Background" Value="{DynamicResource SurfaceBrush}" />
<Setter Property="BorderBrush" Value="{DynamicResource LineBrush}" />
</Style>
<Style Selector="Border.monitor-pane.mon-done">
<Setter Property="Background" Value="{DynamicResource DoneTintBrush}" />
<Setter Property="BorderBrush" Value="{DynamicResource DoneTintBorderBrush}" />
</Style>
<Style Selector="Border.monitor-pane.mon-review">
<Setter Property="Background" Value="{DynamicResource DoneTintBrush}" />
<Setter Property="BorderBrush" Value="{DynamicResource DoneTintBorderBrush}" />
</Style>
<Style Selector="Border.monitor-pane.mon-roadblock">
<Setter Property="Background" Value="{DynamicResource RoadblockTintBrush}" />
<Setter Property="BorderBrush" Value="{DynamicResource RoadblockTintBorderBrush}" />
</Style>
<Style Selector="Border.monitor-pane.mon-failed">
<Setter Property="Background" Value="{DynamicResource ErrorTintBrush}" />
<Setter Property="BorderBrush" Value="{DynamicResource ErrorTintBorderBrush}" />
</Style>
</Styles> </Styles>

View File

@@ -99,6 +99,8 @@
<SolidColorBrush x:Key="QueuedTintBorderBrush" Color="#4C8B9D7A" /> <SolidColorBrush x:Key="QueuedTintBorderBrush" Color="#4C8B9D7A" />
<SolidColorBrush x:Key="DoneTintBrush" Color="#1F6FA86B" /> <SolidColorBrush x:Key="DoneTintBrush" Color="#1F6FA86B" />
<SolidColorBrush x:Key="DoneTintBorderBrush" Color="#4C6FA86B" /> <SolidColorBrush x:Key="DoneTintBorderBrush" Color="#4C6FA86B" />
<SolidColorBrush x:Key="RoadblockTintBrush" Color="#1FD4A574" />
<SolidColorBrush x:Key="RoadblockTintBorderBrush" Color="#4CD4A574" />
<!-- Merge editor (3-pane conflict resolver) block tints --> <!-- Merge editor (3-pane conflict resolver) block tints -->
<SolidColorBrush x:Key="MergeOursTintBrush" Color="#1F7C9166" /> <!-- ours side (moss) --> <SolidColorBrush x:Key="MergeOursTintBrush" Color="#1F7C9166" /> <!-- ours side (moss) -->

View File

@@ -5,28 +5,57 @@
xmlns:loc="using:ClaudeDo.Ui.Localization" xmlns:loc="using:ClaudeDo.Ui.Localization"
x:DataType="vm:TaskMonitorViewModel" x:DataType="vm:TaskMonitorViewModel"
x:Class="ClaudeDo.Ui.Views.MissionControl.MonitorPaneView"> x:Class="ClaudeDo.Ui.Views.MissionControl.MonitorPaneView">
<Border Background="{DynamicResource Surface1Brush}" <Border Classes="monitor-pane"
BorderBrush="{DynamicResource LineBrush}" Classes.mon-review="{Binding IsWaitingForReview}"
Classes.mon-done="{Binding IsDone}"
Classes.mon-roadblock="{Binding HasRoadblock}"
Classes.mon-failed="{Binding IsFailed}"
BorderThickness="1" CornerRadius="10" ClipToBounds="True"> BorderThickness="1" CornerRadius="10" ClipToBounds="True">
<DockPanel LastChildFill="True"> <DockPanel LastChildFill="True">
<!-- Footer: pane actions --> <!-- Header: per-task action icons -->
<Border DockPanel.Dock="Bottom" <Border DockPanel.Dock="Top"
Background="{DynamicResource Surface2Brush}" Background="{DynamicResource Surface2Brush}"
BorderBrush="{DynamicResource LineBrush}" BorderBrush="{DynamicResource LineBrush}"
BorderThickness="0,1,0,0" Padding="8,6"> BorderThickness="0,0,0,1" Padding="6,3">
<StackPanel Orientation="Horizontal" Spacing="8"> <StackPanel Orientation="Horizontal" Spacing="2"
<Button Classes="btn" Content="{loc:Tr missionControl.openInApp}" HorizontalAlignment="Right" VerticalAlignment="Center">
Command="{Binding OpenInAppCommand}" /> <Button Classes="title-ctrl"
<Button Classes="btn" Content="{loc:Tr missionControl.detach}" Command="{Binding OpenInAppCommand}"
Command="{Binding DetachCommand}" /> ToolTip.Tip="{loc:Tr missionControl.openInApp}">
<Button Classes="btn" Content="{loc:Tr missionControl.cancel}" <PathIcon Data="{StaticResource Icon.ArrowOut}" Width="12" Height="12"/>
</Button>
<Button Classes="title-ctrl"
Command="{Binding DetachCommand}"
ToolTip.Tip="{Binding DetachTooltip}">
<PathIcon Data="{StaticResource Icon.WinMax}" Width="12" Height="12"/>
</Button>
<Button Classes="title-ctrl"
Command="{Binding CancelTaskCommand}" Command="{Binding CancelTaskCommand}"
IsVisible="{Binding IsRunning}" /> IsVisible="{Binding IsRunning}"
ToolTip.Tip="{loc:Tr missionControl.cancel}">
<PathIcon Data="{StaticResource Icon.WinClose}" Width="12" Height="12"/>
</Button>
</StackPanel> </StackPanel>
</Border> </Border>
<!-- Blocking / roadblock banner --> <!-- Roadblock banner (amber) -->
<Border DockPanel.Dock="Top"
IsVisible="{Binding HasRoadblock}"
Background="{DynamicResource RoadblockTintBrush}"
BorderBrush="{DynamicResource AmberBrush}"
BorderThickness="0,0,0,1" Padding="12,6">
<StackPanel Orientation="Horizontal" Spacing="8">
<PathIcon Data="{StaticResource Icon.Warning}"
Foreground="{DynamicResource AmberBrush}"
Width="13" Height="13" VerticalAlignment="Center" />
<TextBlock Classes="meta" Text="{Binding Roadblocks}"
Foreground="{DynamicResource AmberBrush}"
TextWrapping="Wrap" VerticalAlignment="Center" />
</StackPanel>
</Border>
<!-- Failure banner (red) -->
<Border DockPanel.Dock="Top" <Border DockPanel.Dock="Top"
IsVisible="{Binding ShowRoadblock}" IsVisible="{Binding ShowRoadblock}"
Background="{DynamicResource ErrorTintBrush}" Background="{DynamicResource ErrorTintBrush}"