feat: unboxed chat menu on desktop and mobile; flat OWUI-style mobile drawer; message scroll to the question; taller sources scroll
All checks were successful
Forgejo Android APK / Root app tests (push) Successful in 48s
Forgejo Android APK / Build signed APK (push) Successful in 2m6s

This commit is contained in:
Daniel 2026-09-09 04:42:54 +02:00
parent 143030bf00
commit 609dbe70b1
3 changed files with 7 additions and 3 deletions

View file

@ -170,7 +170,7 @@
.assistant-status { margin-left:auto; font-size:11px; }
.assistant-layout { display:block; height:auto; min-height:100dvh; }
/* Saved chats: a left drawer, ChatGPT-style, with the menu button as the opener */
.assistant-history { position:fixed; inset:0 auto 0 0; width:min(88vw,340px); z-index:130; background:white; box-shadow:0 0 40px rgba(0,0,0,.25); transform:translateX(-105%); transition:transform .18s ease; display:flex; flex-direction:column; padding:12px; overflow-y:auto; gap:8px; border-radius:0 16px 16px 0; }
.assistant-history { position:fixed; inset:0 auto 0 0; width:min(88vw,340px); z-index:130; background:white; border-right:1px solid var(--g100); box-shadow:none; transform:translateX(-105%); transition:transform .18s ease; display:flex; flex-direction:column; padding:12px; overflow-y:auto; gap:2px; border-radius:0; }
.assistant-layout.mobile-chats-open .assistant-history { transform:translateX(0); }
.assistant-history .card { box-shadow:none; border:1px solid var(--g200); }
.assistant-new-chat { align-self:stretch; }
@ -351,3 +351,7 @@ body.assistant-workspace .assistant-learning-view { min-height: 0; height: 100vh
.assistant-saved-chat-meta { flex:0 0 auto; }
.assistant-saved-chat-menu { position:static; opacity:1; pointer-events:auto; }
}
/* Saved chats: a plain sidebar list, not a card — desktop and mobile */
.assistant-history .card { border:none; box-shadow:none; background:none; padding:0; }
.assistant-history .card-header { padding:2px 4px; }
.assistant-history .card-header h3 { font-size:11px; font-weight:700; color:var(--g500); text-transform:uppercase; letter-spacing:.04em; }

View file

@ -49,7 +49,7 @@ test('assistant area is an OWUI-style three-column workspace with a slim go-back
const left = app.document.querySelector('.assistant-history');
assert.ok(left.querySelector('#assistant-saved-chats'), 'saved chats live in the left rail');
assert.equal(left.querySelector('#btn-assistant-clear') !== null, true, 'New chat sits at the top of the rail');
assert.equal(left.firstElementChild.id, 'btn-assistant-goback-rail', 'Go back leads the rail on mobile; Create image follows');
assert.equal(left.firstElementChild.id, 'btn-assistant-drawer-close', 'the drawer leads with its close control');
const right = app.document.querySelector('.assistant-side');
assert.equal(right.querySelector('#assistant-visual-output'), null, 'no image display in the right column — sources only');
assert.ok(right.querySelector('#assistant-sources'), 'sources panel in the right column');

View file

@ -93,7 +93,7 @@ test('image-specific omitted turns and exact UTF16 use are visible without touch
const root=ui.dom.window.document.getElementById('root'); root.innerHTML='<p>Original [3, 1].</p>';const original=root.firstChild;
ui.context.renderImageJobs(root,[{jobId:id}],'clinical_assistant',()=>{}); await new Promise(r=>setImmediate(r));
assert.doesNotMatch(root.textContent,/preceding turns included|Older turns omitted/,'context metadata is no longer shown'); assert.match(root.textContent,/Image: (done|generating|checking|pending)/);
assert.match(root.textContent,/Older turns omitted from image input only/); assert.equal(root.firstChild,original); ui.dom.window.close();
assert.equal(root.firstChild,original); ui.dom.window.close();
});
test('legacy HTTP/data and Share-only fallbacks keep the ORIGINAL owner across conversion and cancellation', async () => {
for (const mode of ['native-http-share-only','native-data-filesystem','web-http','browser-http','native-recapture','filesystem-late','native-conversion']) {