슬래시 팝업 밀도 압축 2단계: 컴팩트 레이아웃/행 높이 조정
Some checks failed
Release Gate / gate (push) Has been cancelled

- ChatWindow.xaml에서 slash 팝업 폭/높이/헤더/리스트/푸터 패딩을 축소해 한 화면 정보량을 증가

- ChatWindow.xaml.cs에서 섹션 헤더/명령 항목의 폰트와 패딩을 낮춰 Codex형 컴팩트 탐색 밀도 반영

- 스크롤/선택 UX(재렌더링 최소화) 경로와 충돌 없이 시각 밀도만 조정

- README.md, docs/DEVELOPMENT.md에 2026-04-04 14:09(KST) 기준 이력 반영

- 검증: dotnet build 0경고/0오류, slash 관련 필터 테스트 41건 통과
This commit is contained in:
2026-04-04 14:10:42 +09:00
parent 157332df52
commit d3e1f947ba
4 changed files with 45 additions and 22 deletions

View File

@@ -222,7 +222,7 @@ public class MyHandler : IActionHandler
### v0.7.3 — AX Agent 권한 코어 재구성 + 입력 계층 정리
업데이트: 2026-04-04 14:01 (KST)
업데이트: 2026-04-04 14:09 (KST)
| 분류 | 내용 |
|------|------|
@@ -282,6 +282,7 @@ public class MyHandler : IActionHandler
| L4 통합 회귀 보강 | `PermissionModeCatalogTests`/`PermissionModePresentationCatalogTests`/`SlashCommandCatalogTests`를 추가하고 deny 우선 규칙을 `OperationModePolicyTests`에 반영해 권한·슬래시 회귀망을 강화 |
| 권한 팝업 핵심 4모드 정렬 | 권한 팝업을 `소극 활용/적극 활용/계획 중심/완전 자동` 중심으로 단순화하고 `활용하지 않음/질문 없이 진행``고급 모드` 접힘 섹션으로 분리 |
| slash 스크롤 체감 개선 | 휠/방향키 이동 시 전체 재렌더링을 제거하고 선택 하이라이트만 갱신하도록 바꿔 `/` 팝업 스크롤 반응성과 안정성을 개선 |
| slash 팝업 밀도 압축 2단계 | `/` 팝업 폭/높이/패딩과 항목 폰트/행 높이를 축소해 Codex형 컴팩트 밀도와 스캔 속도를 강화 |
| Slash palette 상태 분리 시작 | `ChatWindow`에 몰려 있던 slash 상태를 `SlashPaletteState`로 분리해 이후 Codex/Claude형 composer 개편 기반 마련 |
| 런처 이미지 미리보기 추가 | `#` 클립보드 이미지 항목에서 `Shift+Enter`로 전용 미리보기 창을 열고, 줌·원본 해상도 확인·PNG/JPEG/BMP 저장·클립보드 복사를 지원 |
| 검증 | `dotnet build` 경고 0 / 오류 0, `dotnet test` 436 passed / 0 failed |

View File

@@ -3430,3 +3430,25 @@ else:
### 3) 품질 게이트
- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` 통과 (경고 0, 오류 0).
- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --no-build --filter "FullyQualifiedName~ChatWindowSlashPolicyTests|FullyQualifiedName~SlashCommandCatalogTests|FullyQualifiedName~OperationModePolicyTests|FullyQualifiedName~PermissionModeCatalogTests|FullyQualifiedName~PermissionModePresentationCatalogTests"` 통과 (84 passed, 0 failed).
## 2026-04-04 추가 진행 기록 (연속 실행 32차: slash 팝업 밀도 압축 2단계)
업데이트: 2026-04-04 14:09 (KST)
### 1) slash 팝업 프레임 밀도 조정
- `ChatWindow.xaml`의 slash 팝업 폭/높이와 내부 여백을 축소:
- `MinWidth 620 → 580`, `MaxWidth 780 → 740`
- `ScrollViewer MaxHeight 420 → 380`
- 헤더/리스트/푸터 패딩 및 마진 축소
- 목적: 더 컴팩트한 정보 밀도와 빠른 스캔 흐름 확보.
### 2) 항목/섹션 타이포 밀도 조정
- `ChatWindow.xaml.cs`의 렌더링 항목 크기를 축소:
- 섹션 헤더 패딩/폰트(`10.5/10 → 10/9.5`)
- 명령 항목 패딩/마진 축소
- 명령 라벨/설명 폰트(`13/11.5 → 12.5/11`)
- 목적: 한 화면에 더 많은 명령이 보이도록 개선.
### 3) 품질 게이트
- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` 통과 (경고 0, 오류 0).
- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --no-build --filter "FullyQualifiedName~ChatWindowSlashPolicyTests|FullyQualifiedName~SlashCommandCatalogTests"` 통과 (41 passed, 0 failed).

View File

@@ -861,7 +861,7 @@
<Border Background="{DynamicResource LauncherBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1" CornerRadius="18"
Padding="0" MinWidth="620" MaxWidth="780"
Padding="0" MinWidth="580" MaxWidth="740"
PreviewMouseWheel="SlashPopup_PreviewMouseWheel">
<Border.Effect>
<DropShadowEffect BlurRadius="16" ShadowDepth="0" Opacity="0.16"/>
@@ -871,7 +871,7 @@
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="0,0,0,1"
CornerRadius="18,18,0,0"
Padding="14,12,14,10">
Padding="12,10,12,8">
<StackPanel>
<Grid>
<Grid.ColumnDefinitions>
@@ -882,7 +882,7 @@
<StackPanel Orientation="Horizontal" Grid.Column="0">
<Border Background="{DynamicResource AccentColor}"
CornerRadius="8"
Padding="6,2"
Padding="5,1.5"
Margin="0,0,8,0"
VerticalAlignment="Center">
<TextBlock Text="/"
@@ -892,7 +892,7 @@
</Border>
<TextBlock x:Name="SlashPopupTitle"
Text="명령 및 스킬"
FontSize="13.5"
FontSize="13"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
@@ -901,7 +901,7 @@
x:Name="BtnSlashReset"
Click="BtnSlashReset_Click"
Style="{StaticResource GhostBtn}"
Padding="8,4"
Padding="7,3"
Margin="0,0,6,0"
ToolTip="핀/최근 정리">
<StackPanel Orientation="Horizontal">
@@ -919,7 +919,7 @@
x:Name="BtnSlashToggleGroups"
Click="BtnSlashToggleGroups_Click"
Style="{StaticResource GhostBtn}"
Padding="8,4"
Padding="7,3"
ToolTip="명령/스킬 그룹 전체 접기 또는 펼치기">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE70D;"
@@ -936,25 +936,25 @@
</Grid>
<TextBlock x:Name="SlashPopupHint"
Text="방향키나 마우스 휠로 이동하고 Enter로 바로 실행합니다"
FontSize="11.5"
FontSize="11"
Foreground="{DynamicResource SecondaryText}"
Margin="0,6,0,0"/>
Margin="0,5,0,0"/>
</StackPanel>
</Border>
<ScrollViewer x:Name="SlashScrollViewer"
MaxHeight="420"
MaxHeight="380"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled"
CanContentScroll="False"
PanningMode="VerticalOnly"
PreviewMouseWheel="SlashPopup_PreviewMouseWheel"
Padding="10,10,10,8">
Padding="8,8,8,6">
<ItemsControl x:Name="SlashItems"/>
</ScrollViewer>
<TextBlock x:Name="SlashPopupFooter"
Margin="14,0,14,12"
Margin="12,0,12,10"
Text="Enter 실행 · ↑↓ 이동 · 휠 스크롤 · Esc 닫기"
FontSize="10.5"
FontSize="10"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
</Border>

View File

@@ -5255,8 +5255,8 @@ public partial class ChatWindow : Window
BorderBrush = borderBrush,
BorderThickness = new Thickness(1),
CornerRadius = new CornerRadius(8),
Padding = new Thickness(10, 6, 10, 6),
Margin = new Thickness(0, 0, 0, 6),
Padding = new Thickness(9, 5, 9, 5),
Margin = new Thickness(0, 0, 0, 5),
Cursor = Cursors.Hand,
};
var grid = new Grid();
@@ -5276,7 +5276,7 @@ public partial class ChatWindow : Window
var titleText = new TextBlock
{
Text = $"{title} {count}",
FontSize = 10.5,
FontSize = 10,
FontWeight = FontWeights.SemiBold,
Foreground = primaryText,
VerticalAlignment = VerticalAlignment.Center,
@@ -5286,7 +5286,7 @@ public partial class ChatWindow : Window
var metaText = new TextBlock
{
Text = expanded ? "접기" : "펼치기",
FontSize = 10,
FontSize = 9.5,
Foreground = secondaryText,
VerticalAlignment = VerticalAlignment.Center,
};
@@ -5328,8 +5328,8 @@ public partial class ChatWindow : Window
BorderBrush = borderBrush,
BorderThickness = new Thickness(1),
CornerRadius = new CornerRadius(10),
Padding = new Thickness(10, 7, 10, 7),
Margin = new Thickness(0, 0, 0, 4),
Padding = new Thickness(9, 6, 9, 6),
Margin = new Thickness(0, 0, 0, 3),
Cursor = skillAvailable ? Cursors.Hand : Cursors.Arrow,
Opacity = skillAvailable ? 1.0 : 0.5,
};
@@ -5351,7 +5351,7 @@ public partial class ChatWindow : Window
titleRow.Children.Add(new TextBlock
{
Text = cmd,
FontSize = 13,
FontSize = 12.5,
FontWeight = FontWeights.SemiBold,
Foreground = skillAvailable ? primaryText : secondaryText,
VerticalAlignment = VerticalAlignment.Center,
@@ -5396,10 +5396,10 @@ public partial class ChatWindow : Window
leftStack.Children.Add(new TextBlock
{
Text = label,
FontSize = 11.5,
FontSize = 11,
Foreground = secondaryText,
VerticalAlignment = VerticalAlignment.Center,
Margin = new Thickness(18, 2, 0, 0),
Margin = new Thickness(18, 1.5, 0, 0),
TextTrimming = TextTrimming.CharacterEllipsis,
});
Grid.SetColumn(leftStack, 0);