AX Agent 대화 목록 카드와 축소 아이콘 바 UI 밀도 정리
Some checks failed
Release Gate / gate (push) Has been cancelled
Some checks failed
Release Gate / gate (push) Has been cancelled
- ChatWindow 대화 목록 행 카드의 선택/호버 강조를 더 얇게 줄이고 제목, 메타, 배지, 편집 버튼 밀도를 claw-code 기준으로 정리 - 축소 아이콘 바의 행 높이, 버튼 규격, 아이콘 크기, 사용자 배지를 현재 사이드바와 같은 중립형 시각 언어로 통일 - README와 DEVELOPMENT 문서에 변경 이력과 2026-04-05 14:57 (KST) 기준 업데이트 시각 반영 - 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\ / 경고 0 오류 0
This commit is contained in:
@@ -422,32 +422,32 @@
|
||||
Visibility="Collapsed">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="54"/>
|
||||
<RowDefinition Height="46"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="54"/>
|
||||
<RowDefinition Height="46"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<!-- 상단 아이콘들 -->
|
||||
<StackPanel Grid.Row="0" VerticalAlignment="Center" HorizontalAlignment="Center">
|
||||
<Button Style="{StaticResource GhostBtn}" Padding="8,7"
|
||||
<StackPanel Grid.Row="0" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,2,0,0">
|
||||
<Button Style="{StaticResource GhostBtn}" Padding="6,5" Width="32" Height="32"
|
||||
Click="BtnNewChat_Click" ToolTip="새 대화"
|
||||
WindowChrome.IsHitTestVisibleInChrome="True">
|
||||
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="14"
|
||||
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="12"
|
||||
Foreground="{DynamicResource SecondaryText}"/>
|
||||
</Button>
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Grid.Row="1" VerticalAlignment="Top" HorizontalAlignment="Center" Margin="0,8,0,0">
|
||||
<Button Style="{StaticResource GhostBtn}" Padding="8,7"
|
||||
<StackPanel Grid.Row="1" VerticalAlignment="Top" HorizontalAlignment="Center" Margin="0,6,0,0">
|
||||
<Button Style="{StaticResource GhostBtn}" Padding="6,5" Width="32" Height="32"
|
||||
Click="BtnToggleSidebar_Click" ToolTip="검색"
|
||||
WindowChrome.IsHitTestVisibleInChrome="True">
|
||||
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="13"
|
||||
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="11.5"
|
||||
Foreground="{DynamicResource SecondaryText}"/>
|
||||
</Button>
|
||||
<Button Style="{StaticResource GhostBtn}" Padding="8,7"
|
||||
<Button Style="{StaticResource GhostBtn}" Padding="6,5" Width="32" Height="32" Margin="0,2,0,0"
|
||||
Click="BtnCategoryDrop_Click" ToolTip="대화 필터"
|
||||
WindowChrome.IsHitTestVisibleInChrome="True">
|
||||
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="13"
|
||||
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="11.5"
|
||||
Foreground="{DynamicResource SecondaryText}"/>
|
||||
</Button>
|
||||
</StackPanel>
|
||||
@@ -457,11 +457,11 @@
|
||||
HorizontalAlignment="Center" VerticalAlignment="Center"
|
||||
ToolTip="" Padding="0"
|
||||
WindowChrome.IsHitTestVisibleInChrome="True">
|
||||
<Border Width="30" Height="30" CornerRadius="15"
|
||||
<Border Width="28" Height="28" CornerRadius="14"
|
||||
Background="{DynamicResource HintBackground}"
|
||||
BorderBrush="{DynamicResource BorderColor}"
|
||||
BorderThickness="1">
|
||||
<TextBlock x:Name="UserInitialIconBar" Text="U" FontSize="12.5" FontWeight="SemiBold"
|
||||
<TextBlock x:Name="UserInitialIconBar" Text="U" FontSize="11.5" FontWeight="SemiBold"
|
||||
Foreground="{DynamicResource PrimaryText}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
||||
</Border>
|
||||
</Button>
|
||||
|
||||
@@ -3227,16 +3227,16 @@ public partial class ChatWindow : Window
|
||||
var border = new Border
|
||||
{
|
||||
Background = isSelected
|
||||
? new SolidColorBrush(Color.FromArgb(0x30, 0x4B, 0x5E, 0xFC))
|
||||
? new SolidColorBrush(Color.FromArgb(0x14, 0x4B, 0x5E, 0xFC))
|
||||
: Brushes.Transparent,
|
||||
CornerRadius = new CornerRadius(8),
|
||||
Padding = new Thickness(10, 7, 10, 7),
|
||||
CornerRadius = new CornerRadius(7),
|
||||
Padding = new Thickness(8, 5, 8, 5),
|
||||
Margin = isBranch ? new Thickness(14, 1, 0, 1) : new Thickness(0, 1, 0, 1),
|
||||
Cursor = Cursors.Hand
|
||||
};
|
||||
|
||||
var grid = new Grid();
|
||||
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(28) });
|
||||
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(20) });
|
||||
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });
|
||||
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = GridLength.Auto });
|
||||
|
||||
@@ -3255,7 +3255,7 @@ public partial class ChatWindow : Window
|
||||
{
|
||||
Text = iconText,
|
||||
FontFamily = new FontFamily("Segoe MDL2 Assets"),
|
||||
FontSize = 13,
|
||||
FontSize = 11,
|
||||
Foreground = iconBrush,
|
||||
VerticalAlignment = VerticalAlignment.Center
|
||||
};
|
||||
@@ -3270,14 +3270,15 @@ public partial class ChatWindow : Window
|
||||
var title = new TextBlock
|
||||
{
|
||||
Text = item.Title,
|
||||
FontSize = 12,
|
||||
FontSize = 11,
|
||||
FontWeight = isSelected ? FontWeights.SemiBold : FontWeights.Normal,
|
||||
Foreground = titleColor,
|
||||
TextTrimming = TextTrimming.CharacterEllipsis
|
||||
};
|
||||
var date = new TextBlock
|
||||
{
|
||||
Text = item.UpdatedAtText,
|
||||
FontSize = 9.5,
|
||||
FontSize = 8.5,
|
||||
Foreground = dateColor,
|
||||
Margin = new Thickness(0, 1, 0, 0)
|
||||
};
|
||||
@@ -3287,21 +3288,21 @@ public partial class ChatWindow : Window
|
||||
{
|
||||
stack.Children.Add(new Border
|
||||
{
|
||||
Background = BrushFromHex("#DBEAFE"),
|
||||
BorderBrush = BrushFromHex("#93C5FD"),
|
||||
Background = BrushFromHex("#EEF2FF"),
|
||||
BorderBrush = BrushFromHex("#C7D2FE"),
|
||||
BorderThickness = new Thickness(1),
|
||||
CornerRadius = new CornerRadius(8),
|
||||
Padding = new Thickness(6, 1, 6, 1),
|
||||
Margin = new Thickness(0, 4, 0, 0),
|
||||
CornerRadius = new CornerRadius(6),
|
||||
Padding = new Thickness(4, 1, 4, 1),
|
||||
Margin = new Thickness(0, 2, 0, 0),
|
||||
HorizontalAlignment = HorizontalAlignment.Left,
|
||||
Child = new TextBlock
|
||||
{
|
||||
Text = _appState.ActiveTasks.Count > 0
|
||||
? $"진행 중 {_appState.ActiveTasks.Count}"
|
||||
: "진행 중",
|
||||
FontSize = 9,
|
||||
FontWeight = FontWeights.SemiBold,
|
||||
Foreground = BrushFromHex("#1D4ED8"),
|
||||
FontSize = 8,
|
||||
FontWeight = FontWeights.Medium,
|
||||
Foreground = BrushFromHex("#4F46E5"),
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -3309,7 +3310,7 @@ public partial class ChatWindow : Window
|
||||
{
|
||||
var runSummaryPanel = new DockPanel
|
||||
{
|
||||
Margin = new Thickness(0, 3, 0, 0),
|
||||
Margin = new Thickness(0, 2, 0, 0),
|
||||
LastChildFill = true,
|
||||
};
|
||||
|
||||
@@ -3318,18 +3319,18 @@ public partial class ChatWindow : Window
|
||||
var failedBadge = new Border
|
||||
{
|
||||
Background = BrushFromHex("#FEF2F2"),
|
||||
BorderBrush = BrushFromHex("#FECACA"),
|
||||
BorderBrush = BrushFromHex("#FEE2E2"),
|
||||
BorderThickness = new Thickness(1),
|
||||
CornerRadius = new CornerRadius(8),
|
||||
Padding = new Thickness(6, 1, 6, 1),
|
||||
Margin = new Thickness(0, 0, 6, 0),
|
||||
CornerRadius = new CornerRadius(6),
|
||||
Padding = new Thickness(4, 1, 4, 1),
|
||||
Margin = new Thickness(0, 0, 4, 0),
|
||||
VerticalAlignment = VerticalAlignment.Center,
|
||||
Child = new TextBlock
|
||||
{
|
||||
Text = $"실패 {FormatDate(item.LastFailedAt.Value)}",
|
||||
FontSize = 9,
|
||||
FontWeight = FontWeights.SemiBold,
|
||||
Foreground = BrushFromHex("#991B1B"),
|
||||
FontSize = 8,
|
||||
FontWeight = FontWeights.Medium,
|
||||
Foreground = BrushFromHex("#B91C1C"),
|
||||
}
|
||||
};
|
||||
DockPanel.SetDock(failedBadge, Dock.Right);
|
||||
@@ -3340,17 +3341,17 @@ public partial class ChatWindow : Window
|
||||
var completedBadge = new Border
|
||||
{
|
||||
Background = BrushFromHex("#ECFDF5"),
|
||||
BorderBrush = BrushFromHex("#BBF7D0"),
|
||||
BorderBrush = BrushFromHex("#DCFCE7"),
|
||||
BorderThickness = new Thickness(1),
|
||||
CornerRadius = new CornerRadius(8),
|
||||
Padding = new Thickness(6, 1, 6, 1),
|
||||
Margin = new Thickness(0, 0, 6, 0),
|
||||
CornerRadius = new CornerRadius(6),
|
||||
Padding = new Thickness(4, 1, 4, 1),
|
||||
Margin = new Thickness(0, 0, 4, 0),
|
||||
VerticalAlignment = VerticalAlignment.Center,
|
||||
Child = new TextBlock
|
||||
{
|
||||
Text = $"성공 {FormatDate(item.LastCompletedAt.Value)}",
|
||||
FontSize = 9,
|
||||
FontWeight = FontWeights.SemiBold,
|
||||
FontSize = 8,
|
||||
FontWeight = FontWeights.Medium,
|
||||
Foreground = BrushFromHex("#166534"),
|
||||
}
|
||||
};
|
||||
@@ -3363,11 +3364,11 @@ public partial class ChatWindow : Window
|
||||
Text = item.FailedAgentRunCount > 0
|
||||
? $"실행 {item.AgentRunCount} · 실패 {item.FailedAgentRunCount} · {TruncateForStatus(item.LastAgentRunSummary, 28)}"
|
||||
: $"실행 {item.AgentRunCount} · {TruncateForStatus(item.LastAgentRunSummary, 32)}",
|
||||
FontSize = 9.5,
|
||||
FontSize = 8.25,
|
||||
Foreground = item.FailedAgentRunCount > 0
|
||||
? BrushFromHex("#B91C1C")
|
||||
: (TryFindResource("SecondaryText") as Brush ?? Brushes.Gray),
|
||||
Margin = new Thickness(0, 3, 0, 0),
|
||||
Margin = new Thickness(0, 1, 0, 0),
|
||||
TextTrimming = TextTrimming.CharacterEllipsis
|
||||
};
|
||||
if (!string.IsNullOrWhiteSpace(item.LastAgentRunSummary))
|
||||
@@ -3389,7 +3390,7 @@ public partial class ChatWindow : Window
|
||||
{
|
||||
Text = "\uE70F", // Edit
|
||||
FontFamily = new FontFamily("Segoe MDL2 Assets"),
|
||||
FontSize = 10,
|
||||
FontSize = 8.5,
|
||||
Foreground = (TryFindResource("SecondaryText") as Brush ?? Brushes.Gray)
|
||||
},
|
||||
Background = Brushes.Transparent,
|
||||
@@ -3397,7 +3398,10 @@ public partial class ChatWindow : Window
|
||||
Cursor = Cursors.Hand,
|
||||
VerticalAlignment = VerticalAlignment.Center,
|
||||
Visibility = Visibility.Collapsed,
|
||||
Padding = new Thickness(4),
|
||||
Width = 22,
|
||||
Height = 22,
|
||||
Padding = new Thickness(0),
|
||||
Opacity = 0.85,
|
||||
ToolTip = _activeTab == "Cowork" ? "작업 유형" : "대화 주제 변경"
|
||||
};
|
||||
var capturedId = item.Id;
|
||||
@@ -3409,32 +3413,26 @@ public partial class ChatWindow : Window
|
||||
if (isSelected)
|
||||
{
|
||||
border.BorderBrush = TryFindResource("AccentColor") as Brush ?? Brushes.CornflowerBlue;
|
||||
border.BorderThickness = new Thickness(2, 0, 0, 0);
|
||||
border.BorderThickness = new Thickness(1.5, 0, 0, 0);
|
||||
}
|
||||
|
||||
border.Child = grid;
|
||||
|
||||
// 호버 이벤트 — 배경 + 미세 확대
|
||||
// 호버 이벤트 — 배경만 얇게 강조
|
||||
border.RenderTransformOrigin = new Point(0.5, 0.5);
|
||||
border.RenderTransform = new ScaleTransform(1, 1);
|
||||
var selectedBg = new SolidColorBrush(Color.FromArgb(0x30, 0x4B, 0x5E, 0xFC));
|
||||
var hoverBg = new SolidColorBrush(Color.FromArgb(0x08, 0xFF, 0xFF, 0xFF));
|
||||
border.MouseEnter += (_, _) =>
|
||||
{
|
||||
if (!isSelected)
|
||||
border.Background = new SolidColorBrush(Color.FromArgb(0x15, 0xFF, 0xFF, 0xFF));
|
||||
border.Background = hoverBg;
|
||||
catBtn.Visibility = Visibility.Visible;
|
||||
var st = border.RenderTransform as ScaleTransform;
|
||||
st?.BeginAnimation(ScaleTransform.ScaleXProperty, new DoubleAnimation(1.02, TimeSpan.FromMilliseconds(120)));
|
||||
st?.BeginAnimation(ScaleTransform.ScaleYProperty, new DoubleAnimation(1.02, TimeSpan.FromMilliseconds(120)));
|
||||
};
|
||||
border.MouseLeave += (_, _) =>
|
||||
{
|
||||
if (!isSelected)
|
||||
border.Background = Brushes.Transparent;
|
||||
catBtn.Visibility = Visibility.Collapsed;
|
||||
var st = border.RenderTransform as ScaleTransform;
|
||||
st?.BeginAnimation(ScaleTransform.ScaleXProperty, new DoubleAnimation(1.0, TimeSpan.FromMilliseconds(150)));
|
||||
st?.BeginAnimation(ScaleTransform.ScaleYProperty, new DoubleAnimation(1.0, TimeSpan.FromMilliseconds(150)));
|
||||
};
|
||||
|
||||
// 클릭 — 이미 선택된 대화면 제목 편집, 아니면 대화 전환
|
||||
|
||||
Reference in New Issue
Block a user