diff --git a/src/ClaudeDo.Localization/locales/de.json b/src/ClaudeDo.Localization/locales/de.json
index 8e0bb45..cf35ead 100644
--- a/src/ClaudeDo.Localization/locales/de.json
+++ b/src/ClaudeDo.Localization/locales/de.json
@@ -192,6 +192,11 @@
"overLimitError": "Konnte {0} nicht hinzufügen: {1}",
"invalidNameError": "Konnte {0} nicht hinzufügen: {1}",
"selectIdleTask": "Zuerst eine inaktive Aufgabe auswählen"
+ },
+ "sections": {
+ "description": "Beschreibung",
+ "steps": "Schritte",
+ "files": "Dateien"
}
},
"agent": {
diff --git a/src/ClaudeDo.Localization/locales/en.json b/src/ClaudeDo.Localization/locales/en.json
index 16f16c0..1786344 100644
--- a/src/ClaudeDo.Localization/locales/en.json
+++ b/src/ClaudeDo.Localization/locales/en.json
@@ -192,6 +192,11 @@
"overLimitError": "Could not add {0}: {1}",
"invalidNameError": "Could not add {0}: {1}",
"selectIdleTask": "Select an idle task first"
+ },
+ "sections": {
+ "description": "Description",
+ "steps": "Steps",
+ "files": "Files"
}
},
"agent": {
diff --git a/src/ClaudeDo.Ui/ViewModels/Islands/DetailsIslandViewModel.cs b/src/ClaudeDo.Ui/ViewModels/Islands/DetailsIslandViewModel.cs
index 6a1e613..2fac4db 100644
--- a/src/ClaudeDo.Ui/ViewModels/Islands/DetailsIslandViewModel.cs
+++ b/src/ClaudeDo.Ui/ViewModels/Islands/DetailsIslandViewModel.cs
@@ -117,23 +117,30 @@ public sealed partial class DetailsIslandViewModel : ViewModelBase, IDisposable
[RelayCommand]
private void ToggleDescriptionExpanded() => IsDescriptionExpanded = !IsDescriptionExpanded;
- [ObservableProperty] private bool _isStepsExpanded;
+ // Which section of the details card is shown (header acts as a segment switcher).
+ [ObservableProperty]
+ [NotifyPropertyChangedFor(nameof(IsDescriptionSection))]
+ [NotifyPropertyChangedFor(nameof(IsStepsSection))]
+ [NotifyPropertyChangedFor(nameof(IsFilesSection))]
+ private string _detailSection = "description";
+
+ public bool IsDescriptionSection => DetailSection == "description";
+ public bool IsStepsSection => DetailSection == "steps";
+ public bool IsFilesSection => DetailSection == "files";
[RelayCommand]
- private void ToggleStepsExpanded() => IsStepsExpanded = !IsStepsExpanded;
+ private void SelectDetailSection(string? section) => DetailSection = section ?? "description";
public int TotalStepCount => Subtasks.Count;
- public int OpenStepCount => Subtasks.Count(s => !s.Done);
- public string StepsSummary =>
- TotalStepCount == 0 ? "no steps yet"
- : OpenStepCount == 0 ? $"all done · {TotalStepCount} total"
- : $"{OpenStepCount} open · {TotalStepCount} total";
+ public int DoneStepCount => Subtasks.Count(s => s.Done);
+ public string StepsBadge => TotalStepCount > 0 ? $"{DoneStepCount}/{TotalStepCount}" : "";
+ public string FilesBadge => Attachments.Count > 0 ? Attachments.Count.ToString() : "";
private void NotifyStepsChanged()
{
OnPropertyChanged(nameof(TotalStepCount));
- OnPropertyChanged(nameof(OpenStepCount));
- OnPropertyChanged(nameof(StepsSummary));
+ OnPropertyChanged(nameof(DoneStepCount));
+ OnPropertyChanged(nameof(StepsBadge));
OnPropertyChanged(nameof(ComposedPreview));
}
@@ -425,6 +432,7 @@ public sealed partial class DetailsIslandViewModel : ViewModelBase, IDisposable
Notes = new NotesEditorViewModel(_notesApi);
Subtasks.CollectionChanged += (_, _) => NotifyStepsChanged();
Subtasks.CollectionChanged += (_, _) => Merge.SyncChildOutcomes(HasChildOutcomes, Subtasks.Count);
+ Attachments.CollectionChanged += (_, _) => OnPropertyChanged(nameof(FilesBadge));
AgentSettings.PropertyChanged += (_, e) =>
{
@@ -1233,6 +1241,7 @@ public sealed partial class DetailsIslandViewModel : ViewModelBase, IDisposable
public async System.Threading.Tasks.Task AddFilesAsync(IReadOnlyList<(string FileName, Stream Content)> files)
{
+ DetailSection = "files";
if (Task is null || Task.IsRunning)
{
DropStatus = Loc.T("details.attachments.selectIdleTask");
diff --git a/src/ClaudeDo.Ui/Views/Islands/Detail/DescriptionStepsCard.axaml b/src/ClaudeDo.Ui/Views/Islands/Detail/DescriptionStepsCard.axaml
index 78bc9d1..16d4c07 100644
--- a/src/ClaudeDo.Ui/Views/Islands/Detail/DescriptionStepsCard.axaml
+++ b/src/ClaudeDo.Ui/Views/Islands/Detail/DescriptionStepsCard.axaml
@@ -6,17 +6,70 @@
x:Class="ClaudeDo.Ui.Views.Islands.Detail.DescriptionStepsCard"
x:DataType="vm:DetailsIslandViewModel">
+
+
+
+
+
+
+
+
-
+
-
+
+
+
+
+
-
+
-
+
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
+ LostFocus="OnSubtaskEditLostFocus">
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
+
+
@@ -211,9 +234,8 @@
Foreground="{DynamicResource TextMuteBrush}"
TextWrapping="Wrap"/>
-
-
+