@taiga-ui/cdk
Version:
Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance
29 lines • 5.14 kB
JavaScript
const getChunksFromString = (hex, chunkSize) => hex.match(new RegExp(`.{${chunkSize}}`, 'g'));
const convertHexUnitTo256 = (hexStr) => parseInt(hexStr.repeat(2 / hexStr.length), 16);
const getAlphaFloat = (a, alpha) => {
if (a !== undefined) {
return Number((a / 255).toFixed(2));
}
if (typeof alpha !== 'number' || alpha < 0 || alpha > 1) {
return 1;
}
return alpha;
};
export function tuiHexToRGBA(hex, alpha) {
const [r, g, b, a] = tuiParseHex(hex, alpha);
return a < 1 ? `rgba(${r}, ${g}, ${b}, ${a})` : `rgb(${r}, ${g}, ${b})`;
}
export function tuiIsValidHex(hex) {
return /^#([A-Fa-f0-9]{3,4}){1,2}$/.test(hex);
}
export function tuiParseHex(hex, alpha) {
if (!tuiIsValidHex(hex)) {
throw new Error('Invalid HEX');
}
const chunkSize = Math.floor((hex.length - 1) / 3);
const hexArr = getChunksFromString(hex.slice(1), chunkSize);
const [r = NaN, g = NaN, b = NaN, a] = hexArr?.map(convertHexUnitTo256) ?? [];
const floatAlpha = getAlphaFloat(a, alpha);
return [r, g, b, floatAlpha];
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGV4LXRvLXJnYmEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvdXRpbHMvY29sb3IvaGV4LXRvLXJnYmEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLEdBQVcsRUFBRSxTQUFpQixFQUEyQixFQUFFLENBQ3BGLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBRWxELE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxNQUFjLEVBQVUsRUFBRSxDQUNuRCxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBRW5ELE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBVSxFQUFFLEtBQWMsRUFBVSxFQUFFO0lBQ3pELElBQUksQ0FBQyxLQUFLLFNBQVMsRUFBRTtRQUNqQixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN2QztJQUVELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtRQUNyRCxPQUFPLENBQUMsQ0FBQztLQUNaO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxVQUFVLFlBQVksQ0FBQyxHQUFXLEVBQUUsS0FBYztJQUNwRCxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUU3QyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztBQUM1RSxDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFXO0lBQ3JDLE9BQU8sNEJBQTRCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUN2QixHQUFXLEVBQ1gsS0FBYztJQUVkLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztLQUNsQztJQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25ELE1BQU0sTUFBTSxHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDNUQsTUFBTSxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLE1BQU0sRUFBRSxHQUFHLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUUsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUUzQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDakMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGdldENodW5rc0Zyb21TdHJpbmcgPSAoaGV4OiBzdHJpbmcsIGNodW5rU2l6ZTogbnVtYmVyKTogUmVnRXhwTWF0Y2hBcnJheSB8IG51bGwgPT5cbiAgICBoZXgubWF0Y2gobmV3IFJlZ0V4cChgLnske2NodW5rU2l6ZX19YCwgJ2cnKSk7XG5cbmNvbnN0IGNvbnZlcnRIZXhVbml0VG8yNTYgPSAoaGV4U3RyOiBzdHJpbmcpOiBudW1iZXIgPT5cbiAgICBwYXJzZUludChoZXhTdHIucmVwZWF0KDIgLyBoZXhTdHIubGVuZ3RoKSwgMTYpO1xuXG5jb25zdCBnZXRBbHBoYUZsb2F0ID0gKGE/OiBudW1iZXIsIGFscGhhPzogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgICBpZiAoYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBOdW1iZXIoKGEgLyAyNTUpLnRvRml4ZWQoMikpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgYWxwaGEgIT09ICdudW1iZXInIHx8IGFscGhhIDwgMCB8fCBhbHBoYSA+IDEpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFscGhhO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHR1aUhleFRvUkdCQShoZXg6IHN0cmluZywgYWxwaGE/OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IFtyLCBnLCBiLCBhXSA9IHR1aVBhcnNlSGV4KGhleCwgYWxwaGEpO1xuXG4gICAgcmV0dXJuIGEgPCAxID8gYHJnYmEoJHtyfSwgJHtnfSwgJHtifSwgJHthfSlgIDogYHJnYigke3J9LCAke2d9LCAke2J9KWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0dWlJc1ZhbGlkSGV4KGhleDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9eIyhbQS1GYS1mMC05XXszLDR9KXsxLDJ9JC8udGVzdChoZXgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHVpUGFyc2VIZXgoXG4gICAgaGV4OiBzdHJpbmcsXG4gICAgYWxwaGE/OiBudW1iZXIsXG4pOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gICAgaWYgKCF0dWlJc1ZhbGlkSGV4KGhleCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEhFWCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGNodW5rU2l6ZSA9IE1hdGguZmxvb3IoKGhleC5sZW5ndGggLSAxKSAvIDMpO1xuICAgIGNvbnN0IGhleEFyciA9IGdldENodW5rc0Zyb21TdHJpbmcoaGV4LnNsaWNlKDEpLCBjaHVua1NpemUpO1xuICAgIGNvbnN0IFtyID0gTmFOLCBnID0gTmFOLCBiID0gTmFOLCBhXSA9IGhleEFycj8ubWFwKGNvbnZlcnRIZXhVbml0VG8yNTYpID8/IFtdO1xuICAgIGNvbnN0IGZsb2F0QWxwaGEgPSBnZXRBbHBoYUZsb2F0KGEsIGFscGhhKTtcblxuICAgIHJldHVybiBbciwgZywgYiwgZmxvYXRBbHBoYV07XG59XG4iXX0=