styled-ns
Version:
styled-components with namespaces
69 lines (52 loc) • 2 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('styled-components')) :
typeof define === 'function' && define.amd ? define(['exports', 'styled-components'], factory) :
(global = global || self, factory(global.styledns = {}, global.styled));
}(this, function (exports, styled) { 'use strict';
var styled__default = 'default' in styled ? styled['default'] : styled;
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;
Object.keys(styled).forEach(function (key) { exports[key] = styled[key]; });
exports.default = styledns;
Object.defineProperty(exports, '__esModule', { value: true });
}));