styled-ns
Version:
styled-components with namespaces
59 lines (45 loc) • 1.5 kB
JavaScript
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;