@onesy/utils
Version:
30 lines (29 loc) • 1.64 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const is_1 = __importDefault(require("./is"));
const isValid_1 = __importDefault(require("./isValid"));
const castParam_1 = __importDefault(require("./castParam"));
const clamp_1 = __importDefault(require("./clamp"));
const hslToRgb = (value, opacity = undefined, array = false) => {
if ((0, isValid_1.default)('color-hsl', value)) {
let values = value.replace(/hsl|a|\(|%|\s|\)/g, '').split(',');
let [h, s, l, a] = [...values.slice(0, 3).map((item) => +(0, castParam_1.default)(item).toFixed(0)), values[3]];
h = parseInt(h, 10);
s = parseInt(s, 10) / 100;
l = parseInt(l, 10) / 100;
a = opacity !== undefined ? (opacity > 1 ? (opacity / 100).toFixed(2) : (0, clamp_1.default)(opacity, 0, 1)) : parseFloat(a);
const k = (n) => (n + h / 30) % 12;
const u = s * Math.min(l, 1 - l);
const f = (n) => l - u * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1)));
let r = 255 * f(0);
let g = 255 * f(8);
let b = 255 * f(4);
values = [...[r, g, b].map(item => Math.round((0, castParam_1.default)(item))), (0, is_1.default)('number', a) && +a];
[r, g, b, a] = values;
return array ? values.filter((value_) => (0, is_1.default)('number', value_)) : `rgb${(0, is_1.default)('number', a) ? 'a' : ''}(${r}, ${g}, ${b}${(0, is_1.default)('number', a) ? `, ${a}` : ''})`;
}
};
exports.default = hslToRgb;
;