motion
Version:
motion - moving development forward
158 lines (109 loc) • 5.13 kB
JavaScript
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
;