39 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
| import warning from '../../warning';
 | |
| import type { DerivativeFunc, TokenType } from './interface';
 | |
| 
 | |
| let uuid = 0;
 | |
| 
 | |
| /**
 | |
|  * Theme with algorithms to derive tokens from design tokens.
 | |
|  * Use `createTheme` first which will help to manage the theme instance cache.
 | |
|  */
 | |
| export default class Theme<DesignToken extends TokenType, DerivativeToken extends TokenType> {
 | |
|   private derivatives: DerivativeFunc<DesignToken, DerivativeToken>[];
 | |
|   public readonly id: number;
 | |
| 
 | |
|   constructor(
 | |
|     derivatives:
 | |
|       | DerivativeFunc<DesignToken, DerivativeToken>
 | |
|       | DerivativeFunc<DesignToken, DerivativeToken>[],
 | |
|   ) {
 | |
|     this.derivatives = Array.isArray(derivatives) ? derivatives : [derivatives];
 | |
|     this.id = uuid;
 | |
| 
 | |
|     if (derivatives.length === 0) {
 | |
|       warning(
 | |
|         derivatives.length > 0,
 | |
|         '[Ant Design Vue CSS-in-JS] Theme should have at least one derivative function.',
 | |
|       );
 | |
|     }
 | |
| 
 | |
|     uuid += 1;
 | |
|   }
 | |
| 
 | |
|   getDerivativeToken(token: DesignToken): DerivativeToken {
 | |
|     return this.derivatives.reduce<DerivativeToken>(
 | |
|       (result, derivative) => derivative(token, result),
 | |
|       undefined as any,
 | |
|     );
 | |
|   }
 | |
| }
 |