feat: native Windows UI — light theme, centered window, standard chrome

This commit is contained in:
SuperDooper
2026-05-08 13:34:29 +02:00
parent 708b55d919
commit 8e4b23d4de
+196 -200
View File
@@ -3,249 +3,245 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ctrl="clr-namespace:ClaudeCheckerWindows.Controls" xmlns:ctrl="clr-namespace:ClaudeCheckerWindows.Controls"
Title="ClaudeChecker" Title="ClaudeChecker"
Width="480" Width="480" Height="660"
SizeToContent="Height" WindowStartupLocation="CenterScreen"
WindowStyle="None" Background="{StaticResource BackgroundBrush}"
AllowsTransparency="True" FontFamily="Segoe UI"
Background="Transparent" ShowInTaskbar="True"
ShowInTaskbar="False"
Topmost="True"
ResizeMode="NoResize"> ResizeMode="NoResize">
<Border Background="{StaticResource BackgroundBrush}" <Grid>
CornerRadius="12" <!-- Main panel -->
BorderBrush="{StaticResource BorderBrush}" <DockPanel x:Name="MainPanel">
BorderThickness="0.5">
<Border.Effect>
<DropShadowEffect BlurRadius="24" ShadowDepth="4" Opacity="0.5" Color="Black"/>
</Border.Effect>
<Grid> <!-- Update banner -->
<!-- Main panel --> <Border x:Name="UpdateBanner" DockPanel.Dock="Top" Visibility="Collapsed"
<StackPanel x:Name="MainPanel"> Background="#E8F2FB" BorderBrush="#B3D6F5" BorderThickness="0,0,0,1"
Cursor="Hand" MouseLeftButtonUp="UpdateBanner_Click">
<!-- Header --> <Grid Margin="16,10">
<Grid Margin="16,11">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="6"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="⬇" FontSize="14"
<Image Grid.Column="0" Width="24" Height="24" Foreground="{StaticResource BlueBrush}" VerticalAlignment="Center"/>
Source="Assets/icon.png" RenderOptions.BitmapScalingMode="HighQuality"/> <StackPanel Grid.Column="1" Margin="10,0">
<TextBlock x:Name="UpdateBannerTitle" FontSize="12" FontWeight="SemiBold"
<TextBlock Grid.Column="1" Text="ClaudeChecker" Foreground="{StaticResource TextBrush}"/>
FontSize="14" FontWeight="SemiBold" Foreground="White" <TextBlock Text="Click to view release notes and install."
VerticalAlignment="Center" Margin="10,0,0,0"/> FontSize="11" Foreground="{StaticResource SecondaryBrush}"/>
</StackPanel>
<Button Grid.Column="2" Style="{StaticResource IconButton}" <Button Grid.Column="2" Content="Update" Style="{StaticResource SmallButton}"
Click="Settings_Click" x:Name="SettingsButton"> Foreground="{StaticResource BlueBrush}" Click="UpdateBanner_Click"/>
<TextBlock Text="⚙" FontSize="11" Foreground="{StaticResource SecondaryBrush}"/>
</Button>
<Button Grid.Column="4" Style="{StaticResource IconButton}"
Click="Close_Click">
<TextBlock Text="✕" FontSize="11" Foreground="{StaticResource SecondaryBrush}"/>
</Button>
</Grid> </Grid>
</Border>
<Rectangle Height="0.5" Fill="{StaticResource BorderBrush}" Opacity="0.4"/> <!-- Footer -->
<Border DockPanel.Dock="Bottom" BorderBrush="{StaticResource BorderBrush}"
<!-- Update banner --> BorderThickness="0,1,0,0" Background="#FAFAFA">
<Border x:Name="UpdateBanner" Visibility="Collapsed" <Grid Margin="12,8">
Background="#0A3B82F6" Cursor="Hand" MouseLeftButtonUp="UpdateBanner_Click">
<Grid Margin="16,10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="⬇" FontSize="14"
Foreground="{StaticResource BlueBrush}" VerticalAlignment="Center"/>
<StackPanel Grid.Column="1" Margin="10,0">
<TextBlock x:Name="UpdateBannerTitle" FontSize="12" FontWeight="SemiBold" Foreground="White"/>
<TextBlock Text="Tap to view what's new &amp; install."
FontSize="11" Foreground="{StaticResource SecondaryBrush}"/>
</StackPanel>
<Button Grid.Column="2" Content="Update"
Style="{StaticResource SmallButton}"
Background="{StaticResource BlueBrush}"
Foreground="White" Click="UpdateBanner_Click"/>
</Grid>
<Border.Effect>
<DropShadowEffect ShadowDepth="0" BlurRadius="0" Opacity="0"/>
</Border.Effect>
</Border>
<Rectangle x:Name="UpdateBannerDiv" Height="0.5" Fill="{StaticResource BorderBrush}"
Opacity="0.3" Visibility="Collapsed"/>
<!-- Limit cards -->
<ScrollViewer VerticalScrollBarVisibility="Hidden" MaxHeight="600">
<StackPanel x:Name="CardsPanel" Margin="0,0,0,4"/>
</ScrollViewer>
<Rectangle Height="0.5" Fill="{StaticResource BorderBrush}" Opacity="0.3"/>
<!-- Footer -->
<Grid Margin="16,9">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="8"/> <ColumnDefinition Width="8"/>
<ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="8"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<TextBlock x:Name="LastUpdatedText" Grid.Column="0" <StackPanel Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center">
FontSize="10" Foreground="#60888888" VerticalAlignment="Center"/> <ProgressBar x:Name="LoadingBar" IsIndeterminate="True"
<ProgressBar x:Name="LoadingBar" Grid.Column="1" Width="12" Height="12" Visibility="Collapsed"
IsIndeterminate="True" Width="14" Height="14" Style="{x:Null}" Margin="0,0,6,0"/>
Visibility="Collapsed" Style="{x:Null}"/> <TextBlock x:Name="LastUpdatedText" FontSize="11"
<Button Grid.Column="3" Content="↻ Refresh" Foreground="{StaticResource SecondaryBrush}" VerticalAlignment="Center"/>
</StackPanel>
<Button Grid.Column="1" Content="↻ Refresh"
Style="{StaticResource SmallButton}" Click="Refresh_Click"/> Style="{StaticResource SmallButton}" Click="Refresh_Click"/>
<Button Grid.Column="3" x:Name="SettingsButton" Content="⚙ Settings"
Style="{StaticResource SmallButton}" Click="Settings_Click"/>
</Grid> </Grid>
</StackPanel> </Border>
<!-- Settings panel --> <!-- Cards scroll area -->
<Border x:Name="SettingsPanel" Visibility="Collapsed" <ScrollViewer VerticalScrollBarVisibility="Auto">
Background="{StaticResource BackgroundBrush}" CornerRadius="12"> <StackPanel x:Name="CardsPanel" Margin="0,4,0,4"/>
<ScrollViewer VerticalScrollBarVisibility="Auto" MaxHeight="700"> </ScrollViewer>
<StackPanel Margin="16"> </DockPanel>
<!-- Settings panel -->
<Border x:Name="SettingsPanel" Visibility="Collapsed"
Background="{StaticResource BackgroundBrush}">
<DockPanel>
<Border DockPanel.Dock="Top" BorderBrush="{StaticResource BorderBrush}"
BorderThickness="0,0,0,1" Background="#FAFAFA" Padding="12,10">
<Grid>
<Button Content="← Back" HorizontalAlignment="Left" <Button Content="← Back" HorizontalAlignment="Left"
Style="{StaticResource SmallButton}" Style="{StaticResource SmallButton}" BorderThickness="0"
BorderThickness="0" Foreground="{StaticResource BlueBrush}" Foreground="{StaticResource BlueBrush}" Background="Transparent"
Click="BackFromSettings_Click" Margin="0,0,0,12"/> Click="BackFromSettings_Click"/>
<TextBlock Text="Settings" FontSize="14" FontWeight="SemiBold"
Foreground="{StaticResource TextBrush}"
HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
</Border>
<TextBlock Text="Settings" FontSize="16" FontWeight="SemiBold" <ScrollViewer VerticalScrollBarVisibility="Auto">
Foreground="White" Margin="0,0,0,16"/> <StackPanel Margin="20,16,20,20">
<!-- Auth --> <TextBlock Text="AUTHENTICATION" Style="{StaticResource HeaderText}" Margin="0,0,0,8"/>
<TextBlock Text="🔐 Authentication" Style="{StaticResource HeaderText}" Margin="0,0,0,8"/> <Border Background="{StaticResource CardBrush}" CornerRadius="6"
<StackPanel x:Name="AuthPanel" Margin="0,0,0,8"/> BorderBrush="{StaticResource BorderBrush}" BorderThickness="1"
<TextBlock Text="Your session is stored locally and persists across restarts." Padding="14,12" Margin="0,0,0,16">
FontSize="11" Foreground="{StaticResource SecondaryBrush}"
TextWrapping="Wrap" Margin="0,0,0,8"/>
<StackPanel Orientation="Horizontal" Margin="0,0,0,16">
<Button x:Name="SignInButton" Content="Sign In"
Style="{StaticResource SmallButton}" Click="SignIn_Click" Margin="0,0,8,0"/>
<Button x:Name="SignOutButton" Content="Sign Out"
Style="{StaticResource SmallButton}" Click="SignOut_Click"
Foreground="#EF4444" Visibility="Collapsed"/>
</StackPanel>
<Rectangle Height="0.5" Fill="{StaticResource BorderBrush}" Margin="0,0,0,16"/>
<!-- Beta channel -->
<TextBlock Text="📡 Update channel" Style="{StaticResource HeaderText}" Margin="0,0,0,8"/>
<Grid Margin="0,0,0,16">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel> <StackPanel>
<TextBlock Text="Beta updates" FontSize="12" Foreground="White"/> <StackPanel x:Name="AuthPanel" Margin="0,0,0,10"/>
<TextBlock Text="Receive early access builds — may be less stable" <TextBlock Text="Your session is stored locally and persists across restarts."
FontSize="11" Foreground="{StaticResource SecondaryBrush}"/> FontSize="11" Foreground="{StaticResource SecondaryBrush}"
TextWrapping="Wrap" Margin="0,0,0,10"/>
<StackPanel Orientation="Horizontal">
<Button x:Name="SignInButton" Content="Sign In"
Style="{StaticResource SmallButton}"
Click="SignIn_Click" Margin="0,0,8,0"/>
<Button x:Name="SignOutButton" Content="Sign Out"
Style="{StaticResource SmallButton}"
Click="SignOut_Click" Foreground="#C42B1C"
Visibility="Collapsed"/>
</StackPanel>
</StackPanel> </StackPanel>
<CheckBox Grid.Column="1" x:Name="BetaToggle" VerticalAlignment="Center" </Border>
Checked="BetaToggle_Changed" Unchecked="BetaToggle_Changed"/>
</Grid>
<Rectangle Height="0.5" Fill="{StaticResource BorderBrush}" Margin="0,0,0,16"/> <TextBlock Text="UPDATE CHANNEL" Style="{StaticResource HeaderText}" Margin="0,0,0,8"/>
<Border Background="{StaticResource CardBrush}" CornerRadius="6"
BorderBrush="{StaticResource BorderBrush}" BorderThickness="1"
Padding="14,12" Margin="0,0,0,16">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel>
<TextBlock Text="Beta updates" FontSize="12" FontWeight="SemiBold"
Foreground="{StaticResource TextBrush}"/>
<TextBlock Text="Receive early access builds — may be less stable"
FontSize="11" Foreground="{StaticResource SecondaryBrush}"/>
</StackPanel>
<CheckBox Grid.Column="1" x:Name="BetaToggle" VerticalAlignment="Center"
Checked="BetaToggle_Changed" Unchecked="BetaToggle_Changed"/>
</Grid>
</Border>
<!-- Refresh interval --> <TextBlock Text="AUTO-REFRESH" Style="{StaticResource HeaderText}" Margin="0,0,0,8"/>
<TextBlock Text="⏱ Auto-refresh interval" Style="{StaticResource HeaderText}" Margin="0,0,0,8"/> <Border Background="{StaticResource CardBrush}" CornerRadius="6"
<ComboBox x:Name="RefreshPicker" SelectionChanged="RefreshPicker_Changed" BorderBrush="{StaticResource BorderBrush}" BorderThickness="1"
Margin="0,0,0,16" FontSize="12"/> Padding="14,12" Margin="0,0,0,16">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="Refresh interval" FontSize="12" FontWeight="SemiBold"
Foreground="{StaticResource TextBrush}" VerticalAlignment="Center"/>
<ComboBox Grid.Column="1" x:Name="RefreshPicker" Width="100"
SelectionChanged="RefreshPicker_Changed"/>
</Grid>
</Border>
<Rectangle Height="0.5" Fill="{StaticResource BorderBrush}" Margin="0,0,0,16"/> <TextBlock Text="ABOUT" Style="{StaticResource HeaderText}" Margin="0,0,0,8"/>
<Border Background="{StaticResource CardBrush}" CornerRadius="6"
BorderBrush="{StaticResource BorderBrush}" BorderThickness="1"
Padding="14,12">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Image Width="36" Height="36" Source="Assets/icon.png"
RenderOptions.BitmapScalingMode="HighQuality" Margin="0,0,12,0"/>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<StackPanel Orientation="Horizontal">
<TextBlock Text="ClaudeChecker" FontSize="12" FontWeight="SemiBold"
Foreground="{StaticResource TextBrush}"/>
<Border Background="#F0F0F0" CornerRadius="3"
Margin="6,0,0,0" Padding="5,1">
<TextBlock x:Name="VersionLabel" FontSize="11"
Foreground="{StaticResource SecondaryBrush}"
FontFamily="Consolas"/>
</Border>
</StackPanel>
<TextBlock Text="Built by superdooper86 &amp; claude"
FontSize="11" Foreground="{StaticResource SecondaryBrush}"/>
</StackPanel>
<Button Grid.Column="2" x:Name="CheckUpdateButton"
Style="{StaticResource SmallButton}"
Click="CheckUpdate_Click" VerticalAlignment="Center"/>
</Grid>
</Border>
<!-- About --> </StackPanel>
</ScrollViewer>
</DockPanel>
</Border>
<!-- Update panel -->
<Border x:Name="UpdatePanel" Visibility="Collapsed"
Background="{StaticResource BackgroundBrush}">
<DockPanel>
<Border DockPanel.Dock="Top" BorderBrush="{StaticResource BorderBrush}"
BorderThickness="0,0,0,1" Background="#FAFAFA" Padding="12,10">
<Grid>
<Button Content="← Back" HorizontalAlignment="Left"
Style="{StaticResource SmallButton}" BorderThickness="0"
Foreground="{StaticResource BlueBrush}" Background="Transparent"
Click="CloseUpdate_Click"/>
<TextBlock Text="Update Available" FontSize="14" FontWeight="SemiBold"
Foreground="{StaticResource TextBrush}"
HorizontalAlignment="Center" VerticalAlignment="Center"/>
<Button x:Name="NotNowButton" Content="Not Now" HorizontalAlignment="Right"
Style="{StaticResource SmallButton}" Click="CloseUpdate_Click"/>
</Grid>
</Border>
<StackPanel Margin="20,16">
<Border Background="{StaticResource CardBrush}" CornerRadius="6"
BorderBrush="{StaticResource BorderBrush}" BorderThickness="1"
Padding="14,12" Margin="0,0,0,12">
<Grid> <Grid>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Image Width="36" Height="36" Source="Assets/icon.png" <Image Width="44" Height="44" Source="Assets/icon.png"
RenderOptions.BitmapScalingMode="HighQuality" Margin="0,0,12,0"/>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<StackPanel Orientation="Horizontal">
<TextBlock Text="ClaudeChecker" FontSize="12" FontWeight="SemiBold" Foreground="White"/>
<Border Background="#0FFFFFFF" CornerRadius="4" Margin="6,0,0,0" Padding="5,1">
<TextBlock x:Name="VersionLabel" FontSize="11"
Foreground="{StaticResource SecondaryBrush}"
FontFamily="Consolas"/>
</Border>
</StackPanel>
<TextBlock Text="Built by superdooper86 &amp; claude"
FontSize="11" Foreground="{StaticResource SecondaryBrush}"/>
</StackPanel>
<Button Grid.Column="2" x:Name="CheckUpdateButton"
Style="{StaticResource SmallButton}" Click="CheckUpdate_Click"
VerticalAlignment="Center"/>
</Grid>
</StackPanel>
</ScrollViewer>
</Border>
<!-- Update sheet -->
<Border x:Name="UpdatePanel" Visibility="Collapsed"
Background="{StaticResource BackgroundBrush}" CornerRadius="12">
<StackPanel>
<Grid Margin="16,12">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="Update ClaudeChecker" FontSize="14" FontWeight="SemiBold"
Foreground="White" VerticalAlignment="Center"/>
<Button Grid.Column="1" Content="Not Now" Style="{StaticResource SmallButton}"
Click="CloseUpdate_Click" x:Name="NotNowButton"/>
</Grid>
<Rectangle Height="0.5" Fill="{StaticResource BorderBrush}"/>
<StackPanel Margin="20">
<Grid Margin="0,0,0,16">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Image Width="48" Height="48" Source="Assets/icon.png"
RenderOptions.BitmapScalingMode="HighQuality" Margin="0,0,14,0"/> RenderOptions.BitmapScalingMode="HighQuality" Margin="0,0,14,0"/>
<StackPanel Grid.Column="1" VerticalAlignment="Center"> <StackPanel Grid.Column="1" VerticalAlignment="Center">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal" Margin="0,0,0,4">
<TextBlock x:Name="CurrentVerLabel" FontSize="12" FontFamily="Consolas" <TextBlock x:Name="CurrentVerLabel" FontSize="12" FontFamily="Consolas"
Foreground="{StaticResource SecondaryBrush}"/>
<TextBlock Text=" → " FontSize="10"
Foreground="{StaticResource SecondaryBrush}" VerticalAlignment="Center"/> Foreground="{StaticResource SecondaryBrush}" VerticalAlignment="Center"/>
<TextBlock Text=" → " FontSize="11" Foreground="{StaticResource SecondaryBrush}"
VerticalAlignment="Center"/>
<TextBlock x:Name="NewVerLabel" FontSize="13" FontWeight="SemiBold" <TextBlock x:Name="NewVerLabel" FontSize="13" FontWeight="SemiBold"
FontFamily="Consolas" Foreground="{StaticResource BlueBrush}"/> FontFamily="Consolas" Foreground="{StaticResource BlueBrush}"
VerticalAlignment="Center"/>
</StackPanel> </StackPanel>
<TextBlock x:Name="ReleaseNotesText" FontSize="11" TextWrapping="Wrap" <TextBlock x:Name="ReleaseNotesText" FontSize="11" TextWrapping="Wrap"
Foreground="{StaticResource SecondaryBrush}" Margin="0,4,0,0" Foreground="{StaticResource SecondaryBrush}" MaxHeight="160"/>
MaxHeight="180"/>
</StackPanel> </StackPanel>
</Grid> </Grid>
</Border>
<TextBlock x:Name="UpdateStatusText" Foreground="{StaticResource SecondaryBrush}" <TextBlock x:Name="UpdateStatusText" Foreground="{StaticResource SecondaryBrush}"
FontSize="11" TextWrapping="Wrap" TextAlignment="Center" FontSize="11" TextWrapping="Wrap" TextAlignment="Center"
Visibility="Collapsed" Margin="0,0,0,10"/> Visibility="Collapsed" Margin="0,0,0,8"/>
<ProgressBar x:Name="UpdateProgress" Visibility="Collapsed"
<ProgressBar x:Name="UpdateProgress" Visibility="Collapsed" Height="4" Margin="0,0,0,12" Foreground="{StaticResource BlueBrush}"/>
Height="4" Margin="0,0,0,12" Foreground="{StaticResource BlueBrush}"/> <TextBlock Text="ClaudeChecker will download, replace itself, and relaunch automatically."
FontSize="11" Foreground="{StaticResource SecondaryBrush}"
<TextBlock Text="ClaudeChecker will download the update, replace itself, and relaunch automatically." TextWrapping="Wrap" TextAlignment="Center" Margin="0,0,0,12"/>
FontSize="11" Foreground="{StaticResource SecondaryBrush}" <Button x:Name="InstallButton" Content="⬇ Download &amp; Install"
TextWrapping="Wrap" TextAlignment="Center" Margin="0,0,0,12"/> Style="{StaticResource PrimaryButton}" HorizontalAlignment="Stretch"
Click="Install_Click"/>
<Button x:Name="InstallButton" Content="⬇ Install Update"
Style="{StaticResource PrimaryButton}" HorizontalAlignment="Stretch"
Click="Install_Click"/>
</StackPanel>
</StackPanel> </StackPanel>
</Border> </DockPanel>
</Grid> </Border>
</Border> </Grid>
</Window> </Window>