diff --git a/src/SheetMe.Designer/Controls/LucideIcons.cs b/src/SheetMe.Designer/Controls/LucideIcons.cs
index c8fded4..0e6cb9f 100644
--- a/src/SheetMe.Designer/Controls/LucideIcons.cs
+++ b/src/SheetMe.Designer/Controls/LucideIcons.cs
@@ -89,6 +89,8 @@ public static class LucideIcons
["align-obj-bottom"] = """ """,
["distribute-h"] = """ """,
["distribute-v"] = """ """,
+ ["ellipsis-vertical"] = """ """,
+ ["file-text"] = """ """,
["square"] = """""",
["lock"] = """ """,
["unlock"] = """ """,
diff --git a/src/SheetMe.Designer/Themes/Tokens.Dark.xaml b/src/SheetMe.Designer/Themes/Tokens.Dark.xaml
index 0f97947..d34e5d6 100644
--- a/src/SheetMe.Designer/Themes/Tokens.Dark.xaml
+++ b/src/SheetMe.Designer/Themes/Tokens.Dark.xaml
@@ -51,6 +51,10 @@
+
+
+
diff --git a/src/SheetMe.Designer/Themes/Tokens.Light.xaml b/src/SheetMe.Designer/Themes/Tokens.Light.xaml
index b1206f2..0b7d0db 100644
--- a/src/SheetMe.Designer/Themes/Tokens.Light.xaml
+++ b/src/SheetMe.Designer/Themes/Tokens.Light.xaml
@@ -85,6 +85,10 @@
+
+
+
diff --git a/src/SheetMe.Designer/ViewModels/Inspector/InspectorViewModel.cs b/src/SheetMe.Designer/ViewModels/Inspector/InspectorViewModel.cs
index 1522f3a..bb75faa 100644
--- a/src/SheetMe.Designer/ViewModels/Inspector/InspectorViewModel.cs
+++ b/src/SheetMe.Designer/ViewModels/Inspector/InspectorViewModel.cs
@@ -198,6 +198,44 @@ public sealed class InspectorViewModel : ViewModelBase
_ => "표시할 속성이 없습니다",
};
+ /// 제목 줄 이름 — 타입은 툴팁()으로 보낸다
+ public string HeaderName
+ {
+ get
+ {
+ if (designer.Selection.Items.Count == 0)
+ {
+ return designer.InspectedPage is { } page ? $"페이지 {page.Index + 1}" : "선택 없음";
+ }
+ return designer.Selection.Items.Count == 1
+ ? designer.Selection.Primary?.Id ?? string.Empty
+ : $"{designer.Selection.Items.Count}개 선택";
+ }
+ }
+
+ ///
+ /// 제목 줄 아이콘. 없는 이름을 넘기면 예외 없이 빈 자리가 되므로 반드시 카탈로그에 있는 이름이어야 한다.
+ /// 여러 개를 골랐어도 타입이 같으면 그 타입 아이콘을 보여 준다 — 섞였을 때만 일반 도형.
+ ///
+ public string HeaderIcon
+ {
+ get
+ {
+ var items = designer.Selection.Items;
+ if (items.Count == 0)
+ {
+ return "file-text";
+ }
+ var type = items[0].Type;
+ return items.All(vm => vm.Type == type)
+ ? SheetMe.Designer.Controls.PaletteIconCatalog.IconOf(type)
+ : "square";
+ }
+ }
+
+ /// 더보기 버튼은 하나를 골랐을 때만 — 여럿에 걸친 컨트롤 단위 명령이 없다
+ public bool IsSingleSelection => designer.Selection.Items.Count == 1;
+
/// 선택 요약 텍스트
public string Summary
{
@@ -268,6 +306,9 @@ public sealed class InspectorViewModel : ViewModelBase
currentSection = null;
OnPropertyChanged(nameof(Summary));
OnPropertyChanged(nameof(HasSelection));
+ OnPropertyChanged(nameof(HeaderName));
+ OnPropertyChanged(nameof(HeaderIcon));
+ OnPropertyChanged(nameof(IsSingleSelection));
OnPropertyChanged(nameof(ShowAlignBar));
NotifyAlignScope();
diff --git a/src/SheetMe.Designer/Views/InspectorView.xaml b/src/SheetMe.Designer/Views/InspectorView.xaml
index eb6e5ad..e7c3da6 100644
--- a/src/SheetMe.Designer/Views/InspectorView.xaml
+++ b/src/SheetMe.Designer/Views/InspectorView.xaml
@@ -13,6 +13,95 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+