mirror of
https://github.com/ruvnet/RuView
synced 2026-07-23 17:33:20 +00:00
04f205a05e
The Lit + Vite HOMECORE web UI is an example consumer of the sensing stack, not a top-level deliverable — relocate it under examples/ alongside the other sensor and dashboard demos. Add an entry to examples/README.md so it's discoverable. Co-Authored-By: claude-flow <ruv@ruv.net>
67 lines
2.0 KiB
TypeScript
67 lines
2.0 KiB
TypeScript
/**
|
|
* Validates that tokens.css contains all 16 documented HOMECORE design tokens.
|
|
* Reads the file from disk and checks for each CSS custom property name.
|
|
*/
|
|
|
|
import { describe, it, expect } from 'vitest';
|
|
import { readFileSync } from 'node:fs';
|
|
import { resolve, dirname } from 'node:path';
|
|
import { fileURLToPath } from 'node:url';
|
|
|
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
const tokensPath = resolve(__dirname, '../styles/tokens.css');
|
|
const css = readFileSync(tokensPath, 'utf-8');
|
|
|
|
/**
|
|
* The 16 design tokens from ADR-131 §9 / HOMECORE-FRONTEND-design-recon.md §1.
|
|
* 4 surfaces + 2 text + 6 accent/status + 2 border/ring + 2 radius = 16 tokens.
|
|
*/
|
|
const REQUIRED_TOKENS = [
|
|
// Surfaces (4)
|
|
'--hc-bg',
|
|
'--hc-surface-card',
|
|
'--hc-surface-elevated',
|
|
'--hc-surface-overlay',
|
|
// Text (2)
|
|
'--hc-text',
|
|
'--hc-text-muted',
|
|
// Accent palette (6)
|
|
'--hc-primary',
|
|
'--hc-primary-fg',
|
|
'--hc-accent',
|
|
'--hc-accent-fg',
|
|
'--hc-destructive',
|
|
'--hc-warning',
|
|
// Borders & rings (2)
|
|
'--hc-border',
|
|
'--hc-ring',
|
|
// Radii (2)
|
|
'--hc-radius',
|
|
'--hc-radius-sm',
|
|
] as const;
|
|
|
|
describe('tokens.css', () => {
|
|
it('contains all 16 documented design tokens', () => {
|
|
for (const token of REQUIRED_TOKENS) {
|
|
expect(css, `Missing token: ${token}`).toContain(token);
|
|
}
|
|
});
|
|
|
|
it('has exactly 16 (or more) --hc- custom properties', () => {
|
|
const matches = css.match(/--hc-[\w-]+\s*:/g) ?? [];
|
|
// De-duplicate (token may appear in comments)
|
|
const unique = new Set(matches.map(m => m.replace(/\s*:/, '')));
|
|
expect(unique.size).toBeGreaterThanOrEqual(16);
|
|
});
|
|
|
|
it('defines the teal primary token with the correct hue value', () => {
|
|
// --hc-primary must reference HSL hue 185 (teal, from cognitum-v0)
|
|
expect(css).toMatch(/--hc-primary\s*:\s*hsl\(185/);
|
|
});
|
|
|
|
it('defines the green accent token (#26d867)', () => {
|
|
// --hc-accent must reference HSL 142 70% 50%
|
|
expect(css).toMatch(/--hc-accent\s*:\s*hsl\(142/);
|
|
});
|
|
});
|