Give hosts and terminals their own screen, and the rest of the vault another
ci / build and test (ubuntu) (pull_request) Canceled after 0s
ci / build (windows) (pull_request) Canceled after 0s

Rebuilds the client's shell from an imported design: a titlebar and nav rail
it draws itself, real multi-session tabs over the one WebView, a Ctrl+K host
search, and a vault screen that merges keys, passwords and pinned host keys
into one table. Hosts left the vault column for their own screen beside the
terminal, which is what the design asks for and turned out to be the better
split anyway.

Two screens the design shows have nothing behind them yet — file transfer
and teams — and say so plainly rather than rendering invented data; every
other gap between the design and this build is recorded in
docs/design-import-gaps.md.
This commit is contained in:
2026-07-31 08:39:37 +02:00
parent d162271a45
commit 9a76eced14
37 changed files with 4672 additions and 1347 deletions
@@ -0,0 +1,54 @@
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="DodoSSH.Client.App.Views.NotBuiltScreen">
<!--
The screen behind a nav-rail entry whose feature does not exist.
One control for both of them, taking its words as properties, because the two say the same kind of thing
and a second copy of this layout would be a second place for the tone to drift. The tone is the point:
this project's README states its limits rather than implying them, and the failure mode this screen
exists to prevent is a plausible-looking file browser full of invented files.
Deliberately not a disabled nav entry. A greyed-out destination says "broken" or "not for you"; a screen
that names the milestone, lists what is missing and says what to do instead says what is actually true.
-->
<ScrollViewer>
<StackPanel MaxWidth="560" Margin="28,26" HorizontalAlignment="Left">
<StackPanel Orientation="Horizontal" Spacing="10">
<TextBlock Classes="mono" Name="TitleText" FontSize="16" FontWeight="SemiBold" LetterSpacing="0.5"
Foreground="{StaticResource Text}" VerticalAlignment="Center" />
<Border Classes="chip warn">
<TextBlock Name="MilestoneText" />
</Border>
</StackPanel>
<TextBlock Name="SummaryText" Classes="hint" FontSize="12" Margin="0,10,0,0" />
<TextBlock Classes="label" Text="WHAT IS MISSING" Margin="0,24,0,8" />
<ItemsControl Name="MissingList">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid ColumnDefinitions="Auto,*" Margin="0,0,0,7">
<TextBlock Grid.Column="0" Classes="mono" Text="·" Foreground="{StaticResource TextFaint}"
Margin="0,0,8,0" />
<TextBlock Grid.Column="1" Classes="hint" FontSize="11" Text="{Binding}" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<Border Background="{StaticResource Raised}" BorderBrush="{StaticResource Border}" BorderThickness="1"
CornerRadius="4" Padding="12" Margin="0,18,0,0">
<TextBlock Name="InsteadText" Classes="hint" FontSize="11" />
</Border>
<TextBlock Classes="hint" FontSize="10" Margin="0,14,0,0"
Text="Everything this design asked for and this build does not have is written down in docs/design-import-gaps.md, with which project each piece would land in." />
</StackPanel>
</ScrollViewer>
</UserControl>