fix: restore mode clicks and compose seat-aware assistant scenes

This commit is contained in:
vee
2026-09-12 13:33:38 +08:00
parent 76057be044
commit d09b5967f8
28 changed files with 1247 additions and 44 deletions
+24 -4
View File
@@ -5910,22 +5910,34 @@ function installModeChipScroller() {
pointerStartX = event.clientX;
pointerStartScroll = group.scrollLeft;
dragged = false;
group.setPointerCapture?.(pointerId);
suppressClick = false;
});
group.addEventListener("pointermove", (event) => {
if (pointerId !== event.pointerId) return;
if (event.buttons !== 1) {
finishPointerDrag(event);
return;
}
const distance = event.clientX - pointerStartX;
if (!dragged && Math.abs(distance) < 5) return;
dragged = true;
group.classList.add("is-dragging");
if (!dragged) {
// Capturing on pointerdown retargets a normal button click to the rail.
// Capture only after movement establishes that this gesture is a drag.
dragged = true;
group.setPointerCapture?.(pointerId);
group.classList.add("is-dragging");
}
group.scrollLeft = Math.max(0, Math.min(maximumScroll(), pointerStartScroll - distance));
updateScrollState();
event.preventDefault();
});
const finishPointerDrag = (event) => {
if (pointerId !== event.pointerId) return;
group.releasePointerCapture?.(pointerId);
const finishedPointerId = pointerId;
pointerId = null;
if (group.hasPointerCapture?.(finishedPointerId)) {
group.releasePointerCapture(finishedPointerId);
}
group.classList.remove("is-dragging");
if (dragged) {
suppressClick = true;
@@ -5935,6 +5947,7 @@ function installModeChipScroller() {
};
group.addEventListener("pointerup", finishPointerDrag);
group.addEventListener("pointercancel", finishPointerDrag);
group.addEventListener("lostpointercapture", finishPointerDrag);
group.addEventListener("click", (event) => {
if (!suppressClick) return;
event.preventDefault();
@@ -6424,10 +6437,17 @@ function applyModeCommand(command, modeProfileId = null) {
showToast("AI助手正在处理上一条指令,请稍候");
return false;
}
const speech = window.CognitiveAgentSpeech;
if (["capturing", "finalizing"].includes(speech?.phase)
|| (speech?.phase === "arming" && speech?.inputMode === "manual")) {
showToast("请等待语音整理完成后再发送");
return false;
}
if ($("#runButton")?.disabled) {
showToast("上一条指令仍在执行,请稍候");
return false;
}
hideModeActionPopover({ immediate: true });
const mode = modeProfiles().find((item) => item.id === modeProfileId);
setModeRailSelection(mode);
closeModeGallery({ restoreFocus: false });