UNPKG

theme-services-integration

Version:

Helpers for translate the EveryMundo Theme

102 lines (101 loc) 3.3 kB
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 };