Fix layout, terminal sizing, notifications, and sidebar styling
Layout: - Add panel-container and session-panel CSS so workspace content doesn't overlap sidebar - Session panels use position: absolute to fill workspace area - Workspace is now flex column for proper empty-state/panel stacking Terminal: - xterm.js overrides now target .session-panel in addition to .terminal-container so terminal fills available space - Added debounced window resize handler for terminal re-fit Notifications: - Rewrote Notifications class to emit .notification-* classes matching the existing polished CSS (was emitting .toast-* with no CSS) - Icon is now a small coloured circle badge instead of oversized SVG Sidebar: - Fixed class mismatches: sidebar-dot → protocol-indicator, sidebar-item-sub → sidebar-item-host, sidebar-star → sidebar-item-star - protocolColour() now returns proto-ssh etc. matching CSS selectors Other: - Replaced prompt() in tab rename with custom _inputPrompt modal
This commit is contained in:
@@ -623,11 +623,24 @@
|
||||
|
||||
.notification-icon {
|
||||
flex-shrink: 0;
|
||||
font-size: var(--text-lg);
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: 50%;
|
||||
font-size: 11px;
|
||||
font-weight: var(--weight-bold);
|
||||
line-height: 1;
|
||||
margin-top: 1px;
|
||||
color: var(--text-inverse);
|
||||
background: var(--text-tertiary);
|
||||
}
|
||||
|
||||
.notification-success .notification-icon { background: var(--success); }
|
||||
.notification-error .notification-icon { background: var(--error); }
|
||||
.notification-warning .notification-icon { background: var(--warning); }
|
||||
.notification-info .notification-icon { background: var(--info); }
|
||||
|
||||
.notification-body {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
@@ -665,16 +678,9 @@
|
||||
|
||||
/* Colour variants (left border accent) */
|
||||
.notification-success { border-left: 3px solid var(--success); }
|
||||
.notification-success .notification-icon { color: var(--success); }
|
||||
|
||||
.notification-error { border-left: 3px solid var(--error); }
|
||||
.notification-error .notification-icon { color: var(--error); }
|
||||
|
||||
.notification-error { border-left: 3px solid var(--error); }
|
||||
.notification-warning { border-left: 3px solid var(--warning); }
|
||||
.notification-warning .notification-icon { color: var(--warning); }
|
||||
|
||||
.notification-info { border-left: 3px solid var(--info); }
|
||||
.notification-info .notification-icon { color: var(--info); }
|
||||
.notification-info { border-left: 3px solid var(--info); }
|
||||
|
||||
|
||||
/* =======================================================================
|
||||
@@ -790,7 +796,7 @@
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 100%;
|
||||
flex: 1;
|
||||
padding: var(--space-8);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
@@ -70,6 +70,24 @@
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
background: var(--bg-base);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
/* Panel container — fills workspace, holds session panels */
|
||||
.panel-container {
|
||||
flex: 1;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Individual session panel — one per tab, fills the panel container */
|
||||
.session-panel {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Terminal container — fills workspace */
|
||||
|
||||
@@ -67,37 +67,50 @@
|
||||
}
|
||||
|
||||
/* xterm.js overrides for consistent look */
|
||||
.terminal-container .xterm {
|
||||
.terminal-container .xterm,
|
||||
.session-panel .xterm {
|
||||
height: 100%;
|
||||
padding: 0;
|
||||
padding: var(--space-1);
|
||||
}
|
||||
|
||||
.terminal-container .xterm-viewport {
|
||||
.terminal-container .xterm-screen,
|
||||
.session-panel .xterm-screen {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.terminal-container .xterm-viewport,
|
||||
.session-panel .xterm-viewport {
|
||||
/* Allow xterm's own scrollbar to work */
|
||||
overflow-y: auto !important;
|
||||
}
|
||||
|
||||
.terminal-container .xterm-viewport::-webkit-scrollbar {
|
||||
.terminal-container .xterm-viewport::-webkit-scrollbar,
|
||||
.session-panel .xterm-viewport::-webkit-scrollbar {
|
||||
width: 6px;
|
||||
}
|
||||
.terminal-container .xterm-viewport::-webkit-scrollbar-track {
|
||||
.terminal-container .xterm-viewport::-webkit-scrollbar-track,
|
||||
.session-panel .xterm-viewport::-webkit-scrollbar-track {
|
||||
background: transparent;
|
||||
}
|
||||
.terminal-container .xterm-viewport::-webkit-scrollbar-thumb {
|
||||
.terminal-container .xterm-viewport::-webkit-scrollbar-thumb,
|
||||
.session-panel .xterm-viewport::-webkit-scrollbar-thumb {
|
||||
background: var(--border-strong);
|
||||
border-radius: var(--radius-full);
|
||||
}
|
||||
.terminal-container .xterm-viewport::-webkit-scrollbar-thumb:hover {
|
||||
.terminal-container .xterm-viewport::-webkit-scrollbar-thumb:hover,
|
||||
.session-panel .xterm-viewport::-webkit-scrollbar-thumb:hover {
|
||||
background: var(--text-tertiary);
|
||||
}
|
||||
|
||||
/* Ensure cursor blink is visible */
|
||||
.terminal-container .xterm-cursor-layer {
|
||||
.terminal-container .xterm-cursor-layer,
|
||||
.session-panel .xterm-cursor-layer {
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
/* Selection styling within terminal */
|
||||
.terminal-container .xterm .xterm-selection div {
|
||||
.terminal-container .xterm .xterm-selection div,
|
||||
.session-panel .xterm .xterm-selection div {
|
||||
background: var(--accent-strong) !important;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user