fix(webui): preserve route position when tabs activate

This commit is contained in:
joshpatra committed 2026-08-19 21:34:51 -04:00
1 parent b5113d4735
commit c8c57ea909
2 files changed
+19 -4

No files matched your search

+9 -3
View File
@@ -19,9 +19,15 @@
$effect(() => {
active;
if (typeof document === "undefined") return;
queueMicrotask(() => tablist
?.querySelector<HTMLElement>('[aria-selected="true"]')
?.scrollIntoView({ block: "nearest", inline: "nearest" }));
queueMicrotask(() => {
const selected = tablist?.querySelector<HTMLElement>('[aria-selected="true"]');
if (!tablist || !selected) return;
const start = selected.offsetLeft;
const end = start + selected.offsetWidth;
if (start < tablist.scrollLeft) tablist.scrollTo({ left: start });
else if (end > tablist.scrollLeft + tablist.clientWidth)
tablist.scrollTo({ left: end - tablist.clientWidth });
});
});
function navigate(event: KeyboardEvent) {
+10 -1
View File
@@ -745,7 +745,16 @@ for (const viewport of viewports) {
}
await mockApi(page);
await page.goto(route);
await expect(page.getByRole("heading", { name: heading, level: 1 })).toBeVisible();
const pageHeading = page.getByRole("heading", { name: heading, level: 1 });
await expect(pageHeading).toBeVisible();
if (route === "#/integrations/extensions") {
await expect(page.getByText("Extension manager", { exact: true })).toBeVisible();
}
await page.evaluate(() => new Promise<void>((resolve) =>
requestAnimationFrame(() => requestAnimationFrame(() => resolve())),
));
expect(await page.evaluate(() => window.scrollY)).toBe(0);
expect((await pageHeading.boundingBox())?.y).toBeGreaterThanOrEqual(0);
await expect.poll(() => page.evaluate(() =>
document.documentElement.scrollWidth <= document.documentElement.clientWidth)).toBe(true);
if (route === "#/activity") {