UNPKG

@quarkly/atomize

Version:

Library for creating atomic react components

38 lines (36 loc) 1.13 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import _isObject from "lodash/fp/isObject"; import _isString from "lodash/fp/isString"; import React from 'react'; import { useTheme } from 'styled-components'; var normalizeMap = { as: function as(value) { return _isString(value) || _isObject(value); } }; export var applynormalizer = function applynormalizer(key, value) { if (!normalizeMap[key]) return value; if (normalizeMap[key](value)) return value; return null; }; export var normalizer = function normalizer(props) { return Object.keys(props).reduce(function (acc, key) { acc[key] = applynormalizer(key, props[key]); return acc; }, {}); }; export default (function (Tag, cb, cleanProps) { return React.forwardRef(function (props, ref) { var theme = useTheme(props); var _cb = cb(_extends({ theme: theme }, props)), cssObject = _cb.cssObject, cleanedProps = _cb.cleanedProps; return React.createElement(Tag, _extends(_extends({ ref: ref }, normalizer(cleanProps ? cleanedProps : props)), {}, { cssObject: cssObject })); }); });