UNPKG

jss-vendor-prefixer

Version:

JSS plugin that handles vendor prefixes in the browser

1,793 lines (1,375 loc) 117 kB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define([], factory); else if(typeof exports === 'object') exports["jssVendorPrefixer"] = factory(); else root["jssVendorPrefixer"] = factory(); })(this, function() { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) /******/ return installedModules[moduleId].exports; /******/ /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ exports: {}, /******/ id: moduleId, /******/ loaded: false /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.loaded = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(0); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports['default'] = jssVendorPrefixer; var _cssVendor = __webpack_require__(1); var vendor = _interopRequireWildcard(_cssVendor); var _jss = __webpack_require__(24); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } /** * Add vendor prefix to a property name when needed. * * @param {Rule} rule * @api public */ function jssVendorPrefixer() { function onProcessRule(rule) { if (rule.type === 'keyframes') { rule.key = vendor.supportedKeyframes(rule.key); } } function onProcessStyle(style, rule) { if (rule.type !== 'style') return style; for (var prop in style) { var value = style[prop]; var changeProp = false; var supportedProp = vendor.supportedProperty(prop); if (supportedProp && supportedProp !== prop) changeProp = true; var changeValue = false; var supportedValue = vendor.supportedValue(supportedProp, (0, _jss.toCssValue)(value)); if (supportedValue && supportedValue !== value) changeValue = true; if (changeProp || changeValue) { if (changeProp) delete style[prop]; style[supportedProp || prop] = supportedValue || value; } } return style; } function onChangeValue(value, prop) { return vendor.supportedValue(prop, (0, _jss.toCssValue)(value)) || value; } return { onProcessRule: onProcessRule, onProcessStyle: onProcessStyle, onChangeValue: onChangeValue }; } /***/ }), /* 1 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.supportedValue = exports.supportedProperty = exports.supportedKeyframes = exports.prefix = undefined; var _prefix = __webpack_require__(2); var _prefix2 = _interopRequireDefault(_prefix); var _supportedKeyframes = __webpack_require__(4); var _supportedKeyframes2 = _interopRequireDefault(_supportedKeyframes); var _supportedProperty = __webpack_require__(5); var _supportedProperty2 = _interopRequireDefault(_supportedProperty); var _supportedValue = __webpack_require__(23); var _supportedValue2 = _interopRequireDefault(_supportedValue); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } /** * CSS Vendor prefix detection and property feature testing. * * @copyright Oleg Slobodskoi 2015 * @website https://github.com/jsstyles/css-vendor * @license MIT */ exports['default'] = { prefix: _prefix2['default'], supportedKeyframes: _supportedKeyframes2['default'], supportedProperty: _supportedProperty2['default'], supportedValue: _supportedValue2['default'] }; exports.prefix = _prefix2['default']; exports.supportedKeyframes = _supportedKeyframes2['default']; exports.supportedProperty = _supportedProperty2['default']; exports.supportedValue = _supportedValue2['default']; /***/ }), /* 2 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _isInBrowser = __webpack_require__(3); var _isInBrowser2 = _interopRequireDefault(_isInBrowser); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var js = ''; // Export javascript style and css style vendor prefixes. // Based on "transform" support test. var css = ''; // We should not do anything if required serverside. if (_isInBrowser2['default']) { // Order matters. We need to check Webkit the last one because // other vendors use to add Webkit prefixes to some properties var jsCssMap = { Moz: '-moz-', ms: '-ms-', O: '-o-', Webkit: '-webkit-' }; var _document$createEleme = document.createElement('p'), style = _document$createEleme.style; var testProp = 'Transform'; for (var key in jsCssMap) { if (key + testProp in style) { js = key; css = jsCssMap[key]; break; } } // Correctly detect the Edge browser. if (js === 'Webkit' && 'msHyphens' in style) { js = 'ms'; css = jsCssMap.ms; } } /** * Vendor prefix string for the current browser. * * @type {{js: String, css: String}} * @api public */ exports['default'] = { js: js, css: css }; /***/ }), /* 3 */ /***/ (function(module, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var isBrowser = exports.isBrowser = (typeof window === "undefined" ? "undefined" : _typeof(window)) === "object" && (typeof document === "undefined" ? "undefined" : _typeof(document)) === 'object' && document.nodeType === 9; exports.default = isBrowser; /***/ }), /* 4 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports['default'] = supportedKeyframes; var _prefix = __webpack_require__(2); var _prefix2 = _interopRequireDefault(_prefix); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } /** * Test if a keyframe at-rule should be prefixed or not * * @param {String} vendor prefix string for the current browser. * @return {String} * @api public */ function supportedKeyframes(key) { // Keyframes is already prefixed. e.g. key = '@-webkit-keyframes a' if (key[1] === '-') return key; // No need to prefix IE/Edge. Older browsers will ignore unsupported rules. // https://caniuse.com/#search=keyframes if (_prefix2['default'].js === 'ms') return key; return '@' + _prefix2['default'].css + 'keyframes' + key.substr(10); } /***/ }), /* 5 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports['default'] = supportedProperty; var _isInBrowser = __webpack_require__(3); var _isInBrowser2 = _interopRequireDefault(_isInBrowser); var _plugins = __webpack_require__(6); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var el = void 0; var cache = {}; if (_isInBrowser2['default']) { el = document.createElement('p'); // We test every property on vendor prefix requirement. // Once tested, result is cached. It gives us up to 70% perf boost. // http://jsperf.com/element-style-object-access-vs-plain-object // // Prefill cache with known css properties to reduce amount of // properties we need to feature test at runtime. // http://davidwalsh.name/vendor-prefix var computed = window.getComputedStyle(document.documentElement, ''); for (var key in computed) { // eslint-disable-next-line no-restricted-globals if (!isNaN(key)) cache[computed[key]] = computed[key]; } // Properties that cannot be correctly detected using the // cache prefill method. _plugins.noPrefill.forEach(function (x) { return delete cache[x]; }); } /** * Test if a property is supported, returns supported property with vendor * prefix if required. Returns `false` if not supported. * * @param {String} prop dash separated * @param {Object} [options] * @return {String|Boolean} * @api public */ function supportedProperty(prop) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; // For server-side rendering. if (!el) return prop; // Remove cache for benchmark tests or return property from the cache. if (("development") !== 'benchmark' && cache[prop] != null) { return cache[prop]; } // Check if 'transition' or 'transform' natively supported in browser. if (prop === 'transition' || prop === 'transform') { options[prop] = prop in el.style; } // Find a plugin for current prefix property. for (var i = 0; i < _plugins.propertyDetectors.length; i++) { cache[prop] = _plugins.propertyDetectors[i](prop, el.style, options); // Break loop, if value found. if (cache[prop]) break; } // Reset styles for current property. // Firefox can even throw an error for invalid properties, e.g., "0". try { el.style[prop] = ''; } catch (err) { return false; } return cache[prop]; } /***/ }), /* 6 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.noPrefill = exports.propertyDetectors = undefined; var _appearence = __webpack_require__(7); var _appearence2 = _interopRequireDefault(_appearence); var _breakPropsOld = __webpack_require__(8); var _breakPropsOld2 = _interopRequireDefault(_breakPropsOld); var _colorAdjust = __webpack_require__(11); var _colorAdjust2 = _interopRequireDefault(_colorAdjust); var _flex = __webpack_require__(12); var _flex2 = _interopRequireDefault(_flex); var _flex3 = __webpack_require__(13); var _flex4 = _interopRequireDefault(_flex3); var _inlineLogicalOld = __webpack_require__(14); var _inlineLogicalOld2 = _interopRequireDefault(_inlineLogicalOld); var _mask = __webpack_require__(15); var _mask2 = _interopRequireDefault(_mask); var _prefixed = __webpack_require__(16); var _prefixed2 = _interopRequireDefault(_prefixed); var _scrollSnap = __webpack_require__(17); var _scrollSnap2 = _interopRequireDefault(_scrollSnap); var _overscrollBehavior = __webpack_require__(18); var _overscrollBehavior2 = _interopRequireDefault(_overscrollBehavior); var _transform = __webpack_require__(19); var _transform2 = _interopRequireDefault(_transform); var _transition = __webpack_require__(20); var _transition2 = _interopRequireDefault(_transition); var _unprefixed = __webpack_require__(21); var _unprefixed2 = _interopRequireDefault(_unprefixed); var _writingMode = __webpack_require__(22); var _writingMode2 = _interopRequireDefault(_writingMode); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } // Please, keep order plugins: // plugins = [ // ...plugins, // breakPropsOld, // inlineLogicalOld, // unprefixed, // prefixed, // scrollSnap, // scrollChaining, // flex2012, // flex2009 // ] // Plugins without 'noPrefill' value, going last. // 'flex-*' plugins should be at the bottom. // 'flex2009' going after 'flex2012'. // 'prefixed' going after 'unprefixed' var plugins = [_appearence2['default'], _transform2['default'], _transition2['default'], _mask2['default'], _writingMode2['default'], _colorAdjust2['default'], _breakPropsOld2['default'], _inlineLogicalOld2['default'], _unprefixed2['default'], _prefixed2['default'], _scrollSnap2['default'], _overscrollBehavior2['default'], _flex4['default'], _flex2['default']]; var propertyDetectors = exports.propertyDetectors = plugins.filter(function (p) { return p.supportedProperty; }).map(function (p) { return p.supportedProperty; }); var noPrefill = exports.noPrefill = plugins.filter(function (p) { return p.noPrefill; }).reduce(function (a, p) { a.push.apply(a, _toConsumableArray(p.noPrefill)); return a; }, []); /***/ }), /* 7 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _prefix = __webpack_require__(2); var _prefix2 = _interopRequireDefault(_prefix); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } // Support old appearance props syntax. // https://caniuse.com/#search=appearance exports['default'] = { noPrefill: ['appearance'], supportedProperty: function supportedProperty(prop) { if (prop !== 'appearance') return false; if (_prefix2['default'].js === 'ms') return '-webkit-' + prop; return _prefix2['default'].css + prop; } }; /***/ }), /* 8 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _prefix = __webpack_require__(2); var _prefix2 = _interopRequireDefault(_prefix); var _pascalize = __webpack_require__(9); var _pascalize2 = _interopRequireDefault(_pascalize); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } // Support old break-* props syntax. // https://caniuse.com/#search=multicolumn // https://github.com/postcss/autoprefixer/issues/491 // https://github.com/postcss/autoprefixer/issues/177 exports['default'] = { supportedProperty: function supportedProperty(prop, style) { if (!/^break-/.test(prop)) return false; if (_prefix2['default'].js === 'Webkit') { var jsProp = 'WebkitColumn' + (0, _pascalize2['default'])(prop); return jsProp in style ? _prefix2['default'].css + 'column-' + prop : false; } if (_prefix2['default'].js === 'Moz') { var _jsProp = 'page' + (0, _pascalize2['default'])(prop); return _jsProp in style ? 'page-' + prop : false; } return false; } }; /***/ }), /* 9 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports['default'] = pascalize; var _camelize = __webpack_require__(10); var _camelize2 = _interopRequireDefault(_camelize); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } /** * Convert dash separated strings to pascal cased. * * @param {String} str * @return {String} * @api private */ function pascalize(str) { return (0, _camelize2['default'])('-' + str); } /***/ }), /* 10 */ /***/ (function(module, exports) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports['default'] = camelize; var regExp = /[-\s]+(.)?/g; /** * Replaces the letter with the capital letter * * @param {String} match * @param {String} c * @return {String} * @api private */ function toUpper(match, c) { return c ? c.toUpperCase() : ''; } /** * Convert dash separated strings to camel-cased. * * @param {String} str * @return {String} * @api private */ function camelize(str) { return str.replace(regExp, toUpper); } /***/ }), /* 11 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _prefix = __webpack_require__(2); var _prefix2 = _interopRequireDefault(_prefix); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } // Support old color-adjust prop syntax. // https://caniuse.com/#search=color-adjust exports['default'] = { noPrefill: ['color-adjust'], supportedProperty: function supportedProperty(prop) { if (prop !== 'color-adjust') return false; if (_prefix2['default'].js === 'Webkit') return _prefix2['default'].css + 'print-' + prop; return prop; } }; /***/ }), /* 12 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _prefix = __webpack_require__(2); var _prefix2 = _interopRequireDefault(_prefix); var _pascalize = __webpack_require__(9); var _pascalize2 = _interopRequireDefault(_pascalize); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var propMap = { flex: 'box-flex', 'flex-grow': 'box-flex', 'flex-direction': ['box-orient', 'box-direction'], order: 'box-ordinal-group', 'align-items': 'box-align', 'flex-flow': ['box-orient', 'box-direction'], 'justify-content': 'box-pack' }; var propKeys = Object.keys(propMap); var prefixCss = function prefixCss(p) { return _prefix2['default'].css + p; }; // Support old flex spec from 2009. exports['default'] = { supportedProperty: function supportedProperty(prop, style, _ref) { var multiple = _ref.multiple; if (propKeys.indexOf(prop) > -1) { var newProp = propMap[prop]; if (!Array.isArray(newProp)) { return _prefix2['default'].js + (0, _pascalize2['default'])(newProp) in style ? _prefix2['default'].css + newProp : false; } if (!multiple) return false; for (var i = 0; i < newProp.length; i++) { if (!(_prefix2['default'].js + (0, _pascalize2['default'])(newProp[0]) in style)) { return false; } } return newProp.map(prefixCss); } return false; } }; /***/ }), /* 13 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _prefix = __webpack_require__(2); var _prefix2 = _interopRequireDefault(_prefix); var _pascalize = __webpack_require__(9); var _pascalize2 = _interopRequireDefault(_pascalize); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var propMap = { 'flex-grow': 'flex-positive', 'flex-shrink': 'flex-negative', 'flex-basis': 'flex-preferred-size', 'justify-content': 'flex-pack', order: 'flex-order', 'align-items': 'flex-align', 'align-content': 'flex-line-pack' // 'align-self' is handled by 'align-self' plugin. // Support old flex spec from 2012. };exports['default'] = { supportedProperty: function supportedProperty(prop, style) { var newProp = propMap[prop]; if (!newProp) return false; return _prefix2['default'].js + (0, _pascalize2['default'])(newProp) in style ? _prefix2['default'].css + newProp : false; } }; /***/ }), /* 14 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _prefix = __webpack_require__(2); var _prefix2 = _interopRequireDefault(_prefix); var _pascalize = __webpack_require__(9); var _pascalize2 = _interopRequireDefault(_pascalize); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } // Support old inline-logical syntax. // See https://github.com/postcss/autoprefixer/issues/324. exports['default'] = { supportedProperty: function supportedProperty(prop, style) { if (!/^(border|margin|padding)-inline/.test(prop)) return false; if (_prefix2['default'].js === 'Moz') return prop; var newProp = prop.replace('-inline', ''); return _prefix2['default'].js + (0, _pascalize2['default'])(newProp) in style ? _prefix2['default'].css + newProp : false; } }; /***/ }), /* 15 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _prefix = __webpack_require__(2); var _prefix2 = _interopRequireDefault(_prefix); var _pascalize = __webpack_require__(9); var _pascalize2 = _interopRequireDefault(_pascalize); var _camelize = __webpack_require__(10); var _camelize2 = _interopRequireDefault(_camelize); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } // Mask property support cannot detect directly in WebKit browsers, // but we can use a longhand property instead. // https://caniuse.com/#search=mask exports['default'] = { noPrefill: ['mask'], supportedProperty: function supportedProperty(prop, style) { if (!/^mask/.test(prop)) return false; if (_prefix2['default'].js === 'Webkit') { var longhand = 'mask-image'; if ((0, _camelize2['default'])(longhand) in style) { return prop; } if (_prefix2['default'].js + (0, _pascalize2['default'])(longhand) in style) { return _prefix2['default'].css + prop; } } return prop; } }; /***/ }), /* 16 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _prefix = __webpack_require__(2); var _prefix2 = _interopRequireDefault(_prefix); var _pascalize = __webpack_require__(9); var _pascalize2 = _interopRequireDefault(_pascalize); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } // Test if property is supported with vendor prefix. exports['default'] = { supportedProperty: function supportedProperty(prop, style) { var pascalized = (0, _pascalize2['default'])(prop); if (_prefix2['default'].js + pascalized in style) return _prefix2['default'].css + prop; // Try webkit fallback. if (_prefix2['default'].js !== 'Webkit' && 'Webkit' + pascalized in style) return prop; return false; } }; /***/ }), /* 17 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _prefix = __webpack_require__(2); var _prefix2 = _interopRequireDefault(_prefix); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } // Support scroll-snap props syntax. // https://caniuse.com/#search=scroll-snap exports['default'] = { supportedProperty: function supportedProperty(prop) { if (prop.substring(0, 11) !== 'scroll-snap') return false; if (_prefix2['default'].js === 'ms') { return '' + _prefix2['default'].css + prop; } return prop; } }; /***/ }), /* 18 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _prefix = __webpack_require__(2); var _prefix2 = _interopRequireDefault(_prefix); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } // Support overscroll-behavior props syntax. // https://caniuse.com/#search=overscroll-behavior exports['default'] = { supportedProperty: function supportedProperty(prop) { if (prop !== 'overscroll-behavior') return false; if (_prefix2['default'].js === 'ms') { return _prefix2['default'].css + 'scroll-chaining'; } return prop; } }; /***/ }), /* 19 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _prefix = __webpack_require__(2); var _prefix2 = _interopRequireDefault(_prefix); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } // Support transform prop syntax. // https://caniuse.com/#search=transform exports['default'] = { noPrefill: ['transform'], supportedProperty: function supportedProperty(prop, style, options) { if (prop !== 'transform') return false; if (options.transform) { return prop; } return _prefix2['default'].css + prop; } }; /***/ }), /* 20 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _prefix = __webpack_require__(2); var _prefix2 = _interopRequireDefault(_prefix); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } // Support transition prop syntax. // https://caniuse.com/#search=transition exports['default'] = { noPrefill: ['transition'], supportedProperty: function supportedProperty(prop, style, options) { if (prop !== 'transition') return false; if (options.transition) { return prop; } return _prefix2['default'].css + prop; } }; /***/ }), /* 21 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _camelize = __webpack_require__(10); var _camelize2 = _interopRequireDefault(_camelize); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } // Test if a property supported as it is. // Camelization is required because we can't test using. // CSS syntax for e.g. in FF. exports['default'] = { supportedProperty: function supportedProperty(prop, style) { return (0, _camelize2['default'])(prop) in style ? prop : false; } }; /***/ }), /* 22 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _prefix = __webpack_require__(2); var _prefix2 = _interopRequireDefault(_prefix); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } // Support writing-mode prop syntax. // https://caniuse.com/#search=writing-mode exports['default'] = { noPrefill: ['writing-mode'], supportedProperty: function supportedProperty(prop) { if (prop !== 'writing-mode') return false; if (_prefix2['default'].js === 'Webkit' || _prefix2['default'].js === 'ms') { return _prefix2['default'].css + prop; } return prop; } }; /***/ }), /* 23 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports['default'] = supportedValue; var _isInBrowser = __webpack_require__(3); var _isInBrowser2 = _interopRequireDefault(_isInBrowser); var _prefix = __webpack_require__(2); var _prefix2 = _interopRequireDefault(_prefix); var _supportedProperty = __webpack_require__(5); var _supportedProperty2 = _interopRequireDefault(_supportedProperty); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var cache = {}; var transitionProperties = { transition: 1, 'transition-property': 1, '-webkit-transition': 1, '-webkit-transition-property': 1 }; var transPropsRegExp = /(^\s*[\w-]+)|, (\s*[\w-]+)(?![^()]*\))/g; var el = void 0; /** * Returns prefixed value transition/transform if needed. * * @param {String} match * @param {String} p1 * @param {String} p2 * @return {String} * @api private */ function prefixTransitionCallback(match, p1, p2) { if (p1 === 'all') return 'all'; if (p2 === 'all') return ', all'; return p1 ? (0, _supportedProperty2['default'])(p1) : ', ' + (0, _supportedProperty2['default'])(p2); } if (_isInBrowser2['default']) el = document.createElement('p'); /** * Returns prefixed value if needed. Returns `false` if value is not supported. * * @param {String} property * @param {String} value * @return {String|Boolean} * @api public */ function supportedValue(property, value) { // For server-side rendering. if (!el) return value; // It is a string or a number as a string like '1'. // We want only prefixable values here. // eslint-disable-next-line no-restricted-globals if (typeof value !== 'string' || !isNaN(parseInt(value, 10))) { return value; } // Create cache key for current value. var cacheKey = property + value; // Remove cache for benchmark tests or return value from cache. if (("development") !== 'benchmark' && cache[cacheKey] != null) { return cache[cacheKey]; } // IE can even throw an error in some cases, for e.g. style.content = 'bar'. try { // Test value as it is. el.style[property] = value; } catch (err) { // Return false if value not supported. cache[cacheKey] = false; return false; } // If 'transition' or 'transition-property' property. if (transitionProperties[property]) { value = value.replace(transPropsRegExp, prefixTransitionCallback); } else if (el.style[property] === '') { // Value with a vendor prefix. value = _prefix2['default'].css + value; // Hardcode test to convert "flex" to "-ms-flexbox" for IE10. if (value === '-ms-flex') value = '-ms-flexbox'; // Test prefixed value. el.style[property] = value; // Return false if value not supported. if (el.style[property] === '') { cache[cacheKey] = false; return false; } } // Reset styles for current property. el.style[property] = ''; // Write current value to cache. cache[cacheKey] = value; return cache[cacheKey]; } /***/ }), /* 24 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.create = exports.createGenerateClassName = exports.sheets = exports.RuleList = exports.SheetsManager = exports.SheetsRegistry = exports.toCssValue = exports.getDynamicStyles = undefined; var _getDynamicStyles = __webpack_require__(25); Object.defineProperty(exports, 'getDynamicStyles', { enumerable: true, get: function get() { return _interopRequireDefault(_getDynamicStyles)['default']; } }); var _toCssValue = __webpack_require__(26); Object.defineProperty(exports, 'toCssValue', { enumerable: true, get: function get() { return _interopRequireDefault(_toCssValue)['default']; } }); var _SheetsRegistry = __webpack_require__(27); Object.defineProperty(exports, 'SheetsRegistry', { enumerable: true, get: function get() { return _interopRequireDefault(_SheetsRegistry)['default']; } }); var _SheetsManager = __webpack_require__(28); Object.defineProperty(exports, 'SheetsManager', { enumerable: true, get: function get() { return _interopRequireDefault(_SheetsManager)['default']; } }); var _RuleList = __webpack_require__(30); Object.defineProperty(exports, 'RuleList', { enumerable: true, get: function get() { return _interopRequireDefault(_RuleList)['default']; } }); var _sheets = __webpack_require__(42); Object.defineProperty(exports, 'sheets', { enumerable: true, get: function get() { return _interopRequireDefault(_sheets)['default']; } }); var _createGenerateClassName = __webpack_require__(43); Object.defineProperty(exports, 'createGenerateClassName', { enumerable: true, get: function get() { return _interopRequireDefault(_createGenerateClassName)['default']; } }); var _Jss = __webpack_require__(46); var _Jss2 = _interopRequireDefault(_Jss); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } /** * Creates a new instance of Jss. */ var create = exports.create = function create(options) { return new _Jss2['default'](options); }; /** * A global Jss instance. */ exports['default'] = create(); /***/ }), /* 25 */ /***/ (function(module, exports) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /** * Extracts a styles object with only props that contain function values. */ exports['default'] = function (styles) { // eslint-disable-next-line no-shadow function extract(styles) { var to = null; for (var key in styles) { var value = styles[key]; var type = typeof value === 'undefined' ? 'undefined' : _typeof(value); if (type === 'function') { if (!to) to = {}; to[key] = value; } else if (type === 'object' && value !== null && !Array.isArray(value)) { var extracted = extract(value); if (extracted) { if (!to) to = {}; to[key] = extracted; } } } return to; } return extract(styles); }; /***/ }), /* 26 */ /***/ (function(module, exports) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports['default'] = toCssValue; var join = function join(value, by) { var result = ''; for (var i = 0; i < value.length; i++) { // Remove !important from the value, it will be readded later. if (value[i] === '!important') break; if (result) result += by; result += value[i]; } return result; }; /** * Converts array values to string. * * `margin: [['5px', '10px']]` > `margin: 5px 10px;` * `border: ['1px', '2px']` > `border: 1px, 2px;` * `margin: [['5px', '10px'], '!important']` > `margin: 5px 10px !important;` * `color: ['red', !important]` > `color: red !important;` */ function toCssValue(value) { var ignoreImportant = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; if (!Array.isArray(value)) return value; var cssValue = ''; // Support space separated values via `[['5px', '10px']]`. if (Array.isArray(value[0])) { for (var i = 0; i < value.length; i++) { if (value[i] === '!important') break; if (cssValue) cssValue += ', '; cssValue += join(value[i], ' '); } } else cssValue = join(value, ', '); // Add !important, because it was ignored. if (!ignoreImportant && value[value.length - 1] === '!important') { cssValue += ' !important'; } return cssValue; } /***/ }), /* 27 */ /***/ (function(module, exports) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /** * Sheets registry to access them all at one place. */ var SheetsRegistry = function () { function SheetsRegistry() { _classCallCheck(this, SheetsRegistry); this.registry = []; } _createClass(SheetsRegistry, [{ key: 'add', /** * Register a Style Sheet. */ value: function add(sheet) { var registry = this.registry; var index = sheet.options.index; if (registry.indexOf(sheet) !== -1) return; if (registry.length === 0 || index >= this.index) { registry.push(sheet); return; } // Find a position. for (var i = 0; i < registry.length; i++) { if (registry[i].options.index > index) { registry.splice(i, 0, sheet); return; } } } /** * Reset the registry. */ }, { key: 'reset', value: function reset() { this.registry = []; } /** * Remove a Style Sheet. */ }, { key: 'remove', value: function remove(sheet) { var index = this.registry.indexOf(sheet); this.registry.splice(index, 1); } /** * Convert all attached sheets to a CSS string. */ }, { key: 'toString', value: function toString(options) { return this.registry.filter(function (sheet) { return sheet.attached; }).map(function (sheet) { return sheet.toString(options); }).join('\n'); } }, { key: 'index', /** * Current highest index number. */ get: function get() { return this.registry.length === 0 ? 0 : this.registry[this.registry.length - 1].options.index; } }]); return SheetsRegistry; }(); exports['default'] = SheetsRegistry; /***/ }), /* 28 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _warning = __webpack_require__(29); var _warning2 = _interopRequireDefault(_warning); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /** * SheetsManager is like a WeakMap which is designed to count StyleSheet * instances and attach/detach automatically. */ var SheetsManager = function () { function SheetsManager() { _classCallCheck(this, SheetsManager); this.sheets = []; this.refs = []; this.keys = []; } _createClass(SheetsManager, [{ key: 'get', value: function get(key) { var index = this.keys.indexOf(key); return this.sheets[index]; } }, { key: 'add', value: function add(key, sheet) { var sheets = this.sheets, refs = this.refs, keys = this.keys; var index = sheets.indexOf(sheet); if (index !== -1) return index; sheets.push(sheet); refs.push(0); keys.push(key); return sheets.length - 1; } }, { key: 'manage', value: function manage(key) { var index = this.keys.indexOf(key); var sheet = this.sheets[index]; if (this.refs[index] === 0) sheet.attach(); this.refs[index]++; if (!this.keys[index]) this.keys.splice(index, 0, key); return sheet; } }, { key: 'unmanage', value: function unmanage(key) { var index = this.keys.indexOf(key); if (index === -1) { // eslint-ignore-next-line no-console (0, _warning2['default'])(false, 'SheetsManager: can\'t find sheet to unmanage'); return; } if (this.refs[index] > 0) { this.refs[index]--; if (this.refs[index] === 0) this.sheets[index].detach(); } } }, { key: 'size', get: function get() { return this.keys.length; } }]); return SheetsManager; }(); exports['default'] = SheetsManager; /***/ }), /* 29 */ /***/ (function(module, exports, __webpack_require__) { /** * Copyright 2014-2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ 'use strict'; /** * Similar to invariant but only logs a warning if the condition is not met. * This can be used to log issues in development environments in critical * paths. Removing the logging code for production environments will keep the * same logic and follow the same code paths. */ var warning = function() {}; if (true) { warning = function(condition, format, args) { var len = arguments.length; args = new Array(len > 2 ? len - 2 : 0); for (var key = 2; key < len; key++) { args[key - 2] = arguments[key]; } if (format === undefined) { throw new Error( '`warning(condition, format, ...args)` requires a warning ' + 'message argument' ); } if (format.length < 10 || (/^[s\W]*$/).test(format)) { throw new Error( 'The warning format should be able to uniquely identify this ' + 'warning. Please, use a more descriptive format than: ' + format ); } if (!condition) { var argIndex = 0; var message = 'Warning: ' + format.replace(/%s/g, function() { return args[argIndex++]; }); if (typeof console !== 'undefined') { console.error(message); } try { // This error was thrown as a convenience so that you can use this stack // to find the callsite that caused this warning to fire. throw new Error(message); } catch(x) {} } }; } module.exports = warning; /***/ }), /* 30 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _createRule = __webpack_require__(31); var _createRule2 = _interopRequireDefault(_createRule); var _linkRule = __webpack_require__(40); var _linkRule2 = _interopRequireDefault(_linkRule); var _StyleRule = __webpack_require__(32); var _StyleRule2 = _interopRequireDefault(_StyleRule); var _escape = __webpack_require__(41); var _escape2 = _interopRequireDefault(_escape); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /** * Contains rules objects and allows adding/removing etc. * Is used for e.g. by `StyleSheet` or `ConditionalRule`. */ var RuleList = function () { // Original styles object. function RuleList(options) { _classCallCheck(this, RuleList); this.map = {}; this.raw = {}; this.index = []; this.options = options; this.classes = options.classes; } /** * Create and register rule. * * Will not render after Style Sheet was rendered the first time. */ // Used to ensure correct rules order. // Rules registry for access by .get() method. // It contains the same rule registered by name and by selector. _createClass(RuleList, [{ key: 'add', value: function add(name, decl, options) { var _options = this.options, parent = _options.parent, sheet = _options.sheet, jss = _options.jss, Renderer = _options.Renderer, generateClassName = _options.generateClassName; options = _extends({ classes: this.classes, parent: parent, sheet: sheet, jss: jss, Renderer: Renderer, generateClassName: generateClassName }, options); if (!options.selector && this.classes[name]) { options.selector = '.' + (0, _escape2['default'])(this.classes[name]); } this.raw[name] = decl; var rule = (0, _createRule2['default'])(name, decl, options); var className = void 0; if (!options.selector && rule instanceof _StyleRule2['default']) { className = generateClassName(rule, sheet); rule.selector = '.' + (0, _escape2['default'])(className); } this.register(rule, className); var index = options.index === undefined ? this.index.length : options.index; this.index.splice(index, 0, rule); return rule; } /** * Get a rule. */ }, { key: 'get', value: function get(name) { return this.map[name]; } /** * Delete a rule. */ }, { key: 'remove', value: function remove(rule) { this.unregister(rule); this.index.splice(this.indexOf(rule), 1); } /** * Get index of a rule. */ }, { key: 'indexOf', value: function indexOf(rule) { return this.index.indexOf(rule); } /** * Run `onProcessRule()` plugins on every rule. */ }, { key: 'process', value: function process() { var plugins = this.options.jss.plugins; // We need to clone array because if we modify the index somewhere else during a loop // we end up with very hard-to-track-down side effects. this.index.slice(0).forEach(plugins.onProcessRule, plugins); } /** * Register a rule in `.map` and `.classes` maps. */ }, { key: 'register', value: function register(rule, className) { this.map[rule.key] = rule; if (rule instanceof _StyleRule2['default']) { this.map[rule.selector] = rule; if (className) this.classes[rule.key] = className; } } /** * Unregister a rule. */ }, { key: 'unregister', value: function unregister(rule) { delete this.map[rule.key]; if (rule instanceof _StyleRule2['default']) { delete this.map[rule.selector]; delete this.classes[rule.key]; } } /** * Update the function values with a new data. */ }, { key: 'update', value: function update(name, data) { var _options2 = this.options, plugins = _options2.jss.plugins, sheet = _options2.sheet; if (typeof name === 'string') { plugins.onUpdate(data, this.get(name), sheet); return; } for (var index = 0; index < this.index.length; index++) { plugins.onUpdate(name, this.index[index], sheet); } } /** * Link renderable rules with CSSRuleList. */ }, { key: 'link', value: function link(cssRules) { var map = this.options.sheet.renderer.getUnescapedKeysMap(this.index); for (var i = 0; i < cssRules.length; i++) { var cssRule = cssRules[i]; var _key = this.options.sheet.renderer.getKey(cssRule); if (map[_key]) _key = map[_key]; var rule = this.map[_key]; if (rule) (0, _linkRule2['default'])(rule, cssRule); } } /** * Convert rules to a CSS string. */ }, { key: 'toString', value: function toString(options) { var str = ''; var sheet = this.options.sheet; var link = sheet ? sheet.options.link : false; for (var index = 0; index < this.index.length; index++) { var rule = this.index[index]; var css = rule.toString(opti