phx-node
Version:
PHX NODE
90 lines • 3.8 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.PHXColorHelpers = void 0;
const common_1 = require("@nestjs/common");
let PHXColorHelpers = class PHXColorHelpers {
/**
* Chuẩn hóa mã màu hex về định dạng `#RRGGBB`.
*
* Nếu giá trị đầu vào rỗng, bẩn hoặc sai định dạng, hàm sẽ trả về màu fallback an toàn.
*
* @param {string} value Giá trị màu đầu vào.
* @returns {string} Mã màu hex hợp lệ ở dạng in hoa.
* @memberof PHXColorHelpers
*/
normalizeHexColor(value) {
var _a;
const color = ((_a = value === null || value === void 0 ? void 0 : value.trim) === null || _a === void 0 ? void 0 : _a.call(value)) || "";
if (/^#[0-9a-fA-F]{6}$/.test(color))
return color.toUpperCase();
return "#ECECEC";
}
/**
* Chuyển mã màu hex sang các thành phần màu RGB.
*
* Hàm sẽ tự chuẩn hóa màu đầu vào trước khi tách thành `r`, `g`, `b`.
*
* @param {string} hex Mã màu hex đầu vào.
* @returns {{ r: number; g: number; b: number }} Object chứa 3 thành phần màu RGB.
* @memberof PHXColorHelpers
*/
hexToRgb(hex) {
const normalized = this.normalizeHexColor(hex).replace("#", "");
return {
r: parseInt(normalized.slice(0, 2), 16),
g: parseInt(normalized.slice(2, 4), 16),
b: parseInt(normalized.slice(4, 6), 16),
};
}
/**
* Làm nhạt màu hex đầu vào theo một tỉ lệ xác định.
*
* Giá trị `amount` được giới hạn trong khoảng từ `0` đến `1`:
* - `0`: giữ nguyên màu gốc
* - `1`: tiến hoàn toàn về màu trắng
*
* @param {string} hex Mã màu gốc.
* @param {number} amount Tỉ lệ làm nhạt màu.
* @returns {string} Mã màu hex sau khi làm nhạt.
* @memberof PHXColorHelpers
*/
tintHex(hex, amount) {
const safeAmount = Math.max(0, Math.min(1, amount));
const { r, g, b } = this.hexToRgb(hex);
const tinted = {
r: Math.round(r + (255 - r) * safeAmount),
g: Math.round(g + (255 - g) * safeAmount),
b: Math.round(b + (255 - b) * safeAmount),
};
return this.rgbToHex(tinted.r, tinted.g, tinted.b);
}
/**
* Chuyển các thành phần màu RGB sang mã màu hex.
*
* Hàm này chỉ phục vụ nội bộ cho các phép biến đổi màu.
*
* @private
* @param {number} r Giá trị kênh đỏ.
* @param {number} g Giá trị kênh xanh lá.
* @param {number} b Giá trị kênh xanh dương.
* @returns {string} Mã màu hex tương ứng.
* @memberof PHXColorHelpers
*/
rgbToHex(r, g, b) {
return `#${[r, g, b]
.map((item) => item.toString(16).padStart(2, "0"))
.join("")
.toUpperCase()}`;
}
};
exports.PHXColorHelpers = PHXColorHelpers;
exports.PHXColorHelpers = PHXColorHelpers = __decorate([
(0, common_1.Injectable)()
], PHXColorHelpers);
//# sourceMappingURL=colorHelpers.service.js.map