47 lines
2.9 KiB
JavaScript
47 lines
2.9 KiB
JavaScript
import { readFileSync } from 'node:fs';
|
|
import { resolve } from 'node:path';
|
|
|
|
const root = resolve(process.cwd());
|
|
const read = path => readFileSync(resolve(root, path), 'utf8');
|
|
const runtime = read('public/design-system/theme-runtime.js');
|
|
const css = read('public/ux-foundation.css');
|
|
const js = read('public/ux-foundation.js');
|
|
const pkg = JSON.parse(read('package.json'));
|
|
|
|
const failures = [];
|
|
const assert = (condition, message) => { if (!condition) failures.push(message); };
|
|
|
|
assert(runtime.includes('/ux-foundation.css?v=1.44.0'), 'UX-Foundation-Stylesheet wird nicht über den stabilen Theme-Runtime-Pfad geladen.');
|
|
assert(runtime.includes('/ux-foundation.js?v=1.44.0'), 'UX-Foundation-Script wird nicht über den stabilen Theme-Runtime-Pfad geladen.');
|
|
assert(runtime.includes("window.addEventListener('load', loadBehavior"), 'UX-Verhalten startet nicht nach der bestehenden App-Initialisierung.');
|
|
assert(pkg.scripts?.['verify:ux-foundation'] === 'node tools/verify-ux-foundation-1.44.0.mjs', 'npm-Script verify:ux-foundation fehlt oder ist falsch.');
|
|
assert(String(pkg.scripts?.['verify:all'] || '').includes('verify:ux-foundation'), 'verify:all enthält das UX-Foundation-Gate nicht.');
|
|
|
|
for (const label of ['Start', 'Verkaufen', 'Inhalte & AI', 'Werkzeuge & System']) {
|
|
assert(js.includes(`label: '${label}'`), `Navigationsgruppe fehlt: ${label}`);
|
|
}
|
|
for (const tab of ['dashboard', 'today', 'generator', 'history', 'publish', 'inventory', 'media-library', 'settings', 'admin']) {
|
|
assert(js.includes(tab), `Navigationsziel fehlt im UX-Vertrag: ${tab}`);
|
|
}
|
|
|
|
assert(js.includes('aria-current'), 'Aktive Navigation wird nicht über aria-current ausgezeichnet.');
|
|
assert(js.includes('MutationObserver'), 'Kontexttitel reagieren nicht auf Ansichtswechsel.');
|
|
assert(js.includes('data-ux-target'), 'Kontextbezogene Schnellaktionen fehlen.');
|
|
assert(js.includes("localStorage.setItem('vendoo_ux_system_nav_open'"), 'Zustand der Systemnavigation wird nicht benutzerfreundlich gespeichert.');
|
|
assert(!js.includes('onclick='), 'Inline-Eventhandler sind im UX-Script unzulässig.');
|
|
assert(!js.includes('innerHTML +=') && !js.includes('outerHTML'), 'Unsichere DOM-Erweiterung im UX-Script erkannt.');
|
|
|
|
for (const selector of ['.ux-nav-sections', '.ux-command-center', '.ux-dashboard-more', '@media (max-width: 900px)', '@media (prefers-reduced-motion: reduce)']) {
|
|
assert(css.includes(selector), `UX-CSS-Vertrag fehlt: ${selector}`);
|
|
}
|
|
assert(css.includes('focus-visible'), 'Sichtbare Tastaturfokusse fehlen.');
|
|
assert(css.includes('var(--'), 'UX-CSS verwendet das zentrale Token-/Variablensystem nicht.');
|
|
|
|
if (failures.length) {
|
|
console.error('[UX-FOUNDATION] Prüfung fehlgeschlagen:');
|
|
failures.forEach(failure => console.error(`- ${failure}`));
|
|
process.exit(1);
|
|
}
|
|
|
|
console.log('[UX-FOUNDATION] Navigation, Dashboard-Reduktion, Kontextführung, Runtime-Integration, Responsive-Vertrag und Accessibility-Gates sind vollständig.');
|