diff --git a/cpp/dynamiccolor/material_dynamic_colors.cc b/cpp/dynamiccolor/material_dynamic_colors.cc index 3171c929..26ddb766 100644 --- a/cpp/dynamiccolor/material_dynamic_colors.cc +++ b/cpp/dynamiccolor/material_dynamic_colors.cc @@ -593,7 +593,8 @@ DynamicColor MaterialDynamicColors::PrimaryContainer() { DynamicColor MaterialDynamicColors::OnPrimaryContainer() { return DynamicColor( - /* name= */ "on_primary_container", + /* name= */ + "on_primary_container", /* palette= */ [](const DynamicScheme& s) -> TonalPalette { return s.primary_palette; }, /* tone= */ @@ -604,13 +605,13 @@ DynamicColor MaterialDynamicColors::OnPrimaryContainer() { if (IsMonochrome(s)) { return s.is_dark ? 0.0 : 100.0; } - return s.is_dark ? 90.0 : 10.0; + return s.is_dark ? 90.0 : 30.0; }, /* isBackground= */ false, /* background= */ [](const DynamicScheme& s) -> DynamicColor { return PrimaryContainer(); }, /* secondBackground= */ nullopt, - /* contrastCurve= */ ContrastCurve(4.5, 7.0, 11.0, 21.0), + /* contrastCurve= */ ContrastCurve(3.0, 4.5, 7.0, 11.0), /* toneDeltaPair= */ nullopt); } @@ -707,16 +708,20 @@ DynamicColor MaterialDynamicColors::SecondaryContainer() { DynamicColor MaterialDynamicColors::OnSecondaryContainer() { return DynamicColor( - /* name= */ "on_secondary_container", + /* name= */ + "on_secondary_container", /* palette= */ [](const DynamicScheme& s) -> TonalPalette { return s.secondary_palette; }, /* tone= */ [](const DynamicScheme& s) -> double { - if (!IsFidelity(s)) { + if (IsMonochrome(s)) { return s.is_dark ? 90.0 : 10.0; } + if (!IsFidelity(s)) { + return s.is_dark ? 90.0 : 30.0; + } return ForegroundTone(SecondaryContainer().tone_(s), 4.5); }, /* isBackground= */ false, @@ -725,7 +730,7 @@ DynamicColor MaterialDynamicColors::OnSecondaryContainer() { return SecondaryContainer(); }, /* secondBackground= */ nullopt, - /* contrastCurve= */ ContrastCurve(4.5, 7.0, 11.0, 21.0), + /* contrastCurve= */ ContrastCurve(3.0, 4.5, 7.0, 11.0), /* toneDeltaPair= */ nullopt); } @@ -804,7 +809,8 @@ DynamicColor MaterialDynamicColors::TertiaryContainer() { DynamicColor MaterialDynamicColors::OnTertiaryContainer() { return DynamicColor( - /* name= */ "on_tertiary_container", + /* name= */ + "on_tertiary_container", /* palette= */ [](const DynamicScheme& s) -> TonalPalette { return s.tertiary_palette; }, /* tone= */ @@ -813,7 +819,7 @@ DynamicColor MaterialDynamicColors::OnTertiaryContainer() { return s.is_dark ? 0.0 : 100.0; } if (!IsFidelity(s)) { - return s.is_dark ? 90.0 : 10.0; + return s.is_dark ? 90.0 : 30.0; } return ForegroundTone(TertiaryContainer().tone_(s), 4.5); }, @@ -823,7 +829,7 @@ DynamicColor MaterialDynamicColors::OnTertiaryContainer() { return TertiaryContainer(); }, /* secondBackground= */ nullopt, - /* contrastCurve= */ ContrastCurve(4.5, 7.0, 11.0, 21.0), + /* contrastCurve= */ ContrastCurve(3.0, 4.5, 7.0, 11.0), /* toneDeltaPair= */ nullopt); } @@ -882,16 +888,22 @@ DynamicColor MaterialDynamicColors::ErrorContainer() { DynamicColor MaterialDynamicColors::OnErrorContainer() { return DynamicColor( - /* name= */ "on_error_container", + /* name= */ + "on_error_container", /* palette= */ [](const DynamicScheme& s) -> TonalPalette { return s.error_palette; }, /* tone= */ - [](const DynamicScheme& s) -> double { return s.is_dark ? 90.0 : 10.0; }, + [](const DynamicScheme& s) -> double { + if (IsMonochrome(s)) { + return s.is_dark ? 90.0 : 10.0; + } + return s.is_dark ? 90.0 : 30.0; + }, /* isBackground= */ false, /* background= */ [](const DynamicScheme& s) -> DynamicColor { return ErrorContainer(); }, /* secondBackground= */ nullopt, - /* contrastCurve= */ ContrastCurve(4.5, 7.0, 11.0, 21.0), + /* contrastCurve= */ ContrastCurve(3.0, 4.5, 7.0, 11.0), /* toneDeltaPair= */ nullopt); } diff --git a/dart/CHANGELOG.md b/dart/CHANGELOG.md index 991ad522..9ba31dc3 100644 --- a/dart/CHANGELOG.md +++ b/dart/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.12.0 - 2024-06-06 +### Changed +- Updated `MaterialDynamicColors` to use the expressive on-colors spec. + ## 0.11.2 - 2024-04-30 ### Changed - Updated `TonalPalette` to use new key color algorithm. diff --git a/dart/lib/dynamiccolor/material_dynamic_colors.dart b/dart/lib/dynamiccolor/material_dynamic_colors.dart index 5936847e..d054612b 100644 --- a/dart/lib/dynamiccolor/material_dynamic_colors.dart +++ b/dart/lib/dynamiccolor/material_dynamic_colors.dart @@ -279,10 +279,10 @@ class MaterialDynamicColors { if (_isMonochrome(s)) { return s.isDark ? 0 : 100; } - return s.isDark ? 90 : 10; + return s.isDark ? 90 : 30; }, background: (s) => MaterialDynamicColors.primaryContainer, - contrastCurve: ContrastCurve(4.5, 7, 11, 21), + contrastCurve: ContrastCurve(3, 4.5, 7, 11), ); static DynamicColor inversePrimary = DynamicColor.fromPalette( @@ -351,14 +351,17 @@ class MaterialDynamicColors { name: 'on_secondary_container', palette: (s) => s.secondaryPalette, tone: (s) { - if (!_isFidelity(s)) { + if (_isMonochrome(s)) { return s.isDark ? 90 : 10; } + if (!_isFidelity(s)) { + return s.isDark ? 90 : 30; + } return DynamicColor.foregroundTone( MaterialDynamicColors.secondaryContainer.tone(s), 4.5); }, background: (s) => MaterialDynamicColors.secondaryContainer, - contrastCurve: ContrastCurve(4.5, 7, 11, 21), + contrastCurve: ContrastCurve(3, 4.5, 7, 11), ); static DynamicColor tertiary = DynamicColor.fromPalette( @@ -418,13 +421,13 @@ class MaterialDynamicColors { return s.isDark ? 0 : 100; } if (!_isFidelity(s)) { - return s.isDark ? 90 : 10; + return s.isDark ? 90 : 30; } return DynamicColor.foregroundTone( MaterialDynamicColors.tertiaryContainer.tone(s), 4.5); }, background: (s) => MaterialDynamicColors.tertiaryContainer, - contrastCurve: ContrastCurve(4.5, 7, 11, 21), + contrastCurve: ContrastCurve(3, 4.5, 7, 11), ); static DynamicColor error = DynamicColor.fromPalette( @@ -460,9 +463,14 @@ class MaterialDynamicColors { static DynamicColor onErrorContainer = DynamicColor.fromPalette( name: 'on_error_container', palette: (s) => s.errorPalette, - tone: (s) => s.isDark ? 90 : 10, + tone: (s) { + if (_isMonochrome(s)) { + return s.isDark ? 90 : 10; + } + return s.isDark ? 90 : 30; + }, background: (s) => MaterialDynamicColors.errorContainer, - contrastCurve: ContrastCurve(4.5, 7, 11, 21), + contrastCurve: ContrastCurve(3, 4.5, 7, 11), ); static DynamicColor primaryFixed = DynamicColor.fromPalette( diff --git a/dart/pubspec.yaml b/dart/pubspec.yaml index d0b13d16..72561f61 100644 --- a/dart/pubspec.yaml +++ b/dart/pubspec.yaml @@ -14,7 +14,7 @@ name: material_color_utilities description: Algorithms and utilities that power the Material Design 3 color system, including choosing theme colors from images and creating tones of colors; all in a new color space. -version: 0.11.2 +version: 0.12.0 repository: https://github.com/material-foundation/material-color-utilities/tree/main/dart issue_tracker: https://github.com/material-foundation/material-color-utilities/issues screenshots: diff --git a/dart/test/dynamic_color_test.dart b/dart/test/dynamic_color_test.dart index 55b85c84..6ed9ad28 100644 --- a/dart/test/dynamic_color_test.dart +++ b/dart/test/dynamic_color_test.dart @@ -12,15 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -import 'package:material_color_utilities/hct/hct.dart'; import 'package:material_color_utilities/contrast/contrast.dart'; import 'package:material_color_utilities/dynamiccolor/dynamic_color.dart'; import 'package:material_color_utilities/dynamiccolor/material_dynamic_colors.dart'; +import 'package:material_color_utilities/hct/hct.dart'; import 'package:material_color_utilities/scheme/scheme_content.dart'; import 'package:material_color_utilities/scheme/scheme_fidelity.dart'; import 'package:material_color_utilities/scheme/scheme_monochrome.dart'; import 'package:material_color_utilities/scheme/scheme_tonal_spot.dart'; - import 'package:test/test.dart'; final seedColors = [ @@ -120,7 +119,7 @@ void main() { isDark: true, contrastLevel: -0.5, )), - equals(0xffbac040), + equals(0xff959b1a), ); expect( MaterialDynamicColors.inverseSurface.getArgb(SchemeContent( diff --git a/dart/test/scheme_correctness_test.dart b/dart/test/scheme_correctness_test.dart index ab33e7a2..9366521a 100644 --- a/dart/test/scheme_correctness_test.dart +++ b/dart/test/scheme_correctness_test.dart @@ -283,16 +283,16 @@ final constraints = [ contrastCurve: ContrastCurve(4.5, 7, 11, 21)), _ContrastConstraint(MaterialDynamicColors.onPrimaryContainer, MaterialDynamicColors.primaryContainer, - contrastCurve: ContrastCurve(4.5, 7, 11, 21)), + contrastCurve: ContrastCurve(3, 4.5, 7, 11)), _ContrastConstraint(MaterialDynamicColors.onSecondaryContainer, MaterialDynamicColors.secondaryContainer, - contrastCurve: ContrastCurve(4.5, 7, 11, 21)), + contrastCurve: ContrastCurve(3, 4.5, 7, 11)), _ContrastConstraint(MaterialDynamicColors.onTertiaryContainer, MaterialDynamicColors.tertiaryContainer, - contrastCurve: ContrastCurve(4.5, 7, 11, 21)), + contrastCurve: ContrastCurve(3, 4.5, 7, 11)), _ContrastConstraint(MaterialDynamicColors.onErrorContainer, MaterialDynamicColors.errorContainer, - contrastCurve: ContrastCurve(4.5, 7, 11, 21)), + contrastCurve: ContrastCurve(3, 4.5, 7, 11)), _ContrastConstraint( MaterialDynamicColors.onPrimaryFixed, MaterialDynamicColors.primaryFixed, contrastCurve: ContrastCurve(4.5, 7, 11, 21)), diff --git a/java/dynamiccolor/MaterialDynamicColors.java b/java/dynamiccolor/MaterialDynamicColors.java index 36ec0ed4..3153bdea 100644 --- a/java/dynamiccolor/MaterialDynamicColors.java +++ b/java/dynamiccolor/MaterialDynamicColors.java @@ -434,12 +434,12 @@ public DynamicColor onPrimaryContainer() { if (isMonochrome(s)) { return s.isDark ? 0.0 : 100.0; } - return s.isDark ? 90.0 : 10.0; + return s.isDark ? 90.0 : 30.0; }, /* isBackground= */ false, /* background= */ (s) -> primaryContainer(), /* secondBackground= */ null, - /* contrastCurve= */ new ContrastCurve(4.5, 7.0, 11.0, 21.0), + /* contrastCurve= */ new ContrastCurve(3.0, 4.5, 7.0, 11.0), /* toneDeltaPair= */ null); } @@ -519,15 +519,18 @@ public DynamicColor onSecondaryContainer() { /* name= */ "on_secondary_container", /* palette= */ (s) -> s.secondaryPalette, /* tone= */ (s) -> { - if (!isFidelity(s)) { + if (isMonochrome(s)) { return s.isDark ? 90.0 : 10.0; } + if (!isFidelity(s)) { + return s.isDark ? 90.0 : 30.0; + } return DynamicColor.foregroundTone(secondaryContainer().tone.apply(s), 4.5); }, /* isBackground= */ false, /* background= */ (s) -> secondaryContainer(), /* secondBackground= */ null, - /* contrastCurve= */ new ContrastCurve(4.5, 7.0, 11.0, 21.0), + /* contrastCurve= */ new ContrastCurve(3.0, 4.5, 7.0, 11.0), /* toneDeltaPair= */ null); } @@ -601,14 +604,14 @@ public DynamicColor onTertiaryContainer() { return s.isDark ? 0.0 : 100.0; } if (!isFidelity(s)) { - return s.isDark ? 90.0 : 10.0; + return s.isDark ? 90.0 : 30.0; } return DynamicColor.foregroundTone(tertiaryContainer().tone.apply(s), 4.5); }, /* isBackground= */ false, /* background= */ (s) -> tertiaryContainer(), /* secondBackground= */ null, - /* contrastCurve= */ new ContrastCurve(4.5, 7.0, 11.0, 21.0), + /* contrastCurve= */ new ContrastCurve(3.0, 4.5, 7.0, 11.0), /* toneDeltaPair= */ null); } @@ -658,11 +661,16 @@ public DynamicColor onErrorContainer() { return new DynamicColor( /* name= */ "on_error_container", /* palette= */ (s) -> s.errorPalette, - /* tone= */ (s) -> s.isDark ? 90.0 : 10.0, + /* tone= */ (s) -> { + if (isMonochrome(s)) { + return s.isDark ? 90.0 : 10.0; + } + return s.isDark ? 90.0 : 30.0; + }, /* isBackground= */ false, /* background= */ (s) -> errorContainer(), /* secondBackground= */ null, - /* contrastCurve= */ new ContrastCurve(4.5, 7.0, 11.0, 21.0), + /* contrastCurve= */ new ContrastCurve(3.0, 4.5, 7.0, 11.0), /* toneDeltaPair= */ null); } diff --git a/swift/Sources/MaterialColorUtilities/DynamicColor/MaterialDynamicColors.swift b/swift/Sources/MaterialColorUtilities/DynamicColor/MaterialDynamicColors.swift index 72be3d0c..716997bc 100644 --- a/swift/Sources/MaterialColorUtilities/DynamicColor/MaterialDynamicColors.swift +++ b/swift/Sources/MaterialColorUtilities/DynamicColor/MaterialDynamicColors.swift @@ -402,12 +402,12 @@ public class MaterialDynamicColors { if _isMonochrome(scheme) { return scheme.isDark ? 0 : 100 } - return scheme.isDark ? 90 : 10 + return scheme.isDark ? 90 : 30 }, background: { scheme in return MaterialDynamicColors.primaryContainer }, - contrastCurve: ContrastCurve(4.5, 7, 11, 21) + contrastCurve: ContrastCurve(3, 4.5, 7, 11) ) public static let inversePrimary: DynamicColor = DynamicColor( @@ -497,16 +497,19 @@ public class MaterialDynamicColors { return scheme.secondaryPalette }, tone: { scheme in - if !_isFidelity(scheme) { + if _isMonochrome(scheme) { return scheme.isDark ? 90 : 10 } + if !_isFidelity(scheme) { + return scheme.isDark ? 90 : 30 + } return DynamicColor.foregroundTone( MaterialDynamicColors.secondaryContainer.tone(scheme), 4.5) }, background: { scheme in return MaterialDynamicColors.secondaryContainer }, - contrastCurve: ContrastCurve(4.5, 7, 11, 21) + contrastCurve: ContrastCurve(3, 4.5, 7, 11) ) public static let tertiary: DynamicColor = DynamicColor( @@ -586,7 +589,7 @@ public class MaterialDynamicColors { return scheme.isDark ? 0 : 100 } if !_isFidelity(scheme) { - return scheme.isDark ? 90 : 10 + return scheme.isDark ? 90 : 30 } return DynamicColor.foregroundTone( MaterialDynamicColors.tertiaryContainer.tone(scheme), 4.5) @@ -594,7 +597,7 @@ public class MaterialDynamicColors { background: { scheme in return MaterialDynamicColors.tertiaryContainer }, - contrastCurve: ContrastCurve(4.5, 7, 11, 21) + contrastCurve: ContrastCurve(3, 4.5, 7, 11) ) public static let error: DynamicColor = DynamicColor( @@ -657,12 +660,15 @@ public class MaterialDynamicColors { return scheme.errorPalette }, tone: { scheme in - return scheme.isDark ? 90 : 10 + if _isMonochrome(scheme) { + return scheme.isDark ? 90 : 10 + } + return scheme.isDark ? 90 : 30 }, background: { scheme in return MaterialDynamicColors.errorContainer }, - contrastCurve: ContrastCurve(4.5, 7, 11, 21) + contrastCurve: ContrastCurve(3, 4.5, 7, 11) ) public static let primaryFixed: DynamicColor = DynamicColor( diff --git a/swift/Tests/MaterialColorUtilitiesTests/SchemeTests/SchemeTonalSpotTests.swift b/swift/Tests/MaterialColorUtilitiesTests/SchemeTests/SchemeTonalSpotTests.swift index 7b9383a9..226e8ebb 100644 --- a/swift/Tests/MaterialColorUtilitiesTests/SchemeTests/SchemeTonalSpotTests.swift +++ b/swift/Tests/MaterialColorUtilitiesTests/SchemeTests/SchemeTonalSpotTests.swift @@ -59,19 +59,19 @@ final class SchemeTonalSpotTests: XCTestCase { XCTAssertEqual(scheme.primary, 0xff81_4c77) XCTAssertEqual(scheme.onPrimary, 0xffff_ffff) XCTAssertEqual(scheme.primaryContainer, 0xffff_d7f3) - XCTAssertEqual(scheme.onPrimaryContainer, 0xff34_0830) + XCTAssertEqual(scheme.onPrimaryContainer, 0xff67_355e) XCTAssertEqual(scheme.secondary, 0xff6e_5868) XCTAssertEqual(scheme.onSecondary, 0xffff_ffff) XCTAssertEqual(scheme.secondaryContainer, 0xfff8_daee) - XCTAssertEqual(scheme.onSecondaryContainer, 0xff27_1624) + XCTAssertEqual(scheme.onSecondaryContainer, 0xff55_4050) XCTAssertEqual(scheme.tertiary, 0xff81_5343) XCTAssertEqual(scheme.onTertiary, 0xffff_ffff) XCTAssertEqual(scheme.tertiaryContainer, 0xffff_dbd0) - XCTAssertEqual(scheme.onTertiaryContainer, 0xff32_1207) + XCTAssertEqual(scheme.onTertiaryContainer, 0xff66_3c2d) XCTAssertEqual(scheme.error, 0xffba_1a1a) XCTAssertEqual(scheme.onError, 0xffff_ffff) XCTAssertEqual(scheme.errorContainer, 0xffff_dad6) - XCTAssertEqual(scheme.onErrorContainer, 0xff41_0002) + XCTAssertEqual(scheme.onErrorContainer, 0xff93_000a) XCTAssertEqual(scheme.background, 0xffff_f7f9) XCTAssertEqual(scheme.onBackground, 0xff20_1a1e) XCTAssertEqual(scheme.surface, 0xffff_f7f9) @@ -127,19 +127,19 @@ final class SchemeTonalSpotTests: XCTestCase { XCTAssertEqual(scheme.primary, 0xffa7_009e) XCTAssertEqual(scheme.onPrimary, 0xffff_ffff) XCTAssertEqual(scheme.primaryContainer, 0xffd1_00c6) - XCTAssertEqual(scheme.onPrimaryContainer, 0xffff_ffff) + XCTAssertEqual(scheme.onPrimaryContainer, 0xffff_fbff) XCTAssertEqual(scheme.secondary, 0xff9e_2d93) XCTAssertEqual(scheme.onSecondary, 0xffff_ffff) XCTAssertEqual(scheme.secondaryContainer, 0xffff_83ec) - XCTAssertEqual(scheme.onSecondaryContainer, 0xff4a_0045) + XCTAssertEqual(scheme.onSecondaryContainer, 0xff7c_0276) XCTAssertEqual(scheme.tertiary, 0xffb5_1830) XCTAssertEqual(scheme.onTertiary, 0xffff_ffff) XCTAssertEqual(scheme.tertiaryContainer, 0xffd8_3546) - XCTAssertEqual(scheme.onTertiaryContainer, 0xffff_ffff) + XCTAssertEqual(scheme.onTertiaryContainer, 0xffff_fbff) XCTAssertEqual(scheme.error, 0xffba_1a1a) XCTAssertEqual(scheme.onError, 0xffff_ffff) XCTAssertEqual(scheme.errorContainer, 0xffff_dad6) - XCTAssertEqual(scheme.onErrorContainer, 0xff41_0002) + XCTAssertEqual(scheme.onErrorContainer, 0xff93_000a) XCTAssertEqual(scheme.background, 0xffff_f7f9) XCTAssertEqual(scheme.onBackground, 0xff25_1722) XCTAssertEqual(scheme.surface, 0xffff_f7f9) @@ -161,15 +161,15 @@ final class SchemeTonalSpotTests: XCTestCase { XCTAssertEqual(scheme.primary, 0xffff_abee) XCTAssertEqual(scheme.onPrimary, 0xff5c_0057) XCTAssertEqual(scheme.primaryContainer, 0xfffa_2bec) - XCTAssertEqual(scheme.onPrimaryContainer, 0xff00_0000) + XCTAssertEqual(scheme.onPrimaryContainer, 0xff51_004c) XCTAssertEqual(scheme.secondary, 0xffff_abee) XCTAssertEqual(scheme.onSecondary, 0xff5c_0057) XCTAssertEqual(scheme.secondaryContainer, 0xff84_0f7c) - XCTAssertEqual(scheme.onSecondaryContainer, 0xffff_d9f3) + XCTAssertEqual(scheme.onSecondaryContainer, 0xffff_93ec) XCTAssertEqual(scheme.tertiary, 0xffff_b3b2) XCTAssertEqual(scheme.onTertiary, 0xff68_0014) XCTAssertEqual(scheme.tertiaryContainer, 0xffff_525f) - XCTAssertEqual(scheme.onTertiaryContainer, 0xff00_0000) + XCTAssertEqual(scheme.onTertiaryContainer, 0xff5b_0010) XCTAssertEqual(scheme.error, 0xffff_b4ab) XCTAssertEqual(scheme.onError, 0xff69_0005) XCTAssertEqual(scheme.errorContainer, 0xff93_000a) diff --git a/typescript/dynamiccolor/dynamic_color_test.ts b/typescript/dynamiccolor/dynamic_color_test.ts index bec97cf2..d34a9575 100644 --- a/typescript/dynamiccolor/dynamic_color_test.ts +++ b/typescript/dynamiccolor/dynamic_color_test.ts @@ -279,22 +279,33 @@ describe('DynamicColor', () => { 'on_secondary', 'on_tertiary', 'on_error', - 'on_primary_container', - 'on_secondary_container', - 'on_tertiary_container', - 'on_error_container', ], back: [ 'primary', 'secondary', 'tertiary', 'error', + ], + }, + + { + kind: 'Contrast', + respectively: true, + values: new ContrastCurve(3, 4.5, 7, 11), + fore: [ + 'on_primary_container', + 'on_secondary_container', + 'on_tertiary_container', + 'on_error_container', + ], + back: [ 'primary_container', 'secondary_container', 'tertiary_container', 'error_container', ], }, + { kind: 'Contrast', values: new ContrastCurve(4.5, 7, 11, 21), diff --git a/typescript/dynamiccolor/material_dynamic_colors.ts b/typescript/dynamiccolor/material_dynamic_colors.ts index d2e12c7b..4c4daf68 100644 --- a/typescript/dynamiccolor/material_dynamic_colors.ts +++ b/typescript/dynamiccolor/material_dynamic_colors.ts @@ -324,10 +324,10 @@ export class MaterialDynamicColors { if (isMonochrome(s)) { return s.isDark ? 0 : 100; } - return s.isDark ? 90 : 10; + return s.isDark ? 90 : 30; }, background: (s) => MaterialDynamicColors.primaryContainer, - contrastCurve: new ContrastCurve(4.5, 7, 11, 21), + contrastCurve: new ContrastCurve(3, 4.5, 7, 11), }); static inversePrimary = DynamicColor.fromPalette({ @@ -394,14 +394,17 @@ export class MaterialDynamicColors { palette: (s) => s.secondaryPalette, tone: (s) => { - if (!isFidelity(s)) { + if (isMonochrome(s)) { return s.isDark ? 90 : 10; } + if (!isFidelity(s)) { + return s.isDark ? 90 : 30; + } return DynamicColor.foregroundTone( MaterialDynamicColors.secondaryContainer.tone(s), 4.5); }, background: (s) => MaterialDynamicColors.secondaryContainer, - contrastCurve: new ContrastCurve(4.5, 7, 11, 21), + contrastCurve: new ContrastCurve(3, 4.5, 7, 11), }); static tertiary = DynamicColor.fromPalette({ @@ -467,13 +470,13 @@ export class MaterialDynamicColors { return s.isDark ? 0 : 100; } if (!isFidelity(s)) { - return s.isDark ? 90 : 10; + return s.isDark ? 90 : 30; } return DynamicColor.foregroundTone( MaterialDynamicColors.tertiaryContainer.tone(s), 4.5); }, background: (s) => MaterialDynamicColors.tertiaryContainer, - contrastCurve: new ContrastCurve(4.5, 7, 11, 21), + contrastCurve: new ContrastCurve(3, 4.5, 7, 11), }); static error = DynamicColor.fromPalette({ @@ -511,9 +514,15 @@ export class MaterialDynamicColors { static onErrorContainer = DynamicColor.fromPalette({ name: 'on_error_container', palette: (s) => s.errorPalette, - tone: (s) => s.isDark ? 90 : 10, + tone: + (s) => { + if (isMonochrome(s)) { + return s.isDark ? 90 : 10; + } + return s.isDark ? 90 : 30; + }, background: (s) => MaterialDynamicColors.errorContainer, - contrastCurve: new ContrastCurve(4.5, 7, 11, 21), + contrastCurve: new ContrastCurve(3, 4.5, 7, 11), }); static primaryFixed = DynamicColor.fromPalette({