A page is a document: drop the sticky chrome and the bounded-frame opt-out

This commit is contained in:
2026-09-09 15:26:45 +02:00
parent 60aa8a888e
commit 53ab35bfb8
12 changed files with 39 additions and 170 deletions
-3
View File
@@ -42,9 +42,6 @@ test("data-table renders sortable headers, row-select, typed cells, badges and k
const html = flat(await render(config));
assert.match(html, /<div class="table-wrap"><table class="table"><caption class="sr-only">People in the directory<\/caption>/);
// Opt-in, and only then: the class is what a filled page hands its leftover height to.
assert.match(flat(await render({ ...config, scrollRegion: true })), /<div class="table-wrap scroll-region">/);
// Row-select: header select-all + per-row checkbox with a descriptive label.
assert.match(html, /<th class="col-check" scope="col"><input type="checkbox" aria-label="Select all rows"><\/th>/);
assert.match(html, /<td class="col-check"><input type="checkbox" class="row-select" aria-label="Select Mara Delgado"><\/td>/);
-10
View File
@@ -95,20 +95,10 @@ test("app shell can disable the menu: no sidebar, focused single-column layout",
assert.doesNotMatch(bare, /<aside class="sidebar"/); // sidebar dropped
assert.doesNotMatch(bare, /class="hamburger"/); // and its mobile toggle
assert.match(bare, /<div class="app app-bare">/); // single-column variant
assert.doesNotMatch(bare, /app-fill/); // the document scrolls unless a page says otherwise
assert.match(bare, /<main class="content" id="main-content"/); // content still renders
assert.match(bare, /<section id="b">x<\/section>/);
});
test("app shell: fill is opt-in and composes with menu:false; what the class does is pinned in e2e", async () => {
// What the class does depends on the page's own flex chain (AGENTS.md → UI), so full-flow holds
// that; this holds only that nothing opts a page in by accident.
const filled = await render({ fill: true, title: "Board", body: "<div>x</div>", nav: "" });
assert.match(filled, /<div class="app app-fill">/);
const bothOff = await render({ fill: true, menu: false, title: "Board", body: "<div>x</div>", nav: "" });
assert.match(bothOff, /<div class="app app-bare app-fill">/);
});
test("app shell: an empty title yields no topbar <h1> so the body owns the single heading; docTitle sets <title>", async () => {
// Auth/landing pass title:"" (their card/hero is the <h1>) + an explicit docTitle for the tab.
const html = await render({ title: "", docTitle: "Sign in", brand: { name: "Acme" }, body: "<h1>Sign in</h1>" });