styled-ns
Version:
styled-components with namespaces
66 lines (49 loc) • 1.78 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var styled = require('styled-components');
var styled__default = _interopDefault(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;