From d91729c0b8a0f3b56c30bf7290d55f06e5498730 Mon Sep 17 00:00:00 2001 From: Jaap-Jan de Wit | DodoTech Date: Sat, 8 Aug 2026 00:49:59 +0200 Subject: [PATCH] Restyle the keychain, the snips and the logs to their v5b shapes --- .../Views/KeychainScreen.axaml | 1032 +++++++++-------- src/DodoSSH.Client.App/Views/LogsScreen.axaml | 337 ++++-- .../Views/SnippetsScreen.axaml | 542 +++++---- 3 files changed, 1117 insertions(+), 794 deletions(-) diff --git a/src/DodoSSH.Client.App/Views/KeychainScreen.axaml b/src/DodoSSH.Client.App/Views/KeychainScreen.axaml index f8a86c9..2c264cc 100644 --- a/src/DodoSSH.Client.App/Views/KeychainScreen.axaml +++ b/src/DodoSSH.Client.App/Views/KeychainScreen.axaml @@ -26,503 +26,613 @@ when somebody is in a team — but it is still not a selector, because every table on this screen already spans every keychain this session holds a key for and each row names its own. What it carries instead is the one keychain question with an answer: where a new item is filed. + + ── v5b — Keychain.dc.html ────────────────────────────────────────────────────────────────────────────── + A fidelity pass over the shape above, not a new one. What moved: + + ◆ THE HEADER. "Keychain" 33 bold, a count chip, and on the right a "Host keys" ghost button — the + design's own doorway to the pins screen, wired to the shell's existing ShowScreenCommand via + $parent[Window] since this screen's own DataContext is the vault rather than the shell — and one + "+ New key" accent button rather than the five GENERATE / + SSH KEY / + PASSWORD / + TAG / + BUCKET + buttons the toolbar used to spread across the table's own header. ◆ DECIDED DEVIATION: the design draws + one button because its mock has one "add" concept; this application has five, and folding five capabilities + into one visible button without losing any of them means the button opens a menu naming all five, in the + same order the old toolbar had them, rather than guessing which one the design's single button "really" + meant. GENERATE keeps its own tooltip; the strip's own essay comment about why it lost the word KEY is now + moot — the width pressure that produced it left with the buttons. + + ◆ THE RAIL. 200px, Sidebar-bg, KEYCHAIN tracked label, category rows restyled to Button.cat's own idiom + (unchanged binding, new width). Below the divider: SCOPES stays — this session's current vault, named, + since that fact is real and the design's mock is a single-vault sample with nothing to show it — and then + NEW ITEMS FILE TO, the design's own wording for the picker this screen already had as "NEW ITEMS GO TO". + Adopted rather than kept: nothing in this file's own essay comments ever defended "GO TO" over "FILE TO", + and the comment above the picker already says "where a new item is filed" — the design's word was this + screen's own vocabulary already. + + ◆ THE TABLE. A 44px sub-toolbar (the section summary, left; a 240px filter box, right — this table had no + filter box before, and the design's has one) and tracked column headers. The design's own five are + NAME/TYPE/VAULT/USED BY/MODIFIED; MODIFIED is dropped — VaultItem carries no timestamp of any kind (id, + secret, version, three sync flags — see docs/design-import-gaps.md) — and USED BY is real for a key or a + credential (which hosts authenticate with it, the same fact VaultViewModel.HostsBoundTo already computes + for the deletion warning) and empty for a tag (its own host count already covers the same ground) or a + bucket (nothing in this codebase resolves a host's authentication to an object store). Rows: a type glyph, + the mono name, the type word, and the vault chip — VaultItemRowViewModel.VaultBadge, empty except where + more than one vault is in play, the same convention every other list in this application follows. + + ◆ THE DETAIL PANE, 300px. PUBLIC KEY draws when the selected key has one stored. FINGERPRINT is not + drawn at all — this codebase has never computed one; see docs/design-import-gaps.md's own recorded gap, + "no algorithm field, no fingerprint, and computing either means parsing armour the type stores verbatim." + USED BY draws real host rows — the same HostsBoundTo scan, with each host's own two-state dot — only for + a key or a credential, and only while at least one host actually authenticates with the selected item; the + "in use · N hosts" chip beside the vault chip is gated the same way. The action buttons keep their + existing commands and their existing honesty: COPY PUBLIC KEY only for a key, MOVE only where + CanMoveSelectedItem says there is somewhere to move to, DELETE always. "Choose something on the left…" + stays as the empty state, restyled. --> - + - - - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - + + + - - + + + + - - - - - - - - - - + - - - - + - - + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -