@yamada-ui/react
Version:
React UI components of the Yamada, by the Yamada, for the Yamada built with React and Emotion
77 lines (75 loc) • 2.69 kB
JavaScript
const require_utils_index = require('../../utils/index.cjs');
const require_utils = require('./utils.cjs');
//#region src/core/css/calc.ts
const OPERATORS = [
"+",
"-",
"*",
"/"
];
function getValue(value, fallbackValue = "") {
return function(token, { system,...rest }) {
if (!value) return fallbackValue;
if (require_utils.isCSSFunction(value)) return generateCalc(token)(value, {
system,
...rest
});
else {
if ((0, require_utils_index.utils_exports.isNumeric)(value)) return value;
const resolvedToken = `${token}.${value}`;
if (require_utils.isCSSToken(system)(resolvedToken)) return system.cssMap[resolvedToken].ref;
else return value;
}
};
}
function isOperator(value) {
return (/* @__PURE__ */ new RegExp(`\\s[${OPERATORS.join("\\")}]\\s`)).test(value);
}
function generateCalc(token) {
return function(value, options) {
if (value == null || require_utils.globalValues.has(value)) return value;
if (!require_utils.isCSSFunction(value)) return value;
let { type, values } = require_utils.getCSSFunction(value);
if (!type || !values) return value;
switch (type) {
case "calc": return `calc(${require_utils.splitValues(values, (char, prev, next) => isOperator(`${prev}${char}${next}`), true).map((value$1) => {
if (value$1 && OPERATORS.includes(value$1)) return value$1;
return getValue(value$1)(token, options);
}).join(" ")})`;
case "min":
case "max": {
let [firstValue, secondValue, ...otherValues] = require_utils.splitValues(values);
firstValue = getValue(firstValue, "100%")(token, options);
secondValue = getValue(secondValue, "100%")(token, options);
otherValues = otherValues.map((value$1) => getValue(value$1)(token, options));
return `${type}(${firstValue}, ${secondValue}` + (otherValues.length ? `, ${otherValues.join(", ")}` : "") + ")";
}
case "clamp": {
let [min, preferred, max] = require_utils.splitValues(values);
if (!max) {
max = preferred;
preferred = "";
}
min = getValue(min)(token, options);
preferred = getValue(preferred, "100%")(token, options);
max = getValue(max)(token, options);
return `clamp(${min}, ${preferred}, ${max})`;
}
case "minmax": {
let [min, max] = require_utils.splitValues(values);
min = getValue(min)(token, options);
max = getValue(max)(token, options);
return `minmax(${min}, ${max})`;
}
case "fit-content": {
let [value$1] = require_utils.splitValues(values);
value$1 = getValue(value$1)(token, options);
return `fit-content(${value$1})`;
}
default: return value;
}
};
}
//#endregion
exports.generateCalc = generateCalc;
//# sourceMappingURL=calc.cjs.map