@yamada-ui/react
Version:
React UI components of the Yamada, by the Yamada, for the Yamada built with React and Emotion
157 lines (155 loc) • 7.05 kB
JavaScript
const require_utils_index = require('../../utils/index.cjs');
const require_var = require('../system/var.cjs');
const require_utils = require('./utils.cjs');
const require_color_mix = require('./color-mix.cjs');
const require_conditions = require('./conditions.cjs');
const require_styles = require('./styles.cjs');
//#region src/core/css/css.ts
function isVariableLength(key) {
return require_styles.variableLengthProperties.includes(key);
}
function isConditionalObject(breakpoints) {
return function(value) {
if (!(0, require_utils_index.utils_exports.isObject)(value)) return false;
const keys = Object.keys(value);
if (!keys.length) return false;
if (!keys.includes("base")) return false;
return keys.every((key) => {
return breakpoints.isResponsiveKey(key) || key.startsWith("@") || key.startsWith("_");
});
};
}
function transformColorModeArray(breakpoints) {
return function(key, [lightValue, darkValue]) {
let computedCSS = {};
if (isConditionalObject(breakpoints)(lightValue)) computedCSS = transformConditionalObject(breakpoints)(key, lightValue);
else computedCSS[key] = lightValue;
if (isConditionalObject(breakpoints)(darkValue)) computedCSS[require_conditions.conditions._dark] = transformConditionalObject(breakpoints)(key, darkValue);
else computedCSS[require_conditions.conditions._dark] = { [key]: darkValue };
return computedCSS;
};
}
function transformConditionalObject(breakpoints) {
return function(key, value) {
const conditionalKeys = Object.keys(value).filter((key$1) => !breakpoints.isResponsiveKey(key$1));
return (0, require_utils_index.utils_exports.merge)(breakpoints.queries.reduce((prev, { breakpoint, query }) => {
const breakpointValue = value[breakpoint];
if (!(0, require_utils_index.utils_exports.isUndefined)(breakpointValue)) if ((0, require_utils_index.utils_exports.isArray)(breakpointValue)) {
const colorModeValue = transformColorModeArray(breakpoints)(key, breakpointValue);
prev = (0, require_utils_index.utils_exports.merge)(prev, query ? { [query]: colorModeValue } : colorModeValue);
} else if (isConditionalObject(breakpoints)(breakpointValue)) {
const conditionalValue = transformConditionalObject(breakpoints)(key, breakpointValue);
prev = (0, require_utils_index.utils_exports.merge)(prev, query ? { [query]: conditionalValue } : conditionalValue);
} else prev = (0, require_utils_index.utils_exports.merge)(prev, query ? { [query]: { [key]: breakpointValue } } : { [key]: breakpointValue });
return prev;
}, {}), conditionalKeys.reduce((prev, conditionalKey) => {
const query = require_conditions.getCondition(conditionalKey);
prev[query] = { [key]: value[conditionalKey] };
return prev;
}, {}));
};
}
function transformConditionalValue({ breakpoints }) {
return function(key, value) {
if ((0, require_utils_index.utils_exports.isArray)(value)) return transformColorModeArray(breakpoints)(key, value);
else if (isConditionalObject(breakpoints)(value)) return transformConditionalObject(breakpoints)(key, value);
else return { [key]: value };
};
}
function expandCSS(system) {
return function(css$1) {
let computedCSS = {};
for (let [key, value] of Object.entries(css$1)) {
if (value == null) continue;
if (!isVariableLength(key)) computedCSS = (0, require_utils_index.utils_exports.merge)(computedCSS, transformConditionalValue(system)(key, value));
else computedCSS = (0, require_utils_index.utils_exports.merge)(computedCSS, { [key]: value });
}
return computedCSS;
};
}
function valueToVar(system) {
return function(prop, value) {
const result = require_var.transformInterpolation(value, function(value$1, fallbackValue) {
if (value$1.includes("colorScheme.")) return require_var.getColorSchemeVar(system)(value$1);
else if (value$1.includes("colors.")) return require_color_mix.colorMix(value$1, {
fallback: fallbackValue,
system
});
else if (require_utils.isCSSToken(system)(value$1)) return system.cssMap[value$1].ref;
else if (fallbackValue) {
fallbackValue = require_utils.isCSSToken(system)(fallbackValue) ? system.cssMap[fallbackValue].ref : fallbackValue;
return require_var.getVar(value$1, fallbackValue);
} else return require_var.getVar(value$1);
});
if (prop.startsWith("--") && (0, require_utils_index.utils_exports.isString)(result)) if (result.includes("colorScheme.")) return require_var.getColorSchemeVar(system)(result);
else if (result.includes("colors.")) return require_color_mix.colorMix(result, { system });
else if (require_utils.isCSSToken(system)(result)) return system.cssMap[result].ref;
else return result;
else return result;
};
}
function mergeCSS(prev, value, prop, properties) {
if (properties) for (const property of properties) {
prev[property] = prev[property] ?? {};
prev[property] = (0, require_utils_index.utils_exports.merge)(prev[property], value);
}
else {
prev[prop] = prev[prop] ?? {};
prev[prop] = (0, require_utils_index.utils_exports.merge)(prev[prop], value);
}
return prev;
}
function insertCSS(prev, value, prop, properties) {
if (properties) for (const property of properties) prev[property] = value;
else prev[prop] = value;
return prev;
}
function getStyle(prop) {
const style = require_styles.styles[prop];
return style === true ? { properties: [prop] } : style;
}
function css(system, theme = {}) {
return function(cssOrFn) {
function createCSS(cssOrFn$1) {
const cssObj = (0, require_utils_index.utils_exports.runIfFn)(cssOrFn$1, system);
const computedCSS = expandCSS(system)(cssObj);
let prev = {};
for (let [prop, value] of Object.entries(computedCSS)) {
value = valueToVar(system)(prop, value);
if (value == null) continue;
prop = require_conditions.getCondition(prop);
const style = getStyle(prop);
const options = {
css,
prev,
properties: style?.properties,
system,
theme
};
if ((0, require_utils_index.utils_exports.isObject)(value)) {
value = style?.transform?.(value, options) ?? value;
if ((0, require_utils_index.utils_exports.isObject)(value)) prev = mergeCSS(prev, createCSS(value), prop, style?.properties);
else prev = insertCSS(prev, value, prop, style?.properties);
continue;
}
const important = require_utils.isImportant(value);
value = require_utils.omitImportant(value);
value = style?.transform?.(value, options) ?? value;
if (important) value = require_utils.insertImportant(value, style);
if (style?.static) prev = (0, require_utils_index.utils_exports.merge)(prev, style.static);
if ((0, require_utils_index.utils_exports.isObject)(value)) {
prev = (0, require_utils_index.utils_exports.merge)(prev, createCSS(value));
continue;
}
prev = insertCSS(prev, value, prop, style?.properties);
}
return prev;
}
return createCSS(cssOrFn);
};
}
//#endregion
exports.css = css;
exports.getStyle = getStyle;
exports.transformConditionalValue = transformConditionalValue;
//# sourceMappingURL=css.cjs.map