UNPKG

@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
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