|
96 | 96 | position: relative; |
97 | 97 | } |
98 | 98 |
|
99 | | -/* Tab bar: 30px flex spacer, flyout sits inside absolutely */ |
| 99 | +/* Tab bar: static sidebar, width switches via .terminal-tabs-expanded on container */ |
100 | 100 | .terminal-tab-bar { |
101 | 101 | position: relative; |
102 | | - width: 30px; |
103 | | - min-width: 30px; |
104 | | - overflow: visible; |
| 102 | + width: 60px; |
| 103 | + min-width: 60px; |
| 104 | +} |
| 105 | + |
| 106 | +.terminal-tabs-expanded .terminal-tab-bar { |
| 107 | + width: 170px; |
| 108 | + min-width: 170px; |
105 | 109 | } |
106 | 110 |
|
107 | | -/* ─── Unified flyout: collapses to 30px, expands on hover ─── */ |
| 111 | +/* ─── Tab sidebar: static, no flyout/hover ─── */ |
108 | 112 | .terminal-tab-flyout { |
109 | 113 | display: flex; |
110 | | - position: absolute; |
111 | | - top: 0; |
112 | | - right: 0; |
113 | | - bottom: 0; |
114 | | - width: 30px; |
| 114 | + position: relative; |
| 115 | + width: 100%; |
| 116 | + height: 100%; |
115 | 117 | background: var(--terminal-tab-bg); |
116 | 118 | border-left: 1px solid var(--terminal-border); |
117 | | - z-index: 20; |
118 | 119 | flex-direction: column; |
119 | | - transition: width 0.08s ease; |
| 120 | + overflow: hidden; |
120 | 121 | } |
121 | 122 |
|
122 | | -.terminal-tab-flyout:hover { |
123 | | - width: 170px; |
124 | | - box-shadow: -2px 0 8px rgba(0, 0, 0, 0.3); |
| 123 | +/* Fade gradient at bottom of tab list to hint overflow */ |
| 124 | +.terminal-tab-flyout::after { |
| 125 | + content: ''; |
| 126 | + position: absolute; |
| 127 | + bottom: 29px; /* sits above the actions row */ |
| 128 | + left: 0; |
| 129 | + right: 0; |
| 130 | + height: 20px; |
| 131 | + background: linear-gradient(to bottom, transparent, var(--terminal-tab-bg)); |
| 132 | + pointer-events: none; |
| 133 | + z-index: 1; |
125 | 134 | } |
126 | 135 |
|
127 | | -/* Flyout list: scrollable, scrollbar hidden in collapsed mode */ |
| 136 | +/* Tab list: scrollable, scrollbar hidden, scroll via wheel/trackpad */ |
128 | 137 | .terminal-tab-flyout .terminal-flyout-list { |
129 | 138 | flex: 1; |
130 | 139 | min-height: 0; |
|
136 | 145 | } |
137 | 146 | } |
138 | 147 |
|
139 | | -.terminal-tab-flyout:hover .terminal-flyout-list { |
140 | | - scrollbar-width: auto; |
141 | | - &::-webkit-scrollbar { |
142 | | - display: block; |
143 | | - } |
144 | | -} |
145 | | - |
146 | 148 | /* Flyout item */ |
147 | 149 | .terminal-flyout-item { |
148 | 150 | position: relative; |
|
167 | 169 | box-shadow: inset 2px 0 0 #007acc; |
168 | 170 | } |
169 | 171 |
|
170 | | -/* Icon column: fixed 30px slot, always visible in collapsed mode. |
171 | | - In expanded mode, CSS order moves it to the right end. */ |
| 172 | +/* Icon column: fixed 30px slot */ |
172 | 173 | .terminal-flyout-icon { |
173 | 174 | width: 30px; |
174 | 175 | min-width: 30px; |
|
179 | 180 | flex-shrink: 0; |
180 | 181 | } |
181 | 182 |
|
182 | | -/* Title: fills remaining space */ |
| 183 | +/* Title & CWD: hidden in collapsed, shown in expanded */ |
183 | 184 | .terminal-flyout-title { |
184 | 185 | flex: 1; |
185 | 186 | min-width: 0; |
186 | 187 | overflow: hidden; |
187 | 188 | text-overflow: ellipsis; |
| 189 | + display: none; |
188 | 190 | } |
189 | 191 |
|
190 | | -/* CWD basename shown on the right */ |
191 | 192 | .terminal-flyout-cwd { |
192 | 193 | font-size: 11px; |
193 | 194 | color: var(--terminal-tab-text); |
|
199 | 200 | opacity: 0.6; |
200 | 201 | overflow: hidden; |
201 | 202 | text-overflow: ellipsis; |
| 203 | + display: none; |
202 | 204 | } |
203 | 205 |
|
204 | | -/* Expanded mode: reorder so icon is at the right end, |
205 | | - add left padding for close button area */ |
206 | | -.terminal-tab-flyout:hover .terminal-flyout-item { |
207 | | - padding-left: 30px; |
208 | | -} |
209 | | - |
210 | | -.terminal-tab-flyout:hover .terminal-flyout-icon { |
211 | | - order: 99; |
212 | | -} |
213 | | - |
214 | | -/* Close button: overlays left padding area, visible only when |
215 | | - flyout is expanded AND the specific item is hovered */ |
| 206 | +/* Close button: absolutely positioned on the right, visible on item hover only */ |
216 | 207 | .terminal-flyout-close { |
217 | 208 | position: absolute; |
218 | | - left: 0; |
| 209 | + right: 0; |
219 | 210 | top: 0; |
220 | 211 | bottom: 0; |
221 | | - width: 30px; |
| 212 | + width: 20px; |
222 | 213 | display: none; |
223 | 214 | align-items: center; |
224 | 215 | justify-content: center; |
|
228 | 219 | z-index: 1; |
229 | 220 | } |
230 | 221 |
|
231 | | -.terminal-tab-flyout:hover .terminal-flyout-item:hover .terminal-flyout-close { |
| 222 | +.terminal-flyout-item:hover .terminal-flyout-close { |
232 | 223 | display: flex; |
233 | 224 | } |
234 | 225 |
|
|
237 | 228 | background: rgba(255, 255, 255, 0.1); |
238 | 229 | } |
239 | 230 |
|
| 231 | +/* ─── Expanded mode ─── */ |
| 232 | +.terminal-tabs-expanded .terminal-flyout-title { |
| 233 | + display: block; |
| 234 | +} |
| 235 | + |
| 236 | +.terminal-tabs-expanded .terminal-flyout-cwd { |
| 237 | + display: block; |
| 238 | +} |
| 239 | + |
| 240 | +/* Reserve space so cwd text doesn't sit under the close button */ |
| 241 | +.terminal-tabs-expanded .terminal-flyout-cwd { |
| 242 | + margin-right: 20px; |
| 243 | +} |
| 244 | + |
| 245 | + |
240 | 246 | /* ─── Flyout bottom actions ─── */ |
241 | 247 | .terminal-flyout-actions { |
242 | 248 | border-top: 1px solid var(--terminal-border); |
|
272 | 278 | color: var(--terminal-tab-active-text); |
273 | 279 | } |
274 | 280 |
|
275 | | -/* Dropdown chevron: hidden in collapsed mode, shown inline when expanded */ |
| 281 | +/* Dropdown chevron: visible in both modes */ |
276 | 282 | .terminal-flyout-dropdown-btn { |
277 | | - display: none; |
| 283 | + display: flex; |
278 | 284 | align-items: center; |
279 | 285 | justify-content: center; |
280 | 286 | width: 30px; |
|
289 | 295 | flex-shrink: 0; |
290 | 296 | } |
291 | 297 |
|
292 | | -.terminal-tab-flyout:hover .terminal-flyout-dropdown-btn { |
293 | | - display: flex; |
294 | | -} |
295 | | - |
296 | 298 | .terminal-flyout-dropdown-btn:hover { |
297 | 299 | background: rgba(255, 255, 255, 0.05); |
298 | 300 | color: var(--terminal-tab-active-text); |
|
304 | 306 | flex-shrink: 0; |
305 | 307 | } |
306 | 308 |
|
307 | | -/* Hide button labels in collapsed mode; show when expanded */ |
308 | | -.terminal-tab-flyout .terminal-btn-label { |
| 309 | +/* Button labels: hidden in collapsed, shown in expanded */ |
| 310 | +.terminal-btn-label { |
309 | 311 | display: none; |
310 | 312 | } |
311 | 313 |
|
312 | | -.terminal-tab-flyout:hover .terminal-btn-label { |
| 314 | +.terminal-tabs-expanded .terminal-btn-label { |
313 | 315 | display: inline; |
314 | 316 | } |
315 | 317 |
|
|
0 commit comments