UNPKG

styled-ns

Version:

styled-components with namespaces

59 lines (45 loc) 1.5 kB
import styled__default from 'styled-components'; export * from 'styled-components'; var getNamespace = function getNamespace(props) { return props.theme.namespace || ''; }; var isPure = function isPure(args) { return args.length === 1 && args[0] === '' || args.find(function (arg) { return arg === getNamespace; }); }; var tag = function tag(method) { return function () { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } if (isPure(args)) return method.apply(void 0, args); var strings = args[0], restArgs = args.slice(1); return method.apply(void 0, [['', ' & {'].concat(strings, ['}']), getNamespace, ''].concat(restArgs, [''])); }; }; var tagWithConfig = function tagWithConfig(sc) { var tagged = tag(sc); tagged.withConfig = function () { return tag(sc.withConfig.apply(sc, arguments)); }; return tagged; }; var namespacify = function namespacify(sc) { var result = tagWithConfig(sc); result.attrs = function () { return tagWithConfig(sc.attrs.apply(sc, arguments)); }; return result; }; var styledns = function styledns(component) { return namespacify(styled__default(component)); }; Object.keys(styled__default).filter(function (code) { return typeof styled__default[code] === 'function'; }).forEach(function (code) { styledns[code] = namespacify(styled__default[code]); }); styledns.ns = getNamespace; export default styledns;