ismx-nexo-node-app 0.4.16 → 0.4.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,10 +1,54 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
class ColorUtils {
|
|
4
|
+
static hexToRgb(hex) {
|
|
5
|
+
hex = hex.replace(/^#/, '');
|
|
6
|
+
return {
|
|
7
|
+
r: parseInt(hex.slice(0, 2), 16),
|
|
8
|
+
g: parseInt(hex.slice(2, 4), 16),
|
|
9
|
+
b: parseInt(hex.slice(4, 6), 16),
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
static rgbToHex(r, g, b) {
|
|
13
|
+
return `#${((1 << 24) | (r << 16) | (g << 8) | b).toString(16).slice(1)}`;
|
|
14
|
+
}
|
|
15
|
+
static interpolate(color1, color2, ratio) {
|
|
16
|
+
const color1Rgb = ColorUtils.hexToRgb(color1);
|
|
17
|
+
const color2Rgb = ColorUtils.hexToRgb(color2);
|
|
18
|
+
// Interpolate each color component (r, g, b)
|
|
19
|
+
const r = Math.round(color1Rgb.r + (color2Rgb.r - color1Rgb.r) * ratio);
|
|
20
|
+
const g = Math.round(color1Rgb.g + (color2Rgb.g - color1Rgb.g) * ratio);
|
|
21
|
+
const b = Math.round(color1Rgb.b + (color2Rgb.b - color1Rgb.b) * ratio);
|
|
22
|
+
// Convert the resulting RGB back to hex
|
|
23
|
+
return ColorUtils.rgbToHex(r, g, b);
|
|
24
|
+
}
|
|
25
|
+
static contrast(color) {
|
|
26
|
+
// Ensure hex is in the correct format
|
|
27
|
+
color = color.replace(/^#/, '');
|
|
28
|
+
// Convert 3-digit hex to 6-digit
|
|
29
|
+
if (color.length === 3) {
|
|
30
|
+
color = color.split('').map(x => x + x).join('');
|
|
31
|
+
}
|
|
32
|
+
// Convert hex to RGB
|
|
33
|
+
let r = parseInt(color.substring(0, 2), 16) / 255;
|
|
34
|
+
let g = parseInt(color.substring(2, 4), 16) / 255;
|
|
35
|
+
let b = parseInt(color.substring(4, 6), 16) / 255;
|
|
36
|
+
// Apply gamma correction (sRGB)
|
|
37
|
+
r = r <= 0.03928 ? r / 12.92 : Math.pow((r + 0.055) / 1.055, 2.4);
|
|
38
|
+
g = g <= 0.03928 ? g / 12.92 : Math.pow((g + 0.055) / 1.055, 2.4);
|
|
39
|
+
b = b <= 0.03928 ? b / 12.92 : Math.pow((b + 0.055) / 1.055, 2.4);
|
|
40
|
+
// Calculate luminance
|
|
41
|
+
let luminance = 0.2126 * r + 0.7152 * g + 0.0722 * b;
|
|
42
|
+
// WCAG threshold for contrast readability (4.5:1)
|
|
43
|
+
return luminance > 0.4 ? '#111111' : '#FFFFFF';
|
|
44
|
+
}
|
|
4
45
|
static transparency(color, transparency) {
|
|
5
|
-
if (
|
|
6
|
-
|
|
7
|
-
|
|
46
|
+
if (!/^#([0-9A-F]{3}){1,2}$/i.test(color))
|
|
47
|
+
throw new Error('Invalid hex color format');
|
|
48
|
+
if (color.length === 4)
|
|
49
|
+
color = '#' + color.slice(1).split('').map(x => x + x).join('');
|
|
50
|
+
let alphaHex = Math.round(transparency * 255).toString(16).padStart(2, '0');
|
|
51
|
+
return color + alphaHex;
|
|
8
52
|
}
|
|
9
53
|
}
|
|
10
54
|
exports.default = ColorUtils;
|
|
@@ -35,7 +35,7 @@ class RepositoryRest extends Repository_1.default {
|
|
|
35
35
|
for (const header of Object.keys(headers))
|
|
36
36
|
headers.set(header, (_e = (_d = request.headers) === null || _d === void 0 ? void 0 : _d[header]) !== null && _e !== void 0 ? _e : "");
|
|
37
37
|
// Realiza la llamada a la API con las cabeceras y la URL base de la llamada.
|
|
38
|
-
let call = fetch(this.baseUrl + endpoint + QueryUtils_1.default.map(request.query), Object.assign(Object.assign({}, request), { body: method
|
|
38
|
+
let call = fetch(this.baseUrl + endpoint + QueryUtils_1.default.map(request.query), Object.assign(Object.assign({}, request), { body: method !== "GET" ? JSON.stringify(request.body) : undefined, headers }));
|
|
39
39
|
// Añade información adicional a la respuesta y devuelve el resultado (o el error en su caso).
|
|
40
40
|
return call.then((res) => __awaiter(this, void 0, void 0, function* () {
|
|
41
41
|
var _a, _b;
|
|
@@ -1,3 +1,11 @@
|
|
|
1
1
|
export default abstract class ColorUtils {
|
|
2
|
-
static
|
|
2
|
+
static hexToRgb(hex: string): {
|
|
3
|
+
r: number;
|
|
4
|
+
g: number;
|
|
5
|
+
b: number;
|
|
6
|
+
};
|
|
7
|
+
static rgbToHex(r: number, g: number, b: number): string;
|
|
8
|
+
static interpolate(color1: string, color2: string, ratio: number): string;
|
|
9
|
+
static contrast(color: string): string;
|
|
10
|
+
static transparency(color: string, transparency: number): string;
|
|
3
11
|
}
|
package/package.json
CHANGED
|
@@ -1,8 +1,63 @@
|
|
|
1
1
|
export default abstract class ColorUtils {
|
|
2
2
|
|
|
3
|
-
static
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
static hexToRgb(hex: string): { r: number; g: number; b: number }
|
|
4
|
+
{
|
|
5
|
+
hex = hex.replace(/^#/, '');
|
|
6
|
+
return {
|
|
7
|
+
r: parseInt(hex.slice(0, 2), 16),
|
|
8
|
+
g: parseInt(hex.slice(2, 4), 16),
|
|
9
|
+
b: parseInt(hex.slice(4, 6), 16),
|
|
10
|
+
};
|
|
6
11
|
}
|
|
7
12
|
|
|
13
|
+
static rgbToHex(r:number, g: number, b: number): string
|
|
14
|
+
{
|
|
15
|
+
return `#${((1 << 24) | (r << 16) | (g << 8) | b).toString(16).slice(1)}`;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
static interpolate(color1: string, color2: string, ratio: number) {
|
|
19
|
+
const color1Rgb = ColorUtils.hexToRgb(color1);
|
|
20
|
+
const color2Rgb = ColorUtils.hexToRgb(color2);
|
|
21
|
+
|
|
22
|
+
// Interpolate each color component (r, g, b)
|
|
23
|
+
const r = Math.round(color1Rgb.r + (color2Rgb.r - color1Rgb.r) * ratio);
|
|
24
|
+
const g = Math.round(color1Rgb.g + (color2Rgb.g - color1Rgb.g) * ratio);
|
|
25
|
+
const b = Math.round(color1Rgb.b + (color2Rgb.b - color1Rgb.b) * ratio);
|
|
26
|
+
|
|
27
|
+
// Convert the resulting RGB back to hex
|
|
28
|
+
return ColorUtils.rgbToHex(r, g, b);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
static contrast(color: string): string {
|
|
32
|
+
// Ensure hex is in the correct format
|
|
33
|
+
color = color.replace(/^#/, '');
|
|
34
|
+
|
|
35
|
+
// Convert 3-digit hex to 6-digit
|
|
36
|
+
if (color.length === 3) {
|
|
37
|
+
color = color.split('').map(x => x + x).join('');
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Convert hex to RGB
|
|
41
|
+
let r = parseInt(color.substring(0, 2), 16) / 255;
|
|
42
|
+
let g = parseInt(color.substring(2, 4), 16) / 255;
|
|
43
|
+
let b = parseInt(color.substring(4, 6), 16) / 255;
|
|
44
|
+
|
|
45
|
+
// Apply gamma correction (sRGB)
|
|
46
|
+
r = r <= 0.03928 ? r / 12.92 : Math.pow((r + 0.055) / 1.055, 2.4);
|
|
47
|
+
g = g <= 0.03928 ? g / 12.92 : Math.pow((g + 0.055) / 1.055, 2.4);
|
|
48
|
+
b = b <= 0.03928 ? b / 12.92 : Math.pow((b + 0.055) / 1.055, 2.4);
|
|
49
|
+
|
|
50
|
+
// Calculate luminance
|
|
51
|
+
let luminance = 0.2126 * r + 0.7152 * g + 0.0722 * b;
|
|
52
|
+
|
|
53
|
+
// WCAG threshold for contrast readability (4.5:1)
|
|
54
|
+
return luminance > 0.4 ? '#111111' : '#FFFFFF';
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
static transparency(color: string, transparency: number) {
|
|
58
|
+
if (!/^#([0-9A-F]{3}){1,2}$/i.test(color)) throw new Error('Invalid hex color format');
|
|
59
|
+
if (color.length === 4) color = '#' + color.slice(1).split('').map(x => x + x).join('');
|
|
60
|
+
let alphaHex = Math.round(transparency * 255).toString(16).padStart(2, '0');
|
|
61
|
+
return color + alphaHex;
|
|
62
|
+
}
|
|
8
63
|
}
|
|
@@ -44,7 +44,7 @@ export default class RepositoryRest<Body=any,Res=any> extends Repository
|
|
|
44
44
|
// Realiza la llamada a la API con las cabeceras y la URL base de la llamada.
|
|
45
45
|
let call = fetch(this.baseUrl + endpoint + QueryUtils.map(request.query), {
|
|
46
46
|
...request,
|
|
47
|
-
body: method
|
|
47
|
+
body: method !== "GET" ? JSON.stringify(request.body) : undefined,
|
|
48
48
|
headers
|
|
49
49
|
});
|
|
50
50
|
|