Files
ClaudeDo/src/ClaudeDo.Ui/Views/Islands/AgentStripView.axaml
2026-06-04 16:19:31 +02:00

168 lines
7.5 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Islands"
xmlns:loc="using:ClaudeDo.Ui.Localization"
x:Class="ClaudeDo.Ui.Views.Islands.AgentStripView"
x:DataType="vm:DetailsIslandViewModel">
<Border Classes="agent-strip"
Classes.running="{Binding IsRunning}"
Classes.children="{Binding IsWaitingForChildren}"
Margin="18,8,18,0">
<StackPanel Margin="12,10" Spacing="6">
<!-- Row 1: pulsing dot · status label · model · stop button -->
<Grid ColumnDefinitions="Auto,Auto,*,Auto">
<Ellipse Grid.Column="0"
Width="8" Height="8"
Fill="{DynamicResource MossBrush}"
VerticalAlignment="Center"
Classes.status-pulse="{Binding IsRunning}"
Margin="0,0,6,0"/>
<TextBlock Grid.Column="1"
Classes="meta"
Text="{Binding AgentStatusLabel}"
LetterSpacing="1.2"
VerticalAlignment="Center"
Margin="0,0,8,0"/>
<TextBlock Grid.Column="2"
Classes="meta"
Text="{Binding Model}"
Foreground="{DynamicResource TextFaintBrush}"
VerticalAlignment="Center"
TextTrimming="CharacterEllipsis"
IsVisible="{Binding Model, Converter={x:Static ObjectConverters.IsNotNull}}"/>
<!-- Stop button — only when running -->
<Button Grid.Column="3"
Classes="icon-btn"
Command="{Binding StopCommand}"
IsVisible="{Binding IsRunning}"
ToolTip.Tip="{loc:Tr agent.stopTip}"
VerticalAlignment="Center">
<PathIcon Data="{StaticResource Icon.X}" Width="12" Height="12"
Foreground="{DynamicResource BloodBrush}"/>
</Button>
<!-- Send to queue — only when idle -->
<Button Grid.Column="3"
Classes="btn accent"
Content="{loc:Tr agent.sendToQueue}"
Command="{Binding EnqueueCommand}"
IsVisible="{Binding IsIdle}"
ToolTip.Tip="{loc:Tr agent.sendToQueueTip}"
VerticalAlignment="Center"
Padding="10,4"/>
<!-- Remove from queue — only when queued -->
<Button Grid.Column="3"
Classes="btn"
Content="{loc:Tr agent.removeFromQueue}"
Command="{Binding DequeueCommand}"
IsVisible="{Binding IsQueued}"
ToolTip.Tip="{loc:Tr agent.removeFromQueueTip}"
VerticalAlignment="Center"
Padding="10,4"/>
</Grid>
<!-- Row 2: WORKTREE label + path + copy button -->
<Grid ColumnDefinitions="Auto,*,Auto"
IsVisible="{Binding WorktreePath, Converter={x:Static ObjectConverters.IsNotNull}}">
<TextBlock Grid.Column="0"
Classes="eyebrow"
Text="{loc:Tr agent.worktreeLabel}"
Foreground="{DynamicResource TextFaintBrush}"
LetterSpacing="1.2"
VerticalAlignment="Center"
Margin="0,0,8,0"/>
<TextBlock Grid.Column="1"
Classes="meta"
Text="{Binding WorktreePath}"
TextTrimming="CharacterEllipsis"
VerticalAlignment="Center"/>
<Button Grid.Column="2"
Classes="icon-btn"
ToolTip.Tip="{loc:Tr agent.copyPathTip}"
Click="OnCopyWorktreePathClick"
VerticalAlignment="Center">
<PathIcon Data="{StaticResource Icon.Copy}" Width="11" Height="11"/>
</Button>
</Grid>
<!-- Row 3: Branch line — icon + branch ← main + commits chip -->
<StackPanel Orientation="Horizontal" Spacing="6"
IsVisible="{Binding BranchLine, Converter={x:Static ObjectConverters.IsNotNull}}">
<PathIcon Data="{StaticResource Icon.GitBranch}" Width="11" Height="11"
Foreground="{DynamicResource AccentBrush}"
VerticalAlignment="Center"/>
<TextBlock Classes="meta"
Text="{Binding BranchLine}"
VerticalAlignment="Center"/>
<Border Classes="chip"
IsVisible="{Binding CommitsOnBranch}"
Padding="5,1" CornerRadius="6">
<TextBlock Classes="meta"
Text="{Binding CommitsOnBranch, StringFormat='{}{0}c'}"
Foreground="{DynamicResource TextFaintBrush}"/>
</Border>
</StackPanel>
<!-- Row 4: DIFF label + +add del + meter bar -->
<Grid ColumnDefinitions="Auto,Auto,Auto,*">
<TextBlock Grid.Column="0"
Classes="eyebrow"
Text="{loc:Tr agent.diffLabel}"
Foreground="{DynamicResource TextFaintBrush}"
LetterSpacing="1.2"
VerticalAlignment="Center"
Margin="0,0,8,0"/>
<TextBlock Grid.Column="1"
Text="{Binding DiffAdditions, StringFormat='+{0}'}"
Classes="diff-add"
VerticalAlignment="Center"
Margin="0,0,4,0"/>
<TextBlock Grid.Column="2"
Text="{Binding DiffDeletions, StringFormat='{0}'}"
Classes="diff-del"
VerticalAlignment="Center"
Margin="0,0,8,0"/>
<!-- Slim 4px meter: track + fill using a Grid overlay -->
<Grid Grid.Column="3" VerticalAlignment="Center">
<Border Classes="diff-meter-track"/>
<Rectangle Classes="diff-meter-fill"
Width="{Binding DiffMeterRatio}"
HorizontalAlignment="Left"
RenderTransformOrigin="0,0.5">
<Rectangle.RenderTransform>
<ScaleTransform ScaleX="{Binding $parent[Grid].Bounds.Width}"/>
</Rectangle.RenderTransform>
</Rectangle>
</Grid>
</Grid>
<!-- Action buttons -->
<StackPanel Orientation="Horizontal" Spacing="6" Margin="0,4,0,0">
<Button Classes="btn" Content="{loc:Tr agent.openDiff}" Command="{Binding OpenDiffCommand}"/>
<Button Classes="btn" Command="{Binding OpenWorktreeCommand}"
ToolTip.Tip="{loc:Tr agent.openWorktreeTip}">
<StackPanel Orientation="Horizontal" Spacing="6" VerticalAlignment="Center">
<PathIcon Data="{StaticResource Icon.ArrowOut}"
Width="11" Height="11"
Foreground="{DynamicResource TextDimBrush}"/>
<TextBlock Text="{loc:Tr agent.worktreeBtn}" VerticalAlignment="Center"/>
</StackPanel>
</Button>
<Button Classes="btn accent"
Content="{loc:Tr agent.continue}"
Command="{Binding ContinueCommand}"
IsVisible="{Binding ShowContinue}"
ToolTip.Tip="{loc:Tr agent.continueTip}"
Padding="10,4"/>
<Button Classes="btn"
Content="{loc:Tr agent.resetAndRetry}"
Command="{Binding ResetAndRetryCommand}"
IsVisible="{Binding ShowResetAndRetry}"
ToolTip.Tip="{loc:Tr agent.resetAndRetryTip}"
Padding="10,4"/>
</StackPanel>
</StackPanel>
</Border>
</UserControl>