@ux-aspects/ux-aspects
Version:
Open source user interface framework for building modern, responsive, mobile big data applications
148 lines • 16.4 kB
JavaScript
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=