import * as d3 from "d3"; /** * Create diverging interpolated color mapper based on value min/max range and optional config. * * @param valueMin * @param valueMax * @param colorPositive * @param colorNegative * @param colorNeutral */ export function createDivergentInterpolatedColorMapper(valueMin, valueMax, config?: any){ let colorPositive = (config && config.colorPositive) ? config.colorPositive : "#FF671F", colorNegative = (config && config.colorNegative) ? config.colorNegative : "#009CDE", colorNeutral = (config && config.colorNeutral) ? config.colorNeutral : "#D9D9D6", controlPointNeutral = (config && config.controlPointNeutral) ? config.controlPointNeutral : 0, colorMapperPositive, colorMapperNegative, interpolaterPositive = d3.interpolateRgbBasis([colorNeutral, colorNegative]), interpolaterNegative = d3.interpolateRgbBasis([colorPositive, colorNeutral]) ; if(valueMax > 0){ colorMapperPositive = d3.scaleSequential(interpolaterPositive).domain([controlPointNeutral, valueMax]); } if(valueMin <= 0){ colorMapperNegative = d3.scaleSequential(interpolaterNegative).domain([valueMin, controlPointNeutral]); } return function(v){ if(v > 0){ return colorMapperPositive(v); } if(v < 0){ return colorMapperNegative(v); } return colorNeutral; } } /** * Create diverging class color mapper based on default positive, negative and neutral text color classes. */ export function createDivergentTextColorClassMapper(){ let classPositive = "color-div-end", classNegative = "color-div-start", classNeutral = "color-div-middle" ; return createDivergentClassMapper(classPositive, classNegative, classNeutral) } /** * Create diverging class color mapper based on default positive, negative and neutral background color classes. */ export function createDivergentBackgroundColorClassMapper(){ let classPositive = "background-div-end", classNegative = "background-div-start", classNeutral = "background-div-middle" ; return createDivergentClassMapper(classPositive, classNegative, classNeutral) } /** * Create diverging class color mapper based on provided positive, negative and neutral classes. * * @param classPositive * @param classNegative * @param classNeutral */ export function createDivergentClassMapper(classPositive, classNegative, classNeutral){ return function(v){ if(v > 0){ return classPositive; } else if(v < 0){ return classNegative; } return classNeutral; } }