Files
infocom-systems-design/node_modules/@iconify/utils/lib/svg/size.js
2025-10-03 22:27:28 +03:00

28 lines
921 B
JavaScript

/**
* 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 };