UNPKG

@mujo/box

Version:

A React utility to add a style guide to primative components

65 lines (59 loc) 1.58 kB
import { css } from '@emotion/react'; import keys from 'object-keys'; export var cssToStyle = function cssToStyle(cssProp) { return cssProp ? css(cssProp) : css({}); }; export function mapToPair(props) { return function (key) { return [key, props[key]]; }; } export var mapToStyleGuideValue = function mapToStyleGuideValue(_ref) { var _ref$used = _ref.used, used = _ref$used === void 0 ? [] : _ref$used, key = _ref.key, value = _ref.value; return function (val, curr) { if (val) return val; if (curr[key]) { used.push(key); if ((typeof value === 'string' || typeof value === 'number') && curr[key][value]) { return cssToStyle(curr[key][value]); } } return val; }; }; var cssDataPattern = /^data-css/; export function propsToStyles(stylesObjs) { return function (props) { var used = []; var styles = keys(props).map(mapToPair(props)).map(function (pair) { if (cssDataPattern.test(pair[0])) { used.push(pair[0]); return pair[0].replace(cssDataPattern, 'css'); } return [stylesObjs].reduce(mapToStyleGuideValue({ used: used, key: pair[0], value: pair[1] }), null); }).filter(function (val) { return typeof val !== 'string'; }); return { used: used, styles: styles }; }; } export var makeStyles = function makeStyles(property, props) { var ret = {}; var key; for (key in props) { var cssObject = {}; cssObject[property] = props[key]; ret[key] = cssObject; } return ret; };