Skip to content

feat: dark navigation rail matching design philosophy#486

Merged
tylerkron merged 3 commits intomainfrom
claude/epic-tesla-4ea445
Apr 18, 2026
Merged

feat: dark navigation rail matching design philosophy#486
tylerkron merged 3 commits intomainfrom
claude/epic-tesla-4ea445

Conversation

@tylerkron
Copy link
Copy Markdown
Contributor

Summary

Redesigns the left tab strip to match the Channels (#479) and Devices (#484) panes — dark surface, 3px accent stripe on selected, restrained icon/label pairs, no decorative white borders. Uses the same color tokens documented in docs/design-philosophy.md so the three redesigned surfaces now share one visual system.

  • Selected: surface lifts to #171A20, stripe fades in over 120ms, text/icon brighten to #F5F5F7
  • Hover (unselected only): surface lifts to #13161C, text/icon brighten, cursor becomes Hand
  • Focus visual: subtle 1px dashed ring for keyboard users (old template had none)
  • Drops the Label wrapper + IsEnabled="False" hack that was greying labels
  • Icons 30 → 24px, labels 11pt (Principle 8 — Restraint)

Per Principle 9, Live Graph / Logged Data / Profiles pane contents are deliberately not touched — they stay on MahApps light chrome until redesigned one-by-one. Legacy-in-transition is an intentional state, not a goal.

Test plan

  • Launch app — left rail is dark (#0D0F12), 1px divider against content area
  • Default tab (Live Graph) is selected on open: cyan stripe on left edge, surface slightly lifted, label/icon bright
  • Hover an unselected tab: background lifts subtly, label/icon brighten, cursor becomes Hand, no accent stripe
  • Click another tab: stripe fades in on new selection, fades out on old (~120ms)
  • Tab-key focus an unselected tab: dashed focus rectangle appears
  • All 5 tabs render their icon + label correctly (Live Graph, Logged Data, Channels, Devices, Profiles)
  • Channels and Devices panes still open and function (their own dark surfaces now visually continuous with the rail)
  • Live Graph / Logged Data / Profiles still open and function (on MahApps light chrome — expected until those are redesigned)
  • Hovering the currently-selected tab does not change its appearance (selected state wins)

🤖 Generated with Claude Code

Redesigns the left tab strip to match the Channels (#479) and Devices
(#484) panes: dark surface (#0D0F12), 3px accent stripe on selected,
restrained icon/label pairs, no decorative white borders. Uses the same
color tokens documented in docs/design-philosophy.md.

- Selected: surface lifts to #171A20, stripe fades in over 120ms, text
  and icon brighten to primary
- Hover (unselected only): surface lifts to #13161C, text/icon brighten,
  cursor becomes Hand
- Focus visual: subtle 1px dashed border for keyboard users
- Drops the Label wrapper + IsEnabled=False hack that was greying labels
- Icons 30 -> 24px, labels 11pt

Pane contents for Live Graph / Logged Data / Profiles are unchanged —
they stay on MahApps light chrome until redesigned per Principle 9
(legacy areas are transition states).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@tylerkron tylerkron requested a review from a team as a code owner April 18, 2026 19:53
@qodo-code-review
Copy link
Copy Markdown
Contributor

Review Summary by Qodo

✨ Enhancement

Grey Divider

Walkthroughs

Description
• Redesigns navigation rail with dark surface matching design philosophy
• Implements 3px accent stripe with 120ms fade animation on selection
• Adds keyboard focus visual and hover states for unselected tabs
• Reduces icon size 30→24px and applies restrained 11pt label styling
• Removes Label wrapper and IsEnabled hack, simplifies tab header structure
Diagram
flowchart LR
  OldNav["Old Navigation<br/>White borders<br/>30px icons<br/>Grey labels"] -- "Redesign" --> NewNav["Dark Navigation Rail<br/>#0D0F12 surface<br/>3px accent stripe<br/>24px icons"]
  NewNav -- "Selected state" --> Selected["#171A20 surface<br/>Cyan stripe fade-in<br/>Bright text"]
  NewNav -- "Hover unselected" --> Hover["#13161C surface<br/>Bright text<br/>Hand cursor"]
  NewNav -- "Focus keyboard" --> Focus["1px dashed border<br/>Accessibility"]
Loading

Grey Divider

File Changes

1. Daqifi.Desktop/MainWindow.xaml ✨ Enhancement +130/-60

Dark navigation rail with accent stripe animations

• Added 8 color token brushes for dark navigation rail (#0D0F12, #13161C, #171A20, etc.)
• Created NavTabItemFocusVisual style with 1px dashed border for keyboard accessibility
• Redesigned NavTabItem style with 3-column grid layout, accent stripe, and state-based animations
• Implemented 120ms fade animations for accent stripe on selection/deselection
• Added NavTabHeaderLabel style for 11pt centered text with 6px top margin
• Created NavTabControl style with dark background border and two-column layout
• Updated all 5 tab headers (Live Graph, Logged Data, Channels, Devices, Profiles) to use new
 StackPanel structure without Label wrapper
• Reduced icon sizes from 30px to 24px and adjusted margins from 10px to 14px
• Applied NavTabItem and NavTabControl styles to main TabControl element

Daqifi.Desktop/MainWindow.xaml


Grey Divider

Qodo Logo

@qodo-code-review
Copy link
Copy Markdown
Contributor

qodo-code-review Bot commented Apr 18, 2026

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0)

Grey Divider


Remediation recommended

1. Nested tabs restyled🐞 Bug ≡ Correctness
Description
Removing the Window-level implicit TabItem style and replacing it with a keyed NavTabItem applied
only to the left navigation TabControl will change the styling of other TabControls in MainWindow
(e.g., the Logged Data inner TabControl), creating a UI change outside the navigation rail scope.
Code

Daqifi.Desktop/MainWindow.xaml[R83-112]

+
+        <!-- Dark navigation rail — matches design philosophy tokens used in Channels/Devices panes -->
+        <SolidColorBrush x:Key="NavSurface" Color="#0D0F12"/>
+        <SolidColorBrush x:Key="NavSurfaceHover" Color="#13161C"/>
+        <SolidColorBrush x:Key="NavSurfaceActive" Color="#171A20"/>
+        <SolidColorBrush x:Key="NavBorder" Color="#2A2F38"/>
+        <SolidColorBrush x:Key="NavTextPrimary" Color="#F5F5F7"/>
+        <SolidColorBrush x:Key="NavTextSecondary" Color="#8E9199"/>
+        <SolidColorBrush x:Key="NavAccent" Color="#119EDA"/>
+
+        <Style x:Key="NavTabItemFocusVisual">
+            <Setter Property="Control.Template">
+                <Setter.Value>
+                    <ControlTemplate>
+                        <Rectangle Margin="2"
+                                   SnapsToDevicePixels="True"
+                                   Stroke="{StaticResource NavBorder}"
+                                   StrokeThickness="1"
+                                   StrokeDashArray="1 2"/>
+                    </ControlTemplate>
+                </Setter.Value>
+            </Setter>
+        </Style>
+
+        <Style x:Key="NavTabItem" TargetType="{x:Type TabItem}">
+            <Setter Property="Background" Value="Transparent"/>
+            <Setter Property="Foreground" Value="{StaticResource NavTextSecondary}"/>
+            <Setter Property="Padding" Value="0"/>
+            <Setter Property="Margin" Value="0"/>
+            <Setter Property="FocusVisualStyle" Value="{StaticResource NavTabItemFocusVisual}"/>
Evidence
MainWindow now defines a keyed TabItem style (NavTabItem) and applies it only via ItemContainerStyle
on the left-rail TabControl. The Logged Data tab contains a nested TabControl without any
Style/ItemContainerStyle, so it will not use NavTabItem and will render using theme/default TabItem
styling, unlike when an implicit TabItem style existed at the Window scope.

Daqifi.Desktop/MainWindow.xaml[82-168]
Daqifi.Desktop/MainWindow.xaml[244-249]
Daqifi.Desktop/MainWindow.xaml[510-532]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
MainWindow.xaml removed the implicit (window-scoped) `TabItem` style and replaced it with a keyed `NavTabItem` that is only applied to the left navigation rail via `ItemContainerStyle`. Other TabControls inside MainWindow (notably the Logged Data inner TabControl) will therefore change appearance.

### Issue Context
This PR targets the left navigation rail, but the style scoping change affects other TabControls in the same window.

### Fix Focus Areas
Decide intended styling for nested TabControls and make it explicit:
- If nested TabControls should remain on MahApps/default chrome: explicitly set their `Style` / `ItemContainerStyle` to the desired MahApps resources so they don’t change if a future implicit style is reintroduced.
- If nested TabControls should retain the previous custom look: apply an appropriate `ItemContainerStyle` / `Style` to those nested TabControls.

- Daqifi.Desktop/MainWindow.xaml[82-200]
- Daqifi.Desktop/MainWindow.xaml[510-540]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Duplicate token brush definitions🐞 Bug ⚙ Maintainability
Description
The PR introduces a new set of hex-defined navigation brushes (NavSurface/NavAccent/etc.) that
duplicates the same token colors already defined in Channels/Devices prototype resources and also
hard-coded in tile ViewModels, increasing the likelihood of visual drift when tokens change.
Code

Daqifi.Desktop/MainWindow.xaml[R85-92]

+        <SolidColorBrush x:Key="NavSurface" Color="#0D0F12"/>
+        <SolidColorBrush x:Key="NavSurfaceHover" Color="#13161C"/>
+        <SolidColorBrush x:Key="NavSurfaceActive" Color="#171A20"/>
+        <SolidColorBrush x:Key="NavBorder" Color="#2A2F38"/>
+        <SolidColorBrush x:Key="NavTextPrimary" Color="#F5F5F7"/>
+        <SolidColorBrush x:Key="NavTextSecondary" Color="#8E9199"/>
+        <SolidColorBrush x:Key="NavAccent" Color="#119EDA"/>
+
Evidence
MainWindow.xaml adds new brush resources using hex literals (e.g., #0D0F12, #171A20, #2A2F38,
#F5F5F7, #8E9199, #119EDA). The same hex values already exist under different keys in the
Channels/Devices prototype XAML resources and in code (ChannelTileViewModel/DeviceTileViewModel), so
token updates would require changing multiple places and can easily get out of sync.

Daqifi.Desktop/MainWindow.xaml[84-92]
Daqifi.Desktop/View/Prototype/ChannelsPanePrototype.xaml[12-23]
Daqifi.Desktop/View/Prototype/DevicesPanePrototype.xaml[15-29]
Daqifi.Desktop/ViewModels/ChannelTileViewModel.cs[133-146]
Daqifi.Desktop/ViewModels/DeviceTileViewModel.cs[104-115]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
Design token colors are duplicated in multiple places (MainWindow nav brushes, Channels/Devices prototype resources, and ViewModel hard-coded brushes). This increases maintenance cost and makes it easy for token updates to diverge.

### Issue Context
The PR adds another set of token brushes specifically for the nav rail.

### Fix Focus Areas
- Create a shared ResourceDictionary (e.g., `Daqifi.Desktop/Resources/DesignTokens.xaml`) defining the canonical brushes (Surface, SurfaceRaised, BorderDim, TextPrimary, TextSecondary, Accent, etc.).
- Merge that dictionary into App.xaml (or relevant scopes) and reference those shared keys from MainWindow.xaml, ChannelsPanePrototype.xaml, and DevicesPanePrototype.xaml.
- For ViewModel brushes, consider reading from application resources (or exposing them via a theme service) instead of hardcoding hex values.

- Daqifi.Desktop/MainWindow.xaml[84-200]
- Daqifi.Desktop/View/Prototype/ChannelsPanePrototype.xaml[12-23]
- Daqifi.Desktop/View/Prototype/DevicesPanePrototype.xaml[15-29]
- Daqifi.Desktop/ViewModels/ChannelTileViewModel.cs[133-146]
- Daqifi.Desktop/ViewModels/DeviceTileViewModel.cs[104-115]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

ⓘ The new review experience is currently in Beta. Learn more

Grey Divider

Qodo Logo

tylerkron and others added 2 commits April 18, 2026 13:56
Addresses Qodo review on #486.

1. Consolidate dark-palette brushes (Surface, BorderDim, TextPrimary,
   Accent, StatusGreen, …) into a single ResourceDictionary at
   /Resources/DesignTokens.xaml, merged in App.xaml. Removes the three-way
   duplication across MainWindow.xaml, ChannelsPanePrototype.xaml, and
   DevicesPanePrototype.xaml — the consolidation #479 originally filed as
   a follow-up. Adds SurfaceHover (#13161C) for the nav-rail hover state.

2. Preserve pre-PR styling on the nested Logged Data > Application Logs /
   Device Logs TabControl. The previous Window-scoped TabItem style was
   implicit and cascaded to nested TabControls; the keyed NavTabItem
   replacement does not. Re-introduce the original template as keyed
   LegacyRailTabItem and pin it to the nested TabControl via
   ItemContainerStyle so that pane is visually unchanged.

ViewModels (ChannelTileViewModel, DeviceTileViewModel) still hardcode the
hex values for tile background/border brushes — those switch to
Application.Current.Resources lookup separately, per the original #479
follow-up.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@tylerkron
Copy link
Copy Markdown
Contributor Author

Addressed both Qodo issues in 59ecaf9.

Issue 1 — Nested tabs restyled ✅ Fixed

Valid catch. The old TabItem style was implicit (no x:Key) and cascaded to the nested Logged Data → Application Logs/Device Logs TabControl. The keyed NavTabItem replacement does not, so that inner tab strip would have fallen through to raw WPF defaults.

Preserved pre-PR behavior by re-introducing the original template as keyed LegacyRailTabItem and pinning it to the nested TabControl via ItemContainerStyle. The nested Logged Data tabs are visually unchanged.

Issue 2 — Duplicate token brush definitions ✅ Fixed

Valid — this was the follow-up #479 originally filed, and my PR was adding a third duplication. Consolidated:

  • New Daqifi.Desktop/Resources/DesignTokens.xaml with canonical brushes (Surface, SurfaceHover, SurfaceRaised, SurfaceActive, BorderDim, BorderBright, TextPrimary, TextSecondary, TextTertiary, Accent, StatusGreen, StatusAmber, StatusRed)
  • Merged into App.xaml so all three XAML surfaces see the same tokens
  • Removed the duplicate brush blocks from MainWindow.xaml, ChannelsPanePrototype.xaml, and DevicesPanePrototype.xaml
  • Also folded in the 8 AppSettings.* brush duplications introduced by feat: unified Settings drawer matching design philosophy #485 (merged into this branch during rebase) — same hex values, same consolidation
  • Added SurfaceHover (#13161C) as a new canonical token for the nav-rail hover state

Left for a separate PR (matches the original #479 follow-up scope):

  • ChannelTileViewModel and DeviceTileViewModel still hardcode hex strings for tile background/border brushes. Those should switch to Application.Current.Resources lookup, but that's a VM-side change with its own testing surface.

@github-actions
Copy link
Copy Markdown

📊 Code Coverage Report

Summary

Summary
Generated on: 4/18/2026 - 8:13:45 PM
Coverage date: 4/18/2026 - 8:13:10 PM - 4/18/2026 - 8:13:40 PM
Parser: MultiReport (4x Cobertura)
Assemblies: 3
Classes: 119
Files: 150
Line coverage: 16.9% (1461 of 8620)
Covered lines: 1461
Uncovered lines: 7159
Coverable lines: 8620
Total lines: 24195
Branch coverage: 17.2% (501 of 2905)
Covered branches: 501
Total branches: 2905
Method coverage: Feature is only available for sponsors

Coverage

DAQiFi - 16.7%
Name Line Branch
DAQiFi 16.7% 17.2%
Daqifi.Desktop.App 5.4% 0%
Daqifi.Desktop.Channel.AbstractChannel 40.9% 27.7%
Daqifi.Desktop.Channel.AnalogChannel 58.7% 25%
Daqifi.Desktop.Channel.Channel 11.5% 0%
Daqifi.Desktop.Channel.ChannelColorManager 100% 100%
Daqifi.Desktop.Channel.DataSample 91.6%
Daqifi.Desktop.Channel.DigitalChannel 65.2% 25%
Daqifi.Desktop.Commands.CompositeCommand 0% 0%
Daqifi.Desktop.Commands.HostCommands 0%
Daqifi.Desktop.Commands.WeakEventHandlerManager 0% 0%
Daqifi.Desktop.Configuration.FirewallConfiguration 90.6% 66.6%
Daqifi.Desktop.Configuration.WindowsFirewallWrapper 64% 68.4%
Daqifi.Desktop.ConnectionManager 42.4% 39.2%
Daqifi.Desktop.Converters.BoolToActiveStatusConverter 0% 0%
Daqifi.Desktop.Converters.BoolToConnectionStatusConverter 0% 0%
Daqifi.Desktop.Converters.BoolToStatusColorConverter 0% 0%
Daqifi.Desktop.Converters.BrushColorMatchConverter 0% 0%
Daqifi.Desktop.Converters.ConnectionTypeToColorConverter 0% 0%
Daqifi.Desktop.Converters.ConnectionTypeToUsbConverter 0% 0%
Daqifi.Desktop.Converters.InvertedBoolToVisibilityConverter 0% 0%
Daqifi.Desktop.Converters.ListToStringConverter 0% 0%
Daqifi.Desktop.Converters.NotNullToVisibilityConverter 0% 0%
Daqifi.Desktop.Converters.OxyColorToBrushConverter 0% 0%
Daqifi.Desktop.Converters.StringRightConverter 0% 0%
Daqifi.Desktop.Device.AbstractStreamingDevice 42.9% 38.6%
Daqifi.Desktop.Device.DeviceMessage 0%
Daqifi.Desktop.Device.Firmware.BootloaderSessionStreamingDeviceAdapter 0% 0%
Daqifi.Desktop.Device.Firmware.WifiPromptDelayProcessRunner 0% 0%
Daqifi.Desktop.Device.NativeMethods 100%
Daqifi.Desktop.Device.SerialDevice.SerialStreamingDevice 27.6% 30.8%
Daqifi.Desktop.Device.WiFiDevice.DaqifiStreamingDevice 40.9% 39.4%
Daqifi.Desktop.DialogService.DialogService 0% 0%
Daqifi.Desktop.DialogService.ServiceLocator 0% 0%
Daqifi.Desktop.DiskSpace.DiskSpaceCheckResult 100%
Daqifi.Desktop.DiskSpace.DiskSpaceEventArgs 100%
Daqifi.Desktop.DiskSpace.DiskSpaceMonitor 88.2% 86.6%
Daqifi.Desktop.DuplicateDeviceCheckResult 100%
Daqifi.Desktop.Exporter.OptimizedLoggingSessionExporter 66.5% 62.7%
Daqifi.Desktop.Exporter.SampleData 100%
Daqifi.Desktop.Helpers.BooleanConverter`1 0% 0%
Daqifi.Desktop.Helpers.BooleanToInverseBoolConverter 0% 0%
Daqifi.Desktop.Helpers.BooleanToVisibilityConverter 0%
Daqifi.Desktop.Helpers.EnumDescriptionConverter 100% 100%
Daqifi.Desktop.Helpers.IntToVisibilityConverter 0% 0%
Daqifi.Desktop.Helpers.MinMaxDownsampler 98.6% 97.9%
Daqifi.Desktop.Helpers.MyMultiValueConverter 0%
Daqifi.Desktop.Helpers.NaturalSortHelper 100% 100%
Daqifi.Desktop.Helpers.VersionHelper 98.2% 66.2%
Daqifi.Desktop.Logger.DatabaseLogger 0% 0%
Daqifi.Desktop.Logger.DatabaseMigrator 0% 0%
Daqifi.Desktop.Logger.DeviceLegendGroup 100% 100%
Daqifi.Desktop.Logger.LoggedSeriesLegendItem 0% 0%
Daqifi.Desktop.Logger.LoggingContext 100%
Daqifi.Desktop.Logger.LoggingContextDesignTimeFactory 0%
Daqifi.Desktop.Logger.LoggingManager 0% 0%
Daqifi.Desktop.Logger.LoggingSession 16% 5%
Daqifi.Desktop.Logger.PlotLogger 0% 0%
Daqifi.Desktop.Logger.SessionDeviceMetadata 80%
Daqifi.Desktop.Logger.SummaryLogger 0% 0%
Daqifi.Desktop.Logger.TimestampGapDetector 95% 83.3%
Daqifi.Desktop.Loggers.ImportOptions 0%
Daqifi.Desktop.Loggers.ImportProgress 0% 0%
Daqifi.Desktop.Loggers.SdCardSessionImporter 0% 0%
Daqifi.Desktop.MainWindow 0% 0%
Daqifi.Desktop.Migrations.AddSamplesSessionTimeIndex 0%
Daqifi.Desktop.Migrations.AddSessionDeviceMetadata 0%
Daqifi.Desktop.Migrations.AddSessionSampleCount 0%
Daqifi.Desktop.Migrations.InitialSQLiteMigration 0%
Daqifi.Desktop.Migrations.LoggingContextModelSnapshot 0%
Daqifi.Desktop.Models.AddProfileModel 0%
Daqifi.Desktop.Models.DaqifiSettings 80.5% 83.3%
Daqifi.Desktop.Models.DebugDataCollection 6.6% 0%
Daqifi.Desktop.Models.DebugDataModel 0% 0%
Daqifi.Desktop.Models.Notifications 0%
Daqifi.Desktop.Models.SdCardFile 0% 0%
Daqifi.Desktop.Services.WindowsPrincipalAdminChecker 0%
Daqifi.Desktop.Services.WpfMessageBoxService 0%
Daqifi.Desktop.UpdateVersion.VersionNotification 0% 0%
Daqifi.Desktop.View.AddProfileConfirmationDialog 0% 0%
Daqifi.Desktop.View.AddprofileDialog 0% 0%
Daqifi.Desktop.View.ConnectionDialog 0% 0%
Daqifi.Desktop.View.DebugWindow 0% 0%
Daqifi.Desktop.View.DeviceLogsView 0% 0%
Daqifi.Desktop.View.DuplicateDeviceDialog 0% 0%
Daqifi.Desktop.View.ErrorDialog 0% 0%
Daqifi.Desktop.View.ExportDialog 0% 0%
Daqifi.Desktop.View.FirmwareDialog 0% 0%
Daqifi.Desktop.View.Flyouts.FirmwareFlyout 0% 0%
Daqifi.Desktop.View.Flyouts.LiveGraphFlyout 0% 0%
Daqifi.Desktop.View.Flyouts.LoggedSessionFlyout 0% 0%
Daqifi.Desktop.View.Flyouts.NotificationsFlyout 0% 0%
Daqifi.Desktop.View.Flyouts.SummaryFlyout 0% 0%
Daqifi.Desktop.View.Flyouts.UpdateProfileFlyout 0% 0%
Daqifi.Desktop.View.MigrationStatusWindow 0% 0%
Daqifi.Desktop.View.MinimapInteractionController 0% 0%
Daqifi.Desktop.View.Prototype.ChannelsPanePrototype 0% 0%
Daqifi.Desktop.View.Prototype.DevicesPanePrototype 0% 0%
Daqifi.Desktop.View.SuccessDialog 0% 0%
Daqifi.Desktop.ViewModels.AddProfileConfirmationDialogViewModel 0% 0%
Daqifi.Desktop.ViewModels.AddProfileDialogViewModel 0% 0%
Daqifi.Desktop.ViewModels.ChannelsPaneViewModel 0% 0%
Daqifi.Desktop.ViewModels.ChannelTileViewModel 0% 0%
Daqifi.Desktop.ViewModels.ConnectionDialogViewModel 21.7% 19.5%
Daqifi.Desktop.ViewModels.DaqifiViewModel 14.5% 8.1%
Daqifi.Desktop.ViewModels.DeviceLogsViewModel 0% 0%
Daqifi.Desktop.ViewModels.DevicesPaneViewModel 0% 0%
Daqifi.Desktop.ViewModels.DeviceTileViewModel 0% 0%
Daqifi.Desktop.ViewModels.DuplicateDeviceDialogViewModel 0%
Daqifi.Desktop.ViewModels.ErrorDialogViewModel 0%
Daqifi.Desktop.ViewModels.ExportDialogViewModel 0% 0%
Daqifi.Desktop.ViewModels.FirmwareDialogViewModel 0% 0%
Daqifi.Desktop.ViewModels.SettingsViewModel 0% 0%
Daqifi.Desktop.ViewModels.SuccessDialogViewModel 85.7%
Daqifi.Desktop.WindowViewModelMapping.IWindowViewModelMappingsContract 0%
Daqifi.Desktop.WindowViewModelMapping.WindowViewModelMappings 0%
Sentry.Generated.BuildPropertyInitializer 100%
Daqifi.Desktop.Common - 30.8%
Name Line Branch
Daqifi.Desktop.Common 30.8% 16.6%
Daqifi.Desktop.Common.Loggers.AppLogger 33.7% 16.6%
Daqifi.Desktop.Common.Loggers.NoOpLogger 0%
Daqifi.Desktop.IO - 100%
Name Line Branch
Daqifi.Desktop.IO 100% ****
Daqifi.Desktop.IO.Messages.MessageEventArgs`1 100%

Coverage report generated by ReportGeneratorView full report in build artifacts

@tylerkron tylerkron merged commit 450d240 into main Apr 18, 2026
2 checks passed
@tylerkron tylerkron deleted the claude/epic-tesla-4ea445 branch April 18, 2026 20:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant