UNPKG

ng-zorro-antd

Version:

An enterprise-class UI components based on Ant Design and Angular

73 lines 10.1 kB
/** * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE */ 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3ItcGlja2VyL3NyYy91dGlsL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRzVDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQW9CLEVBQVMsRUFBRTtJQUMzRCxJQUFJLEtBQUssWUFBWSxLQUFLLEVBQUUsQ0FBQztRQUMzQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7QUFFckQsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsTUFBdUIsRUFDdkIsWUFBNEIsRUFDNUIsU0FBeUIsRUFDekIsS0FBb0IsRUFDcEIsSUFBb0I7SUFFcEIsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxZQUFZLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMvRCxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsU0FBUyxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDdkYsTUFBTSxhQUFhLEdBQUcsV0FBVyxHQUFHLENBQUMsQ0FBQztJQUN0QyxNQUFNLGFBQWEsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDdEQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDdkQs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TCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsYUFBYTtRQUNoQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxhQUFhO0tBQ3hDLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9ORy1aT1JSTy9uZy16b3Jyby1hbnRkL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBDb2xvciB9IGZyb20gJy4uL2ludGVyZmFjZXMvY29sb3InO1xuaW1wb3J0IHR5cGUgeyBDb2xvckdlbklucHV0LCBIc2JhQ29sb3JUeXBlLCBUcmFuc2Zvcm1PZmZzZXQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3R5cGUnO1xuXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVDb2xvciA9IChjb2xvcjogQ29sb3JHZW5JbnB1dCk6IENvbG9yID0+IHtcbiAgaWYgKGNvbG9yIGluc3RhbmNlb2YgQ29sb3IpIHtcbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbiAgcmV0dXJuIG5ldyBDb2xvcihjb2xvcik7XG59O1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdENvbG9yID0gZ2VuZXJhdGVDb2xvcignIzE2NzdmZicpO1xuXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlQ29sb3IoXG4gIG9mZnNldDogVHJhbnNmb3JtT2Zmc2V0LFxuICBjb250YWluZXJSZWY6IEhUTUxEaXZFbGVtZW50LFxuICB0YXJnZXRSZWY6IEhUTUxEaXZFbGVtZW50LFxuICBjb2xvcj86IENvbG9yIHwgbnVsbCxcbiAgdHlwZT86IEhzYmFDb2xvclR5cGVcbik6IENvbG9yIHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBjb250YWluZXJSZWYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IHsgd2lkdGg6IHRhcmdldFdpZHRoLCBoZWlnaHQ6IHRhcmdldEhlaWdodCB9ID0gdGFyZ2V0UmVmLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBjZW50ZXJPZmZzZXRYID0gdGFyZ2V0V2lkdGggLyAyO1xuICBjb25zdCBjZW50ZXJPZmZzZXRZID0gdGFyZ2V0SGVpZ2h0IC8gMjtcbiAgY29uc3Qgc2F0dXJhdGlvbiA9IChvZmZzZXQueCArIGNlbnRlck9mZnNldFgpIC8gd2lkdGg7XG4gIGNvbnN0IGJyaWdodCA9IDEgLSAob2Zmc2V0LnkgKyBjZW50ZXJPZmZzZXRZKSAvIGhlaWdodDtcbiAgY29uc3QgaHNiID0gY29sb3I/LnRvSHNiKCkgfHwgeyBhOiAwLCBoOiAwLCBzOiAwLCBiOiAwIH07XG4gIGNvbnN0IGFscGhhT2Zmc2V0ID0gc2F0dXJhdGlvbjtcbiAgY29uc3QgaHVlT2Zmc2V0ID0gKChvZmZzZXQueCArIGNlbnRlck9mZnNldFgpIC8gd2lkdGgpICogMzYwO1xuXG4gIGlmICh0eXBlKSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdodWUnOlxuICAgICAgICByZXR1cm4gZ2VuZXJhdGVDb2xvcih7XG4gICAgICAgICAgLi4uaHNiLFxuICAgICAgICAgIGg6IGh1ZU9mZnNldCA8PSAwID8gMCA6IGh1ZU9mZnNldFxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2FscGhhJzpcbiAgICAgICAgcmV0dXJuIGdlbmVyYXRlQ29sb3Ioe1xuICAgICAgICAgIC4uLmhzYixcbiAgICAgICAgICBhOiBhbHBoYU9mZnNldCA8PSAwID8gMCA6IGFscGhhT2Zmc2V0XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBnZW5lcmF0ZUNvbG9yKHtcbiAgICBoOiBoc2IuaCxcbiAgICBzOiBzYXR1cmF0aW9uIDw9IDAgPyAwIDogc2F0dXJhdGlvbixcbiAgICBiOiBicmlnaHQgPj0gMSA/IDEgOiBicmlnaHQsXG4gICAgYTogaHNiLmFcbiAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBjYWxjdWxhdGVPZmZzZXQgPSAoXG4gIGNvbnRhaW5lclJlZjogSFRNTERpdkVsZW1lbnQsXG4gIHRhcmdldFJlZjogSFRNTERpdkVsZW1lbnQsXG4gIGNvbG9yPzogQ29sb3IgfCBudWxsLFxuICB0eXBlPzogSHNiYUNvbG9yVHlwZVxuKTogVHJhbnNmb3JtT2Zmc2V0IHwgbnVsbCA9PiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gY29udGFpbmVyUmVmLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB7IHdpZHRoOiB0YXJnZXRXaWR0aCwgaGVpZ2h0OiB0YXJnZXRIZWlnaHQgfSA9IHRhcmdldFJlZi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgY2VudGVyT2Zmc2V0WCA9IHRhcmdldFdpZHRoIC8gMjtcbiAgY29uc3QgY2VudGVyT2Zmc2V0WSA9IHRhcmdldEhlaWdodCAvIDI7XG4gIGNvbnN0IGhzYiA9IGNvbG9yPy50b0hzYigpIHx8IHsgYTogMCwgaDogMCwgczogMCwgYjogMCB9O1xuXG4gIC8vIEV4Y2x1c2lvbiBvZiBib3VuZGFyeSBjYXNlc1xuICBpZiAoKHRhcmdldFdpZHRoID09PSAwICYmIHRhcmdldEhlaWdodCA9PT0gMCkgfHwgdGFyZ2V0V2lkdGggIT09IHRhcmdldEhlaWdodCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGUpIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2h1ZSc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgeDogKGhzYi5oIC8gMzYwKSAqIHdpZHRoIC0gY2VudGVyT2Zmc2V0WCxcbiAgICAgICAgICB5OiAtY2VudGVyT2Zmc2V0WSAvIDNcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ2FscGhhJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4OiBoc2IuYSAqIHdpZHRoIC0gY2VudGVyT2Zmc2V0WCxcbiAgICAgICAgICB5OiAtY2VudGVyT2Zmc2V0WSAvIDNcbiAgICAgICAgfTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4OiBoc2IucyAqIHdpZHRoIC0gY2VudGVyT2Zmc2V0WCxcbiAgICB5OiAoMSAtIGhzYi5iKSAqIGhlaWdodCAtIGNlbnRlck9mZnNldFlcbiAgfTtcbn07XG4iXX0=