From 134e200aec6fc6b08a632ede2119f063158afea1 Mon Sep 17 00:00:00 2001 From: Sergei Lupashin Date: Tue, 25 Aug 2026 19:41:48 +0200 Subject: [PATCH] fix(ui): show inline rename text in session sidebar --- src/web/public/styles.css | 15 +++++++++++--- test/inline-rename.test.ts | 40 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 3 deletions(-) diff --git a/src/web/public/styles.css b/src/web/public/styles.css index 6a503a42..165ef5ab 100644 --- a/src/web/public/styles.css +++ b/src/web/public/styles.css @@ -1535,7 +1535,10 @@ html[data-tab-orientation='vertical'] .tab-rail .session-tab .tab-name-prefix { display: inline; } -html[data-tab-orientation='vertical'] .tab-rail .session-tab .tab-name.tab-name-renaming { +:is( + html[data-tab-orientation='vertical'] .tab-rail, + html[data-session-list='sidebar'] .session-sidebar +) .session-tab .tab-name.tab-name-renaming { display: flex; align-items: center; -webkit-box-orient: initial; @@ -1544,11 +1547,17 @@ html[data-tab-orientation='vertical'] .tab-rail .session-tab .tab-name.tab-name- overflow: visible; } -html[data-tab-orientation='vertical'] .tab-name-renaming .tab-rename-prefix { +:is( + html[data-tab-orientation='vertical'] .tab-rail, + html[data-session-list='sidebar'] .session-sidebar +) .tab-name-renaming .tab-rename-prefix { flex: 0 0 auto; } -html[data-tab-orientation='vertical'] .tab-name-renaming .tab-rename-input { +:is( + html[data-tab-orientation='vertical'] .tab-rail, + html[data-session-list='sidebar'] .session-sidebar +) .tab-name-renaming .tab-rename-input { flex: 1 1 0; width: auto; min-width: 0; diff --git a/test/inline-rename.test.ts b/test/inline-rename.test.ts index d536917f..edee0564 100644 --- a/test/inline-rename.test.ts +++ b/test/inline-rename.test.ts @@ -541,6 +541,46 @@ describe('Inline rename input', () => { expect(result.firstRenameClassActive).toBe(false); }); + it('Session sidebar paints typing without ellipsizing the live editor', async () => { + await resetState(); + const id = 'sidebar-live-input'; + + await page.evaluate((sessionId) => { + const app = ( + window as unknown as { + app: { + sessions: Map; + startInlineRename: (id: string) => void; + }; + } + ).app; + document.documentElement.dataset.sessionList = 'sidebar'; + document.documentElement.dataset.sidebar = 'expanded'; + const list = document.getElementById('sessionSidebarList') as HTMLElement; + const tab = document.createElement('div'); + tab.setAttribute('data-test-tab', '1'); + tab.className = 'session-tab'; + tab.innerHTML = + '' + + `old title` + + ''; + list.appendChild(tab); + app.sessions.set(sessionId, { id: sessionId, name: 'old title' }); + app.startInlineRename(sessionId); + }, id); + + const label = page.locator(`.tab-name[data-session-id="${id}"]`); + const input = label.locator('input.tab-rename-input'); + await input.press(process.platform === 'darwin' ? 'Meta+A' : 'Control+A'); + await page.keyboard.type('edited title'); + + expect(await input.inputValue()).toBe('edited title'); + expect(await input.evaluate((node) => document.activeElement === node)).toBe(true); + expect(await label.evaluate((node) => node.classList.contains('tab-name-renaming'))).toBe(true); + expect(await label.evaluate((node) => getComputedStyle(node).overflow)).toBe('visible'); + expect(await input.evaluate((node) => node.getBoundingClientRect().width)).toBeGreaterThan(0); + }); + it('Vertical rail paints typing in an unclamped editor and restores the clamp on cancel', async () => { await resetState(); const id = 'vertical-live-input';