blob: c9e2767cec83ce9080f3ad35570ab0bd68a859ba [file]
/**
* @license
* Copyright 2021 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {CorePalette} from '../palettes/core_palette.js';
/**
* Represents an Android 12 color scheme, a mapping of color roles to colors.
*/
export class SchemeAndroid {
get colorAccentPrimary(): number {
return this.props.colorAccentPrimary;
}
get colorAccentPrimaryVariant(): number {
return this.props.colorAccentPrimaryVariant;
}
get colorAccentSecondary(): number {
return this.props.colorAccentSecondary;
}
get colorAccentSecondaryVariant(): number {
return this.props.colorAccentSecondaryVariant;
}
get colorAccentTertiary(): number {
return this.props.colorAccentTertiary;
}
get colorAccentTertiaryVariant(): number {
return this.props.colorAccentTertiaryVariant;
}
get textColorPrimary(): number {
return this.props.textColorPrimary;
}
get textColorSecondary(): number {
return this.props.textColorSecondary;
}
get textColorTertiary(): number {
return this.props.textColorTertiary;
}
get textColorPrimaryInverse(): number {
return this.props.textColorPrimaryInverse;
}
get textColorSecondaryInverse(): number {
return this.props.textColorSecondaryInverse;
}
get textColorTertiaryInverse(): number {
return this.props.textColorTertiaryInverse;
}
get colorBackground(): number {
return this.props.colorBackground;
}
get colorBackgroundFloating(): number {
return this.props.colorBackgroundFloating;
}
get colorSurface(): number {
return this.props.colorSurface;
}
get colorSurfaceVariant(): number {
return this.props.colorSurfaceVariant;
}
get colorSurfaceHighlight(): number {
return this.props.colorSurfaceHighlight;
}
get surfaceHeader(): number {
return this.props.surfaceHeader;
}
get underSurface(): number {
return this.props.underSurface;
}
get offState(): number {
return this.props.offState;
}
get accentSurface(): number {
return this.props.accentSurface;
}
get textPrimaryOnAccent(): number {
return this.props.textPrimaryOnAccent;
}
get textSecondaryOnAccent(): number {
return this.props.textSecondaryOnAccent;
}
get volumeBackground(): number {
return this.props.volumeBackground;
}
get scrim(): number {
return this.props.scrim;
}
/**
* @param argb ARGB representation of a color.
* @return Light Material color scheme, based on the color's hue.
*/
static light(argb: number): SchemeAndroid {
const core = CorePalette.of(argb);
return SchemeAndroid.lightFromCorePalette(core);
}
/**
* @param argb ARGB representation of a color.
* @return Dark Material color scheme, based on the color's hue.
*/
static dark(argb: number): SchemeAndroid {
const core = CorePalette.of(argb);
return SchemeAndroid.darkFromCorePalette(core);
}
/**
* @param argb ARGB representation of a color.
* @return Light Android color scheme, based on the color's hue.
*/
static lightContent(argb: number): SchemeAndroid {
const core = CorePalette.contentOf(argb);
return SchemeAndroid.lightFromCorePalette(core);
}
/**
* @param argb ARGB representation of a color.
* @return Dark Android color scheme, based on the color's hue.
*/
static darkContent(argb: number): SchemeAndroid {
const core = CorePalette.contentOf(argb);
return SchemeAndroid.darkFromCorePalette(core);
}
/**
* Light scheme from core palette
*/
static lightFromCorePalette(core: CorePalette): SchemeAndroid {
return new SchemeAndroid({
colorAccentPrimary: core.a1.tone(90),
colorAccentPrimaryVariant: core.a1.tone(40),
colorAccentSecondary: core.a2.tone(90),
colorAccentSecondaryVariant: core.a2.tone(40),
colorAccentTertiary: core.a3.tone(90),
colorAccentTertiaryVariant: core.a3.tone(40),
textColorPrimary: core.n1.tone(10),
textColorSecondary: core.n2.tone(30),
textColorTertiary: core.n2.tone(50),
textColorPrimaryInverse: core.n1.tone(95),
textColorSecondaryInverse: core.n1.tone(80),
textColorTertiaryInverse: core.n1.tone(60),
colorBackground: core.n1.tone(95),
colorBackgroundFloating: core.n1.tone(98),
colorSurface: core.n1.tone(98),
colorSurfaceVariant: core.n1.tone(90),
colorSurfaceHighlight: core.n1.tone(100),
surfaceHeader: core.n1.tone(90),
underSurface: core.n1.tone(0),
offState: core.n1.tone(20),
accentSurface: core.a2.tone(95),
textPrimaryOnAccent: core.n1.tone(10),
textSecondaryOnAccent: core.n2.tone(30),
volumeBackground: core.n1.tone(25),
scrim: core.n1.tone(80),
});
}
/**
* Dark scheme from core palette
*/
static darkFromCorePalette(core: CorePalette): SchemeAndroid {
return new SchemeAndroid({
colorAccentPrimary: core.a1.tone(90),
colorAccentPrimaryVariant: core.a1.tone(70),
colorAccentSecondary: core.a2.tone(90),
colorAccentSecondaryVariant: core.a2.tone(70),
colorAccentTertiary: core.a3.tone(90),
colorAccentTertiaryVariant: core.a3.tone(70),
textColorPrimary: core.n1.tone(95),
textColorSecondary: core.n2.tone(80),
textColorTertiary: core.n2.tone(60),
textColorPrimaryInverse: core.n1.tone(10),
textColorSecondaryInverse: core.n1.tone(30),
textColorTertiaryInverse: core.n1.tone(50),
colorBackground: core.n1.tone(10),
colorBackgroundFloating: core.n1.tone(10),
colorSurface: core.n1.tone(20),
colorSurfaceVariant: core.n1.tone(30),
colorSurfaceHighlight: core.n1.tone(35),
surfaceHeader: core.n1.tone(30),
underSurface: core.n1.tone(0),
offState: core.n1.tone(20),
accentSurface: core.a2.tone(95),
textPrimaryOnAccent: core.n1.tone(10),
textSecondaryOnAccent: core.n2.tone(30),
volumeBackground: core.n1.tone(25),
scrim: core.n1.tone(80),
});
}
private constructor(private readonly props: {
colorAccentPrimary: number,
colorAccentPrimaryVariant: number,
colorAccentSecondary: number,
colorAccentSecondaryVariant: number,
colorAccentTertiary: number,
colorAccentTertiaryVariant: number,
textColorPrimary: number,
textColorSecondary: number,
textColorTertiary: number,
textColorPrimaryInverse: number,
textColorSecondaryInverse: number,
textColorTertiaryInverse: number,
colorBackground: number,
colorBackgroundFloating: number,
colorSurface: number,
colorSurfaceVariant: number,
colorSurfaceHighlight: number,
surfaceHeader: number,
underSurface: number,
offState: number,
accentSurface: number,
textPrimaryOnAccent: number,
textSecondaryOnAccent: number,
volumeBackground: number,
scrim: number
}) {}
toJSON() {
return {...this.props};
}
}