Files
siftlode/frontend/src/lib/fadeEdge.contract.test.ts
T
peter 4646aae320 fix(design): the table header takes the B9 fade utility, and every size is dvh, not vh (E28 S3d4)
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).
2026-09-26 00:39:10 +02:00

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([]);
});
});