From 793a30135352900809e3d7bbc8f1848d8dd84365 Mon Sep 17 00:00:00 2001 From: lacvet Date: Sun, 5 Apr 2026 20:45:30 +0900 Subject: [PATCH] =?UTF-8?q?AX=20Agent=20=EC=9E=91=EC=97=85=20=ED=8F=B4?= =?UTF-8?q?=EB=8D=94=20=EC=84=A0=ED=83=9D=20=ED=8C=9D=EC=97=85=20=EC=8A=A4?= =?UTF-8?q?=ED=83=80=EC=9D=BC=20=EC=A0=95=EB=A6=AC=20=EB=B0=8F=20=EC=B5=9C?= =?UTF-8?q?=EA=B7=BC=20=ED=95=AD=EB=AA=A9=20UI=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 최근 작업 폴더 팝업 외곽 radius, 그림자, 내부 여백을 조정해 레퍼런스에 더 가까운 카드형 스타일로 보정 - 최근 폴더 항목을 하단 구분선 방식에서 개별 라운드 row 방식으로 변경하고 선택 체크와 텍스트 계층을 정돈 - 다른 폴더 선택 행도 동일한 row 스타일로 통일해 팝업 전체 시각 언어를 일관되게 정리 - README 및 DEVELOPMENT 문서에 2026-04-05 23:28 (KST) 기준 변경 이력 반영 검증 - dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\ - 경고 0 / 오류 0 확인 --- README.md | 2 + docs/DEVELOPMENT.md | 3 + src/AxCopilot/Views/ChatWindow.xaml | 14 ++-- src/AxCopilot/Views/ChatWindow.xaml.cs | 98 ++++++++++++-------------- 4 files changed, 56 insertions(+), 61 deletions(-) diff --git a/README.md b/README.md index f17b1f3..cfe2205 100644 --- a/README.md +++ b/README.md @@ -1053,3 +1053,5 @@ MIT License - AX Agent 좌측 패널과 본문 사이 경계선을 드래그해 사이드바 폭을 직접 조절할 수 있게 했다. 사이드바가 열려 있을 때만 splitter가 보이며, 사용자가 조절한 폭은 닫았다 다시 열어도 유지된다. - 업데이트: 2026-04-05 23:22 (KST) - AX Agent 상단 탭 헤더 높이와 탭 래퍼 패딩을 늘려 채팅 / Cowork / 코드 글자가 잘리던 문제를 보정했다. 또 사용자/assistant/streaming 메시지가 같은 transcript 폭 컨테이너를 공유하도록 바꿔 좌우 정렬 기준이 어긋나 보이던 문제를 정리했다. +- 업데이트: 2026-04-05 23:28 (KST) + - AX Agent 작업 폴더 선택 팝업의 최근 항목 스타일을 레퍼런스처럼 더 단정한 라운드 row 구조로 정리했다. 각 최근 폴더 항목은 개별 카드형 hover/선택 상태를 가지도록 바꾸고, `다른 폴더 선택`도 같은 시각 언어로 맞췄다. 팝업 외곽 radius, 그림자, 여백, 체크 위치, 텍스트 계층도 함께 조정해 더 자연스럽게 보이게 했다. diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index fe39b4c..e8f1456 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -4801,3 +4801,6 @@ ow + toggle ?쒓컖 ?몄뼱濡??ㅼ떆 ?뺣젹?덈떎. - 업데이트: 2026-04-05 23:22 (KST) - [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 의 상단 헤더 첫 행 높이를 42 -> 48로 늘리고, 중앙 탭 래퍼의 Padding, MinHeight를 함께 키워 탭 글자가 위아래로 잘리던 문제를 보정했다. - [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 의 사용자/assistant/streaming 메시지 컨테이너를 모두 GetMessageMaxWidth() 기준 동일 폭으로 맞추고, wrapper 자체는 중앙 transcript 축을 공유한 채 내부 bubble만 좌우 정렬되도록 바꿨다. 이로써 메시지 박스가 서로 다른 고정 마진 때문에 어긋나 보이던 정렬 문제를 줄였다. +- 업데이트: 2026-04-05 23:28 (KST) + - [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 의 작업 폴더 선택 팝업을 더 도톰한 radius, 약한 그림자, 넓은 padding 기준으로 다시 조정했다. 최근 헤더 여백과 목록 내부 padding도 함께 늘려 레퍼런스처럼 더 안정된 카드형 팝업으로 보이게 했다. + - [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 의 `CreatePopupMenuRow(...)`는 하단 border 구분선 방식 대신 개별 라운드 row 방식으로 바꿨다. 최근 폴더 항목과 `다른 폴더 선택` 행이 동일한 시각 언어를 쓰고, 선택 상태는 우측 체크와 은은한 배경으로만 표현되게 정리했다. diff --git a/src/AxCopilot/Views/ChatWindow.xaml b/src/AxCopilot/Views/ChatWindow.xaml index 4fcbfd6..5589449 100644 --- a/src/AxCopilot/Views/ChatWindow.xaml +++ b/src/AxCopilot/Views/ChatWindow.xaml @@ -1491,22 +1491,22 @@ + CornerRadius="18" + MinWidth="300" + MaxWidth="348"> - + + Padding="12,0,12,12"> diff --git a/src/AxCopilot/Views/ChatWindow.xaml.cs b/src/AxCopilot/Views/ChatWindow.xaml.cs index 84c8bfa..7b20cdb 100644 --- a/src/AxCopilot/Views/ChatWindow.xaml.cs +++ b/src/AxCopilot/Views/ChatWindow.xaml.cs @@ -1442,8 +1442,8 @@ public partial class ChatWindow : Window { Height = 1, Background = TryFindResource("BorderColor") as Brush ?? Brushes.Gray, - Margin = new Thickness(8, 4, 8, 8), - Opacity = 0.45, + Margin = new Thickness(6, 6, 6, 10), + Opacity = 0.35, }); AddWorkspaceRows(remainingFolders); } @@ -1453,9 +1453,9 @@ public partial class ChatWindow : Window FolderMenuItems.Children.Add(new TextBlock { Text = "최근 작업 폴더가 없습니다.", - FontSize = 11.5, + FontSize = 12, Foreground = secondaryText, - Margin = new Thickness(10, 6, 10, 10), + Margin = new Thickness(10, 8, 10, 12), }); } @@ -1463,43 +1463,27 @@ public partial class ChatWindow : Window { Height = 1, Background = TryFindResource("BorderColor") as Brush ?? Brushes.Gray, - Margin = new Thickness(8, 8, 8, 8), - Opacity = 0.45, + Margin = new Thickness(6, 8, 6, 10), + Opacity = 0.35, }); - // 다른 폴더 선택 버튼 - var browseSp = new StackPanel { Orientation = Orientation.Horizontal }; - browseSp.Children.Add(new TextBlock - { - Text = "\uE710", - FontFamily = new FontFamily("Segoe MDL2 Assets"), - FontSize = 13, - Foreground = accentBrush, - VerticalAlignment = VerticalAlignment.Center, - Margin = new Thickness(0, 0, 8, 0), - }); - browseSp.Children.Add(new TextBlock - { - Text = "다른 폴더 선택", - FontSize = 13, - FontWeight = FontWeights.SemiBold, - Foreground = primaryText, - VerticalAlignment = VerticalAlignment.Center, - }); - var browseBorder = new Border - { - Child = browseSp, - Background = Brushes.Transparent, - CornerRadius = new CornerRadius(8), - Cursor = Cursors.Hand, - Padding = new Thickness(10, 7, 10, 7), - }; - browseBorder.MouseEnter += (s, _) => { if (s is Border b) b.Background = new SolidColorBrush(Color.FromArgb(0x18, 0xFF, 0xFF, 0xFF)); }; - browseBorder.MouseLeave += (s, _) => { if (s is Border b) b.Background = Brushes.Transparent; }; + var browseBorder = CreatePopupMenuRow( + "\uE710", + "다른 폴더 선택", + string.Empty, + false, + accentBrush, + secondaryText, + primaryText, + () => + { + FolderMenuPopup.IsOpen = false; + BrowseWorkFolder(); + }); + browseBorder.Margin = new Thickness(0); browseBorder.MouseLeftButtonUp += (_, _) => { FolderMenuPopup.IsOpen = false; - BrowseWorkFolder(); }; FolderMenuItems.Children.Add(browseBorder); } @@ -13174,16 +13158,17 @@ public partial class ChatWindow : Window Brush primaryText, Action? onClick) { - var borderColor = TryFindResource("BorderColor") as Brush ?? BrushFromHex("#E5E7EB"); var hintBackground = TryFindResource("HintBackground") as Brush ?? BrushFromHex("#F8FAFC"); + var hoverBackground = TryFindResource("ItemHoverBackground") as Brush ?? BrushFromHex("#F8FAFC"); var row = new Border { Background = selected ? hintBackground : Brushes.Transparent, - BorderBrush = borderColor, - BorderThickness = new Thickness(0, 0, 0, 1), - Padding = new Thickness(10, 8, 10, 8), + BorderBrush = selected ? BrushFromHex("#D6E4FF") : Brushes.Transparent, + BorderThickness = new Thickness(1), + CornerRadius = new CornerRadius(12), + Padding = new Thickness(12, 10, 12, 10), Cursor = Cursors.Hand, - Margin = new Thickness(0), + Margin = new Thickness(0, 0, 0, 6), }; var grid = new Grid(); @@ -13195,10 +13180,10 @@ public partial class ChatWindow : Window { Text = icon, FontFamily = new FontFamily("Segoe MDL2 Assets"), - FontSize = 12, + FontSize = 14, Foreground = selected ? accentBrush : secondaryText, - Margin = new Thickness(0, 1, 8, 0), - VerticalAlignment = VerticalAlignment.Top, + Margin = new Thickness(0, 1, 10, 0), + VerticalAlignment = VerticalAlignment.Center, }; grid.Children.Add(iconBlock); @@ -13206,18 +13191,21 @@ public partial class ChatWindow : Window textStack.Children.Add(new TextBlock { Text = title, - FontSize = 12, + FontSize = 13.5, FontWeight = selected ? FontWeights.SemiBold : FontWeights.Medium, Foreground = primaryText, }); - textStack.Children.Add(new TextBlock + if (!string.IsNullOrWhiteSpace(description)) { - Text = description, - FontSize = 10.5, - Foreground = secondaryText, - Margin = new Thickness(0, 2, 0, 0), - TextWrapping = TextWrapping.Wrap, - }); + textStack.Children.Add(new TextBlock + { + Text = description, + FontSize = 11.5, + Foreground = secondaryText, + Margin = new Thickness(0, 3, 0, 0), + TextWrapping = TextWrapping.Wrap, + }); + } Grid.SetColumn(textStack, 1); grid.Children.Add(textStack); @@ -13225,12 +13213,14 @@ public partial class ChatWindow : Window { var check = CreateSimpleCheck(accentBrush, 14); Grid.SetColumn(check, 2); + check.Margin = new Thickness(10, 0, 0, 0); + if (check is FrameworkElement element) + element.VerticalAlignment = VerticalAlignment.Center; grid.Children.Add(check); } row.Child = grid; - var hoverBg = TryFindResource("ItemHoverBackground") as Brush ?? Brushes.Transparent; - row.MouseEnter += (_, _) => row.Background = selected ? hintBackground : hoverBg; + row.MouseEnter += (_, _) => row.Background = selected ? hintBackground : hoverBackground; row.MouseLeave += (_, _) => row.Background = selected ? hintBackground : Brushes.Transparent; row.MouseLeftButtonUp += (_, _) => onClick?.Invoke(); return row;