121 lines
3.0 KiB
Markdown
121 lines
3.0 KiB
Markdown
# UI layout boundaries
|
|
|
|
The UI should follow a FinalShell-style work layout: navigation on the left,
|
|
tabs and terminal workspace in the center, and operational tools as separate
|
|
panels. Keep one terminal per tab. Terminal split panes are intentionally not
|
|
part of the product surface because they couple session lifecycle, resize,
|
|
SFTP, resource sampling, and focus handling too tightly.
|
|
|
|
## Independent Components
|
|
|
|
### AppShell
|
|
|
|
Owns the top-level layout only:
|
|
|
|
- left navigation width
|
|
- main workspace area
|
|
- top-right global actions
|
|
- modal/popup mounting
|
|
|
|
It should not own terminal rendering, SFTP state, or session form details.
|
|
|
|
### ConnectionNavigator
|
|
|
|
Left-side session tree/list, similar to FinalShell's connection manager:
|
|
|
|
- session groups
|
|
- saved sessions
|
|
- quick connect entry points
|
|
- edit/delete/import actions
|
|
|
|
This should replace putting the full session list on the welcome page as the
|
|
primary workflow. The welcome page can remain a light empty state.
|
|
|
|
### WorkspaceTabs
|
|
|
|
Owns tab metadata and switching:
|
|
|
|
- welcome tab
|
|
- terminal tabs
|
|
- close/select/new-tab commands
|
|
|
|
It should not know about SFTP rows, terminal spans, or resource graphs.
|
|
|
|
### TerminalWorkspace
|
|
|
|
Owns the active terminal tab content area:
|
|
|
|
- one `TerminalView` per active terminal tab
|
|
- keyboard focus routing
|
|
- terminal resize forwarding
|
|
- terminal status line
|
|
|
|
No split panes. If multiple terminals are needed, open multiple tabs.
|
|
|
|
### TerminalToolbar
|
|
|
|
Commands around the terminal should be separate from terminal rendering:
|
|
|
|
- command input
|
|
- run/save snippet buttons
|
|
- snippet popup
|
|
- find toggle
|
|
- copy/paste/clear actions
|
|
|
|
This keeps terminal grid rendering focused on VT output and selection.
|
|
|
|
### FilePanel
|
|
|
|
SFTP should be an independent panel, not terminal internals:
|
|
|
|
- remote path
|
|
- remote tree
|
|
- file list
|
|
- upload/download/view/edit/delete
|
|
- loading/status text
|
|
|
|
It can be docked below or to the right of the terminal, but its data model
|
|
should remain separate from terminal spans and cursor state.
|
|
|
|
### ResourcePanel
|
|
|
|
Local/remote machine stats should be independent:
|
|
|
|
- connection status
|
|
- CPU/memory/swap
|
|
- network graphs
|
|
- disk usage
|
|
|
|
It may live in the left sidebar initially, but it should not be mixed with
|
|
session navigation logic.
|
|
|
|
### TransferManager
|
|
|
|
Global transfer history/progress:
|
|
|
|
- active transfers
|
|
- completed transfers
|
|
- failed transfers
|
|
- clear/open download folder actions
|
|
|
|
This remains global because downloads can outlive tab focus.
|
|
|
|
### SessionEditor
|
|
|
|
Session creation and editing should stay modal and isolated:
|
|
|
|
- SSH/Telnet/Serial fields
|
|
- auth fields
|
|
- key picker
|
|
- validation and save/cancel
|
|
|
|
It should not manipulate tab/terminal models directly.
|
|
|
|
## Current Refactor Priority
|
|
|
|
1. Remove terminal split panes and keep one terminal per tab.
|
|
2. Move session navigation out of the welcome screen into an independent left
|
|
component.
|
|
3. Split `TerminalView` into terminal grid, command toolbar, and SFTP/file panel.
|
|
4. Keep resource stats and transfer manager as independent global panels.
|