type Color = string ; param h param s param l param a export function hsla ( h , s , l , a = 1 ) { return `hsla(${ h }, ${ s }%, ${ l }%, ${ a })` ; } export type ColorSpec = { h : number ; s : number ; l : number ; a ? : number ; } ; export interface ThemeColorable { ( at ) : ColorSpec ; } export const simpleLinearGradient = ( a , b , steps ) : ThemeColorable => { const dH = b . h - a . h ; const dS = b . s - a . s ; const dL = b . l - a . l ; const a1 = typeof a . a === "undefined" ? 1 : a . a ; const a2 = typeof b . a === "undefined" ? 1 : b . a ; const dA = a2 - a1 ; return ( n ) => ( { h : a . h + ( dH * n ) / steps , s : a . s + ( dS * n ) / steps , l : a . l + ( dL * n ) / steps , a : a1 + ( dA * n ) / steps , } ) ; } ; export const hueRange = ( { h1 , h2 , s , l , a = 1 , steps , } ) : ThemeColorable => { const dH = h2 - h1 ; return ( n ) => ( { h : h1 + ( dH * n ) / steps , s , l , a , } ) ; } ; export const saturationRange = ( { h , s1 , s2 , l , a = 1 , steps , } ) : ThemeColorable => { const dS = s2 - s1 ; return ( n ) => ( { h , s : s1 + ( dS * n ) / steps , l , a , } ) ; } ; export const lightnessRange = ( { h , s , l1 , l2 , a = 1 , steps , } ) : ThemeColorable => { const dL = l2 - l1 ; return ( n ) => ( { h , s , l : l1 + ( dL * n ) / steps , a , } ) ; } ; export const alphaRange = ( { h , s , l , a1 , a2 , steps , } ) : ThemeColorable => { const dA = a2 - a1 ; return ( n ) => ( { h , s , l , a : a1 + ( dA * n ) / steps , } ) ; } ;