UNPKG

motion

Version:

motion - moving development forward

157 lines (112 loc) 4.67 kB
exports.__esModule = true; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var _objectToCss = require('object-to-css'); var _objectToCss2 = _interopRequireDefault(_objectToCss); var _utils = require('./utils'); var globalStylesheet = new Map(); exports['default'] = { create: function create(styles) { var stylesheet = arguments.length <= 1 || arguments[1] === undefined ? globalStylesheet : arguments[1]; var options = undefined; if (!(stylesheet instanceof Map)) { // options passed instead options = stylesheet; stylesheet = globalStylesheet; if (options.selector) stylesheet.customTags = true; } if (!(stylesheet instanceof Map)) throw new Error(stylesheet + ' should be a Map'); return Object.keys(styles).reduce(function (acc, key) { var _seperateStyles = _utils.seperateStyles(options, key, styles[key]); var style = _seperateStyles.style; var pseudos = _seperateStyles.pseudos; var mediaQueries = _seperateStyles.mediaQueries; var className = _utils.createClassName(options, key, _utils.sortObject(style)); if (className === undefined) { acc[key] = ''; return acc; } if (!stylesheet.has(className)) stylesheet.set(className, style); if (pseudos.length) { pseudos.map(function (selector) { delete style[selector]; var pseudoClassName = '.' + className + selector; if (stylesheet.has(pseudoClassName)) return false; stylesheet.set(pseudoClassName, styles[key][selector]); }); } if (mediaQueries.length) { mediaQueries.map(function (selector) { var mqSelector = selector; var mqStyles = styles[key][selector]; var mqPseudos = []; var mqStylesheet = undefined; if (Array.isArray(selector)) { var main = selector[0]; var _styles = selector[1]; var rest = selector.slice(2); mqSelector = main; mqPseudos = rest; mqStyles = _styles; } delete style[mqSelector]; if (stylesheet.has(mqSelector)) { mqStylesheet = stylesheet.get(mqSelector); if (mqStylesheet.has(className)) return false; } mqStylesheet = mqStylesheet || stylesheet.set(mqSelector, new Map()).get(mqSelector); mqStylesheet.set(className, mqStyles); if (mqPseudos.length) { mqPseudos.map(function (pseudo) { delete mqStyles[pseudo]; var pseudoClassName = '' + className + pseudo; if (mqStylesheet.has(pseudoClassName)) return false; mqStylesheet.set(pseudoClassName, styles[key][mqSelector][pseudo]); }); } }); } acc[key] = className; return acc; }, {}); }, render: function render() { var options = arguments.length <= 0 || arguments[0] === undefined ? { pretty: false } : arguments[0]; var stylesheet = arguments.length <= 1 || arguments[1] === undefined ? globalStylesheet : arguments[1]; var stylesheetEntries = stylesheet.entries(); var css = ''; var mediaQueries = ''; for (var _iterator = stylesheetEntries, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { var _ref; if (_isArray) { if (_i >= _iterator.length) break; _ref = _iterator[_i++]; } else { _i = _iterator.next(); if (_i.done) break; _ref = _i.value; } var entry = _ref; var className = entry[0]; var styles = entry[1]; var isMap = styles instanceof Map; if (!isMap && _utils.isEmpty(styles)) continue; if (isMap) { var mediaQueryCSS = this.render(options, stylesheet.get(className)); mediaQueries += options.pretty ? className + ' {\n' + mediaQueryCSS + '}\n' : className + '{' + mediaQueryCSS + '}'; continue; } var markup = _objectToCss2['default'](styles); var prefix = stylesheet.customTags ? '' : '.'; css += options.pretty ? '' + prefix + className + ' {\n' + markup.split(';').join(';\n') + '}\n' : '' + prefix + className + '{' + markup + '}'; } return css + mediaQueries; }, clear: function clear() { var stylesheet = arguments.length <= 0 || arguments[0] === undefined ? globalStylesheet : arguments[0]; stylesheet.clear(); return !stylesheet.size; }, Map: Map, __stylesheet: globalStylesheet }; module.exports = exports['default'];