mirror of
https://github.com/ant-design/ant-design.git
synced 2024-12-15 17:19:11 +08:00
832cffcdf9
* refactor: support type update * chore: update clear style * chore: bump color picker * chore: use slider * chore: bump color picker * chore: range slider * chore: layout * chore: useModeColor * chore: simplify * chore: bump color picker * refactor: event * chore: tmp lock check * chore: of it * chore: update ts def * chore: update ts def * chore: remove useless ts * chore: linear * chore: adjust style * chore: rm useless code * chore: fill color * chore: basic linear * chore: support toStr * chore: limit minCount * chore: use cache * chore: drag support: * chore: yes * chore: update demo * chore: useLayoutEffect instead * chore: fix click to add point * chore: add smmoth * chore: support of locale * chore: add locale * chore: fix lint * chore: adjust style * chore: fix lint * chore: fix style * test: fix test case * chore: fix popover * test: fix test case * chore: fix test * test: clean up * chore: fix lint * chore: fix lint * chore: fix lint * test: coverage * test: coverage * test: coverage * test: coverage * test: coverage * test: coverage * chore: fix docs * docs: update demo desc * chore: enhance hover range * fix: delete not working * chore: fix lint * test: coverage * test: coverage * chore: clean up * chore: adjust * chore: highlight * chore: adjust style * chore: fix lint * chore: update demo * chore: memo perf * refactor: up to down colors * test: update snapshot
70 lines
1.9 KiB
TypeScript
70 lines
1.9 KiB
TypeScript
import type { ColorGenInput } from '@rc-component/color-picker';
|
|
import { Color as RcColor } from '@rc-component/color-picker';
|
|
|
|
import { AggregationColor } from './color';
|
|
import type { ColorValueType } from './interface';
|
|
|
|
export const generateColor = (
|
|
color: ColorGenInput<AggregationColor> | Exclude<ColorValueType, null>,
|
|
): AggregationColor => {
|
|
if (color instanceof AggregationColor) {
|
|
return color;
|
|
}
|
|
return new AggregationColor(color);
|
|
};
|
|
|
|
export const getRoundNumber = (value: number) => Math.round(Number(value || 0));
|
|
|
|
export const getColorAlpha = (color: AggregationColor) => getRoundNumber(color.toHsb().a * 100);
|
|
|
|
/** Return the color whose `alpha` is 1 */
|
|
export const genAlphaColor = (color: AggregationColor, alpha?: number) => {
|
|
const hsba = color.toHsb();
|
|
hsba.a = alpha || 1;
|
|
return generateColor(hsba);
|
|
};
|
|
|
|
/**
|
|
* Get percent position color. e.g. [10%-#fff, 20%-#000], 15% => #888
|
|
*/
|
|
export const getGradientPercentColor = (
|
|
colors: { percent: number; color: string }[],
|
|
percent: number,
|
|
): string => {
|
|
const filledColors = [
|
|
{
|
|
percent: 0,
|
|
color: colors[0].color,
|
|
},
|
|
...colors,
|
|
{
|
|
percent: 100,
|
|
color: colors[colors.length - 1].color,
|
|
},
|
|
];
|
|
|
|
for (let i = 0; i < filledColors.length - 1; i += 1) {
|
|
const startPtg = filledColors[i].percent;
|
|
const endPtg = filledColors[i + 1].percent;
|
|
const startColor = filledColors[i].color;
|
|
const endColor = filledColors[i + 1].color;
|
|
|
|
if (startPtg <= percent && percent <= endPtg) {
|
|
const dist = endPtg - startPtg;
|
|
if (dist === 0) {
|
|
return startColor;
|
|
}
|
|
|
|
const ratio = ((percent - startPtg) / dist) * 100;
|
|
const startRcColor = new RcColor(startColor);
|
|
const endRcColor = new RcColor(endColor);
|
|
|
|
return startRcColor.mix(endRcColor, ratio).toRgbString();
|
|
}
|
|
}
|
|
|
|
// This will never reach
|
|
/* istanbul ignore next */
|
|
return '';
|
|
};
|