diff --git a/docs/design-import-gaps.md b/docs/design-import-gaps.md index 170e643..c2b2a79 100644 --- a/docs/design-import-gaps.md +++ b/docs/design-import-gaps.md @@ -117,6 +117,43 @@ the chrome, hosts and terminals, file transfer, the vault, teams, and preference > | **Serial** beside **Terminal** in the toolbar | Omitted. Every session here is an SSH channel; a serial transport is not a button, it is a second session kind. | > | The strip's tabs inside the titlebar row, with a hamburger | A row of its own under the titlebar. The titlebar already carries the drag region, the search box, the sync light and three window controls, and the strip scrolls — putting both on one 44-pixel row would make the thing that scrolls fight the thing that drags. | > | A count on the S3 tab | Omitted. The rail entry it replaces carried one; a number on two of five tabs reads as a fact about those two rather than as the tab's own state, and a terminal tab has nothing to count. The count is on the S3 screen. | +> +> ## The desktop's v4 — the host detail pane +> +> A fourth pass, narrower than v3: one pane and the cards beside it. It changes the *shape* of the drawer +> rather than what is in it, and it changes one behaviour that is not cosmetic at all. +> +> **The drawer is asked for now.** Selecting a host used to open it, which charged 304 pixels of grid for +> the act of choosing — including every card arrowed past on the way to the one you wanted. A pencil appears +> on a card under the pointer, and on the selected card, and that is what opens the pane; +> `VaultViewModel.IsHostPaneOpen` is the flag, and the context menu has a **Details…** entry so the pane is +> reachable without a pointer. Once open the pane follows the selection, because a pane about one host +> beside a grid marking a different one is two answers to the same question. +> +> **The pane is three cards, a fixed header and a fixed footer.** Address, General, Connection — the same +> three in the detail pane and in the host editor, the first as rows and the second as boxes. Only the +> middle scrolls, so the button each panel exists to offer is never below the fold, which CONNECT could be +> on a host with fifteen tags. The detail pane's rows are *buttons that open the editor*: the design draws +> every fact as a filled box, and rather than draw an input that refuses the pointer, pressing one leads to +> the same card with a real box in it. Saving is a whole-host operation — it validates the key-or-credential +> exclusion and writes one encrypted payload — so a box committing per keystroke was never on offer. +> +> **A host card is two lines and no chips.** The subtitle is `ssh, root, pci, eu-west-1`: the transport, the +> resolved account, then every tag. It replaces the `user@host:port` line *and* the wrapped row of tag chips +> below it. The address moved to the card's tooltip rather than nowhere — a card is read while scanning +> forty machines, where the name and the kind of machine are what is being looked for, and an address is +> what you read once you have found it. +> +> | v4 element | What ships instead | +> | --- | --- | +> | **Share this host** | Omitted, as the vault screen's `SHARED WITH · 6` is. A grant is per *vault* and per-item sharing is M5; a button here would imply this one host could be handed over, which is the thing the architecture does not do. | +> | **Add Telnet**, and **Serial** in the toolbar | Omitted. `ISshConnection` is the only transport there is. This is also why the card subtitle's `ssh` is a constant today rather than a reading — it is stated in `HostRowViewModel.Summary`, which is the one place in this interface where a constant is printed on purpose. | +> | **+ SSH ID, Certificate, FIDO2** | Omitted. `IDENTITIES` and `CERTIFICATES` have been on this document's list since the first import — neither is even a reserved `SyncEntityType` — and there is no security-key path anywhere in the SSH layer. One control offering three item types that do not exist. | +> | The **Backspace / Default** row | Omitted. It is a terminal setting, and the client has no preferences store and no frame to carry one to the renderer — see the Preferences section. It would be a control whose value could not survive the window closing. | +> | The **chevron beside the vault name** | The name alone. An item cannot be moved between vaults: the two are encrypted under different keys, so moving one is a delete and a retype. Where a *new* item is filed is chosen on the keychain screen, which is the only vault question with an answer. | +> | **Show more ⌄** | Not drawn as a disclosure. What it would hide — notes, the relay switch, forgetting the host key — is in the editor, one press away, and a second fold inside a pane that already scrolls is a second place for a field to be missing from. | +> | **Port Forwarding** in the sidebar | Nothing, for the third time in this document. | +> | The host grid's toolbar avatar, share and tag-filter controls | Omitted, as in v3 and for the same reasons. | Most of it landed. This file is the rest: every element of that design with nothing behind it, which project each piece would have to land in, and **what the shipped interface does instead**. That last diff --git a/src/DodoSSH.Client.App/App.axaml b/src/DodoSSH.Client.App/App.axaml index 80ad3eb..c8372d4 100644 --- a/src/DodoSSH.Client.App/App.axaml +++ b/src/DodoSSH.Client.App/App.axaml @@ -625,6 +625,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + The subtitle is the keychain this host is filed in, and the design's chevron beside it is not drawn: + an item cannot be moved between vaults — the two are encrypted under different keys, so moving one + is a delete and a retype — and a picker offering the move would be offering something no layer below + this can do. + --> + + - - - - - - + + + - + + + + + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - + + + - + + + + + + + + - - - - - + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + - - - - - - - - - - -