Revamp desktop usability and multiline fields
This commit is contained in:
@@ -10,17 +10,17 @@ requires every registered action ID to remain present in this document.
|
||||
|
||||
| Area and compatible operation | Registered desktop action and menu | Direct control, dialog, or view | Command palette |
|
||||
| --- | --- | --- | --- |
|
||||
| Configuration and lock: open configured store | `open-folder` (File) | Open Folder button and native folder picker; storage validates and persists configuration | Yes |
|
||||
| Configuration and lock: open configured store | `open-folder` (File) | Compact toolbar control and native folder picker; storage validates and persists configuration | Yes |
|
||||
| Configuration and lock: edit shared settings | `settings` (IronStorage) | Labelled Settings form for vault, default key, and inactivity timeout | Yes |
|
||||
| Configuration and lock: refresh typed tree | `refresh` (View) | Sidebar Refresh button | Yes |
|
||||
| Configuration and lock: lock/unlock | `lock` (Tools) | Lock button; opening protected content starts storage authentication | Lock only; unlock is the protected action being resumed |
|
||||
| Configuration and lock: refresh typed tree | `refresh` (View) | Sidebar Refresh control | Yes |
|
||||
| Configuration and lock: lock/unlock | `lock` (Tools) | Toolbar Lock control; opening protected content starts storage authentication | Lock only; unlock is the protected action being resumed |
|
||||
| Base pass: `init` root or nested recipient policy | `initialize-store`, `new-folder` (File) | Recipient/default-key form and explicit replacement confirmation | Yes |
|
||||
| Base pass: default/list/`ls`/`list` | `refresh` (View) | Expandable, scrollable storage-provided sidebar tree | Yes for refresh; browsing is direct navigation |
|
||||
| Base pass: `show` and reload | `open-entry`, `reload-entry` (Entry) | Entry path control, tree activation, structured viewer, Reload button | Yes |
|
||||
| Base pass: default/list/`ls`/`list` | `refresh` (View) | Expandable storage-provided tree with object icons and descendant entry counts | Yes for refresh; browsing is direct navigation |
|
||||
| Base pass: `show` and reload | `open-entry`, `reload-entry` (Entry) | Tree activation, typed identity header, structured viewer, Reload control | Yes |
|
||||
| Base pass: `insert`/`add` | `new-entry` (File) | New Entry form creates a lossless draft, then the structured editor saves it | Yes |
|
||||
| Base pass: `edit` and save | `edit-entry`, `save` (Entry/File) | Edit and Save buttons; shared Save/Discard/Cancel guard | Yes |
|
||||
| Base pass: `edit` and save | `edit-entry`, `save` (Entry/File) | Compact Edit and Save controls; shared Save/Discard/Cancel guard | Yes |
|
||||
| Base pass: `generate` and replace | `generate-password` (Entry) | Field Generate control and explicit replacement confirmation | Yes |
|
||||
| Base pass: explicit secret display and clipboard | `toggle-reveal`, `copy-field`, `copy-edited-field` (Entry) | Per-field labelled Reveal/Hide and Copy controls | Yes |
|
||||
| Base pass: authenticated values and clipboard | `copy-field`, `copy-edited-field` (Entry) | Every field is visible while unlocked; compact Copy controls retain the configured cleanup countdown | Yes |
|
||||
| Base pass: `find` | `find` (Edit) | Name-search form and typed result activation | Yes |
|
||||
| Base pass: `grep` | `search-contents` (Edit) | Authenticated decrypted-search form and typed result activation | Yes |
|
||||
| Base pass: `mv`/`rename`, `cp`/`copy`, `rm`/`remove` | `move-entry`, `copy-entry`, `delete-entry` (Entry) | Sidebar context controls and validated mutation forms; delete is confirmed | Yes |
|
||||
@@ -54,13 +54,12 @@ These are deliberate presentation differences, not storage-feature gaps.
|
||||
accelerators. The same controls are mouse/touch activatable; sidebar context
|
||||
actions also accept a secondary click.
|
||||
- Both panes are independently scrollable, the divider is resizable, action
|
||||
rows wrap, long names and multiline values are retained, and the supported
|
||||
narrow window floor is 720 by 480 logical pixels. Iced/winit applies native
|
||||
rows wrap, long names and storage-grouped multiline values are retained, and
|
||||
the supported narrow window floor is 480 by 360 logical pixels. Iced/winit applies native
|
||||
display scaling before layout.
|
||||
- Interactive controls use visible, operation-specific text instead of icon-
|
||||
only labels. Focused/selected controls use the theme's primary contrast pair;
|
||||
light, dark, and operating-system high-contrast palettes retain a visible
|
||||
text label as a non-colour focus cue.
|
||||
- Compact toolbar controls use one 16-by-16 vector icon system with descriptive
|
||||
delayed tooltips and registered shortcuts. Focused/selected rows use the
|
||||
theme's primary contrast pair; field labels remain visible as a non-colour cue.
|
||||
- The app implements no animation or motion-driven state transition. The one-
|
||||
second subscription updates lease, OTP, Git, and clipboard presentation state
|
||||
without moving focus or renewing authentication, so reduced-motion mode has
|
||||
@@ -104,7 +103,7 @@ remain native-host smoke checks because CI cannot emulate those OS services.
|
||||
| Risk | Enforced behavior and executable evidence |
|
||||
| --- | --- |
|
||||
| Plaintext lifetime and persistence | Entry/OTP values use storage `SecretBytes` or zeroizing edit buffers. Lock, expiry, vault switch, and stale completion paths drop the editor and sensitive presentation state. The source audit rejects desktop filesystem writes. |
|
||||
| Masking, errors, and diagnostics | Storage supplies sensitivity and redacted typed errors. Viewer/editor tests require masking until explicit reveal; malformed and non-UTF-8 fields remain lossless. Desktop messages are not `Debug`, and the source audit rejects print/debug/log-style output. |
|
||||
| Authenticated values, errors, and diagnostics | Storage supplies sensitivity and redacted typed errors. Viewer/editor tests require every field to remain visible until lock or lease expiry; malformed and non-UTF-8 fields remain lossless. Desktop messages are not `Debug`, and the source audit rejects print/debug/log-style output. |
|
||||
| Clipboard | `NativeClipboardManager` owns timeout and replacement-safe cleanup. Desktop state shows a live remaining-seconds value, cancels cleanup on lock, and ignores stale completions. |
|
||||
| Authentication expiry | Storage authentication leases own the clock and policy. Passive ticks, rendering, pointer movement, and window events do not renew activity; deterministic tests cover expiry during protected state. |
|
||||
| Dirty documents and conflicts | Every entry/vault/window/Git worktree replacement routes through one Save/Discard/Cancel decision. Failed saves and conflicts keep the complete draft. |
|
||||
|
||||
Reference in New Issue
Block a user