Some checks failed
Release / release (push) Failing after 0s
Worker: - Wire UseWindowsService + Microsoft.Extensions.Hosting.WindowsServices so SCM's Service Control Protocol handshake succeeds. Previously the binary exited immediately under sc start, leaving the service registered but never running. Installer: - Pin SDK to .NET 9 (global.json) — SDK 10 dropped win-arm from its RID graph, breaking restore of the WPF project; .NET 9 keeps win-arm AND understands the .slnx solution format. - Force SelfContained=true and default RID=win-x64 when PublishSingleFile is set, so Rider Publish and CLI produce the same bundle. - Dark theme: set Background/Foreground explicitly on WizardWindow and SettingsWindow roots (WPF implicit styles don't cascade to derived Window types). Custom ComboBox template + ComboBoxItem style so dropdowns honour the dark palette instead of system defaults. - Throttle download progress to one report per MB and overwrite the same UI line (\r prefix marker) instead of appending per chunk. - Register ClaudeDo in HKLM\...\Uninstall so it appears in Apps & Features. Copy installer into InstallDir\uninstaller\ for the UninstallString, and schedule a cmd.exe trampoline to handle the self-delete case when Apps & Features launches the copy from inside the install dir. - Treat sc.exe stop exit 1062 (ERROR_SERVICE_NOT_ACTIVE) as success. - Delete the uninstall registry key during UninstallRunner. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
374 lines
18 KiB
XML
374 lines
18 KiB
XML
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
|
|
|
<!-- ═══════════════════════════════════════════════════════════
|
|
Color palette — mirrored from ClaudeDo.App App.axaml
|
|
═══════════════════════════════════════════════════════════ -->
|
|
|
|
<!-- Accent: Forest Teal -->
|
|
<Color x:Key="AccentColor">#3d9474</Color>
|
|
<Color x:Key="AccentLightColor">#6bb89e</Color>
|
|
<SolidColorBrush x:Key="AccentBrush" Color="#3d9474"/>
|
|
<SolidColorBrush x:Key="AccentLightBrush" Color="#6bb89e"/>
|
|
<SolidColorBrush x:Key="AccentSubtleBrush" Color="#1A3D9474"/>
|
|
<SolidColorBrush x:Key="AccentSelectedBrush" Color="#263D9474"/>
|
|
|
|
<!-- Text -->
|
|
<SolidColorBrush x:Key="TextPrimaryBrush" Color="#f1f5f9"/>
|
|
<SolidColorBrush x:Key="TextSecondaryBrush" Color="#c8d0dc"/>
|
|
<SolidColorBrush x:Key="TextMutedBrush" Color="#8892a2"/>
|
|
<SolidColorBrush x:Key="TextDimBrush" Color="#6b7688"/>
|
|
|
|
<!-- Borders & Backgrounds -->
|
|
<SolidColorBrush x:Key="BorderSubtleBrush" Color="#3a3f46"/>
|
|
<SolidColorBrush x:Key="WindowBgBrush" Color="#1c1e21"/>
|
|
<SolidColorBrush x:Key="IslandBgBrush" Color="#272a2e"/>
|
|
<SolidColorBrush x:Key="SidebarBgBrush" Color="#272a2e"/>
|
|
<SolidColorBrush x:Key="ContentBgBrush" Color="#272a2e"/>
|
|
|
|
<!-- Status -->
|
|
<SolidColorBrush x:Key="StatusGrayBrush" Color="#475569"/>
|
|
<SolidColorBrush x:Key="StatusOrangeBrush" Color="#e67e22"/>
|
|
<SolidColorBrush x:Key="StatusGreenBrush" Color="#3d9474"/>
|
|
<SolidColorBrush x:Key="StatusRedBrush" Color="#ef4444"/>
|
|
|
|
<!-- Selection highlights -->
|
|
<SolidColorBrush x:Key="SelectionBrush" Color="#333d9474"/>
|
|
<SolidColorBrush x:Key="SelectionHoverBrush" Color="#1A3D9474"/>
|
|
<SolidColorBrush x:Key="SelectionActiveHoverBrush" Color="#403D9474"/>
|
|
|
|
<!-- Validation -->
|
|
<SolidColorBrush x:Key="ErrorBrush" Color="#ef4444"/>
|
|
|
|
<!-- ═══════════════════════════════════════════════════════════
|
|
Global control styles
|
|
═══════════════════════════════════════════════════════════ -->
|
|
|
|
<!-- Window -->
|
|
<Style TargetType="Window">
|
|
<Setter Property="Background" Value="{StaticResource WindowBgBrush}"/>
|
|
<Setter Property="Foreground" Value="{StaticResource TextPrimaryBrush}"/>
|
|
<Setter Property="FontFamily" Value="Segoe UI"/>
|
|
<Setter Property="FontSize" Value="13"/>
|
|
</Style>
|
|
|
|
<!-- UserControl — transparent so window background shows through -->
|
|
<Style TargetType="UserControl">
|
|
<Setter Property="Background" Value="Transparent"/>
|
|
<Setter Property="Foreground" Value="{StaticResource TextPrimaryBrush}"/>
|
|
</Style>
|
|
|
|
<!-- ContentControl — transparent container -->
|
|
<Style TargetType="ContentControl">
|
|
<Setter Property="Background" Value="Transparent"/>
|
|
<Setter Property="Foreground" Value="{StaticResource TextPrimaryBrush}"/>
|
|
</Style>
|
|
|
|
<!-- TextBlock -->
|
|
<Style TargetType="TextBlock">
|
|
<Setter Property="Foreground" Value="{StaticResource TextPrimaryBrush}"/>
|
|
</Style>
|
|
|
|
<!-- Label -->
|
|
<Style TargetType="Label">
|
|
<Setter Property="Foreground" Value="{StaticResource TextMutedBrush}"/>
|
|
<Setter Property="FontSize" Value="12"/>
|
|
<Setter Property="Padding" Value="0,0,0,2"/>
|
|
</Style>
|
|
|
|
<!-- TextBox -->
|
|
<Style TargetType="TextBox">
|
|
<Setter Property="Background" Value="{StaticResource IslandBgBrush}"/>
|
|
<Setter Property="Foreground" Value="{StaticResource TextPrimaryBrush}"/>
|
|
<Setter Property="BorderBrush" Value="{StaticResource BorderSubtleBrush}"/>
|
|
<Setter Property="BorderThickness" Value="1"/>
|
|
<Setter Property="Padding" Value="8,6"/>
|
|
<Setter Property="CaretBrush" Value="{StaticResource TextPrimaryBrush}"/>
|
|
<Setter Property="SelectionBrush" Value="{StaticResource AccentSubtleBrush}"/>
|
|
<Style.Triggers>
|
|
<Trigger Property="IsMouseOver" Value="True">
|
|
<Setter Property="BorderBrush" Value="{StaticResource AccentBrush}"/>
|
|
</Trigger>
|
|
<Trigger Property="IsFocused" Value="True">
|
|
<Setter Property="BorderBrush" Value="{StaticResource AccentBrush}"/>
|
|
</Trigger>
|
|
<Trigger Property="IsReadOnly" Value="True">
|
|
<Setter Property="Foreground" Value="{StaticResource TextMutedBrush}"/>
|
|
</Trigger>
|
|
</Style.Triggers>
|
|
</Style>
|
|
|
|
<!-- PasswordBox -->
|
|
<Style TargetType="PasswordBox">
|
|
<Setter Property="Background" Value="{StaticResource IslandBgBrush}"/>
|
|
<Setter Property="Foreground" Value="{StaticResource TextPrimaryBrush}"/>
|
|
<Setter Property="BorderBrush" Value="{StaticResource BorderSubtleBrush}"/>
|
|
<Setter Property="BorderThickness" Value="1"/>
|
|
<Setter Property="Padding" Value="8,6"/>
|
|
<Setter Property="CaretBrush" Value="{StaticResource TextPrimaryBrush}"/>
|
|
<Style.Triggers>
|
|
<Trigger Property="IsMouseOver" Value="True">
|
|
<Setter Property="BorderBrush" Value="{StaticResource AccentBrush}"/>
|
|
</Trigger>
|
|
<Trigger Property="IsFocused" Value="True">
|
|
<Setter Property="BorderBrush" Value="{StaticResource AccentBrush}"/>
|
|
</Trigger>
|
|
</Style.Triggers>
|
|
</Style>
|
|
|
|
<!-- Button (default) -->
|
|
<Style TargetType="Button">
|
|
<Setter Property="Background" Value="{StaticResource IslandBgBrush}"/>
|
|
<Setter Property="Foreground" Value="{StaticResource TextPrimaryBrush}"/>
|
|
<Setter Property="BorderBrush" Value="{StaticResource BorderSubtleBrush}"/>
|
|
<Setter Property="BorderThickness" Value="1"/>
|
|
<Setter Property="Padding" Value="16,6"/>
|
|
<Setter Property="Cursor" Value="Hand"/>
|
|
<Setter Property="Template">
|
|
<Setter.Value>
|
|
<ControlTemplate TargetType="Button">
|
|
<Border x:Name="Bd"
|
|
Background="{TemplateBinding Background}"
|
|
BorderBrush="{TemplateBinding BorderBrush}"
|
|
BorderThickness="{TemplateBinding BorderThickness}"
|
|
CornerRadius="4"
|
|
Padding="{TemplateBinding Padding}">
|
|
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
|
</Border>
|
|
<ControlTemplate.Triggers>
|
|
<Trigger Property="IsMouseOver" Value="True">
|
|
<Setter TargetName="Bd" Property="BorderBrush" Value="{StaticResource AccentBrush}"/>
|
|
</Trigger>
|
|
<Trigger Property="IsPressed" Value="True">
|
|
<Setter TargetName="Bd" Property="Background" Value="{StaticResource AccentSubtleBrush}"/>
|
|
</Trigger>
|
|
<Trigger Property="IsEnabled" Value="False">
|
|
<Setter Property="Opacity" Value="0.4"/>
|
|
</Trigger>
|
|
</ControlTemplate.Triggers>
|
|
</ControlTemplate>
|
|
</Setter.Value>
|
|
</Setter>
|
|
</Style>
|
|
|
|
<!-- Accent Button style -->
|
|
<Style x:Key="AccentButton" TargetType="Button">
|
|
<Setter Property="Background" Value="{StaticResource AccentBrush}"/>
|
|
<Setter Property="Foreground" Value="{StaticResource TextPrimaryBrush}"/>
|
|
<Setter Property="BorderThickness" Value="0"/>
|
|
<Setter Property="Padding" Value="16,6"/>
|
|
<Setter Property="Cursor" Value="Hand"/>
|
|
<Setter Property="Template">
|
|
<Setter.Value>
|
|
<ControlTemplate TargetType="Button">
|
|
<Border x:Name="Bd"
|
|
Background="{TemplateBinding Background}"
|
|
BorderThickness="{TemplateBinding BorderThickness}"
|
|
CornerRadius="4"
|
|
Padding="{TemplateBinding Padding}">
|
|
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
|
</Border>
|
|
<ControlTemplate.Triggers>
|
|
<Trigger Property="IsMouseOver" Value="True">
|
|
<Setter TargetName="Bd" Property="Background" Value="{StaticResource AccentLightBrush}"/>
|
|
</Trigger>
|
|
<Trigger Property="IsPressed" Value="True">
|
|
<Setter TargetName="Bd" Property="Background" Value="{StaticResource AccentBrush}"/>
|
|
</Trigger>
|
|
<Trigger Property="IsEnabled" Value="False">
|
|
<Setter Property="Opacity" Value="0.4"/>
|
|
</Trigger>
|
|
</ControlTemplate.Triggers>
|
|
</ControlTemplate>
|
|
</Setter.Value>
|
|
</Setter>
|
|
</Style>
|
|
|
|
<!-- ComboBox toggle button (dropdown arrow chrome) -->
|
|
<ControlTemplate x:Key="ComboBoxToggleButtonTemplate" TargetType="ToggleButton">
|
|
<Border x:Name="Bd"
|
|
Background="{StaticResource IslandBgBrush}"
|
|
BorderBrush="{StaticResource BorderSubtleBrush}"
|
|
BorderThickness="1"
|
|
CornerRadius="4">
|
|
<Grid>
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="*"/>
|
|
<ColumnDefinition Width="20"/>
|
|
</Grid.ColumnDefinitions>
|
|
<Path Grid.Column="1"
|
|
HorizontalAlignment="Center" VerticalAlignment="Center"
|
|
Fill="{StaticResource TextSecondaryBrush}"
|
|
Data="M 0 0 L 4 4 L 8 0 Z"/>
|
|
</Grid>
|
|
</Border>
|
|
<ControlTemplate.Triggers>
|
|
<Trigger Property="IsMouseOver" Value="True">
|
|
<Setter TargetName="Bd" Property="BorderBrush" Value="{StaticResource AccentBrush}"/>
|
|
</Trigger>
|
|
<Trigger Property="IsChecked" Value="True">
|
|
<Setter TargetName="Bd" Property="BorderBrush" Value="{StaticResource AccentBrush}"/>
|
|
</Trigger>
|
|
</ControlTemplate.Triggers>
|
|
</ControlTemplate>
|
|
|
|
<!-- ComboBox -->
|
|
<Style TargetType="ComboBox">
|
|
<Setter Property="Background" Value="{StaticResource IslandBgBrush}"/>
|
|
<Setter Property="Foreground" Value="{StaticResource TextPrimaryBrush}"/>
|
|
<Setter Property="BorderBrush" Value="{StaticResource BorderSubtleBrush}"/>
|
|
<Setter Property="BorderThickness" Value="1"/>
|
|
<Setter Property="Padding" Value="8,6"/>
|
|
<Setter Property="SnapsToDevicePixels" Value="True"/>
|
|
<Setter Property="Template">
|
|
<Setter.Value>
|
|
<ControlTemplate TargetType="ComboBox">
|
|
<Grid>
|
|
<ToggleButton x:Name="ToggleButton"
|
|
Template="{StaticResource ComboBoxToggleButtonTemplate}"
|
|
Focusable="False"
|
|
IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
|
|
ClickMode="Press"/>
|
|
<ContentPresenter x:Name="ContentSite"
|
|
IsHitTestVisible="False"
|
|
Content="{TemplateBinding SelectionBoxItem}"
|
|
ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
|
|
ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
|
|
Margin="{TemplateBinding Padding}"
|
|
VerticalAlignment="Center" HorizontalAlignment="Left"
|
|
TextElement.Foreground="{StaticResource TextPrimaryBrush}"/>
|
|
<Popup x:Name="Popup"
|
|
Placement="Bottom"
|
|
IsOpen="{TemplateBinding IsDropDownOpen}"
|
|
AllowsTransparency="True" Focusable="False"
|
|
PopupAnimation="Slide">
|
|
<Border x:Name="DropDownBorder"
|
|
Background="{StaticResource IslandBgBrush}"
|
|
BorderBrush="{StaticResource BorderSubtleBrush}"
|
|
BorderThickness="1"
|
|
CornerRadius="4"
|
|
MinWidth="{TemplateBinding ActualWidth}"
|
|
MaxHeight="{TemplateBinding MaxDropDownHeight}">
|
|
<ScrollViewer SnapsToDevicePixels="True">
|
|
<StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained"/>
|
|
</ScrollViewer>
|
|
</Border>
|
|
</Popup>
|
|
</Grid>
|
|
</ControlTemplate>
|
|
</Setter.Value>
|
|
</Setter>
|
|
</Style>
|
|
|
|
<!-- ComboBoxItem — dark dropdown rows -->
|
|
<Style TargetType="ComboBoxItem">
|
|
<Setter Property="Background" Value="{StaticResource IslandBgBrush}"/>
|
|
<Setter Property="Foreground" Value="{StaticResource TextPrimaryBrush}"/>
|
|
<Setter Property="Padding" Value="8,6"/>
|
|
<Setter Property="Template">
|
|
<Setter.Value>
|
|
<ControlTemplate TargetType="ComboBoxItem">
|
|
<Border x:Name="Bd"
|
|
Background="{TemplateBinding Background}"
|
|
Padding="{TemplateBinding Padding}">
|
|
<ContentPresenter/>
|
|
</Border>
|
|
<ControlTemplate.Triggers>
|
|
<Trigger Property="IsHighlighted" Value="True">
|
|
<Setter TargetName="Bd" Property="Background" Value="{StaticResource SelectionHoverBrush}"/>
|
|
</Trigger>
|
|
<Trigger Property="IsSelected" Value="True">
|
|
<Setter TargetName="Bd" Property="Background" Value="{StaticResource SelectionBrush}"/>
|
|
</Trigger>
|
|
</ControlTemplate.Triggers>
|
|
</ControlTemplate>
|
|
</Setter.Value>
|
|
</Setter>
|
|
</Style>
|
|
|
|
<!-- CheckBox -->
|
|
<Style TargetType="CheckBox">
|
|
<Setter Property="Foreground" Value="{StaticResource TextPrimaryBrush}"/>
|
|
<Setter Property="Padding" Value="4,0,0,0"/>
|
|
</Style>
|
|
|
|
<!-- RadioButton -->
|
|
<Style TargetType="RadioButton">
|
|
<Setter Property="Foreground" Value="{StaticResource TextPrimaryBrush}"/>
|
|
<Setter Property="Padding" Value="4,0,0,0"/>
|
|
</Style>
|
|
|
|
<!-- ListBox -->
|
|
<Style TargetType="ListBox">
|
|
<Setter Property="Background" Value="Transparent"/>
|
|
<Setter Property="BorderThickness" Value="0"/>
|
|
</Style>
|
|
|
|
<!-- ListBoxItem -->
|
|
<Style TargetType="ListBoxItem">
|
|
<Setter Property="Foreground" Value="{StaticResource TextPrimaryBrush}"/>
|
|
<Setter Property="Padding" Value="10,8"/>
|
|
<Setter Property="Template">
|
|
<Setter.Value>
|
|
<ControlTemplate TargetType="ListBoxItem">
|
|
<Border x:Name="Bd"
|
|
Background="Transparent"
|
|
CornerRadius="4"
|
|
Padding="{TemplateBinding Padding}">
|
|
<ContentPresenter/>
|
|
</Border>
|
|
<ControlTemplate.Triggers>
|
|
<Trigger Property="IsMouseOver" Value="True">
|
|
<Setter TargetName="Bd" Property="Background" Value="{StaticResource SelectionHoverBrush}"/>
|
|
</Trigger>
|
|
<Trigger Property="IsSelected" Value="True">
|
|
<Setter TargetName="Bd" Property="Background" Value="{StaticResource SelectionBrush}"/>
|
|
</Trigger>
|
|
<MultiTrigger>
|
|
<MultiTrigger.Conditions>
|
|
<Condition Property="IsSelected" Value="True"/>
|
|
<Condition Property="IsMouseOver" Value="True"/>
|
|
</MultiTrigger.Conditions>
|
|
<Setter TargetName="Bd" Property="Background" Value="{StaticResource SelectionActiveHoverBrush}"/>
|
|
</MultiTrigger>
|
|
</ControlTemplate.Triggers>
|
|
</ControlTemplate>
|
|
</Setter.Value>
|
|
</Setter>
|
|
</Style>
|
|
|
|
<!-- ProgressBar -->
|
|
<Style TargetType="ProgressBar">
|
|
<Setter Property="Background" Value="{StaticResource IslandBgBrush}"/>
|
|
<Setter Property="Foreground" Value="{StaticResource AccentBrush}"/>
|
|
<Setter Property="BorderBrush" Value="{StaticResource BorderSubtleBrush}"/>
|
|
<Setter Property="BorderThickness" Value="1"/>
|
|
<Setter Property="Height" Value="6"/>
|
|
</Style>
|
|
|
|
<!-- ScrollViewer -->
|
|
<Style TargetType="ScrollViewer">
|
|
<Setter Property="Background" Value="Transparent"/>
|
|
<Setter Property="Foreground" Value="{StaticResource TextPrimaryBrush}"/>
|
|
</Style>
|
|
|
|
<!-- Border — default transparent -->
|
|
<Style TargetType="Border">
|
|
<Setter Property="Background" Value="Transparent"/>
|
|
</Style>
|
|
|
|
<!-- ItemsControl -->
|
|
<Style TargetType="ItemsControl">
|
|
<Setter Property="Background" Value="Transparent"/>
|
|
<Setter Property="Foreground" Value="{StaticResource TextPrimaryBrush}"/>
|
|
</Style>
|
|
|
|
<!-- Separator -->
|
|
<Style TargetType="Separator">
|
|
<Setter Property="Background" Value="{StaticResource BorderSubtleBrush}"/>
|
|
<Setter Property="Height" Value="1"/>
|
|
<Setter Property="Margin" Value="0,8"/>
|
|
</Style>
|
|
|
|
</ResourceDictionary>
|