UNPKG

phx-node

Version:

PHX NODE

90 lines 3.8 kB
"use strict"; 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