UNPKG

@ux-aspects/ux-aspects

Version:

Open source user interface framework for building modern, responsive, mobile big data applications

90 lines 11.8 kB
import { inject, Injectable } from '@angular/core'; import { colorSets, COLOR_SET_TOKEN } from './color-sets/index'; import { ThemeColor } from './theme-color'; import * as i0 from "@angular/core"; export class ColorService { /** Allow the color set to be provided in a forRoot function otherwise set it to the Keppel theme by default */ constructor() { this._colorSet = inject(COLOR_SET_TOKEN, { optional: true }); // resolve the theme based on the colorset this._theme = this.getTheme(this._colorSet); } /** * Get a ThemeColor object from a color name * @param colorName The name of the color from the color palette */ getColor(colorName) { // get the matching ThemeColor from the active theme const themeColor = this._theme[this.resolveColorName(colorName)]; // if there is not a match then throw an error if (!themeColor) { throw new Error('Color not found: ' + colorName); } return new ThemeColor(themeColor.getRed(), themeColor.getGreen(), themeColor.getBlue(), themeColor.getAlpha()); } /** * Get the active color set */ getColorSet() { return this._colorSet; } /** * Define the current color set and produce a Theme from it */ setColorSet(colorSet) { this._colorSet = colorSet; this._theme = this.getTheme(colorSet); } /** * Resolve a color value. This may be the name of a color from the color set * or it may simply be a hex or rgb(a) color value. This function will return * a CSS color value regardless of which one of these formats it is * @param value The color name, hex code or rgb(a) value to resolve * @returns If the color is the name of a color in the set, the `rgba` color will be returned, otherwise the original CSS value will be returned. */ resolve(value) { if (!value) { return; } const colorName = this.resolveColorName(value); for (const color in this._theme) { if (colorName === color.toLowerCase()) { return this.getColor(colorName).toRgba(); } } return value; } /** * Converts a color name to an appropriate ColorSet name. For example * a color may be written in lower-camel-case, however color sets are in * kebab-case. This will convert to the appropriate naming format * @param colorName The color name to resolve */ resolveColorName(colorName = '') { return colorName.replace(/\s+/g, '-').toLowerCase(); } /** Determine if the current colorset has a specific color */ colorExists(name) { return !!Object.keys(this._theme).find(colorName => colorName === this.resolveColorName(name)); } /** Create a theme from a colorset */ getTheme(colorSet) { // create a new theme object const theme = {}; // ensure we have a colorset if (!colorSet) { colorSet = colorSets.keppel; } // iterate over each hex code and convert it to a theme color for (const color in colorSet.colorValueSet) { theme[color] = ThemeColor.parse(colorSet.colorValueSet[color]); } return theme; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ColorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ColorService }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ColorService, decorators: [{ type: Injectable }], ctorParameters: () => [] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9jb2xvci9jb2xvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBWSxTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFHM0MsTUFBTSxPQUFPLFlBQVk7SUFNckIsK0dBQStHO0lBQy9HO1FBTlEsY0FBUyxHQUFHLE1BQU0sQ0FBQyxlQUFlLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQVE1RCwwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsUUFBUSxDQUFDLFNBQTBCO1FBRS9CLG9EQUFvRDtRQUNwRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBRWpFLDhDQUE4QztRQUM5QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFFRCxPQUFPLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ25ILENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVc7UUFDUCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVyxDQUFDLFFBQWtCO1FBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1FBQzFCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsT0FBTyxDQUFDLEtBQWE7UUFDakIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1QsT0FBTztRQUNYLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFL0MsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDOUIsSUFBSSxTQUFTLEtBQUssS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7Z0JBQ3BDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM3QyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGdCQUFnQixDQUFDLFlBQW9CLEVBQUU7UUFDbkMsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBRUQsNkRBQTZEO0lBQzdELFdBQVcsQ0FBQyxJQUFZO1FBQ3BCLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRyxDQUFDO0lBRUQscUNBQXFDO0lBQzdCLFFBQVEsQ0FBQyxRQUFrQjtRQUMvQiw0QkFBNEI7UUFDNUIsTUFBTSxLQUFLLEdBQVUsRUFBRSxDQUFDO1FBRXhCLDRCQUE0QjtRQUM1QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDWixRQUFRLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUNoQyxDQUFDO1FBRUQsNkRBQTZEO1FBQzdELEtBQUssTUFBTSxLQUFLLElBQUksUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3pDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQzsrR0FuR1EsWUFBWTttSEFBWixZQUFZOzs0RkFBWixZQUFZO2tCQUR4QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb2xvclNldCwgY29sb3JTZXRzLCBDT0xPUl9TRVRfVE9LRU4gfSBmcm9tICcuL2NvbG9yLXNldHMvaW5kZXgnO1xuaW1wb3J0IHsgVGhlbWVDb2xvciB9IGZyb20gJy4vdGhlbWUtY29sb3InO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29sb3JTZXJ2aWNlIHtcbiAgICBwcml2YXRlIF9jb2xvclNldCA9IGluamVjdChDT0xPUl9TRVRfVE9LRU4sIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgICAvKiogU2V0IHRoZSBkZWZhdWx0IHRoZW1lIHRvIHRoZSBLZXBwZWwgY29sb3JzZXQgKi9cbiAgICBwcml2YXRlIF90aGVtZTogUmVhZG9ubHk8VGhlbWU+O1xuXG4gICAgLyoqIEFsbG93IHRoZSBjb2xvciBzZXQgdG8gYmUgcHJvdmlkZWQgaW4gYSBmb3JSb290IGZ1bmN0aW9uIG90aGVyd2lzZSBzZXQgaXQgdG8gdGhlIEtlcHBlbCB0aGVtZSBieSBkZWZhdWx0ICovXG4gICAgY29uc3RydWN0b3IoKSB7XG5cbiAgICAgICAgLy8gcmVzb2x2ZSB0aGUgdGhlbWUgYmFzZWQgb24gdGhlIGNvbG9yc2V0XG4gICAgICAgIHRoaXMuX3RoZW1lID0gdGhpcy5nZXRUaGVtZSh0aGlzLl9jb2xvclNldCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGEgVGhlbWVDb2xvciBvYmplY3QgZnJvbSBhIGNvbG9yIG5hbWVcbiAgICAgKiBAcGFyYW0gY29sb3JOYW1lIFRoZSBuYW1lIG9mIHRoZSBjb2xvciBmcm9tIHRoZSBjb2xvciBwYWxldHRlXG4gICAgICovXG4gICAgZ2V0Q29sb3IoY29sb3JOYW1lOiBDb2xvcklkZW50aWZpZXIpOiBUaGVtZUNvbG9yIHtcblxuICAgICAgICAvLyBnZXQgdGhlIG1hdGNoaW5nIFRoZW1lQ29sb3IgZnJvbSB0aGUgYWN0aXZlIHRoZW1lXG4gICAgICAgIGNvbnN0IHRoZW1lQ29sb3IgPSB0aGlzLl90aGVtZVt0aGlzLnJlc29sdmVDb2xvck5hbWUoY29sb3JOYW1lKV07XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm90IGEgbWF0Y2ggdGhlbiB0aHJvdyBhbiBlcnJvclxuICAgICAgICBpZiAoIXRoZW1lQ29sb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29sb3Igbm90IGZvdW5kOiAnICsgY29sb3JOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgVGhlbWVDb2xvcih0aGVtZUNvbG9yLmdldFJlZCgpLCB0aGVtZUNvbG9yLmdldEdyZWVuKCksIHRoZW1lQ29sb3IuZ2V0Qmx1ZSgpLCB0aGVtZUNvbG9yLmdldEFscGhhKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgYWN0aXZlIGNvbG9yIHNldFxuICAgICAqL1xuICAgIGdldENvbG9yU2V0KCk6IENvbG9yU2V0IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbG9yU2V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmluZSB0aGUgY3VycmVudCBjb2xvciBzZXQgYW5kIHByb2R1Y2UgYSBUaGVtZSBmcm9tIGl0XG4gICAgICovXG4gICAgc2V0Q29sb3JTZXQoY29sb3JTZXQ6IENvbG9yU2V0KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbG9yU2V0ID0gY29sb3JTZXQ7XG4gICAgICAgIHRoaXMuX3RoZW1lID0gdGhpcy5nZXRUaGVtZShjb2xvclNldCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzb2x2ZSBhIGNvbG9yIHZhbHVlLiBUaGlzIG1heSBiZSB0aGUgbmFtZSBvZiBhIGNvbG9yIGZyb20gdGhlIGNvbG9yIHNldFxuICAgICAqIG9yIGl0IG1heSBzaW1wbHkgYmUgYSBoZXggb3IgcmdiKGEpIGNvbG9yIHZhbHVlLiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuXG4gICAgICogYSBDU1MgY29sb3IgdmFsdWUgcmVnYXJkbGVzcyBvZiB3aGljaCBvbmUgb2YgdGhlc2UgZm9ybWF0cyBpdCBpc1xuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgY29sb3IgbmFtZSwgaGV4IGNvZGUgb3IgcmdiKGEpIHZhbHVlIHRvIHJlc29sdmVcbiAgICAgKiBAcmV0dXJucyBJZiB0aGUgY29sb3IgaXMgdGhlIG5hbWUgb2YgYSBjb2xvciBpbiB0aGUgc2V0LCB0aGUgYHJnYmFgIGNvbG9yIHdpbGwgYmUgcmV0dXJuZWQsIG90aGVyd2lzZSB0aGUgb3JpZ2luYWwgQ1NTIHZhbHVlIHdpbGwgYmUgcmV0dXJuZWQuXG4gICAgICovXG4gICAgcmVzb2x2ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29sb3JOYW1lID0gdGhpcy5yZXNvbHZlQ29sb3JOYW1lKHZhbHVlKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGNvbG9yIGluIHRoaXMuX3RoZW1lKSB7XG4gICAgICAgICAgICBpZiAoY29sb3JOYW1lID09PSBjb2xvci50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29sb3IoY29sb3JOYW1lKS50b1JnYmEoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGNvbG9yIG5hbWUgdG8gYW4gYXBwcm9wcmlhdGUgQ29sb3JTZXQgbmFtZS4gRm9yIGV4YW1wbGVcbiAgICAgKiBhIGNvbG9yIG1heSBiZSB3cml0dGVuIGluIGxvd2VyLWNhbWVsLWNhc2UsIGhvd2V2ZXIgY29sb3Igc2V0cyBhcmUgaW5cbiAgICAgKiBrZWJhYi1jYXNlLiBUaGlzIHdpbGwgY29udmVydCB0byB0aGUgYXBwcm9wcmlhdGUgbmFtaW5nIGZvcm1hdFxuICAgICAqIEBwYXJhbSBjb2xvck5hbWUgVGhlIGNvbG9yIG5hbWUgdG8gcmVzb2x2ZVxuICAgICAqL1xuICAgIHJlc29sdmVDb2xvck5hbWUoY29sb3JOYW1lOiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBjb2xvck5hbWUucmVwbGFjZSgvXFxzKy9nLCAnLScpLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZSBpZiB0aGUgY3VycmVudCBjb2xvcnNldCBoYXMgYSBzcGVjaWZpYyBjb2xvciAqL1xuICAgIGNvbG9yRXhpc3RzKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISFPYmplY3Qua2V5cyh0aGlzLl90aGVtZSkuZmluZChjb2xvck5hbWUgPT4gY29sb3JOYW1lID09PSB0aGlzLnJlc29sdmVDb2xvck5hbWUobmFtZSkpO1xuICAgIH1cblxuICAgIC8qKiBDcmVhdGUgYSB0aGVtZSBmcm9tIGEgY29sb3JzZXQgKi9cbiAgICBwcml2YXRlIGdldFRoZW1lKGNvbG9yU2V0OiBDb2xvclNldCk6IFJlYWRvbmx5PFRoZW1lPiB7XG4gICAgICAgIC8vIGNyZWF0ZSBhIG5ldyB0aGVtZSBvYmplY3RcbiAgICAgICAgY29uc3QgdGhlbWU6IFRoZW1lID0ge307XG5cbiAgICAgICAgLy8gZW5zdXJlIHdlIGhhdmUgYSBjb2xvcnNldFxuICAgICAgICBpZiAoIWNvbG9yU2V0KSB7XG4gICAgICAgICAgICBjb2xvclNldCA9IGNvbG9yU2V0cy5rZXBwZWw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpdGVyYXRlIG92ZXIgZWFjaCBoZXggY29kZSBhbmQgY29udmVydCBpdCB0byBhIHRoZW1lIGNvbG9yXG4gICAgICAgIGZvciAoY29uc3QgY29sb3IgaW4gY29sb3JTZXQuY29sb3JWYWx1ZVNldCkge1xuICAgICAgICAgICAgdGhlbWVbY29sb3JdID0gVGhlbWVDb2xvci5wYXJzZShjb2xvclNldC5jb2xvclZhbHVlU2V0W2NvbG9yXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhlbWU7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRoZW1lIHtcbiAgICBbbmFtZTogc3RyaW5nXTogVGhlbWVDb2xvcjtcbn1cblxuZXhwb3J0IHR5cGUgQ29sb3JJZGVudGlmaWVyID0gc3RyaW5nO1xuIl19