UNPKG

@ux-aspects/ux-aspects

Version:

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

148 lines 16.4 kB
export class ThemeColor { constructor(_r, _g, _b, _a = '1') { this._r = _r; this._g = _g; this._b = _b; this._a = _a; } /** * Create a ThemeColor object from a CSS color string * @param value The CSS color string to derive a ThemeColor object from */ static parse(value) { let r, g, b, a = '1'; const rgbaPattern = /^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+(?:\.\d+)?))?\)$/; const shortHexPattern = /^#?([a-f\d])([a-f\d])([a-f\d])$/i; const longHexPattern = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i; const rgbaMatch = value.match(rgbaPattern); const shortHexMatch = value.match(shortHexPattern); const longHexMatch = value.match(longHexPattern); if (rgbaMatch) { r = rgbaMatch[1]; g = rgbaMatch[2]; b = rgbaMatch[3]; a = rgbaMatch[4] ? rgbaMatch[4] : '1'; } else if (longHexMatch) { r = parseInt(longHexMatch[1], 16).toString(); g = parseInt(longHexMatch[2], 16).toString(); b = parseInt(longHexMatch[3], 16).toString(); } else if (shortHexMatch) { r = parseInt(shortHexMatch[1] + shortHexMatch[1], 16).toString(); g = parseInt(shortHexMatch[2] + shortHexMatch[2], 16).toString(); b = parseInt(shortHexMatch[3] + shortHexMatch[3], 16).toString(); } else { throw new Error(`Cannot parse color - ${value} is not a valid color.`); } return new ThemeColor(r, g, b, a); } /** * Clone a theme color so it can be modified without affecting other places using the color * @param themeColor The original theme color to clone */ static from(themeColor) { return new ThemeColor(themeColor.getRed(), themeColor.getGreen(), themeColor.getBlue(), themeColor.getAlpha()); } /** * Determine if an object is an instance of a theme color. * Using a simple instanceof check will not always work in plunker * where the ThemeColor is from @ux-aspects/ux-aspects and the color * comes from @micro-focus/ux-aspects */ static isInstanceOf(themeColor) { return (typeof themeColor === 'object' && // eslint-disable-next-line no-prototype-builtins themeColor.hasOwnProperty('_r') && // eslint-disable-next-line no-prototype-builtins themeColor.hasOwnProperty('_g') && // eslint-disable-next-line no-prototype-builtins themeColor.hasOwnProperty('_b') && // eslint-disable-next-line no-prototype-builtins themeColor.hasOwnProperty('_a')); } /** * Convert the theme color to a CSS hex color code */ toHex() { let red = parseInt(this._r).toString(16); let green = parseInt(this._g).toString(16); let blue = parseInt(this._b).toString(16); if (red.length < 2) { red = '0' + red; } if (green.length < 2) { green = '0' + green; } if (blue.length < 2) { blue = '0' + blue; } return '#' + red + green + blue; } /** * Convert the theme color to a CSS rgb color code */ toRgb() { return 'rgb(' + this._r + ', ' + this._g + ', ' + this._b + ')'; } /** * Convert the theme color to a CSS rgbs color code */ toRgba() { return 'rgba(' + this._r + ', ' + this._g + ', ' + this._b + ', ' + this._a + ')'; } /** * Get the red value from the RGBA color value */ getRed() { return this._r; } /** * Get the green value from the RGBA color value */ getGreen() { return this._g; } /** * Get the blue value from the RGBA color value */ getBlue() { return this._b; } /** * Get the alpha value from the RGBA color value */ getAlpha() { return this._a; } /** * Set the red value from the RGBA color value */ setRed(red) { this._r = red; return this; } /** * Set the green value from the RGBA color value */ setGreen(green) { this._g = green; return this; } /** * Set the blue value from the RGBA color value */ setBlue(blue) { this._b = blue; return this; } /** * Set the alpha value from the RGBA color value */ setAlpha(alpha) { this._a = alpha.toString(); return this; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUtY29sb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvY29sb3IvdGhlbWUtY29sb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLFVBQVU7SUFFbkIsWUFBb0IsRUFBVSxFQUFVLEVBQVUsRUFBVSxFQUFVLEVBQVUsS0FBYSxHQUFHO1FBQTVFLE9BQUUsR0FBRixFQUFFLENBQVE7UUFBVSxPQUFFLEdBQUYsRUFBRSxDQUFRO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBUTtRQUFVLE9BQUUsR0FBRixFQUFFLENBQWM7SUFBSSxDQUFDO0lBRXJHOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBYTtRQUN0QixJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFFckIsTUFBTSxXQUFXLEdBQUcsNERBQTRELENBQUM7UUFDakYsTUFBTSxlQUFlLEdBQUcsa0NBQWtDLENBQUM7UUFDM0QsTUFBTSxjQUFjLEdBQUcsMkNBQTJDLENBQUM7UUFFbkUsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQyxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFakQsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNaLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakIsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQixDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FB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Q0FBQyxJQUFZO1FBQ2hCLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ2YsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUSxDQUFDLEtBQXNCO1FBQzNCLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBUaGVtZUNvbG9yIHtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX3I6IHN0cmluZywgcHJpdmF0ZSBfZzogc3RyaW5nLCBwcml2YXRlIF9iOiBzdHJpbmcsIHByaXZhdGUgX2E6IHN0cmluZyA9ICcxJykgeyB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBUaGVtZUNvbG9yIG9iamVjdCBmcm9tIGEgQ1NTIGNvbG9yIHN0cmluZ1xuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgQ1NTIGNvbG9yIHN0cmluZyB0byBkZXJpdmUgYSBUaGVtZUNvbG9yIG9iamVjdCBmcm9tXG4gICAgICovXG4gICAgc3RhdGljIHBhcnNlKHZhbHVlOiBzdHJpbmcpOiBUaGVtZUNvbG9yIHtcbiAgICAgICAgbGV0IHIsIGcsIGIsIGEgPSAnMSc7XG5cbiAgICAgICAgY29uc3QgcmdiYVBhdHRlcm4gPSAvXnJnYmE/XFwoKFxcZCspLFxccyooXFxkKyksXFxzKihcXGQrKSg/OixcXHMqKFxcZCsoPzpcXC5cXGQrKT8pKT9cXCkkLztcbiAgICAgICAgY29uc3Qgc2hvcnRIZXhQYXR0ZXJuID0gL14jPyhbYS1mXFxkXSkoW2EtZlxcZF0pKFthLWZcXGRdKSQvaTtcbiAgICAgICAgY29uc3QgbG9uZ0hleFBhdHRlcm4gPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pO1xuXG4gICAgICAgIGNvbnN0IHJnYmFNYXRjaCA9IHZhbHVlLm1hdGNoKHJnYmFQYXR0ZXJuKTtcbiAgICAgICAgY29uc3Qgc2hvcnRIZXhNYXRjaCA9IHZhbHVlLm1hdGNoKHNob3J0SGV4UGF0dGVybik7XG4gICAgICAgIGNvbnN0IGxvbmdIZXhNYXRjaCA9IHZhbHVlLm1hdGNoKGxvbmdIZXhQYXR0ZXJuKTtcblxuICAgICAgICBpZiAocmdiYU1hdGNoKSB7XG4gICAgICAgICAgICByID0gcmdiYU1hdGNoWzFdO1xuICAgICAgICAgICAgZyA9IHJnYmFNYXRjaFsyXTtcbiAgICAgICAgICAgIGIgPSByZ2JhTWF0Y2hbM107XG4gICAgICAgICAgICBhID0gcmdiYU1hdGNoWzRdID8gcmdiYU1hdGNoWzRdIDogJzEnO1xuICAgICAgICB9IGVsc2UgaWYgKGxvbmdIZXhNYXRjaCkge1xuICAgICAgICAgICAgciA9IHBhcnNlSW50KGxvbmdIZXhNYXRjaFsxXSwgMTYpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBnID0gcGFyc2VJbnQobG9uZ0hleE1hdGNoWzJdLCAxNikudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGIgPSBwYXJzZUludChsb25nSGV4TWF0Y2hbM10sIDE2KS50b1N0cmluZygpO1xuICAgICAgICB9IGVsc2UgaWYgKHNob3J0SGV4TWF0Y2gpIHtcbiAgICAgICAgICAgIHIgPSBwYXJzZUludChzaG9ydEhleE1hdGNoWzFdICsgc2hvcnRIZXhNYXRjaFsxXSwgMTYpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBnID0gcGFyc2VJbnQoc2hvcnRIZXhNYXRjaFsyXSArIHNob3J0SGV4TWF0Y2hbMl0sIDE2KS50b1N0cmluZygpO1xuICAgICAgICAgICAgYiA9IHBhcnNlSW50KHNob3J0SGV4TWF0Y2hbM10gKyBzaG9ydEhleE1hdGNoWzNdLCAxNikudG9TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHBhcnNlIGNvbG9yIC0gJHt2YWx1ZX0gaXMgbm90IGEgdmFsaWQgY29sb3IuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBUaGVtZUNvbG9yKHIsIGcsIGIsIGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb25lIGEgdGhlbWUgY29sb3Igc28gaXQgY2FuIGJlIG1vZGlmaWVkIHdpdGhvdXQgYWZmZWN0aW5nIG90aGVyIHBsYWNlcyB1c2luZyB0aGUgY29sb3JcbiAgICAgKiBAcGFyYW0gdGhlbWVDb2xvciBUaGUgb3JpZ2luYWwgdGhlbWUgY29sb3IgdG8gY2xvbmVcbiAgICAgKi9cbiAgICBzdGF0aWMgZnJvbSh0aGVtZUNvbG9yOiBUaGVtZUNvbG9yKTogVGhlbWVDb2xvciB7XG4gICAgICAgIHJldHVybiBuZXcgVGhlbWVDb2xvcih0aGVtZUNvbG9yLmdldFJlZCgpLCB0aGVtZUNvbG9yLmdldEdyZWVuKCksIHRoZW1lQ29sb3IuZ2V0Qmx1ZSgpLCB0aGVtZUNvbG9yLmdldEFscGhhKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERldGVybWluZSBpZiBhbiBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgYSB0aGVtZSBjb2xvci5cbiAgICAgKiBVc2luZyBhIHNpbXBsZSBpbnN0YW5jZW9mIGNoZWNrIHdpbGwgbm90IGFsd2F5cyB3b3JrIGluIHBsdW5rZXJcbiAgICAgKiB3aGVyZSB0aGUgVGhlbWVDb2xvciBpcyBmcm9tIEB1eC1hc3BlY3RzL3V4LWFzcGVjdHMgYW5kIHRoZSBjb2xvclxuICAgICAqIGNvbWVzIGZyb20gQG1pY3JvLWZvY3VzL3V4LWFzcGVjdHNcbiAgICAgKi9cbiAgICBzdGF0aWMgaXNJbnN0YW5jZU9mKHRoZW1lQ29sb3I6IHVua25vd24pOiB0aGVtZUNvbG9yIGlzIFRoZW1lQ29sb3Ige1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHR5cGVvZiB0aGVtZUNvbG9yID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgICB0aGVtZUNvbG9yLmhhc093blByb3BlcnR5KCdfcicpICYmXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgICAgIHRoZW1lQ29sb3IuaGFzT3duUHJvcGVydHkoJ19nJykgJiZcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICAgICAgdGhlbWVDb2xvci5oYXNPd25Qcm9wZXJ0eSgnX2InKSAmJlxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgICB0aGVtZUNvbG9yLmhhc093blByb3BlcnR5KCdfYScpXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IHRoZSB0aGVtZSBjb2xvciB0byBhIENTUyBoZXggY29sb3IgY29kZVxuICAgICAqL1xuICAgIHRvSGV4KCk6IHN0cmluZyB7XG4gICAgICAgIGxldCByZWQgPSBwYXJzZUludCh0aGlzLl9yKS50b1N0cmluZygxNik7XG4gICAgICAgIGxldCBncmVlbiA9IHBhcnNlSW50KHRoaXMuX2cpLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgbGV0IGJsdWUgPSBwYXJzZUludCh0aGlzLl9iKS50b1N0cmluZygxNik7XG5cbiAgICAgICAgaWYgKHJlZC5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICByZWQgPSAnMCcgKyByZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdyZWVuLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIGdyZWVuID0gJzAnICsgZ3JlZW47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJsdWUubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgYmx1ZSA9ICcwJyArIGJsdWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyMnICsgcmVkICsgZ3JlZW4gKyBibHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgdGhlIHRoZW1lIGNvbG9yIHRvIGEgQ1NTIHJnYiBjb2xvciBjb2RlXG4gICAgICovXG4gICAgdG9SZ2IoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICdyZ2IoJyArIHRoaXMuX3IgKyAnLCAnICsgdGhpcy5fZyArICcsICcgKyB0aGlzLl9iICsgJyknO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgdGhlIHRoZW1lIGNvbG9yIHRvIGEgQ1NTIHJnYnMgY29sb3IgY29kZVxuICAgICAqL1xuICAgIHRvUmdiYSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gJ3JnYmEoJyArIHRoaXMuX3IgKyAnLCAnICsgdGhpcy5fZyArICcsICcgKyB0aGlzLl9iICsgJywgJyArIHRoaXMuX2EgKyAnKSc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSByZWQgdmFsdWUgZnJvbSB0aGUgUkdCQSBjb2xvciB2YWx1ZVxuICAgICAqL1xuICAgIGdldFJlZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGdyZWVuIHZhbHVlIGZyb20gdGhlIFJHQkEgY29sb3IgdmFsdWVcbiAgICAgKi9cbiAgICBnZXRHcmVlbigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZztcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgYmx1ZSB2YWx1ZSBmcm9tIHRoZSBSR0JBIGNvbG9yIHZhbHVlXG4gICAgICovXG4gICAgZ2V0Qmx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fYjtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgYWxwaGEgdmFsdWUgZnJvbSB0aGUgUkdCQSBjb2xvciB2YWx1ZVxuICAgICAqL1xuICAgIGdldEFscGhhKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgcmVkIHZhbHVlIGZyb20gdGhlIFJHQkEgY29sb3IgdmFsdWVcbiAgICAgKi9cbiAgICBzZXRSZWQocmVkOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fciA9IHJlZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBncmVlbiB2YWx1ZSBmcm9tIHRoZSBSR0JBIGNvbG9yIHZhbHVlXG4gICAgICovXG4gICAgc2V0R3JlZW4oZ3JlZW46IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9nID0gZ3JlZW47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgYmx1ZSB2YWx1ZSBmcm9tIHRoZSBSR0JBIGNvbG9yIHZhbHVlXG4gICAgICovXG4gICAgc2V0Qmx1ZShibHVlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fYiA9IGJsdWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgYWxwaGEgdmFsdWUgZnJvbSB0aGUgUkdCQSBjb2xvciB2YWx1ZVxuICAgICAqL1xuICAgIHNldEFscGhhKGFscGhhOiBzdHJpbmcgfCBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fYSA9IGFscGhhLnRvU3RyaW5nKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn0iXX0=