태그 피커에서 재진술을 덜어낸다 — 우측 패널 4블록 삭제

4단계 계속.

우측 300px 정보 패널 6블록 중 <b>4개가 왼쪽 목록 행의 재진술</b>이었다.
  이름 — 목록 행 · 하단 선택 칩 · 이 패널 <b>세 곳에 동시에</b>
  분류 — 좌측 분류 열의 선택 강조와 중복
  사용 건수 — 목록 행 배지와 중복
  추천 — 분류('자주 쓰는 것') · 목록 정렬 1순위 · 인스펙터 칩에 이어 <b>네 번째</b>
300px 세로 전체를 쓰면서 새 정보는 두 블록뿐이었다.

남긴 둘은 다른 어디에도 없다 —
'이 태그의 값'(값이 나오면 값, 아니면 왜 안 나오는지)과
'변형'(같은 값을 다른 형식으로 내는 태그).
복사 버튼은 값 블록 머리로 옮겼다 — 태그는 이름이 곧 키라 복사는 계속 쓸모가 있다.

우측 칸 300 → 230, 목록 행 높이 26 → 20.
행 총높이는 38 → 32 다(24 로 가려면 ListBoxItem 패딩을 건드려야 하는데
그 스타일은 서식 목록·레이어와 공용이라 이번에는 두었다).
가용 487px 기준 12.8행 → 15.2행.

<b>주석을 지우다 XAML 을 깨뜨렸고 게이트가 잡았다.</b>
옛 주석의 본문이 닫는 태그만 남은 채 <b>본문 텍스트로</b> 들어가
UIElementCollection 에 문자열을 넣는 XamlParseException 이 됐다.
--dialog-shots 가 태그 피커 두 장을 FAIL 로 표시했다 —
그 게이트가 없으면 태그를 고르러 창을 열 때까지 몰랐을 것이다.
(같은 실행에서 글자 검사 수가 2,465 → 2,305 로 떨어졌는데, 그건 창 두 개가 아예 안 떠서였다.
 고친 뒤 2,465 로 돌아왔다 — 지운 블록은 접힌 상태라 애초에 세지지 않았다.)

게이트: 테스트 291/291, --edit-smoke 0실패, --dialog-shots 글자 2,465개 넘침 0 대조군 4/4,
--modal-check 0실패, --cleartype 11/11, --maxrect 0실패, --scale-budget 5/5, 빌드 경고 0,
--db-smoke 1271건 diff 0, --db-render P062 md5 8d683835f5d81e7bb41c79071d6bf954 동일.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Msystech
2026-08-14 17:59:00 +09:00
co-authored by Claude Opus 5
parent 9b2ae0ea67
commit 6d06f0a4c8
2 changed files with 29 additions and 53 deletions
@@ -28,7 +28,7 @@
(PAT_주민번호 / PAT_주민번호_Dash)을 눈으로 가르려면 자릿수가 맞아야 한다. (PAT_주민번호 / PAT_주민번호_Dash)을 눈으로 가르려면 자릿수가 맞아야 한다.
--> -->
<DataTemplate x:Key="TagItem"> <DataTemplate x:Key="TagItem">
<DockPanel MinWidth="240" Height="26"> <DockPanel MinWidth="240" Height="20">
<Border DockPanel.Dock="Right" VerticalAlignment="Center" Margin="8,0,2,0" <Border DockPanel.Dock="Right" VerticalAlignment="Center" Margin="8,0,2,0"
CornerRadius="4" Padding="6,1" Background="{DynamicResource B.Input}" CornerRadius="4" Padding="6,1" Background="{DynamicResource B.Input}"
BorderBrush="{DynamicResource B.InputBorder}" BorderThickness="1" BorderBrush="{DynamicResource B.InputBorder}" BorderThickness="1"
@@ -136,7 +136,7 @@
<ColumnDefinition Width="12"/> <ColumnDefinition Width="12"/>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
<ColumnDefinition Width="12"/> <ColumnDefinition Width="12"/>
<ColumnDefinition Width="300"/> <ColumnDefinition Width="230"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<!-- 왼쪽: 분류. 필터의 단일 출처다 — 같은 필터를 가로 칩 줄로 한 번 더 그리지 않는다 --> <!-- 왼쪽: 분류. 필터의 단일 출처다 — 같은 필터를 가로 칩 줄로 한 번 더 그리지 않는다 -->
@@ -176,45 +176,32 @@
Foreground="{DynamicResource B.Muted}"/> Foreground="{DynamicResource B.Muted}"/>
<ScrollViewer x:Name="InfoPane" VerticalScrollBarVisibility="Auto" Visibility="Collapsed"> <ScrollViewer x:Name="InfoPane" VerticalScrollBarVisibility="Auto" Visibility="Collapsed">
<StackPanel> <StackPanel>
<!-- 태그는 이름이 곧 키다. 그래서 '태그 키' 절을 따로 두지 않고 여기에 복사를 붙인다 --> <!--
<b>여기 있던 네 블록을 지웠다.</b> 이름·분류·사용 건수·추천 —
넷 다 왼쪽 목록 행이 이미 보여 주는 것의 재진술이었다.
특히 이름은 목록 행 · 하단 선택 칩 · 이 패널 세 곳에 동시에 떴고,
'추천'은 분류('자주 쓰는 것') · 목록 정렬 1순위 · 인스펙터 칩에 이어 네 번째였다.
300px 세로 전체 중 새 정보는 두 블록뿐이었다.
남긴 둘은 다른 어디에도 없다 —
'이 태그의 값'(값이 나오면 값, 아니면 왜 안 나오는지)과
'변형'(같은 값을 다른 형식으로 내는 태그).
복사 버튼은 값 블록 머리로 옮겼다. 태그는 이름이 곧 키라 복사는 계속 쓸모가 있다.
'미리보기'라 부르지 않는다 — 실제로 값이 나오는 것은 384종 중 16종뿐이라,
그렇게 이름 붙이면 나머지가 고장 난 것처럼 보인다.
값이 나오면 값을, 안 나오면 왜 안 나오는지를 보여 준다
(그쪽이 대부분이고 더 쓸모 있다).
-->
<StackPanel x:Name="InfoValueBlock">
<DockPanel> <DockPanel>
<Button DockPanel.Dock="Right" x:Name="CopyButton" Style="{StaticResource Subtle}" <Button DockPanel.Dock="Right" x:Name="CopyButton" Style="{StaticResource Subtle}"
Width="26" Height="24" Padding="0" Margin="6,0,0,0" Width="26" Height="24" Padding="0" Margin="6,0,0,0"
Click="OnCopyTag" ToolTip="태그 이름 복사" Click="OnCopyTag" ToolTip="태그 이름 복사"
AutomationProperties.Name="태그 이름 복사" AutomationProperties.Name="태그 이름 복사"
Content="{Binding Source=copy, Converter={StaticResource IconName}, ConverterParameter=13|B.Muted}"/> Content="{Binding Source=copy, Converter={StaticResource IconName}, ConverterParameter=13|B.Muted}"/>
<TextBlock x:Name="InfoName" FontFamily="Consolas" FontSize="13.5"
TextWrapping="Wrap" VerticalAlignment="Center"
Foreground="{DynamicResource B.Ink}"/>
</DockPanel>
<Border x:Name="InfoCategoryChip" CornerRadius="5" Padding="7,2" Margin="0,8,0,0"
HorizontalAlignment="Left" Background="{DynamicResource B.Chip}">
<TextBlock x:Name="InfoCategory" FontSize="11"
Foreground="{DynamicResource B.Muted}"/>
</Border>
<TextBlock Text="사용 빈도" Style="{StaticResource InfoLabel}"/>
<StackPanel Orientation="Horizontal">
<Border x:Name="InfoRecommendChip" CornerRadius="5" Padding="7,2" Margin="0,0,8,0"
Background="{DynamicResource B.LayerSubtree}" Visibility="Collapsed"
ToolTip="이 컨트롤 타입에서 자주 쓰이는 태그입니다">
<TextBlock Text="추천" FontSize="11" Foreground="{DynamicResource B.AccentText}"/>
</Border>
<TextBlock x:Name="InfoUsage" FontSize="12.5" VerticalAlignment="Center"
Foreground="{DynamicResource B.Ink}"/>
</StackPanel>
<TextBlock x:Name="InfoUsageNote" FontSize="10.5" TextWrapping="Wrap" Margin="0,3,0,0"
Foreground="{DynamicResource B.Muted}"/>
<!--
'이 태그의 값'. '미리보기'라 부르지 않는다 —
실제로 값이 나오는 것은 384종 중 16종뿐이라, 그렇게 이름 붙이면
나머지가 고장 난 것처럼 보인다. 여기서는 값이 나오면 값을,
안 나오면 왜 안 나오는지를 보여 준다(그쪽이 대부분이고 더 쓸모 있다).
-->
<StackPanel x:Name="InfoValueBlock">
<TextBlock Text="이 태그의 값" Style="{StaticResource InfoLabel}"/> <TextBlock Text="이 태그의 값" Style="{StaticResource InfoLabel}"/>
</DockPanel>
<Border CornerRadius="6" Padding="9,6" <Border CornerRadius="6" Padding="9,6"
Background="{DynamicResource B.Chip}"> Background="{DynamicResource B.Chip}">
<StackPanel> <StackPanel>
@@ -273,21 +273,10 @@ public partial class TagPickerDialogView : Window
InfoPane.Visibility = Visibility.Visible; InfoPane.Visibility = Visibility.Visible;
InfoEmpty.Visibility = Visibility.Collapsed; InfoEmpty.Visibility = Visibility.Collapsed;
InfoName.Text = tag; // 이름·분류·사용 건수·추천을 여기서 지웠다 — 넷 다 왼쪽 목록 행이 이미 보여 주는 것이다.
InfoCategory.Text = TagSearch.CategoryOf(tag); // 이름은 목록 행·하단 선택 칩·이 패널 세 곳에 동시에 떴고,
// '추천'은 분류('자주 쓰는 것')·목록 정렬 1순위·인스펙터 칩에 이어 네 번째였다.
var usage = LegacyTagUsageCounts.Of(tag); // 남은 것은 다른 어디에도 없는 둘뿐이다 — 이 태그의 값, 그리고 변형.
InfoUsage.Text = usage > 0 ? $"{usage:N0}회" : "운영에서 쓰인 적 없음";
// 숫자만 크게 띄우면 실시간 집계로 읽힌다 — 스냅샷임을 붙여 둔다
InfoUsageNote.Text = usage > 0
? "운영 서식 집계 스냅샷입니다. 지금 값과 다를 수 있습니다."
: "이 태그를 처음 쓰는 것일 수 있습니다.";
// '추천' 은 사용 횟수가 아니라 컨트롤 타입별 큐레이션이다 — '자주 사용' 이라 부르면 근거가 왜곡된다
InfoRecommendChip.Visibility = preferred.Contains(tag, StringComparer.Ordinal)
? Visibility.Visible
: Visibility.Collapsed;
ShowTagValue(tag); ShowTagValue(tag);
// 변형 — 같은 값을 다른 형식으로 내는 태그(PAT_주민번호 / _Dash / _Blind) // 변형 — 같은 값을 다른 형식으로 내는 태그(PAT_주민번호 / _Dash / _Blind)