This commit is contained in:
Mateusz Gruszczyński committed 2026-11-10 00:15:50 +01:00
1 parent 2789991452
commit e260612ef9
60 files changed
+69 -339

No files matched your search

-8
View File
@@ -47,7 +47,6 @@ for (const icon of ["plus", "save", "check", "trash", "edit", "refresh", "settin
assert.ok(new RegExp(`\\b${icon}:`).test(icons), `missing semantic SVG icon definition: ${icon}`);
}
// 0.36.2 semantic review: verbs/explicit ids must win over colliding keywords.
const explicitIcons = { "overview-layout-unlock": "unlock", "overview-inline-save": "lock", "overview-layout-open": "layers", "docker-settings-open": "settings", "login-submit": "login", "revoke-sessions": "logout", "about-open": "info" };
for (const [id, icon] of Object.entries(explicitIcons)) assert.match(icons, new RegExp(`"${id}": "${icon}"`), `${id} must use ${icon}`);
assert.match(icons, /\(\^\|\[\^p\]\)reset/, "preset buttons must not match the reset rule");
@@ -71,8 +70,6 @@ assert.match(shellCss, /prefers-reduced-motion: reduce[\s\S]*data-logo-effect/);
assert.equal(openapi.components.schemas.AdminPreferences.properties.logo_animation.default, false);
assert.ok(pl.translations.logoAnimation && pl.translations.logoAnimationHelp);
// Mobile/Safari regression: injected icons must never be mistaken for chart SVGs or
// stretched by descendant chart rules, and refreshes must not rebuild decorated buttons.
const runtimeJs = read("src/admin/web/app/runtime.js");
const scalesJs = read("src/admin/web/app/chart-scales.js");
const editorsCss = read("src/admin/web/css/40-editors.css");
@@ -85,13 +82,11 @@ for (const source of [css, overviewCss, editorsCss]) assert.doesNotMatch(source,
assert.match(css, /html\[data-interface-icons="true"\] :is\(button, a, summary\)>svg\.ui-icon/);
assert.match(icons, /\.mobile-menu-toggle"\) return null|draft-dock-toggle, \.mobile-menu-toggle/);
assert.match(editorsCss, /Spacing review \(0\.36\.2\)/);
assert.match(editorsCss, /\.vhost-backend-protocol-badge \{[^}]*letter-spacing: 1px;[^}]*\}/);
assert.match(editorsCss, /\.tls-pqc-control>a/);
console.log("Panel SVG icon preference contract: OK");
// CSS cleanup (0.36.3): the legacy body[data-density] mechanism must not come back.
{
const cssDir = path.join(__dirname, "..", "src", "admin", "web", "css");
for (const name of fs.readdirSync(cssDir).filter((file) => file.endsWith(".css"))) {
@@ -99,21 +94,18 @@ console.log("Panel SVG icon preference contract: OK");
}
}
// Cache outcomes bar shows percentages inside its segments and hides labels that do not fit.
{
const rt = fs.readFileSync(path.join(__dirname, "..", "src", "admin", "web", "app", "runtime.js"), "utf8");
assert.match(rt, /function fitCacheMixLabels/);
assert.match(rt, /segment\.textContent = mix && pct > 0/);
}
// Settings layout (0.36.3): rows pattern for Appearance and horizontal sub-tabs.
{
const css = fs.readFileSync(path.join(__dirname, "..", "src", "admin", "web", "css", "50-settings.css"), "utf8");
assert.match(css, /#settings-page-appearance \.appearance-settings-grid>label \{/);
assert.match(css, /#panel-settings \.settings-tabs\.sub-tabs \{\s*display: flex;\s*flex-direction: row;/);
}
// Chart styles (0.36.3): every style id must be wired through Rust validation, OpenAPI, JS, CSS tokens, the selector and the language pack.
{
const root = path.join(__dirname, "..");
const read = (file) => fs.readFileSync(path.join(root, file), "utf8");