Hide lead signals, add state to them, scanner and list fixes

This commit is contained in:
Ian Gulliver
2026-10-16 07:13:13 -07:00
parent b0b433bc6c
commit 55f6a7e424
6 changed files with 87 additions and 49 deletions
+6 -16
View File
@@ -158,36 +158,26 @@ export function mountChat(root, src, makeHead) {
let ctx = newCtx();
let context = new Map();
const headImpl = makeHead(() => renderHead());
const spinner = h("div", { class: "spinner", hidden: true });
const scanner = h("div", { class: "scanner", hidden: true });
const setRunning = (running) => {
transcript.classList.toggle("running", running);
if (running === !spinner.hidden) {
return;
}
spinner.hidden = !running;
pin();
scanner.hidden = !running;
};
const putBefore = (el, anchor) => {
if (anchor?.parentNode === transcript) {
transcript.insertBefore(el, anchor);
}
else if (spinner.parentNode === transcript) {
transcript.insertBefore(el, spinner);
}
else {
transcript.append(el);
}
};
const syncRunning = () => setRunning(src.session()?.state === "running" && ctx.open);
const release = () => {
const el = ctx.held;
if (!el) {
if (!ctx.held) {
return;
}
ctx.held = undefined;
ctx.open = true;
ctx.drawn?.push(el);
putBefore(el, stream?.el ?? pending[0]?.el);
syncRunning();
};
const put = (el, keepHeld = false) => {
@@ -250,7 +240,7 @@ export function mountChat(root, src, makeHead) {
const entry = { el, text, imgs };
pending.push(entry);
ctx.run = undefined;
putBefore(el, spinner);
putBefore(el, undefined);
stuck = true;
pin();
return () => {
@@ -459,7 +449,7 @@ export function mountChat(root, src, makeHead) {
replace(transcript, h("div", { class: "empty" }, src.empty));
return;
}
replace(transcript, spinner);
replace(transcript);
appendEvents(src.events());
renderComposer();
};
@@ -473,7 +463,7 @@ export function mountChat(root, src, makeHead) {
onEach([src.streamTopic], (ev) => appendDelta(ev)),
onEach(["tasks", "sessions"], () => fillTodoLinks(transcript, models[0])),
];
replace(root, h("div", { class: "transcript-view" }, head, transcript, composer));
replace(root, h("div", { class: "transcript-view" }, head, transcript, scanner, composer));
renderAll();
return () => {
for (const off of offs) {
+1 -1
View File
File diff suppressed because one or more lines are too long