Improve contextual help and download filter grouping

Open contextual help from wrapper hover and focus, close it only after pointer or focus exits the shared trigger-popover region, and make clicks open-only. Remove the standalone package title and present the existing download filters as the first compact neutral sidebar group without changing filter behavior. Extend the visual driver and manifest with hover, leave, focus, blur, internal-focus, and real headless Chromium regression coverage.
This commit is contained in:
Sucukdeluxe
2026-08-22 11:46:56 +02:00
parent 9cdd0310a5
commit 7f3030ecc5
9 changed files with 272 additions and 25 deletions
+46
View File
@@ -155,6 +155,10 @@ describe("reference capture manifest", () => {
"context-statistics",
"info-closed",
"info-open",
"info-closed-after-leave",
"info-open-focus",
"info-closed-after-blur",
"info-open-focus-inside",
"info-absent"
]));
const collector = manifest.find((entry: { name: string }) => entry.name === "collector-dense");
@@ -172,6 +176,48 @@ describe("reference capture manifest", () => {
role: "button",
name: "Update verfügbar"
});
const infoOpen = manifest.find((entry: { name: string }) => entry.name === "info-open");
expect(infoOpen.interactions).toEqual([
{ type: "hover", role: "button", name: "Informationen" },
{ type: "wait-visible", role: "region", name: "Informationen zu Downloads" }
]);
const infoClosedAfterLeave = manifest.find((entry: { name: string }) => entry.name === "info-closed-after-leave");
expect(infoClosedAfterLeave.interactions).toEqual([
{ type: "hover", role: "button", name: "Informationen" },
{ type: "wait-visible", role: "region", name: "Informationen zu Downloads" },
{ type: "leave", role: "button", name: "Informationen" },
{ type: "wait-absent", role: "region", name: "Informationen zu Downloads" }
]);
const infoOpenFocus = manifest.find((entry: { name: string }) => entry.name === "info-open-focus");
expect(infoOpenFocus.interactions).toEqual([
{ type: "focus", role: "button", name: "Informationen" },
{ type: "wait-visible", role: "region", name: "Informationen zu Downloads" }
]);
const infoClosedAfterBlur = manifest.find((entry: { name: string }) => entry.name === "info-closed-after-blur");
expect(infoClosedAfterBlur.interactions).toEqual([
{ type: "focus", role: "button", name: "Informationen" },
{ type: "wait-visible", role: "region", name: "Informationen zu Downloads" },
{ type: "blur", role: "button", name: "Informationen" },
{ type: "wait-absent", role: "region", name: "Informationen zu Downloads" }
]);
const infoOpenFocusInside = manifest.find((entry: { name: string }) => entry.name === "info-open-focus-inside");
expect(infoOpenFocusInside.interactions).toEqual([
{ type: "focus", role: "button", name: "Informationen" },
{ type: "wait-visible", role: "region", name: "Informationen zu Downloads" },
{ type: "focus", role: "button", name: "Kontextaktion" },
{ type: "wait-visible", role: "region", name: "Informationen zu Downloads" }
]);
});
it("accepts explicit leave, focus and blur interactions", () => {
expect(validateVisualCaptureManifest([{
...validCapture,
interactions: [
{ type: "leave", role: "button", name: "Informationen" },
{ type: "focus", role: "button", name: "Informationen" },
{ type: "blur", role: "button", name: "Informationen" }
]
}])).toEqual([]);
});
it("defines representative responsive captures before the final matrix", () => {