ng-antd-color-picker
Version:
The angular version of the color-picker component based on antd styles.
69 lines • 9.63 kB
JavaScript
import { Color } from '../interfaces/color';
export const generateColor = (color) => {
if (color instanceof Color) {
return color;
}
return new Color(color);
};
export const defaultColor = generateColor('#1677ff');
export function calculateColor(offset, containerRef, targetRef, color, type) {
const { width, height } = containerRef.getBoundingClientRect();
const { width: targetWidth, height: targetHeight } = targetRef.getBoundingClientRect();
const centerOffsetX = targetWidth / 2;
const centerOffsetY = targetHeight / 2;
const saturation = (offset.x + centerOffsetX) / width;
const bright = 1 - (offset.y + centerOffsetY) / height;
const hsb = color?.toHsb() || { a: 0, h: 0, s: 0, b: 0 };
const alphaOffset = saturation;
const hueOffset = ((offset.x + centerOffsetX) / width) * 360;
if (type) {
switch (type) {
case 'hue':
return generateColor({
...hsb,
h: hueOffset <= 0 ? 0 : hueOffset
});
case 'alpha':
return generateColor({
...hsb,
a: alphaOffset <= 0 ? 0 : alphaOffset
});
}
}
return generateColor({
h: hsb.h,
s: saturation <= 0 ? 0 : saturation,
b: bright >= 1 ? 1 : bright,
a: hsb.a
});
}
export const calculateOffset = (containerRef, targetRef, color, type) => {
const { width, height } = containerRef.getBoundingClientRect();
const { width: targetWidth, height: targetHeight } = targetRef.getBoundingClientRect();
const centerOffsetX = targetWidth / 2;
const centerOffsetY = targetHeight / 2;
const hsb = color?.toHsb() || { a: 0, h: 0, s: 0, b: 0 };
// Exclusion of boundary cases
if ((targetWidth === 0 && targetHeight === 0) || targetWidth !== targetHeight) {
return null;
}
if (type) {
switch (type) {
case 'hue':
return {
x: (hsb.h / 360) * width - centerOffsetX,
y: -centerOffsetY / 3
};
case 'alpha':
return {
x: hsb.a * width - centerOffsetX,
y: -centerOffsetY / 3
};
}
}
return {
x: hsb.s * width - centerOffsetX,
y: (1 - hsb.b) * height - centerOffsetY
};
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWFudGQtY29sb3ItcGlja2VyL3NyYy9saWIvdXRpbC91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUc1QyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFvQixFQUFTLEVBQUU7SUFDM0QsSUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFO1FBQzFCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCxPQUFPLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7QUFFckQsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsTUFBdUIsRUFDdkIsWUFBNEIsRUFDNUIsU0FBeUIsRUFDekIsS0FBb0IsRUFDcEIsSUFBb0I7SUFFcEIsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxZQUFZLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMvRCxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsU0FBUyxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDdkYsTUFBTSxhQUFhLEdBQUcsV0FBVyxHQUFHLENBQUMsQ0FBQztJQUN0QyxNQUFNLGFBQWEsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDdEQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDdkQsTUFBTSxHQUFHLEdB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LENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsYUFBYTtLQUN4QyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29sb3IgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NvbG9yJztcbmltcG9ydCB0eXBlIHsgQ29sb3JHZW5JbnB1dCwgSHNiYUNvbG9yVHlwZSwgVHJhbnNmb3JtT2Zmc2V0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy90eXBlJztcblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlQ29sb3IgPSAoY29sb3I6IENvbG9yR2VuSW5wdXQpOiBDb2xvciA9PiB7XG4gIGlmIChjb2xvciBpbnN0YW5jZW9mIENvbG9yKSB7XG4gICAgcmV0dXJuIGNvbG9yO1xuICB9XG4gIHJldHVybiBuZXcgQ29sb3IoY29sb3IpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRDb2xvciA9IGdlbmVyYXRlQ29sb3IoJyMxNjc3ZmYnKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUNvbG9yKFxuICBvZmZzZXQ6IFRyYW5zZm9ybU9mZnNldCxcbiAgY29udGFpbmVyUmVmOiBIVE1MRGl2RWxlbWVudCxcbiAgdGFyZ2V0UmVmOiBIVE1MRGl2RWxlbWVudCxcbiAgY29sb3I/OiBDb2xvciB8IG51bGwsXG4gIHR5cGU/OiBIc2JhQ29sb3JUeXBlXG4pOiBDb2xvciB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gY29udGFpbmVyUmVmLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB7IHdpZHRoOiB0YXJnZXRXaWR0aCwgaGVpZ2h0OiB0YXJnZXRIZWlnaHQgfSA9IHRhcmdldFJlZi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgY2VudGVyT2Zmc2V0WCA9IHRhcmdldFdpZHRoIC8gMjtcbiAgY29uc3QgY2VudGVyT2Zmc2V0WSA9IHRhcmdldEhlaWdodCAvIDI7XG4gIGNvbnN0IHNhdHVyYXRpb24gPSAob2Zmc2V0LnggKyBjZW50ZXJPZmZzZXRYKSAvIHdpZHRoO1xuICBjb25zdCBicmlnaHQgPSAxIC0gKG9mZnNldC55ICsgY2VudGVyT2Zmc2V0WSkgLyBoZWlnaHQ7XG4gIGNvbnN0IGhzYiA9IGNvbG9yPy50b0hzYigpIHx8IHsgYTogMCwgaDogMCwgczogMCwgYjogMCB9O1xuICBjb25zdCBhbHBoYU9mZnNldCA9IHNhdHVyYXRpb247XG4gIGNvbnN0IGh1ZU9mZnNldCA9ICgob2Zmc2V0LnggKyBjZW50ZXJPZmZzZXRYKSAvIHdpZHRoKSAqIDM2MDtcblxuICBpZiAodHlwZSkge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnaHVlJzpcbiAgICAgICAgcmV0dXJuIGdlbmVyYXRlQ29sb3Ioe1xuICAgICAgICAgIC4uLmhzYixcbiAgICAgICAgICBoOiBodWVPZmZzZXQgPD0gMCA/IDAgOiBodWVPZmZzZXRcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhbHBoYSc6XG4gICAgICAgIHJldHVybiBnZW5lcmF0ZUNvbG9yKHtcbiAgICAgICAgICAuLi5oc2IsXG4gICAgICAgICAgYTogYWxwaGFPZmZzZXQgPD0gMCA/IDAgOiBhbHBoYU9mZnNldFxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZ2VuZXJhdGVDb2xvcih7XG4gICAgaDogaHNiLmgsXG4gICAgczogc2F0dXJhdGlvbiA8PSAwID8gMCA6IHNhdHVyYXRpb24sXG4gICAgYjogYnJpZ2h0ID49IDEgPyAxIDogYnJpZ2h0LFxuICAgIGE6IGhzYi5hXG4gIH0pO1xufVxuXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlT2Zmc2V0ID0gKFxuICBjb250YWluZXJSZWY6IEhUTUxEaXZFbGVtZW50LFxuICB0YXJnZXRSZWY6IEhUTUxEaXZFbGVtZW50LFxuICBjb2xvcj86IENvbG9yIHwgbnVsbCxcbiAgdHlwZT86IEhzYmFDb2xvclR5cGVcbik6IFRyYW5zZm9ybU9mZnNldCB8IG51bGwgPT4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGNvbnRhaW5lclJlZi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgeyB3aWR0aDogdGFyZ2V0V2lkdGgsIGhlaWdodDogdGFyZ2V0SGVpZ2h0IH0gPSB0YXJnZXRSZWYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IGNlbnRlck9mZnNldFggPSB0YXJnZXRXaWR0aCAvIDI7XG4gIGNvbnN0IGNlbnRlck9mZnNldFkgPSB0YXJnZXRIZWlnaHQgLyAyO1xuICBjb25zdCBoc2IgPSBjb2xvcj8udG9Ic2IoKSB8fCB7IGE6IDAsIGg6IDAsIHM6IDAsIGI6IDAgfTtcblxuICAvLyBFeGNsdXNpb24gb2YgYm91bmRhcnkgY2FzZXNcbiAgaWYgKCh0YXJnZXRXaWR0aCA9PT0gMCAmJiB0YXJnZXRIZWlnaHQgPT09IDApIHx8IHRhcmdldFdpZHRoICE9PSB0YXJnZXRIZWlnaHQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlKSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdodWUnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHg6IChoc2IuaCAvIDM2MCkgKiB3aWR0aCAtIGNlbnRlck9mZnNldFgsXG4gICAgICAgICAgeTogLWNlbnRlck9mZnNldFkgLyAzXG4gICAgICAgIH07XG4gICAgICBjYXNlICdhbHBoYSc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgeDogaHNiLmEgKiB3aWR0aCAtIGNlbnRlck9mZnNldFgsXG4gICAgICAgICAgeTogLWNlbnRlck9mZnNldFkgLyAzXG4gICAgICAgIH07XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgeDogaHNiLnMgKiB3aWR0aCAtIGNlbnRlck9mZnNldFgsXG4gICAgeTogKDEgLSBoc2IuYikgKiBoZWlnaHQgLSBjZW50ZXJPZmZzZXRZXG4gIH07XG59O1xuIl19