diff --git a/src/ClaudeDo.Ui/CLAUDE.md b/src/ClaudeDo.Ui/CLAUDE.md index e26085e..8635425 100644 --- a/src/ClaudeDo.Ui/CLAUDE.md +++ b/src/ClaudeDo.Ui/CLAUDE.md @@ -54,7 +54,7 @@ Design/ — Tokens.axaml (design tokens; merged before styles) + IslandStyle ## Converters -`StatusColorConverter` (+ `ConnectionColorConverter` in the same file), `WorktreeStateColorConverter`, `WorkerLogLevelToBrushConverter`, `DotBrushConverter`, `EqStatusConverter`, `IconKeyConverter`, `CheckboxBorderConverter`, `StrikeIfTrueConverter`, `BoolToItalicConverter`, `BoolToDraftOpacityConverter`, `NotNullToBoolConverter`, `UpperCaseConverter`, `DateOnlyToDateTimeConverter`. +`StatusColorConverter` (+ `ConnectionColorConverter` in the same file), `WorkerLogLevelToBrushConverter`, `DotBrushConverter`, `EqStatusConverter`, `IconKeyConverter`, `CheckboxBorderConverter`, `StrikeIfTrueConverter`, `BoolToItalicConverter`, `BoolToDraftOpacityConverter`, `NotNullToBoolConverter`, `UpperCaseConverter`, `DateOnlyToDateTimeConverter`. ## Dialog Pattern diff --git a/src/ClaudeDo.Ui/Converters/WorktreeStateColorConverter.cs b/src/ClaudeDo.Ui/Converters/WorktreeStateColorConverter.cs deleted file mode 100644 index aa15bde..0000000 --- a/src/ClaudeDo.Ui/Converters/WorktreeStateColorConverter.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Globalization; -using Avalonia.Data.Converters; -using Avalonia.Media; -using ClaudeDo.Data.Models; - -namespace ClaudeDo.Ui.Converters; - -public sealed class WorktreeStateColorConverter : IValueConverter -{ - private static readonly ISolidColorBrush Active = new SolidColorBrush(Color.Parse("#42A5F5")); - private static readonly ISolidColorBrush Merged = new SolidColorBrush(Color.Parse("#66BB6A")); - private static readonly ISolidColorBrush Discarded = new SolidColorBrush(Color.Parse("#9E9E9E")); - private static readonly ISolidColorBrush Kept = new SolidColorBrush(Color.Parse("#FFA726")); - private static readonly ISolidColorBrush Default = new SolidColorBrush(Colors.Gray); - - public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture) => - value is WorktreeState state - ? state switch - { - WorktreeState.Active => Active, - WorktreeState.Merged => Merged, - WorktreeState.Discarded => Discarded, - WorktreeState.Kept => Kept, - _ => Default, - } - : Default; - - public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) - => throw new NotSupportedException(); -} diff --git a/src/ClaudeDo.Ui/Design/IslandStyles.axaml b/src/ClaudeDo.Ui/Design/IslandStyles.axaml index 9e44ce3..ada05e8 100644 --- a/src/ClaudeDo.Ui/Design/IslandStyles.axaml +++ b/src/ClaudeDo.Ui/Design/IslandStyles.axaml @@ -238,6 +238,43 @@ + + + + + + + + + + + + + + + + + diff --git a/src/ClaudeDo.Ui/ViewModels/Modals/WorktreesOverviewModalViewModel.cs b/src/ClaudeDo.Ui/ViewModels/Modals/WorktreesOverviewModalViewModel.cs index 59aaef2..9f7a4b8 100644 --- a/src/ClaudeDo.Ui/ViewModels/Modals/WorktreesOverviewModalViewModel.cs +++ b/src/ClaudeDo.Ui/ViewModels/Modals/WorktreesOverviewModalViewModel.cs @@ -24,7 +24,12 @@ public sealed partial class WorktreeOverviewRowViewModel : ViewModelBase [ObservableProperty] private string _path = ""; [ObservableProperty] private string _branchName = ""; [ObservableProperty] private string _baseCommit = ""; - [ObservableProperty][NotifyPropertyChangedFor(nameof(IsActive))] private WorktreeState _state; + [ObservableProperty] + [NotifyPropertyChangedFor(nameof(IsActive))] + [NotifyPropertyChangedFor(nameof(IsMerged))] + [NotifyPropertyChangedFor(nameof(IsDiscarded))] + [NotifyPropertyChangedFor(nameof(IsKept))] + private WorktreeState _state; [ObservableProperty] private string? _diffStat; [ObservableProperty][NotifyPropertyChangedFor(nameof(AgeText))] private DateTime _createdAt; [ObservableProperty] private bool _pathExistsOnDisk; @@ -40,6 +45,9 @@ public sealed partial class WorktreeOverviewRowViewModel : ViewModelBase public string AgeText => FormatAge(DateTime.UtcNow - CreatedAt); public bool IsActive => State == WorktreeState.Active; + public bool IsMerged => State == WorktreeState.Merged; + public bool IsDiscarded => State == WorktreeState.Discarded; + public bool IsKept => State == WorktreeState.Kept; public bool IsRunning => TaskStatus == TaskStatus.Running; private static string FormatAge(TimeSpan ts) diff --git a/src/ClaudeDo.Ui/Views/Modals/WorktreesOverviewModalView.axaml b/src/ClaudeDo.Ui/Views/Modals/WorktreesOverviewModalView.axaml index b036a23..82202d1 100644 --- a/src/ClaudeDo.Ui/Views/Modals/WorktreesOverviewModalView.axaml +++ b/src/ClaudeDo.Ui/Views/Modals/WorktreesOverviewModalView.axaml @@ -1,7 +1,6 @@ - - - + +