diff --git a/frontends/desktop/static/app.js b/frontends/desktop/static/app.js index d1f1f319..39d3d842 100644 --- a/frontends/desktop/static/app.js +++ b/frontends/desktop/static/app.js @@ -2909,6 +2909,12 @@ async function closeSession(id) { const convMenu = document.getElementById('conv-menu'); let menuTargetId = null; +function isSessionRowInteractiveTarget(target) { + const el = target instanceof Element ? target : null; + return !!el?.closest?.( + '.ci-more, .ci-rename-input, button, input, textarea, select, a, [contenteditable="true"], [data-no-session-select]' + ); +} convListEl.addEventListener('click', (e) => { const more = e.target.closest('.ci-more'); if (more) { @@ -2928,6 +2934,7 @@ convListEl.addEventListener('click', (e) => { convMenu.style.left = (rect.right - convMenu.offsetWidth) + 'px'; return; } + if (isSessionRowInteractiveTarget(e.target)) return; const it = e.target.closest('.conv-item'); if (it && it.dataset.id) { setActiveSession(it.dataset.id); @@ -2964,8 +2971,10 @@ convMenu.addEventListener('click', (e) => { const titleEl = item.querySelector('.ci-title'); if (!titleEl) return; const oldTitle = sess.title || ''; + item.classList.add('renaming'); const inp = document.createElement('input'); inp.className = 'ci-rename-input'; + inp.dataset.noSessionSelect = '1'; inp.maxLength = 50; inp.value = oldTitle; titleEl.replaceWith(inp); diff --git a/frontends/desktop/static/index.html b/frontends/desktop/static/index.html index 3390ca8b..b6d48093 100644 --- a/frontends/desktop/static/index.html +++ b/frontends/desktop/static/index.html @@ -4,7 +4,7 @@ GenericAgent - + @@ -674,6 +674,6 @@ - + diff --git a/frontends/desktop/static/styles.css b/frontends/desktop/static/styles.css index 44c166eb..687a3976 100644 --- a/frontends/desktop/static/styles.css +++ b/frontends/desktop/static/styles.css @@ -1427,15 +1427,30 @@ span.flatpickr-weekday{ color:var(--muted) !important; font-size:11px; } .conv-item{ display:flex; align-items:center; gap:9px; padding:9px 10px; border-radius:4px; cursor:pointer; } .conv-item:hover{ background:var(--line-soft); } .conv-item.active{ background:var(--accent-bg); } +.conv-item.renaming{ + cursor:default; + background:color-mix(in srgb, var(--accent-bg) 70%, var(--panel)); +} .ci-dot{ width:7px; height:7px; border-radius:50%; background:var(--ok); flex:0 0 auto; } .conv-item.idle .ci-dot{ background:var(--dot-idle); } .ci-main{ flex:1; min-width:0; } .ci-title{ font-size:13px; font-weight:500; color:var(--txt-strong); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; } .ci-rename-input{ - font-size:13px; font-weight:500; color:var(--txt-strong); width:100%; - border:1px solid var(--accent); border-radius:4px; padding:1px 4px; - background:var(--field-bg); outline:none; + display:block; width:100%; min-width:0; height:24px; box-sizing:border-box; + margin:-3px 0 -2px; padding:0 7px; + border:1px solid color-mix(in srgb, var(--accent) 44%, var(--line-strong)); + border-radius:4px; background:var(--card); outline:none; + color:var(--txt-strong); caret-color:var(--accent); + font-family:var(--font-sans); font-size:13px; font-weight:500; line-height:22px; + box-shadow:0 0 0 2px color-mix(in srgb, var(--accent) 10%, transparent); + transition:border-color .12s, box-shadow .12s, background .12s; } +.ci-rename-input:focus{ + border-color:var(--accent); + background:var(--field-bg); + box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 16%, transparent); +} +.ci-rename-input::selection{ background:color-mix(in srgb, var(--accent) 28%, transparent); } .ci-pin{ width:14px; height:14px; color:var(--accent); margin-right:3px; vertical-align:-3px; flex:0 0 auto; display:inline-block; } .ci-meta{ font-size:11px; color:var(--muted); margin-top:2px; } .ci-more{ @@ -1446,6 +1461,7 @@ span.flatpickr-weekday{ color:var(--muted) !important; font-size:11px; } } .ci-more svg{ width:20px; height:20px; } .conv-item:hover .ci-more, .conv-item.active .ci-more{ opacity:1; } +.conv-item.renaming .ci-more{ opacity:0; pointer-events:none; } .ci-more:hover{ background:var(--hover-dim); color:var(--txt-2); } .ctx-menu{