fix: guard mobile chat sidebar overlay
This commit is contained in:
@@ -96,7 +96,7 @@
|
|||||||
|
|
||||||
/* Mobile: Full-screen modal */
|
/* Mobile: Full-screen modal */
|
||||||
@media (max-width: 768px) {
|
@media (max-width: 768px) {
|
||||||
.chat-split-container {
|
.chat-split-container--open {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
@@ -105,14 +105,13 @@
|
|||||||
z-index: 1000;
|
z-index: 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
.chat-main {
|
.chat-split-container--open .chat-main {
|
||||||
display: none; /* Hide chat on mobile when sidebar open */
|
display: none; /* Hide chat on mobile when sidebar open */
|
||||||
}
|
}
|
||||||
|
|
||||||
.chat-sidebar {
|
.chat-split-container--open .chat-sidebar {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
border-left: none;
|
border-left: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
||||||
|
|
||||||
import { ClawdbotApp } from "./app";
|
import { ClawdbotApp } from "./app";
|
||||||
|
import "../styles.css";
|
||||||
|
|
||||||
const originalConnect = ClawdbotApp.prototype.connect;
|
const originalConnect = ClawdbotApp.prototype.connect;
|
||||||
|
|
||||||
@@ -87,6 +88,34 @@ describe("control UI routing", () => {
|
|||||||
expect(window.location.pathname).toBe("/connections");
|
expect(window.location.pathname).toBe("/connections");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("keeps chat and nav usable on narrow viewports", async () => {
|
||||||
|
const app = mountApp("/chat");
|
||||||
|
await app.updateComplete;
|
||||||
|
|
||||||
|
expect(window.matchMedia("(max-width: 768px)").matches).toBe(true);
|
||||||
|
|
||||||
|
const split = app.querySelector(".chat-split-container") as HTMLElement | null;
|
||||||
|
expect(split).not.toBeNull();
|
||||||
|
if (split) {
|
||||||
|
expect(getComputedStyle(split).position).not.toBe("fixed");
|
||||||
|
}
|
||||||
|
|
||||||
|
const chatMain = app.querySelector(".chat-main") as HTMLElement | null;
|
||||||
|
expect(chatMain).not.toBeNull();
|
||||||
|
if (chatMain) {
|
||||||
|
expect(getComputedStyle(chatMain).display).not.toBe("none");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (split) {
|
||||||
|
split.classList.add("chat-split-container--open");
|
||||||
|
await app.updateComplete;
|
||||||
|
expect(getComputedStyle(split).position).toBe("fixed");
|
||||||
|
}
|
||||||
|
if (chatMain) {
|
||||||
|
expect(getComputedStyle(chatMain).display).toBe("none");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
it("auto-scrolls chat history to the latest message", async () => {
|
it("auto-scrolls chat history to the latest message", async () => {
|
||||||
const app = mountApp("/chat");
|
const app = mountApp("/chat");
|
||||||
await app.updateComplete;
|
await app.updateComplete;
|
||||||
|
|||||||
Reference in New Issue
Block a user