/** * Regular expressions for calculating dimensions */ const unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g; const unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g; function calculateSize(size, ratio, precision) { if (ratio === 1) return size; precision = precision || 100; if (typeof size === "number") return Math.ceil(size * ratio * precision) / precision; if (typeof size !== "string") return size; const oldParts = size.split(unitsSplit); if (oldParts === null || !oldParts.length) return size; const newParts = []; let code = oldParts.shift(); let isNumber = unitsTest.test(code); while (true) { if (isNumber) { const num = parseFloat(code); if (isNaN(num)) newParts.push(code); else newParts.push(Math.ceil(num * ratio * precision) / precision); } else newParts.push(code); code = oldParts.shift(); if (code === void 0) return newParts.join(""); isNumber = !isNumber; } } export { calculateSize };