tailwindcss
Version:
A utility-first CSS framework for rapidly building custom user interfaces.
85 lines (84 loc) • 2.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.parseColor = parseColor;
exports.formatColor = formatColor;
var _colorName = _interopRequireDefault(require("color-name"));
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
let HEX = /^#([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})?$/i;
let SHORT_HEX = /^#([a-f\d])([a-f\d])([a-f\d])([a-f\d])?$/i;
let VALUE = `(?:\\d+|\\d*\\.\\d+)%?`;
let SEP = `(?:\\s*,\\s*|\\s+)`;
let ALPHA_SEP = `\\s*[,/]\\s*`;
let RGB_HSL = new RegExp(`^(rgb|hsl)a?\\(\\s*(${VALUE})${SEP}(${VALUE})${SEP}(${VALUE})(?:${ALPHA_SEP}(${VALUE}))?\\s*\\)$`);
function parseColor(value) {
if (typeof value !== 'string') {
return null;
}
value = value.trim();
if (value === 'transparent') {
return {
mode: 'rgb',
color: [
'0',
'0',
'0'
],
alpha: '0'
};
}
if (value in _colorName.default) {
return {
mode: 'rgb',
color: _colorName.default[value].map((v)=>v.toString()
)
};
}
let hex = value.replace(SHORT_HEX, (_, r, g, b, a)=>[
'#',
r,
r,
g,
g,
b,
b,
a ? a + a : ''
].join('')
).match(HEX);
if (hex !== null) {
return {
mode: 'rgb',
color: [
parseInt(hex[1], 16),
parseInt(hex[2], 16),
parseInt(hex[3], 16)
].map((v)=>v.toString()
),
alpha: hex[4] ? (parseInt(hex[4], 16) / 255).toString() : undefined
};
}
let match = value.match(RGB_HSL);
if (match !== null) {
var ref, ref1;
return {
mode: match[1],
color: [
match[2],
match[3],
match[4]
].map((v)=>v.toString()
),
alpha: (ref = match[5]) === null || ref === void 0 ? void 0 : (ref1 = ref.toString) === null || ref1 === void 0 ? void 0 : ref1.call(ref)
};
}
return null;
}
function formatColor({ mode , color , alpha }) {
let hasAlpha = alpha !== undefined;
return `${mode}(${color.join(' ')}${hasAlpha ? ` / ${alpha}` : ''})`;
}