/* stylelint-disable no-duplicate-selectors */ @import "bezierEasing"; @import "tinyColor"; // We create a very complex algorithm which take the place of original tint/shade color system // to make sure no one can understand it 👻 // and create an entire color palette magicly by inputing just a single primary color. // We are using bezier-curve easing function and some color manipulations like tint/shade/darken/spin .colorPaletteMixin() { @functions: ~`(function() { var hueStep = 2; var saturationStep = 16; var saturationStep2 = 5; var brightnessStep1 = 5; var brightnessStep2 = 15; var lightColorCount = 5; var darkColorCount = 4; var getHue = function(hsv, i, isLight) { var hue; if (hsv.h >= 60 && hsv.h <= 240) { hue = isLight ? hsv.h - hueStep * i : hsv.h + hueStep * i; } else { hue = isLight ? hsv.h + hueStep * i : hsv.h - hueStep * i; } if (hue < 0) { hue += 360; } else if (hue >= 360) { hue -= 360; } return Math.round(hue); }; var getSaturation = function(hsv, i, isLight) { var saturation; if (isLight) { saturation = Math.round(hsv.s * 100) - saturationStep * i; } else if (i == darkColorCount) { saturation = Math.round(hsv.s * 100) + saturationStep; } else { saturation = Math.round(hsv.s * 100) + saturationStep2 * i; } if (saturation > 100) { saturation = 100; } if (isLight && i === lightColorCount && saturation > 10) { saturation = 10; } if (saturation < 6) { saturation = 6; } return Math.round(saturation); }; var getValue = function(hsv, i, isLight) { if (isLight) { return Math.round(hsv.v * 100) + brightnessStep1 * i; } return Math.round(hsv.v * 100) - brightnessStep2 * i; }; this.colorPalette = function(color, index) { var isLight = index <= 6; var hsv = tinycolor(color).toHsv(); var i = isLight ? lightColorCount + 1 - index : index - lightColorCount - 1; return tinycolor({ h: getHue(hsv, i, isLight), s: getSaturation(hsv, i, isLight), v: getValue(hsv, i, isLight), }).toHexString(); }; })()`; } // It is hacky way to make this function will be compiled preferentially by less // resolve error: `ReferenceError: colorPalette is not defined` // https://github.com/ant-design/ant-motion/issues/44 .colorPaletteMixin();