theme-services-integration
Version:
Helpers for translate the EveryMundo Theme
102 lines (101 loc) • 3.3 kB
JavaScript
const camelToKebab = (str) => {
return str.replace(/[A-Z]/g, (match) => `-${match.toLowerCase()}`);
};
const generateEDSTokenLinear = (obj, reduceCamelCase = true) => {
const resultObj = {};
for (let key in obj) {
if (typeof obj[key] === 'object' && obj[key] !== null) {
const nestedObj = generateEDSTokenLinear(obj[key], reduceCamelCase);
for (let nestedKey in nestedObj) {
const newKey = key + '_' + nestedKey;
resultObj[newKey] = nestedObj[nestedKey];
}
}
else {
if (key.indexOf('_') !== -1) {
let currentObj = resultObj;
const keyParts = key.split('_');
for (let i = 0; i < keyParts.length; i++) {
const currentKey = keyParts[i];
if (currentKey === '') {
continue;
}
if (i === keyParts.length - 1) {
currentObj[currentKey] = obj[key];
}
else {
if (!currentObj[currentKey]) {
currentObj[currentKey] = {};
}
currentObj = currentObj[currentKey];
}
}
}
else {
if (!resultObj.default) {
resultObj.default = {};
}
if (reduceCamelCase) {
resultObj.default[camelToKebab(key)] = obj[key];
}
else {
resultObj.default[key] = obj[key];
}
}
}
}
return resultObj;
};
const getUtilitiesToken = (utilitiesToken) => {
const response = {};
Object.keys(utilitiesToken).forEach((key) => {
switch (key) {
case 'boxShadow_1':
case 'boxShadow1':
case 'boxShadow_2':
case 'boxShadow2': {
response[key] = {
'box-shadow': utilitiesToken[key]
};
break;
}
case 'borderRadius': {
response[key] = {
'border-radius': utilitiesToken[key]
};
break;
}
case 'layout':
break;
default:
response[key] = {
background: utilitiesToken[key]
};
break;
}
});
return response;
};
const hexToRGBA = (hex, alpha = 0.5) => {
let c;
if (/^#([A-Fa-f0-9]{3}){1,2}$/.test(hex)) {
c = hex.substring(1).split('');
if (c.length === 3) {
c = [c[0], c[0], c[1], c[1], c[2], c[2]];
}
c = `0x${c.join('')}`;
return `rgba(${(Number(c) >> 16) & 255},${(Number(c) >> 8) & 255},${Number(c) & 255},${alpha})`;
}
else {
console.error('Bad Hex:', hex, 'Alpha: ', alpha);
return false;
}
};
const getFontCss = (themeRaw) => {
let css = '';
Object.keys(themeRaw.fonts).forEach((key) => {
css += themeRaw.fonts[key]?.css;
});
return css;
};
export { getUtilitiesToken, generateEDSTokenLinear, getFontCss, hexToRGBA };