@wordpress/style-engine
Version:
A suite of parsers and compilers for WordPress styles.
85 lines (78 loc) • 3.06 kB
JavaScript
/**
* Internal dependencies
*/
import { generateRule, generateBoxRules, upperFirst } from '../utils';
const color = {
name: 'color',
generate: function (style, options) {
let path = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ['border', 'color'];
let ruleKey = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'borderColor';
return generateRule(style, options, path, ruleKey);
}
};
const radius = {
name: 'radius',
generate: (style, options) => {
return generateBoxRules(style, options, ['border', 'radius'], {
default: 'borderRadius',
individual: 'border%sRadius'
}, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);
}
};
const borderStyle = {
name: 'style',
generate: function (style, options) {
let path = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ['border', 'style'];
let ruleKey = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'borderStyle';
return generateRule(style, options, path, ruleKey);
}
};
const width = {
name: 'width',
generate: function (style, options) {
let path = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ['border', 'width'];
let ruleKey = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'borderWidth';
return generateRule(style, options, path, ruleKey);
}
};
const borderDefinitionsWithIndividualStyles = [color, borderStyle, width];
/**
* Returns a curried generator function with the individual border property ('top' | 'right' | 'bottom' | 'left') baked in.
*
* @param individualProperty Individual border property ('top' | 'right' | 'bottom' | 'left').
*
* @return StyleDefinition[ 'generate' ]
*/
const createBorderGenerateFunction = individualProperty => (style, options) => {
var _style$border;
const styleValue = style === null || style === void 0 ? void 0 : (_style$border = style.border) === null || _style$border === void 0 ? void 0 : _style$border[individualProperty];
if (!styleValue) {
return [];
}
return borderDefinitionsWithIndividualStyles.reduce((acc, borderDefinition) => {
const key = borderDefinition.name;
if (styleValue.hasOwnProperty(key) && typeof borderDefinition.generate === 'function') {
const ruleKey = `border${upperFirst(individualProperty)}${upperFirst(key)}`;
acc.push(...borderDefinition.generate(style, options, ['border', individualProperty, key], ruleKey));
}
return acc;
}, []);
};
const borderTop = {
name: 'borderTop',
generate: createBorderGenerateFunction('top')
};
const borderRight = {
name: 'borderRight',
generate: createBorderGenerateFunction('right')
};
const borderBottom = {
name: 'borderBottom',
generate: createBorderGenerateFunction('bottom')
};
const borderLeft = {
name: 'borderLeft',
generate: createBorderGenerateFunction('left')
};
export default [...borderDefinitionsWithIndividualStyles, radius, borderTop, borderRight, borderBottom, borderLeft];
//# sourceMappingURL=index.js.map