37 lines
1.3 KiB
JavaScript
37 lines
1.3 KiB
JavaScript
import SharedUtils from './sharedUtils';
|
|
|
|
const VARIABLE = {
|
|
PREFIX: '',
|
|
SELECTOR: ':root',
|
|
EXCLUDED_KEY_REGEX: /^(primitive|semantic|variables|colorscheme|light|dark|common|colors|root|states)$/gi
|
|
};
|
|
|
|
export default function (theme, options = {}) {
|
|
const { prefix = VARIABLE.PREFIX, selector = VARIABLE.SELECTOR, excludedKeyRegex = VARIABLE.EXCLUDED_KEY_REGEX } = options;
|
|
|
|
const _toVariables = (_theme, _prefix = '') => {
|
|
return Object.entries(_theme).reduce((acc, [key, value]) => {
|
|
const px = SharedUtils.object.test(excludedKeyRegex, key) ? SharedUtils.object.toNormalizeVariable(_prefix) : SharedUtils.object.toNormalizeVariable(_prefix, SharedUtils.object.toKebabCase(key));
|
|
const v = SharedUtils.object.toValue(value);
|
|
|
|
if (SharedUtils.object.isObject(v)) {
|
|
const variables = _toVariables(v, px);
|
|
|
|
SharedUtils.object.merge(acc, variables);
|
|
} else {
|
|
SharedUtils.object.setProperty(acc, SharedUtils.object.getVariableName(px), SharedUtils.object.getVariableValue(v, px, prefix, [excludedKeyRegex]));
|
|
}
|
|
|
|
return acc;
|
|
}, []);
|
|
};
|
|
|
|
const value = _toVariables(theme, prefix);
|
|
|
|
return {
|
|
value,
|
|
declarations: value.join(''),
|
|
css: SharedUtils.object.getRule(selector, value.join(''))
|
|
};
|
|
}
|