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 { Injectable } from '@angular/core' ;
2+ import {
3+ ThemeBuilder ,
4+ ThemeBuilderContext ,
5+ ThemeTokens ,
6+ } from '@angularity/theming' ;
7+ import { DynamicColor , hexFromArgb } from '@material/material-color-utilities' ;
8+
9+ import { SchemeBuilder , SchemeBuilderConfig } from './scheme' ;
10+
11+ export interface ExtendedSchemeBuilderConfig extends SchemeBuilderConfig {
12+ extension ?: ( context : ExtendedSchemeBuilderExtensionContext ) => ThemeTokens ;
13+ }
14+
15+ export interface ExtendedSchemeBuilderExtensionContext {
16+ hex : ( role : DynamicColor ) => string ;
17+ argb : ( role : DynamicColor ) => number ;
18+ }
19+
20+ @Injectable ( { providedIn : 'root' } )
21+ export class ExtendedSchemeBuilder
22+ extends SchemeBuilder
23+ implements ThemeBuilder < ExtendedSchemeBuilderConfig >
24+ {
25+ override build (
26+ context : ThemeBuilderContext < ExtendedSchemeBuilderConfig > ,
27+ ) : ThemeTokens {
28+ const scheme = this . getScheme ( context . config ) ;
29+ const tokens = super . build ( context ) ;
30+ if ( context . config . extension ) {
31+ const hex = ( role : DynamicColor ) => hexFromArgb ( role . getArgb ( scheme ) ) ;
32+ const argb = ( role : DynamicColor ) => role . getArgb ( scheme ) ;
33+ const extension = context . config . extension ?.( { hex, argb } ) ;
34+ for ( const [ name , value ] of Object . entries ( extension ) )
35+ tokens [ `${ context . name } -${ name } ` ] = value ;
36+ }
37+ return tokens ;
38+ }
39+ }
You can’t perform that action at this time.
0 commit comments