File tree Expand file tree Collapse file tree
packages/theming-material/src Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ import {
2+ ThemeBuilder ,
3+ ThemeBuilderContext ,
4+ ThemeTokens ,
5+ } from '@angularity/theming' ;
6+ import {
7+ argbFromHex ,
8+ hexFromArgb ,
9+ TonalPalette ,
10+ } from '@material/material-color-utilities' ;
11+
12+ import { SchemeMode } from './scheme' ;
13+
14+ export interface SchemeStaticColorBuilderConfig {
15+ name : string ;
16+ source : string ;
17+ mode : SchemeMode ;
18+ }
19+
20+ export class SchemeStaticColorBuilder
21+ implements ThemeBuilder < SchemeStaticColorBuilderConfig >
22+ {
23+ build (
24+ context : ThemeBuilderContext < SchemeStaticColorBuilderConfig > ,
25+ ) : ThemeTokens {
26+ const { name, config } = context ;
27+ const palette = TonalPalette . fromInt ( argbFromHex ( config . source ) ) ;
28+ const tones = this . getStaticColorTones ( config . mode ) ;
29+ return {
30+ [ `${ name } -${ config . name } ` ] : hexFromArgb ( palette . tone ( tones . color ) ) ,
31+ [ `${ name } -on-${ config . name } ` ] : hexFromArgb ( palette . tone ( tones . onColor ) ) ,
32+ [ `${ name } -${ config . name } -container` ] : hexFromArgb (
33+ palette . tone ( tones . colorContainer ) ,
34+ ) ,
35+ [ `${ name } -on-${ config . name } -container` ] : hexFromArgb (
36+ palette . tone ( tones . onColorContainer ) ,
37+ ) ,
38+ } ;
39+ }
40+
41+ protected getStaticColorTones (
42+ mode : SchemeMode ,
43+ ) : Record <
44+ 'color' | 'onColor' | 'colorContainer' | 'onColorContainer' ,
45+ number
46+ > {
47+ switch ( mode ) {
48+ case SchemeMode . Light :
49+ return {
50+ color : 40 ,
51+ onColor : 100 ,
52+ colorContainer : 90 ,
53+ onColorContainer : 10 ,
54+ } ;
55+ case SchemeMode . Dark :
56+ return {
57+ color : 80 ,
58+ onColor : 20 ,
59+ colorContainer : 30 ,
60+ onColorContainer : 90 ,
61+ } ;
62+ default :
63+ throw new Error ( 'Non-exhaustive match for mode' ) ;
64+ }
65+ }
66+ }
You can’t perform that action at this time.
0 commit comments