UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

74 lines 9.62 kB
import { Injectable } from '@angular/core'; import { default as chroma } from 'chroma-js'; import * as i0 from "@angular/core"; export class BrandingShadesService { getShadeColorBrandingCssVars(newBrandPrimary) { const shades = this.generateShades(newBrandPrimary); return this.shadesToObject(shades); } isValidShadeColor(color) { try { return chroma.valid(color); } catch { return false; } } hasCustomShadesSet(previousBrandPrimary, otherVars) { if (previousBrandPrimary && otherVars) { const oldShades = this.generateShades(previousBrandPrimary); const oldShadesObj = this.shadesToObject(oldShades); for (const shadeKey of Object.keys(oldShadesObj)) { const fromVars = otherVars[shadeKey]; const generated = oldShadesObj[shadeKey]; if (fromVars === null || fromVars === undefined) { continue; } if (fromVars !== generated) { return true; } } } return false; } shadesToObject(shades) { const brandingCssVars = {}; let i = 1; for (const shade of shades) { const key = `c8y-brand-${i}0`; brandingCssVars[key] = shade; i++; } return brandingCssVars; } generateShades(inputColor) { const referenceShades = [ '#134158', '#1C5569', '#058192', // primary color '#22A6AA', '#3CC1B7', '#8ADBD5', '#C5EDEA', '#EBF9F8' ]; // Calculate the luminance of the reference shades const referenceLuminances = referenceShades.map(color => chroma(color).luminance()); const inputColorAsHex = chroma(inputColor); // Generate shades of the input color with the same luminance as the reference shades const generatedShades = referenceLuminances.map(luminance => chroma(inputColor).luminance(luminance).hex('rgb')); // Calculate the distance between the input color and each color in the generatedShades array const distances = generatedShades.map(color => chroma.deltaE(inputColorAsHex, color)); // Find the index of the color with the smallest distance const index = distances.indexOf(Math.min(...distances)); generatedShades[index] = inputColorAsHex.hex('rgb'); return generatedShades; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BrandingShadesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BrandingShadesService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BrandingShadesService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmRpbmctc2hhZGVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9icmFuZGluZy9zaGFyZWQvZGF0YS9icmFuZGluZy1zaGFkZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLElBQUksTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDOztBQUc5QyxNQUFNLE9BQU8scUJBQXFCO0lBQ2hDLDRCQUE0QixDQUFDLGVBQXVCO1FBQ2xELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDcEQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFhO1FBQzdCLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUNoQixvQkFBNEIsRUFDNUIsU0FBMEM7UUFFMUMsSUFBSSxvQkFBb0IsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUN0QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDNUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNwRCxLQUFLLE1BQU0sUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztnQkFDakQsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNyQyxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3pDLElBQUksUUFBUSxLQUFLLElBQUksSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQ2hELFNBQVM7Z0JBQ1gsQ0FBQztnQkFDRCxJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDM0IsT0FBTyxJQUFJLENBQUM7Z0JBQ2QsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sY0FBYyxDQUFDLE1BQWdCO1FBQ3JDLE1BQU0sZUFBZSxHQUEyQyxFQUFFLENBQUM7UUFDbkUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMzQixNQUFNLEdBQUcsR0FBRyxhQUFhLENBQUMsR0FBWSxDQUFDO1lBQ3ZDLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDN0IsQ0FBQyxFQUFFLENBQUM7UUFDTixDQUFDO1FBRUQsT0FBTyxlQUFlLENBQUM7SUFDekIsQ0FBQztJQUVPLGNBQWMsQ0FBQyxVQUFrQjtRQUN2QyxNQUFNLGVBQWUsR0FBRztZQUN0QixTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVMsRUFBRSxnQkFBZ0I7WUFDM0IsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7U0FDVixDQUFDO1FBQ0Ysa0RBQWtEO1FBQ2xELE1BQU0sbUJBQW1CLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3BGLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzQyxxRkFBcUY7UUFDckYsTUFBTSxlQUFlLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQzFELE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUNuRCxDQUFDO1FBQ0YsNkZBQTZGO1FBQzdGLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLHlEQUF5RDtRQUN6RCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3hELGVBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELE9BQU8sZUFBZSxDQUFDO0lBQ3pCLENBQUM7K0dBdkVVLHFCQUFxQjttSEFBckIscUJBQXFCLGNBRFIsTUFBTTs7NEZBQ25CLHFCQUFxQjtrQkFEakMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIGNocm9tYSB9IGZyb20gJ2Nocm9tYS1qcyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQnJhbmRpbmdTaGFkZXNTZXJ2aWNlIHtcbiAgZ2V0U2hhZGVDb2xvckJyYW5kaW5nQ3NzVmFycyhuZXdCcmFuZFByaW1hcnk6IHN0cmluZykge1xuICAgIGNvbnN0IHNoYWRlcyA9IHRoaXMuZ2VuZXJhdGVTaGFkZXMobmV3QnJhbmRQcmltYXJ5KTtcbiAgICByZXR1cm4gdGhpcy5zaGFkZXNUb09iamVjdChzaGFkZXMpO1xuICB9XG5cbiAgaXNWYWxpZFNoYWRlQ29sb3IoY29sb3I6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY2hyb21hLnZhbGlkKGNvbG9yKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBoYXNDdXN0b21TaGFkZXNTZXQoXG4gICAgcHJldmlvdXNCcmFuZFByaW1hcnk6IHN0cmluZyxcbiAgICBvdGhlclZhcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj5cbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKHByZXZpb3VzQnJhbmRQcmltYXJ5ICYmIG90aGVyVmFycykge1xuICAgICAgY29uc3Qgb2xkU2hhZGVzID0gdGhpcy5nZW5lcmF0ZVNoYWRlcyhwcmV2aW91c0JyYW5kUHJpbWFyeSk7XG4gICAgICBjb25zdCBvbGRTaGFkZXNPYmogPSB0aGlzLnNoYWRlc1RvT2JqZWN0KG9sZFNoYWRlcyk7XG4gICAgICBmb3IgKGNvbnN0IHNoYWRlS2V5IG9mIE9iamVjdC5rZXlzKG9sZFNoYWRlc09iaikpIHtcbiAgICAgICAgY29uc3QgZnJvbVZhcnMgPSBvdGhlclZhcnNbc2hhZGVLZXldO1xuICAgICAgICBjb25zdCBnZW5lcmF0ZWQgPSBvbGRTaGFkZXNPYmpbc2hhZGVLZXldO1xuICAgICAgICBpZiAoZnJvbVZhcnMgPT09IG51bGwgfHwgZnJvbVZhcnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmcm9tVmFycyAhPT0gZ2VuZXJhdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBzaGFkZXNUb09iamVjdChzaGFkZXM6IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgYnJhbmRpbmdDc3NWYXJzOiBSZWNvcmQ8YGM4eS1icmFuZC0ke251bWJlcn0wYCwgc3RyaW5nPiA9IHt9O1xuICAgIGxldCBpID0gMTtcbiAgICBmb3IgKGNvbnN0IHNoYWRlIG9mIHNoYWRlcykge1xuICAgICAgY29uc3Qga2V5ID0gYGM4eS1icmFuZC0ke2l9MGAgYXMgY29uc3Q7XG4gICAgICBicmFuZGluZ0Nzc1ZhcnNba2V5XSA9IHNoYWRlO1xuICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiBicmFuZGluZ0Nzc1ZhcnM7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlU2hhZGVzKGlucHV0Q29sb3I6IHN0cmluZykge1xuICAgIGNvbnN0IHJlZmVyZW5jZVNoYWRlcyA9IFtcbiAgICAgICcjMTM0MTU4JyxcbiAgICAgICcjMUM1NTY5JyxcbiAgICAgICcjMDU4MTkyJywgLy8gcHJpbWFyeSBjb2xvclxuICAgICAgJyMyMkE2QUEnLFxuICAgICAgJyMzQ0MxQjcnLFxuICAgICAgJyM4QURCRDUnLFxuICAgICAgJyNDNUVERUEnLFxuICAgICAgJyNFQkY5RjgnXG4gICAgXTtcbiAgICAvLyBDYWxjdWxhdGUgdGhlIGx1bWluYW5jZSBvZiB0aGUgcmVmZXJlbmNlIHNoYWRlc1xuICAgIGNvbnN0IHJlZmVyZW5jZUx1bWluYW5jZXMgPSByZWZlcmVuY2VTaGFkZXMubWFwKGNvbG9yID0+IGNocm9tYShjb2xvcikubHVtaW5hbmNlKCkpO1xuICAgIGNvbnN0IGlucHV0Q29sb3JBc0hleCA9IGNocm9tYShpbnB1dENvbG9yKTtcbiAgICAvLyBHZW5lcmF0ZSBzaGFkZXMgb2YgdGhlIGlucHV0IGNvbG9yIHdpdGggdGhlIHNhbWUgbHVtaW5hbmNlIGFzIHRoZSByZWZlcmVuY2Ugc2hhZGVzXG4gICAgY29uc3QgZ2VuZXJhdGVkU2hhZGVzID0gcmVmZXJlbmNlTHVtaW5hbmNlcy5tYXAobHVtaW5hbmNlID0+XG4gICAgICBjaHJvbWEoaW5wdXRDb2xvcikubHVtaW5hbmNlKGx1bWluYW5jZSkuaGV4KCdyZ2InKVxuICAgICk7XG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBpbnB1dCBjb2xvciBhbmQgZWFjaCBjb2xvciBpbiB0aGUgZ2VuZXJhdGVkU2hhZGVzIGFycmF5XG4gICAgY29uc3QgZGlzdGFuY2VzID0gZ2VuZXJhdGVkU2hhZGVzLm1hcChjb2xvciA9PiBjaHJvbWEuZGVsdGFFKGlucHV0Q29sb3JBc0hleCwgY29sb3IpKTtcbiAgICAvLyBGaW5kIHRoZSBpbmRleCBvZiB0aGUgY29sb3Igd2l0aCB0aGUgc21hbGxlc3QgZGlzdGFuY2VcbiAgICBjb25zdCBpbmRleCA9IGRpc3RhbmNlcy5pbmRleE9mKE1hdGgubWluKC4uLmRpc3RhbmNlcykpO1xuICAgIGdlbmVyYXRlZFNoYWRlc1tpbmRleF0gPSBpbnB1dENvbG9yQXNIZXguaGV4KCdyZ2InKTtcbiAgICByZXR1cm4gZ2VuZXJhdGVkU2hhZGVzO1xuICB9XG59XG4iXX0=