UNPKG

motion

Version:

motion - moving development forward

158 lines (109 loc) 5.13 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); var _objectToCss = require('object-to-css'); var _objectToCss2 = _interopRequireDefault(_objectToCss); var _utils = require('./utils'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _toArray(arr) { return Array.isArray(arr) ? arr : Array.from(arr); } let globalStylesheet = new Map(); exports.default = { create(styles) { let stylesheet = arguments.length <= 1 || arguments[1] === undefined ? globalStylesheet : arguments[1]; let options; 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((acc, key) => { var _seperateStyles = (0, _utils.seperateStyles)(options, key, styles[key]); let style = _seperateStyles.style; let pseudos = _seperateStyles.pseudos; let mediaQueries = _seperateStyles.mediaQueries; const className = (0, _utils.createClassName)(options, key, (0, _utils.sortObject)(style)); if (className === undefined) { acc[key] = ''; return acc; } if (!stylesheet.has(className)) stylesheet.set(className, style); if (pseudos.length) { pseudos.map(selector => { delete style[selector]; const pseudoClassName = `.${ className }${ selector }`; if (stylesheet.has(pseudoClassName)) return false; stylesheet.set(pseudoClassName, styles[key][selector]); }); } if (mediaQueries.length) { mediaQueries.map(selector => { let mqSelector = selector; let mqStyles = styles[key][selector]; let mqPseudos = []; let mqStylesheet; if (Array.isArray(selector)) { var _selector = _toArray(selector); let main = _selector[0]; let styles = _selector[1]; let 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(pseudo => { delete mqStyles[pseudo]; const pseudoClassName = `${ className }${ pseudo }`; if (mqStylesheet.has(pseudoClassName)) return false; mqStylesheet.set(pseudoClassName, styles[key][mqSelector][pseudo]); }); } }); } acc[key] = className; return acc; }, {}); }, render() { let options = arguments.length <= 0 || arguments[0] === undefined ? { pretty: false } : arguments[0]; let stylesheet = arguments.length <= 1 || arguments[1] === undefined ? globalStylesheet : arguments[1]; const stylesheetEntries = stylesheet.entries(); let css = ''; let mediaQueries = ''; for (let entry of stylesheetEntries) { var _entry = _slicedToArray(entry, 2); const className = _entry[0]; const styles = _entry[1]; const isMap = styles instanceof Map; if (!isMap && (0, _utils.isEmpty)(styles)) continue; if (isMap) { const mediaQueryCSS = this.render(options, stylesheet.get(className)); mediaQueries += options.pretty ? `${ className } {\n${ mediaQueryCSS }}\n` : `${ className }{${ mediaQueryCSS }}`; continue; } const markup = (0, _objectToCss2.default)(styles); const prefix = stylesheet.customTags ? '' : '.'; css += options.pretty ? `${ prefix }${ className } {\n${ markup.split(';').join(';\n') }}\n` : `${ prefix }${ className }{${ markup }}`; } return css + mediaQueries; }, clear() { let stylesheet = arguments.length <= 0 || arguments[0] === undefined ? globalStylesheet : arguments[0]; stylesheet.clear(); return !stylesheet.size; }, Map, __stylesheet: globalStylesheet }; //# sourceMappingURL=index.js.map