- Merge "Actions" + "Session" into one state-aware Session tab: review controls on top, then merge/worktree management, then child outcomes — each gated on the current state, with an empty-state hint when there's nothing to manage. This is the home the real merge/diff work (task 09eb5d52) will slot into. - Move the model · turns · diff info block to the right of the title bar. - Show turns as current/max using the resolved turn budget (task → list → global). - Output terminal now fills the console body cleanly: clip the console to its rounded corners and inset the embedded terminal instead of clipping its bottom. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
80 lines
3.6 KiB
XML
80 lines
3.6 KiB
XML
<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.SessionTerminalView"
|
|
x:Name="Root">
|
|
<Border Classes="terminal" Margin="0">
|
|
<DockPanel LastChildFill="True">
|
|
|
|
<!-- ── Terminal header bar ── -->
|
|
<Grid DockPanel.Dock="Top" ColumnDefinitions="Auto,*,Auto"
|
|
Background="{DynamicResource Surface2Brush}"
|
|
Height="28">
|
|
<!-- Session label -->
|
|
<TextBlock Grid.Column="1"
|
|
Classes="meta"
|
|
Text="{Binding #Root.Label}"
|
|
LetterSpacing="0.8"
|
|
Foreground="{DynamicResource TextMuteBrush}"
|
|
HorizontalAlignment="Center"
|
|
VerticalAlignment="Center"/>
|
|
<!-- LIVE chip -->
|
|
<Border Grid.Column="2" Classes="live-chip pulsing"
|
|
IsVisible="{Binding #Root.IsRunning}"
|
|
Margin="0,0,8,0" VerticalAlignment="Center">
|
|
<StackPanel Orientation="Horizontal" Spacing="5" VerticalAlignment="Center">
|
|
<Ellipse VerticalAlignment="Center"/>
|
|
<TextBlock Text="{loc:Tr session.chipLive}" VerticalAlignment="Center"/>
|
|
</StackPanel>
|
|
</Border>
|
|
<!-- DONE chip -->
|
|
<Border Grid.Column="2" Classes="live-chip done"
|
|
IsVisible="{Binding #Root.IsDone}"
|
|
Margin="0,0,8,0" VerticalAlignment="Center">
|
|
<StackPanel Orientation="Horizontal" Spacing="5" VerticalAlignment="Center">
|
|
<Ellipse VerticalAlignment="Center" Fill="{DynamicResource MossBrush}"/>
|
|
<TextBlock Text="{loc:Tr session.chipDone}" VerticalAlignment="Center"
|
|
Foreground="{DynamicResource MossBrush}"/>
|
|
</StackPanel>
|
|
</Border>
|
|
<!-- FAILED chip -->
|
|
<Border Grid.Column="2" Classes="live-chip failed"
|
|
IsVisible="{Binding #Root.IsFailed}"
|
|
Margin="0,0,8,0" VerticalAlignment="Center">
|
|
<StackPanel Orientation="Horizontal" Spacing="5" VerticalAlignment="Center">
|
|
<Ellipse VerticalAlignment="Center" Fill="{DynamicResource BloodBrush}"/>
|
|
<TextBlock Text="{loc:Tr session.chipFailed}" VerticalAlignment="Center"
|
|
Foreground="{DynamicResource BloodBrush}"/>
|
|
</StackPanel>
|
|
</Border>
|
|
</Grid>
|
|
|
|
<!-- ── Log output ── -->
|
|
<ScrollViewer Name="LogScroll"
|
|
VerticalScrollBarVisibility="Visible"
|
|
AllowAutoHide="False"
|
|
Padding="10,8,10,12">
|
|
<ItemsControl ItemsSource="{Binding #Root.Entries}">
|
|
<ItemsControl.ItemTemplate>
|
|
<DataTemplate DataType="vm:LogLineViewModel">
|
|
<Grid ColumnDefinitions="60,*" Margin="0,1">
|
|
<!-- Timestamp -->
|
|
<TextBlock Grid.Column="0"
|
|
Classes="log-ts"
|
|
Text="{Binding TimestampFormatted}"/>
|
|
<!-- Message text — selectable so the user can copy raw output -->
|
|
<SelectableTextBlock Grid.Column="1"
|
|
Text="{Binding Text}" Tag="{Binding ClassName}"
|
|
Foreground="{DynamicResource TextDimBrush}"
|
|
TextWrapping="Wrap"/>
|
|
</Grid>
|
|
</DataTemplate>
|
|
</ItemsControl.ItemTemplate>
|
|
</ItemsControl>
|
|
</ScrollViewer>
|
|
|
|
</DockPanel>
|
|
</Border>
|
|
</UserControl>
|