The table header carried an arbitrary-value copy of fade-below; a contract refuses a hand gradient of a surface colour. 100vh is the viewport with a tablet browser's toolbar retracted, so h-screen / min-h-screen / static vh hid the last rows under it; a contract holds dvh (the Plex player stage changes with S3f, where it is played on the tablet).
31 lines
1.3 KiB
TypeScript
31 lines
1.3 KiB
TypeScript
import { readdirSync, readFileSync } from "node:fs";
|
|
|
|
import { describe, expect, it } from "vitest";
|
|
|
|
// E28 S3d4 (B9). The header + fade edge is one recipe, the `fade-below` / `fade-below-panel` /
|
|
// `fade-above-panel` utilities in index.css: a crisp band and a 1rem gradient of the colour under
|
|
// it. The table header carried its own arbitrary-value copy of it, which a change to the recipe (its
|
|
// height, its colour on a panel) would have left behind.
|
|
function sources(): Array<[string, string]> {
|
|
const walk = (u: URL, prefix: string): Array<[string, string]> =>
|
|
readdirSync(u, { withFileTypes: true }).flatMap((e) => {
|
|
if (e.isDirectory()) return walk(new URL(`${e.name}/`, u), `${prefix}${e.name}/`);
|
|
if (!/\.tsx?$/.test(e.name) || e.name.includes(".test.")) return [];
|
|
return [
|
|
[`${prefix}${e.name}`, readFileSync(new URL(e.name, u), "utf-8")] as [string, string],
|
|
];
|
|
});
|
|
return walk(new URL("../", import.meta.url), "");
|
|
}
|
|
|
|
describe("the fade edge", () => {
|
|
it("is the utility, never an arbitrary gradient of a surface colour", () => {
|
|
const copies = sources()
|
|
.filter(([, src]) =>
|
|
/linear-gradient\(to_(?:bottom|top),var\(--(?:bg|surface|card)\)/.test(src),
|
|
)
|
|
.map(([name]) => name);
|
|
expect(copies).toEqual([]);
|
|
});
|
|
});
|