xuxi
Version:
Dynamically utility for combining different types of values into a single value.
2 lines (1 loc) • 1.36 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0}),exports.em=exports.rem=void 0,exports.px=px,exports.createConverter=createConverter,exports.rem=createConverter("rem",{shouldScale:!0}),exports.em=createConverter("em");function px(e){const t=getTransformedScaledValue(e);if(typeof t=="number")return t;if(typeof t=="string"){if(t.includes("calc")||t.includes("var"))return t;const c={px:1,rem:16,em:16},r=Object.keys(c).find(i=>t.includes(i));if(r)return parseFloat(t.replace(r,""))*c[r];const n=Number(t);return isNaN(n)?NaN:n}return NaN}function createConverter(e,{shouldScale:t=!1}={}){function c(r){if(r===0||r==="0")return`0${e}`;if(typeof r=="number"){const n=`${r/16}${e}`;return t?scaleRem(n):n}if(typeof r=="string"){if(r===""||r.startsWith("calc(")||r.startsWith("clamp(")||r.includes("rgba("))return r;if(r.includes(","))return r.split(",").map(i=>c(i)).join(",");if(r.includes(" "))return r.split(" ").map(i=>c(i)).join(" ");if(r.includes(e))return t?scaleRem(r):r;const n=r.replace("px","");if(!Number.isNaN(Number(n))){const i=`${Number(n)/16}${e}`;return t?scaleRem(i):i}}return r}return c}function scaleRem(e){return e==="0rem"?"0rem":e}function getTransformedScaledValue(e){var t;return typeof e!="string"||!/var\(--.*?scale\)/.test(e)?e:(t=e.match(/^calc\((.*?)\)$/))===null||t===void 0?void 0:t[1].split("*")[0].trim()}