@chakra-ui/react
Version:
Responsive and accessible React UI components built with React and Emotion
57 lines (53 loc) • 1.4 kB
JavaScript
var is = require('../utils/is.cjs');
var walkObject = require('../utils/walk-object.cjs');
function createSerializeFn(options) {
const { conditions, isValidProperty } = options;
return function serialize(styles) {
return walkObject.walkObject(styles, (value) => value, {
getKey: (prop, value) => {
if (!is.isObject(value)) return prop;
if (!conditions.has(prop) && !isValidProperty(prop)) {
return parseSelectors(prop).map((s) => "&" + s).join(", ");
}
return prop;
}
});
};
}
function parseSelectors(selector) {
const result = [];
let parenCount = 0;
let currentSelector = "";
let inEscape = false;
for (let i = 0; i < selector.length; i++) {
const char = selector[i];
if (char === "\\" && !inEscape) {
inEscape = true;
currentSelector += char;
continue;
}
if (inEscape) {
inEscape = false;
currentSelector += char;
continue;
}
if (char === "(") {
parenCount++;
} else if (char === ")") {
parenCount--;
}
if (char === "," && parenCount === 0) {
result.push(currentSelector.trim());
currentSelector = "";
} else {
currentSelector += char;
}
}
if (currentSelector) {
result.push(currentSelector.trim());
}
return result;
}
exports.createSerializeFn = createSerializeFn;
;
;