Give success, warning and info the 2025 spec and three contrast levels
The three state colours are DynamicColors on their own tonal palette now, built exactly as Google builds error/on-error/error-container/on-error-container in both specs, so the scheme's contrast level, dark tones, spec version and platform reach them as they reach every other role; --harmonize (and a profile's harmonize) pulls each source towards the seed, off by default. material:scheme also writes M3's medium (0.5) and high (1.0) levels for both themes and every profile, keyed on data-contrast and never on a media query, and --contrast now moves the standard block alone. Scheme::load() takes the level; the mail theme stays on standard. Plan: docs/plans/material-3-alignment.md, steps 6 and 7 (core C1, C2, C15). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Qwx5USif3wFFmxtHg5U1g9
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
b1fc0c9cfa
commit
4263982369
@@ -38,6 +38,23 @@ it('ships a default scheme that declares every role in both themes', function ()
|
||||
}
|
||||
});
|
||||
|
||||
it('ships M3\'s medium and high contrast levels beside the standard one', function () {
|
||||
$scheme = json_decode(File::get(packageCss('tokens/scheme.json')), true);
|
||||
$css = File::get(packageCss('tokens/scheme.css'));
|
||||
|
||||
foreach (['medium', 'high'] as $level) {
|
||||
foreach (['light', 'dark'] as $theme) {
|
||||
$declared = declarations($css, "[data-contrast='{$level}'] [data-theme='{$theme}'] {");
|
||||
|
||||
expect(array_keys($declared))->toEqual(array_map(fn (string $role): string => "--md-sys-color-{$role}", array_keys($scheme['light'])));
|
||||
|
||||
foreach ($scheme['contrast'][$level][$theme] as $role => $hex) {
|
||||
expect($declared["--md-sys-color-{$role}"])->toBe($hex);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
it('turns every role into a Tailwind colour', function () {
|
||||
$roles = array_keys(json_decode(File::get(packageCss('tokens/scheme.json')), true)['light']);
|
||||
$theme = File::get(packageCss('tokens/theme.css'));
|
||||
@@ -58,9 +75,11 @@ it('resolves colour utilities on the element, so a nested data-theme repaints th
|
||||
->not->toMatch('/--[\w-]+:\s*#/');
|
||||
});
|
||||
|
||||
it('leaves the choice of theme to the head script, never to a media query', function () {
|
||||
it('leaves the choice of theme and of contrast to the head script, never to a media query', function () {
|
||||
foreach (File::allFiles(packageCss()) as $file) {
|
||||
expect($file->getContents())->not->toContain('prefers-color-scheme');
|
||||
expect($file->getContents())
|
||||
->not->toContain('prefers-color-scheme')
|
||||
->not->toContain('prefers-contrast');
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user