diff --git a/README.md b/README.md index e2e3251..4715de8 100644 --- a/README.md +++ b/README.md @@ -1067,3 +1067,6 @@ MIT License - 하단 컨텍스트 토큰 심볼의 파이 아크가 왼쪽에서 잘려 보이던 문제를 수정했다. 원형 아크 계산 기준을 실제 카드 크기에 맞게 조정하고, hover 라벨은 비상호작용 툴팁처럼 바꿔 카드에서 마우스를 벗어나면 더 깔끔하게 사라지도록 정리했다. - 업데이트: 2026-04-06 00:01 (KST) - 하단 컨텍스트 토큰 hover 라벨이 남아 있던 문제를 창 전체 마우스 이동/클릭/비활성화 기준으로 한 번 더 보강해 줄였다. 함께 전송 버튼은 크기와 아이콘 정렬을 다시 맞춰 작고 치우쳐 보이던 인상을 보정했다. +- 업데이트: 2026-04-06 00:08 (KST) + - AX Agent 내부 설정의 등록 모델 영역에서 상단 중복 선택 칩 UI를 제거하고, 하단 등록 모델 리스트만 남기도록 정리했다. + - 등록 모델 리스트의 `선택 / 편집 / 삭제` 액션은 기본 버튼 대신 팝업 친화적인 클릭 row 스타일로 바꿔 내부 설정 오버레이에서도 더 안정적으로 동작하게 맞췄다. diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index f3aebc8..5f2b03d 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -4822,3 +4822,6 @@ ow + toggle ?쒓컖 ?몄뼱濡??ㅼ떆 ?뺣젹?덈떎. - 업데이트: 2026-04-06 00:01 (KST) - [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 에서 토큰 hover popup 닫힘 경로를 추가 보강했다. 카드 hover 종료 외에도 창 전체 마우스 이동, 마우스 클릭, 창 비활성화 시 popup 닫힘을 다시 검사하도록 해 라벨이 남는 경우를 줄였다. - [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 의 전송 버튼은 42 기준으로 키우고 내부 send glyph 크기와 오프셋을 다시 조정해 아이콘이 작고 아래로 치우쳐 보이던 문제를 보정했다. +- 업데이트: 2026-04-06 00:08 (KST) + - [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 의 내부 설정 동기화 경로에서 `BuildOverlayModelChips(...)` 호출을 제거해, XAML에서 제거한 등록 모델 상단 중복 선택 UI를 더 이상 다시 그리지 않게 정리했다. + - 같은 파일의 `BuildOverlayRegisteredModelsPanel(...)` 에서는 `선택 / 편집 / 삭제` 액션을 기본 `Button` 대신 `Border + MouseLeftButtonUp` 기반 클릭 row로 교체했다. 이로써 AX Agent 내부 설정 오버레이 안에서도 액션 클릭이 더 안정적으로 반응하고, 등록 모델 관리 UI가 리스트 중심 구조로 일관되게 유지된다. diff --git a/src/AxCopilot/Views/ChatWindow.xaml b/src/AxCopilot/Views/ChatWindow.xaml index 2162441..b4d5c60 100644 --- a/src/AxCopilot/Views/ChatWindow.xaml +++ b/src/AxCopilot/Views/ChatWindow.xaml @@ -3286,18 +3286,13 @@ - - + Margin="0,4,0,8"/> + Margin="0,6,0,8"> diff --git a/src/AxCopilot/Views/ChatWindow.xaml.cs b/src/AxCopilot/Views/ChatWindow.xaml.cs index 4ae93e9..ba1c51e 100644 --- a/src/AxCopilot/Views/ChatWindow.xaml.cs +++ b/src/AxCopilot/Views/ChatWindow.xaml.cs @@ -14548,7 +14548,6 @@ public partial class ChatWindow : Window RefreshOverlayTokenPresetCards(); RefreshOverlayServiceFieldLabels(service); RefreshOverlayServiceFieldVisibility(service); - BuildOverlayModelChips(service); BuildOverlayRegisteredModelsPanel(service); RefreshOverlayAdvancedChoiceButtons(); } @@ -16470,71 +16469,6 @@ public partial class ChatWindow : Window }; } - private void BuildOverlayModelChips(string service) - { - if (OverlayModelChipPanel == null) - return; - - OverlayModelChipPanel.Children.Clear(); - foreach (var model in GetModelCandidates(service)) - { - var captured = model.Id; - var isActive = string.Equals(model.Id, _settings.Settings.Llm.Model, StringComparison.OrdinalIgnoreCase); - var border = new Border - { - Cursor = Cursors.Hand, - CornerRadius = new CornerRadius(8), - BorderThickness = new Thickness(1), - BorderBrush = isActive - ? BrushFromHex("#C7D2FE") - : (TryFindResource("BorderColor") as Brush ?? Brushes.Gray), - Background = isActive - ? BrushFromHex("#EEF2FF") - : Brushes.Transparent, - Padding = new Thickness(10, 7, 10, 7), - Margin = new Thickness(0, 0, 8, 8), - Child = new StackPanel - { - Children = - { - new TextBlock - { - Text = model.Label, - FontSize = 11.5, - FontWeight = isActive ? FontWeights.SemiBold : FontWeights.Normal, - Foreground = isActive - ? BrushFromHex("#1D4ED8") - : (TryFindResource("PrimaryText") as Brush ?? Brushes.Black), - }, - new TextBlock - { - Text = model.Id, - Margin = new Thickness(0, 2, 0, 0), - FontSize = 10, - Foreground = TryFindResource("SecondaryText") as Brush ?? Brushes.Gray, - } - } - } - }; - border.MouseEnter += (_, _) => - { - if (!isActive) - border.Background = TryFindResource("ItemHoverBackground") as Brush ?? Brushes.LightGray; - }; - border.MouseLeave += (_, _) => - { - if (!isActive) - border.Background = Brushes.Transparent; - }; - border.MouseLeftButtonUp += (_, _) => - { - CommitOverlayModelSelection(captured); - PersistOverlaySettingsState(refreshOverlayDeferredInputs: false); - }; - OverlayModelChipPanel.Children.Add(border); - } - } - private void BuildOverlayRegisteredModelsPanel(string service) { if (OverlayRegisteredModelsPanel == null || OverlayRegisteredModelsHeader == null || BtnOverlayAddModel == null) @@ -16638,29 +16572,53 @@ public partial class ChatWindow : Window VerticalAlignment = VerticalAlignment.Top, }; - Button CreateAction(string text, RoutedEventHandler onClick, Brush foreground) + Border CreateAction(string text, Action onClick, Brush foreground) { - var button = new Button + var label = new TextBlock { - Content = text, - Style = TryFindResource("GhostBtn") as Style, + Text = text, + FontSize = 11.5, + FontWeight = FontWeights.SemiBold, + Foreground = foreground, + VerticalAlignment = VerticalAlignment.Center, + }; + + var action = new Border + { + Cursor = Cursors.Hand, + CornerRadius = new CornerRadius(8), Padding = new Thickness(8, 4, 8, 4), Margin = new Thickness(6, 0, 0, 0), - Foreground = foreground, - Cursor = Cursors.Hand, + Background = Brushes.Transparent, + Child = label, }; - button.Click += onClick; - return button; + action.MouseEnter += (_, _) => + { + action.Background = hoverBg; + }; + action.MouseLeave += (_, _) => + { + action.Background = Brushes.Transparent; + }; + action.MouseLeftButtonUp += (_, _) => onClick(); + return action; } - actions.Children.Add(CreateAction("선택", (_, _) => + actions.Children.Add(CreateAction("선택", () => { CommitOverlayModelSelection(model.EncryptedModelName); PersistOverlaySettingsState(refreshOverlayDeferredInputs: false); }, accentBrush)); - actions.Children.Add(CreateAction("편집", (_, _) => EditOverlayRegisteredModel(model), primaryText)); - actions.Children.Add(CreateAction("삭제", (_, _) => DeleteOverlayRegisteredModel(model), BrushFromHex("#DC2626"))); + actions.Children.Add(CreateAction("편집", () => + { + EditOverlayRegisteredModel(model); + BuildOverlayRegisteredModelsPanel(service); + }, primaryText)); + actions.Children.Add(CreateAction("삭제", () => + { + DeleteOverlayRegisteredModel(model); + }, BrushFromHex("#DC2626"))); Grid.SetColumn(actions, 1); grid.Children.Add(actions);