diff --git a/.eslintignore b/.eslintignore index 33d6bf4..43eaaf4 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,4 +1,7 @@ -lib/**/* +static/**/* +dynamic/**/* +generator/**/* +utils/**/* coverage/**/* -modules/dynamic/prefixProps.js -modules/static/prefixProps.js +modules/dynamic/propertyPrefixMap.js +modules/static/propertyPrefixMap.js diff --git a/.gitignore b/.gitignore index a141bd1..c6fe8b3 100644 --- a/.gitignore +++ b/.gitignore @@ -19,7 +19,12 @@ Thumbs.db *.sw? *.vi -/lib +/static +/dynamic +/utils +/generator node_modules/ npm-debug.log coverage +/modules/dynamic/prefixPropertyMap.js +/modules/static/prefixPropertyMap.js diff --git a/.travis.yml b/.travis.yml index 3881357..14c86af 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,7 @@ language: node_js node_js: - "5" script: - - npm test + - npm run check addons: code_climate: repo_token: 5940bda1e073ebbb48c7e1e1fce02d627515c8c5e76915fa08dcccbfbee67f98 diff --git a/benchmark/dynamic/cases/300-dynamic.js b/benchmark/dynamic/cases/300-dynamic.js index d107841..32b4b4d 100644 --- a/benchmark/dynamic/cases/300-dynamic.js +++ b/benchmark/dynamic/cases/300-dynamic.js @@ -1,4 +1,4 @@ -import Prefixer from '../../packages/300/dynamic/Prefixer' +import Prefixer from '../../packages/300/dynamic' const CHROME45 = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36' diff --git a/benchmark/packages/300/dynamic/Prefixer.js b/benchmark/packages/300/dynamic/Prefixer.js deleted file mode 100644 index 988f561..0000000 --- a/benchmark/packages/300/dynamic/Prefixer.js +++ /dev/null @@ -1,217 +0,0 @@ -'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 _prefixValue = require('../utils/prefixValue'); - -var _prefixValue2 = _interopRequireDefault(_prefixValue); - -var _getBrowserInformation = require('../utils/getBrowserInformation'); - -var _getBrowserInformation2 = _interopRequireDefault(_getBrowserInformation); - -var _getPrefixedKeyframes = require('../utils/getPrefixedKeyframes'); - -var _getPrefixedKeyframes2 = _interopRequireDefault(_getPrefixedKeyframes); - -var _capitalizeString = require('../utils/capitalizeString'); - -var _capitalizeString2 = _interopRequireDefault(_capitalizeString); - -var _addNewValuesOnly = require('../utils/addNewValuesOnly'); - -var _addNewValuesOnly2 = _interopRequireDefault(_addNewValuesOnly); - -var _isObject = require('../utils/isObject'); - -var _isObject2 = _interopRequireDefault(_isObject); - -var _prefixProps = require('./prefixProps'); - -var _prefixProps2 = _interopRequireDefault(_prefixProps); - -var _prefixAll2 = require('../static/prefixAll'); - -var _prefixAll3 = _interopRequireDefault(_prefixAll2); - -var _calc = require('./plugins/calc'); - -var _calc2 = _interopRequireDefault(_calc); - -var _flex = require('./plugins/flex'); - -var _flex2 = _interopRequireDefault(_flex); - -var _flexboxIE = require('./plugins/flexboxIE'); - -var _flexboxIE2 = _interopRequireDefault(_flexboxIE); - -var _flexboxOld = require('./plugins/flexboxOld'); - -var _flexboxOld2 = _interopRequireDefault(_flexboxOld); - -var _grabCursor = require('./plugins/grabCursor'); - -var _grabCursor2 = _interopRequireDefault(_grabCursor); - -var _gradient = require('./plugins/gradient'); - -var _gradient2 = _interopRequireDefault(_gradient); - -var _position = require('./plugins/position'); - -var _position2 = _interopRequireDefault(_position); - -var _sizing = require('./plugins/sizing'); - -var _sizing2 = _interopRequireDefault(_sizing); - -var _transition = require('./plugins/transition'); - -var _transition2 = _interopRequireDefault(_transition); - -var _zoomCursor = require('./plugins/zoomCursor'); - -var _zoomCursor2 = _interopRequireDefault(_zoomCursor); - -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"); } } - -var plugins = [_position2.default, _calc2.default, _zoomCursor2.default, _grabCursor2.default, _sizing2.default, _gradient2.default, _transition2.default, _flexboxIE2.default, _flexboxOld2.default, _flex2.default]; - -var Prefixer = function () { - /** - * Instantiante a new prefixer - * @param {string} userAgent - userAgent to gather prefix information according to caniuse.com - * @param {string} keepUnprefixed - keeps unprefixed properties and values - */ - function Prefixer() { - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, Prefixer); - - var defaultUserAgent = typeof navigator !== 'undefined' ? navigator.userAgent : undefined; - - this._userAgent = options.userAgent || defaultUserAgent; - this._keepUnprefixed = options.keepUnprefixed || false; - - if (this._userAgent) { - this._browserInfo = (0, _getBrowserInformation2.default)(this._userAgent); - } - - // Checks if the userAgent was resolved correctly - if (this._browserInfo && this._browserInfo.cssPrefix) { - this.prefixedKeyframes = (0, _getPrefixedKeyframes2.default)(this._browserInfo.browserName, this._browserInfo.browserVersion, this._browserInfo.cssPrefix); - } else { - this._useFallback = true; - return false; - } - - var prefixData = this._browserInfo.browserName && _prefixProps2.default[this._browserInfo.browserName]; - if (prefixData) { - this._requiresPrefix = {}; - - for (var property in prefixData) { - if (prefixData[property] >= this._browserInfo.browserVersion) { - this._requiresPrefix[property] = true; - } - } - - this._hasPropsRequiringPrefix = Object.keys(this._requiresPrefix).length > 0; - } else { - this._useFallback = true; - } - - this._metaData = { - browserVersion: this._browserInfo.browserVersion, - browserName: this._browserInfo.browserName, - cssPrefix: this._browserInfo.cssPrefix, - jsPrefix: this._browserInfo.jsPrefix, - keepUnprefixed: this._keepUnprefixed, - requiresPrefix: this._requiresPrefix - }; - } - - _createClass(Prefixer, [{ - key: 'prefix', - value: function prefix(style) { - // use prefixAll as fallback if userAgent can not be resolved - if (this._useFallback) { - return (0, _prefixAll3.default)(style); - } - - // only add prefixes if needed - if (!this._hasPropsRequiringPrefix) { - return style; - } - - return this._prefixStyle(style); - } - }, { - key: '_prefixStyle', - value: function _prefixStyle(style) { - for (var property in style) { - var value = style[property]; - - // handle nested objects - if ((0, _isObject2.default)(value)) { - style[property] = this.prefix(value); - // handle array values - } else if (Array.isArray(value)) { - var combinedValue = []; - - for (var i = 0, len = value.length; i < len; ++i) { - var processedValue = (0, _prefixValue2.default)(plugins, property, value[i], style, this._metaData); - (0, _addNewValuesOnly2.default)(combinedValue, processedValue || value[i]); - } - - // only modify the value if it was touched - // by any plugin to prevent unnecessary mutations - if (combinedValue.length > 0) { - style[property] = combinedValue; - } - } else { - var _processedValue = (0, _prefixValue2.default)(plugins, property, value, style, this._metaData); - - // only modify the value if it was touched - // by any plugin to prevent unnecessary mutations - if (_processedValue) { - style[property] = _processedValue; - } - - // add prefixes to properties - if (this._requiresPrefix[property]) { - style[this._browserInfo.jsPrefix + (0, _capitalizeString2.default)(property)] = value; - if (!this._keepUnprefixed) { - delete style[property]; - } - } - } - } - - return style; - } - - /** - * Returns a prefixed version of the style object using all vendor prefixes - * @param {Object} styles - Style object that gets prefixed properties added - * @returns {Object} - Style object with prefixed properties and values - */ - - }], [{ - key: 'prefixAll', - value: function prefixAll(styles) { - return (0, _prefixAll3.default)(styles); - } - }]); - - return Prefixer; -}(); - -exports.default = Prefixer; -module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/300/dynamic/createPrefixer.js b/benchmark/packages/300/dynamic/createPrefixer.js new file mode 100644 index 0000000..ce62abc --- /dev/null +++ b/benchmark/packages/300/dynamic/createPrefixer.js @@ -0,0 +1,174 @@ +'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; }; }(); + +exports.default = createPrefixer; + +var _getBrowserInformation = require('../utils/getBrowserInformation'); + +var _getBrowserInformation2 = _interopRequireDefault(_getBrowserInformation); + +var _getPrefixedKeyframes = require('../utils/getPrefixedKeyframes'); + +var _getPrefixedKeyframes2 = _interopRequireDefault(_getPrefixedKeyframes); + +var _capitalizeString = require('../utils/capitalizeString'); + +var _capitalizeString2 = _interopRequireDefault(_capitalizeString); + +var _addNewValuesOnly = require('../utils/addNewValuesOnly'); + +var _addNewValuesOnly2 = _interopRequireDefault(_addNewValuesOnly); + +var _isObject = require('../utils/isObject'); + +var _isObject2 = _interopRequireDefault(_isObject); + +var _prefixValue = require('../utils/prefixValue'); + +var _prefixValue2 = _interopRequireDefault(_prefixValue); + +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"); } } + +function createPrefixer(propertyPrefixMap) { + var plugins = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + var fallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (style) { + return style; + }; + + return function () { + /** + * Instantiante a new prefixer + * @param {string} userAgent - userAgent to gather prefix information according to caniuse.com + * @param {string} keepUnprefixed - keeps unprefixed properties and values + */ + function Prefixer() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _classCallCheck(this, Prefixer); + + var defaultUserAgent = typeof navigator !== 'undefined' ? navigator.userAgent : undefined; + + this._userAgent = options.userAgent || defaultUserAgent; + this._keepUnprefixed = options.keepUnprefixed || false; + + if (this._userAgent) { + this._browserInfo = (0, _getBrowserInformation2.default)(this._userAgent); + } + + // Checks if the userAgent was resolved correctly + if (this._browserInfo && this._browserInfo.cssPrefix) { + this.prefixedKeyframes = (0, _getPrefixedKeyframes2.default)(this._browserInfo.browserName, this._browserInfo.browserVersion, this._browserInfo.cssPrefix); + } else { + this._useFallback = true; + return false; + } + + var prefixData = this._browserInfo.browserName && propertyPrefixMap[this._browserInfo.browserName]; + if (prefixData) { + this._requiresPrefix = {}; + + for (var property in prefixData) { + if (prefixData[property] >= this._browserInfo.browserVersion) { + this._requiresPrefix[property] = true; + } + } + + this._hasPropsRequiringPrefix = Object.keys(this._requiresPrefix).length > 0; + } else { + this._useFallback = true; + } + + this._metaData = { + browserVersion: this._browserInfo.browserVersion, + browserName: this._browserInfo.browserName, + cssPrefix: this._browserInfo.cssPrefix, + jsPrefix: this._browserInfo.jsPrefix, + keepUnprefixed: this._keepUnprefixed, + requiresPrefix: this._requiresPrefix + }; + } + + _createClass(Prefixer, [{ + key: 'prefix', + value: function prefix(style) { + // use static prefixer as fallback if userAgent can not be resolved + if (this._useFallback) { + return fallback(style); + } + + // only add prefixes if needed + if (!this._hasPropsRequiringPrefix) { + return style; + } + + return this._prefixStyle(style); + } + }, { + key: '_prefixStyle', + value: function _prefixStyle(style) { + for (var property in style) { + var value = style[property]; + + // handle nested objects + if ((0, _isObject2.default)(value)) { + style[property] = this.prefix(value); + // handle array values + } else if (Array.isArray(value)) { + var combinedValue = []; + + for (var i = 0, len = value.length; i < len; ++i) { + var processedValue = (0, _prefixValue2.default)(plugins, property, value[i], style, this._metaData); + (0, _addNewValuesOnly2.default)(combinedValue, processedValue || value[i]); + } + + // only modify the value if it was touched + // by any plugin to prevent unnecessary mutations + if (combinedValue.length > 0) { + style[property] = combinedValue; + } + } else { + var _processedValue = (0, _prefixValue2.default)(plugins, property, value, style, this._metaData); + + // only modify the value if it was touched + // by any plugin to prevent unnecessary mutations + if (_processedValue) { + style[property] = _processedValue; + } + + // add prefixes to properties + if (this._requiresPrefix[property]) { + style[this._browserInfo.jsPrefix + (0, _capitalizeString2.default)(property)] = value; + if (!this._keepUnprefixed) { + delete style[property]; + } + } + } + } + + return style; + } + + /** + * Returns a prefixed version of the style object using all vendor prefixes + * @param {Object} styles - Style object that gets prefixed properties added + * @returns {Object} - Style object with prefixed properties and values + */ + + }], [{ + key: 'prefixAll', + value: function prefixAll(styles) { + return fallback(styles); + } + }]); + + return Prefixer; + }(); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/300/dynamic/index.js b/benchmark/packages/300/dynamic/index.js new file mode 100644 index 0000000..1c782a7 --- /dev/null +++ b/benchmark/packages/300/dynamic/index.js @@ -0,0 +1,26 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createPrefixer = require('./createPrefixer'); + +var _createPrefixer2 = _interopRequireDefault(_createPrefixer); + +var _propertyPrefixMap = require('./propertyPrefixMap'); + +var _propertyPrefixMap2 = _interopRequireDefault(_propertyPrefixMap); + +var _plugins = require('./plugins'); + +var _plugins2 = _interopRequireDefault(_plugins); + +var _static = require('../static'); + +var _static2 = _interopRequireDefault(_static); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +exports.default = (0, _createPrefixer2.default)(_propertyPrefixMap2.default, _plugins2.default, _static2.default); +module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/300/dynamic/plugins/flex.js b/benchmark/packages/300/dynamic/plugins/flex.js index c9e9e0e..9556407 100644 --- a/benchmark/packages/300/dynamic/plugins/flex.js +++ b/benchmark/packages/300/dynamic/plugins/flex.js @@ -21,7 +21,7 @@ function flex(property, value, style, _ref) { cssPrefix = _ref.cssPrefix, keepUnprefixed = _ref.keepUnprefixed; - if (property === 'display' && values[value] && (browserName === 'chrome' && browserVersion < 29 && browserVersion > 20 || (browserName === 'safari' || browserName === 'ios_saf') && browserVersion < 9 && browserVersion > 6 || browserName === 'opera' && (browserVersion == 15 || browserVersion == 16))) { + if (property === 'display' && values[value] && (browserName === 'chrome' && browserVersion < 29 && browserVersion > 20 || (browserName === 'safari' || browserName === 'ios_saf') && browserVersion < 9 && browserVersion > 6 || browserName === 'opera' && (browserVersion === 15 || browserVersion === 16))) { return (0, _getPrefixedValue2.default)(cssPrefix + value, value, keepUnprefixed); } } diff --git a/benchmark/packages/300/dynamic/plugins/flexboxIE.js b/benchmark/packages/300/dynamic/plugins/flexboxIE.js index 0decf8f..921fbcf 100644 --- a/benchmark/packages/300/dynamic/plugins/flexboxIE.js +++ b/benchmark/packages/300/dynamic/plugins/flexboxIE.js @@ -35,9 +35,12 @@ function flexboxIE(property, value, style, _ref) { var browserName = _ref.browserName, browserVersion = _ref.browserVersion, cssPrefix = _ref.cssPrefix, - keepUnprefixed = _ref.keepUnprefixed; + keepUnprefixed = _ref.keepUnprefixed, + requiresPrefix = _ref.requiresPrefix; + + if ((alternativeProps[property] || property === 'display' && typeof value === 'string' && value.indexOf('flex') > -1) && (browserName === 'ie_mob' || browserName === 'ie') && browserVersion === 10) { + delete requiresPrefix[property]; - if ((alternativeProps[property] || property === 'display' && typeof value === 'string' && value.indexOf('flex') > -1) && (browserName === 'ie_mob' || browserName === 'ie') && browserVersion == 10) { if (!keepUnprefixed && !Array.isArray(style[property])) { delete style[property]; } diff --git a/benchmark/packages/300/dynamic/plugins/flexboxOld.js b/benchmark/packages/300/dynamic/plugins/flexboxOld.js index 6ba4d82..5e513a9 100644 --- a/benchmark/packages/300/dynamic/plugins/flexboxOld.js +++ b/benchmark/packages/300/dynamic/plugins/flexboxOld.js @@ -36,9 +36,12 @@ function flexboxOld(property, value, style, _ref) { var browserName = _ref.browserName, browserVersion = _ref.browserVersion, cssPrefix = _ref.cssPrefix, - keepUnprefixed = _ref.keepUnprefixed; + keepUnprefixed = _ref.keepUnprefixed, + requiresPrefix = _ref.requiresPrefix; if ((properties.indexOf(property) > -1 || property === 'display' && typeof value === 'string' && value.indexOf('flex') > -1) && (browserName === 'firefox' && browserVersion < 22 || browserName === 'chrome' && browserVersion < 21 || (browserName === 'safari' || browserName === 'ios_saf') && browserVersion <= 6.1 || browserName === 'android' && browserVersion < 4.4 || browserName === 'and_uc')) { + delete requiresPrefix[property]; + if (!keepUnprefixed && !Array.isArray(style[property])) { delete style[property]; } diff --git a/benchmark/packages/300/dynamic/plugins/grabCursor.js b/benchmark/packages/300/dynamic/plugins/grabCursor.js index e34b319..2e2a0b4 100644 --- a/benchmark/packages/300/dynamic/plugins/grabCursor.js +++ b/benchmark/packages/300/dynamic/plugins/grabCursor.js @@ -20,7 +20,9 @@ function grabCursor(property, value, style, _ref) { cssPrefix = _ref.cssPrefix, keepUnprefixed = _ref.keepUnprefixed; - // adds prefixes for firefox, chrome, safari, and opera regardless of version until a reliable brwoser support info can be found (see: https://github.com/rofrischmann/inline-style-prefixer/issues/79) + // adds prefixes for firefox, chrome, safari, and opera regardless of + // version until a reliable brwoser support info can be found + // see: https://github.com/rofrischmann/inline-style-prefixer/issues/79 if (property === 'cursor' && values[value] && (browserName === 'firefox' || browserName === 'chrome' || browserName === 'safari' || browserName === 'opera')) { return (0, _getPrefixedValue2.default)(cssPrefix + value, value, keepUnprefixed); } diff --git a/benchmark/packages/300/dynamic/plugins/index.js b/benchmark/packages/300/dynamic/plugins/index.js new file mode 100644 index 0000000..cbe57c4 --- /dev/null +++ b/benchmark/packages/300/dynamic/plugins/index.js @@ -0,0 +1,60 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.flex = exports.flexboxOld = exports.flexboxIE = exports.transition = exports.gradient = exports.sizing = exports.zoomCursor = exports.grabCursor = exports.calc = exports.position = undefined; + +var _calc = require('./calc'); + +var _calc2 = _interopRequireDefault(_calc); + +var _flex = require('./flex'); + +var _flex2 = _interopRequireDefault(_flex); + +var _flexboxIE = require('./flexboxIE'); + +var _flexboxIE2 = _interopRequireDefault(_flexboxIE); + +var _flexboxOld = require('./flexboxOld'); + +var _flexboxOld2 = _interopRequireDefault(_flexboxOld); + +var _grabCursor = require('./grabCursor'); + +var _grabCursor2 = _interopRequireDefault(_grabCursor); + +var _gradient = require('./gradient'); + +var _gradient2 = _interopRequireDefault(_gradient); + +var _position = require('./position'); + +var _position2 = _interopRequireDefault(_position); + +var _sizing = require('./sizing'); + +var _sizing2 = _interopRequireDefault(_sizing); + +var _transition = require('./transition'); + +var _transition2 = _interopRequireDefault(_transition); + +var _zoomCursor = require('./zoomCursor'); + +var _zoomCursor2 = _interopRequireDefault(_zoomCursor); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +exports.default = [_position2.default, _calc2.default, _grabCursor2.default, _zoomCursor2.default, _sizing2.default, _gradient2.default, _transition2.default, _flexboxIE2.default, _flexboxOld2.default, _flex2.default]; +exports.position = _position2.default; +exports.calc = _calc2.default; +exports.grabCursor = _grabCursor2.default; +exports.zoomCursor = _zoomCursor2.default; +exports.sizing = _sizing2.default; +exports.gradient = _gradient2.default; +exports.transition = _transition2.default; +exports.flexboxIE = _flexboxIE2.default; +exports.flexboxOld = _flexboxOld2.default; +exports.flex = _flex2.default; \ No newline at end of file diff --git a/benchmark/packages/300/dynamic/plugins/position.js b/benchmark/packages/300/dynamic/plugins/position.js index 7014981..3437c3f 100644 --- a/benchmark/packages/300/dynamic/plugins/position.js +++ b/benchmark/packages/300/dynamic/plugins/position.js @@ -11,7 +11,7 @@ var _getPrefixedValue2 = _interopRequireDefault(_getPrefixedValue); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -function position(property, value, style, _ref) { +function position(property, value, _ref) { var browserName = _ref.browserName, cssPrefix = _ref.cssPrefix, keepUnprefixed = _ref.keepUnprefixed; diff --git a/benchmark/packages/300/dynamic/plugins/transition.js b/benchmark/packages/300/dynamic/plugins/transition.js index 57122f5..333cd98 100644 --- a/benchmark/packages/300/dynamic/plugins/transition.js +++ b/benchmark/packages/300/dynamic/plugins/transition.js @@ -8,36 +8,29 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol exports.default = transition; -var _getPrefixedValue = require('../../utils/getPrefixedValue'); - -var _getPrefixedValue2 = _interopRequireDefault(_getPrefixedValue); - var _hyphenateStyleName = require('hyphenate-style-name'); var _hyphenateStyleName2 = _interopRequireDefault(_hyphenateStyleName); -var _unprefixProperty = require('../../utils/unprefixProperty'); - -var _unprefixProperty2 = _interopRequireDefault(_unprefixProperty); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var properties = { transition: true, - transitionProperty: true + transitionProperty: true, + WebkitTransition: true, + WebkitTransitionProperty: true, + MozTransition: true, + MozTransitionProperty: true }; var requiresPrefixDashCased = void 0; - +// TODO: extract population function transition(property, value, style, _ref) { var cssPrefix = _ref.cssPrefix, keepUnprefixed = _ref.keepUnprefixed, requiresPrefix = _ref.requiresPrefix; - // also check for already prefixed transitions - var unprefixedProperty = (0, _unprefixProperty2.default)(property); - - if (typeof value === 'string' && properties[unprefixedProperty]) { + if (typeof value === 'string' && properties[property]) { var _ret = function () { // memoize the prefix array for later use if (!requiresPrefixDashCased) { diff --git a/benchmark/packages/300/dynamic/prefixProps.js b/benchmark/packages/300/dynamic/prefixProps.js deleted file mode 100644 index 2a5f801..0000000 --- a/benchmark/packages/300/dynamic/prefixProps.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = { "chrome": { "transform": 35, "transformOrigin": 35, "transformOriginX": 35, "transformOriginY": 35, "backfaceVisibility": 35, "perspective": 35, "perspectiveOrigin": 35, "transformStyle": 35, "transformOriginZ": 35, "animation": 42, "animationDelay": 42, "animationDirection": 42, "animationFillMode": 42, "animationDuration": 42, "animationIterationCount": 42, "animationName": 42, "animationPlayState": 42, "animationTimingFunction": 42, "appearance": 59, "userSelect": 53, "fontKerning": 32, "textEmphasisPosition": 59, "textEmphasis": 59, "textEmphasisStyle": 59, "textEmphasisColor": 59, "boxDecorationBreak": 59, "clipPath": 54, "maskImage": 59, "maskMode": 59, "maskRepeat": 59, "maskPosition": 59, "maskClip": 59, "maskOrigin": 59, "maskSize": 59, "maskComposite": 59, "mask": 59, "maskBorderSource": 59, "maskBorderMode": 59, "maskBorderSlice": 59, "maskBorderWidth": 59, "maskBorderOutset": 59, "maskBorderRepeat": 59, "maskBorder": 59, "maskType": 59, "textDecorationStyle": 56, "textDecorationSkip": 56, "textDecorationLine": 56, "textDecorationColor": 56, "filter": 52, "fontFeatureSettings": 47, "breakAfter": 49, "breakBefore": 49, "breakInside": 49, "columnCount": 49, "columnFill": 49, "columnGap": 49, "columnRule": 49, "columnRuleColor": 49, "columnRuleStyle": 49, "columnRuleWidth": 49, "columns": 49, "columnSpan": 49, "columnWidth": 49 }, "safari": { "flex": 8, "flexBasis": 8, "flexDirection": 8, "flexGrow": 8, "flexFlow": 8, "flexShrink": 8, "flexWrap": 8, "alignContent": 8, "alignItems": 8, "alignSelf": 8, "justifyContent": 8, "order": 8, "transition": 6, "transitionDelay": 6, "transitionDuration": 6, "transitionProperty": 6, "transitionTimingFunction": 6, "transform": 8, "transformOrigin": 8, "transformOriginX": 8, "transformOriginY": 8, "backfaceVisibility": 8, "perspective": 8, "perspectiveOrigin": 8, "transformStyle": 8, "transformOriginZ": 8, "animation": 8, "animationDelay": 8, "animationDirection": 8, "animationFillMode": 8, "animationDuration": 8, "animationIterationCount": 8, "animationName": 8, "animationPlayState": 8, "animationTimingFunction": 8, "appearance": 10.1, "userSelect": 10.1, "backdropFilter": 10.1, "fontKerning": 9, "scrollSnapType": 10.1, "scrollSnapPointsX": 10.1, "scrollSnapPointsY": 10.1, "scrollSnapDestination": 10.1, "scrollSnapCoordinate": 10.1, "textEmphasisPosition": 7, "textEmphasis": 7, "textEmphasisStyle": 7, "textEmphasisColor": 7, "boxDecorationBreak": 10.1, "clipPath": 10.1, "maskImage": 10.1, "maskMode": 10.1, "maskRepeat": 10.1, "maskPosition": 10.1, "maskClip": 10.1, "maskOrigin": 10.1, "maskSize": 10.1, "maskComposite": 10.1, "mask": 10.1, "maskBorderSource": 10.1, "maskBorderMode": 10.1, "maskBorderSlice": 10.1, "maskBorderWidth": 10.1, "maskBorderOutset": 10.1, "maskBorderRepeat": 10.1, "maskBorder": 10.1, "maskType": 10.1, "textDecorationStyle": 10.1, "textDecorationSkip": 10.1, "textDecorationLine": 10.1, "textDecorationColor": 10.1, "shapeImageThreshold": 10, "shapeImageMargin": 10, "shapeImageOutside": 10, "filter": 9, "hyphens": 10.1, "flowInto": 10.1, "flowFrom": 10.1, "breakBefore": 8, "breakAfter": 8, "breakInside": 8, "regionFragment": 10.1, "columnCount": 8, "columnFill": 8, "columnGap": 8, "columnRule": 8, "columnRuleColor": 8, "columnRuleStyle": 8, "columnRuleWidth": 8, "columns": 8, "columnSpan": 8, "columnWidth": 8 }, "firefox": { "appearance": 54, "userSelect": 54, "boxSizing": 28, "textAlignLast": 48, "textDecorationStyle": 35, "textDecorationSkip": 35, "textDecorationLine": 35, "textDecorationColor": 35, "tabSize": 54, "hyphens": 42, "fontFeatureSettings": 33, "breakAfter": 51, "breakBefore": 51, "breakInside": 51, "columnCount": 51, "columnFill": 51, "columnGap": 51, "columnRule": 51, "columnRuleColor": 51, "columnRuleStyle": 51, "columnRuleWidth": 51, "columns": 51, "columnSpan": 51, "columnWidth": 51 }, "opera": { "flex": 16, "flexBasis": 16, "flexDirection": 16, "flexGrow": 16, "flexFlow": 16, "flexShrink": 16, "flexWrap": 16, "alignContent": 16, "alignItems": 16, "alignSelf": 16, "justifyContent": 16, "order": 16, "transform": 22, "transformOrigin": 22, "transformOriginX": 22, "transformOriginY": 22, "backfaceVisibility": 22, "perspective": 22, "perspectiveOrigin": 22, "transformStyle": 22, "transformOriginZ": 22, "animation": 29, "animationDelay": 29, "animationDirection": 29, "animationFillMode": 29, "animationDuration": 29, "animationIterationCount": 29, "animationName": 29, "animationPlayState": 29, "animationTimingFunction": 29, "appearance": 44, "userSelect": 40, "fontKerning": 19, "textEmphasisPosition": 44, "textEmphasis": 44, "textEmphasisStyle": 44, "textEmphasisColor": 44, "boxDecorationBreak": 44, "clipPath": 41, "maskImage": 44, "maskMode": 44, "maskRepeat": 44, "maskPosition": 44, "maskClip": 44, "maskOrigin": 44, "maskSize": 44, "maskComposite": 44, "mask": 44, "maskBorderSource": 44, "maskBorderMode": 44, "maskBorderSlice": 44, "maskBorderWidth": 44, "maskBorderOutset": 44, "maskBorderRepeat": 44, "maskBorder": 44, "maskType": 44, "textDecorationStyle": 43, "textDecorationSkip": 43, "textDecorationLine": 43, "textDecorationColor": 43, "filter": 39, "fontFeatureSettings": 34, "breakAfter": 36, "breakBefore": 36, "breakInside": 36, "columnCount": 36, "columnFill": 36, "columnGap": 36, "columnRule": 36, "columnRuleColor": 36, "columnRuleStyle": 36, "columnRuleWidth": 36, "columns": 36, "columnSpan": 36, "columnWidth": 36 }, "ie": { "flex": 10, "flexDirection": 10, "flexFlow": 10, "flexWrap": 10, "transform": 9, "transformOrigin": 9, "transformOriginX": 9, "transformOriginY": 9, "userSelect": 11, "wrapFlow": 11, "wrapThrough": 11, "wrapMargin": 11, "scrollSnapType": 11, "scrollSnapPointsX": 11, "scrollSnapPointsY": 11, "scrollSnapDestination": 11, "scrollSnapCoordinate": 11, "touchAction": 10, "hyphens": 11, "flowInto": 11, "flowFrom": 11, "breakBefore": 11, "breakAfter": 11, "breakInside": 11, "regionFragment": 11, "gridTemplateColumns": 11, "gridTemplateRows": 11, "gridTemplateAreas": 11, "gridTemplate": 11, "gridAutoColumns": 11, "gridAutoRows": 11, "gridAutoFlow": 11, "grid": 11, "gridRowStart": 11, "gridColumnStart": 11, "gridRowEnd": 11, "gridRow": 11, "gridColumn": 11, "gridColumnEnd": 11, "gridColumnGap": 11, "gridRowGap": 11, "gridArea": 11, "gridGap": 11, "textSizeAdjust": 11 }, "edge": { "userSelect": 15, "wrapFlow": 15, "wrapThrough": 15, "wrapMargin": 15, "scrollSnapType": 15, "scrollSnapPointsX": 15, "scrollSnapPointsY": 15, "scrollSnapDestination": 15, "scrollSnapCoordinate": 15, "hyphens": 15, "flowInto": 15, "flowFrom": 15, "breakBefore": 15, "breakAfter": 15, "breakInside": 15, "regionFragment": 15, "gridTemplateColumns": 15, "gridTemplateRows": 15, "gridTemplateAreas": 15, "gridTemplate": 15, "gridAutoColumns": 15, "gridAutoRows": 15, "gridAutoFlow": 15, "grid": 15, "gridRowStart": 15, "gridColumnStart": 15, "gridRowEnd": 15, "gridRow": 15, "gridColumn": 15, "gridColumnEnd": 15, "gridColumnGap": 15, "gridRowGap": 15, "gridArea": 15, "gridGap": 15 }, "ios_saf": { "flex": 8.1, "flexBasis": 8.1, "flexDirection": 8.1, "flexGrow": 8.1, "flexFlow": 8.1, "flexShrink": 8.1, "flexWrap": 8.1, "alignContent": 8.1, "alignItems": 8.1, "alignSelf": 8.1, "justifyContent": 8.1, "order": 8.1, "transition": 6, "transitionDelay": 6, "transitionDuration": 6, "transitionProperty": 6, "transitionTimingFunction": 6, "transform": 8.1, "transformOrigin": 8.1, "transformOriginX": 8.1, "transformOriginY": 8.1, "backfaceVisibility": 8.1, "perspective": 8.1, "perspectiveOrigin": 8.1, "transformStyle": 8.1, "transformOriginZ": 8.1, "animation": 8.1, "animationDelay": 8.1, "animationDirection": 8.1, "animationFillMode": 8.1, "animationDuration": 8.1, "animationIterationCount": 8.1, "animationName": 8.1, "animationPlayState": 8.1, "animationTimingFunction": 8.1, "appearance": 10, "userSelect": 10, "backdropFilter": 10, "fontKerning": 10, "scrollSnapType": 10, "scrollSnapPointsX": 10, "scrollSnapPointsY": 10, "scrollSnapDestination": 10, "scrollSnapCoordinate": 10, "boxDecorationBreak": 10, "clipPath": 10, "maskImage": 10, "maskMode": 10, "maskRepeat": 10, "maskPosition": 10, "maskClip": 10, "maskOrigin": 10, "maskSize": 10, "maskComposite": 10, "mask": 10, "maskBorderSource": 10, "maskBorderMode": 10, "maskBorderSlice": 10, "maskBorderWidth": 10, "maskBorderOutset": 10, "maskBorderRepeat": 10, "maskBorder": 10, "maskType": 10, "textSizeAdjust": 10, "textDecorationStyle": 10, "textDecorationSkip": 10, "textDecorationLine": 10, "textDecorationColor": 10, "shapeImageThreshold": 10, "shapeImageMargin": 10, "shapeImageOutside": 10, "filter": 9, "hyphens": 10, "flowInto": 10, "flowFrom": 10, "breakBefore": 8.1, "breakAfter": 8.1, "breakInside": 8.1, "regionFragment": 10, "columnCount": 8.1, "columnFill": 8.1, "columnGap": 8.1, "columnRule": 8.1, "columnRuleColor": 8.1, "columnRuleStyle": 8.1, "columnRuleWidth": 8.1, "columns": 8.1, "columnSpan": 8.1, "columnWidth": 8.1 }, "android": { "flex": 4.2, "flexBasis": 4.2, "flexDirection": 4.2, "flexGrow": 4.2, "flexFlow": 4.2, "flexShrink": 4.2, "flexWrap": 4.2, "alignContent": 4.2, "alignItems": 4.2, "alignSelf": 4.2, "justifyContent": 4.2, "order": 4.2, "transition": 4.2, "transitionDelay": 4.2, "transitionDuration": 4.2, "transitionProperty": 4.2, "transitionTimingFunction": 4.2, "transform": 4.4, "transformOrigin": 4.4, "transformOriginX": 4.4, "transformOriginY": 4.4, "backfaceVisibility": 4.4, "perspective": 4.4, "perspectiveOrigin": 4.4, "transformStyle": 4.4, "transformOriginZ": 4.4, "animation": 4.4, "animationDelay": 4.4, "animationDirection": 4.4, "animationFillMode": 4.4, "animationDuration": 4.4, "animationIterationCount": 4.4, "animationName": 4.4, "animationPlayState": 4.4, "animationTimingFunction": 4.4, "appearance": 53, "userSelect": 53, "fontKerning": 4.4, "textEmphasisPosition": 53, "textEmphasis": 53, "textEmphasisStyle": 53, "textEmphasisColor": 53, "boxDecorationBreak": 53, "clipPath": 53, "maskImage": 53, "maskMode": 53, "maskRepeat": 53, "maskPosition": 53, "maskClip": 53, "maskOrigin": 53, "maskSize": 53, "maskComposite": 53, "mask": 53, "maskBorderSource": 53, "maskBorderMode": 53, "maskBorderSlice": 53, "maskBorderWidth": 53, "maskBorderOutset": 53, "maskBorderRepeat": 53, "maskBorder": 53, "maskType": 53, "filter": 4.4, "fontFeatureSettings": 4.4, "breakAfter": 53, "breakBefore": 53, "breakInside": 53, "columnCount": 53, "columnFill": 53, "columnGap": 53, "columnRule": 53, "columnRuleColor": 53, "columnRuleStyle": 53, "columnRuleWidth": 53, "columns": 53, "columnSpan": 53, "columnWidth": 53 }, "and_chr": { "appearance": 55, "textEmphasisPosition": 55, "textEmphasis": 55, "textEmphasisStyle": 55, "textEmphasisColor": 55, "boxDecorationBreak": 55, "maskImage": 55, "maskMode": 55, "maskRepeat": 55, "maskPosition": 55, "maskClip": 55, "maskOrigin": 55, "maskSize": 55, "maskComposite": 55, "mask": 55, "maskBorderSource": 55, "maskBorderMode": 55, "maskBorderSlice": 55, "maskBorderWidth": 55, "maskBorderOutset": 55, "maskBorderRepeat": 55, "maskBorder": 55, "maskType": 55, "textDecorationStyle": 55, "textDecorationSkip": 55, "textDecorationLine": 55, "textDecorationColor": 55 }, "and_uc": { "flex": 11, "flexBasis": 11, "flexDirection": 11, "flexGrow": 11, "flexFlow": 11, "flexShrink": 11, "flexWrap": 11, "alignContent": 11, "alignItems": 11, "alignSelf": 11, "justifyContent": 11, "order": 11, "transition": 11, "transitionDelay": 11, "transitionDuration": 11, "transitionProperty": 11, "transitionTimingFunction": 11, "transform": 11, "transformOrigin": 11, "transformOriginX": 11, "transformOriginY": 11, "backfaceVisibility": 11, "perspective": 11, "perspectiveOrigin": 11, "transformStyle": 11, "transformOriginZ": 11, "animation": 11, "animationDelay": 11, "animationDirection": 11, "animationFillMode": 11, "animationDuration": 11, "animationIterationCount": 11, "animationName": 11, "animationPlayState": 11, "animationTimingFunction": 11, "appearance": 11, "userSelect": 11, "fontKerning": 11, "textEmphasisPosition": 11, "textEmphasis": 11, "textEmphasisStyle": 11, "textEmphasisColor": 11, "maskImage": 11, "maskMode": 11, "maskRepeat": 11, "maskPosition": 11, "maskClip": 11, "maskOrigin": 11, "maskSize": 11, "maskComposite": 11, "mask": 11, "maskBorderSource": 11, "maskBorderMode": 11, "maskBorderSlice": 11, "maskBorderWidth": 11, "maskBorderOutset": 11, "maskBorderRepeat": 11, "maskBorder": 11, "maskType": 11, "textSizeAdjust": 11, "filter": 11, "hyphens": 11, "flowInto": 11, "flowFrom": 11, "breakBefore": 11, "breakAfter": 11, "breakInside": 11, "regionFragment": 11, "fontFeatureSettings": 11, "columnCount": 11, "columnFill": 11, "columnGap": 11, "columnRule": 11, "columnRuleColor": 11, "columnRuleStyle": 11, "columnRuleWidth": 11, "columns": 11, "columnSpan": 11, "columnWidth": 11 }, "op_mini": {} }; -module.exports = exports["default"]; \ No newline at end of file diff --git a/benchmark/packages/300/dynamic/propertyPrefixMap.js b/benchmark/packages/300/dynamic/propertyPrefixMap.js new file mode 100644 index 0000000..ff99342 --- /dev/null +++ b/benchmark/packages/300/dynamic/propertyPrefixMap.js @@ -0,0 +1,7 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = { "chrome": { "appearance": 59, "userSelect": 53, "textEmphasisPosition": 59, "textEmphasis": 59, "textEmphasisStyle": 59, "textEmphasisColor": 59, "boxDecorationBreak": 59, "clipPath": 54, "maskImage": 59, "maskMode": 59, "maskRepeat": 59, "maskPosition": 59, "maskClip": 59, "maskOrigin": 59, "maskSize": 59, "maskComposite": 59, "mask": 59, "maskBorderSource": 59, "maskBorderMode": 59, "maskBorderSlice": 59, "maskBorderWidth": 59, "maskBorderOutset": 59, "maskBorderRepeat": 59, "maskBorder": 59, "maskType": 59, "textDecorationStyle": 56, "textDecorationSkip": 56, "textDecorationLine": 56, "textDecorationColor": 56, "filter": 52, "fontFeatureSettings": 47, "breakAfter": 49, "breakBefore": 49, "breakInside": 49, "columnCount": 49, "columnFill": 49, "columnGap": 49, "columnRule": 49, "columnRuleColor": 49, "columnRuleStyle": 49, "columnRuleWidth": 49, "columns": 49, "columnSpan": 49, "columnWidth": 49 }, "safari": { "flex": 8, "flexBasis": 8, "flexDirection": 8, "flexGrow": 8, "flexFlow": 8, "flexShrink": 8, "flexWrap": 8, "alignContent": 8, "alignItems": 8, "alignSelf": 8, "justifyContent": 8, "order": 8, "transform": 8, "transformOrigin": 8, "transformOriginX": 8, "transformOriginY": 8, "backfaceVisibility": 8, "perspective": 8, "perspectiveOrigin": 8, "transformStyle": 8, "transformOriginZ": 8, "animation": 8, "animationDelay": 8, "animationDirection": 8, "animationFillMode": 8, "animationDuration": 8, "animationIterationCount": 8, "animationName": 8, "animationPlayState": 8, "animationTimingFunction": 8, "appearance": 10.1, "userSelect": 10.1, "backdropFilter": 10.1, "fontKerning": 9, "scrollSnapType": 10.1, "scrollSnapPointsX": 10.1, "scrollSnapPointsY": 10.1, "scrollSnapDestination": 10.1, "scrollSnapCoordinate": 10.1, "boxDecorationBreak": 10.1, "clipPath": 10.1, "maskImage": 10.1, "maskMode": 10.1, "maskRepeat": 10.1, "maskPosition": 10.1, "maskClip": 10.1, "maskOrigin": 10.1, "maskSize": 10.1, "maskComposite": 10.1, "mask": 10.1, "maskBorderSource": 10.1, "maskBorderMode": 10.1, "maskBorderSlice": 10.1, "maskBorderWidth": 10.1, "maskBorderOutset": 10.1, "maskBorderRepeat": 10.1, "maskBorder": 10.1, "maskType": 10.1, "textDecorationStyle": 10.1, "textDecorationSkip": 10.1, "textDecorationLine": 10.1, "textDecorationColor": 10.1, "shapeImageThreshold": 10, "shapeImageMargin": 10, "shapeImageOutside": 10, "filter": 9, "hyphens": 10.1, "flowInto": 10.1, "flowFrom": 10.1, "breakBefore": 8, "breakAfter": 8, "breakInside": 8, "regionFragment": 10.1, "columnCount": 8, "columnFill": 8, "columnGap": 8, "columnRule": 8, "columnRuleColor": 8, "columnRuleStyle": 8, "columnRuleWidth": 8, "columns": 8, "columnSpan": 8, "columnWidth": 8 }, "firefox": { "borderRadius": 3.6, "borderImage": 14, "borderImageOutset": 14, "borderImageRepeat": 14, "borderImageSlice": 14, "borderImageSource": 14, "borderImageWidth": 14, "flex": 21, "flexBasis": 21, "flexDirection": 21, "flexGrow": 21, "flexFlow": 21, "flexShrink": 21, "flexWrap": 21, "alignContent": 21, "alignItems": 21, "alignSelf": 21, "justifyContent": 21, "order": 21, "transition": 15, "transitionDelay": 15, "transitionDuration": 15, "transitionProperty": 15, "transitionTimingFunction": 15, "transform": 15, "transformOrigin": 15, "transformOriginX": 15, "transformOriginY": 15, "backfaceVisibility": 15, "perspective": 15, "perspectiveOrigin": 15, "transformStyle": 15, "transformOriginZ": 15, "animation": 15, "animationDelay": 15, "animationDirection": 15, "animationFillMode": 15, "animationDuration": 15, "animationIterationCount": 15, "animationName": 15, "animationPlayState": 15, "animationTimingFunction": 15, "appearance": 54, "userSelect": 54, "boxSizing": 28, "textAlignLast": 48, "textDecorationStyle": 35, "textDecorationSkip": 35, "textDecorationLine": 35, "textDecorationColor": 35, "tabSize": 54, "resize": 4, "hyphens": 42, "backgroundClip": 3.6, "backgroundOrigin": 3.6, "backgroundSize": 3.6, "fontFeatureSettings": 33, "boxShadow": 3.6, "breakAfter": 51, "breakBefore": 51, "breakInside": 51, "columnCount": 51, "columnFill": 51, "columnGap": 51, "columnRule": 51, "columnRuleColor": 51, "columnRuleStyle": 51, "columnRuleWidth": 51, "columns": 51, "columnSpan": 51, "columnWidth": 51 }, "opera": { "flex": 16, "flexBasis": 16, "flexDirection": 16, "flexGrow": 16, "flexFlow": 16, "flexShrink": 16, "flexWrap": 16, "alignContent": 16, "alignItems": 16, "alignSelf": 16, "justifyContent": 16, "order": 16, "transform": 22, "transformOrigin": 22, "transformOriginX": 22, "transformOriginY": 22, "backfaceVisibility": 22, "perspective": 22, "perspectiveOrigin": 22, "transformStyle": 22, "transformOriginZ": 22, "animation": 29, "animationDelay": 29, "animationDirection": 29, "animationFillMode": 29, "animationDuration": 29, "animationIterationCount": 29, "animationName": 29, "animationPlayState": 29, "animationTimingFunction": 29, "appearance": 44, "userSelect": 40, "fontKerning": 19, "textEmphasisPosition": 44, "textEmphasis": 44, "textEmphasisStyle": 44, "textEmphasisColor": 44, "boxDecorationBreak": 44, "clipPath": 41, "maskImage": 44, "maskMode": 44, "maskRepeat": 44, "maskPosition": 44, "maskClip": 44, "maskOrigin": 44, "maskSize": 44, "maskComposite": 44, "mask": 44, "maskBorderSource": 44, "maskBorderMode": 44, "maskBorderSlice": 44, "maskBorderWidth": 44, "maskBorderOutset": 44, "maskBorderRepeat": 44, "maskBorder": 44, "maskType": 44, "textDecorationStyle": 43, "textDecorationSkip": 43, "textDecorationLine": 43, "textDecorationColor": 43, "filter": 39, "fontFeatureSettings": 34, "breakAfter": 36, "breakBefore": 36, "breakInside": 36, "columnCount": 36, "columnFill": 36, "columnGap": 36, "columnRule": 36, "columnRuleColor": 36, "columnRuleStyle": 36, "columnRuleWidth": 36, "columns": 36, "columnSpan": 36, "columnWidth": 36 }, "ie": { "userSelect": 11, "wrapFlow": 11, "wrapThrough": 11, "wrapMargin": 11, "scrollSnapType": 11, "scrollSnapPointsX": 11, "scrollSnapPointsY": 11, "scrollSnapDestination": 11, "scrollSnapCoordinate": 11, "hyphens": 11, "flowInto": 11, "flowFrom": 11, "breakBefore": 11, "breakAfter": 11, "breakInside": 11, "regionFragment": 11, "gridTemplateColumns": 11, "gridTemplateRows": 11, "gridTemplateAreas": 11, "gridTemplate": 11, "gridAutoColumns": 11, "gridAutoRows": 11, "gridAutoFlow": 11, "grid": 11, "gridRowStart": 11, "gridColumnStart": 11, "gridRowEnd": 11, "gridRow": 11, "gridColumn": 11, "gridColumnEnd": 11, "gridColumnGap": 11, "gridRowGap": 11, "gridArea": 11, "gridGap": 11, "textSizeAdjust": 11 }, "edge": { "userSelect": 15, "wrapFlow": 15, "wrapThrough": 15, "wrapMargin": 15, "scrollSnapType": 15, "scrollSnapPointsX": 15, "scrollSnapPointsY": 15, "scrollSnapDestination": 15, "scrollSnapCoordinate": 15, "hyphens": 15, "flowInto": 15, "flowFrom": 15, "breakBefore": 15, "breakAfter": 15, "breakInside": 15, "regionFragment": 15, "gridTemplateColumns": 15, "gridTemplateRows": 15, "gridTemplateAreas": 15, "gridTemplate": 15, "gridAutoColumns": 15, "gridAutoRows": 15, "gridAutoFlow": 15, "grid": 15, "gridRowStart": 15, "gridColumnStart": 15, "gridRowEnd": 15, "gridRow": 15, "gridColumn": 15, "gridColumnEnd": 15, "gridColumnGap": 15, "gridRowGap": 15, "gridArea": 15, "gridGap": 15 }, "ios_saf": { "flex": 8.1, "flexBasis": 8.1, "flexDirection": 8.1, "flexGrow": 8.1, "flexFlow": 8.1, "flexShrink": 8.1, "flexWrap": 8.1, "alignContent": 8.1, "alignItems": 8.1, "alignSelf": 8.1, "justifyContent": 8.1, "order": 8.1, "transform": 8.1, "transformOrigin": 8.1, "transformOriginX": 8.1, "transformOriginY": 8.1, "backfaceVisibility": 8.1, "perspective": 8.1, "perspectiveOrigin": 8.1, "transformStyle": 8.1, "transformOriginZ": 8.1, "animation": 8.1, "animationDelay": 8.1, "animationDirection": 8.1, "animationFillMode": 8.1, "animationDuration": 8.1, "animationIterationCount": 8.1, "animationName": 8.1, "animationPlayState": 8.1, "animationTimingFunction": 8.1, "appearance": 10, "userSelect": 10, "backdropFilter": 10, "fontKerning": 10, "scrollSnapType": 10, "scrollSnapPointsX": 10, "scrollSnapPointsY": 10, "scrollSnapDestination": 10, "scrollSnapCoordinate": 10, "boxDecorationBreak": 10, "clipPath": 10, "maskImage": 10, "maskMode": 10, "maskRepeat": 10, "maskPosition": 10, "maskClip": 10, "maskOrigin": 10, "maskSize": 10, "maskComposite": 10, "mask": 10, "maskBorderSource": 10, "maskBorderMode": 10, "maskBorderSlice": 10, "maskBorderWidth": 10, "maskBorderOutset": 10, "maskBorderRepeat": 10, "maskBorder": 10, "maskType": 10, "textSizeAdjust": 10, "textDecorationStyle": 10, "textDecorationSkip": 10, "textDecorationLine": 10, "textDecorationColor": 10, "shapeImageThreshold": 10, "shapeImageMargin": 10, "shapeImageOutside": 10, "filter": 9, "hyphens": 10, "flowInto": 10, "flowFrom": 10, "breakBefore": 8.1, "breakAfter": 8.1, "breakInside": 8.1, "regionFragment": 10, "columnCount": 8.1, "columnFill": 8.1, "columnGap": 8.1, "columnRule": 8.1, "columnRuleColor": 8.1, "columnRuleStyle": 8.1, "columnRuleWidth": 8.1, "columns": 8.1, "columnSpan": 8.1, "columnWidth": 8.1 }, "android": { "flex": 4.2, "flexBasis": 4.2, "flexDirection": 4.2, "flexGrow": 4.2, "flexFlow": 4.2, "flexShrink": 4.2, "flexWrap": 4.2, "alignContent": 4.2, "alignItems": 4.2, "alignSelf": 4.2, "justifyContent": 4.2, "order": 4.2, "transition": 4.2, "transitionDelay": 4.2, "transitionDuration": 4.2, "transitionProperty": 4.2, "transitionTimingFunction": 4.2, "transform": 4.4, "transformOrigin": 4.4, "transformOriginX": 4.4, "transformOriginY": 4.4, "backfaceVisibility": 4.4, "perspective": 4.4, "perspectiveOrigin": 4.4, "transformStyle": 4.4, "transformOriginZ": 4.4, "animation": 4.4, "animationDelay": 4.4, "animationDirection": 4.4, "animationFillMode": 4.4, "animationDuration": 4.4, "animationIterationCount": 4.4, "animationName": 4.4, "animationPlayState": 4.4, "animationTimingFunction": 4.4, "appearance": 53, "userSelect": 53, "fontKerning": 4.4, "textEmphasisPosition": 53, "textEmphasis": 53, "textEmphasisStyle": 53, "textEmphasisColor": 53, "boxDecorationBreak": 53, "clipPath": 53, "maskImage": 53, "maskMode": 53, "maskRepeat": 53, "maskPosition": 53, "maskClip": 53, "maskOrigin": 53, "maskSize": 53, "maskComposite": 53, "mask": 53, "maskBorderSource": 53, "maskBorderMode": 53, "maskBorderSlice": 53, "maskBorderWidth": 53, "maskBorderOutset": 53, "maskBorderRepeat": 53, "maskBorder": 53, "maskType": 53, "filter": 4.4, "fontFeatureSettings": 4.4, "breakAfter": 53, "breakBefore": 53, "breakInside": 53, "columnCount": 53, "columnFill": 53, "columnGap": 53, "columnRule": 53, "columnRuleColor": 53, "columnRuleStyle": 53, "columnRuleWidth": 53, "columns": 53, "columnSpan": 53, "columnWidth": 53 }, "and_chr": { "appearance": 55, "textEmphasisPosition": 55, "textEmphasis": 55, "textEmphasisStyle": 55, "textEmphasisColor": 55, "boxDecorationBreak": 55, "maskImage": 55, "maskMode": 55, "maskRepeat": 55, "maskPosition": 55, "maskClip": 55, "maskOrigin": 55, "maskSize": 55, "maskComposite": 55, "mask": 55, "maskBorderSource": 55, "maskBorderMode": 55, "maskBorderSlice": 55, "maskBorderWidth": 55, "maskBorderOutset": 55, "maskBorderRepeat": 55, "maskBorder": 55, "maskType": 55, "textDecorationStyle": 55, "textDecorationSkip": 55, "textDecorationLine": 55, "textDecorationColor": 55 }, "and_uc": { "flex": 11, "flexBasis": 11, "flexDirection": 11, "flexGrow": 11, "flexFlow": 11, "flexShrink": 11, "flexWrap": 11, "alignContent": 11, "alignItems": 11, "alignSelf": 11, "justifyContent": 11, "order": 11, "transition": 11, "transitionDelay": 11, "transitionDuration": 11, "transitionProperty": 11, "transitionTimingFunction": 11, "transform": 11, "transformOrigin": 11, "transformOriginX": 11, "transformOriginY": 11, "backfaceVisibility": 11, "perspective": 11, "perspectiveOrigin": 11, "transformStyle": 11, "transformOriginZ": 11, "animation": 11, "animationDelay": 11, "animationDirection": 11, "animationFillMode": 11, "animationDuration": 11, "animationIterationCount": 11, "animationName": 11, "animationPlayState": 11, "animationTimingFunction": 11, "appearance": 11, "userSelect": 11, "fontKerning": 11, "textEmphasisPosition": 11, "textEmphasis": 11, "textEmphasisStyle": 11, "textEmphasisColor": 11, "maskImage": 11, "maskMode": 11, "maskRepeat": 11, "maskPosition": 11, "maskClip": 11, "maskOrigin": 11, "maskSize": 11, "maskComposite": 11, "mask": 11, "maskBorderSource": 11, "maskBorderMode": 11, "maskBorderSlice": 11, "maskBorderWidth": 11, "maskBorderOutset": 11, "maskBorderRepeat": 11, "maskBorder": 11, "maskType": 11, "textSizeAdjust": 11, "filter": 11, "hyphens": 11, "flowInto": 11, "flowFrom": 11, "breakBefore": 11, "breakAfter": 11, "breakInside": 11, "regionFragment": 11, "fontFeatureSettings": 11, "columnCount": 11, "columnFill": 11, "columnGap": 11, "columnRule": 11, "columnRuleColor": 11, "columnRuleStyle": 11, "columnRuleWidth": 11, "columns": 11, "columnSpan": 11, "columnWidth": 11 }, "op_mini": {} }; +module.exports = exports["default"]; \ No newline at end of file diff --git a/benchmark/packages/300/static/createPrefixer.js b/benchmark/packages/300/static/createPrefixer.js new file mode 100644 index 0000000..51ac701 --- /dev/null +++ b/benchmark/packages/300/static/createPrefixer.js @@ -0,0 +1,68 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = createPrefixer; + +var _prefixProperty = require('../utils/prefixProperty'); + +var _prefixProperty2 = _interopRequireDefault(_prefixProperty); + +var _prefixValue = require('../utils/prefixValue'); + +var _prefixValue2 = _interopRequireDefault(_prefixValue); + +var _addNewValuesOnly = require('../utils/addNewValuesOnly'); + +var _addNewValuesOnly2 = _interopRequireDefault(_addNewValuesOnly); + +var _isObject = require('../utils/isObject'); + +var _isObject2 = _interopRequireDefault(_isObject); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function createPrefixer(propertyPrefixMap) { + var plugins = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + + function prefixAll(style) { + for (var property in style) { + var value = style[property]; + + // handle nested objects + if ((0, _isObject2.default)(value)) { + style[property] = prefixAll(value); + // handle array values + } else if (Array.isArray(value)) { + var combinedValue = []; + + for (var i = 0, len = value.length; i < len; ++i) { + var processedValue = (0, _prefixValue2.default)(plugins, property, value[i], style, propertyPrefixMap); + (0, _addNewValuesOnly2.default)(combinedValue, processedValue || value[i]); + } + + // only modify the value if it was touched + // by any plugin to prevent unnecessary mutations + if (combinedValue.length > 0) { + style[property] = combinedValue; + } + } else { + var _processedValue = (0, _prefixValue2.default)(plugins, property, value, style, propertyPrefixMap); + + // only modify the value if it was touched + // by any plugin to prevent unnecessary mutations + if (_processedValue) { + style[property] = _processedValue; + } + + (0, _prefixProperty2.default)(propertyPrefixMap, property, style); + } + } + + return style; + } + + return prefixAll; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/300/static/index.js b/benchmark/packages/300/static/index.js new file mode 100644 index 0000000..1161e01 --- /dev/null +++ b/benchmark/packages/300/static/index.js @@ -0,0 +1,22 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createPrefixer = require('./createPrefixer'); + +var _createPrefixer2 = _interopRequireDefault(_createPrefixer); + +var _propertyPrefixMap = require('./propertyPrefixMap'); + +var _propertyPrefixMap2 = _interopRequireDefault(_propertyPrefixMap); + +var _plugins = require('./plugins'); + +var _plugins2 = _interopRequireDefault(_plugins); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +exports.default = (0, _createPrefixer2.default)(_propertyPrefixMap2.default, _plugins2.default); +module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/300/static/plugins/flex.js b/benchmark/packages/300/static/plugins/flex.js index 7e312b8..2f71afe 100644 --- a/benchmark/packages/300/static/plugins/flex.js +++ b/benchmark/packages/300/static/plugins/flex.js @@ -9,7 +9,7 @@ var values = { 'inline-flex': true }; -function flex(property, value, style) { +function flex(property, value) { if (property === 'display' && values[value]) { return ['-webkit-box', '-moz-box', '-ms-' + value + 'box', '-webkit-' + value, value]; } diff --git a/benchmark/packages/300/static/plugins/index.js b/benchmark/packages/300/static/plugins/index.js new file mode 100644 index 0000000..304fec0 --- /dev/null +++ b/benchmark/packages/300/static/plugins/index.js @@ -0,0 +1,55 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.flex = exports.flexboxOld = exports.flexboxIE = exports.transition = exports.gradient = exports.sizing = exports.cursor = exports.calc = exports.position = undefined; + +var _calc = require('./calc'); + +var _calc2 = _interopRequireDefault(_calc); + +var _cursor = require('./cursor'); + +var _cursor2 = _interopRequireDefault(_cursor); + +var _flex = require('./flex'); + +var _flex2 = _interopRequireDefault(_flex); + +var _flexboxIE = require('./flexboxIE'); + +var _flexboxIE2 = _interopRequireDefault(_flexboxIE); + +var _flexboxOld = require('./flexboxOld'); + +var _flexboxOld2 = _interopRequireDefault(_flexboxOld); + +var _gradient = require('./gradient'); + +var _gradient2 = _interopRequireDefault(_gradient); + +var _position = require('./position'); + +var _position2 = _interopRequireDefault(_position); + +var _sizing = require('./sizing'); + +var _sizing2 = _interopRequireDefault(_sizing); + +var _transition = require('./transition'); + +var _transition2 = _interopRequireDefault(_transition); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +exports.default = [_position2.default, _calc2.default, _cursor2.default, _sizing2.default, _gradient2.default, _transition2.default, _flexboxIE2.default, _flexboxOld2.default, _flex2.default]; +exports.position = _position2.default; +exports.calc = _calc2.default; +exports.cursor = _cursor2.default; +exports.sizing = _sizing2.default; +exports.gradient = _gradient2.default; +exports.transition = _transition2.default; +exports.flexboxIE = _flexboxIE2.default; +exports.flexboxOld = _flexboxOld2.default; +exports.flex = _flex2.default; \ No newline at end of file diff --git a/benchmark/packages/300/static/plugins/position.js b/benchmark/packages/300/static/plugins/position.js index ea2240c..fb83922 100644 --- a/benchmark/packages/300/static/plugins/position.js +++ b/benchmark/packages/300/static/plugins/position.js @@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.default = position; -function position(property, value, style) { +function position(property, value) { if (property === 'position' && value === 'sticky') { return ['-webkit-sticky', 'sticky']; } diff --git a/benchmark/packages/300/static/plugins/transition.js b/benchmark/packages/300/static/plugins/transition.js index c651076..7d23fb4 100644 --- a/benchmark/packages/300/static/plugins/transition.js +++ b/benchmark/packages/300/static/plugins/transition.js @@ -17,43 +17,25 @@ var _isPrefixedValue = require('../../utils/isPrefixedValue'); var _isPrefixedValue2 = _interopRequireDefault(_isPrefixedValue); -var _prefixProps = require('../prefixProps'); - -var _prefixProps2 = _interopRequireDefault(_prefixProps); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var properties = { transition: true, transitionProperty: true, WebkitTransition: true, - WebkitTransitionProperty: true + WebkitTransitionProperty: true, + MozTransition: true, + MozTransitionProperty: true }; + var prefixMapping = { Webkit: '-webkit-', Moz: '-moz-', ms: '-ms-' }; -function transition(property, value, style) { - // also check for already prefixed transitions - if (typeof value === 'string' && properties[property]) { - var outputValue = prefixValue(value); - var webkitOutput = outputValue.split(/,(?![^()]*(?:\([^()]*\))?\))/g).filter(function (value) { - return value.match(/-moz-|-ms-/) === null; - }).join(','); - - // if the property is already prefixed - if (property.indexOf('Webkit') > -1) { - return webkitOutput; - } - style['Webkit' + (0, _capitalizeString2.default)(property)] = webkitOutput; - return outputValue; - } -} - -function prefixValue(value) { +function prefixValue(value, propertyPrefixMap) { if ((0, _isPrefixedValue2.default)(value)) { return value; } @@ -64,11 +46,11 @@ function prefixValue(value) { for (var i = 0, len = multipleValues.length; i < len; ++i) { var singleValue = multipleValues[i]; var values = [singleValue]; - for (var property in _prefixProps2.default) { + for (var property in propertyPrefixMap) { var dashCaseProperty = (0, _hyphenateStyleName2.default)(property); if (singleValue.indexOf(dashCaseProperty) > -1 && dashCaseProperty !== 'order') { - var prefixes = _prefixProps2.default[property]; + var prefixes = propertyPrefixMap[property]; for (var j = 0, pLen = prefixes.length; j < pLen; ++j) { // join all prefixes and create a new value values.unshift(singleValue.replace(dashCaseProperty, prefixMapping[prefixes[j]] + dashCaseProperty)); @@ -81,4 +63,31 @@ function prefixValue(value) { return multipleValues.join(','); } + +function transition(property, value, style, propertyPrefixMap) { + // also check for already prefixed transitions + if (typeof value === 'string' && properties[property]) { + var outputValue = prefixValue(value, propertyPrefixMap); + // if the property is already prefixed + var webkitOutput = outputValue.split(/,(?![^()]*(?:\([^()]*\))?\))/g).filter(function (val) { + return val.match(/-moz-|-ms-/) === null; + }).join(','); + + if (property.indexOf('Webkit') > -1) { + return webkitOutput; + } + + var mozOutput = outputValue.split(/,(?![^()]*(?:\([^()]*\))?\))/g).filter(function (val) { + return val.match(/-webkit-|-ms-/) === null; + }).join(','); + + if (property.indexOf('Moz') > -1) { + return mozOutput; + } + + style['Webkit' + (0, _capitalizeString2.default)(property)] = webkitOutput; + style['Moz' + (0, _capitalizeString2.default)(property)] = mozOutput; + return outputValue; + } +} module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/300/static/prefixAll.js b/benchmark/packages/300/static/prefixAll.js deleted file mode 100644 index 50bb302..0000000 --- a/benchmark/packages/300/static/prefixAll.js +++ /dev/null @@ -1,104 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = prefixAll; - -var _prefixProperty = require('../utils/prefixProperty'); - -var _prefixProperty2 = _interopRequireDefault(_prefixProperty); - -var _prefixValue = require('../utils/prefixValue'); - -var _prefixValue2 = _interopRequireDefault(_prefixValue); - -var _addNewValuesOnly = require('../utils/addNewValuesOnly'); - -var _addNewValuesOnly2 = _interopRequireDefault(_addNewValuesOnly); - -var _isObject = require('../utils/isObject'); - -var _isObject2 = _interopRequireDefault(_isObject); - -var _prefixProps = require('./prefixProps'); - -var _prefixProps2 = _interopRequireDefault(_prefixProps); - -var _calc = require('./plugins/calc'); - -var _calc2 = _interopRequireDefault(_calc); - -var _cursor = require('./plugins/cursor'); - -var _cursor2 = _interopRequireDefault(_cursor); - -var _flex = require('./plugins/flex'); - -var _flex2 = _interopRequireDefault(_flex); - -var _flexboxIE = require('./plugins/flexboxIE'); - -var _flexboxIE2 = _interopRequireDefault(_flexboxIE); - -var _flexboxOld = require('./plugins/flexboxOld'); - -var _flexboxOld2 = _interopRequireDefault(_flexboxOld); - -var _gradient = require('./plugins/gradient'); - -var _gradient2 = _interopRequireDefault(_gradient); - -var _position = require('./plugins/position'); - -var _position2 = _interopRequireDefault(_position); - -var _sizing = require('./plugins/sizing'); - -var _sizing2 = _interopRequireDefault(_sizing); - -var _transition = require('./plugins/transition'); - -var _transition2 = _interopRequireDefault(_transition); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var plugins = [_position2.default, _calc2.default, _cursor2.default, _sizing2.default, _gradient2.default, _transition2.default, _flexboxIE2.default, _flexboxOld2.default, _flex2.default]; - -function prefixAll(style) { - for (var property in style) { - var value = style[property]; - - // handle nested objects - if ((0, _isObject2.default)(value)) { - style[property] = prefixAll(value); - // handle array values - } else if (Array.isArray(value)) { - var combinedValue = []; - - for (var i = 0, len = value.length; i < len; ++i) { - var processedValue = (0, _prefixValue2.default)(plugins, property, value[i], style); - (0, _addNewValuesOnly2.default)(combinedValue, processedValue || value[i]); - } - - // only modify the value if it was touched - // by any plugin to prevent unnecessary mutations - if (combinedValue.length > 0) { - style[property] = combinedValue; - } - } else { - var _processedValue = (0, _prefixValue2.default)(plugins, property, value, style); - - // only modify the value if it was touched - // by any plugin to prevent unnecessary mutations - if (_processedValue) { - style[property] = _processedValue; - } - - (0, _prefixProperty2.default)(_prefixProps2.default, property, style); - } - } - - return style; -} -module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/packages/300/static/prefixProps.js b/benchmark/packages/300/static/prefixProps.js deleted file mode 100644 index 387f84b..0000000 --- a/benchmark/packages/300/static/prefixProps.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = { "transform": ["Webkit", "ms"], "transformOrigin": ["Webkit", "ms"], "transformOriginX": ["Webkit", "ms"], "transformOriginY": ["Webkit", "ms"], "backfaceVisibility": ["Webkit"], "perspective": ["Webkit"], "perspectiveOrigin": ["Webkit"], "transformStyle": ["Webkit"], "transformOriginZ": ["Webkit"], "animation": ["Webkit"], "animationDelay": ["Webkit"], "animationDirection": ["Webkit"], "animationFillMode": ["Webkit"], "animationDuration": ["Webkit"], "animationIterationCount": ["Webkit"], "animationName": ["Webkit"], "animationPlayState": ["Webkit"], "animationTimingFunction": ["Webkit"], "appearance": ["Webkit", "Moz"], "userSelect": ["Webkit", "Moz", "ms"], "fontKerning": ["Webkit"], "textEmphasisPosition": ["Webkit"], "textEmphasis": ["Webkit"], "textEmphasisStyle": ["Webkit"], "textEmphasisColor": ["Webkit"], "boxDecorationBreak": ["Webkit"], "clipPath": ["Webkit"], "maskImage": ["Webkit"], "maskMode": ["Webkit"], "maskRepeat": ["Webkit"], "maskPosition": ["Webkit"], "maskClip": ["Webkit"], "maskOrigin": ["Webkit"], "maskSize": ["Webkit"], "maskComposite": ["Webkit"], "mask": ["Webkit"], "maskBorderSource": ["Webkit"], "maskBorderMode": ["Webkit"], "maskBorderSlice": ["Webkit"], "maskBorderWidth": ["Webkit"], "maskBorderOutset": ["Webkit"], "maskBorderRepeat": ["Webkit"], "maskBorder": ["Webkit"], "maskType": ["Webkit"], "textDecorationStyle": ["Webkit", "Moz"], "textDecorationSkip": ["Webkit", "Moz"], "textDecorationLine": ["Webkit", "Moz"], "textDecorationColor": ["Webkit", "Moz"], "filter": ["Webkit"], "fontFeatureSettings": ["Webkit", "Moz"], "breakAfter": ["Webkit", "Moz", "ms"], "breakBefore": ["Webkit", "Moz", "ms"], "breakInside": ["Webkit", "Moz", "ms"], "columnCount": ["Webkit", "Moz"], "columnFill": ["Webkit", "Moz"], "columnGap": ["Webkit", "Moz"], "columnRule": ["Webkit", "Moz"], "columnRuleColor": ["Webkit", "Moz"], "columnRuleStyle": ["Webkit", "Moz"], "columnRuleWidth": ["Webkit", "Moz"], "columns": ["Webkit", "Moz"], "columnSpan": ["Webkit", "Moz"], "columnWidth": ["Webkit", "Moz"], "flex": ["Webkit", "ms"], "flexBasis": ["Webkit"], "flexDirection": ["Webkit", "ms"], "flexGrow": ["Webkit"], "flexFlow": ["Webkit", "ms"], "flexShrink": ["Webkit"], "flexWrap": ["Webkit", "ms"], "alignContent": ["Webkit"], "alignItems": ["Webkit"], "alignSelf": ["Webkit"], "justifyContent": ["Webkit"], "order": ["Webkit"], "transitionDelay": ["Webkit"], "transitionDuration": ["Webkit"], "transitionProperty": ["Webkit"], "transitionTimingFunction": ["Webkit"], "backdropFilter": ["Webkit"], "scrollSnapType": ["Webkit", "ms"], "scrollSnapPointsX": ["Webkit", "ms"], "scrollSnapPointsY": ["Webkit", "ms"], "scrollSnapDestination": ["Webkit", "ms"], "scrollSnapCoordinate": ["Webkit", "ms"], "shapeImageThreshold": ["Webkit"], "shapeImageMargin": ["Webkit"], "shapeImageOutside": ["Webkit"], "hyphens": ["Webkit", "Moz", "ms"], "flowInto": ["Webkit", "ms"], "flowFrom": ["Webkit", "ms"], "regionFragment": ["Webkit", "ms"], "textSizeAdjust": ["Webkit", "ms"], "boxSizing": ["Moz"], "textAlignLast": ["Moz"], "tabSize": ["Moz"], "wrapFlow": ["ms"], "wrapThrough": ["ms"], "wrapMargin": ["ms"], "touchAction": ["ms"], "gridTemplateColumns": ["ms"], "gridTemplateRows": ["ms"], "gridTemplateAreas": ["ms"], "gridTemplate": ["ms"], "gridAutoColumns": ["ms"], "gridAutoRows": ["ms"], "gridAutoFlow": ["ms"], "grid": ["ms"], "gridRowStart": ["ms"], "gridColumnStart": ["ms"], "gridRowEnd": ["ms"], "gridRow": ["ms"], "gridColumn": ["ms"], "gridColumnEnd": ["ms"], "gridColumnGap": ["ms"], "gridRowGap": ["ms"], "gridArea": ["ms"], "gridGap": ["ms"] }; -module.exports = exports["default"]; \ No newline at end of file diff --git a/benchmark/packages/300/static/propertyPrefixMap.js b/benchmark/packages/300/static/propertyPrefixMap.js new file mode 100644 index 0000000..436631c --- /dev/null +++ b/benchmark/packages/300/static/propertyPrefixMap.js @@ -0,0 +1,7 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = { "appearance": ["Webkit", "Moz"], "userSelect": ["Webkit", "Moz", "ms"], "textEmphasisPosition": ["Webkit"], "textEmphasis": ["Webkit"], "textEmphasisStyle": ["Webkit"], "textEmphasisColor": ["Webkit"], "boxDecorationBreak": ["Webkit"], "clipPath": ["Webkit"], "maskImage": ["Webkit"], "maskMode": ["Webkit"], "maskRepeat": ["Webkit"], "maskPosition": ["Webkit"], "maskClip": ["Webkit"], "maskOrigin": ["Webkit"], "maskSize": ["Webkit"], "maskComposite": ["Webkit"], "mask": ["Webkit"], "maskBorderSource": ["Webkit"], "maskBorderMode": ["Webkit"], "maskBorderSlice": ["Webkit"], "maskBorderWidth": ["Webkit"], "maskBorderOutset": ["Webkit"], "maskBorderRepeat": ["Webkit"], "maskBorder": ["Webkit"], "maskType": ["Webkit"], "textDecorationStyle": ["Webkit", "Moz"], "textDecorationSkip": ["Webkit", "Moz"], "textDecorationLine": ["Webkit", "Moz"], "textDecorationColor": ["Webkit", "Moz"], "filter": ["Webkit"], "fontFeatureSettings": ["Webkit", "Moz"], "breakAfter": ["Webkit", "Moz", "ms"], "breakBefore": ["Webkit", "Moz", "ms"], "breakInside": ["Webkit", "Moz", "ms"], "columnCount": ["Webkit", "Moz"], "columnFill": ["Webkit", "Moz"], "columnGap": ["Webkit", "Moz"], "columnRule": ["Webkit", "Moz"], "columnRuleColor": ["Webkit", "Moz"], "columnRuleStyle": ["Webkit", "Moz"], "columnRuleWidth": ["Webkit", "Moz"], "columns": ["Webkit", "Moz"], "columnSpan": ["Webkit", "Moz"], "columnWidth": ["Webkit", "Moz"], "flex": ["Webkit", "Moz"], "flexBasis": ["Webkit", "Moz"], "flexDirection": ["Webkit", "Moz"], "flexGrow": ["Webkit", "Moz"], "flexFlow": ["Webkit", "Moz"], "flexShrink": ["Webkit", "Moz"], "flexWrap": ["Webkit", "Moz"], "alignContent": ["Webkit", "Moz"], "alignItems": ["Webkit", "Moz"], "alignSelf": ["Webkit", "Moz"], "justifyContent": ["Webkit", "Moz"], "order": ["Webkit", "Moz"], "transform": ["Webkit", "Moz"], "transformOrigin": ["Webkit", "Moz"], "transformOriginX": ["Webkit", "Moz"], "transformOriginY": ["Webkit", "Moz"], "backfaceVisibility": ["Webkit", "Moz"], "perspective": ["Webkit", "Moz"], "perspectiveOrigin": ["Webkit", "Moz"], "transformStyle": ["Webkit", "Moz"], "transformOriginZ": ["Webkit", "Moz"], "animation": ["Webkit", "Moz"], "animationDelay": ["Webkit", "Moz"], "animationDirection": ["Webkit", "Moz"], "animationFillMode": ["Webkit", "Moz"], "animationDuration": ["Webkit", "Moz"], "animationIterationCount": ["Webkit", "Moz"], "animationName": ["Webkit", "Moz"], "animationPlayState": ["Webkit", "Moz"], "animationTimingFunction": ["Webkit", "Moz"], "backdropFilter": ["Webkit"], "fontKerning": ["Webkit"], "scrollSnapType": ["Webkit", "ms"], "scrollSnapPointsX": ["Webkit", "ms"], "scrollSnapPointsY": ["Webkit", "ms"], "scrollSnapDestination": ["Webkit", "ms"], "scrollSnapCoordinate": ["Webkit", "ms"], "shapeImageThreshold": ["Webkit"], "shapeImageMargin": ["Webkit"], "shapeImageOutside": ["Webkit"], "hyphens": ["Webkit", "Moz", "ms"], "flowInto": ["Webkit", "ms"], "flowFrom": ["Webkit", "ms"], "regionFragment": ["Webkit", "ms"], "borderRadius": ["Moz"], "borderImage": ["Moz"], "borderImageOutset": ["Moz"], "borderImageRepeat": ["Moz"], "borderImageSlice": ["Moz"], "borderImageSource": ["Moz"], "borderImageWidth": ["Moz"], "transition": ["Moz", "Webkit"], "transitionDelay": ["Moz", "Webkit"], "transitionDuration": ["Moz", "Webkit"], "transitionProperty": ["Moz", "Webkit"], "transitionTimingFunction": ["Moz", "Webkit"], "boxSizing": ["Moz"], "textAlignLast": ["Moz"], "tabSize": ["Moz"], "resize": ["Moz"], "backgroundClip": ["Moz"], "backgroundOrigin": ["Moz"], "backgroundSize": ["Moz"], "boxShadow": ["Moz"], "wrapFlow": ["ms"], "wrapThrough": ["ms"], "wrapMargin": ["ms"], "gridTemplateColumns": ["ms"], "gridTemplateRows": ["ms"], "gridTemplateAreas": ["ms"], "gridTemplate": ["ms"], "gridAutoColumns": ["ms"], "gridAutoRows": ["ms"], "gridAutoFlow": ["ms"], "grid": ["ms"], "gridRowStart": ["ms"], "gridColumnStart": ["ms"], "gridRowEnd": ["ms"], "gridRow": ["ms"], "gridColumn": ["ms"], "gridColumnEnd": ["ms"], "gridColumnGap": ["ms"], "gridRowGap": ["ms"], "gridArea": ["ms"], "gridGap": ["ms"], "textSizeAdjust": ["Webkit", "ms"] }; +module.exports = exports["default"]; \ No newline at end of file diff --git a/benchmark/packages/300/utils/unprefixProperty.js b/benchmark/packages/300/utils/unprefixProperty.js deleted file mode 100644 index 435f8a4..0000000 --- a/benchmark/packages/300/utils/unprefixProperty.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = unprefixProperty; - -var _isPrefixedProperty = require('./isPrefixedProperty'); - -var _isPrefixedProperty2 = _interopRequireDefault(_isPrefixedProperty); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var regex = /^(Webkit|Moz|O|ms)/; -function unprefixProperty(property) { - if ((0, _isPrefixedProperty2.default)(property)) { - var unprefixed = property.replace(/^(ms|Webkit|Moz|O)/, ''); - return unprefixed.charAt(0).toLowerCase() + unprefixed.slice(1); - } - return property; -} -module.exports = exports['default']; \ No newline at end of file diff --git a/benchmark/size/300-dynamic.js b/benchmark/size/300-dynamic.js index fc80f2d..0c4e248 100644 --- a/benchmark/size/300-dynamic.js +++ b/benchmark/size/300-dynamic.js @@ -1 +1 @@ -import InlineStylePrefixer from '../packages/300/dynamic/Prefixer' +import InlineStylePrefixer from '../packages/300/dynamic/index' diff --git a/benchmark/size/300-static.js b/benchmark/size/300-static.js index adecaee..f615114 100644 --- a/benchmark/size/300-static.js +++ b/benchmark/size/300-static.js @@ -1 +1 @@ -import InlineStylePrefixerStatic from '../packages/300/static/prefixAll' +import InlineStylePrefixerStatic from '../packages/300/static/index' diff --git a/benchmark/static/cases/300-static.js b/benchmark/static/cases/300-static.js index 9c49958..f54e2de 100644 --- a/benchmark/static/cases/300-static.js +++ b/benchmark/static/cases/300-static.js @@ -1,4 +1,4 @@ -import prefixAll from '../../packages/300/static/prefixAll' +import prefixAll from '../../packages/300/static' export const static300 = () => { const styles = { diff --git a/buildPackage.js b/buildPackage.js index e022713..b45d2f7 100644 --- a/buildPackage.js +++ b/buildPackage.js @@ -1,62 +1,73 @@ -/* eslint-disable no-console */ - -import rollup from 'rollup' -import babel from 'rollup-plugin-babel' -import uglify from 'rollup-plugin-uglify' -import commonjs from 'rollup-plugin-commonjs' -import nodeResolver from 'rollup-plugin-node-resolve' - -const packages = { - 'inline-style-prefixer': { - name: 'InlineStylePrefixer', - entry: 'Prefixer.js' - }, - 'inline-style-prefix-all': { - name: 'InlineStylePrefixAll', - entry: '/static/prefixAll.js' - } -} - -// Small helper to error and exit on fail -const errorOnFail = err => { - if (err) { - console.error(err) - process.exit(1) - } -} - -const babelPlugin = babel({ - babelrc: false, - presets: [ 'es2015-rollup', 'stage-0' ] -}) - -const nodeResolverPlugin = nodeResolver({ jsnext: true, main: true }) -const commonJSPlugin = commonjs({ include: 'node_modules/**' }) -const uglifyPlugin = uglify() - -const plugins = [ babelPlugin, nodeResolverPlugin, commonJSPlugin ] - -function rollupConfig(pkg, info, minify) { - return { - entry: 'modules/' + info.entry, - plugins: minify ? plugins.concat(uglifyPlugin) : plugins +/* eslint-disable no-console */ +import rollup from 'rollup' +import babel from 'rollup-plugin-babel' +import uglify from 'rollup-plugin-uglify' +import commonjs from 'rollup-plugin-commonjs' +import nodeResolver from 'rollup-plugin-node-resolve' + +const packages = { + 'inline-style-prefixer': { + name: 'InlineStylePrefixer', + entry: '/dynamic/index.js' + }, + 'inline-style-prefix-all': { + name: 'InlineStylePrefixAll', + entry: '/static/index.js' } -} - -function bundleConfig(pkg, info, minify) { - return { - format: 'umd', - moduleName: info.name, - dest: 'dist/' + pkg + (minify ? '.min' : '') + '.js', - sourceMap: !minify +} + +// Small helper to error and exit on fail +const errorOnFail = (err) => { + if (err) { + console.error(err) + process.exit(1) } -} - -function buildPackage(pkg) { - rollup.rollup(rollupConfig(pkg, packages[pkg], process.env.NODE_ENV === 'production')).then(bundle => { - bundle.write(bundleConfig(pkg, packages[pkg], process.env.NODE_ENV === 'production')) - console.log('Successfully bundled ' + packages[pkg].name + (process.env.NODE_ENV === 'production' ? ' (minified).' : '.')) - }).catch(errorOnFail) -} - -Object.keys(packages).forEach(pkg => buildPackage(pkg)) +} + +const babelPlugin = babel({ + babelrc: false, + presets: ['es2015-rollup', 'react', 'stage-0'] +}) + +const nodeResolverPlugin = nodeResolver({ + jsnext: true, + main: true +}) +const commonJSPlugin = commonjs({ include: 'node_modules/**' }) +const uglifyPlugin = uglify() + +const plugins = [babelPlugin, nodeResolverPlugin, commonJSPlugin] + +function rollupConfig(pkg, info, minify) { + return { + entry: `modules/${info.entry}`, + plugins: minify ? plugins.concat(uglifyPlugin) : plugins + } +} + +function bundleConfig(pkg, info, minify) { + return { + format: 'umd', + moduleName: info.name, + dest: `dist/${pkg}${minify ? '.min' : ''}.js`, + sourceMap: !minify + } +} + +function buildPackage(pkg) { + rollup + .rollup(rollupConfig(pkg, packages[pkg], process.env.NODE_ENV === 'production')) + .then((bundle) => { + bundle.write( + bundleConfig(pkg, packages[pkg], process.env.NODE_ENV === 'production') + ) + console.log( + `Successfully bundled ${packages[pkg].name}${process.env.NODE_ENV === 'production' + ? ' (minified).' + : '.'}` + ) + }) + .catch(errorOnFail) +} + +Object.keys(packages).forEach(pkg => buildPackage(pkg)) diff --git a/config.js b/config.js deleted file mode 100644 index e6f07ed..0000000 --- a/config.js +++ /dev/null @@ -1,15 +0,0 @@ -// Minimum supported browser version -module.exports = { - chrome: 30, - android: 4, - firefox: 25, - ios_saf: 6, - safari: 6, - ie: 9, - ie_mob: 9, - edge: 12, - opera: 13, - op_mini: 5, - and_uc: 9, - and_chr: 30 -} diff --git a/dist/inline-style-prefix-all.js b/dist/inline-style-prefix-all.js new file mode 100644 index 0000000..d0d328b --- /dev/null +++ b/dist/inline-style-prefix-all.js @@ -0,0 +1,404 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.InlineStylePrefixAll = factory()); +}(this, function () { 'use strict'; + + var babelHelpers = {}; + + babelHelpers.classCallCheck = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + }; + + babelHelpers.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; + }; + }(); + + babelHelpers; + + + var __commonjs_global = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : this; + function __commonjs(fn, module) { return module = { exports: {} }, fn(module, module.exports, __commonjs_global), module.exports; } + + function capitalizeString(str) { + return str.charAt(0).toUpperCase() + str.slice(1); + } + + function prefixProperty(prefixProperties, property, style) { + var requiredPrefixes = prefixProperties[property]; + + if (requiredPrefixes) { + for (var i = 0, len = requiredPrefixes.length; i < len; ++i) { + style[requiredPrefixes[i] + capitalizeString(property)] = style[property]; + } + } + } + + function prefixValue(plugins, property, value, style, metaData) { + for (var i = 0, len = plugins.length; i < len; ++i) { + var processedValue = plugins[i](property, value, style, metaData); + + // we can stop processing if a value is returned + // as all plugin criteria are unique + if (processedValue) { + return processedValue; + } + } + } + + function addIfNew(list, value) { + if (list.indexOf(value) === -1) { + list.push(value); + } + } + + function addNewValuesOnly(list, values) { + if (Array.isArray(values)) { + for (var i = 0, len = values.length; i < len; ++i) { + addIfNew(list, values[i]); + } + } else { + addIfNew(list, values); + } + } + + function isObject(value) { + return value instanceof Object && !Array.isArray(value); + } + + function createPrefixer(propertyPrefixMap) { + var plugins = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + + function prefixAll(style) { + for (var property in style) { + var value = style[property]; + + // handle nested objects + if (isObject(value)) { + style[property] = prefixAll(value); + // handle array values + } else if (Array.isArray(value)) { + var combinedValue = []; + + for (var i = 0, len = value.length; i < len; ++i) { + var processedValue = prefixValue(plugins, property, value[i], style, propertyPrefixMap); + addNewValuesOnly(combinedValue, processedValue || value[i]); + } + + // only modify the value if it was touched + // by any plugin to prevent unnecessary mutations + if (combinedValue.length > 0) { + style[property] = combinedValue; + } + } else { + var _processedValue = prefixValue(plugins, property, value, style, propertyPrefixMap); + + // only modify the value if it was touched + // by any plugin to prevent unnecessary mutations + if (_processedValue) { + style[property] = _processedValue; + } + + prefixProperty(propertyPrefixMap, property, style); + } + } + + return style; + } + + return prefixAll; + } + + var propertyPrefixMap = { "appearance": ["Webkit", "Moz"], "userSelect": ["Webkit", "Moz", "ms"], "textEmphasisPosition": ["Webkit"], "textEmphasis": ["Webkit"], "textEmphasisStyle": ["Webkit"], "textEmphasisColor": ["Webkit"], "boxDecorationBreak": ["Webkit"], "clipPath": ["Webkit"], "maskImage": ["Webkit"], "maskMode": ["Webkit"], "maskRepeat": ["Webkit"], "maskPosition": ["Webkit"], "maskClip": ["Webkit"], "maskOrigin": ["Webkit"], "maskSize": ["Webkit"], "maskComposite": ["Webkit"], "mask": ["Webkit"], "maskBorderSource": ["Webkit"], "maskBorderMode": ["Webkit"], "maskBorderSlice": ["Webkit"], "maskBorderWidth": ["Webkit"], "maskBorderOutset": ["Webkit"], "maskBorderRepeat": ["Webkit"], "maskBorder": ["Webkit"], "maskType": ["Webkit"], "textDecorationStyle": ["Webkit", "Moz"], "textDecorationSkip": ["Webkit", "Moz"], "textDecorationLine": ["Webkit", "Moz"], "textDecorationColor": ["Webkit", "Moz"], "filter": ["Webkit"], "fontFeatureSettings": ["Webkit", "Moz"], "breakAfter": ["Webkit", "Moz", "ms"], "breakBefore": ["Webkit", "Moz", "ms"], "breakInside": ["Webkit", "Moz", "ms"], "columnCount": ["Webkit", "Moz"], "columnFill": ["Webkit", "Moz"], "columnGap": ["Webkit", "Moz"], "columnRule": ["Webkit", "Moz"], "columnRuleColor": ["Webkit", "Moz"], "columnRuleStyle": ["Webkit", "Moz"], "columnRuleWidth": ["Webkit", "Moz"], "columns": ["Webkit", "Moz"], "columnSpan": ["Webkit", "Moz"], "columnWidth": ["Webkit", "Moz"], "flex": ["Webkit", "Moz"], "flexBasis": ["Webkit"], "flexDirection": ["Webkit"], "flexGrow": ["Webkit"], "flexFlow": ["Webkit", "Moz"], "flexShrink": ["Webkit"], "flexWrap": ["Webkit", "Moz"], "alignContent": ["Webkit"], "alignItems": ["Webkit"], "alignSelf": ["Webkit"], "justifyContent": ["Webkit"], "order": ["Webkit"], "transform": ["Webkit", "Moz"], "transformOrigin": ["Webkit", "Moz"], "transformOriginX": ["Webkit", "Moz"], "transformOriginY": ["Webkit", "Moz"], "backfaceVisibility": ["Webkit", "Moz"], "perspective": ["Webkit", "Moz"], "perspectiveOrigin": ["Webkit", "Moz"], "transformStyle": ["Webkit", "Moz"], "transformOriginZ": ["Webkit", "Moz"], "animation": ["Webkit", "Moz"], "animationDelay": ["Webkit", "Moz"], "animationDirection": ["Webkit", "Moz"], "animationFillMode": ["Webkit", "Moz"], "animationDuration": ["Webkit", "Moz"], "animationIterationCount": ["Webkit", "Moz"], "animationName": ["Webkit", "Moz"], "animationPlayState": ["Webkit", "Moz"], "animationTimingFunction": ["Webkit", "Moz"], "backdropFilter": ["Webkit"], "fontKerning": ["Webkit"], "scrollSnapType": ["Webkit", "ms"], "scrollSnapPointsX": ["Webkit", "ms"], "scrollSnapPointsY": ["Webkit", "ms"], "scrollSnapDestination": ["Webkit", "ms"], "scrollSnapCoordinate": ["Webkit", "ms"], "shapeImageThreshold": ["Webkit"], "shapeImageMargin": ["Webkit"], "shapeImageOutside": ["Webkit"], "hyphens": ["Webkit", "Moz", "ms"], "flowInto": ["Webkit", "ms"], "flowFrom": ["Webkit", "ms"], "regionFragment": ["Webkit", "ms"], "borderRadius": ["Moz"], "borderImage": ["Moz"], "borderImageOutset": ["Moz"], "borderImageRepeat": ["Moz"], "borderImageSlice": ["Moz"], "borderImageSource": ["Moz"], "borderImageWidth": ["Moz"], "transitionDelay": ["Moz", "Webkit"], "transitionDuration": ["Moz", "Webkit"], "transitionProperty": ["Moz", "Webkit"], "transitionTimingFunction": ["Moz", "Webkit"], "boxSizing": ["Moz"], "textAlignLast": ["Moz"], "tabSize": ["Moz"], "resize": ["Moz"], "backgroundClip": ["Moz"], "backgroundOrigin": ["Moz"], "backgroundSize": ["Moz"], "boxShadow": ["Moz"], "wrapFlow": ["ms"], "wrapThrough": ["ms"], "wrapMargin": ["ms"], "gridTemplateColumns": ["ms"], "gridTemplateRows": ["ms"], "gridTemplateAreas": ["ms"], "gridTemplate": ["ms"], "gridAutoColumns": ["ms"], "gridAutoRows": ["ms"], "gridAutoFlow": ["ms"], "grid": ["ms"], "gridRowStart": ["ms"], "gridColumnStart": ["ms"], "gridRowEnd": ["ms"], "gridRow": ["ms"], "gridColumn": ["ms"], "gridColumnEnd": ["ms"], "gridColumnGap": ["ms"], "gridRowGap": ["ms"], "gridArea": ["ms"], "gridGap": ["ms"], "textSizeAdjust": ["Webkit", "ms"] }; + + var regex = /-webkit-|-moz-|-ms-/; + function isPrefixedValue(value) { + if (Array.isArray(value)) { + value = value.join(','); + } + + return value.match(regex) !== null; + } + + var prefixes = ['-webkit-', '-moz-', '']; + + function calc(property, value) { + if (typeof value === 'string' && !isPrefixedValue(value) && value.indexOf('calc(') > -1) { + return prefixes.map(function (prefix) { + return value.replace(/calc\(/g, prefix + 'calc('); + }); + } + } + + var prefixes$1 = ['-webkit-', '-moz-', '']; + + var values = { + 'zoom-in': true, + 'zoom-out': true, + grab: true, + grabbing: true + }; + + function cursor(property, value) { + if (property === 'cursor' && values[value]) { + return prefixes$1.map(function (prefix) { + return prefix + value; + }); + } + } + + // http://caniuse.com/#search=cross-fade + var prefixes$2 = ['-webkit-', '']; + + function crossFade(property, value) { + if (typeof value === 'string' && !isPrefixedValue(value) && value.indexOf('cross-fade(') > -1) { + return prefixes$2.map(function (prefix) { + return value.replace(/cross-fade\(/g, prefix + 'cross-fade('); + }); + } + } + + // http://caniuse.com/#feat=css-filter-function + var prefixes$3 = ['-webkit-', '']; + + function filter(property, value) { + if (typeof value === 'string' && !isPrefixedValue(value) && value.indexOf('filter(') > -1) { + return prefixes$3.map(function (prefix) { + return value.replace(/filter\(/g, prefix + 'filter('); + }); + } + } + + var values$1 = { + flex: true, + 'inline-flex': true + }; + + function flex(property, value) { + if (property === 'display' && values$1[value]) { + return ['-webkit-box', '-moz-box', '-ms-' + value + 'box', '-webkit-' + value, value]; + } + } + + var alternativeValues = { + 'space-around': 'distribute', + 'space-between': 'justify', + 'flex-start': 'start', + 'flex-end': 'end' + }; + var alternativeProps = { + alignContent: 'msFlexLinePack', + alignSelf: 'msFlexItemAlign', + alignItems: 'msFlexAlign', + justifyContent: 'msFlexPack', + order: 'msFlexOrder', + flexGrow: 'msFlexPositive', + flexShrink: 'msFlexNegative', + flexBasis: 'msPreferredSize' + }; + + function flexboxIE(property, value, style) { + if (alternativeProps[property]) { + style[alternativeProps[property]] = alternativeValues[value] || value; + } + } + + var alternativeValues$1 = { + 'space-around': 'justify', + 'space-between': 'justify', + 'flex-start': 'start', + 'flex-end': 'end', + 'wrap-reverse': 'multiple', + wrap: 'multiple' + }; + + var alternativeProps$1 = { + alignItems: 'WebkitBoxAlign', + justifyContent: 'WebkitBoxPack', + flexWrap: 'WebkitBoxLines' + }; + + function flexboxOld(property, value, style) { + if (property === 'flexDirection' && typeof value === 'string') { + if (value.indexOf('column') > -1) { + style.WebkitBoxOrient = 'vertical'; + } else { + style.WebkitBoxOrient = 'horizontal'; + } + if (value.indexOf('reverse') > -1) { + style.WebkitBoxDirection = 'reverse'; + } else { + style.WebkitBoxDirection = 'normal'; + } + } + if (alternativeProps$1[property]) { + style[alternativeProps$1[property]] = alternativeValues$1[value] || value; + } + } + + var prefixes$4 = ['-webkit-', '-moz-', '']; + var values$2 = /linear-gradient|radial-gradient|repeating-linear-gradient|repeating-radial-gradient/; + + function gradient(property, value) { + if (typeof value === 'string' && !isPrefixedValue(value) && value.match(values$2) !== null) { + return prefixes$4.map(function (prefix) { + return prefix + value; + }); + } + } + + // http://caniuse.com/#feat=css-image-set + var prefixes$5 = ['-webkit-', '']; + + function imageSet(property, value) { + if (typeof value === 'string' && !isPrefixedValue(value) && value.indexOf('image-set(') > -1) { + return prefixes$5.map(function (prefix) { + return value.replace(/image-set\(/g, prefix + 'image-set('); + }); + } + } + + function position(property, value) { + if (property === 'position' && value === 'sticky') { + return ['-webkit-sticky', 'sticky']; + } + } + + var prefixes$6 = ['-webkit-', '-moz-', '']; + + var properties = { + maxHeight: true, + maxWidth: true, + width: true, + height: true, + columnWidth: true, + minWidth: true, + minHeight: true + }; + var values$3 = { + 'min-content': true, + 'max-content': true, + 'fill-available': true, + 'fit-content': true, + 'contain-floats': true + }; + + function sizing(property, value) { + if (properties[property] && values$3[value]) { + return prefixes$6.map(function (prefix) { + return prefix + value; + }); + } + } + + var index$1 = __commonjs(function (module) { + 'use strict'; + + var uppercasePattern = /[A-Z]/g; + var msPattern = /^ms-/; + var cache = {}; + + function hyphenateStyleName(string) { + return string in cache ? cache[string] : cache[string] = string.replace(uppercasePattern, '-$&').toLowerCase().replace(msPattern, '-ms-'); + } + + module.exports = hyphenateStyleName; + }); + + var hyphenateStyleName = (index$1 && typeof index$1 === 'object' && 'default' in index$1 ? index$1['default'] : index$1); + + var properties$1 = { + transition: true, + transitionProperty: true, + WebkitTransition: true, + WebkitTransitionProperty: true, + MozTransition: true, + MozTransitionProperty: true + }; + + var prefixMapping = { + Webkit: '-webkit-', + Moz: '-moz-', + ms: '-ms-' + }; + + function prefixValue$1(value, propertyPrefixMap) { + if (isPrefixedValue(value)) { + return value; + } + + // only split multi values, not cubic beziers + var multipleValues = value.split(/,(?![^()]*(?:\([^()]*\))?\))/g); + + for (var i = 0, len = multipleValues.length; i < len; ++i) { + var singleValue = multipleValues[i]; + var values = [singleValue]; + for (var property in propertyPrefixMap) { + var dashCaseProperty = hyphenateStyleName(property); + + if (singleValue.indexOf(dashCaseProperty) > -1 && dashCaseProperty !== 'order') { + var prefixes = propertyPrefixMap[property]; + for (var j = 0, pLen = prefixes.length; j < pLen; ++j) { + // join all prefixes and create a new value + values.unshift(singleValue.replace(dashCaseProperty, prefixMapping[prefixes[j]] + dashCaseProperty)); + } + } + } + + multipleValues[i] = values.join(','); + } + + return multipleValues.join(','); + } + + function transition(property, value, style, propertyPrefixMap) { + // also check for already prefixed transitions + if (typeof value === 'string' && properties$1[property]) { + var outputValue = prefixValue$1(value, propertyPrefixMap); + // if the property is already prefixed + var webkitOutput = outputValue.split(/,(?![^()]*(?:\([^()]*\))?\))/g).filter(function (val) { + return val.match(/-moz-|-ms-/) === null; + }).join(','); + + if (property.indexOf('Webkit') > -1) { + return webkitOutput; + } + + var mozOutput = outputValue.split(/,(?![^()]*(?:\([^()]*\))?\))/g).filter(function (val) { + return val.match(/-webkit-|-ms-/) === null; + }).join(','); + + if (property.indexOf('Moz') > -1) { + return mozOutput; + } + + style['Webkit' + capitalizeString(property)] = webkitOutput; + style['Moz' + capitalizeString(property)] = mozOutput; + return outputValue; + } + } + + var plugins = [position, calc, imageSet, crossFade, filter, cursor, sizing, gradient, transition, flexboxIE, flexboxOld, flex]; + + var index = createPrefixer(propertyPrefixMap, plugins); + + return index; + +})); +//# sourceMappingURL=inline-style-prefix-all.js.map \ No newline at end of file diff --git a/dist/inline-style-prefix-all.js.map b/dist/inline-style-prefix-all.js.map new file mode 100644 index 0000000..81cf5c0 --- /dev/null +++ b/dist/inline-style-prefix-all.js.map @@ -0,0 +1 @@ +{"version":3,"file":"inline-style-prefix-all.js","sources":["../modules/utils/capitalizeString.js","../modules/utils/prefixProperty.js","../modules/utils/prefixValue.js","../modules/utils/addNewValuesOnly.js","../modules/utils/isObject.js","../modules/static/createPrefixer.js","../modules/static/propertyPrefixMap.js","../modules/utils/isPrefixedValue.js","../modules/static/plugins/calc.js","../modules/static/plugins/cursor.js","../modules/static/plugins/crossFade.js","../modules/static/plugins/filter.js","../modules/static/plugins/flex.js","../modules/static/plugins/flexboxIE.js","../modules/static/plugins/flexboxOld.js","../modules/static/plugins/gradient.js","../modules/static/plugins/imageSet.js","../modules/static/plugins/position.js","../modules/static/plugins/sizing.js","../node_modules/hyphenate-style-name/index.js","../modules/static/plugins/transition.js","../modules/static/plugins/index.js","../modules//static/index.js"],"sourcesContent":["/* @flow */\nexport default function capitalizeString(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1)\n}\n","import capitalizeString from './capitalizeString'\n\n/* @flow */\nexport default function prefixProperty(\n prefixProperties: Object,\n property: string,\n style: Object\n): void {\n const requiredPrefixes = prefixProperties[property]\n\n if (requiredPrefixes) {\n for (let i = 0, len = requiredPrefixes.length; i < len; ++i) {\n style[requiredPrefixes[i] + capitalizeString(property)] = style[property]\n }\n }\n}\n","/* @flow */\nexport default function prefixValue(\n plugins: Array,\n property: string,\n value: any,\n style: Object,\n metaData: ?Object\n): ?any {\n for (let i = 0, len = plugins.length; i < len; ++i) {\n const processedValue = plugins[i](property, value, style, metaData)\n\n // we can stop processing if a value is returned\n // as all plugin criteria are unique\n if (processedValue) {\n return processedValue\n }\n }\n}\n","/* @flow */\nfunction addIfNew(list: Array, value: any): void {\n if (list.indexOf(value) === -1) {\n list.push(value)\n }\n}\n\nexport default function addNewValuesOnly(list: Array, values: Array | any): void {\n if (Array.isArray(values)) {\n for (let i = 0, len = values.length; i < len; ++i) {\n addIfNew(list, values[i])\n }\n } else {\n addIfNew(list, values)\n }\n}\n","/* @flow */\nexport default function isObject(value: any): boolean {\n return value instanceof Object && !Array.isArray(value)\n}\n","/* @flow */\nimport prefixProperty from '../utils/prefixProperty'\nimport prefixValue from '../utils/prefixValue'\n\nimport addNewValuesOnly from '../utils/addNewValuesOnly'\nimport isObject from '../utils/isObject'\n\nexport default function createPrefixer(\n propertyPrefixMap: Object,\n plugins: Array = []\n) {\n function prefixAll(style: Object): Object {\n for (const property in style) {\n const value = style[property]\n\n // handle nested objects\n if (isObject(value)) {\n style[property] = prefixAll(value)\n // handle array values\n } else if (Array.isArray(value)) {\n const combinedValue = []\n\n for (let i = 0, len = value.length; i < len; ++i) {\n const processedValue = prefixValue(\n plugins,\n property,\n value[i],\n style,\n propertyPrefixMap\n )\n addNewValuesOnly(combinedValue, processedValue || value[i])\n }\n\n // only modify the value if it was touched\n // by any plugin to prevent unnecessary mutations\n if (combinedValue.length > 0) {\n style[property] = combinedValue\n }\n } else {\n const processedValue = prefixValue(\n plugins,\n property,\n value,\n style,\n propertyPrefixMap\n )\n\n // only modify the value if it was touched\n // by any plugin to prevent unnecessary mutations\n if (processedValue) {\n style[property] = processedValue\n }\n\n prefixProperty(propertyPrefixMap, property, style)\n }\n }\n\n return style\n }\n\n return prefixAll\n}\n","export default {\"appearance\":[\"Webkit\",\"Moz\"],\"userSelect\":[\"Webkit\",\"Moz\",\"ms\"],\"textEmphasisPosition\":[\"Webkit\"],\"textEmphasis\":[\"Webkit\"],\"textEmphasisStyle\":[\"Webkit\"],\"textEmphasisColor\":[\"Webkit\"],\"boxDecorationBreak\":[\"Webkit\"],\"clipPath\":[\"Webkit\"],\"maskImage\":[\"Webkit\"],\"maskMode\":[\"Webkit\"],\"maskRepeat\":[\"Webkit\"],\"maskPosition\":[\"Webkit\"],\"maskClip\":[\"Webkit\"],\"maskOrigin\":[\"Webkit\"],\"maskSize\":[\"Webkit\"],\"maskComposite\":[\"Webkit\"],\"mask\":[\"Webkit\"],\"maskBorderSource\":[\"Webkit\"],\"maskBorderMode\":[\"Webkit\"],\"maskBorderSlice\":[\"Webkit\"],\"maskBorderWidth\":[\"Webkit\"],\"maskBorderOutset\":[\"Webkit\"],\"maskBorderRepeat\":[\"Webkit\"],\"maskBorder\":[\"Webkit\"],\"maskType\":[\"Webkit\"],\"textDecorationStyle\":[\"Webkit\",\"Moz\"],\"textDecorationSkip\":[\"Webkit\",\"Moz\"],\"textDecorationLine\":[\"Webkit\",\"Moz\"],\"textDecorationColor\":[\"Webkit\",\"Moz\"],\"filter\":[\"Webkit\"],\"fontFeatureSettings\":[\"Webkit\",\"Moz\"],\"breakAfter\":[\"Webkit\",\"Moz\",\"ms\"],\"breakBefore\":[\"Webkit\",\"Moz\",\"ms\"],\"breakInside\":[\"Webkit\",\"Moz\",\"ms\"],\"columnCount\":[\"Webkit\",\"Moz\"],\"columnFill\":[\"Webkit\",\"Moz\"],\"columnGap\":[\"Webkit\",\"Moz\"],\"columnRule\":[\"Webkit\",\"Moz\"],\"columnRuleColor\":[\"Webkit\",\"Moz\"],\"columnRuleStyle\":[\"Webkit\",\"Moz\"],\"columnRuleWidth\":[\"Webkit\",\"Moz\"],\"columns\":[\"Webkit\",\"Moz\"],\"columnSpan\":[\"Webkit\",\"Moz\"],\"columnWidth\":[\"Webkit\",\"Moz\"],\"flex\":[\"Webkit\",\"Moz\"],\"flexBasis\":[\"Webkit\"],\"flexDirection\":[\"Webkit\"],\"flexGrow\":[\"Webkit\"],\"flexFlow\":[\"Webkit\",\"Moz\"],\"flexShrink\":[\"Webkit\"],\"flexWrap\":[\"Webkit\",\"Moz\"],\"alignContent\":[\"Webkit\"],\"alignItems\":[\"Webkit\"],\"alignSelf\":[\"Webkit\"],\"justifyContent\":[\"Webkit\"],\"order\":[\"Webkit\"],\"transform\":[\"Webkit\",\"Moz\"],\"transformOrigin\":[\"Webkit\",\"Moz\"],\"transformOriginX\":[\"Webkit\",\"Moz\"],\"transformOriginY\":[\"Webkit\",\"Moz\"],\"backfaceVisibility\":[\"Webkit\",\"Moz\"],\"perspective\":[\"Webkit\",\"Moz\"],\"perspectiveOrigin\":[\"Webkit\",\"Moz\"],\"transformStyle\":[\"Webkit\",\"Moz\"],\"transformOriginZ\":[\"Webkit\",\"Moz\"],\"animation\":[\"Webkit\",\"Moz\"],\"animationDelay\":[\"Webkit\",\"Moz\"],\"animationDirection\":[\"Webkit\",\"Moz\"],\"animationFillMode\":[\"Webkit\",\"Moz\"],\"animationDuration\":[\"Webkit\",\"Moz\"],\"animationIterationCount\":[\"Webkit\",\"Moz\"],\"animationName\":[\"Webkit\",\"Moz\"],\"animationPlayState\":[\"Webkit\",\"Moz\"],\"animationTimingFunction\":[\"Webkit\",\"Moz\"],\"backdropFilter\":[\"Webkit\"],\"fontKerning\":[\"Webkit\"],\"scrollSnapType\":[\"Webkit\",\"ms\"],\"scrollSnapPointsX\":[\"Webkit\",\"ms\"],\"scrollSnapPointsY\":[\"Webkit\",\"ms\"],\"scrollSnapDestination\":[\"Webkit\",\"ms\"],\"scrollSnapCoordinate\":[\"Webkit\",\"ms\"],\"shapeImageThreshold\":[\"Webkit\"],\"shapeImageMargin\":[\"Webkit\"],\"shapeImageOutside\":[\"Webkit\"],\"hyphens\":[\"Webkit\",\"Moz\",\"ms\"],\"flowInto\":[\"Webkit\",\"ms\"],\"flowFrom\":[\"Webkit\",\"ms\"],\"regionFragment\":[\"Webkit\",\"ms\"],\"borderRadius\":[\"Moz\"],\"borderImage\":[\"Moz\"],\"borderImageOutset\":[\"Moz\"],\"borderImageRepeat\":[\"Moz\"],\"borderImageSlice\":[\"Moz\"],\"borderImageSource\":[\"Moz\"],\"borderImageWidth\":[\"Moz\"],\"transitionDelay\":[\"Moz\",\"Webkit\"],\"transitionDuration\":[\"Moz\",\"Webkit\"],\"transitionProperty\":[\"Moz\",\"Webkit\"],\"transitionTimingFunction\":[\"Moz\",\"Webkit\"],\"boxSizing\":[\"Moz\"],\"textAlignLast\":[\"Moz\"],\"tabSize\":[\"Moz\"],\"resize\":[\"Moz\"],\"backgroundClip\":[\"Moz\"],\"backgroundOrigin\":[\"Moz\"],\"backgroundSize\":[\"Moz\"],\"boxShadow\":[\"Moz\"],\"wrapFlow\":[\"ms\"],\"wrapThrough\":[\"ms\"],\"wrapMargin\":[\"ms\"],\"gridTemplateColumns\":[\"ms\"],\"gridTemplateRows\":[\"ms\"],\"gridTemplateAreas\":[\"ms\"],\"gridTemplate\":[\"ms\"],\"gridAutoColumns\":[\"ms\"],\"gridAutoRows\":[\"ms\"],\"gridAutoFlow\":[\"ms\"],\"grid\":[\"ms\"],\"gridRowStart\":[\"ms\"],\"gridColumnStart\":[\"ms\"],\"gridRowEnd\":[\"ms\"],\"gridRow\":[\"ms\"],\"gridColumn\":[\"ms\"],\"gridColumnEnd\":[\"ms\"],\"gridColumnGap\":[\"ms\"],\"gridRowGap\":[\"ms\"],\"gridArea\":[\"ms\"],\"gridGap\":[\"ms\"],\"textSizeAdjust\":[\"Webkit\",\"ms\"]}","/* @flow */\n\nconst regex = /-webkit-|-moz-|-ms-/\nexport default function isPrefixedValue(value: any): boolean {\n if (Array.isArray(value)) {\n value = value.join(',')\n }\n\n return value.match(regex) !== null\n}\n","/* @flow */\nimport isPrefixedValue from '../../utils/isPrefixedValue'\n\nconst prefixes = ['-webkit-', '-moz-', '']\n\nexport default function calc(property: string, value: any): ?Array {\n if (typeof value === 'string' && !isPrefixedValue(value) && value.indexOf('calc(') > -1) {\n return prefixes.map(prefix => value.replace(/calc\\(/g, `${prefix}calc(`))\n }\n}\n","/* @flow */\nconst prefixes = ['-webkit-', '-moz-', '']\n\nconst values = {\n 'zoom-in': true,\n 'zoom-out': true,\n grab: true,\n grabbing: true\n}\n\nexport default function cursor(property: string, value: any): ?Array {\n if (property === 'cursor' && values[value]) {\n return prefixes.map(prefix => prefix + value)\n }\n}\n","/* @flow */\nimport isPrefixedValue from '../../utils/isPrefixedValue'\n\n// http://caniuse.com/#search=cross-fade\nconst prefixes = ['-webkit-', '']\n\nexport default function crossFade(property: string, value: any): ?Array {\n if (typeof value === 'string' && !isPrefixedValue(value) && value.indexOf('cross-fade(') > -1) {\n return prefixes.map(prefix => value.replace(/cross-fade\\(/g, `${prefix}cross-fade(`))\n }\n}\n","/* @flow */\nimport isPrefixedValue from '../../utils/isPrefixedValue'\n\n// http://caniuse.com/#feat=css-filter-function\nconst prefixes = ['-webkit-', '']\n\nexport default function filter(property: string, value: any): ?Array {\n if (typeof value === 'string' && !isPrefixedValue(value) && value.indexOf('filter(') > -1) {\n return prefixes.map(prefix => value.replace(/filter\\(/g, `${prefix}filter(`))\n }\n}\n","/* @flow */\nconst values = {\n flex: true,\n 'inline-flex': true\n}\n\nexport default function flex(property: string, value: any): ?Array {\n if (property === 'display' && values[value]) {\n return ['-webkit-box', '-moz-box', `-ms-${value}box`, `-webkit-${value}`, value]\n }\n}\n","/* @flow */\nconst alternativeValues = {\n 'space-around': 'distribute',\n 'space-between': 'justify',\n 'flex-start': 'start',\n 'flex-end': 'end'\n}\nconst alternativeProps = {\n alignContent: 'msFlexLinePack',\n alignSelf: 'msFlexItemAlign',\n alignItems: 'msFlexAlign',\n justifyContent: 'msFlexPack',\n order: 'msFlexOrder',\n flexGrow: 'msFlexPositive',\n flexShrink: 'msFlexNegative',\n flexBasis: 'msPreferredSize'\n}\n\nexport default function flexboxIE(\n property: string,\n value: any,\n style: Object\n): void {\n if (alternativeProps[property]) {\n style[alternativeProps[property]] = alternativeValues[value] || value\n }\n}\n","/* @flow */\nconst alternativeValues = {\n 'space-around': 'justify',\n 'space-between': 'justify',\n 'flex-start': 'start',\n 'flex-end': 'end',\n 'wrap-reverse': 'multiple',\n wrap: 'multiple'\n}\n\nconst alternativeProps = {\n alignItems: 'WebkitBoxAlign',\n justifyContent: 'WebkitBoxPack',\n flexWrap: 'WebkitBoxLines'\n}\n\nexport default function flexboxOld(\n property: string,\n value: any,\n style: Object\n): void {\n if (property === 'flexDirection' && typeof value === 'string') {\n if (value.indexOf('column') > -1) {\n style.WebkitBoxOrient = 'vertical'\n } else {\n style.WebkitBoxOrient = 'horizontal'\n }\n if (value.indexOf('reverse') > -1) {\n style.WebkitBoxDirection = 'reverse'\n } else {\n style.WebkitBoxDirection = 'normal'\n }\n }\n if (alternativeProps[property]) {\n style[alternativeProps[property]] = alternativeValues[value] || value\n }\n}\n","/* @flow */\nimport isPrefixedValue from '../../utils/isPrefixedValue'\n\nconst prefixes = ['-webkit-', '-moz-', '']\nconst values = /linear-gradient|radial-gradient|repeating-linear-gradient|repeating-radial-gradient/\n\nexport default function gradient(property: string, value: any): ?Array {\n if (typeof value === 'string' && !isPrefixedValue(value) && value.match(values) !== null) {\n return prefixes.map(prefix => prefix + value)\n }\n}\n","/* @flow */\nimport isPrefixedValue from '../../utils/isPrefixedValue'\n\n// http://caniuse.com/#feat=css-image-set\nconst prefixes = ['-webkit-', '']\n\nexport default function imageSet(property: string, value: any): ?Array {\n if (typeof value === 'string' && !isPrefixedValue(value) && value.indexOf('image-set(') > -1) {\n return prefixes.map(prefix => value.replace(/image-set\\(/g, `${prefix}image-set(`))\n }\n}\n","/* @flow */\nexport default function position(property: string, value: any): ?Array {\n if (property === 'position' && value === 'sticky') {\n return ['-webkit-sticky', 'sticky']\n }\n}\n","/* @flow */\nconst prefixes = ['-webkit-', '-moz-', '']\n\nconst properties = {\n maxHeight: true,\n maxWidth: true,\n width: true,\n height: true,\n columnWidth: true,\n minWidth: true,\n minHeight: true\n}\nconst values = {\n 'min-content': true,\n 'max-content': true,\n 'fill-available': true,\n 'fit-content': true,\n 'contain-floats': true\n}\n\nexport default function sizing(property: string, value: any): ?Array {\n if (properties[property] && values[value]) {\n return prefixes.map(prefix => prefix + value)\n }\n}\n","'use strict';\n\nvar uppercasePattern = /[A-Z]/g;\nvar msPattern = /^ms-/;\nvar cache = {};\n\nfunction hyphenateStyleName(string) {\n return string in cache\n ? cache[string]\n : cache[string] = string\n .replace(uppercasePattern, '-$&')\n .toLowerCase()\n .replace(msPattern, '-ms-');\n}\n\nmodule.exports = hyphenateStyleName;\n","/* @flow */\nimport hyphenateStyleName from 'hyphenate-style-name'\n\nimport capitalizeString from '../../utils/capitalizeString'\nimport isPrefixedValue from '../../utils/isPrefixedValue'\n\nconst properties = {\n transition: true,\n transitionProperty: true,\n WebkitTransition: true,\n WebkitTransitionProperty: true,\n MozTransition: true,\n MozTransitionProperty: true\n}\n\nconst prefixMapping = {\n Webkit: '-webkit-',\n Moz: '-moz-',\n ms: '-ms-'\n}\n\nfunction prefixValue(value: string, propertyPrefixMap: Object): string {\n if (isPrefixedValue(value)) {\n return value\n }\n\n // only split multi values, not cubic beziers\n const multipleValues = value.split(/,(?![^()]*(?:\\([^()]*\\))?\\))/g)\n\n for (let i = 0, len = multipleValues.length; i < len; ++i) {\n const singleValue = multipleValues[i]\n const values = [singleValue]\n for (const property in propertyPrefixMap) {\n const dashCaseProperty = hyphenateStyleName(property)\n\n if (singleValue.indexOf(dashCaseProperty) > -1 && dashCaseProperty !== 'order') {\n const prefixes = propertyPrefixMap[property]\n for (let j = 0, pLen = prefixes.length; j < pLen; ++j) {\n // join all prefixes and create a new value\n values.unshift(\n singleValue.replace(dashCaseProperty, prefixMapping[prefixes[j]] + dashCaseProperty)\n )\n }\n }\n }\n\n multipleValues[i] = values.join(',')\n }\n\n return multipleValues.join(',')\n}\n\nexport default function transition(\n property: string,\n value: any,\n style: Object,\n propertyPrefixMap: Object\n): ?string {\n // also check for already prefixed transitions\n if (typeof value === 'string' && properties[property]) {\n const outputValue = prefixValue(value, propertyPrefixMap)\n // if the property is already prefixed\n const webkitOutput = outputValue\n .split(/,(?![^()]*(?:\\([^()]*\\))?\\))/g)\n .filter(val => val.match(/-moz-|-ms-/) === null)\n .join(',')\n\n if (property.indexOf('Webkit') > -1) {\n return webkitOutput\n }\n\n const mozOutput = outputValue\n .split(/,(?![^()]*(?:\\([^()]*\\))?\\))/g)\n .filter(val => val.match(/-webkit-|-ms-/) === null)\n .join(',')\n\n if (property.indexOf('Moz') > -1) {\n return mozOutput\n }\n\n style[`Webkit${capitalizeString(property)}`] = webkitOutput\n style[`Moz${capitalizeString(property)}`] = mozOutput\n return outputValue\n }\n}\n","import calc from './calc'\nimport cursor from './cursor'\nimport crossFade from './crossFade'\nimport filter from './filter'\nimport flex from './flex'\nimport flexboxIE from './flexboxIE'\nimport flexboxOld from './flexboxOld'\nimport gradient from './gradient'\nimport imageSet from './imageSet'\nimport position from './position'\nimport sizing from './sizing'\nimport transition from './transition'\n\nexport default [\n position,\n calc,\n imageSet,\n crossFade,\n filter,\n cursor,\n sizing,\n gradient,\n transition,\n flexboxIE,\n flexboxOld,\n flex\n]\n\nexport {\n position,\n calc,\n cursor,\n sizing,\n imageSet,\n crossFade,\n filter,\n gradient,\n transition,\n flexboxIE,\n flexboxOld,\n flex\n}\n","import createPrefixer from './createPrefixer'\n\nimport propertyPrefixMap from './propertyPrefixMap'\nimport plugins from './plugins'\n\nexport default createPrefixer(propertyPrefixMap, plugins)\n"],"names":["capitalizeString","str","charAt","toUpperCase","slice","prefixProperty","prefixProperties","property","style","requiredPrefixes","i","len","length","prefixValue","plugins","value","metaData","processedValue","addIfNew","list","indexOf","push","addNewValuesOnly","values","Array","isArray","isObject","Object","createPrefixer","propertyPrefixMap","prefixAll","combinedValue","regex","isPrefixedValue","join","match","prefixes","calc","map","replace","prefix","grab","grabbing","cursor","crossFade","filter","flex","alternativeValues","alternativeProps","alignContent","alignSelf","alignItems","justifyContent","order","flexGrow","flexShrink","flexBasis","flexboxIE","wrap","flexWrap","flexboxOld","WebkitBoxOrient","WebkitBoxDirection","gradient","imageSet","position","properties","maxHeight","maxWidth","width","height","columnWidth","minWidth","minHeight","sizing","uppercasePattern","msPattern","cache","hyphenateStyleName","string","toLowerCase","module","exports","transition","transitionProperty","WebkitTransition","WebkitTransitionProperty","MozTransition","MozTransitionProperty","prefixMapping","Webkit","Moz","ms","multipleValues","split","singleValue","dashCaseProperty","j","pLen","unshift","outputValue","webkitOutput","val","mozOutput"],"mappings":"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"} \ No newline at end of file diff --git a/dist/inline-style-prefix-all.min.js b/dist/inline-style-prefix-all.min.js new file mode 100644 index 0000000..a245e7e --- /dev/null +++ b/dist/inline-style-prefix-all.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.InlineStylePrefixAll=t()}(this,function(){"use strict";function e(e,t){return t={exports:{}},e(t,t.exports,h),t.exports}function t(e){return e.charAt(0).toUpperCase()+e.slice(1)}function i(e,i,n){var o=e[i];if(o)for(var r=0,a=o.length;r0&&(s[l]=f)}else{var c=n(o,l,m,s,e);c&&(s[l]=c),i(e,l,s)}}return s}var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return t}function l(e){return Array.isArray(e)&&(e=e.join(",")),null!==e.match(v)}function m(e,t){if("string"==typeof t&&!l(t)&&t.indexOf("calc(")>-1)return S.map(function(e){return t.replace(/calc\(/g,e+"calc(")})}function f(e,t){if("cursor"===e&&O[t])return C.map(function(e){return e+t})}function b(e,t){if("string"==typeof t&&!l(t)&&t.indexOf("cross-fade(")>-1)return A.map(function(e){return t.replace(/cross-fade\(/g,e+"cross-fade(")})}function k(e,t){if("string"==typeof t&&!l(t)&&t.indexOf("filter(")>-1)return B.map(function(e){return t.replace(/filter\(/g,e+"filter(")})}function u(e,t){if("display"===e&&F[t])return["-webkit-box","-moz-box","-ms-"+t+"box","-webkit-"+t,t]}function c(e,t,i){P[e]&&(i[P[e]]=I[t]||t)}function W(e,t,i){"flexDirection"===e&&"string"==typeof t&&(t.indexOf("column")>-1?i.WebkitBoxOrient="vertical":i.WebkitBoxOrient="horizontal",t.indexOf("reverse")>-1?i.WebkitBoxDirection="reverse":i.WebkitBoxDirection="normal"),D[e]&&(i[D[e]]=j[t]||t)}function d(e,t){if("string"==typeof t&&!l(t)&&null!==t.match(R))return T.map(function(e){return e+t})}function p(e,t){if("string"==typeof t&&!l(t)&&t.indexOf("image-set(")>-1)return E.map(function(e){return t.replace(/image-set\(/g,e+"image-set(")})}function g(e,t){if("position"===e&&"sticky"===t)return["-webkit-sticky","sticky"]}function z(e,t){if(L[e]&&H[t])return G.map(function(e){return e+t})}function M(e,t){if(l(e))return e;for(var i=e.split(/,(?![^()]*(?:\([^()]*\))?\))/g),n=0,o=i.length;n-1&&"order"!==m)for(var f=t[s],b=0,k=f.length;b-1)return a;var s=r.split(/,(?![^()]*(?:\([^()]*\))?\))/g).filter(function(e){return null===e.match(/-webkit-|-ms-/)}).join(",");return e.indexOf("Moz")>-1?s:(n["Webkit"+t(e)]=a,n["Moz"+t(e)]=s,r)}}var y={};y.classCallCheck=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},y.createClass=function(){function e(e,t){for(var i=0;i 1 && match[1] || ''; + } + + function getSecondMatch(regex) { + var match = ua.match(regex); + return match && match.length > 1 && match[2] || ''; + } + + var iosdevice = getFirstMatch(/(ipod|iphone|ipad)/i).toLowerCase(), + likeAndroid = /like android/i.test(ua), + android = !likeAndroid && /android/i.test(ua), + nexusMobile = /nexus\s*[0-6]\s*/i.test(ua), + nexusTablet = !nexusMobile && /nexus\s*[0-9]+/i.test(ua), + chromeos = /CrOS/.test(ua), + silk = /silk/i.test(ua), + sailfish = /sailfish/i.test(ua), + tizen = /tizen/i.test(ua), + webos = /(web|hpw)os/i.test(ua), + windowsphone = /windows phone/i.test(ua), + samsungBrowser = /SamsungBrowser/i.test(ua), + windows = !windowsphone && /windows/i.test(ua), + mac = !iosdevice && !silk && /macintosh/i.test(ua), + linux = !android && !sailfish && !tizen && !webos && /linux/i.test(ua), + edgeVersion = getFirstMatch(/edge\/(\d+(\.\d+)?)/i), + versionIdentifier = getFirstMatch(/version\/(\d+(\.\d+)?)/i), + tablet = /tablet/i.test(ua), + mobile = !tablet && /[^-]mobi/i.test(ua), + xbox = /xbox/i.test(ua), + result; + + if (/opera/i.test(ua)) { + // an old Opera + result = { + name: 'Opera', + opera: t, + version: versionIdentifier || getFirstMatch(/(?:opera|opr|opios)[\s\/](\d+(\.\d+)?)/i) + }; + } else if (/opr|opios/i.test(ua)) { + // a new Opera + result = { + name: 'Opera', + opera: t, + version: getFirstMatch(/(?:opr|opios)[\s\/](\d+(\.\d+)?)/i) || versionIdentifier + }; + } else if (/SamsungBrowser/i.test(ua)) { + result = { + name: 'Samsung Internet for Android', + samsungBrowser: t, + version: versionIdentifier || getFirstMatch(/(?:SamsungBrowser)[\s\/](\d+(\.\d+)?)/i) + }; + } else if (/coast/i.test(ua)) { + result = { + name: 'Opera Coast', + coast: t, + version: versionIdentifier || getFirstMatch(/(?:coast)[\s\/](\d+(\.\d+)?)/i) + }; + } else if (/yabrowser/i.test(ua)) { + result = { + name: 'Yandex Browser', + yandexbrowser: t, + version: versionIdentifier || getFirstMatch(/(?:yabrowser)[\s\/](\d+(\.\d+)?)/i) + }; + } else if (/ucbrowser/i.test(ua)) { + result = { + name: 'UC Browser', + ucbrowser: t, + version: getFirstMatch(/(?:ucbrowser)[\s\/](\d+(?:\.\d+)+)/i) + }; + } else if (/mxios/i.test(ua)) { + result = { + name: 'Maxthon', + maxthon: t, + version: getFirstMatch(/(?:mxios)[\s\/](\d+(?:\.\d+)+)/i) + }; + } else if (/epiphany/i.test(ua)) { + result = { + name: 'Epiphany', + epiphany: t, + version: getFirstMatch(/(?:epiphany)[\s\/](\d+(?:\.\d+)+)/i) + }; + } else if (/puffin/i.test(ua)) { + result = { + name: 'Puffin', + puffin: t, + version: getFirstMatch(/(?:puffin)[\s\/](\d+(?:\.\d+)?)/i) + }; + } else if (/sleipnir/i.test(ua)) { + result = { + name: 'Sleipnir', + sleipnir: t, + version: getFirstMatch(/(?:sleipnir)[\s\/](\d+(?:\.\d+)+)/i) + }; + } else if (/k-meleon/i.test(ua)) { + result = { + name: 'K-Meleon', + kMeleon: t, + version: getFirstMatch(/(?:k-meleon)[\s\/](\d+(?:\.\d+)+)/i) + }; + } else if (windowsphone) { + result = { + name: 'Windows Phone', + windowsphone: t + }; + if (edgeVersion) { + result.msedge = t; + result.version = edgeVersion; + } else { + result.msie = t; + result.version = getFirstMatch(/iemobile\/(\d+(\.\d+)?)/i); + } + } else if (/msie|trident/i.test(ua)) { + result = { + name: 'Internet Explorer', + msie: t, + version: getFirstMatch(/(?:msie |rv:)(\d+(\.\d+)?)/i) + }; + } else if (chromeos) { + result = { + name: 'Chrome', + chromeos: t, + chromeBook: t, + chrome: t, + version: getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i) + }; + } else if (/chrome.+? edge/i.test(ua)) { + result = { + name: 'Microsoft Edge', + msedge: t, + version: edgeVersion + }; + } else if (/vivaldi/i.test(ua)) { + result = { + name: 'Vivaldi', + vivaldi: t, + version: getFirstMatch(/vivaldi\/(\d+(\.\d+)?)/i) || versionIdentifier + }; + } else if (sailfish) { + result = { + name: 'Sailfish', + sailfish: t, + version: getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i) + }; + } else if (/seamonkey\//i.test(ua)) { + result = { + name: 'SeaMonkey', + seamonkey: t, + version: getFirstMatch(/seamonkey\/(\d+(\.\d+)?)/i) + }; + } else if (/firefox|iceweasel|fxios/i.test(ua)) { + result = { + name: 'Firefox', + firefox: t, + version: getFirstMatch(/(?:firefox|iceweasel|fxios)[ \/](\d+(\.\d+)?)/i) + }; + if (/\((mobile|tablet);[^\)]*rv:[\d\.]+\)/i.test(ua)) { + result.firefoxos = t; + } + } else if (silk) { + result = { + name: 'Amazon Silk', + silk: t, + version: getFirstMatch(/silk\/(\d+(\.\d+)?)/i) + }; + } else if (/phantom/i.test(ua)) { + result = { + name: 'PhantomJS', + phantom: t, + version: getFirstMatch(/phantomjs\/(\d+(\.\d+)?)/i) + }; + } else if (/slimerjs/i.test(ua)) { + result = { + name: 'SlimerJS', + slimer: t, + version: getFirstMatch(/slimerjs\/(\d+(\.\d+)?)/i) + }; + } else if (/blackberry|\bbb\d+/i.test(ua) || /rim\stablet/i.test(ua)) { + result = { + name: 'BlackBerry', + blackberry: t, + version: versionIdentifier || getFirstMatch(/blackberry[\d]+\/(\d+(\.\d+)?)/i) + }; + } else if (webos) { + result = { + name: 'WebOS', + webos: t, + version: versionIdentifier || getFirstMatch(/w(?:eb)?osbrowser\/(\d+(\.\d+)?)/i) + }; + /touchpad\//i.test(ua) && (result.touchpad = t); + } else if (/bada/i.test(ua)) { + result = { + name: 'Bada', + bada: t, + version: getFirstMatch(/dolfin\/(\d+(\.\d+)?)/i) + }; + } else if (tizen) { + result = { + name: 'Tizen', + tizen: t, + version: getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.\d+)?)/i) || versionIdentifier + }; + } else if (/qupzilla/i.test(ua)) { + result = { + name: 'QupZilla', + qupzilla: t, + version: getFirstMatch(/(?:qupzilla)[\s\/](\d+(?:\.\d+)+)/i) || versionIdentifier + }; + } else if (/chromium/i.test(ua)) { + result = { + name: 'Chromium', + chromium: t, + version: getFirstMatch(/(?:chromium)[\s\/](\d+(?:\.\d+)?)/i) || versionIdentifier + }; + } else if (/chrome|crios|crmo/i.test(ua)) { + result = { + name: 'Chrome', + chrome: t, + version: getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i) + }; + } else if (android) { + result = { + name: 'Android', + version: versionIdentifier + }; + } else if (/safari|applewebkit/i.test(ua)) { + result = { + name: 'Safari', + safari: t + }; + if (versionIdentifier) { + result.version = versionIdentifier; + } + } else if (iosdevice) { + result = { + name: iosdevice == 'iphone' ? 'iPhone' : iosdevice == 'ipad' ? 'iPad' : 'iPod' + }; + // WTF: version is not part of user agent in web apps + if (versionIdentifier) { + result.version = versionIdentifier; + } + } else if (/googlebot/i.test(ua)) { + result = { + name: 'Googlebot', + googlebot: t, + version: getFirstMatch(/googlebot\/(\d+(\.\d+))/i) || versionIdentifier + }; + } else { + result = { + name: getFirstMatch(/^(.*)\/(.*) /), + version: getSecondMatch(/^(.*)\/(.*) /) + }; + } + + // set webkit or gecko flag for browsers based on these engines + if (!result.msedge && /(apple)?webkit/i.test(ua)) { + if (/(apple)?webkit\/537\.36/i.test(ua)) { + result.name = result.name || "Blink"; + result.blink = t; + } else { + result.name = result.name || "Webkit"; + result.webkit = t; + } + if (!result.version && versionIdentifier) { + result.version = versionIdentifier; + } + } else if (!result.opera && /gecko\//i.test(ua)) { + result.name = result.name || "Gecko"; + result.gecko = t; + result.version = result.version || getFirstMatch(/gecko\/(\d+(\.\d+)?)/i); + } + + // set OS flags for platforms that have multiple browsers + if (!result.windowsphone && !result.msedge && (android || result.silk)) { + result.android = t; + } else if (!result.windowsphone && !result.msedge && iosdevice) { + result[iosdevice] = t; + result.ios = t; + } else if (mac) { + result.mac = t; + } else if (xbox) { + result.xbox = t; + } else if (windows) { + result.windows = t; + } else if (linux) { + result.linux = t; + } + + // OS version extraction + var osVersion = ''; + if (result.windowsphone) { + osVersion = getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i); + } else if (iosdevice) { + osVersion = getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i); + osVersion = osVersion.replace(/[_\s]/g, '.'); + } else if (android) { + osVersion = getFirstMatch(/android[ \/-](\d+(\.\d+)*)/i); + } else if (result.webos) { + osVersion = getFirstMatch(/(?:web|hpw)os\/(\d+(\.\d+)*)/i); + } else if (result.blackberry) { + osVersion = getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i); + } else if (result.bada) { + osVersion = getFirstMatch(/bada\/(\d+(\.\d+)*)/i); + } else if (result.tizen) { + osVersion = getFirstMatch(/tizen[\/\s](\d+(\.\d+)*)/i); + } + if (osVersion) { + result.osversion = osVersion; + } + + // device type extraction + var osMajorVersion = osVersion.split('.')[0]; + if (tablet || nexusTablet || iosdevice == 'ipad' || android && (osMajorVersion == 3 || osMajorVersion >= 4 && !mobile) || result.silk) { + result.tablet = t; + } else if (mobile || iosdevice == 'iphone' || iosdevice == 'ipod' || android || nexusMobile || result.blackberry || result.webos || result.bada) { + result.mobile = t; + } + + // Graded Browser Support + // http://developer.yahoo.com/yui/articles/gbs + if (result.msedge || result.msie && result.version >= 10 || result.yandexbrowser && result.version >= 15 || result.vivaldi && result.version >= 1.0 || result.chrome && result.version >= 20 || result.samsungBrowser && result.version >= 4 || result.firefox && result.version >= 20.0 || result.safari && result.version >= 6 || result.opera && result.version >= 10.0 || result.ios && result.osversion && result.osversion.split(".")[0] >= 6 || result.blackberry && result.version >= 10.1 || result.chromium && result.version >= 20) { + result.a = t; + } else if (result.msie && result.version < 10 || result.chrome && result.version < 20 || result.firefox && result.version < 20.0 || result.safari && result.version < 6 || result.opera && result.version < 10.0 || result.ios && result.osversion && result.osversion.split(".")[0] < 6 || result.chromium && result.version < 20) { + result.c = t; + } else result.x = t; + + return result; + } + + var bowser = detect(typeof navigator !== 'undefined' ? navigator.userAgent || '' : ''); + + bowser.test = function (browserList) { + for (var i = 0; i < browserList.length; ++i) { + var browserItem = browserList[i]; + if (typeof browserItem === 'string') { + if (browserItem in bowser) { + return true; + } + } + } + return false; + }; + + /** + * Get version precisions count + * + * @example + * getVersionPrecision("1.10.3") // 3 + * + * @param {string} version + * @return {number} + */ + function getVersionPrecision(version) { + return version.split(".").length; + } + + /** + * Array::map polyfill + * + * @param {Array} arr + * @param {Function} iterator + * @return {Array} + */ + function map(arr, iterator) { + var result = [], + i; + if (Array.prototype.map) { + return Array.prototype.map.call(arr, iterator); + } + for (i = 0; i < arr.length; i++) { + result.push(iterator(arr[i])); + } + return result; + } + + /** + * Calculate browser version weight + * + * @example + * compareVersions(['1.10.2.1', '1.8.2.1.90']) // 1 + * compareVersions(['1.010.2.1', '1.09.2.1.90']); // 1 + * compareVersions(['1.10.2.1', '1.10.2.1']); // 0 + * compareVersions(['1.10.2.1', '1.0800.2']); // -1 + * + * @param {Array} versions versions to compare + * @return {Number} comparison result + */ + function compareVersions(versions) { + // 1) get common precision for both versions, for example for "10.0" and "9" it should be 2 + var precision = Math.max(getVersionPrecision(versions[0]), getVersionPrecision(versions[1])); + var chunks = map(versions, function (version) { + var delta = precision - getVersionPrecision(version); + + // 2) "9" -> "9.0" (for precision = 2) + version = version + new Array(delta + 1).join(".0"); + + // 3) "9.0" -> ["000000000"", "000000009"] + return map(version.split("."), function (chunk) { + return new Array(20 - chunk.length).join("0") + chunk; + }).reverse(); + }); + + // iterate in reverse order by reversed chunks array + while (--precision >= 0) { + // 4) compare: "000000009" > "000000010" = false (but "9" > "10" = true) + if (chunks[0][precision] > chunks[1][precision]) { + return 1; + } else if (chunks[0][precision] === chunks[1][precision]) { + if (precision === 0) { + // all version chunks are same + return 0; + } + } else { + return -1; + } + } + } + + /** + * Check if browser is unsupported + * + * @example + * bowser.isUnsupportedBrowser({ + * msie: "10", + * firefox: "23", + * chrome: "29", + * safari: "5.1", + * opera: "16", + * phantom: "534" + * }); + * + * @param {Object} minVersions map of minimal version to browser + * @param {Boolean} [strictMode = false] flag to return false if browser wasn't found in map + * @param {String} [ua] user agent string + * @return {Boolean} + */ + function isUnsupportedBrowser(minVersions, strictMode, ua) { + var _bowser = bowser; + + // make strictMode param optional with ua param usage + if (typeof strictMode === 'string') { + ua = strictMode; + strictMode = void 0; + } + + if (strictMode === void 0) { + strictMode = false; + } + if (ua) { + _bowser = detect(ua); + } + + var version = "" + _bowser.version; + for (var browser in minVersions) { + if (minVersions.hasOwnProperty(browser)) { + if (_bowser[browser]) { + if (typeof minVersions[browser] !== 'string') { + throw new Error('Browser version in the minVersion map should be a string: ' + browser + ': ' + String(minVersions)); + } + + // browser version and min supported version. + return compareVersions([version, minVersions[browser]]) < 0; + } + } + } + + return strictMode; // not found + } + + /** + * Check if browser is supported + * + * @param {Object} minVersions map of minimal version to browser + * @param {Boolean} [strictMode = false] flag to return false if browser wasn't found in map + * @param {String} [ua] user agent string + * @return {Boolean} + */ + function check(minVersions, strictMode, ua) { + return !isUnsupportedBrowser(minVersions, strictMode, ua); + } + + bowser.isUnsupportedBrowser = isUnsupportedBrowser; + bowser.compareVersions = compareVersions; + bowser.check = check; + + /* + * Set our detect method to the main bowser object so we can + * reuse it to test other user agents. + * This is needed to implement future tests. + */ + bowser._detect = detect; + + return bowser; + }); + }); + + var bowser$1 = (bowser && typeof bowser === 'object' && 'default' in bowser ? bowser['default'] : bowser); + + var prefixByBrowser = { + chrome: 'Webkit', + safari: 'Webkit', + ios: 'Webkit', + android: 'Webkit', + phantom: 'Webkit', + opera: 'Webkit', + webos: 'Webkit', + blackberry: 'Webkit', + bada: 'Webkit', + tizen: 'Webkit', + chromium: 'Webkit', + vivaldi: 'Webkit', + firefox: 'Moz', + seamoney: 'Moz', + sailfish: 'Moz', + msie: 'ms', + msedge: 'ms' + }; + + var browserByCanIuseAlias = { + chrome: 'chrome', + chromium: 'chrome', + safari: 'safari', + firfox: 'firefox', + msedge: 'edge', + opera: 'opera', + vivaldi: 'opera', + msie: 'ie' + }; + + function getBrowserName(browserInfo) { + if (browserInfo.firefox) { + return 'firefox'; + } + + if (browserInfo.mobile || browserInfo.tablet) { + if (browserInfo.ios) { + return 'ios_saf'; + } else if (browserInfo.android) { + return 'android'; + } else if (browserInfo.opera) { + return 'op_mini'; + } + } + + for (var browser in browserByCanIuseAlias) { + if (browserInfo[browser]) { + return browserByCanIuseAlias[browser]; + } + } + } + + /** + * Uses bowser to get default browser browserInformation such as version and name + * Evaluates bowser browserInfo and adds vendorPrefix browserInformation + * @param {string} userAgent - userAgent that gets evaluated + */ + function getBrowserInformation(userAgent) { + var browserInfo = bowser$1._detect(userAgent); + + for (var browser in prefixByBrowser) { + if (browserInfo[browser]) { + var prefix = prefixByBrowser[browser]; + + browserInfo.jsPrefix = prefix; + browserInfo.cssPrefix = '-' + prefix.toLowerCase() + '-'; + break; + } + } + + browserInfo.browserName = getBrowserName(browserInfo); + + // For cordova IOS 8 the version is missing, set truncated osversion to prevent NaN + if (browserInfo.version) { + browserInfo.browserVersion = parseFloat(browserInfo.version); + } else { + browserInfo.browserVersion = parseInt(parseFloat(browserInfo.osversion), 10); + } + + browserInfo.osVersion = parseFloat(browserInfo.osversion); + + // iOS forces all browsers to use Safari under the hood + // as the Safari version seems to match the iOS version + // we just explicitely use the osversion instead + // https://github.com/rofrischmann/inline-style-prefixer/issues/72 + if (browserInfo.browserName === 'ios_saf' && browserInfo.browserVersion > browserInfo.osVersion) { + browserInfo.browserVersion = browserInfo.osVersion; + } + + // seperate native android chrome + // https://github.com/rofrischmann/inline-style-prefixer/issues/45 + if (browserInfo.browserName === 'android' && browserInfo.chrome && browserInfo.browserVersion > 37) { + browserInfo.browserName = 'and_chr'; + } + + // For android < 4.4 we want to check the osversion + // not the chrome version, see issue #26 + // https://github.com/rofrischmann/inline-style-prefixer/issues/26 + if (browserInfo.browserName === 'android' && browserInfo.osVersion < 5) { + browserInfo.browserVersion = browserInfo.osVersion; + } + + // Samsung browser are basically build on Chrome > 44 + // https://github.com/rofrischmann/inline-style-prefixer/issues/102 + if (browserInfo.browserName === 'android' && browserInfo.samsungBrowser) { + browserInfo.browserName = 'and_chr'; + browserInfo.browserVersion = 44; + } + + return browserInfo; + } + + function getPrefixedKeyframes(browserName, browserVersion, cssPrefix) { + var prefixedKeyframes = 'keyframes'; + + if (browserName === 'chrome' && browserVersion < 43 || (browserName === 'safari' || browserName === 'ios_saf') && browserVersion < 9 || browserName === 'opera' && browserVersion < 30 || browserName === 'android' && browserVersion <= 4.4 || browserName === 'and_uc') { + return cssPrefix + prefixedKeyframes; + } + return prefixedKeyframes; + } + + function capitalizeString(str) { + return str.charAt(0).toUpperCase() + str.slice(1); + } + + function addIfNew(list, value) { + if (list.indexOf(value) === -1) { + list.push(value); + } + } + + function addNewValuesOnly(list, values) { + if (Array.isArray(values)) { + for (var i = 0, len = values.length; i < len; ++i) { + addIfNew(list, values[i]); + } + } else { + addIfNew(list, values); + } + } + + function isObject(value) { + return value instanceof Object && !Array.isArray(value); + } + + function prefixValue(plugins, property, value, style, metaData) { + for (var i = 0, len = plugins.length; i < len; ++i) { + var processedValue = plugins[i](property, value, style, metaData); + + // we can stop processing if a value is returned + // as all plugin criteria are unique + if (processedValue) { + return processedValue; + } + } + } + + function createPrefixer(propertyPrefixMap) { + var plugins = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + var fallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (style) { + return style; + }; + + return function () { + /** + * Instantiante a new prefixer + * @param {string} userAgent - userAgent to gather prefix information according to caniuse.com + * @param {string} keepUnprefixed - keeps unprefixed properties and values + */ + function Prefixer() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + babelHelpers.classCallCheck(this, Prefixer); + + var defaultUserAgent = typeof navigator !== 'undefined' ? navigator.userAgent : undefined; + + this._userAgent = options.userAgent || defaultUserAgent; + this._keepUnprefixed = options.keepUnprefixed || false; + + if (this._userAgent) { + this._browserInfo = getBrowserInformation(this._userAgent); + } + + // Checks if the userAgent was resolved correctly + if (this._browserInfo && this._browserInfo.cssPrefix) { + this.prefixedKeyframes = getPrefixedKeyframes(this._browserInfo.browserName, this._browserInfo.browserVersion, this._browserInfo.cssPrefix); + } else { + this._useFallback = true; + return false; + } + + var prefixData = this._browserInfo.browserName && propertyPrefixMap[this._browserInfo.browserName]; + if (prefixData) { + this._requiresPrefix = {}; + + for (var property in prefixData) { + if (prefixData[property] >= this._browserInfo.browserVersion) { + this._requiresPrefix[property] = true; + } + } + + this._hasPropsRequiringPrefix = Object.keys(this._requiresPrefix).length > 0; + } else { + this._useFallback = true; + } + + this._metaData = { + browserVersion: this._browserInfo.browserVersion, + browserName: this._browserInfo.browserName, + cssPrefix: this._browserInfo.cssPrefix, + jsPrefix: this._browserInfo.jsPrefix, + keepUnprefixed: this._keepUnprefixed, + requiresPrefix: this._requiresPrefix + }; + } + + babelHelpers.createClass(Prefixer, [{ + key: 'prefix', + value: function prefix(style) { + // use static prefixer as fallback if userAgent can not be resolved + if (this._useFallback) { + return fallback(style); + } + + // only add prefixes if needed + if (!this._hasPropsRequiringPrefix) { + return style; + } + + return this._prefixStyle(style); + } + }, { + key: '_prefixStyle', + value: function _prefixStyle(style) { + for (var property in style) { + var value = style[property]; + + // handle nested objects + if (isObject(value)) { + style[property] = this.prefix(value); + // handle array values + } else if (Array.isArray(value)) { + var combinedValue = []; + + for (var i = 0, len = value.length; i < len; ++i) { + var processedValue = prefixValue(plugins, property, value[i], style, this._metaData); + addNewValuesOnly(combinedValue, processedValue || value[i]); + } + + // only modify the value if it was touched + // by any plugin to prevent unnecessary mutations + if (combinedValue.length > 0) { + style[property] = combinedValue; + } + } else { + var _processedValue = prefixValue(plugins, property, value, style, this._metaData); + + // only modify the value if it was touched + // by any plugin to prevent unnecessary mutations + if (_processedValue) { + style[property] = _processedValue; + } + + // add prefixes to properties + if (this._requiresPrefix[property]) { + style[this._browserInfo.jsPrefix + capitalizeString(property)] = value; + if (!this._keepUnprefixed) { + delete style[property]; + } + } + } + } + + return style; + } + + /** + * Returns a prefixed version of the style object using all vendor prefixes + * @param {Object} styles - Style object that gets prefixed properties added + * @returns {Object} - Style object with prefixed properties and values + */ + + }], [{ + key: 'prefixAll', + value: function prefixAll(styles) { + return fallback(styles); + } + }]); + return Prefixer; + }(); + } + + var propertyPrefixMap = { "chrome": { "appearance": 59, "userSelect": 53, "textEmphasisPosition": 59, "textEmphasis": 59, "textEmphasisStyle": 59, "textEmphasisColor": 59, "boxDecorationBreak": 59, "clipPath": 54, "maskImage": 59, "maskMode": 59, "maskRepeat": 59, "maskPosition": 59, "maskClip": 59, "maskOrigin": 59, "maskSize": 59, "maskComposite": 59, "mask": 59, "maskBorderSource": 59, "maskBorderMode": 59, "maskBorderSlice": 59, "maskBorderWidth": 59, "maskBorderOutset": 59, "maskBorderRepeat": 59, "maskBorder": 59, "maskType": 59, "textDecorationStyle": 56, "textDecorationSkip": 56, "textDecorationLine": 56, "textDecorationColor": 56, "filter": 52, "fontFeatureSettings": 47, "breakAfter": 49, "breakBefore": 49, "breakInside": 49, "columnCount": 49, "columnFill": 49, "columnGap": 49, "columnRule": 49, "columnRuleColor": 49, "columnRuleStyle": 49, "columnRuleWidth": 49, "columns": 49, "columnSpan": 49, "columnWidth": 49 }, "safari": { "flex": 8, "flexBasis": 8, "flexDirection": 8, "flexGrow": 8, "flexFlow": 8, "flexShrink": 8, "flexWrap": 8, "alignContent": 8, "alignItems": 8, "alignSelf": 8, "justifyContent": 8, "order": 8, "transform": 8, "transformOrigin": 8, "transformOriginX": 8, "transformOriginY": 8, "backfaceVisibility": 8, "perspective": 8, "perspectiveOrigin": 8, "transformStyle": 8, "transformOriginZ": 8, "animation": 8, "animationDelay": 8, "animationDirection": 8, "animationFillMode": 8, "animationDuration": 8, "animationIterationCount": 8, "animationName": 8, "animationPlayState": 8, "animationTimingFunction": 8, "appearance": 10.1, "userSelect": 10.1, "backdropFilter": 10.1, "fontKerning": 9, "scrollSnapType": 10.1, "scrollSnapPointsX": 10.1, "scrollSnapPointsY": 10.1, "scrollSnapDestination": 10.1, "scrollSnapCoordinate": 10.1, "boxDecorationBreak": 10.1, "clipPath": 10.1, "maskImage": 10.1, "maskMode": 10.1, "maskRepeat": 10.1, "maskPosition": 10.1, "maskClip": 10.1, "maskOrigin": 10.1, "maskSize": 10.1, "maskComposite": 10.1, "mask": 10.1, "maskBorderSource": 10.1, "maskBorderMode": 10.1, "maskBorderSlice": 10.1, "maskBorderWidth": 10.1, "maskBorderOutset": 10.1, "maskBorderRepeat": 10.1, "maskBorder": 10.1, "maskType": 10.1, "textDecorationStyle": 10.1, "textDecorationSkip": 10.1, "textDecorationLine": 10.1, "textDecorationColor": 10.1, "shapeImageThreshold": 10, "shapeImageMargin": 10, "shapeImageOutside": 10, "filter": 9, "hyphens": 10.1, "flowInto": 10.1, "flowFrom": 10.1, "breakBefore": 8, "breakAfter": 8, "breakInside": 8, "regionFragment": 10.1, "columnCount": 8, "columnFill": 8, "columnGap": 8, "columnRule": 8, "columnRuleColor": 8, "columnRuleStyle": 8, "columnRuleWidth": 8, "columns": 8, "columnSpan": 8, "columnWidth": 8 }, "firefox": { "borderRadius": 3.6, "borderImage": 14, "borderImageOutset": 14, "borderImageRepeat": 14, "borderImageSlice": 14, "borderImageSource": 14, "borderImageWidth": 14, "flex": 21, "flexBasis": 21, "flexDirection": 21, "flexGrow": 21, "flexFlow": 21, "flexShrink": 21, "flexWrap": 21, "alignContent": 21, "alignItems": 21, "alignSelf": 21, "justifyContent": 21, "order": 21, "transition": 15, "transitionDelay": 15, "transitionDuration": 15, "transitionProperty": 15, "transitionTimingFunction": 15, "transform": 15, "transformOrigin": 15, "transformOriginX": 15, "transformOriginY": 15, "backfaceVisibility": 15, "perspective": 15, "perspectiveOrigin": 15, "transformStyle": 15, "transformOriginZ": 15, "animation": 15, "animationDelay": 15, "animationDirection": 15, "animationFillMode": 15, "animationDuration": 15, "animationIterationCount": 15, "animationName": 15, "animationPlayState": 15, "animationTimingFunction": 15, "appearance": 54, "userSelect": 54, "boxSizing": 28, "textAlignLast": 48, "textDecorationStyle": 35, "textDecorationSkip": 35, "textDecorationLine": 35, "textDecorationColor": 35, "tabSize": 54, "resize": 4, "hyphens": 42, "backgroundClip": 3.6, "backgroundOrigin": 3.6, "backgroundSize": 3.6, "fontFeatureSettings": 33, "boxShadow": 3.6, "breakAfter": 51, "breakBefore": 51, "breakInside": 51, "columnCount": 51, "columnFill": 51, "columnGap": 51, "columnRule": 51, "columnRuleColor": 51, "columnRuleStyle": 51, "columnRuleWidth": 51, "columns": 51, "columnSpan": 51, "columnWidth": 51 }, "opera": { "flex": 16, "flexBasis": 16, "flexDirection": 16, "flexGrow": 16, "flexFlow": 16, "flexShrink": 16, "flexWrap": 16, "alignContent": 16, "alignItems": 16, "alignSelf": 16, "justifyContent": 16, "order": 16, "transform": 22, "transformOrigin": 22, "transformOriginX": 22, "transformOriginY": 22, "backfaceVisibility": 22, "perspective": 22, "perspectiveOrigin": 22, "transformStyle": 22, "transformOriginZ": 22, "animation": 29, "animationDelay": 29, "animationDirection": 29, "animationFillMode": 29, "animationDuration": 29, "animationIterationCount": 29, "animationName": 29, "animationPlayState": 29, "animationTimingFunction": 29, "appearance": 44, "userSelect": 40, "fontKerning": 19, "textEmphasisPosition": 44, "textEmphasis": 44, "textEmphasisStyle": 44, "textEmphasisColor": 44, "boxDecorationBreak": 44, "clipPath": 41, "maskImage": 44, "maskMode": 44, "maskRepeat": 44, "maskPosition": 44, "maskClip": 44, "maskOrigin": 44, "maskSize": 44, "maskComposite": 44, "mask": 44, "maskBorderSource": 44, "maskBorderMode": 44, "maskBorderSlice": 44, "maskBorderWidth": 44, "maskBorderOutset": 44, "maskBorderRepeat": 44, "maskBorder": 44, "maskType": 44, "textDecorationStyle": 43, "textDecorationSkip": 43, "textDecorationLine": 43, "textDecorationColor": 43, "filter": 39, "fontFeatureSettings": 34, "breakAfter": 36, "breakBefore": 36, "breakInside": 36, "columnCount": 36, "columnFill": 36, "columnGap": 36, "columnRule": 36, "columnRuleColor": 36, "columnRuleStyle": 36, "columnRuleWidth": 36, "columns": 36, "columnSpan": 36, "columnWidth": 36 }, "ie": { "userSelect": 11, "wrapFlow": 11, "wrapThrough": 11, "wrapMargin": 11, "scrollSnapType": 11, "scrollSnapPointsX": 11, "scrollSnapPointsY": 11, "scrollSnapDestination": 11, "scrollSnapCoordinate": 11, "hyphens": 11, "flowInto": 11, "flowFrom": 11, "breakBefore": 11, "breakAfter": 11, "breakInside": 11, "regionFragment": 11, "gridTemplateColumns": 11, "gridTemplateRows": 11, "gridTemplateAreas": 11, "gridTemplate": 11, "gridAutoColumns": 11, "gridAutoRows": 11, "gridAutoFlow": 11, "grid": 11, "gridRowStart": 11, "gridColumnStart": 11, "gridRowEnd": 11, "gridRow": 11, "gridColumn": 11, "gridColumnEnd": 11, "gridColumnGap": 11, "gridRowGap": 11, "gridArea": 11, "gridGap": 11, "textSizeAdjust": 11 }, "edge": { "userSelect": 15, "wrapFlow": 15, "wrapThrough": 15, "wrapMargin": 15, "scrollSnapType": 15, "scrollSnapPointsX": 15, "scrollSnapPointsY": 15, "scrollSnapDestination": 15, "scrollSnapCoordinate": 15, "hyphens": 15, "flowInto": 15, "flowFrom": 15, "breakBefore": 15, "breakAfter": 15, "breakInside": 15, "regionFragment": 15, "gridTemplateColumns": 15, "gridTemplateRows": 15, "gridTemplateAreas": 15, "gridTemplate": 15, "gridAutoColumns": 15, "gridAutoRows": 15, "gridAutoFlow": 15, "grid": 15, "gridRowStart": 15, "gridColumnStart": 15, "gridRowEnd": 15, "gridRow": 15, "gridColumn": 15, "gridColumnEnd": 15, "gridColumnGap": 15, "gridRowGap": 15, "gridArea": 15, "gridGap": 15 }, "ios_saf": { "flex": 8.1, "flexBasis": 8.1, "flexDirection": 8.1, "flexGrow": 8.1, "flexFlow": 8.1, "flexShrink": 8.1, "flexWrap": 8.1, "alignContent": 8.1, "alignItems": 8.1, "alignSelf": 8.1, "justifyContent": 8.1, "order": 8.1, "transform": 8.1, "transformOrigin": 8.1, "transformOriginX": 8.1, "transformOriginY": 8.1, "backfaceVisibility": 8.1, "perspective": 8.1, "perspectiveOrigin": 8.1, "transformStyle": 8.1, "transformOriginZ": 8.1, "animation": 8.1, "animationDelay": 8.1, "animationDirection": 8.1, "animationFillMode": 8.1, "animationDuration": 8.1, "animationIterationCount": 8.1, "animationName": 8.1, "animationPlayState": 8.1, "animationTimingFunction": 8.1, "appearance": 10, "userSelect": 10, "backdropFilter": 10, "fontKerning": 10, "scrollSnapType": 10, "scrollSnapPointsX": 10, "scrollSnapPointsY": 10, "scrollSnapDestination": 10, "scrollSnapCoordinate": 10, "boxDecorationBreak": 10, "clipPath": 10, "maskImage": 10, "maskMode": 10, "maskRepeat": 10, "maskPosition": 10, "maskClip": 10, "maskOrigin": 10, "maskSize": 10, "maskComposite": 10, "mask": 10, "maskBorderSource": 10, "maskBorderMode": 10, "maskBorderSlice": 10, "maskBorderWidth": 10, "maskBorderOutset": 10, "maskBorderRepeat": 10, "maskBorder": 10, "maskType": 10, "textSizeAdjust": 10, "textDecorationStyle": 10, "textDecorationSkip": 10, "textDecorationLine": 10, "textDecorationColor": 10, "shapeImageThreshold": 10, "shapeImageMargin": 10, "shapeImageOutside": 10, "filter": 9, "hyphens": 10, "flowInto": 10, "flowFrom": 10, "breakBefore": 8.1, "breakAfter": 8.1, "breakInside": 8.1, "regionFragment": 10, "columnCount": 8.1, "columnFill": 8.1, "columnGap": 8.1, "columnRule": 8.1, "columnRuleColor": 8.1, "columnRuleStyle": 8.1, "columnRuleWidth": 8.1, "columns": 8.1, "columnSpan": 8.1, "columnWidth": 8.1 }, "android": { "flex": 4.2, "flexBasis": 4.2, "flexDirection": 4.2, "flexGrow": 4.2, "flexFlow": 4.2, "flexShrink": 4.2, "flexWrap": 4.2, "alignContent": 4.2, "alignItems": 4.2, "alignSelf": 4.2, "justifyContent": 4.2, "order": 4.2, "transition": 4.2, "transitionDelay": 4.2, "transitionDuration": 4.2, "transitionProperty": 4.2, "transitionTimingFunction": 4.2, "transform": 4.4, "transformOrigin": 4.4, "transformOriginX": 4.4, "transformOriginY": 4.4, "backfaceVisibility": 4.4, "perspective": 4.4, "perspectiveOrigin": 4.4, "transformStyle": 4.4, "transformOriginZ": 4.4, "animation": 4.4, "animationDelay": 4.4, "animationDirection": 4.4, "animationFillMode": 4.4, "animationDuration": 4.4, "animationIterationCount": 4.4, "animationName": 4.4, "animationPlayState": 4.4, "animationTimingFunction": 4.4, "appearance": 53, "userSelect": 53, "fontKerning": 4.4, "textEmphasisPosition": 53, "textEmphasis": 53, "textEmphasisStyle": 53, "textEmphasisColor": 53, "boxDecorationBreak": 53, "clipPath": 53, "maskImage": 53, "maskMode": 53, "maskRepeat": 53, "maskPosition": 53, "maskClip": 53, "maskOrigin": 53, "maskSize": 53, "maskComposite": 53, "mask": 53, "maskBorderSource": 53, "maskBorderMode": 53, "maskBorderSlice": 53, "maskBorderWidth": 53, "maskBorderOutset": 53, "maskBorderRepeat": 53, "maskBorder": 53, "maskType": 53, "filter": 4.4, "fontFeatureSettings": 4.4, "breakAfter": 53, "breakBefore": 53, "breakInside": 53, "columnCount": 53, "columnFill": 53, "columnGap": 53, "columnRule": 53, "columnRuleColor": 53, "columnRuleStyle": 53, "columnRuleWidth": 53, "columns": 53, "columnSpan": 53, "columnWidth": 53 }, "and_chr": { "appearance": 55, "textEmphasisPosition": 55, "textEmphasis": 55, "textEmphasisStyle": 55, "textEmphasisColor": 55, "boxDecorationBreak": 55, "maskImage": 55, "maskMode": 55, "maskRepeat": 55, "maskPosition": 55, "maskClip": 55, "maskOrigin": 55, "maskSize": 55, "maskComposite": 55, "mask": 55, "maskBorderSource": 55, "maskBorderMode": 55, "maskBorderSlice": 55, "maskBorderWidth": 55, "maskBorderOutset": 55, "maskBorderRepeat": 55, "maskBorder": 55, "maskType": 55, "textDecorationStyle": 55, "textDecorationSkip": 55, "textDecorationLine": 55, "textDecorationColor": 55 }, "and_uc": { "flex": 11, "flexBasis": 11, "flexDirection": 11, "flexGrow": 11, "flexFlow": 11, "flexShrink": 11, "flexWrap": 11, "alignContent": 11, "alignItems": 11, "alignSelf": 11, "justifyContent": 11, "order": 11, "transition": 11, "transitionDelay": 11, "transitionDuration": 11, "transitionProperty": 11, "transitionTimingFunction": 11, "transform": 11, "transformOrigin": 11, "transformOriginX": 11, "transformOriginY": 11, "backfaceVisibility": 11, "perspective": 11, "perspectiveOrigin": 11, "transformStyle": 11, "transformOriginZ": 11, "animation": 11, "animationDelay": 11, "animationDirection": 11, "animationFillMode": 11, "animationDuration": 11, "animationIterationCount": 11, "animationName": 11, "animationPlayState": 11, "animationTimingFunction": 11, "appearance": 11, "userSelect": 11, "fontKerning": 11, "textEmphasisPosition": 11, "textEmphasis": 11, "textEmphasisStyle": 11, "textEmphasisColor": 11, "maskImage": 11, "maskMode": 11, "maskRepeat": 11, "maskPosition": 11, "maskClip": 11, "maskOrigin": 11, "maskSize": 11, "maskComposite": 11, "mask": 11, "maskBorderSource": 11, "maskBorderMode": 11, "maskBorderSlice": 11, "maskBorderWidth": 11, "maskBorderOutset": 11, "maskBorderRepeat": 11, "maskBorder": 11, "maskType": 11, "textSizeAdjust": 11, "filter": 11, "hyphens": 11, "flowInto": 11, "flowFrom": 11, "breakBefore": 11, "breakAfter": 11, "breakInside": 11, "regionFragment": 11, "fontFeatureSettings": 11, "columnCount": 11, "columnFill": 11, "columnGap": 11, "columnRule": 11, "columnRuleColor": 11, "columnRuleStyle": 11, "columnRuleWidth": 11, "columns": 11, "columnSpan": 11, "columnWidth": 11 }, "op_mini": {} }; + + function getPrefixedValue(prefixedValue, value, keepUnprefixed) { + if (keepUnprefixed) { + return [prefixedValue, value]; + } + return prefixedValue; + } + + function calc(property, value, style, _ref) { + var browserName = _ref.browserName, + browserVersion = _ref.browserVersion, + cssPrefix = _ref.cssPrefix, + keepUnprefixed = _ref.keepUnprefixed; + + if (typeof value === 'string' && value.indexOf('calc(') > -1 && (browserName === 'firefox' && browserVersion < 15 || browserName === 'chrome' && browserVersion < 25 || browserName === 'safari' && browserVersion < 6.1 || browserName === 'ios_saf' && browserVersion < 7)) { + return getPrefixedValue(value.replace(/calc\(/g, cssPrefix + 'calc('), value, keepUnprefixed); + } + } + + function crossFade(property, value, style, _ref) { + var browserName = _ref.browserName, + browserVersion = _ref.browserVersion, + cssPrefix = _ref.cssPrefix, + keepUnprefixed = _ref.keepUnprefixed; + + if (typeof value === 'string' && value.indexOf('cross-fade(') > -1 && (browserName === 'chrome' || browserName === 'opera' || browserName === 'and_chr' || (browserName === 'ios_saf' || browserName === 'safari') && browserVersion < 10)) { + return getPrefixedValue(value.replace(/cross-fade\(/g, cssPrefix + 'cross-fade('), value, keepUnprefixed); + } + } + + function filter(property, value, style, _ref) { + var browserName = _ref.browserName, + browserVersion = _ref.browserVersion, + cssPrefix = _ref.cssPrefix, + keepUnprefixed = _ref.keepUnprefixed; + + if (typeof value === 'string' && value.indexOf('filter(') > -1 && (browserName === 'ios_saf' || browserName === 'safari' && browserVersion < 9.1)) { + return getPrefixedValue(value.replace(/filter\(/g, cssPrefix + 'filter('), value, keepUnprefixed); + } + } + + var values = { + flex: true, + 'inline-flex': true + }; + + function flex(property, value, style, _ref) { + var browserName = _ref.browserName, + browserVersion = _ref.browserVersion, + cssPrefix = _ref.cssPrefix, + keepUnprefixed = _ref.keepUnprefixed; + + if (property === 'display' && values[value] && (browserName === 'chrome' && browserVersion < 29 && browserVersion > 20 || (browserName === 'safari' || browserName === 'ios_saf') && browserVersion < 9 && browserVersion > 6 || browserName === 'opera' && (browserVersion === 15 || browserVersion === 16))) { + return getPrefixedValue(cssPrefix + value, value, keepUnprefixed); + } + } + + var alternativeValues = { + 'space-around': 'distribute', + 'space-between': 'justify', + 'flex-start': 'start', + 'flex-end': 'end', + flex: 'flexbox', + 'inline-flex': 'inline-flexbox' + }; + var alternativeProps = { + alignContent: 'msFlexLinePack', + alignSelf: 'msFlexItemAlign', + alignItems: 'msFlexAlign', + justifyContent: 'msFlexPack', + order: 'msFlexOrder', + flexGrow: 'msFlexPositive', + flexShrink: 'msFlexNegative', + flexBasis: 'msPreferredSize' + }; + + function flexboxIE(property, value, style, _ref) { + var browserName = _ref.browserName, + browserVersion = _ref.browserVersion, + cssPrefix = _ref.cssPrefix, + keepUnprefixed = _ref.keepUnprefixed, + requiresPrefix = _ref.requiresPrefix; + + if ((alternativeProps[property] || property === 'display' && typeof value === 'string' && value.indexOf('flex') > -1) && (browserName === 'ie_mob' || browserName === 'ie') && browserVersion === 10) { + delete requiresPrefix[property]; + + if (!keepUnprefixed && !Array.isArray(style[property])) { + delete style[property]; + } + if (property === 'display' && alternativeValues[value]) { + return getPrefixedValue(cssPrefix + alternativeValues[value], value, keepUnprefixed); + } + if (alternativeProps[property]) { + style[alternativeProps[property]] = alternativeValues[value] || value; + } + } + } + + var alternativeValues$1 = { + 'space-around': 'justify', + 'space-between': 'justify', + 'flex-start': 'start', + 'flex-end': 'end', + 'wrap-reverse': 'multiple', + wrap: 'multiple', + flex: 'box', + 'inline-flex': 'inline-box' + }; + + var alternativeProps$1 = { + alignItems: 'WebkitBoxAlign', + justifyContent: 'WebkitBoxPack', + flexWrap: 'WebkitBoxLines' + }; + + var otherProps = ['alignContent', 'alignSelf', 'order', 'flexGrow', 'flexShrink', 'flexBasis', 'flexDirection']; + var properties = Object.keys(alternativeProps$1).concat(otherProps); + + function flexboxOld(property, value, style, _ref) { + var browserName = _ref.browserName, + browserVersion = _ref.browserVersion, + cssPrefix = _ref.cssPrefix, + keepUnprefixed = _ref.keepUnprefixed, + requiresPrefix = _ref.requiresPrefix; + + if ((properties.indexOf(property) > -1 || property === 'display' && typeof value === 'string' && value.indexOf('flex') > -1) && (browserName === 'firefox' && browserVersion < 22 || browserName === 'chrome' && browserVersion < 21 || (browserName === 'safari' || browserName === 'ios_saf') && browserVersion <= 6.1 || browserName === 'android' && browserVersion < 4.4 || browserName === 'and_uc')) { + delete requiresPrefix[property]; + + if (!keepUnprefixed && !Array.isArray(style[property])) { + delete style[property]; + } + if (property === 'flexDirection' && typeof value === 'string') { + if (value.indexOf('column') > -1) { + style.WebkitBoxOrient = 'vertical'; + } else { + style.WebkitBoxOrient = 'horizontal'; + } + if (value.indexOf('reverse') > -1) { + style.WebkitBoxDirection = 'reverse'; + } else { + style.WebkitBoxDirection = 'normal'; + } + } + if (property === 'display' && alternativeValues$1[value]) { + return getPrefixedValue(cssPrefix + alternativeValues$1[value], value, keepUnprefixed); + } + if (alternativeProps$1[property]) { + style[alternativeProps$1[property]] = alternativeValues$1[value] || value; + } + } + } + + var values$1 = { + grab: true, + grabbing: true + }; + + function grabCursor(property, value, style, _ref) { + var browserName = _ref.browserName, + cssPrefix = _ref.cssPrefix, + keepUnprefixed = _ref.keepUnprefixed; + + // adds prefixes for firefox, chrome, safari, and opera regardless of + // version until a reliable brwoser support info can be found + // see: https://github.com/rofrischmann/inline-style-prefixer/issues/79 + if (property === 'cursor' && values$1[value] && (browserName === 'firefox' || browserName === 'chrome' || browserName === 'safari' || browserName === 'opera')) { + return getPrefixedValue(cssPrefix + value, value, keepUnprefixed); + } + } + + var values$2 = /linear-gradient|radial-gradient|repeating-linear-gradient|repeating-radial-gradient/; + + function gradient(property, value, style, _ref) { + var browserName = _ref.browserName, + browserVersion = _ref.browserVersion, + cssPrefix = _ref.cssPrefix, + keepUnprefixed = _ref.keepUnprefixed; + + if (typeof value === 'string' && value.match(values$2) !== null && (browserName === 'firefox' && browserVersion < 16 || browserName === 'chrome' && browserVersion < 26 || (browserName === 'safari' || browserName === 'ios_saf') && browserVersion < 7 || (browserName === 'opera' || browserName === 'op_mini') && browserVersion < 12.1 || browserName === 'android' && browserVersion < 4.4 || browserName === 'and_uc')) { + return getPrefixedValue(cssPrefix + value, value, keepUnprefixed); + } + } + + function imageSet(property, value, style, _ref) { + var browserName = _ref.browserName, + cssPrefix = _ref.cssPrefix, + keepUnprefixed = _ref.keepUnprefixed; + + if (typeof value === 'string' && value.indexOf('image-set(') > -1 && (browserName === 'chrome' || browserName === 'opera' || browserName === 'and_chr' || browserName === 'and_uc' || browserName === 'ios_saf' || browserName === 'safari')) { + return getPrefixedValue(value.replace(/image-set\(/g, cssPrefix + 'image-set('), value, keepUnprefixed); + } + } + + function position(property, value, _ref) { + var browserName = _ref.browserName, + cssPrefix = _ref.cssPrefix, + keepUnprefixed = _ref.keepUnprefixed; + + if (property === 'position' && value === 'sticky' && (browserName === 'safari' || browserName === 'ios_saf')) { + return getPrefixedValue(cssPrefix + value, value, keepUnprefixed); + } + } + + var properties$1 = { + maxHeight: true, + maxWidth: true, + width: true, + height: true, + columnWidth: true, + minWidth: true, + minHeight: true + }; + var values$3 = { + 'min-content': true, + 'max-content': true, + 'fill-available': true, + 'fit-content': true, + 'contain-floats': true + }; + + function sizing(property, value, style, _ref) { + var cssPrefix = _ref.cssPrefix, + keepUnprefixed = _ref.keepUnprefixed; + + // This might change in the future + // Keep an eye on it + if (properties$1[property] && values$3[value]) { + return getPrefixedValue(cssPrefix + value, value, keepUnprefixed); + } + } + + var index$1 = __commonjs(function (module) { + 'use strict'; + + var uppercasePattern = /[A-Z]/g; + var msPattern = /^ms-/; + var cache = {}; + + function hyphenateStyleName(string) { + return string in cache ? cache[string] : cache[string] = string.replace(uppercasePattern, '-$&').toLowerCase().replace(msPattern, '-ms-'); + } + + module.exports = hyphenateStyleName; + }); + + var hyphenateStyleName = (index$1 && typeof index$1 === 'object' && 'default' in index$1 ? index$1['default'] : index$1); + + var properties$2 = { + transition: true, + transitionProperty: true, + WebkitTransition: true, + WebkitTransitionProperty: true, + MozTransition: true, + MozTransitionProperty: true + }; + + var requiresPrefixDashCased = void 0; + // TODO: extract population + function transition(property, value, style, _ref) { + var cssPrefix = _ref.cssPrefix, + keepUnprefixed = _ref.keepUnprefixed, + requiresPrefix = _ref.requiresPrefix; + + if (typeof value === 'string' && properties$2[property]) { + var _ret = function () { + // memoize the prefix array for later use + if (!requiresPrefixDashCased) { + requiresPrefixDashCased = Object.keys(requiresPrefix).map(function (prop) { + return hyphenateStyleName(prop); + }); + } + + // only split multi values, not cubic beziers + var multipleValues = value.split(/,(?![^()]*(?:\([^()]*\))?\))/g); + + requiresPrefixDashCased.forEach(function (prop) { + multipleValues.forEach(function (val, index) { + if (val.indexOf(prop) > -1 && prop !== 'order') { + multipleValues[index] = val.replace(prop, cssPrefix + prop) + (keepUnprefixed ? ',' + val : ''); + } + }); + }); + + return { + v: multipleValues.join(',') + }; + }(); + + if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === "object") return _ret.v; + } + } + + var values$4 = { + 'zoom-in': true, + 'zoom-out': true + }; + + function zoomCursor(property, value, style, _ref) { + var browserName = _ref.browserName, + browserVersion = _ref.browserVersion, + cssPrefix = _ref.cssPrefix, + keepUnprefixed = _ref.keepUnprefixed; + + if (property === 'cursor' && values$4[value] && (browserName === 'firefox' && browserVersion < 24 || browserName === 'chrome' && browserVersion < 37 || browserName === 'safari' && browserVersion < 9 || browserName === 'opera' && browserVersion < 24)) { + return getPrefixedValue(cssPrefix + value, value, keepUnprefixed); + } + } + + var plugins = [position, calc, imageSet, crossFade, filter, grabCursor, zoomCursor, sizing, gradient, transition, flexboxIE, flexboxOld, flex]; + + function prefixProperty(prefixProperties, property, style) { + var requiredPrefixes = prefixProperties[property]; + + if (requiredPrefixes) { + for (var i = 0, len = requiredPrefixes.length; i < len; ++i) { + style[requiredPrefixes[i] + capitalizeString(property)] = style[property]; + } + } + } + + function createPrefixer$1(propertyPrefixMap) { + var plugins = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + + function prefixAll(style) { + for (var property in style) { + var value = style[property]; + + // handle nested objects + if (isObject(value)) { + style[property] = prefixAll(value); + // handle array values + } else if (Array.isArray(value)) { + var combinedValue = []; + + for (var i = 0, len = value.length; i < len; ++i) { + var processedValue = prefixValue(plugins, property, value[i], style, propertyPrefixMap); + addNewValuesOnly(combinedValue, processedValue || value[i]); + } + + // only modify the value if it was touched + // by any plugin to prevent unnecessary mutations + if (combinedValue.length > 0) { + style[property] = combinedValue; + } + } else { + var _processedValue = prefixValue(plugins, property, value, style, propertyPrefixMap); + + // only modify the value if it was touched + // by any plugin to prevent unnecessary mutations + if (_processedValue) { + style[property] = _processedValue; + } + + prefixProperty(propertyPrefixMap, property, style); + } + } + + return style; + } + + return prefixAll; + } + + var propertyPrefixMap$1 = { "appearance": ["Webkit", "Moz"], "userSelect": ["Webkit", "Moz", "ms"], "textEmphasisPosition": ["Webkit"], "textEmphasis": ["Webkit"], "textEmphasisStyle": ["Webkit"], "textEmphasisColor": ["Webkit"], "boxDecorationBreak": ["Webkit"], "clipPath": ["Webkit"], "maskImage": ["Webkit"], "maskMode": ["Webkit"], "maskRepeat": ["Webkit"], "maskPosition": ["Webkit"], "maskClip": ["Webkit"], "maskOrigin": ["Webkit"], "maskSize": ["Webkit"], "maskComposite": ["Webkit"], "mask": ["Webkit"], "maskBorderSource": ["Webkit"], "maskBorderMode": ["Webkit"], "maskBorderSlice": ["Webkit"], "maskBorderWidth": ["Webkit"], "maskBorderOutset": ["Webkit"], "maskBorderRepeat": ["Webkit"], "maskBorder": ["Webkit"], "maskType": ["Webkit"], "textDecorationStyle": ["Webkit", "Moz"], "textDecorationSkip": ["Webkit", "Moz"], "textDecorationLine": ["Webkit", "Moz"], "textDecorationColor": ["Webkit", "Moz"], "filter": ["Webkit"], "fontFeatureSettings": ["Webkit", "Moz"], "breakAfter": ["Webkit", "Moz", "ms"], "breakBefore": ["Webkit", "Moz", "ms"], "breakInside": ["Webkit", "Moz", "ms"], "columnCount": ["Webkit", "Moz"], "columnFill": ["Webkit", "Moz"], "columnGap": ["Webkit", "Moz"], "columnRule": ["Webkit", "Moz"], "columnRuleColor": ["Webkit", "Moz"], "columnRuleStyle": ["Webkit", "Moz"], "columnRuleWidth": ["Webkit", "Moz"], "columns": ["Webkit", "Moz"], "columnSpan": ["Webkit", "Moz"], "columnWidth": ["Webkit", "Moz"], "flex": ["Webkit", "Moz"], "flexBasis": ["Webkit"], "flexDirection": ["Webkit"], "flexGrow": ["Webkit"], "flexFlow": ["Webkit", "Moz"], "flexShrink": ["Webkit"], "flexWrap": ["Webkit", "Moz"], "alignContent": ["Webkit"], "alignItems": ["Webkit"], "alignSelf": ["Webkit"], "justifyContent": ["Webkit"], "order": ["Webkit"], "transform": ["Webkit", "Moz"], "transformOrigin": ["Webkit", "Moz"], "transformOriginX": ["Webkit", "Moz"], "transformOriginY": ["Webkit", "Moz"], "backfaceVisibility": ["Webkit", "Moz"], "perspective": ["Webkit", "Moz"], "perspectiveOrigin": ["Webkit", "Moz"], "transformStyle": ["Webkit", "Moz"], "transformOriginZ": ["Webkit", "Moz"], "animation": ["Webkit", "Moz"], "animationDelay": ["Webkit", "Moz"], "animationDirection": ["Webkit", "Moz"], "animationFillMode": ["Webkit", "Moz"], "animationDuration": ["Webkit", "Moz"], "animationIterationCount": ["Webkit", "Moz"], "animationName": ["Webkit", "Moz"], "animationPlayState": ["Webkit", "Moz"], "animationTimingFunction": ["Webkit", "Moz"], "backdropFilter": ["Webkit"], "fontKerning": ["Webkit"], "scrollSnapType": ["Webkit", "ms"], "scrollSnapPointsX": ["Webkit", "ms"], "scrollSnapPointsY": ["Webkit", "ms"], "scrollSnapDestination": ["Webkit", "ms"], "scrollSnapCoordinate": ["Webkit", "ms"], "shapeImageThreshold": ["Webkit"], "shapeImageMargin": ["Webkit"], "shapeImageOutside": ["Webkit"], "hyphens": ["Webkit", "Moz", "ms"], "flowInto": ["Webkit", "ms"], "flowFrom": ["Webkit", "ms"], "regionFragment": ["Webkit", "ms"], "borderRadius": ["Moz"], "borderImage": ["Moz"], "borderImageOutset": ["Moz"], "borderImageRepeat": ["Moz"], "borderImageSlice": ["Moz"], "borderImageSource": ["Moz"], "borderImageWidth": ["Moz"], "transitionDelay": ["Moz", "Webkit"], "transitionDuration": ["Moz", "Webkit"], "transitionProperty": ["Moz", "Webkit"], "transitionTimingFunction": ["Moz", "Webkit"], "boxSizing": ["Moz"], "textAlignLast": ["Moz"], "tabSize": ["Moz"], "resize": ["Moz"], "backgroundClip": ["Moz"], "backgroundOrigin": ["Moz"], "backgroundSize": ["Moz"], "boxShadow": ["Moz"], "wrapFlow": ["ms"], "wrapThrough": ["ms"], "wrapMargin": ["ms"], "gridTemplateColumns": ["ms"], "gridTemplateRows": ["ms"], "gridTemplateAreas": ["ms"], "gridTemplate": ["ms"], "gridAutoColumns": ["ms"], "gridAutoRows": ["ms"], "gridAutoFlow": ["ms"], "grid": ["ms"], "gridRowStart": ["ms"], "gridColumnStart": ["ms"], "gridRowEnd": ["ms"], "gridRow": ["ms"], "gridColumn": ["ms"], "gridColumnEnd": ["ms"], "gridColumnGap": ["ms"], "gridRowGap": ["ms"], "gridArea": ["ms"], "gridGap": ["ms"], "textSizeAdjust": ["Webkit", "ms"] }; + + var regex = /-webkit-|-moz-|-ms-/; + function isPrefixedValue(value) { + if (Array.isArray(value)) { + value = value.join(','); + } + + return value.match(regex) !== null; + } + + var prefixes = ['-webkit-', '-moz-', '']; + + function calc$1(property, value) { + if (typeof value === 'string' && !isPrefixedValue(value) && value.indexOf('calc(') > -1) { + return prefixes.map(function (prefix) { + return value.replace(/calc\(/g, prefix + 'calc('); + }); + } + } + + var prefixes$1 = ['-webkit-', '-moz-', '']; + + var values$5 = { + 'zoom-in': true, + 'zoom-out': true, + grab: true, + grabbing: true + }; + + function cursor(property, value) { + if (property === 'cursor' && values$5[value]) { + return prefixes$1.map(function (prefix) { + return prefix + value; + }); + } + } + + // http://caniuse.com/#search=cross-fade + var prefixes$2 = ['-webkit-', '']; + + function crossFade$1(property, value) { + if (typeof value === 'string' && !isPrefixedValue(value) && value.indexOf('cross-fade(') > -1) { + return prefixes$2.map(function (prefix) { + return value.replace(/cross-fade\(/g, prefix + 'cross-fade('); + }); + } + } + + // http://caniuse.com/#feat=css-filter-function + var prefixes$3 = ['-webkit-', '']; + + function filter$1(property, value) { + if (typeof value === 'string' && !isPrefixedValue(value) && value.indexOf('filter(') > -1) { + return prefixes$3.map(function (prefix) { + return value.replace(/filter\(/g, prefix + 'filter('); + }); + } + } + + var values$6 = { + flex: true, + 'inline-flex': true + }; + + function flex$1(property, value) { + if (property === 'display' && values$6[value]) { + return ['-webkit-box', '-moz-box', '-ms-' + value + 'box', '-webkit-' + value, value]; + } + } + + var alternativeValues$2 = { + 'space-around': 'distribute', + 'space-between': 'justify', + 'flex-start': 'start', + 'flex-end': 'end' + }; + var alternativeProps$2 = { + alignContent: 'msFlexLinePack', + alignSelf: 'msFlexItemAlign', + alignItems: 'msFlexAlign', + justifyContent: 'msFlexPack', + order: 'msFlexOrder', + flexGrow: 'msFlexPositive', + flexShrink: 'msFlexNegative', + flexBasis: 'msPreferredSize' + }; + + function flexboxIE$1(property, value, style) { + if (alternativeProps$2[property]) { + style[alternativeProps$2[property]] = alternativeValues$2[value] || value; + } + } + + var alternativeValues$3 = { + 'space-around': 'justify', + 'space-between': 'justify', + 'flex-start': 'start', + 'flex-end': 'end', + 'wrap-reverse': 'multiple', + wrap: 'multiple' + }; + + var alternativeProps$3 = { + alignItems: 'WebkitBoxAlign', + justifyContent: 'WebkitBoxPack', + flexWrap: 'WebkitBoxLines' + }; + + function flexboxOld$1(property, value, style) { + if (property === 'flexDirection' && typeof value === 'string') { + if (value.indexOf('column') > -1) { + style.WebkitBoxOrient = 'vertical'; + } else { + style.WebkitBoxOrient = 'horizontal'; + } + if (value.indexOf('reverse') > -1) { + style.WebkitBoxDirection = 'reverse'; + } else { + style.WebkitBoxDirection = 'normal'; + } + } + if (alternativeProps$3[property]) { + style[alternativeProps$3[property]] = alternativeValues$3[value] || value; + } + } + + var prefixes$4 = ['-webkit-', '-moz-', '']; + var values$7 = /linear-gradient|radial-gradient|repeating-linear-gradient|repeating-radial-gradient/; + + function gradient$1(property, value) { + if (typeof value === 'string' && !isPrefixedValue(value) && value.match(values$7) !== null) { + return prefixes$4.map(function (prefix) { + return prefix + value; + }); + } + } + + // http://caniuse.com/#feat=css-image-set + var prefixes$5 = ['-webkit-', '']; + + function imageSet$1(property, value) { + if (typeof value === 'string' && !isPrefixedValue(value) && value.indexOf('image-set(') > -1) { + return prefixes$5.map(function (prefix) { + return value.replace(/image-set\(/g, prefix + 'image-set('); + }); + } + } + + function position$1(property, value) { + if (property === 'position' && value === 'sticky') { + return ['-webkit-sticky', 'sticky']; + } + } + + var prefixes$6 = ['-webkit-', '-moz-', '']; + + var properties$3 = { + maxHeight: true, + maxWidth: true, + width: true, + height: true, + columnWidth: true, + minWidth: true, + minHeight: true + }; + var values$8 = { + 'min-content': true, + 'max-content': true, + 'fill-available': true, + 'fit-content': true, + 'contain-floats': true + }; + + function sizing$1(property, value) { + if (properties$3[property] && values$8[value]) { + return prefixes$6.map(function (prefix) { + return prefix + value; + }); + } + } + + var properties$4 = { + transition: true, + transitionProperty: true, + WebkitTransition: true, + WebkitTransitionProperty: true, + MozTransition: true, + MozTransitionProperty: true + }; + + var prefixMapping = { + Webkit: '-webkit-', + Moz: '-moz-', + ms: '-ms-' + }; + + function prefixValue$1(value, propertyPrefixMap) { + if (isPrefixedValue(value)) { + return value; + } + + // only split multi values, not cubic beziers + var multipleValues = value.split(/,(?![^()]*(?:\([^()]*\))?\))/g); + + for (var i = 0, len = multipleValues.length; i < len; ++i) { + var singleValue = multipleValues[i]; + var values = [singleValue]; + for (var property in propertyPrefixMap) { + var dashCaseProperty = hyphenateStyleName(property); + + if (singleValue.indexOf(dashCaseProperty) > -1 && dashCaseProperty !== 'order') { + var prefixes = propertyPrefixMap[property]; + for (var j = 0, pLen = prefixes.length; j < pLen; ++j) { + // join all prefixes and create a new value + values.unshift(singleValue.replace(dashCaseProperty, prefixMapping[prefixes[j]] + dashCaseProperty)); + } + } + } + + multipleValues[i] = values.join(','); + } + + return multipleValues.join(','); + } + + function transition$1(property, value, style, propertyPrefixMap) { + // also check for already prefixed transitions + if (typeof value === 'string' && properties$4[property]) { + var outputValue = prefixValue$1(value, propertyPrefixMap); + // if the property is already prefixed + var webkitOutput = outputValue.split(/,(?![^()]*(?:\([^()]*\))?\))/g).filter(function (val) { + return val.match(/-moz-|-ms-/) === null; + }).join(','); + + if (property.indexOf('Webkit') > -1) { + return webkitOutput; + } + + var mozOutput = outputValue.split(/,(?![^()]*(?:\([^()]*\))?\))/g).filter(function (val) { + return val.match(/-webkit-|-ms-/) === null; + }).join(','); + + if (property.indexOf('Moz') > -1) { + return mozOutput; + } + + style['Webkit' + capitalizeString(property)] = webkitOutput; + style['Moz' + capitalizeString(property)] = mozOutput; + return outputValue; + } + } + + var plugins$1 = [position$1, calc$1, imageSet$1, crossFade$1, filter$1, cursor, sizing$1, gradient$1, transition$1, flexboxIE$1, flexboxOld$1, flex$1]; + + var fallback = createPrefixer$1(propertyPrefixMap$1, plugins$1); + + var index = createPrefixer(propertyPrefixMap, plugins, fallback); + + return index; + +})); +//# sourceMappingURL=inline-style-prefixer.js.map \ No newline at end of file diff --git a/dist/inline-style-prefixer.js.map b/dist/inline-style-prefixer.js.map new file mode 100644 index 0000000..e5bae3d --- /dev/null +++ b/dist/inline-style-prefixer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"inline-style-prefixer.js","sources":["../node_modules/bowser/src/bowser.js","../modules/utils/getBrowserInformation.js","../modules/utils/getPrefixedKeyframes.js","../modules/utils/capitalizeString.js","../modules/utils/addNewValuesOnly.js","../modules/utils/isObject.js","../modules/utils/prefixValue.js","../modules/dynamic/createPrefixer.js","../modules/dynamic/propertyPrefixMap.js","../modules/utils/getPrefixedValue.js","../modules/dynamic/plugins/calc.js","../modules/dynamic/plugins/crossFade.js","../modules/dynamic/plugins/filter.js","../modules/dynamic/plugins/flex.js","../modules/dynamic/plugins/flexboxIE.js","../modules/dynamic/plugins/flexboxOld.js","../modules/dynamic/plugins/grabCursor.js","../modules/dynamic/plugins/gradient.js","../modules/dynamic/plugins/imageSet.js","../modules/dynamic/plugins/position.js","../modules/dynamic/plugins/sizing.js","../node_modules/hyphenate-style-name/index.js","../modules/dynamic/plugins/transition.js","../modules/dynamic/plugins/zoomCursor.js","../modules/dynamic/plugins/index.js","../modules/utils/prefixProperty.js","../modules/static/createPrefixer.js","../modules/static/propertyPrefixMap.js","../modules/utils/isPrefixedValue.js","../modules/static/plugins/calc.js","../modules/static/plugins/cursor.js","../modules/static/plugins/crossFade.js","../modules/static/plugins/filter.js","../modules/static/plugins/flex.js","../modules/static/plugins/flexboxIE.js","../modules/static/plugins/flexboxOld.js","../modules/static/plugins/gradient.js","../modules/static/plugins/imageSet.js","../modules/static/plugins/position.js","../modules/static/plugins/sizing.js","../modules/static/plugins/transition.js","../modules/static/plugins/index.js","../modules/static/index.js","../modules//dynamic/index.js"],"sourcesContent":["/*!\n * Bowser - a browser detector\n * https://github.com/ded/bowser\n * MIT License | (c) Dustin Diaz 2015\n */\n\n!function (root, name, definition) {\n if (typeof module != 'undefined' && module.exports) module.exports = definition()\n else if (typeof define == 'function' && define.amd) define(name, definition)\n else root[name] = definition()\n}(this, 'bowser', function () {\n /**\n * See useragents.js for examples of navigator.userAgent\n */\n\n var t = true\n\n function detect(ua) {\n\n function getFirstMatch(regex) {\n var match = ua.match(regex);\n return (match && match.length > 1 && match[1]) || '';\n }\n\n function getSecondMatch(regex) {\n var match = ua.match(regex);\n return (match && match.length > 1 && match[2]) || '';\n }\n\n var iosdevice = getFirstMatch(/(ipod|iphone|ipad)/i).toLowerCase()\n , likeAndroid = /like android/i.test(ua)\n , android = !likeAndroid && /android/i.test(ua)\n , nexusMobile = /nexus\\s*[0-6]\\s*/i.test(ua)\n , nexusTablet = !nexusMobile && /nexus\\s*[0-9]+/i.test(ua)\n , chromeos = /CrOS/.test(ua)\n , silk = /silk/i.test(ua)\n , sailfish = /sailfish/i.test(ua)\n , tizen = /tizen/i.test(ua)\n , webos = /(web|hpw)os/i.test(ua)\n , windowsphone = /windows phone/i.test(ua)\n , samsungBrowser = /SamsungBrowser/i.test(ua)\n , windows = !windowsphone && /windows/i.test(ua)\n , mac = !iosdevice && !silk && /macintosh/i.test(ua)\n , linux = !android && !sailfish && !tizen && !webos && /linux/i.test(ua)\n , edgeVersion = getFirstMatch(/edge\\/(\\d+(\\.\\d+)?)/i)\n , versionIdentifier = getFirstMatch(/version\\/(\\d+(\\.\\d+)?)/i)\n , tablet = /tablet/i.test(ua)\n , mobile = !tablet && /[^-]mobi/i.test(ua)\n , xbox = /xbox/i.test(ua)\n , result\n\n if (/opera/i.test(ua)) {\n // an old Opera\n result = {\n name: 'Opera'\n , opera: t\n , version: versionIdentifier || getFirstMatch(/(?:opera|opr|opios)[\\s\\/](\\d+(\\.\\d+)?)/i)\n }\n } else if (/opr|opios/i.test(ua)) {\n // a new Opera\n result = {\n name: 'Opera'\n , opera: t\n , version: getFirstMatch(/(?:opr|opios)[\\s\\/](\\d+(\\.\\d+)?)/i) || versionIdentifier\n }\n }\n else if (/SamsungBrowser/i.test(ua)) {\n result = {\n name: 'Samsung Internet for Android'\n , samsungBrowser: t\n , version: versionIdentifier || getFirstMatch(/(?:SamsungBrowser)[\\s\\/](\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/coast/i.test(ua)) {\n result = {\n name: 'Opera Coast'\n , coast: t\n , version: versionIdentifier || getFirstMatch(/(?:coast)[\\s\\/](\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/yabrowser/i.test(ua)) {\n result = {\n name: 'Yandex Browser'\n , yandexbrowser: t\n , version: versionIdentifier || getFirstMatch(/(?:yabrowser)[\\s\\/](\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/ucbrowser/i.test(ua)) {\n result = {\n name: 'UC Browser'\n , ucbrowser: t\n , version: getFirstMatch(/(?:ucbrowser)[\\s\\/](\\d+(?:\\.\\d+)+)/i)\n }\n }\n else if (/mxios/i.test(ua)) {\n result = {\n name: 'Maxthon'\n , maxthon: t\n , version: getFirstMatch(/(?:mxios)[\\s\\/](\\d+(?:\\.\\d+)+)/i)\n }\n }\n else if (/epiphany/i.test(ua)) {\n result = {\n name: 'Epiphany'\n , epiphany: t\n , version: getFirstMatch(/(?:epiphany)[\\s\\/](\\d+(?:\\.\\d+)+)/i)\n }\n }\n else if (/puffin/i.test(ua)) {\n result = {\n name: 'Puffin'\n , puffin: t\n , version: getFirstMatch(/(?:puffin)[\\s\\/](\\d+(?:\\.\\d+)?)/i)\n }\n }\n else if (/sleipnir/i.test(ua)) {\n result = {\n name: 'Sleipnir'\n , sleipnir: t\n , version: getFirstMatch(/(?:sleipnir)[\\s\\/](\\d+(?:\\.\\d+)+)/i)\n }\n }\n else if (/k-meleon/i.test(ua)) {\n result = {\n name: 'K-Meleon'\n , kMeleon: t\n , version: getFirstMatch(/(?:k-meleon)[\\s\\/](\\d+(?:\\.\\d+)+)/i)\n }\n }\n else if (windowsphone) {\n result = {\n name: 'Windows Phone'\n , windowsphone: t\n }\n if (edgeVersion) {\n result.msedge = t\n result.version = edgeVersion\n }\n else {\n result.msie = t\n result.version = getFirstMatch(/iemobile\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/msie|trident/i.test(ua)) {\n result = {\n name: 'Internet Explorer'\n , msie: t\n , version: getFirstMatch(/(?:msie |rv:)(\\d+(\\.\\d+)?)/i)\n }\n } else if (chromeos) {\n result = {\n name: 'Chrome'\n , chromeos: t\n , chromeBook: t\n , chrome: t\n , version: getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.\\d+)?)/i)\n }\n } else if (/chrome.+? edge/i.test(ua)) {\n result = {\n name: 'Microsoft Edge'\n , msedge: t\n , version: edgeVersion\n }\n }\n else if (/vivaldi/i.test(ua)) {\n result = {\n name: 'Vivaldi'\n , vivaldi: t\n , version: getFirstMatch(/vivaldi\\/(\\d+(\\.\\d+)?)/i) || versionIdentifier\n }\n }\n else if (sailfish) {\n result = {\n name: 'Sailfish'\n , sailfish: t\n , version: getFirstMatch(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/seamonkey\\//i.test(ua)) {\n result = {\n name: 'SeaMonkey'\n , seamonkey: t\n , version: getFirstMatch(/seamonkey\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/firefox|iceweasel|fxios/i.test(ua)) {\n result = {\n name: 'Firefox'\n , firefox: t\n , version: getFirstMatch(/(?:firefox|iceweasel|fxios)[ \\/](\\d+(\\.\\d+)?)/i)\n }\n if (/\\((mobile|tablet);[^\\)]*rv:[\\d\\.]+\\)/i.test(ua)) {\n result.firefoxos = t\n }\n }\n else if (silk) {\n result = {\n name: 'Amazon Silk'\n , silk: t\n , version : getFirstMatch(/silk\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/phantom/i.test(ua)) {\n result = {\n name: 'PhantomJS'\n , phantom: t\n , version: getFirstMatch(/phantomjs\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/slimerjs/i.test(ua)) {\n result = {\n name: 'SlimerJS'\n , slimer: t\n , version: getFirstMatch(/slimerjs\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/blackberry|\\bbb\\d+/i.test(ua) || /rim\\stablet/i.test(ua)) {\n result = {\n name: 'BlackBerry'\n , blackberry: t\n , version: versionIdentifier || getFirstMatch(/blackberry[\\d]+\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (webos) {\n result = {\n name: 'WebOS'\n , webos: t\n , version: versionIdentifier || getFirstMatch(/w(?:eb)?osbrowser\\/(\\d+(\\.\\d+)?)/i)\n };\n /touchpad\\//i.test(ua) && (result.touchpad = t)\n }\n else if (/bada/i.test(ua)) {\n result = {\n name: 'Bada'\n , bada: t\n , version: getFirstMatch(/dolfin\\/(\\d+(\\.\\d+)?)/i)\n };\n }\n else if (tizen) {\n result = {\n name: 'Tizen'\n , tizen: t\n , version: getFirstMatch(/(?:tizen\\s?)?browser\\/(\\d+(\\.\\d+)?)/i) || versionIdentifier\n };\n }\n else if (/qupzilla/i.test(ua)) {\n result = {\n name: 'QupZilla'\n , qupzilla: t\n , version: getFirstMatch(/(?:qupzilla)[\\s\\/](\\d+(?:\\.\\d+)+)/i) || versionIdentifier\n }\n }\n else if (/chromium/i.test(ua)) {\n result = {\n name: 'Chromium'\n , chromium: t\n , version: getFirstMatch(/(?:chromium)[\\s\\/](\\d+(?:\\.\\d+)?)/i) || versionIdentifier\n }\n }\n else if (/chrome|crios|crmo/i.test(ua)) {\n result = {\n name: 'Chrome'\n , chrome: t\n , version: getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (android) {\n result = {\n name: 'Android'\n , version: versionIdentifier\n }\n }\n else if (/safari|applewebkit/i.test(ua)) {\n result = {\n name: 'Safari'\n , safari: t\n }\n if (versionIdentifier) {\n result.version = versionIdentifier\n }\n }\n else if (iosdevice) {\n result = {\n name : iosdevice == 'iphone' ? 'iPhone' : iosdevice == 'ipad' ? 'iPad' : 'iPod'\n }\n // WTF: version is not part of user agent in web apps\n if (versionIdentifier) {\n result.version = versionIdentifier\n }\n }\n else if(/googlebot/i.test(ua)) {\n result = {\n name: 'Googlebot'\n , googlebot: t\n , version: getFirstMatch(/googlebot\\/(\\d+(\\.\\d+))/i) || versionIdentifier\n }\n }\n else {\n result = {\n name: getFirstMatch(/^(.*)\\/(.*) /),\n version: getSecondMatch(/^(.*)\\/(.*) /)\n };\n }\n\n // set webkit or gecko flag for browsers based on these engines\n if (!result.msedge && /(apple)?webkit/i.test(ua)) {\n if (/(apple)?webkit\\/537\\.36/i.test(ua)) {\n result.name = result.name || \"Blink\"\n result.blink = t\n } else {\n result.name = result.name || \"Webkit\"\n result.webkit = t\n }\n if (!result.version && versionIdentifier) {\n result.version = versionIdentifier\n }\n } else if (!result.opera && /gecko\\//i.test(ua)) {\n result.name = result.name || \"Gecko\"\n result.gecko = t\n result.version = result.version || getFirstMatch(/gecko\\/(\\d+(\\.\\d+)?)/i)\n }\n\n // set OS flags for platforms that have multiple browsers\n if (!result.windowsphone && !result.msedge && (android || result.silk)) {\n result.android = t\n } else if (!result.windowsphone && !result.msedge && iosdevice) {\n result[iosdevice] = t\n result.ios = t\n } else if (mac) {\n result.mac = t\n } else if (xbox) {\n result.xbox = t\n } else if (windows) {\n result.windows = t\n } else if (linux) {\n result.linux = t\n }\n\n // OS version extraction\n var osVersion = '';\n if (result.windowsphone) {\n osVersion = getFirstMatch(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i);\n } else if (iosdevice) {\n osVersion = getFirstMatch(/os (\\d+([_\\s]\\d+)*) like mac os x/i);\n osVersion = osVersion.replace(/[_\\s]/g, '.');\n } else if (android) {\n osVersion = getFirstMatch(/android[ \\/-](\\d+(\\.\\d+)*)/i);\n } else if (result.webos) {\n osVersion = getFirstMatch(/(?:web|hpw)os\\/(\\d+(\\.\\d+)*)/i);\n } else if (result.blackberry) {\n osVersion = getFirstMatch(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i);\n } else if (result.bada) {\n osVersion = getFirstMatch(/bada\\/(\\d+(\\.\\d+)*)/i);\n } else if (result.tizen) {\n osVersion = getFirstMatch(/tizen[\\/\\s](\\d+(\\.\\d+)*)/i);\n }\n if (osVersion) {\n result.osversion = osVersion;\n }\n\n // device type extraction\n var osMajorVersion = osVersion.split('.')[0];\n if (\n tablet\n || nexusTablet\n || iosdevice == 'ipad'\n || (android && (osMajorVersion == 3 || (osMajorVersion >= 4 && !mobile)))\n || result.silk\n ) {\n result.tablet = t\n } else if (\n mobile\n || iosdevice == 'iphone'\n || iosdevice == 'ipod'\n || android\n || nexusMobile\n || result.blackberry\n || result.webos\n || result.bada\n ) {\n result.mobile = t\n }\n\n // Graded Browser Support\n // http://developer.yahoo.com/yui/articles/gbs\n if (result.msedge ||\n (result.msie && result.version >= 10) ||\n (result.yandexbrowser && result.version >= 15) ||\n\t\t (result.vivaldi && result.version >= 1.0) ||\n (result.chrome && result.version >= 20) ||\n (result.samsungBrowser && result.version >= 4) ||\n (result.firefox && result.version >= 20.0) ||\n (result.safari && result.version >= 6) ||\n (result.opera && result.version >= 10.0) ||\n (result.ios && result.osversion && result.osversion.split(\".\")[0] >= 6) ||\n (result.blackberry && result.version >= 10.1)\n || (result.chromium && result.version >= 20)\n ) {\n result.a = t;\n }\n else if ((result.msie && result.version < 10) ||\n (result.chrome && result.version < 20) ||\n (result.firefox && result.version < 20.0) ||\n (result.safari && result.version < 6) ||\n (result.opera && result.version < 10.0) ||\n (result.ios && result.osversion && result.osversion.split(\".\")[0] < 6)\n || (result.chromium && result.version < 20)\n ) {\n result.c = t\n } else result.x = t\n\n return result\n }\n\n var bowser = detect(typeof navigator !== 'undefined' ? navigator.userAgent || '' : '')\n\n bowser.test = function (browserList) {\n for (var i = 0; i < browserList.length; ++i) {\n var browserItem = browserList[i];\n if (typeof browserItem=== 'string') {\n if (browserItem in bowser) {\n return true;\n }\n }\n }\n return false;\n }\n\n /**\n * Get version precisions count\n *\n * @example\n * getVersionPrecision(\"1.10.3\") // 3\n *\n * @param {string} version\n * @return {number}\n */\n function getVersionPrecision(version) {\n return version.split(\".\").length;\n }\n\n /**\n * Array::map polyfill\n *\n * @param {Array} arr\n * @param {Function} iterator\n * @return {Array}\n */\n function map(arr, iterator) {\n var result = [], i;\n if (Array.prototype.map) {\n return Array.prototype.map.call(arr, iterator);\n }\n for (i = 0; i < arr.length; i++) {\n result.push(iterator(arr[i]));\n }\n return result;\n }\n\n /**\n * Calculate browser version weight\n *\n * @example\n * compareVersions(['1.10.2.1', '1.8.2.1.90']) // 1\n * compareVersions(['1.010.2.1', '1.09.2.1.90']); // 1\n * compareVersions(['1.10.2.1', '1.10.2.1']); // 0\n * compareVersions(['1.10.2.1', '1.0800.2']); // -1\n *\n * @param {Array} versions versions to compare\n * @return {Number} comparison result\n */\n function compareVersions(versions) {\n // 1) get common precision for both versions, for example for \"10.0\" and \"9\" it should be 2\n var precision = Math.max(getVersionPrecision(versions[0]), getVersionPrecision(versions[1]));\n var chunks = map(versions, function (version) {\n var delta = precision - getVersionPrecision(version);\n\n // 2) \"9\" -> \"9.0\" (for precision = 2)\n version = version + new Array(delta + 1).join(\".0\");\n\n // 3) \"9.0\" -> [\"000000000\"\", \"000000009\"]\n return map(version.split(\".\"), function (chunk) {\n return new Array(20 - chunk.length).join(\"0\") + chunk;\n }).reverse();\n });\n\n // iterate in reverse order by reversed chunks array\n while (--precision >= 0) {\n // 4) compare: \"000000009\" > \"000000010\" = false (but \"9\" > \"10\" = true)\n if (chunks[0][precision] > chunks[1][precision]) {\n return 1;\n }\n else if (chunks[0][precision] === chunks[1][precision]) {\n if (precision === 0) {\n // all version chunks are same\n return 0;\n }\n }\n else {\n return -1;\n }\n }\n }\n\n /**\n * Check if browser is unsupported\n *\n * @example\n * bowser.isUnsupportedBrowser({\n * msie: \"10\",\n * firefox: \"23\",\n * chrome: \"29\",\n * safari: \"5.1\",\n * opera: \"16\",\n * phantom: \"534\"\n * });\n *\n * @param {Object} minVersions map of minimal version to browser\n * @param {Boolean} [strictMode = false] flag to return false if browser wasn't found in map\n * @param {String} [ua] user agent string\n * @return {Boolean}\n */\n function isUnsupportedBrowser(minVersions, strictMode, ua) {\n var _bowser = bowser;\n\n // make strictMode param optional with ua param usage\n if (typeof strictMode === 'string') {\n ua = strictMode;\n strictMode = void(0);\n }\n\n if (strictMode === void(0)) {\n strictMode = false;\n }\n if (ua) {\n _bowser = detect(ua);\n }\n\n var version = \"\" + _bowser.version;\n for (var browser in minVersions) {\n if (minVersions.hasOwnProperty(browser)) {\n if (_bowser[browser]) {\n if (typeof minVersions[browser] !== 'string') {\n throw new Error('Browser version in the minVersion map should be a string: ' + browser + ': ' + String(minVersions));\n }\n\n // browser version and min supported version.\n return compareVersions([version, minVersions[browser]]) < 0;\n }\n }\n }\n\n return strictMode; // not found\n }\n\n /**\n * Check if browser is supported\n *\n * @param {Object} minVersions map of minimal version to browser\n * @param {Boolean} [strictMode = false] flag to return false if browser wasn't found in map\n * @param {String} [ua] user agent string\n * @return {Boolean}\n */\n function check(minVersions, strictMode, ua) {\n return !isUnsupportedBrowser(minVersions, strictMode, ua);\n }\n\n bowser.isUnsupportedBrowser = isUnsupportedBrowser;\n bowser.compareVersions = compareVersions;\n bowser.check = check;\n\n /*\n * Set our detect method to the main bowser object so we can\n * reuse it to test other user agents.\n * This is needed to implement future tests.\n */\n bowser._detect = detect;\n\n return bowser\n});\n","/* @flow */\nimport bowser from 'bowser'\n\nconst prefixByBrowser = {\n chrome: 'Webkit',\n safari: 'Webkit',\n ios: 'Webkit',\n android: 'Webkit',\n phantom: 'Webkit',\n opera: 'Webkit',\n webos: 'Webkit',\n blackberry: 'Webkit',\n bada: 'Webkit',\n tizen: 'Webkit',\n chromium: 'Webkit',\n vivaldi: 'Webkit',\n firefox: 'Moz',\n seamoney: 'Moz',\n sailfish: 'Moz',\n msie: 'ms',\n msedge: 'ms'\n}\n\nconst browserByCanIuseAlias = {\n chrome: 'chrome',\n chromium: 'chrome',\n safari: 'safari',\n firfox: 'firefox',\n msedge: 'edge',\n opera: 'opera',\n vivaldi: 'opera',\n msie: 'ie'\n}\n\nfunction getBrowserName(browserInfo: Object): ?string {\n if (browserInfo.firefox) {\n return 'firefox'\n }\n\n if (browserInfo.mobile || browserInfo.tablet) {\n if (browserInfo.ios) {\n return 'ios_saf'\n } else if (browserInfo.android) {\n return 'android'\n } else if (browserInfo.opera) {\n return 'op_mini'\n }\n }\n\n for (const browser in browserByCanIuseAlias) {\n if (browserInfo[browser]) {\n return browserByCanIuseAlias[browser]\n }\n }\n}\n\n/**\n * Uses bowser to get default browser browserInformation such as version and name\n * Evaluates bowser browserInfo and adds vendorPrefix browserInformation\n * @param {string} userAgent - userAgent that gets evaluated\n */\nexport default function getBrowserInformation(userAgent: string): Object | boolean {\n const browserInfo = bowser._detect(userAgent)\n\n for (const browser in prefixByBrowser) {\n if (browserInfo[browser]) {\n const prefix = prefixByBrowser[browser]\n\n browserInfo.jsPrefix = prefix\n browserInfo.cssPrefix = `-${prefix.toLowerCase()}-`\n break\n }\n }\n\n browserInfo.browserName = getBrowserName(browserInfo)\n\n // For cordova IOS 8 the version is missing, set truncated osversion to prevent NaN\n if (browserInfo.version) {\n browserInfo.browserVersion = parseFloat(browserInfo.version)\n } else {\n browserInfo.browserVersion = parseInt(parseFloat(browserInfo.osversion), 10)\n }\n\n browserInfo.osVersion = parseFloat(browserInfo.osversion)\n\n // iOS forces all browsers to use Safari under the hood\n // as the Safari version seems to match the iOS version\n // we just explicitely use the osversion instead\n // https://github.com/rofrischmann/inline-style-prefixer/issues/72\n if (browserInfo.browserName === 'ios_saf' && browserInfo.browserVersion > browserInfo.osVersion) {\n browserInfo.browserVersion = browserInfo.osVersion\n }\n\n // seperate native android chrome\n // https://github.com/rofrischmann/inline-style-prefixer/issues/45\n if (\n browserInfo.browserName === 'android' && browserInfo.chrome && browserInfo.browserVersion > 37\n ) {\n browserInfo.browserName = 'and_chr'\n }\n\n // For android < 4.4 we want to check the osversion\n // not the chrome version, see issue #26\n // https://github.com/rofrischmann/inline-style-prefixer/issues/26\n if (browserInfo.browserName === 'android' && browserInfo.osVersion < 5) {\n browserInfo.browserVersion = browserInfo.osVersion\n }\n\n // Samsung browser are basically build on Chrome > 44\n // https://github.com/rofrischmann/inline-style-prefixer/issues/102\n if (browserInfo.browserName === 'android' && browserInfo.samsungBrowser) {\n browserInfo.browserName = 'and_chr'\n browserInfo.browserVersion = 44\n }\n\n return browserInfo\n}\n","/* @flow */\nexport default function getPrefixedKeyframes(\n browserName: string,\n browserVersion: number,\n cssPrefix: string\n): string {\n const prefixedKeyframes = 'keyframes'\n\n if (\n browserName === 'chrome' && browserVersion < 43 ||\n (browserName === 'safari' || browserName === 'ios_saf') &&\n browserVersion < 9 ||\n browserName === 'opera' && browserVersion < 30 ||\n browserName === 'android' && browserVersion <= 4.4 ||\n browserName === 'and_uc'\n ) {\n return cssPrefix + prefixedKeyframes\n }\n return prefixedKeyframes\n}\n","/* @flow */\nexport default function capitalizeString(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1)\n}\n","/* @flow */\nfunction addIfNew(list: Array, value: any): void {\n if (list.indexOf(value) === -1) {\n list.push(value)\n }\n}\n\nexport default function addNewValuesOnly(list: Array, values: Array | any): void {\n if (Array.isArray(values)) {\n for (let i = 0, len = values.length; i < len; ++i) {\n addIfNew(list, values[i])\n }\n } else {\n addIfNew(list, values)\n }\n}\n","/* @flow */\nexport default function isObject(value: any): boolean {\n return value instanceof Object && !Array.isArray(value)\n}\n","/* @flow */\nexport default function prefixValue(\n plugins: Array,\n property: string,\n value: any,\n style: Object,\n metaData: ?Object\n): ?any {\n for (let i = 0, len = plugins.length; i < len; ++i) {\n const processedValue = plugins[i](property, value, style, metaData)\n\n // we can stop processing if a value is returned\n // as all plugin criteria are unique\n if (processedValue) {\n return processedValue\n }\n }\n}\n","import getBrowserInformation from '../utils/getBrowserInformation'\nimport getPrefixedKeyframes from '../utils/getPrefixedKeyframes'\nimport capitalizeString from '../utils/capitalizeString'\nimport addNewValuesOnly from '../utils/addNewValuesOnly'\nimport isObject from '../utils/isObject'\nimport prefixValue from '../utils/prefixValue'\n\nexport default function createPrefixer(\n propertyPrefixMap: Object,\n plugins: ?Array = [],\n fallback: ?Function = style => style\n) {\n return class Prefixer {\n /**\n * Instantiante a new prefixer\n * @param {string} userAgent - userAgent to gather prefix information according to caniuse.com\n * @param {string} keepUnprefixed - keeps unprefixed properties and values\n */\n constructor(options = {}) {\n const defaultUserAgent = typeof navigator !== 'undefined' ? navigator.userAgent : undefined\n\n this._userAgent = options.userAgent || defaultUserAgent\n this._keepUnprefixed = options.keepUnprefixed || false\n\n if (this._userAgent) {\n this._browserInfo = getBrowserInformation(this._userAgent)\n }\n\n // Checks if the userAgent was resolved correctly\n if (this._browserInfo && this._browserInfo.cssPrefix) {\n this.prefixedKeyframes = getPrefixedKeyframes(\n this._browserInfo.browserName,\n this._browserInfo.browserVersion,\n this._browserInfo.cssPrefix\n )\n } else {\n this._useFallback = true\n return false\n }\n\n const prefixData = this._browserInfo.browserName &&\n propertyPrefixMap[this._browserInfo.browserName]\n if (prefixData) {\n this._requiresPrefix = {}\n\n for (const property in prefixData) {\n if (prefixData[property] >= this._browserInfo.browserVersion) {\n this._requiresPrefix[property] = true\n }\n }\n\n this._hasPropsRequiringPrefix = Object.keys(this._requiresPrefix).length > 0\n } else {\n this._useFallback = true\n }\n\n this._metaData = {\n browserVersion: this._browserInfo.browserVersion,\n browserName: this._browserInfo.browserName,\n cssPrefix: this._browserInfo.cssPrefix,\n jsPrefix: this._browserInfo.jsPrefix,\n keepUnprefixed: this._keepUnprefixed,\n requiresPrefix: this._requiresPrefix\n }\n }\n\n prefix(style: Object): Object {\n // use static prefixer as fallback if userAgent can not be resolved\n if (this._useFallback) {\n return fallback(style)\n }\n\n // only add prefixes if needed\n if (!this._hasPropsRequiringPrefix) {\n return style\n }\n\n return this._prefixStyle(style)\n }\n\n _prefixStyle(style: Object): Object {\n for (const property in style) {\n const value = style[property]\n\n // handle nested objects\n if (isObject(value)) {\n style[property] = this.prefix(value)\n // handle array values\n } else if (Array.isArray(value)) {\n const combinedValue = []\n\n for (let i = 0, len = value.length; i < len; ++i) {\n const processedValue = prefixValue(plugins, property, value[i], style, this._metaData)\n addNewValuesOnly(combinedValue, processedValue || value[i])\n }\n\n // only modify the value if it was touched\n // by any plugin to prevent unnecessary mutations\n if (combinedValue.length > 0) {\n style[property] = combinedValue\n }\n } else {\n const processedValue = prefixValue(plugins, property, value, style, this._metaData)\n\n // only modify the value if it was touched\n // by any plugin to prevent unnecessary mutations\n if (processedValue) {\n style[property] = processedValue\n }\n\n // add prefixes to properties\n if (this._requiresPrefix[property]) {\n style[this._browserInfo.jsPrefix + capitalizeString(property)] = value\n if (!this._keepUnprefixed) {\n delete style[property]\n }\n }\n }\n }\n\n return style\n }\n\n /**\n * Returns a prefixed version of the style object using all vendor prefixes\n * @param {Object} styles - Style object that gets prefixed properties added\n * @returns {Object} - Style object with prefixed properties and values\n */\n static prefixAll(styles) {\n return fallback(styles)\n }\n }\n}\n","export default {\"chrome\":{\"appearance\":59,\"userSelect\":53,\"textEmphasisPosition\":59,\"textEmphasis\":59,\"textEmphasisStyle\":59,\"textEmphasisColor\":59,\"boxDecorationBreak\":59,\"clipPath\":54,\"maskImage\":59,\"maskMode\":59,\"maskRepeat\":59,\"maskPosition\":59,\"maskClip\":59,\"maskOrigin\":59,\"maskSize\":59,\"maskComposite\":59,\"mask\":59,\"maskBorderSource\":59,\"maskBorderMode\":59,\"maskBorderSlice\":59,\"maskBorderWidth\":59,\"maskBorderOutset\":59,\"maskBorderRepeat\":59,\"maskBorder\":59,\"maskType\":59,\"textDecorationStyle\":56,\"textDecorationSkip\":56,\"textDecorationLine\":56,\"textDecorationColor\":56,\"filter\":52,\"fontFeatureSettings\":47,\"breakAfter\":49,\"breakBefore\":49,\"breakInside\":49,\"columnCount\":49,\"columnFill\":49,\"columnGap\":49,\"columnRule\":49,\"columnRuleColor\":49,\"columnRuleStyle\":49,\"columnRuleWidth\":49,\"columns\":49,\"columnSpan\":49,\"columnWidth\":49},\"safari\":{\"flex\":8,\"flexBasis\":8,\"flexDirection\":8,\"flexGrow\":8,\"flexFlow\":8,\"flexShrink\":8,\"flexWrap\":8,\"alignContent\":8,\"alignItems\":8,\"alignSelf\":8,\"justifyContent\":8,\"order\":8,\"transform\":8,\"transformOrigin\":8,\"transformOriginX\":8,\"transformOriginY\":8,\"backfaceVisibility\":8,\"perspective\":8,\"perspectiveOrigin\":8,\"transformStyle\":8,\"transformOriginZ\":8,\"animation\":8,\"animationDelay\":8,\"animationDirection\":8,\"animationFillMode\":8,\"animationDuration\":8,\"animationIterationCount\":8,\"animationName\":8,\"animationPlayState\":8,\"animationTimingFunction\":8,\"appearance\":10.1,\"userSelect\":10.1,\"backdropFilter\":10.1,\"fontKerning\":9,\"scrollSnapType\":10.1,\"scrollSnapPointsX\":10.1,\"scrollSnapPointsY\":10.1,\"scrollSnapDestination\":10.1,\"scrollSnapCoordinate\":10.1,\"boxDecorationBreak\":10.1,\"clipPath\":10.1,\"maskImage\":10.1,\"maskMode\":10.1,\"maskRepeat\":10.1,\"maskPosition\":10.1,\"maskClip\":10.1,\"maskOrigin\":10.1,\"maskSize\":10.1,\"maskComposite\":10.1,\"mask\":10.1,\"maskBorderSource\":10.1,\"maskBorderMode\":10.1,\"maskBorderSlice\":10.1,\"maskBorderWidth\":10.1,\"maskBorderOutset\":10.1,\"maskBorderRepeat\":10.1,\"maskBorder\":10.1,\"maskType\":10.1,\"textDecorationStyle\":10.1,\"textDecorationSkip\":10.1,\"textDecorationLine\":10.1,\"textDecorationColor\":10.1,\"shapeImageThreshold\":10,\"shapeImageMargin\":10,\"shapeImageOutside\":10,\"filter\":9,\"hyphens\":10.1,\"flowInto\":10.1,\"flowFrom\":10.1,\"breakBefore\":8,\"breakAfter\":8,\"breakInside\":8,\"regionFragment\":10.1,\"columnCount\":8,\"columnFill\":8,\"columnGap\":8,\"columnRule\":8,\"columnRuleColor\":8,\"columnRuleStyle\":8,\"columnRuleWidth\":8,\"columns\":8,\"columnSpan\":8,\"columnWidth\":8},\"firefox\":{\"borderRadius\":3.6,\"borderImage\":14,\"borderImageOutset\":14,\"borderImageRepeat\":14,\"borderImageSlice\":14,\"borderImageSource\":14,\"borderImageWidth\":14,\"flex\":21,\"flexBasis\":21,\"flexDirection\":21,\"flexGrow\":21,\"flexFlow\":21,\"flexShrink\":21,\"flexWrap\":21,\"alignContent\":21,\"alignItems\":21,\"alignSelf\":21,\"justifyContent\":21,\"order\":21,\"transition\":15,\"transitionDelay\":15,\"transitionDuration\":15,\"transitionProperty\":15,\"transitionTimingFunction\":15,\"transform\":15,\"transformOrigin\":15,\"transformOriginX\":15,\"transformOriginY\":15,\"backfaceVisibility\":15,\"perspective\":15,\"perspectiveOrigin\":15,\"transformStyle\":15,\"transformOriginZ\":15,\"animation\":15,\"animationDelay\":15,\"animationDirection\":15,\"animationFillMode\":15,\"animationDuration\":15,\"animationIterationCount\":15,\"animationName\":15,\"animationPlayState\":15,\"animationTimingFunction\":15,\"appearance\":54,\"userSelect\":54,\"boxSizing\":28,\"textAlignLast\":48,\"textDecorationStyle\":35,\"textDecorationSkip\":35,\"textDecorationLine\":35,\"textDecorationColor\":35,\"tabSize\":54,\"resize\":4,\"hyphens\":42,\"backgroundClip\":3.6,\"backgroundOrigin\":3.6,\"backgroundSize\":3.6,\"fontFeatureSettings\":33,\"boxShadow\":3.6,\"breakAfter\":51,\"breakBefore\":51,\"breakInside\":51,\"columnCount\":51,\"columnFill\":51,\"columnGap\":51,\"columnRule\":51,\"columnRuleColor\":51,\"columnRuleStyle\":51,\"columnRuleWidth\":51,\"columns\":51,\"columnSpan\":51,\"columnWidth\":51},\"opera\":{\"flex\":16,\"flexBasis\":16,\"flexDirection\":16,\"flexGrow\":16,\"flexFlow\":16,\"flexShrink\":16,\"flexWrap\":16,\"alignContent\":16,\"alignItems\":16,\"alignSelf\":16,\"justifyContent\":16,\"order\":16,\"transform\":22,\"transformOrigin\":22,\"transformOriginX\":22,\"transformOriginY\":22,\"backfaceVisibility\":22,\"perspective\":22,\"perspectiveOrigin\":22,\"transformStyle\":22,\"transformOriginZ\":22,\"animation\":29,\"animationDelay\":29,\"animationDirection\":29,\"animationFillMode\":29,\"animationDuration\":29,\"animationIterationCount\":29,\"animationName\":29,\"animationPlayState\":29,\"animationTimingFunction\":29,\"appearance\":44,\"userSelect\":40,\"fontKerning\":19,\"textEmphasisPosition\":44,\"textEmphasis\":44,\"textEmphasisStyle\":44,\"textEmphasisColor\":44,\"boxDecorationBreak\":44,\"clipPath\":41,\"maskImage\":44,\"maskMode\":44,\"maskRepeat\":44,\"maskPosition\":44,\"maskClip\":44,\"maskOrigin\":44,\"maskSize\":44,\"maskComposite\":44,\"mask\":44,\"maskBorderSource\":44,\"maskBorderMode\":44,\"maskBorderSlice\":44,\"maskBorderWidth\":44,\"maskBorderOutset\":44,\"maskBorderRepeat\":44,\"maskBorder\":44,\"maskType\":44,\"textDecorationStyle\":43,\"textDecorationSkip\":43,\"textDecorationLine\":43,\"textDecorationColor\":43,\"filter\":39,\"fontFeatureSettings\":34,\"breakAfter\":36,\"breakBefore\":36,\"breakInside\":36,\"columnCount\":36,\"columnFill\":36,\"columnGap\":36,\"columnRule\":36,\"columnRuleColor\":36,\"columnRuleStyle\":36,\"columnRuleWidth\":36,\"columns\":36,\"columnSpan\":36,\"columnWidth\":36},\"ie\":{\"userSelect\":11,\"wrapFlow\":11,\"wrapThrough\":11,\"wrapMargin\":11,\"scrollSnapType\":11,\"scrollSnapPointsX\":11,\"scrollSnapPointsY\":11,\"scrollSnapDestination\":11,\"scrollSnapCoordinate\":11,\"hyphens\":11,\"flowInto\":11,\"flowFrom\":11,\"breakBefore\":11,\"breakAfter\":11,\"breakInside\":11,\"regionFragment\":11,\"gridTemplateColumns\":11,\"gridTemplateRows\":11,\"gridTemplateAreas\":11,\"gridTemplate\":11,\"gridAutoColumns\":11,\"gridAutoRows\":11,\"gridAutoFlow\":11,\"grid\":11,\"gridRowStart\":11,\"gridColumnStart\":11,\"gridRowEnd\":11,\"gridRow\":11,\"gridColumn\":11,\"gridColumnEnd\":11,\"gridColumnGap\":11,\"gridRowGap\":11,\"gridArea\":11,\"gridGap\":11,\"textSizeAdjust\":11},\"edge\":{\"userSelect\":15,\"wrapFlow\":15,\"wrapThrough\":15,\"wrapMargin\":15,\"scrollSnapType\":15,\"scrollSnapPointsX\":15,\"scrollSnapPointsY\":15,\"scrollSnapDestination\":15,\"scrollSnapCoordinate\":15,\"hyphens\":15,\"flowInto\":15,\"flowFrom\":15,\"breakBefore\":15,\"breakAfter\":15,\"breakInside\":15,\"regionFragment\":15,\"gridTemplateColumns\":15,\"gridTemplateRows\":15,\"gridTemplateAreas\":15,\"gridTemplate\":15,\"gridAutoColumns\":15,\"gridAutoRows\":15,\"gridAutoFlow\":15,\"grid\":15,\"gridRowStart\":15,\"gridColumnStart\":15,\"gridRowEnd\":15,\"gridRow\":15,\"gridColumn\":15,\"gridColumnEnd\":15,\"gridColumnGap\":15,\"gridRowGap\":15,\"gridArea\":15,\"gridGap\":15},\"ios_saf\":{\"flex\":8.1,\"flexBasis\":8.1,\"flexDirection\":8.1,\"flexGrow\":8.1,\"flexFlow\":8.1,\"flexShrink\":8.1,\"flexWrap\":8.1,\"alignContent\":8.1,\"alignItems\":8.1,\"alignSelf\":8.1,\"justifyContent\":8.1,\"order\":8.1,\"transform\":8.1,\"transformOrigin\":8.1,\"transformOriginX\":8.1,\"transformOriginY\":8.1,\"backfaceVisibility\":8.1,\"perspective\":8.1,\"perspectiveOrigin\":8.1,\"transformStyle\":8.1,\"transformOriginZ\":8.1,\"animation\":8.1,\"animationDelay\":8.1,\"animationDirection\":8.1,\"animationFillMode\":8.1,\"animationDuration\":8.1,\"animationIterationCount\":8.1,\"animationName\":8.1,\"animationPlayState\":8.1,\"animationTimingFunction\":8.1,\"appearance\":10,\"userSelect\":10,\"backdropFilter\":10,\"fontKerning\":10,\"scrollSnapType\":10,\"scrollSnapPointsX\":10,\"scrollSnapPointsY\":10,\"scrollSnapDestination\":10,\"scrollSnapCoordinate\":10,\"boxDecorationBreak\":10,\"clipPath\":10,\"maskImage\":10,\"maskMode\":10,\"maskRepeat\":10,\"maskPosition\":10,\"maskClip\":10,\"maskOrigin\":10,\"maskSize\":10,\"maskComposite\":10,\"mask\":10,\"maskBorderSource\":10,\"maskBorderMode\":10,\"maskBorderSlice\":10,\"maskBorderWidth\":10,\"maskBorderOutset\":10,\"maskBorderRepeat\":10,\"maskBorder\":10,\"maskType\":10,\"textSizeAdjust\":10,\"textDecorationStyle\":10,\"textDecorationSkip\":10,\"textDecorationLine\":10,\"textDecorationColor\":10,\"shapeImageThreshold\":10,\"shapeImageMargin\":10,\"shapeImageOutside\":10,\"filter\":9,\"hyphens\":10,\"flowInto\":10,\"flowFrom\":10,\"breakBefore\":8.1,\"breakAfter\":8.1,\"breakInside\":8.1,\"regionFragment\":10,\"columnCount\":8.1,\"columnFill\":8.1,\"columnGap\":8.1,\"columnRule\":8.1,\"columnRuleColor\":8.1,\"columnRuleStyle\":8.1,\"columnRuleWidth\":8.1,\"columns\":8.1,\"columnSpan\":8.1,\"columnWidth\":8.1},\"android\":{\"flex\":4.2,\"flexBasis\":4.2,\"flexDirection\":4.2,\"flexGrow\":4.2,\"flexFlow\":4.2,\"flexShrink\":4.2,\"flexWrap\":4.2,\"alignContent\":4.2,\"alignItems\":4.2,\"alignSelf\":4.2,\"justifyContent\":4.2,\"order\":4.2,\"transition\":4.2,\"transitionDelay\":4.2,\"transitionDuration\":4.2,\"transitionProperty\":4.2,\"transitionTimingFunction\":4.2,\"transform\":4.4,\"transformOrigin\":4.4,\"transformOriginX\":4.4,\"transformOriginY\":4.4,\"backfaceVisibility\":4.4,\"perspective\":4.4,\"perspectiveOrigin\":4.4,\"transformStyle\":4.4,\"transformOriginZ\":4.4,\"animation\":4.4,\"animationDelay\":4.4,\"animationDirection\":4.4,\"animationFillMode\":4.4,\"animationDuration\":4.4,\"animationIterationCount\":4.4,\"animationName\":4.4,\"animationPlayState\":4.4,\"animationTimingFunction\":4.4,\"appearance\":53,\"userSelect\":53,\"fontKerning\":4.4,\"textEmphasisPosition\":53,\"textEmphasis\":53,\"textEmphasisStyle\":53,\"textEmphasisColor\":53,\"boxDecorationBreak\":53,\"clipPath\":53,\"maskImage\":53,\"maskMode\":53,\"maskRepeat\":53,\"maskPosition\":53,\"maskClip\":53,\"maskOrigin\":53,\"maskSize\":53,\"maskComposite\":53,\"mask\":53,\"maskBorderSource\":53,\"maskBorderMode\":53,\"maskBorderSlice\":53,\"maskBorderWidth\":53,\"maskBorderOutset\":53,\"maskBorderRepeat\":53,\"maskBorder\":53,\"maskType\":53,\"filter\":4.4,\"fontFeatureSettings\":4.4,\"breakAfter\":53,\"breakBefore\":53,\"breakInside\":53,\"columnCount\":53,\"columnFill\":53,\"columnGap\":53,\"columnRule\":53,\"columnRuleColor\":53,\"columnRuleStyle\":53,\"columnRuleWidth\":53,\"columns\":53,\"columnSpan\":53,\"columnWidth\":53},\"and_chr\":{\"appearance\":55,\"textEmphasisPosition\":55,\"textEmphasis\":55,\"textEmphasisStyle\":55,\"textEmphasisColor\":55,\"boxDecorationBreak\":55,\"maskImage\":55,\"maskMode\":55,\"maskRepeat\":55,\"maskPosition\":55,\"maskClip\":55,\"maskOrigin\":55,\"maskSize\":55,\"maskComposite\":55,\"mask\":55,\"maskBorderSource\":55,\"maskBorderMode\":55,\"maskBorderSlice\":55,\"maskBorderWidth\":55,\"maskBorderOutset\":55,\"maskBorderRepeat\":55,\"maskBorder\":55,\"maskType\":55,\"textDecorationStyle\":55,\"textDecorationSkip\":55,\"textDecorationLine\":55,\"textDecorationColor\":55},\"and_uc\":{\"flex\":11,\"flexBasis\":11,\"flexDirection\":11,\"flexGrow\":11,\"flexFlow\":11,\"flexShrink\":11,\"flexWrap\":11,\"alignContent\":11,\"alignItems\":11,\"alignSelf\":11,\"justifyContent\":11,\"order\":11,\"transition\":11,\"transitionDelay\":11,\"transitionDuration\":11,\"transitionProperty\":11,\"transitionTimingFunction\":11,\"transform\":11,\"transformOrigin\":11,\"transformOriginX\":11,\"transformOriginY\":11,\"backfaceVisibility\":11,\"perspective\":11,\"perspectiveOrigin\":11,\"transformStyle\":11,\"transformOriginZ\":11,\"animation\":11,\"animationDelay\":11,\"animationDirection\":11,\"animationFillMode\":11,\"animationDuration\":11,\"animationIterationCount\":11,\"animationName\":11,\"animationPlayState\":11,\"animationTimingFunction\":11,\"appearance\":11,\"userSelect\":11,\"fontKerning\":11,\"textEmphasisPosition\":11,\"textEmphasis\":11,\"textEmphasisStyle\":11,\"textEmphasisColor\":11,\"maskImage\":11,\"maskMode\":11,\"maskRepeat\":11,\"maskPosition\":11,\"maskClip\":11,\"maskOrigin\":11,\"maskSize\":11,\"maskComposite\":11,\"mask\":11,\"maskBorderSource\":11,\"maskBorderMode\":11,\"maskBorderSlice\":11,\"maskBorderWidth\":11,\"maskBorderOutset\":11,\"maskBorderRepeat\":11,\"maskBorder\":11,\"maskType\":11,\"textSizeAdjust\":11,\"filter\":11,\"hyphens\":11,\"flowInto\":11,\"flowFrom\":11,\"breakBefore\":11,\"breakAfter\":11,\"breakInside\":11,\"regionFragment\":11,\"fontFeatureSettings\":11,\"columnCount\":11,\"columnFill\":11,\"columnGap\":11,\"columnRule\":11,\"columnRuleColor\":11,\"columnRuleStyle\":11,\"columnRuleWidth\":11,\"columns\":11,\"columnSpan\":11,\"columnWidth\":11},\"op_mini\":{}}","/* @flow */\nexport default function getPrefixedValue(\n prefixedValue: any,\n value: any,\n keepUnprefixed: boolean\n): Array | any {\n if (keepUnprefixed) {\n return [prefixedValue, value]\n }\n return prefixedValue\n}\n","/* @flow */\nimport getPrefixedValue from '../../utils/getPrefixedValue'\n\nimport type { PluginMetaData } from '../../../flowtypes/PluginMetaData'\n\nexport default function calc(\n property: string,\n value: any,\n style: Object,\n { browserName, browserVersion, cssPrefix, keepUnprefixed }: PluginMetaData\n): ?Array | ?any {\n if (\n typeof value === 'string' &&\n value.indexOf('calc(') > -1 &&\n (browserName === 'firefox' && browserVersion < 15 ||\n browserName === 'chrome' && browserVersion < 25 ||\n browserName === 'safari' && browserVersion < 6.1 ||\n browserName === 'ios_saf' && browserVersion < 7)\n ) {\n return getPrefixedValue(value.replace(/calc\\(/g, `${cssPrefix}calc(`), value, keepUnprefixed)\n }\n}\n","/* @flow */\nimport getPrefixedValue from '../../utils/getPrefixedValue'\n\nimport type { PluginMetaData } from '../../../flowtypes/PluginMetaData'\n\nexport default function crossFade(\n property: string,\n value: any,\n style: Object,\n { browserName, browserVersion, cssPrefix, keepUnprefixed }: PluginMetaData\n): ?Array | ?any {\n if (\n typeof value === 'string' &&\n value.indexOf('cross-fade(') > -1 &&\n (browserName === 'chrome' ||\n browserName === 'opera' ||\n browserName === 'and_chr' ||\n (browserName === 'ios_saf' || browserName === 'safari') && browserVersion < 10)\n ) {\n return getPrefixedValue(\n value.replace(/cross-fade\\(/g, `${cssPrefix}cross-fade(`),\n value,\n keepUnprefixed\n )\n }\n}\n","/* @flow */\nimport getPrefixedValue from '../../utils/getPrefixedValue'\n\nimport type { PluginMetaData } from '../../../flowtypes/PluginMetaData'\n\nexport default function filter(\n property: string,\n value: any,\n style: Object,\n { browserName, browserVersion, cssPrefix, keepUnprefixed }: PluginMetaData\n): ?Array | ?any {\n if (\n typeof value === 'string' &&\n value.indexOf('filter(') > -1 &&\n (browserName === 'ios_saf' || browserName === 'safari' && browserVersion < 9.1)\n ) {\n return getPrefixedValue(\n value.replace(/filter\\(/g, `${cssPrefix}filter(`),\n value,\n keepUnprefixed\n )\n }\n}\n","/* @flow */\nimport getPrefixedValue from '../../utils/getPrefixedValue'\n\nimport type { PluginMetaData } from '../../../flowtypes/PluginMetaData'\n\nconst values = {\n flex: true,\n 'inline-flex': true\n}\n\nexport default function flex(\n property: string,\n value: any,\n style: ?Object,\n { browserName, browserVersion, cssPrefix, keepUnprefixed }: PluginMetaData\n): ?Array | ?any {\n if (\n property === 'display' &&\n values[value] &&\n (browserName === 'chrome' && (browserVersion < 29 && browserVersion > 20) ||\n (browserName === 'safari' || browserName === 'ios_saf') &&\n (browserVersion < 9 && browserVersion > 6) ||\n browserName === 'opera' && (browserVersion === 15 || browserVersion === 16))\n ) {\n return getPrefixedValue(cssPrefix + value, value, keepUnprefixed)\n }\n}\n","/* @flow */\nimport getPrefixedValue from '../../utils/getPrefixedValue'\n\nimport type { PluginMetaData } from '../../../flowtypes/PluginMetaData'\n\nconst alternativeValues = {\n 'space-around': 'distribute',\n 'space-between': 'justify',\n 'flex-start': 'start',\n 'flex-end': 'end',\n flex: 'flexbox',\n 'inline-flex': 'inline-flexbox'\n}\nconst alternativeProps = {\n alignContent: 'msFlexLinePack',\n alignSelf: 'msFlexItemAlign',\n alignItems: 'msFlexAlign',\n justifyContent: 'msFlexPack',\n order: 'msFlexOrder',\n flexGrow: 'msFlexPositive',\n flexShrink: 'msFlexNegative',\n flexBasis: 'msPreferredSize'\n}\n\nexport default function flexboxIE(\n property: string,\n value: any,\n style: Object,\n { browserName, browserVersion, cssPrefix, keepUnprefixed, requiresPrefix }: PluginMetaData\n): ?Array | ?any {\n if (\n (alternativeProps[property] ||\n property === 'display' &&\n typeof value === 'string' &&\n value.indexOf('flex') > -1) &&\n ((browserName === 'ie_mob' || browserName === 'ie') && browserVersion === 10)\n ) {\n delete requiresPrefix[property]\n\n if (!keepUnprefixed && !Array.isArray(style[property])) {\n delete style[property]\n }\n if (property === 'display' && alternativeValues[value]) {\n return getPrefixedValue(\n cssPrefix + alternativeValues[value],\n value,\n keepUnprefixed\n )\n }\n if (alternativeProps[property]) {\n style[alternativeProps[property]] = alternativeValues[value] || value\n }\n }\n}\n","/* @flow */\nimport getPrefixedValue from '../../utils/getPrefixedValue'\n\nimport type { PluginMetaData } from '../../../flowtypes/PluginMetaData'\n\nconst alternativeValues = {\n 'space-around': 'justify',\n 'space-between': 'justify',\n 'flex-start': 'start',\n 'flex-end': 'end',\n 'wrap-reverse': 'multiple',\n wrap: 'multiple',\n flex: 'box',\n 'inline-flex': 'inline-box'\n}\n\nconst alternativeProps = {\n alignItems: 'WebkitBoxAlign',\n justifyContent: 'WebkitBoxPack',\n flexWrap: 'WebkitBoxLines'\n}\n\nconst otherProps = [\n 'alignContent',\n 'alignSelf',\n 'order',\n 'flexGrow',\n 'flexShrink',\n 'flexBasis',\n 'flexDirection'\n]\nconst properties = Object.keys(alternativeProps).concat(otherProps)\n\nexport default function flexboxOld(\n property: string,\n value: any,\n style: Object,\n { browserName, browserVersion, cssPrefix, keepUnprefixed, requiresPrefix }: PluginMetaData\n): ?Array | ?any {\n if (\n (properties.indexOf(property) > -1 ||\n property === 'display' &&\n typeof value === 'string' &&\n value.indexOf('flex') > -1) &&\n (browserName === 'firefox' && browserVersion < 22 ||\n browserName === 'chrome' && browserVersion < 21 ||\n (browserName === 'safari' || browserName === 'ios_saf') &&\n browserVersion <= 6.1 ||\n browserName === 'android' && browserVersion < 4.4 ||\n browserName === 'and_uc')\n ) {\n delete requiresPrefix[property]\n\n if (!keepUnprefixed && !Array.isArray(style[property])) {\n delete style[property]\n }\n if (property === 'flexDirection' && typeof value === 'string') {\n if (value.indexOf('column') > -1) {\n style.WebkitBoxOrient = 'vertical'\n } else {\n style.WebkitBoxOrient = 'horizontal'\n }\n if (value.indexOf('reverse') > -1) {\n style.WebkitBoxDirection = 'reverse'\n } else {\n style.WebkitBoxDirection = 'normal'\n }\n }\n if (property === 'display' && alternativeValues[value]) {\n return getPrefixedValue(\n cssPrefix + alternativeValues[value],\n value,\n keepUnprefixed\n )\n }\n if (alternativeProps[property]) {\n style[alternativeProps[property]] = alternativeValues[value] || value\n }\n }\n}\n","/* @flow */\nimport getPrefixedValue from '../../utils/getPrefixedValue'\n\nimport type { PluginMetaData } from '../../../flowtypes/PluginMetaData'\n\nconst values = {\n grab: true,\n grabbing: true\n}\n\nexport default function grabCursor(\n property: string,\n value: any,\n style: Object,\n { browserName, cssPrefix, keepUnprefixed }: PluginMetaData\n): ?Array | ?any {\n // adds prefixes for firefox, chrome, safari, and opera regardless of\n // version until a reliable brwoser support info can be found\n // see: https://github.com/rofrischmann/inline-style-prefixer/issues/79\n if (\n property === 'cursor' &&\n values[value] &&\n (browserName === 'firefox' ||\n browserName === 'chrome' ||\n browserName === 'safari' ||\n browserName === 'opera')\n ) {\n return getPrefixedValue(cssPrefix + value, value, keepUnprefixed)\n }\n}\n","/* @flow */\nimport getPrefixedValue from '../../utils/getPrefixedValue'\n\nimport type { PluginMetaData } from '../../../flowtypes/PluginMetaData'\n\nconst values = /linear-gradient|radial-gradient|repeating-linear-gradient|repeating-radial-gradient/\n\nexport default function gradient(\n property: string,\n value: any,\n style: Object,\n { browserName, browserVersion, cssPrefix, keepUnprefixed }: PluginMetaData\n): ?Array | ?any {\n if (\n typeof value === 'string' &&\n value.match(values) !== null &&\n (browserName === 'firefox' && browserVersion < 16 ||\n browserName === 'chrome' && browserVersion < 26 ||\n (browserName === 'safari' || browserName === 'ios_saf') && browserVersion < 7 ||\n (browserName === 'opera' || browserName === 'op_mini') && browserVersion < 12.1 ||\n browserName === 'android' && browserVersion < 4.4 ||\n browserName === 'and_uc')\n ) {\n return getPrefixedValue(cssPrefix + value, value, keepUnprefixed)\n }\n}\n","/* @flow */\nimport getPrefixedValue from '../../utils/getPrefixedValue'\n\nimport type { PluginMetaData } from '../../../flowtypes/PluginMetaData'\n\nexport default function imageSet(\n property: string,\n value: any,\n style: Object,\n { browserName, cssPrefix, keepUnprefixed }: PluginMetaData\n): ?Array | ?any {\n if (\n typeof value === 'string' &&\n value.indexOf('image-set(') > -1 &&\n (browserName === 'chrome' ||\n browserName === 'opera' ||\n browserName === 'and_chr' ||\n browserName === 'and_uc' ||\n browserName === 'ios_saf' ||\n browserName === 'safari')\n ) {\n return getPrefixedValue(\n value.replace(/image-set\\(/g, `${cssPrefix}image-set(`),\n value,\n keepUnprefixed\n )\n }\n}\n","/* @flow */\nimport getPrefixedValue from '../../utils/getPrefixedValue'\n\nimport type { PluginMetaData } from '../../../flowtypes/PluginMetaData'\n\nexport default function position(\n property: string,\n value: any,\n { browserName, cssPrefix, keepUnprefixed }: PluginMetaData\n): ?Array | ?any {\n if (\n property === 'position' &&\n value === 'sticky' &&\n (browserName === 'safari' || browserName === 'ios_saf')\n ) {\n return getPrefixedValue(cssPrefix + value, value, keepUnprefixed)\n }\n}\n","/* @flow */\nimport getPrefixedValue from '../../utils/getPrefixedValue'\n\nimport type { PluginMetaData } from '../../../flowtypes/PluginMetaData'\n\nconst properties = {\n maxHeight: true,\n maxWidth: true,\n width: true,\n height: true,\n columnWidth: true,\n minWidth: true,\n minHeight: true\n}\nconst values = {\n 'min-content': true,\n 'max-content': true,\n 'fill-available': true,\n 'fit-content': true,\n 'contain-floats': true\n}\n\nexport default function sizing(\n property: string,\n value: any,\n style: Object,\n { cssPrefix, keepUnprefixed }: PluginMetaData\n): ?Array | ?any {\n // This might change in the future\n // Keep an eye on it\n if (properties[property] && values[value]) {\n return getPrefixedValue(cssPrefix + value, value, keepUnprefixed)\n }\n}\n","'use strict';\n\nvar uppercasePattern = /[A-Z]/g;\nvar msPattern = /^ms-/;\nvar cache = {};\n\nfunction hyphenateStyleName(string) {\n return string in cache\n ? cache[string]\n : cache[string] = string\n .replace(uppercasePattern, '-$&')\n .toLowerCase()\n .replace(msPattern, '-ms-');\n}\n\nmodule.exports = hyphenateStyleName;\n","/* @flow */\nimport hyphenateStyleName from 'hyphenate-style-name'\nimport type { PluginMetaData } from '../../../flowtypes/PluginMetaData'\n\nconst properties = {\n transition: true,\n transitionProperty: true,\n WebkitTransition: true,\n WebkitTransitionProperty: true,\n MozTransition: true,\n MozTransitionProperty: true\n}\n\nlet requiresPrefixDashCased: Array\n// TODO: extract population\nexport default function transition(\n property: string,\n value: any,\n style: Object,\n { cssPrefix, keepUnprefixed, requiresPrefix }: PluginMetaData\n): ?Array | ?any {\n if (typeof value === 'string' && properties[property]) {\n // memoize the prefix array for later use\n if (!requiresPrefixDashCased) {\n requiresPrefixDashCased = Object\n .keys(requiresPrefix)\n .map(prop => hyphenateStyleName(prop))\n }\n\n // only split multi values, not cubic beziers\n const multipleValues = value.split(/,(?![^()]*(?:\\([^()]*\\))?\\))/g)\n\n requiresPrefixDashCased.forEach((prop) => {\n multipleValues.forEach((val, index) => {\n if (val.indexOf(prop) > -1 && prop !== 'order') {\n multipleValues[index] = val.replace(prop, cssPrefix + prop) +\n (keepUnprefixed ? `,${val}` : '')\n }\n })\n })\n\n return multipleValues.join(',')\n }\n}\n","/* @flow */\nimport getPrefixedValue from '../../utils/getPrefixedValue'\n\nimport type { PluginMetaData } from '../../../flowtypes/PluginMetaData'\n\nconst values = {\n 'zoom-in': true,\n 'zoom-out': true\n}\n\nexport default function zoomCursor(\n property: string,\n value: any,\n style: Object,\n { browserName, browserVersion, cssPrefix, keepUnprefixed }: PluginMetaData\n): ?Array | ?any {\n if (\n property === 'cursor' &&\n values[value] &&\n (browserName === 'firefox' && browserVersion < 24 ||\n browserName === 'chrome' && browserVersion < 37 ||\n browserName === 'safari' && browserVersion < 9 ||\n browserName === 'opera' && browserVersion < 24)\n ) {\n return getPrefixedValue(cssPrefix + value, value, keepUnprefixed)\n }\n}\n","import calc from './calc'\nimport crossFade from './crossFade'\nimport filter from './filter'\nimport flex from './flex'\nimport flexboxIE from './flexboxIE'\nimport flexboxOld from './flexboxOld'\nimport grabCursor from './grabCursor'\nimport gradient from './gradient'\nimport imageSet from './imageSet'\nimport position from './position'\nimport sizing from './sizing'\nimport transition from './transition'\nimport zoomCursor from './zoomCursor'\n\nexport default [\n position,\n calc,\n imageSet,\n crossFade,\n filter,\n grabCursor,\n zoomCursor,\n sizing,\n gradient,\n transition,\n flexboxIE,\n flexboxOld,\n flex\n]\n\nexport {\n position,\n calc,\n imageSet,\n crossFade,\n filter,\n grabCursor,\n zoomCursor,\n sizing,\n gradient,\n transition,\n flexboxIE,\n flexboxOld,\n flex\n}\n","import capitalizeString from './capitalizeString'\n\n/* @flow */\nexport default function prefixProperty(\n prefixProperties: Object,\n property: string,\n style: Object\n): void {\n const requiredPrefixes = prefixProperties[property]\n\n if (requiredPrefixes) {\n for (let i = 0, len = requiredPrefixes.length; i < len; ++i) {\n style[requiredPrefixes[i] + capitalizeString(property)] = style[property]\n }\n }\n}\n","/* @flow */\nimport prefixProperty from '../utils/prefixProperty'\nimport prefixValue from '../utils/prefixValue'\n\nimport addNewValuesOnly from '../utils/addNewValuesOnly'\nimport isObject from '../utils/isObject'\n\nexport default function createPrefixer(\n propertyPrefixMap: Object,\n plugins: Array = []\n) {\n function prefixAll(style: Object): Object {\n for (const property in style) {\n const value = style[property]\n\n // handle nested objects\n if (isObject(value)) {\n style[property] = prefixAll(value)\n // handle array values\n } else if (Array.isArray(value)) {\n const combinedValue = []\n\n for (let i = 0, len = value.length; i < len; ++i) {\n const processedValue = prefixValue(\n plugins,\n property,\n value[i],\n style,\n propertyPrefixMap\n )\n addNewValuesOnly(combinedValue, processedValue || value[i])\n }\n\n // only modify the value if it was touched\n // by any plugin to prevent unnecessary mutations\n if (combinedValue.length > 0) {\n style[property] = combinedValue\n }\n } else {\n const processedValue = prefixValue(\n plugins,\n property,\n value,\n style,\n propertyPrefixMap\n )\n\n // only modify the value if it was touched\n // by any plugin to prevent unnecessary mutations\n if (processedValue) {\n style[property] = processedValue\n }\n\n prefixProperty(propertyPrefixMap, property, style)\n }\n }\n\n return style\n }\n\n return prefixAll\n}\n","export default {\"appearance\":[\"Webkit\",\"Moz\"],\"userSelect\":[\"Webkit\",\"Moz\",\"ms\"],\"textEmphasisPosition\":[\"Webkit\"],\"textEmphasis\":[\"Webkit\"],\"textEmphasisStyle\":[\"Webkit\"],\"textEmphasisColor\":[\"Webkit\"],\"boxDecorationBreak\":[\"Webkit\"],\"clipPath\":[\"Webkit\"],\"maskImage\":[\"Webkit\"],\"maskMode\":[\"Webkit\"],\"maskRepeat\":[\"Webkit\"],\"maskPosition\":[\"Webkit\"],\"maskClip\":[\"Webkit\"],\"maskOrigin\":[\"Webkit\"],\"maskSize\":[\"Webkit\"],\"maskComposite\":[\"Webkit\"],\"mask\":[\"Webkit\"],\"maskBorderSource\":[\"Webkit\"],\"maskBorderMode\":[\"Webkit\"],\"maskBorderSlice\":[\"Webkit\"],\"maskBorderWidth\":[\"Webkit\"],\"maskBorderOutset\":[\"Webkit\"],\"maskBorderRepeat\":[\"Webkit\"],\"maskBorder\":[\"Webkit\"],\"maskType\":[\"Webkit\"],\"textDecorationStyle\":[\"Webkit\",\"Moz\"],\"textDecorationSkip\":[\"Webkit\",\"Moz\"],\"textDecorationLine\":[\"Webkit\",\"Moz\"],\"textDecorationColor\":[\"Webkit\",\"Moz\"],\"filter\":[\"Webkit\"],\"fontFeatureSettings\":[\"Webkit\",\"Moz\"],\"breakAfter\":[\"Webkit\",\"Moz\",\"ms\"],\"breakBefore\":[\"Webkit\",\"Moz\",\"ms\"],\"breakInside\":[\"Webkit\",\"Moz\",\"ms\"],\"columnCount\":[\"Webkit\",\"Moz\"],\"columnFill\":[\"Webkit\",\"Moz\"],\"columnGap\":[\"Webkit\",\"Moz\"],\"columnRule\":[\"Webkit\",\"Moz\"],\"columnRuleColor\":[\"Webkit\",\"Moz\"],\"columnRuleStyle\":[\"Webkit\",\"Moz\"],\"columnRuleWidth\":[\"Webkit\",\"Moz\"],\"columns\":[\"Webkit\",\"Moz\"],\"columnSpan\":[\"Webkit\",\"Moz\"],\"columnWidth\":[\"Webkit\",\"Moz\"],\"flex\":[\"Webkit\",\"Moz\"],\"flexBasis\":[\"Webkit\"],\"flexDirection\":[\"Webkit\"],\"flexGrow\":[\"Webkit\"],\"flexFlow\":[\"Webkit\",\"Moz\"],\"flexShrink\":[\"Webkit\"],\"flexWrap\":[\"Webkit\",\"Moz\"],\"alignContent\":[\"Webkit\"],\"alignItems\":[\"Webkit\"],\"alignSelf\":[\"Webkit\"],\"justifyContent\":[\"Webkit\"],\"order\":[\"Webkit\"],\"transform\":[\"Webkit\",\"Moz\"],\"transformOrigin\":[\"Webkit\",\"Moz\"],\"transformOriginX\":[\"Webkit\",\"Moz\"],\"transformOriginY\":[\"Webkit\",\"Moz\"],\"backfaceVisibility\":[\"Webkit\",\"Moz\"],\"perspective\":[\"Webkit\",\"Moz\"],\"perspectiveOrigin\":[\"Webkit\",\"Moz\"],\"transformStyle\":[\"Webkit\",\"Moz\"],\"transformOriginZ\":[\"Webkit\",\"Moz\"],\"animation\":[\"Webkit\",\"Moz\"],\"animationDelay\":[\"Webkit\",\"Moz\"],\"animationDirection\":[\"Webkit\",\"Moz\"],\"animationFillMode\":[\"Webkit\",\"Moz\"],\"animationDuration\":[\"Webkit\",\"Moz\"],\"animationIterationCount\":[\"Webkit\",\"Moz\"],\"animationName\":[\"Webkit\",\"Moz\"],\"animationPlayState\":[\"Webkit\",\"Moz\"],\"animationTimingFunction\":[\"Webkit\",\"Moz\"],\"backdropFilter\":[\"Webkit\"],\"fontKerning\":[\"Webkit\"],\"scrollSnapType\":[\"Webkit\",\"ms\"],\"scrollSnapPointsX\":[\"Webkit\",\"ms\"],\"scrollSnapPointsY\":[\"Webkit\",\"ms\"],\"scrollSnapDestination\":[\"Webkit\",\"ms\"],\"scrollSnapCoordinate\":[\"Webkit\",\"ms\"],\"shapeImageThreshold\":[\"Webkit\"],\"shapeImageMargin\":[\"Webkit\"],\"shapeImageOutside\":[\"Webkit\"],\"hyphens\":[\"Webkit\",\"Moz\",\"ms\"],\"flowInto\":[\"Webkit\",\"ms\"],\"flowFrom\":[\"Webkit\",\"ms\"],\"regionFragment\":[\"Webkit\",\"ms\"],\"borderRadius\":[\"Moz\"],\"borderImage\":[\"Moz\"],\"borderImageOutset\":[\"Moz\"],\"borderImageRepeat\":[\"Moz\"],\"borderImageSlice\":[\"Moz\"],\"borderImageSource\":[\"Moz\"],\"borderImageWidth\":[\"Moz\"],\"transitionDelay\":[\"Moz\",\"Webkit\"],\"transitionDuration\":[\"Moz\",\"Webkit\"],\"transitionProperty\":[\"Moz\",\"Webkit\"],\"transitionTimingFunction\":[\"Moz\",\"Webkit\"],\"boxSizing\":[\"Moz\"],\"textAlignLast\":[\"Moz\"],\"tabSize\":[\"Moz\"],\"resize\":[\"Moz\"],\"backgroundClip\":[\"Moz\"],\"backgroundOrigin\":[\"Moz\"],\"backgroundSize\":[\"Moz\"],\"boxShadow\":[\"Moz\"],\"wrapFlow\":[\"ms\"],\"wrapThrough\":[\"ms\"],\"wrapMargin\":[\"ms\"],\"gridTemplateColumns\":[\"ms\"],\"gridTemplateRows\":[\"ms\"],\"gridTemplateAreas\":[\"ms\"],\"gridTemplate\":[\"ms\"],\"gridAutoColumns\":[\"ms\"],\"gridAutoRows\":[\"ms\"],\"gridAutoFlow\":[\"ms\"],\"grid\":[\"ms\"],\"gridRowStart\":[\"ms\"],\"gridColumnStart\":[\"ms\"],\"gridRowEnd\":[\"ms\"],\"gridRow\":[\"ms\"],\"gridColumn\":[\"ms\"],\"gridColumnEnd\":[\"ms\"],\"gridColumnGap\":[\"ms\"],\"gridRowGap\":[\"ms\"],\"gridArea\":[\"ms\"],\"gridGap\":[\"ms\"],\"textSizeAdjust\":[\"Webkit\",\"ms\"]}","/* @flow */\n\nconst regex = /-webkit-|-moz-|-ms-/\nexport default function isPrefixedValue(value: any): boolean {\n if (Array.isArray(value)) {\n value = value.join(',')\n }\n\n return value.match(regex) !== null\n}\n","/* @flow */\nimport isPrefixedValue from '../../utils/isPrefixedValue'\n\nconst prefixes = ['-webkit-', '-moz-', '']\n\nexport default function calc(property: string, value: any): ?Array {\n if (typeof value === 'string' && !isPrefixedValue(value) && value.indexOf('calc(') > -1) {\n return prefixes.map(prefix => value.replace(/calc\\(/g, `${prefix}calc(`))\n }\n}\n","/* @flow */\nconst prefixes = ['-webkit-', '-moz-', '']\n\nconst values = {\n 'zoom-in': true,\n 'zoom-out': true,\n grab: true,\n grabbing: true\n}\n\nexport default function cursor(property: string, value: any): ?Array {\n if (property === 'cursor' && values[value]) {\n return prefixes.map(prefix => prefix + value)\n }\n}\n","/* @flow */\nimport isPrefixedValue from '../../utils/isPrefixedValue'\n\n// http://caniuse.com/#search=cross-fade\nconst prefixes = ['-webkit-', '']\n\nexport default function crossFade(property: string, value: any): ?Array {\n if (typeof value === 'string' && !isPrefixedValue(value) && value.indexOf('cross-fade(') > -1) {\n return prefixes.map(prefix => value.replace(/cross-fade\\(/g, `${prefix}cross-fade(`))\n }\n}\n","/* @flow */\nimport isPrefixedValue from '../../utils/isPrefixedValue'\n\n// http://caniuse.com/#feat=css-filter-function\nconst prefixes = ['-webkit-', '']\n\nexport default function filter(property: string, value: any): ?Array {\n if (typeof value === 'string' && !isPrefixedValue(value) && value.indexOf('filter(') > -1) {\n return prefixes.map(prefix => value.replace(/filter\\(/g, `${prefix}filter(`))\n }\n}\n","/* @flow */\nconst values = {\n flex: true,\n 'inline-flex': true\n}\n\nexport default function flex(property: string, value: any): ?Array {\n if (property === 'display' && values[value]) {\n return ['-webkit-box', '-moz-box', `-ms-${value}box`, `-webkit-${value}`, value]\n }\n}\n","/* @flow */\nconst alternativeValues = {\n 'space-around': 'distribute',\n 'space-between': 'justify',\n 'flex-start': 'start',\n 'flex-end': 'end'\n}\nconst alternativeProps = {\n alignContent: 'msFlexLinePack',\n alignSelf: 'msFlexItemAlign',\n alignItems: 'msFlexAlign',\n justifyContent: 'msFlexPack',\n order: 'msFlexOrder',\n flexGrow: 'msFlexPositive',\n flexShrink: 'msFlexNegative',\n flexBasis: 'msPreferredSize'\n}\n\nexport default function flexboxIE(\n property: string,\n value: any,\n style: Object\n): void {\n if (alternativeProps[property]) {\n style[alternativeProps[property]] = alternativeValues[value] || value\n }\n}\n","/* @flow */\nconst alternativeValues = {\n 'space-around': 'justify',\n 'space-between': 'justify',\n 'flex-start': 'start',\n 'flex-end': 'end',\n 'wrap-reverse': 'multiple',\n wrap: 'multiple'\n}\n\nconst alternativeProps = {\n alignItems: 'WebkitBoxAlign',\n justifyContent: 'WebkitBoxPack',\n flexWrap: 'WebkitBoxLines'\n}\n\nexport default function flexboxOld(\n property: string,\n value: any,\n style: Object\n): void {\n if (property === 'flexDirection' && typeof value === 'string') {\n if (value.indexOf('column') > -1) {\n style.WebkitBoxOrient = 'vertical'\n } else {\n style.WebkitBoxOrient = 'horizontal'\n }\n if (value.indexOf('reverse') > -1) {\n style.WebkitBoxDirection = 'reverse'\n } else {\n style.WebkitBoxDirection = 'normal'\n }\n }\n if (alternativeProps[property]) {\n style[alternativeProps[property]] = alternativeValues[value] || value\n }\n}\n","/* @flow */\nimport isPrefixedValue from '../../utils/isPrefixedValue'\n\nconst prefixes = ['-webkit-', '-moz-', '']\nconst values = /linear-gradient|radial-gradient|repeating-linear-gradient|repeating-radial-gradient/\n\nexport default function gradient(property: string, value: any): ?Array {\n if (typeof value === 'string' && !isPrefixedValue(value) && value.match(values) !== null) {\n return prefixes.map(prefix => prefix + value)\n }\n}\n","/* @flow */\nimport isPrefixedValue from '../../utils/isPrefixedValue'\n\n// http://caniuse.com/#feat=css-image-set\nconst prefixes = ['-webkit-', '']\n\nexport default function imageSet(property: string, value: any): ?Array {\n if (typeof value === 'string' && !isPrefixedValue(value) && value.indexOf('image-set(') > -1) {\n return prefixes.map(prefix => value.replace(/image-set\\(/g, `${prefix}image-set(`))\n }\n}\n","/* @flow */\nexport default function position(property: string, value: any): ?Array {\n if (property === 'position' && value === 'sticky') {\n return ['-webkit-sticky', 'sticky']\n }\n}\n","/* @flow */\nconst prefixes = ['-webkit-', '-moz-', '']\n\nconst properties = {\n maxHeight: true,\n maxWidth: true,\n width: true,\n height: true,\n columnWidth: true,\n minWidth: true,\n minHeight: true\n}\nconst values = {\n 'min-content': true,\n 'max-content': true,\n 'fill-available': true,\n 'fit-content': true,\n 'contain-floats': true\n}\n\nexport default function sizing(property: string, value: any): ?Array {\n if (properties[property] && values[value]) {\n return prefixes.map(prefix => prefix + value)\n }\n}\n","/* @flow */\nimport hyphenateStyleName from 'hyphenate-style-name'\n\nimport capitalizeString from '../../utils/capitalizeString'\nimport isPrefixedValue from '../../utils/isPrefixedValue'\n\nconst properties = {\n transition: true,\n transitionProperty: true,\n WebkitTransition: true,\n WebkitTransitionProperty: true,\n MozTransition: true,\n MozTransitionProperty: true\n}\n\nconst prefixMapping = {\n Webkit: '-webkit-',\n Moz: '-moz-',\n ms: '-ms-'\n}\n\nfunction prefixValue(value: string, propertyPrefixMap: Object): string {\n if (isPrefixedValue(value)) {\n return value\n }\n\n // only split multi values, not cubic beziers\n const multipleValues = value.split(/,(?![^()]*(?:\\([^()]*\\))?\\))/g)\n\n for (let i = 0, len = multipleValues.length; i < len; ++i) {\n const singleValue = multipleValues[i]\n const values = [singleValue]\n for (const property in propertyPrefixMap) {\n const dashCaseProperty = hyphenateStyleName(property)\n\n if (singleValue.indexOf(dashCaseProperty) > -1 && dashCaseProperty !== 'order') {\n const prefixes = propertyPrefixMap[property]\n for (let j = 0, pLen = prefixes.length; j < pLen; ++j) {\n // join all prefixes and create a new value\n values.unshift(\n singleValue.replace(dashCaseProperty, prefixMapping[prefixes[j]] + dashCaseProperty)\n )\n }\n }\n }\n\n multipleValues[i] = values.join(',')\n }\n\n return multipleValues.join(',')\n}\n\nexport default function transition(\n property: string,\n value: any,\n style: Object,\n propertyPrefixMap: Object\n): ?string {\n // also check for already prefixed transitions\n if (typeof value === 'string' && properties[property]) {\n const outputValue = prefixValue(value, propertyPrefixMap)\n // if the property is already prefixed\n const webkitOutput = outputValue\n .split(/,(?![^()]*(?:\\([^()]*\\))?\\))/g)\n .filter(val => val.match(/-moz-|-ms-/) === null)\n .join(',')\n\n if (property.indexOf('Webkit') > -1) {\n return webkitOutput\n }\n\n const mozOutput = outputValue\n .split(/,(?![^()]*(?:\\([^()]*\\))?\\))/g)\n .filter(val => val.match(/-webkit-|-ms-/) === null)\n .join(',')\n\n if (property.indexOf('Moz') > -1) {\n return mozOutput\n }\n\n style[`Webkit${capitalizeString(property)}`] = webkitOutput\n style[`Moz${capitalizeString(property)}`] = mozOutput\n return outputValue\n }\n}\n","import calc from './calc'\nimport cursor from './cursor'\nimport crossFade from './crossFade'\nimport filter from './filter'\nimport flex from './flex'\nimport flexboxIE from './flexboxIE'\nimport flexboxOld from './flexboxOld'\nimport gradient from './gradient'\nimport imageSet from './imageSet'\nimport position from './position'\nimport sizing from './sizing'\nimport transition from './transition'\n\nexport default [\n position,\n calc,\n imageSet,\n crossFade,\n filter,\n cursor,\n sizing,\n gradient,\n transition,\n flexboxIE,\n flexboxOld,\n flex\n]\n\nexport {\n position,\n calc,\n cursor,\n sizing,\n imageSet,\n crossFade,\n filter,\n gradient,\n transition,\n flexboxIE,\n flexboxOld,\n flex\n}\n","import createPrefixer from './createPrefixer'\n\nimport propertyPrefixMap from './propertyPrefixMap'\nimport plugins from './plugins'\n\nexport default createPrefixer(propertyPrefixMap, plugins)\n","import createPrefixer from './createPrefixer'\n\nimport propertyPrefixMap from './propertyPrefixMap'\nimport plugins from './plugins'\n\nimport fallback from '../static'\n\nexport default createPrefixer(propertyPrefixMap, plugins, fallback)\n"],"names":["root","name","definition","module","exports","define","amd","this","t","detect","ua","getFirstMatch","regex","match","length","getSecondMatch","iosdevice","toLowerCase","likeAndroid","test","android","nexusMobile","nexusTablet","chromeos","silk","sailfish","tizen","webos","windowsphone","samsungBrowser","windows","mac","linux","edgeVersion","versionIdentifier","tablet","mobile","xbox","result","msedge","version","msie","firefoxos","touchpad","blink","webkit","opera","gecko","ios","osVersion","replace","blackberry","bada","osversion","osMajorVersion","split","yandexbrowser","vivaldi","chrome","firefox","safari","chromium","a","c","x","bowser","navigator","userAgent","browserList","i","browserItem","getVersionPrecision","map","arr","iterator","Array","prototype","call","push","compareVersions","versions","precision","Math","max","chunks","delta","join","chunk","reverse","isUnsupportedBrowser","minVersions","strictMode","_bowser","browser","hasOwnProperty","Error","String","check","_detect","prefixByBrowser","phantom","seamoney","browserByCanIuseAlias","firfox","getBrowserName","browserInfo","getBrowserInformation","prefix","jsPrefix","cssPrefix","browserName","browserVersion","parseFloat","parseInt","getPrefixedKeyframes","prefixedKeyframes","capitalizeString","str","charAt","toUpperCase","slice","addIfNew","list","value","indexOf","addNewValuesOnly","values","isArray","len","isObject","Object","prefixValue","plugins","property","style","metaData","processedValue","createPrefixer","propertyPrefixMap","fallback","options","defaultUserAgent","undefined","_userAgent","_keepUnprefixed","keepUnprefixed","_browserInfo","_useFallback","prefixData","_requiresPrefix","_hasPropsRequiringPrefix","keys","_metaData","requiresPrefix","_prefixStyle","combinedValue","styles","getPrefixedValue","prefixedValue","calc","crossFade","filter","flex","alternativeValues","alternativeProps","alignContent","alignSelf","alignItems","justifyContent","order","flexGrow","flexShrink","flexBasis","flexboxIE","wrap","flexWrap","otherProps","properties","concat","flexboxOld","WebkitBoxOrient","WebkitBoxDirection","grab","grabbing","grabCursor","gradient","imageSet","position","maxHeight","maxWidth","width","height","columnWidth","minWidth","minHeight","sizing","uppercasePattern","msPattern","cache","hyphenateStyleName","string","transition","transitionProperty","WebkitTransition","WebkitTransitionProperty","MozTransition","MozTransitionProperty","requiresPrefixDashCased","prop","multipleValues","forEach","val","index","zoomCursor","prefixProperty","prefixProperties","requiredPrefixes","prefixAll","isPrefixedValue","prefixes","cursor","prefixMapping","Webkit","Moz","ms","singleValue","dashCaseProperty","j","pLen","unshift","outputValue","webkitOutput","mozOutput"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,EAAA;;;;;;AAMA,EAAA,CAAC,UAAUA,IAAV,EAAgBC,IAAhB,EAAsBC,UAAtB,EAAkC;QAC7B,OAAOC,MAAP,IAAiB,WAAjB,IAAgCA,OAAOC,OAA3C,EAAoDD,OAAOC,OAAP,GAAiBF,YAAjB,CAApD,KACK,IAAI,OAAOG,MAAP,IAAiB,UAAjB,IAA+BA,OAAOC,GAA1C,EAA+CD,OAAOJ,IAAP,EAAaC,UAAb,EAA/C,KACAF,KAAKC,IAAL,IAAaC,YAAb;GAHN,CAICK,iBAJD,EAIO,QAJP,EAIiB,YAAY;;;;;QAKxBC,IAAI,IAAR;;aAESC,MAAT,CAAgBC,EAAhB,EAAoB;;eAETC,aAAT,CAAuBC,KAAvB,EAA8B;YACxBC,QAAQH,GAAGG,KAAH,CAASD,KAAT,CAAZ;eACQC,SAASA,MAAMC,MAAN,GAAe,CAAxB,IAA6BD,MAAM,CAAN,CAA9B,IAA2C,EAAlD;;;eAGOE,cAAT,CAAwBH,KAAxB,EAA+B;YACzBC,QAAQH,GAAGG,KAAH,CAASD,KAAT,CAAZ;eACQC,SAASA,MAAMC,MAAN,GAAe,CAAxB,IAA6BD,MAAM,CAAN,CAA9B,IAA2C,EAAlD;;;UAGEG,YAAYL,cAAc,qBAAd,EAAqCM,WAArC,EAAhB;UACIC,cAAc,gBAAgBC,IAAhB,CAAqBT,EAArB,CADlB;UAEIU,UAAU,CAACF,WAAD,IAAgB,WAAWC,IAAX,CAAgBT,EAAhB,CAF9B;UAGIW,cAAc,oBAAoBF,IAApB,CAAyBT,EAAzB,CAHlB;UAIIY,cAAc,CAACD,WAAD,IAAgB,kBAAkBF,IAAlB,CAAuBT,EAAvB,CAJlC;UAKIa,WAAW,OAAOJ,IAAP,CAAYT,EAAZ,CALf;UAMIc,OAAO,QAAQL,IAAR,CAAaT,EAAb,CANX;UAOIe,WAAW,YAAYN,IAAZ,CAAiBT,EAAjB,CAPf;UAQIgB,QAAQ,SAASP,IAAT,CAAcT,EAAd,CARZ;UASIiB,QAAQ,eAAeR,IAAf,CAAoBT,EAApB,CATZ;UAUIkB,eAAe,iBAAiBT,IAAjB,CAAsBT,EAAtB,CAVnB;UAWImB,iBAAiB,kBAAkBV,IAAlB,CAAuBT,EAAvB,CAXrB;UAYIoB,UAAU,CAACF,YAAD,IAAiB,WAAWT,IAAX,CAAgBT,EAAhB,CAZ/B;UAaIqB,MAAM,CAACf,SAAD,IAAc,CAACQ,IAAf,IAAuB,aAAaL,IAAb,CAAkBT,EAAlB,CAbjC;UAcIsB,QAAQ,CAACZ,OAAD,IAAY,CAACK,QAAb,IAAyB,CAACC,KAA1B,IAAmC,CAACC,KAApC,IAA6C,SAASR,IAAT,CAAcT,EAAd,CAdzD;UAeIuB,cAActB,cAAc,sBAAd,CAflB;UAgBIuB,oBAAoBvB,cAAc,yBAAd,CAhBxB;UAiBIwB,SAAS,UAAUhB,IAAV,CAAeT,EAAf,CAjBb;UAkBI0B,SAAS,CAACD,MAAD,IAAW,YAAYhB,IAAZ,CAAiBT,EAAjB,CAlBxB;UAmBI2B,OAAO,QAAQlB,IAAR,CAAaT,EAAb,CAnBX;UAoBI4B,MApBJ;;UAsBI,SAASnB,IAAT,CAAcT,EAAd,CAAJ,EAAuB;;iBAEZ;gBACD,OADC;iBAEAF,CAFA;mBAGE0B,qBAAqBvB,cAAc,yCAAd;SAHhC;OAFF,MAOO,IAAI,aAAaQ,IAAb,CAAkBT,EAAlB,CAAJ,EAA2B;;iBAEvB;gBACD,OADC;iBAEEF,CAFF;mBAGIG,cAAc,mCAAd,KAAsDuB;SAHnE;OAFK,MAQF,IAAI,kBAAkBf,IAAlB,CAAuBT,EAAvB,CAAJ,EAAgC;iBAC1B;gBACD,8BADC;0BAEWF,CAFX;mBAGI0B,qBAAqBvB,cAAc,wCAAd;SAHlC;OADG,MAOA,IAAI,SAASQ,IAAT,CAAcT,EAAd,CAAJ,EAAuB;iBACjB;gBACD,aADC;iBAEEF,CAFF;mBAGI0B,qBAAqBvB,cAAc,+BAAd;SAHlC;OADG,MAOA,IAAI,aAAaQ,IAAb,CAAkBT,EAAlB,CAAJ,EAA2B;iBACrB;gBACD,gBADC;yBAEQF,CAFR;mBAGE0B,qBAAqBvB,cAAc,mCAAd;SAHhC;OADG,MAOA,IAAI,aAAaQ,IAAb,CAAkBT,EAAlB,CAAJ,EAA2B;iBACrB;gBACC,YADD;qBAEMF,CAFN;mBAGIG,cAAc,qCAAd;SAHb;OADG,MAOA,IAAI,SAASQ,IAAT,CAAcT,EAAd,CAAJ,EAAuB;iBACjB;gBACD,SADC;mBAEIF,CAFJ;mBAGIG,cAAc,iCAAd;SAHb;OADG,MAOA,IAAI,YAAYQ,IAAZ,CAAiBT,EAAjB,CAAJ,EAA0B;iBACpB;gBACD,UADC;oBAEKF,CAFL;mBAGIG,cAAc,oCAAd;SAHb;OADG,MAOA,IAAI,UAAUQ,IAAV,CAAeT,EAAf,CAAJ,EAAwB;iBAClB;gBACD,QADC;kBAEGF,CAFH;mBAGIG,cAAc,kCAAd;SAHb;OADG,MAOA,IAAI,YAAYQ,IAAZ,CAAiBT,EAAjB,CAAJ,EAA0B;iBACpB;gBACD,UADC;oBAEKF,CAFL;mBAGIG,cAAc,oCAAd;SAHb;OADG,MAOA,IAAI,YAAYQ,IAAZ,CAAiBT,EAAjB,CAAJ,EAA0B;iBACpB;gBACD,UADC;mBAEIF,CAFJ;mBAGIG,cAAc,oCAAd;SAHb;OADG,MAOA,IAAIiB,YAAJ,EAAkB;iBACZ;gBACD,eADC;wBAEOpB;SAFhB;YAIIyB,WAAJ,EAAiB;iBACRM,MAAP,GAAgB/B,CAAhB;iBACOgC,OAAP,GAAiBP,WAAjB;SAFF,MAIK;iBACIQ,IAAP,GAAcjC,CAAd;iBACOgC,OAAP,GAAiB7B,cAAc,0BAAd,CAAjB;;OAXC,MAcA,IAAI,gBAAgBQ,IAAhB,CAAqBT,EAArB,CAAJ,EAA8B;iBACxB;gBACD,mBADC;gBAEDF,CAFC;mBAGEG,cAAc,6BAAd;SAHX;OADG,MAME,IAAIY,QAAJ,EAAc;iBACV;gBACD,QADC;oBAEGf,CAFH;sBAGKA,CAHL;kBAICA,CAJD;mBAKEG,cAAc,uCAAd;SALX;OADK,MAQA,IAAI,kBAAkBQ,IAAlB,CAAuBT,EAAvB,CAAJ,EAAgC;iBAC5B;gBACD,gBADC;kBAECF,CAFD;mBAGEyB;SAHX;OADK,MAOF,IAAI,WAAWd,IAAX,CAAgBT,EAAhB,CAAJ,EAAyB;iBACnB;gBACD,SADC;mBAEIF,CAFJ;mBAGIG,cAAc,yBAAd,KAA4CuB;SAHzD;OADG,MAOA,IAAIT,QAAJ,EAAc;iBACR;gBACD,UADC;oBAEGjB,CAFH;mBAGEG,cAAc,oCAAd;SAHX;OADG,MAOA,IAAI,eAAeQ,IAAf,CAAoBT,EAApB,CAAJ,EAA6B;iBACvB;gBACD,WADC;qBAEIF,CAFJ;mBAGEG,cAAc,2BAAd;SAHX;OADG,MAOA,IAAI,2BAA2BQ,IAA3B,CAAgCT,EAAhC,CAAJ,EAAyC;iBACnC;gBACD,SADC;mBAEEF,CAFF;mBAGEG,cAAc,gDAAd;SAHX;YAKI,wCAAwCQ,IAAxC,CAA6CT,EAA7C,CAAJ,EAAsD;iBAC7CgC,SAAP,GAAmBlC,CAAnB;;OAPC,MAUA,IAAIgB,IAAJ,EAAU;iBACH;gBACF,aADE;gBAEFhB,CAFE;mBAGEG,cAAc,sBAAd;SAHZ;OADG,MAOA,IAAI,WAAWQ,IAAX,CAAgBT,EAAhB,CAAJ,EAAyB;iBACnB;gBACD,WADC;mBAEEF,CAFF;mBAGEG,cAAc,2BAAd;SAHX;OADG,MAOA,IAAI,YAAYQ,IAAZ,CAAiBT,EAAjB,CAAJ,EAA0B;iBACpB;gBACD,UADC;kBAEGF,CAFH;mBAGIG,cAAc,0BAAd;SAHb;OADG,MAOA,IAAI,sBAAsBQ,IAAtB,CAA2BT,EAA3B,KAAkC,eAAeS,IAAf,CAAoBT,EAApB,CAAtC,EAA+D;iBACzD;gBACD,YADC;sBAEKF,CAFL;mBAGE0B,qBAAqBvB,cAAc,iCAAd;SAHhC;OADG,MAOA,IAAIgB,KAAJ,EAAW;iBACL;gBACD,OADC;iBAEAnB,CAFA;mBAGE0B,qBAAqBvB,cAAc,mCAAd;SAHhC;sBAKcQ,IAAd,CAAmBT,EAAnB,MAA2B4B,OAAOK,QAAP,GAAkBnC,CAA7C;OANG,MAQA,IAAI,QAAQW,IAAR,CAAaT,EAAb,CAAJ,EAAsB;iBAChB;gBACD,MADC;gBAEDF,CAFC;mBAGEG,cAAc,wBAAd;SAHX;OADG,MAOA,IAAIe,KAAJ,EAAW;iBACL;gBACD,OADC;iBAEAlB,CAFA;mBAGEG,cAAc,sCAAd,KAAyDuB;SAHpE;OADG,MAOA,IAAI,YAAYf,IAAZ,CAAiBT,EAAjB,CAAJ,EAA0B;iBACpB;gBACD,UADC;oBAEKF,CAFL;mBAGIG,cAAc,oCAAd,KAAuDuB;SAHpE;OADG,MAOA,IAAI,YAAYf,IAAZ,CAAiBT,EAAjB,CAAJ,EAA0B;iBACpB;gBACD,UADC;oBAEKF,CAFL;mBAGIG,cAAc,oCAAd,KAAuDuB;SAHpE;OADG,MAOA,IAAI,qBAAqBf,IAArB,CAA0BT,EAA1B,CAAJ,EAAmC;iBAC7B;gBACD,QADC;kBAEGF,CAFH;mBAGIG,cAAc,uCAAd;SAHb;OADG,MAOA,IAAIS,OAAJ,EAAa;iBACP;gBACD,SADC;mBAEIc;SAFb;OADG,MAMA,IAAI,sBAAsBf,IAAtB,CAA2BT,EAA3B,CAAJ,EAAoC;iBAC9B;gBACD,QADC;kBAECF;SAFV;YAII0B,iBAAJ,EAAuB;iBACdM,OAAP,GAAiBN,iBAAjB;;OANC,MASA,IAAIlB,SAAJ,EAAe;iBACT;gBACAA,aAAa,QAAb,GAAwB,QAAxB,GAAmCA,aAAa,MAAb,GAAsB,MAAtB,GAA+B;SAD3E;;YAIIkB,iBAAJ,EAAuB;iBACdM,OAAP,GAAiBN,iBAAjB;;OANC,MASA,IAAG,aAAaf,IAAb,CAAkBT,EAAlB,CAAH,EAA0B;iBACpB;gBACD,WADC;qBAEIF,CAFJ;mBAGEG,cAAc,0BAAd,KAA6CuB;SAHxD;OADG,MAOA;iBACM;gBACDvB,cAAc,cAAd,CADC;mBAEEI,eAAe,cAAf;SAFX;;;;UAOE,CAACuB,OAAOC,MAAR,IAAkB,kBAAkBpB,IAAlB,CAAuBT,EAAvB,CAAtB,EAAkD;YAC5C,2BAA2BS,IAA3B,CAAgCT,EAAhC,CAAJ,EAAyC;iBAChCT,IAAP,GAAcqC,OAAOrC,IAAP,IAAe,OAA7B;iBACO2C,KAAP,GAAepC,CAAf;SAFF,MAGO;iBACEP,IAAP,GAAcqC,OAAOrC,IAAP,IAAe,QAA7B;iBACO4C,MAAP,GAAgBrC,CAAhB;;YAEE,CAAC8B,OAAOE,OAAR,IAAmBN,iBAAvB,EAA0C;iBACjCM,OAAP,GAAiBN,iBAAjB;;OATJ,MAWO,IAAI,CAACI,OAAOQ,KAAR,IAAiB,WAAW3B,IAAX,CAAgBT,EAAhB,CAArB,EAA0C;eACxCT,IAAP,GAAcqC,OAAOrC,IAAP,IAAe,OAA7B;eACO8C,KAAP,GAAevC,CAAf;eACOgC,OAAP,GAAiBF,OAAOE,OAAP,IAAkB7B,cAAc,uBAAd,CAAnC;;;;UAIE,CAAC2B,OAAOV,YAAR,IAAwB,CAACU,OAAOC,MAAhC,KAA2CnB,WAAWkB,OAAOd,IAA7D,CAAJ,EAAwE;eAC/DJ,OAAP,GAAiBZ,CAAjB;OADF,MAEO,IAAI,CAAC8B,OAAOV,YAAR,IAAwB,CAACU,OAAOC,MAAhC,IAA0CvB,SAA9C,EAAyD;eACvDA,SAAP,IAAoBR,CAApB;eACOwC,GAAP,GAAaxC,CAAb;OAFK,MAGA,IAAIuB,GAAJ,EAAS;eACPA,GAAP,GAAavB,CAAb;OADK,MAEA,IAAI6B,IAAJ,EAAU;eACRA,IAAP,GAAc7B,CAAd;OADK,MAEA,IAAIsB,OAAJ,EAAa;eACXA,OAAP,GAAiBtB,CAAjB;OADK,MAEA,IAAIwB,KAAJ,EAAW;eACTA,KAAP,GAAexB,CAAf;;;;UAIEyC,YAAY,EAAhB;UACIX,OAAOV,YAAX,EAAyB;oBACXjB,cAAc,wCAAd,CAAZ;OADF,MAEO,IAAIK,SAAJ,EAAe;oBACRL,cAAc,oCAAd,CAAZ;oBACYsC,UAAUC,OAAV,CAAkB,QAAlB,EAA4B,GAA5B,CAAZ;OAFK,MAGA,IAAI9B,OAAJ,EAAa;oBACNT,cAAc,6BAAd,CAAZ;OADK,MAEA,IAAI2B,OAAOX,KAAX,EAAkB;oBACXhB,cAAc,+BAAd,CAAZ;OADK,MAEA,IAAI2B,OAAOa,UAAX,EAAuB;oBAChBxC,cAAc,iCAAd,CAAZ;OADK,MAEA,IAAI2B,OAAOc,IAAX,EAAiB;oBACVzC,cAAc,sBAAd,CAAZ;OADK,MAEA,IAAI2B,OAAOZ,KAAX,EAAkB;oBACXf,cAAc,2BAAd,CAAZ;;UAEEsC,SAAJ,EAAe;eACNI,SAAP,GAAmBJ,SAAnB;;;;UAIEK,iBAAiBL,UAAUM,KAAV,CAAgB,GAAhB,EAAqB,CAArB,CAArB;UAEKpB,UACAb,WADA,IAEAN,aAAa,MAFb,IAGCI,YAAYkC,kBAAkB,CAAlB,IAAwBA,kBAAkB,CAAlB,IAAuB,CAAClB,MAA5D,CAHD,IAIAE,OAAOd,IALZ,EAME;eACOW,MAAP,GAAgB3B,CAAhB;OAPF,MAQO,IACF4B,UACApB,aAAa,QADb,IAEAA,aAAa,MAFb,IAGAI,OAHA,IAIAC,WAJA,IAKAiB,OAAOa,UALP,IAMAb,OAAOX,KANP,IAOAW,OAAOc,IARL,EASL;eACOhB,MAAP,GAAgB5B,CAAhB;;;;;UAKE8B,OAAOC,MAAP,IACCD,OAAOG,IAAP,IAAeH,OAAOE,OAAP,IAAkB,EADlC,IAECF,OAAOkB,aAAP,IAAwBlB,OAAOE,OAAP,IAAkB,EAF3C,IAGDF,OAAOmB,OAAP,IAAkBnB,OAAOE,OAAP,IAAkB,GAHnC,IAICF,OAAOoB,MAAP,IAAiBpB,OAAOE,OAAP,IAAkB,EAJpC,IAKCF,OAAOT,cAAP,IAAyBS,OAAOE,OAAP,IAAkB,CAL5C,IAMCF,OAAOqB,OAAP,IAAkBrB,OAAOE,OAAP,IAAkB,IANrC,IAOCF,OAAOsB,MAAP,IAAiBtB,OAAOE,OAAP,IAAkB,CAPpC,IAQCF,OAAOQ,KAAP,IAAgBR,OAAOE,OAAP,IAAkB,IARnC,IASCF,OAAOU,GAAP,IAAcV,OAAOe,SAArB,IAAkCf,OAAOe,SAAP,CAAiBE,KAAjB,CAAuB,GAAvB,EAA4B,CAA5B,KAAkC,CATrE,IAUCjB,OAAOa,UAAP,IAAqBb,OAAOE,OAAP,IAAkB,IAVxC,IAWIF,OAAOuB,QAAP,IAAmBvB,OAAOE,OAAP,IAAkB,EAX7C,EAYM;eACGsB,CAAP,GAAWtD,CAAX;OAbF,MAeK,IAAK8B,OAAOG,IAAP,IAAeH,OAAOE,OAAP,GAAiB,EAAjC,IACJF,OAAOoB,MAAP,IAAiBpB,OAAOE,OAAP,GAAiB,EAD9B,IAEJF,OAAOqB,OAAP,IAAkBrB,OAAOE,OAAP,GAAiB,IAF/B,IAGJF,OAAOsB,MAAP,IAAiBtB,OAAOE,OAAP,GAAiB,CAH9B,IAIJF,OAAOQ,KAAP,IAAgBR,OAAOE,OAAP,GAAiB,IAJ7B,IAKJF,OAAOU,GAAP,IAAcV,OAAOe,SAArB,IAAkCf,OAAOe,SAAP,CAAiBE,KAAjB,CAAuB,GAAvB,EAA4B,CAA5B,IAAiC,CAL/D,IAMDjB,OAAOuB,QAAP,IAAmBvB,OAAOE,OAAP,GAAiB,EANvC,EAOC;eACGuB,CAAP,GAAWvD,CAAX;OARG,MASE8B,OAAO0B,CAAP,GAAWxD,CAAX;;aAEA8B,MAAP;;;QAGE2B,SAASxD,OAAO,OAAOyD,SAAP,KAAqB,WAArB,GAAmCA,UAAUC,SAAV,IAAuB,EAA1D,GAA+D,EAAtE,CAAb;;WAEOhD,IAAP,GAAc,UAAUiD,WAAV,EAAuB;WAC9B,IAAIC,IAAI,CAAb,EAAgBA,IAAID,YAAYtD,MAAhC,EAAwC,EAAEuD,CAA1C,EAA6C;YACvCC,cAAcF,YAAYC,CAAZ,CAAlB;YACI,OAAOC,WAAP,KAAsB,QAA1B,EAAoC;cAC9BA,eAAeL,MAAnB,EAA2B;mBAClB,IAAP;;;;aAIC,KAAP;KATF;;;;;;;;;;;aAqBSM,mBAAT,CAA6B/B,OAA7B,EAAsC;aAC7BA,QAAQe,KAAR,CAAc,GAAd,EAAmBzC,MAA1B;;;;;;;;;;aAUO0D,GAAT,CAAaC,GAAb,EAAkBC,QAAlB,EAA4B;UACtBpC,SAAS,EAAb;UAAiB+B,CAAjB;UACIM,MAAMC,SAAN,CAAgBJ,GAApB,EAAyB;eAChBG,MAAMC,SAAN,CAAgBJ,GAAhB,CAAoBK,IAApB,CAAyBJ,GAAzB,EAA8BC,QAA9B,CAAP;;WAEGL,IAAI,CAAT,EAAYA,IAAII,IAAI3D,MAApB,EAA4BuD,GAA5B,EAAiC;eACxBS,IAAP,CAAYJ,SAASD,IAAIJ,CAAJ,CAAT,CAAZ;;aAEK/B,MAAP;;;;;;;;;;;;;;;aAeOyC,eAAT,CAAyBC,QAAzB,EAAmC;;UAE7BC,YAAYC,KAAKC,GAAL,CAASZ,oBAAoBS,SAAS,CAAT,CAApB,CAAT,EAA2CT,oBAAoBS,SAAS,CAAT,CAApB,CAA3C,CAAhB;UACII,SAASZ,IAAIQ,QAAJ,EAAc,UAAUxC,OAAV,EAAmB;YACxC6C,QAAQJ,YAAYV,oBAAoB/B,OAApB,CAAxB;;;kBAGUA,UAAU,IAAImC,KAAJ,CAAUU,QAAQ,CAAlB,EAAqBC,IAArB,CAA0B,IAA1B,CAApB;;;eAGOd,IAAIhC,QAAQe,KAAR,CAAc,GAAd,CAAJ,EAAwB,UAAUgC,KAAV,EAAiB;iBACvC,IAAIZ,KAAJ,CAAU,KAAKY,MAAMzE,MAArB,EAA6BwE,IAA7B,CAAkC,GAAlC,IAAyCC,KAAhD;SADK,EAEJC,OAFI,EAAP;OAPW,CAAb;;;aAaO,EAAEP,SAAF,IAAe,CAAtB,EAAyB;;YAEnBG,OAAO,CAAP,EAAUH,SAAV,IAAuBG,OAAO,CAAP,EAAUH,SAAV,CAA3B,EAAiD;iBACxC,CAAP;SADF,MAGK,IAAIG,OAAO,CAAP,EAAUH,SAAV,MAAyBG,OAAO,CAAP,EAAUH,SAAV,CAA7B,EAAmD;cAClDA,cAAc,CAAlB,EAAqB;;mBAEZ,CAAP;;SAHC,MAMA;iBACI,CAAC,CAAR;;;;;;;;;;;;;;;;;;;;;;;aAuBGQ,oBAAT,CAA8BC,WAA9B,EAA2CC,UAA3C,EAAuDjF,EAAvD,EAA2D;UACrDkF,UAAU3B,MAAd;;;UAGI,OAAO0B,UAAP,KAAsB,QAA1B,EAAoC;aAC7BA,UAAL;qBACa,KAAK,CAAlB;;;UAGEA,eAAe,KAAK,CAAxB,EAA4B;qBACb,KAAb;;UAEEjF,EAAJ,EAAQ;kBACID,OAAOC,EAAP,CAAV;;;UAGE8B,UAAU,KAAKoD,QAAQpD,OAA3B;WACK,IAAIqD,OAAT,IAAoBH,WAApB,EAAiC;YAC3BA,YAAYI,cAAZ,CAA2BD,OAA3B,CAAJ,EAAyC;cACnCD,QAAQC,OAAR,CAAJ,EAAsB;gBAChB,OAAOH,YAAYG,OAAZ,CAAP,KAAgC,QAApC,EAA8C;oBACtC,IAAIE,KAAJ,CAAU,+DAA+DF,OAA/D,GAAyE,IAAzE,GAAgFG,OAAON,WAAP,CAA1F,CAAN;;;;mBAIKX,gBAAgB,CAACvC,OAAD,EAAUkD,YAAYG,OAAZ,CAAV,CAAhB,IAAmD,CAA1D;;;;;aAKCF,UAAP,CA9ByD;;;;;;;;;;;aAyClDM,KAAT,CAAeP,WAAf,EAA4BC,UAA5B,EAAwCjF,EAAxC,EAA4C;aACnC,CAAC+E,qBAAqBC,WAArB,EAAkCC,UAAlC,EAA8CjF,EAA9C,CAAR;;;WAGK+E,oBAAP,GAA8BA,oBAA9B;WACOV,eAAP,GAAyBA,eAAzB;WACOkB,KAAP,GAAeA,KAAf;;;;;;;WAOOC,OAAP,GAAiBzF,MAAjB;;WAEOwD,MAAP;GA5jBD,CAAD;;;;;ECHA,IAAMkC,kBAAkB;AACtBzC,EAAAA,UAAQ,QADc;AAEtBE,EAAAA,UAAQ,QAFc;AAGtBZ,EAAAA,OAAK,QAHiB;AAItB5B,EAAAA,WAAS,QAJa;AAKtBgF,EAAAA,WAAS,QALa;AAMtBtD,EAAAA,SAAO,QANe;AAOtBnB,EAAAA,SAAO,QAPe;AAQtBwB,EAAAA,cAAY,QARU;AAStBC,EAAAA,QAAM,QATgB;AAUtB1B,EAAAA,SAAO,QAVe;AAWtBmC,EAAAA,YAAU,QAXY;AAYtBJ,EAAAA,WAAS,QAZa;AAatBE,EAAAA,WAAS,KAba;AActB0C,EAAAA,YAAU,KAdY;AAetB5E,EAAAA,YAAU,KAfY;AAgBtBgB,EAAAA,QAAM,IAhBgB;AAiBtBF,EAAAA,UAAQ;AAjBc,EAAA,CAAxB;;AAoBA,EAAA,IAAM+D,wBAAwB;AAC5B5C,EAAAA,UAAQ,QADoB;AAE5BG,EAAAA,YAAU,QAFkB;AAG5BD,EAAAA,UAAQ,QAHoB;AAI5B2C,EAAAA,UAAQ,SAJoB;AAK5BhE,EAAAA,UAAQ,MALoB;AAM5BO,EAAAA,SAAO,OANqB;AAO5BW,EAAAA,WAAS,OAPmB;AAQ5BhB,EAAAA,QAAM;AARsB,EAAA,CAA9B;;AAWA,EAAA,SAAS+D,cAAT,CAAwBC,WAAxB,EAAsD;AACpD,EAAA,MAAIA,YAAY9C,OAAhB,EAAyB;AACvB,EAAA,WAAO,SAAP;AACD,EAAA;;AAED,EAAA,MAAI8C,YAAYrE,MAAZ,IAAsBqE,YAAYtE,MAAtC,EAA8C;AAC5C,EAAA,QAAIsE,YAAYzD,GAAhB,EAAqB;AACnB,EAAA,aAAO,SAAP;AACD,EAAA,KAFD,MAEO,IAAIyD,YAAYrF,OAAhB,EAAyB;AAC9B,EAAA,aAAO,SAAP;AACD,EAAA,KAFM,MAEA,IAAIqF,YAAY3D,KAAhB,EAAuB;AAC5B,EAAA,aAAO,SAAP;AACD,EAAA;AACF,EAAA;;AAED,EAAA,OAAK,IAAM+C,OAAX,IAAsBS,qBAAtB,EAA6C;AAC3C,EAAA,QAAIG,YAAYZ,OAAZ,CAAJ,EAA0B;AACxB,EAAA,aAAOS,sBAAsBT,OAAtB,CAAP;AACD,EAAA;AACF,EAAA;AACF,EAAA;;AAED,EAAA;;;;;AAKA,EAAe,SAASa,qBAAT,CAA+BvC,SAA/B,EAAoE;AACjF,EAAA,MAAMsC,cAAcxC,SAAOiC,OAAP,CAAe/B,SAAf,CAApB;;AAEA,EAAA,OAAK,IAAM0B,OAAX,IAAsBM,eAAtB,EAAuC;AACrC,EAAA,QAAIM,YAAYZ,OAAZ,CAAJ,EAA0B;AACxB,EAAA,UAAMc,SAASR,gBAAgBN,OAAhB,CAAf;;AAEAY,EAAAA,kBAAYG,QAAZ,GAAuBD,MAAvB;AACAF,EAAAA,kBAAYI,SAAZ,SAA4BF,OAAO1F,WAAP,EAA5B;AACA,EAAA;AACD,EAAA;AACF,EAAA;;AAEDwF,EAAAA,cAAYK,WAAZ,GAA0BN,eAAeC,WAAf,CAA1B;;AAEA,EAAA;AACA,EAAA,MAAIA,YAAYjE,OAAhB,EAAyB;AACvBiE,EAAAA,gBAAYM,cAAZ,GAA6BC,WAAWP,YAAYjE,OAAvB,CAA7B;AACD,EAAA,GAFD,MAEO;AACLiE,EAAAA,gBAAYM,cAAZ,GAA6BE,SAASD,WAAWP,YAAYpD,SAAvB,CAAT,EAA4C,EAA5C,CAA7B;AACD,EAAA;;AAEDoD,EAAAA,cAAYxD,SAAZ,GAAwB+D,WAAWP,YAAYpD,SAAvB,CAAxB;;AAEA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA,MAAIoD,YAAYK,WAAZ,KAA4B,SAA5B,IAAyCL,YAAYM,cAAZ,GAA6BN,YAAYxD,SAAtF,EAAiG;AAC/FwD,EAAAA,gBAAYM,cAAZ,GAA6BN,YAAYxD,SAAzC;AACD,EAAA;;AAED,EAAA;AACA,EAAA;AACA,EAAA,MACEwD,YAAYK,WAAZ,KAA4B,SAA5B,IAAyCL,YAAY/C,MAArD,IAA+D+C,YAAYM,cAAZ,GAA6B,EAD9F,EAEE;AACAN,EAAAA,gBAAYK,WAAZ,GAA0B,SAA1B;AACD,EAAA;;AAED,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA,MAAIL,YAAYK,WAAZ,KAA4B,SAA5B,IAAyCL,YAAYxD,SAAZ,GAAwB,CAArE,EAAwE;AACtEwD,EAAAA,gBAAYM,cAAZ,GAA6BN,YAAYxD,SAAzC;AACD,EAAA;;AAED,EAAA;AACA,EAAA;AACA,EAAA,MAAIwD,YAAYK,WAAZ,KAA4B,SAA5B,IAAyCL,YAAY5E,cAAzD,EAAyE;AACvE4E,EAAAA,gBAAYK,WAAZ,GAA0B,SAA1B;AACAL,EAAAA,gBAAYM,cAAZ,GAA6B,EAA7B;AACD,EAAA;;AAED,EAAA,SAAON,WAAP;AACD,EAAA;;ECnHc,SAASS,oBAAT,CACbJ,WADa,EAEbC,cAFa,EAGbF,SAHa,EAIL;AACR,EAAA,MAAMM,oBAAoB,WAA1B;;AAEA,EAAA,MACEL,gBAAgB,QAAhB,IAA4BC,iBAAiB,EAA7C,IACE,CAACD,gBAAgB,QAAhB,IAA4BA,gBAAgB,SAA7C,KACEC,iBAAiB,CAFrB,IAGED,gBAAgB,OAAhB,IAA2BC,iBAAiB,EAH9C,IAIED,gBAAgB,SAAhB,IAA6BC,kBAAkB,GAJjD,IAKED,gBAAgB,QANpB,EAOE;AACA,EAAA,WAAOD,YAAYM,iBAAnB;AACD,EAAA;AACD,EAAA,SAAOA,iBAAP;AACD,EAAA;;EClBc,SAASC,gBAAT,CAA0BC,GAA1B,EAA+C;AAC5D,EAAA,SAAOA,IAAIC,MAAJ,CAAW,CAAX,EAAcC,WAAd,KAA8BF,IAAIG,KAAJ,CAAU,CAAV,CAArC;AACD,EAAA;;ECFD,SAASC,QAAT,CAAkBC,IAAlB,EAAoCC,KAApC,EAAsD;AACpD,EAAA,MAAID,KAAKE,OAAL,CAAaD,KAAb,MAAwB,CAAC,CAA7B,EAAgC;AAC9BD,EAAAA,SAAK5C,IAAL,CAAU6C,KAAV;AACD,EAAA;AACF,EAAA;;AAED,EAAe,SAASE,gBAAT,CAA0BH,IAA1B,EAA4CI,MAA5C,EAA4E;AACzF,EAAA,MAAInD,MAAMoD,OAAN,CAAcD,MAAd,CAAJ,EAA2B;AACzB,EAAA,SAAK,IAAIzD,IAAI,CAAR,EAAW2D,MAAMF,OAAOhH,MAA7B,EAAqCuD,IAAI2D,GAAzC,EAA8C,EAAE3D,CAAhD,EAAmD;AACjDoD,EAAAA,eAASC,IAAT,EAAeI,OAAOzD,CAAP,CAAf;AACD,EAAA;AACF,EAAA,GAJD,MAIO;AACLoD,EAAAA,aAASC,IAAT,EAAeI,MAAf;AACD,EAAA;AACF,EAAA;;ECdc,SAASG,QAAT,CAAkBN,KAAlB,EAAuC;AACpD,EAAA,SAAOA,iBAAiBO,MAAjB,IAA2B,CAACvD,MAAMoD,OAAN,CAAcJ,KAAd,CAAnC;AACD,EAAA;;ECFc,SAASQ,WAAT,CACbC,OADa,EAEbC,QAFa,EAGbV,KAHa,EAIbW,KAJa,EAKbC,QALa,EAMP;AACN,EAAA,OAAK,IAAIlE,IAAI,CAAR,EAAW2D,MAAMI,QAAQtH,MAA9B,EAAsCuD,IAAI2D,GAA1C,EAA+C,EAAE3D,CAAjD,EAAoD;AAClD,EAAA,QAAMmE,iBAAiBJ,QAAQ/D,CAAR,EAAWgE,QAAX,EAAqBV,KAArB,EAA4BW,KAA5B,EAAmCC,QAAnC,CAAvB;;AAEA,EAAA;AACA,EAAA;AACA,EAAA,QAAIC,cAAJ,EAAoB;AAClB,EAAA,aAAOA,cAAP;AACD,EAAA;AACF,EAAA;AACF,EAAA;;ECVc,SAASC,cAAT,CACbC,iBADa,EAIb;AAAA,EAAA,MAFAN,OAEA,uEAF4B,EAE5B;AAAA,EAAA,MADAO,QACA,uEADsB;AAAA,EAAA,WAASL,KAAT;AAAA,EAAA,GACtB;;AACA,EAAA;AACE,EAAA;;;;;AAKA,EAAA,wBAA0B;AAAA,EAAA,UAAdM,OAAc,uEAAJ,EAAI;AAAA,EAAA;;AACxB,EAAA,UAAMC,mBAAmB,OAAO3E,SAAP,KAAqB,WAArB,GAAmCA,UAAUC,SAA7C,GAAyD2E,SAAlF;;AAEA,EAAA,WAAKC,UAAL,GAAkBH,QAAQzE,SAAR,IAAqB0E,gBAAvC;AACA,EAAA,WAAKG,eAAL,GAAuBJ,QAAQK,cAAR,IAA0B,KAAjD;;AAEA,EAAA,UAAI,KAAKF,UAAT,EAAqB;AACnB,EAAA,aAAKG,YAAL,GAAoBxC,sBAAsB,KAAKqC,UAA3B,CAApB;AACD,EAAA;;AAED,EAAA;AACA,EAAA,UAAI,KAAKG,YAAL,IAAqB,KAAKA,YAAL,CAAkBrC,SAA3C,EAAsD;AACpD,EAAA,aAAKM,iBAAL,GAAyBD,qBACvB,KAAKgC,YAAL,CAAkBpC,WADK,EAEvB,KAAKoC,YAAL,CAAkBnC,cAFK,EAGvB,KAAKmC,YAAL,CAAkBrC,SAHK,CAAzB;AAKD,EAAA,OAND,MAMO;AACL,EAAA,aAAKsC,YAAL,GAAoB,IAApB;AACA,EAAA,eAAO,KAAP;AACD,EAAA;;AAED,EAAA,UAAMC,aAAa,KAAKF,YAAL,CAAkBpC,WAAlB,IACjB4B,kBAAkB,KAAKQ,YAAL,CAAkBpC,WAApC,CADF;AAEA,EAAA,UAAIsC,UAAJ,EAAgB;AACd,EAAA,aAAKC,eAAL,GAAuB,EAAvB;;AAEA,EAAA,aAAK,IAAMhB,QAAX,IAAuBe,UAAvB,EAAmC;AACjC,EAAA,cAAIA,WAAWf,QAAX,KAAwB,KAAKa,YAAL,CAAkBnC,cAA9C,EAA8D;AAC5D,EAAA,iBAAKsC,eAAL,CAAqBhB,QAArB,IAAiC,IAAjC;AACD,EAAA;AACF,EAAA;;AAED,EAAA,aAAKiB,wBAAL,GAAgCpB,OAAOqB,IAAP,CAAY,KAAKF,eAAjB,EAAkCvI,MAAlC,GAA2C,CAA3E;AACD,EAAA,OAVD,MAUO;AACL,EAAA,aAAKqI,YAAL,GAAoB,IAApB;AACD,EAAA;;AAED,EAAA,WAAKK,SAAL,GAAiB;AACfzC,EAAAA,wBAAgB,KAAKmC,YAAL,CAAkBnC,cADnB;AAEfD,EAAAA,qBAAa,KAAKoC,YAAL,CAAkBpC,WAFhB;AAGfD,EAAAA,mBAAW,KAAKqC,YAAL,CAAkBrC,SAHd;AAIfD,EAAAA,kBAAU,KAAKsC,YAAL,CAAkBtC,QAJb;AAKfqC,EAAAA,wBAAgB,KAAKD,eALN;AAMfS,EAAAA,wBAAgB,KAAKJ;AANN,EAAA,OAAjB;AAQD,EAAA;;AApDH,EAAA;AAAA,EAAA;AAAA,EAAA,6BAsDSf,KAtDT,EAsDgC;AAC5B,EAAA;AACA,EAAA,YAAI,KAAKa,YAAT,EAAuB;AACrB,EAAA,iBAAOR,SAASL,KAAT,CAAP;AACD,EAAA;;AAED,EAAA;AACA,EAAA,YAAI,CAAC,KAAKgB,wBAAV,EAAoC;AAClC,EAAA,iBAAOhB,KAAP;AACD,EAAA;;AAED,EAAA,eAAO,KAAKoB,YAAL,CAAkBpB,KAAlB,CAAP;AACD,EAAA;AAlEH,EAAA;AAAA,EAAA;AAAA,EAAA,mCAoEeA,KApEf,EAoEsC;AAClC,EAAA,aAAK,IAAMD,QAAX,IAAuBC,KAAvB,EAA8B;AAC5B,EAAA,cAAMX,QAAQW,MAAMD,QAAN,CAAd;;AAEA,EAAA;AACA,EAAA,cAAIJ,SAASN,KAAT,CAAJ,EAAqB;AACnBW,EAAAA,kBAAMD,QAAN,IAAkB,KAAK1B,MAAL,CAAYgB,KAAZ,CAAlB;AACA,EAAA;AACD,EAAA,WAHD,MAGO,IAAIhD,MAAMoD,OAAN,CAAcJ,KAAd,CAAJ,EAA0B;AAC/B,EAAA,gBAAMgC,gBAAgB,EAAtB;;AAEA,EAAA,iBAAK,IAAItF,IAAI,CAAR,EAAW2D,MAAML,MAAM7G,MAA5B,EAAoCuD,IAAI2D,GAAxC,EAA6C,EAAE3D,CAA/C,EAAkD;AAChD,EAAA,kBAAMmE,iBAAiBL,YAAYC,OAAZ,EAAqBC,QAArB,EAA+BV,MAAMtD,CAAN,CAA/B,EAAyCiE,KAAzC,EAAgD,KAAKkB,SAArD,CAAvB;AACA3B,EAAAA,+BAAiB8B,aAAjB,EAAgCnB,kBAAkBb,MAAMtD,CAAN,CAAlD;AACD,EAAA;;AAED,EAAA;AACA,EAAA;AACA,EAAA,gBAAIsF,cAAc7I,MAAd,GAAuB,CAA3B,EAA8B;AAC5BwH,EAAAA,oBAAMD,QAAN,IAAkBsB,aAAlB;AACD,EAAA;AACF,EAAA,WAbM,MAaA;AACL,EAAA,gBAAMnB,kBAAiBL,YAAYC,OAAZ,EAAqBC,QAArB,EAA+BV,KAA/B,EAAsCW,KAAtC,EAA6C,KAAKkB,SAAlD,CAAvB;;AAEA,EAAA;AACA,EAAA;AACA,EAAA,gBAAIhB,eAAJ,EAAoB;AAClBF,EAAAA,oBAAMD,QAAN,IAAkBG,eAAlB;AACD,EAAA;;AAED,EAAA;AACA,EAAA,gBAAI,KAAKa,eAAL,CAAqBhB,QAArB,CAAJ,EAAoC;AAClCC,EAAAA,oBAAM,KAAKY,YAAL,CAAkBtC,QAAlB,GAA6BQ,iBAAiBiB,QAAjB,CAAnC,IAAiEV,KAAjE;AACA,EAAA,kBAAI,CAAC,KAAKqB,eAAV,EAA2B;AACzB,EAAA,uBAAOV,MAAMD,QAAN,CAAP;AACD,EAAA;AACF,EAAA;AACF,EAAA;AACF,EAAA;;AAED,EAAA,eAAOC,KAAP;AACD,EAAA;;AAED,EAAA;;;;;;AA/GF,EAAA;AAAA,EAAA;AAAA,EAAA,gCAoHmBsB,MApHnB,EAoH2B;AACvB,EAAA,eAAOjB,SAASiB,MAAT,CAAP;AACD,EAAA;AAtHH,EAAA;AAAA,EAAA;AAAA,EAAA;AAwHD,EAAA;;0BCpIc,EAAC,UAAS,EAAC,cAAa,EAAd,EAAiB,cAAa,EAA9B,EAAiC,wBAAuB,EAAxD,EAA2D,gBAAe,EAA1E,EAA6E,qBAAoB,EAAjG,EAAoG,qBAAoB,EAAxH,EAA2H,sBAAqB,EAAhJ,EAAmJ,YAAW,EAA9J,EAAiK,aAAY,EAA7K,EAAgL,YAAW,EAA3L,EAA8L,cAAa,EAA3M,EAA8M,gBAAe,EAA7N,EAAgO,YAAW,EAA3O,EAA8O,cAAa,EAA3P,EAA8P,YAAW,EAAzQ,EAA4Q,iBAAgB,EAA5R,EAA+R,QAAO,EAAtS,EAAyS,oBAAmB,EAA5T,EAA+T,kBAAiB,EAAhV,EAAmV,mBAAkB,EAArW,EAAwW,mBAAkB,EAA1X,EAA6X,oBAAmB,EAAhZ,EAAmZ,oBAAmB,EAAta,EAAya,cAAa,EAAtb,EAAyb,YAAW,EAApc,EAAuc,uBAAsB,EAA7d,EAAge,sBAAqB,EAArf,EAAwf,sBAAqB,EAA7gB,EAAghB,uBAAsB,EAAtiB,EAAyiB,UAAS,EAAljB,EAAqjB,uBAAsB,EAA3kB,EAA8kB,cAAa,EAA3lB,EAA8lB,eAAc,EAA5mB,EAA+mB,eAAc,EAA7nB,EAAgoB,eAAc,EAA9oB,EAAipB,cAAa,EAA9pB,EAAiqB,aAAY,EAA7qB,EAAgrB,cAAa,EAA7rB,EAAgsB,mBAAkB,EAAltB,EAAqtB,mBAAkB,EAAvuB,EAA0uB,mBAAkB,EAA5vB,EAA+vB,WAAU,EAAzwB,EAA4wB,cAAa,EAAzxB,EAA4xB,eAAc,EAA1yB,EAAV,EAAwzB,UAAS,EAAC,QAAO,CAAR,EAAU,aAAY,CAAtB,EAAwB,iBAAgB,CAAxC,EAA0C,YAAW,CAArD,EAAuD,YAAW,CAAlE,EAAoE,cAAa,CAAjF,EAAmF,YAAW,CAA9F,EAAgG,gBAAe,CAA/G,EAAiH,cAAa,CAA9H,EAAgI,aAAY,CAA5I,EAA8I,kBAAiB,CAA/J,EAAiK,SAAQ,CAAzK,EAA2K,aAAY,CAAvL,EAAyL,mBAAkB,CAA3M,EAA6M,oBAAmB,CAAhO,EAAkO,oBAAmB,CAArP,EAAuP,sBAAqB,CAA5Q,EAA8Q,eAAc,CAA5R,EAA8R,qBAAoB,CAAlT,EAAoT,kBAAiB,CAArU,EAAuU,oBAAmB,CAA1V,EAA4V,aAAY,CAAxW,EAA0W,kBAAiB,CAA3X,EAA6X,sBAAqB,CAAlZ,EAAoZ,qBAAoB,CAAxa,EAA0a,qBAAoB,CAA9b,EAAgc,2BAA0B,CAA1d,EAA4d,iBAAgB,CAA5e,EAA8e,sBAAqB,CAAngB,EAAqgB,2BAA0B,CAA/hB,EAAiiB,cAAa,IAA9iB,EAAmjB,cAAa,IAAhkB,EAAqkB,kBAAiB,IAAtlB,EAA2lB,eAAc,CAAzmB,EAA2mB,kBAAiB,IAA5nB,EAAioB,qBAAoB,IAArpB,EAA0pB,qBAAoB,IAA9qB,EAAmrB,yBAAwB,IAA3sB,EAAgtB,wBAAuB,IAAvuB,EAA4uB,sBAAqB,IAAjwB,EAAswB,YAAW,IAAjxB,EAAsxB,aAAY,IAAlyB,EAAuyB,YAAW,IAAlzB,EAAuzB,cAAa,IAAp0B,EAAy0B,gBAAe,IAAx1B,EAA61B,YAAW,IAAx2B,EAA62B,cAAa,IAA13B,EAA+3B,YAAW,IAA14B,EAA+4B,iBAAgB,IAA/5B,EAAo6B,QAAO,IAA36B,EAAg7B,oBAAmB,IAAn8B,EAAw8B,kBAAiB,IAAz9B,EAA89B,mBAAkB,IAAh/B,EAAq/B,mBAAkB,IAAvgC,EAA4gC,oBAAmB,IAA/hC,EAAoiC,oBAAmB,IAAvjC,EAA4jC,cAAa,IAAzkC,EAA8kC,YAAW,IAAzlC,EAA8lC,uBAAsB,IAApnC,EAAynC,sBAAqB,IAA9oC,EAAmpC,sBAAqB,IAAxqC,EAA6qC,uBAAsB,IAAnsC,EAAwsC,uBAAsB,EAA9tC,EAAiuC,oBAAmB,EAApvC,EAAuvC,qBAAoB,EAA3wC,EAA8wC,UAAS,CAAvxC,EAAyxC,WAAU,IAAnyC,EAAwyC,YAAW,IAAnzC,EAAwzC,YAAW,IAAn0C,EAAw0C,eAAc,CAAt1C,EAAw1C,cAAa,CAAr2C,EAAu2C,eAAc,CAAr3C,EAAu3C,kBAAiB,IAAx4C,EAA64C,eAAc,CAA35C,EAA65C,cAAa,CAA16C,EAA46C,aAAY,CAAx7C,EAA07C,cAAa,CAAv8C,EAAy8C,mBAAkB,CAA39C,EAA69C,mBAAkB,CAA/+C,EAAi/C,mBAAkB,CAAngD,EAAqgD,WAAU,CAA/gD,EAAihD,cAAa,CAA9hD,EAAgiD,eAAc,CAA9iD,EAAj0B,EAAk3E,WAAU,EAAC,gBAAe,GAAhB,EAAoB,eAAc,EAAlC,EAAqC,qBAAoB,EAAzD,EAA4D,qBAAoB,EAAhF,EAAmF,oBAAmB,EAAtG,EAAyG,qBAAoB,EAA7H,EAAgI,oBAAmB,EAAnJ,EAAsJ,QAAO,EAA7J,EAAgK,aAAY,EAA5K,EAA+K,iBAAgB,EAA/L,EAAkM,YAAW,EAA7M,EAAgN,YAAW,EAA3N,EAA8N,cAAa,EAA3O,EAA8O,YAAW,EAAzP,EAA4P,gBAAe,EAA3Q,EAA8Q,cAAa,EAA3R,EAA8R,aAAY,EAA1S,EAA6S,kBAAiB,EAA9T,EAAiU,SAAQ,EAAzU,EAA4U,cAAa,EAAzV,EAA4V,mBAAkB,EAA9W,EAAiX,sBAAqB,EAAtY,EAAyY,sBAAqB,EAA9Z,EAAia,4BAA2B,EAA5b,EAA+b,aAAY,EAA3c,EAA8c,mBAAkB,EAAhe,EAAme,oBAAmB,EAAtf,EAAyf,oBAAmB,EAA5gB,EAA+gB,sBAAqB,EAApiB,EAAuiB,eAAc,EAArjB,EAAwjB,qBAAoB,EAA5kB,EAA+kB,kBAAiB,EAAhmB,EAAmmB,oBAAmB,EAAtnB,EAAynB,aAAY,EAAroB,EAAwoB,kBAAiB,EAAzpB,EAA4pB,sBAAqB,EAAjrB,EAAorB,qBAAoB,EAAxsB,EAA2sB,qBAAoB,EAA/tB,EAAkuB,2BAA0B,EAA5vB,EAA+vB,iBAAgB,EAA/wB,EAAkxB,sBAAqB,EAAvyB,EAA0yB,2BAA0B,EAAp0B,EAAu0B,cAAa,EAAp1B,EAAu1B,cAAa,EAAp2B,EAAu2B,aAAY,EAAn3B,EAAs3B,iBAAgB,EAAt4B,EAAy4B,uBAAsB,EAA/5B,EAAk6B,sBAAqB,EAAv7B,EAA07B,sBAAqB,EAA/8B,EAAk9B,uBAAsB,EAAx+B,EAA2+B,WAAU,EAAr/B,EAAw/B,UAAS,CAAjgC,EAAmgC,WAAU,EAA7gC,EAAghC,kBAAiB,GAAjiC,EAAqiC,oBAAmB,GAAxjC,EAA4jC,kBAAiB,GAA7kC,EAAilC,uBAAsB,EAAvmC,EAA0mC,aAAY,GAAtnC,EAA0nC,cAAa,EAAvoC,EAA0oC,eAAc,EAAxpC,EAA2pC,eAAc,EAAzqC,EAA4qC,eAAc,EAA1rC,EAA6rC,cAAa,EAA1sC,EAA6sC,aAAY,EAAztC,EAA4tC,cAAa,EAAzuC,EAA4uC,mBAAkB,EAA9vC,EAAiwC,mBAAkB,EAAnxC,EAAsxC,mBAAkB,EAAxyC,EAA2yC,WAAU,EAArzC,EAAwzC,cAAa,EAAr0C,EAAw0C,eAAc,EAAt1C,EAA53E,EAAstH,SAAQ,EAAC,QAAO,EAAR,EAAW,aAAY,EAAvB,EAA0B,iBAAgB,EAA1C,EAA6C,YAAW,EAAxD,EAA2D,YAAW,EAAtE,EAAyE,cAAa,EAAtF,EAAyF,YAAW,EAApG,EAAuG,gBAAe,EAAtH,EAAyH,cAAa,EAAtI,EAAyI,aAAY,EAArJ,EAAwJ,kBAAiB,EAAzK,EAA4K,SAAQ,EAApL,EAAuL,aAAY,EAAnM,EAAsM,mBAAkB,EAAxN,EAA2N,oBAAmB,EAA9O,EAAiP,oBAAmB,EAApQ,EAAuQ,sBAAqB,EAA5R,EAA+R,eAAc,EAA7S,EAAgT,qBAAoB,EAApU,EAAuU,kBAAiB,EAAxV,EAA2V,oBAAmB,EAA9W,EAAiX,aAAY,EAA7X,EAAgY,kBAAiB,EAAjZ,EAAoZ,sBAAqB,EAAza,EAA4a,qBAAoB,EAAhc,EAAmc,qBAAoB,EAAvd,EAA0d,2BAA0B,EAApf,EAAuf,iBAAgB,EAAvgB,EAA0gB,sBAAqB,EAA/hB,EAAkiB,2BAA0B,EAA5jB,EAA+jB,cAAa,EAA5kB,EAA+kB,cAAa,EAA5lB,EAA+lB,eAAc,EAA7mB,EAAgnB,wBAAuB,EAAvoB,EAA0oB,gBAAe,EAAzpB,EAA4pB,qBAAoB,EAAhrB,EAAmrB,qBAAoB,EAAvsB,EAA0sB,sBAAqB,EAA/tB,EAAkuB,YAAW,EAA7uB,EAAgvB,aAAY,EAA5vB,EAA+vB,YAAW,EAA1wB,EAA6wB,cAAa,EAA1xB,EAA6xB,gBAAe,EAA5yB,EAA+yB,YAAW,EAA1zB,EAA6zB,cAAa,EAA10B,EAA60B,YAAW,EAAx1B,EAA21B,iBAAgB,EAA32B,EAA82B,QAAO,EAAr3B,EAAw3B,oBAAmB,EAA34B,EAA84B,kBAAiB,EAA/5B,EAAk6B,mBAAkB,EAAp7B,EAAu7B,mBAAkB,EAAz8B,EAA48B,oBAAmB,EAA/9B,EAAk+B,oBAAmB,EAAr/B,EAAw/B,cAAa,EAArgC,EAAwgC,YAAW,EAAnhC,EAAshC,uBAAsB,EAA5iC,EAA+iC,sBAAqB,EAApkC,EAAukC,sBAAqB,EAA5lC,EAA+lC,uBAAsB,EAArnC,EAAwnC,UAAS,EAAjoC,EAAooC,uBAAsB,EAA1pC,EAA6pC,cAAa,EAA1qC,EAA6qC,eAAc,EAA3rC,EAA8rC,eAAc,EAA5sC,EAA+sC,eAAc,EAA7tC,EAAguC,cAAa,EAA7uC,EAAgvC,aAAY,EAA5vC,EAA+vC,cAAa,EAA5wC,EAA+wC,mBAAkB,EAAjyC,EAAoyC,mBAAkB,EAAtzC,EAAyzC,mBAAkB,EAA30C,EAA80C,WAAU,EAAx1C,EAA21C,cAAa,EAAx2C,EAA22C,eAAc,EAAz3C,EAA9tH,EAA2lK,MAAK,EAAC,cAAa,EAAd,EAAiB,YAAW,EAA5B,EAA+B,eAAc,EAA7C,EAAgD,cAAa,EAA7D,EAAgE,kBAAiB,EAAjF,EAAoF,qBAAoB,EAAxG,EAA2G,qBAAoB,EAA/H,EAAkI,yBAAwB,EAA1J,EAA6J,wBAAuB,EAApL,EAAuL,WAAU,EAAjM,EAAoM,YAAW,EAA/M,EAAkN,YAAW,EAA7N,EAAgO,eAAc,EAA9O,EAAiP,cAAa,EAA9P,EAAiQ,eAAc,EAA/Q,EAAkR,kBAAiB,EAAnS,EAAsS,uBAAsB,EAA5T,EAA+T,oBAAmB,EAAlV,EAAqV,qBAAoB,EAAzW,EAA4W,gBAAe,EAA3X,EAA8X,mBAAkB,EAAhZ,EAAmZ,gBAAe,EAAla,EAAqa,gBAAe,EAApb,EAAub,QAAO,EAA9b,EAAic,gBAAe,EAAhd,EAAmd,mBAAkB,EAAre,EAAwe,cAAa,EAArf,EAAwf,WAAU,EAAlgB,EAAqgB,cAAa,EAAlhB,EAAqhB,iBAAgB,EAAriB,EAAwiB,iBAAgB,EAAxjB,EAA2jB,cAAa,EAAxkB,EAA2kB,YAAW,EAAtlB,EAAylB,WAAU,EAAnmB,EAAsmB,kBAAiB,EAAvnB,EAAhmK,EAA2tL,QAAO,EAAC,cAAa,EAAd,EAAiB,YAAW,EAA5B,EAA+B,eAAc,EAA7C,EAAgD,cAAa,EAA7D,EAAgE,kBAAiB,EAAjF,EAAoF,qBAAoB,EAAxG,EAA2G,qBAAoB,EAA/H,EAAkI,yBAAwB,EAA1J,EAA6J,wBAAuB,EAApL,EAAuL,WAAU,EAAjM,EAAoM,YAAW,EAA/M,EAAkN,YAAW,EAA7N,EAAgO,eAAc,EAA9O,EAAiP,cAAa,EAA9P,EAAiQ,eAAc,EAA/Q,EAAkR,kBAAiB,EAAnS,EAAsS,uBAAsB,EAA5T,EAA+T,oBAAmB,EAAlV,EAAqV,qBAAoB,EAAzW,EAA4W,gBAAe,EAA3X,EAA8X,mBAAkB,EAAhZ,EAAmZ,gBAAe,EAAla,EAAqa,gBAAe,EAApb,EAAub,QAAO,EAA9b,EAAic,gBAAe,EAAhd,EAAmd,mBAAkB,EAAre,EAAwe,cAAa,EAArf,EAAwf,WAAU,EAAlgB,EAAqgB,cAAa,EAAlhB,EAAqhB,iBAAgB,EAAriB,EAAwiB,iBAAgB,EAAxjB,EAA2jB,cAAa,EAAxkB,EAA2kB,YAAW,EAAtlB,EAAylB,WAAU,EAAnmB,EAAluL,EAAy0M,WAAU,EAAC,QAAO,GAAR,EAAY,aAAY,GAAxB,EAA4B,iBAAgB,GAA5C,EAAgD,YAAW,GAA3D,EAA+D,YAAW,GAA1E,EAA8E,cAAa,GAA3F,EAA+F,YAAW,GAA1G,EAA8G,gBAAe,GAA7H,EAAiI,cAAa,GAA9I,EAAkJ,aAAY,GAA9J,EAAkK,kBAAiB,GAAnL,EAAuL,SAAQ,GAA/L,EAAmM,aAAY,GAA/M,EAAmN,mBAAkB,GAArO,EAAyO,oBAAmB,GAA5P,EAAgQ,oBAAmB,GAAnR,EAAuR,sBAAqB,GAA5S,EAAgT,eAAc,GAA9T,EAAkU,qBAAoB,GAAtV,EAA0V,kBAAiB,GAA3W,EAA+W,oBAAmB,GAAlY,EAAsY,aAAY,GAAlZ,EAAsZ,kBAAiB,GAAva,EAA2a,sBAAqB,GAAhc,EAAoc,qBAAoB,GAAxd,EAA4d,qBAAoB,GAAhf,EAAof,2BAA0B,GAA9gB,EAAkhB,iBAAgB,GAAliB,EAAsiB,sBAAqB,GAA3jB,EAA+jB,2BAA0B,GAAzlB,EAA6lB,cAAa,EAA1mB,EAA6mB,cAAa,EAA1nB,EAA6nB,kBAAiB,EAA9oB,EAAipB,eAAc,EAA/pB,EAAkqB,kBAAiB,EAAnrB,EAAsrB,qBAAoB,EAA1sB,EAA6sB,qBAAoB,EAAjuB,EAAouB,yBAAwB,EAA5vB,EAA+vB,wBAAuB,EAAtxB,EAAyxB,sBAAqB,EAA9yB,EAAizB,YAAW,EAA5zB,EAA+zB,aAAY,EAA30B,EAA80B,YAAW,EAAz1B,EAA41B,cAAa,EAAz2B,EAA42B,gBAAe,EAA33B,EAA83B,YAAW,EAAz4B,EAA44B,cAAa,EAAz5B,EAA45B,YAAW,EAAv6B,EAA06B,iBAAgB,EAA17B,EAA67B,QAAO,EAAp8B,EAAu8B,oBAAmB,EAA19B,EAA69B,kBAAiB,EAA9+B,EAAi/B,mBAAkB,EAAngC,EAAsgC,mBAAkB,EAAxhC,EAA2hC,oBAAmB,EAA9iC,EAAijC,oBAAmB,EAApkC,EAAukC,cAAa,EAAplC,EAAulC,YAAW,EAAlmC,EAAqmC,kBAAiB,EAAtnC,EAAynC,uBAAsB,EAA/oC,EAAkpC,sBAAqB,EAAvqC,EAA0qC,sBAAqB,EAA/rC,EAAksC,uBAAsB,EAAxtC,EAA2tC,uBAAsB,EAAjvC,EAAovC,oBAAmB,EAAvwC,EAA0wC,qBAAoB,EAA9xC,EAAiyC,UAAS,CAA1yC,EAA4yC,WAAU,EAAtzC,EAAyzC,YAAW,EAAp0C,EAAu0C,YAAW,EAAl1C,EAAq1C,eAAc,GAAn2C,EAAu2C,cAAa,GAAp3C,EAAw3C,eAAc,GAAt4C,EAA04C,kBAAiB,EAA35C,EAA85C,eAAc,GAA56C,EAAg7C,cAAa,GAA77C,EAAi8C,aAAY,GAA78C,EAAi9C,cAAa,GAA99C,EAAk+C,mBAAkB,GAAp/C,EAAw/C,mBAAkB,GAA1gD,EAA8gD,mBAAkB,GAAhiD,EAAoiD,WAAU,GAA9iD,EAAkjD,cAAa,GAA/jD,EAAmkD,eAAc,GAAjlD,EAAn1M,EAAy6P,WAAU,EAAC,QAAO,GAAR,EAAY,aAAY,GAAxB,EAA4B,iBAAgB,GAA5C,EAAgD,YAAW,GAA3D,EAA+D,YAAW,GAA1E,EAA8E,cAAa,GAA3F,EAA+F,YAAW,GAA1G,EAA8G,gBAAe,GAA7H,EAAiI,cAAa,GAA9I,EAAkJ,aAAY,GAA9J,EAAkK,kBAAiB,GAAnL,EAAuL,SAAQ,GAA/L,EAAmM,cAAa,GAAhN,EAAoN,mBAAkB,GAAtO,EAA0O,sBAAqB,GAA/P,EAAmQ,sBAAqB,GAAxR,EAA4R,4BAA2B,GAAvT,EAA2T,aAAY,GAAvU,EAA2U,mBAAkB,GAA7V,EAAiW,oBAAmB,GAApX,EAAwX,oBAAmB,GAA3Y,EAA+Y,sBAAqB,GAApa,EAAwa,eAAc,GAAtb,EAA0b,qBAAoB,GAA9c,EAAkd,kBAAiB,GAAne,EAAue,oBAAmB,GAA1f,EAA8f,aAAY,GAA1gB,EAA8gB,kBAAiB,GAA/hB,EAAmiB,sBAAqB,GAAxjB,EAA4jB,qBAAoB,GAAhlB,EAAolB,qBAAoB,GAAxmB,EAA4mB,2BAA0B,GAAtoB,EAA0oB,iBAAgB,GAA1pB,EAA8pB,sBAAqB,GAAnrB,EAAurB,2BAA0B,GAAjtB,EAAqtB,cAAa,EAAluB,EAAquB,cAAa,EAAlvB,EAAqvB,eAAc,GAAnwB,EAAuwB,wBAAuB,EAA9xB,EAAiyB,gBAAe,EAAhzB,EAAmzB,qBAAoB,EAAv0B,EAA00B,qBAAoB,EAA91B,EAAi2B,sBAAqB,EAAt3B,EAAy3B,YAAW,EAAp4B,EAAu4B,aAAY,EAAn5B,EAAs5B,YAAW,EAAj6B,EAAo6B,cAAa,EAAj7B,EAAo7B,gBAAe,EAAn8B,EAAs8B,YAAW,EAAj9B,EAAo9B,cAAa,EAAj+B,EAAo+B,YAAW,EAA/+B,EAAk/B,iBAAgB,EAAlgC,EAAqgC,QAAO,EAA5gC,EAA+gC,oBAAmB,EAAliC,EAAqiC,kBAAiB,EAAtjC,EAAyjC,mBAAkB,EAA3kC,EAA8kC,mBAAkB,EAAhmC,EAAmmC,oBAAmB,EAAtnC,EAAynC,oBAAmB,EAA5oC,EAA+oC,cAAa,EAA5pC,EAA+pC,YAAW,EAA1qC,EAA6qC,UAAS,GAAtrC,EAA0rC,uBAAsB,GAAhtC,EAAotC,cAAa,EAAjuC,EAAouC,eAAc,EAAlvC,EAAqvC,eAAc,EAAnwC,EAAswC,eAAc,EAApxC,EAAuxC,cAAa,EAApyC,EAAuyC,aAAY,EAAnzC,EAAszC,cAAa,EAAn0C,EAAs0C,mBAAkB,EAAx1C,EAA21C,mBAAkB,EAA72C,EAAg3C,mBAAkB,EAAl4C,EAAq4C,WAAU,EAA/4C,EAAk5C,cAAa,EAA/5C,EAAk6C,eAAc,EAAh7C,EAAn7P,EAAu2S,WAAU,EAAC,cAAa,EAAd,EAAiB,wBAAuB,EAAxC,EAA2C,gBAAe,EAA1D,EAA6D,qBAAoB,EAAjF,EAAoF,qBAAoB,EAAxG,EAA2G,sBAAqB,EAAhI,EAAmI,aAAY,EAA/I,EAAkJ,YAAW,EAA7J,EAAgK,cAAa,EAA7K,EAAgL,gBAAe,EAA/L,EAAkM,YAAW,EAA7M,EAAgN,cAAa,EAA7N,EAAgO,YAAW,EAA3O,EAA8O,iBAAgB,EAA9P,EAAiQ,QAAO,EAAxQ,EAA2Q,oBAAmB,EAA9R,EAAiS,kBAAiB,EAAlT,EAAqT,mBAAkB,EAAvU,EAA0U,mBAAkB,EAA5V,EAA+V,oBAAmB,EAAlX,EAAqX,oBAAmB,EAAxY,EAA2Y,cAAa,EAAxZ,EAA2Z,YAAW,EAAta,EAAya,uBAAsB,EAA/b,EAAkc,sBAAqB,EAAvd,EAA0d,sBAAqB,EAA/e,EAAkf,uBAAsB,EAAxgB,EAAj3S,EAA63T,UAAS,EAAC,QAAO,EAAR,EAAW,aAAY,EAAvB,EAA0B,iBAAgB,EAA1C,EAA6C,YAAW,EAAxD,EAA2D,YAAW,EAAtE,EAAyE,cAAa,EAAtF,EAAyF,YAAW,EAApG,EAAuG,gBAAe,EAAtH,EAAyH,cAAa,EAAtI,EAAyI,aAAY,EAArJ,EAAwJ,kBAAiB,EAAzK,EAA4K,SAAQ,EAApL,EAAuL,cAAa,EAApM,EAAuM,mBAAkB,EAAzN,EAA4N,sBAAqB,EAAjP,EAAoP,sBAAqB,EAAzQ,EAA4Q,4BAA2B,EAAvS,EAA0S,aAAY,EAAtT,EAAyT,mBAAkB,EAA3U,EAA8U,oBAAmB,EAAjW,EAAoW,oBAAmB,EAAvX,EAA0X,sBAAqB,EAA/Y,EAAkZ,eAAc,EAAha,EAAma,qBAAoB,EAAvb,EAA0b,kBAAiB,EAA3c,EAA8c,oBAAmB,EAAje,EAAoe,aAAY,EAAhf,EAAmf,kBAAiB,EAApgB,EAAugB,sBAAqB,EAA5hB,EAA+hB,qBAAoB,EAAnjB,EAAsjB,qBAAoB,EAA1kB,EAA6kB,2BAA0B,EAAvmB,EAA0mB,iBAAgB,EAA1nB,EAA6nB,sBAAqB,EAAlpB,EAAqpB,2BAA0B,EAA/qB,EAAkrB,cAAa,EAA/rB,EAAksB,cAAa,EAA/sB,EAAktB,eAAc,EAAhuB,EAAmuB,wBAAuB,EAA1vB,EAA6vB,gBAAe,EAA5wB,EAA+wB,qBAAoB,EAAnyB,EAAsyB,qBAAoB,EAA1zB,EAA6zB,aAAY,EAAz0B,EAA40B,YAAW,EAAv1B,EAA01B,cAAa,EAAv2B,EAA02B,gBAAe,EAAz3B,EAA43B,YAAW,EAAv4B,EAA04B,cAAa,EAAv5B,EAA05B,YAAW,EAAr6B,EAAw6B,iBAAgB,EAAx7B,EAA27B,QAAO,EAAl8B,EAAq8B,oBAAmB,EAAx9B,EAA29B,kBAAiB,EAA5+B,EAA++B,mBAAkB,EAAjgC,EAAogC,mBAAkB,EAAthC,EAAyhC,oBAAmB,EAA5iC,EAA+iC,oBAAmB,EAAlkC,EAAqkC,cAAa,EAAllC,EAAqlC,YAAW,EAAhmC,EAAmmC,kBAAiB,EAApnC,EAAunC,UAAS,EAAhoC,EAAmoC,WAAU,EAA7oC,EAAgpC,YAAW,EAA3pC,EAA8pC,YAAW,EAAzqC,EAA4qC,eAAc,EAA1rC,EAA6rC,cAAa,EAA1sC,EAA6sC,eAAc,EAA3tC,EAA8tC,kBAAiB,EAA/uC,EAAkvC,uBAAsB,EAAxwC,EAA2wC,eAAc,EAAzxC,EAA4xC,cAAa,EAAzyC,EAA4yC,aAAY,EAAxzC,EAA2zC,cAAa,EAAx0C,EAA20C,mBAAkB,EAA71C,EAAg2C,mBAAkB,EAAl3C,EAAq3C,mBAAkB,EAAv4C,EAA04C,WAAU,EAAp5C,EAAu5C,cAAa,EAAp6C,EAAu6C,eAAc,EAAr7C,EAAt4T,EAA+zW,WAAU,EAAz0W,EAAf;;ECCe,SAASC,gBAAT,CACbC,aADa,EAEbnC,KAFa,EAGbsB,cAHa,EAIK;AAClB,EAAA,MAAIA,cAAJ,EAAoB;AAClB,EAAA,WAAO,CAACa,aAAD,EAAgBnC,KAAhB,CAAP;AACD,EAAA;AACD,EAAA,SAAOmC,aAAP;AACD,EAAA;;ECLc,SAASC,IAAT,CACb1B,QADa,EAEbV,KAFa,EAGbW,KAHa,QAKO;AAAA,EAAA,MADlBxB,WACkB,QADlBA,WACkB;AAAA,EAAA,MADLC,cACK,QADLA,cACK;AAAA,EAAA,MADWF,SACX,QADWA,SACX;AAAA,EAAA,MADsBoC,cACtB,QADsBA,cACtB;;AACpB,EAAA,MACE,OAAOtB,KAAP,KAAiB,QAAjB,IACEA,MAAMC,OAAN,CAAc,OAAd,IAAyB,CAAC,CAD5B,KAEGd,gBAAgB,SAAhB,IAA6BC,iBAAiB,EAA9C,IACCD,gBAAgB,QAAhB,IAA4BC,iBAAiB,EAD9C,IAECD,gBAAgB,QAAhB,IAA4BC,iBAAiB,GAF9C,IAGCD,gBAAgB,SAAhB,IAA6BC,iBAAiB,CALlD,CADF,EAOE;AACA,EAAA,WAAO8C,iBAAiBlC,MAAMzE,OAAN,CAAc,SAAd,EAA4B2D,SAA5B,WAAjB,EAAgEc,KAAhE,EAAuEsB,cAAvE,CAAP;AACD,EAAA;AACF,EAAA;;EChBc,SAASe,SAAT,CACb3B,QADa,EAEbV,KAFa,EAGbW,KAHa,QAKO;AAAA,EAAA,MADlBxB,WACkB,QADlBA,WACkB;AAAA,EAAA,MADLC,cACK,QADLA,cACK;AAAA,EAAA,MADWF,SACX,QADWA,SACX;AAAA,EAAA,MADsBoC,cACtB,QADsBA,cACtB;;AACpB,EAAA,MACE,OAAOtB,KAAP,KAAiB,QAAjB,IACEA,MAAMC,OAAN,CAAc,aAAd,IAA+B,CAAC,CADlC,KAEGd,gBAAgB,QAAhB,IACCA,gBAAgB,OADjB,IAECA,gBAAgB,SAFjB,IAGC,CAACA,gBAAgB,SAAhB,IAA6BA,gBAAgB,QAA9C,KAA2DC,iBAAiB,EALhF,CADF,EAOE;AACA,EAAA,WAAO8C,iBACLlC,MAAMzE,OAAN,CAAc,eAAd,EAAkC2D,SAAlC,iBADK,EAELc,KAFK,EAGLsB,cAHK,CAAP;AAKD,EAAA;AACF,EAAA;;ECpBc,SAASgB,MAAT,CACb5B,QADa,EAEbV,KAFa,EAGbW,KAHa,QAKO;AAAA,EAAA,MADlBxB,WACkB,QADlBA,WACkB;AAAA,EAAA,MADLC,cACK,QADLA,cACK;AAAA,EAAA,MADWF,SACX,QADWA,SACX;AAAA,EAAA,MADsBoC,cACtB,QADsBA,cACtB;;AACpB,EAAA,MACE,OAAOtB,KAAP,KAAiB,QAAjB,IACEA,MAAMC,OAAN,CAAc,SAAd,IAA2B,CAAC,CAD9B,KAEGd,gBAAgB,SAAhB,IAA6BA,gBAAgB,QAAhB,IAA4BC,iBAAiB,GAF7E,CADF,EAIE;AACA,EAAA,WAAO8C,iBACLlC,MAAMzE,OAAN,CAAc,WAAd,EAA8B2D,SAA9B,aADK,EAELc,KAFK,EAGLsB,cAHK,CAAP;AAKD,EAAA;AACF,EAAA;;ECjBD,IAAMnB,SAAS;AACboC,EAAAA,QAAM,IADO;AAEb,EAAA,iBAAe;AAFF,EAAA,CAAf;;AAKA,EAAe,SAASA,IAAT,CACb7B,QADa,EAEbV,KAFa,EAGbW,KAHa,QAKO;AAAA,EAAA,MADlBxB,WACkB,QADlBA,WACkB;AAAA,EAAA,MADLC,cACK,QADLA,cACK;AAAA,EAAA,MADWF,SACX,QADWA,SACX;AAAA,EAAA,MADsBoC,cACtB,QADsBA,cACtB;;AACpB,EAAA,MACEZ,aAAa,SAAb,IACEP,OAAOH,KAAP,CADF,KAEGb,gBAAgB,QAAhB,IAA6BC,iBAAiB,EAAjB,IAAuBA,iBAAiB,EAArE,IACC,CAACD,gBAAgB,QAAhB,IAA4BA,gBAAgB,SAA7C,KACGC,iBAAiB,CAAjB,IAAsBA,iBAAiB,CAF3C,IAGCD,gBAAgB,OAAhB,KAA4BC,mBAAmB,EAAnB,IAAyBA,mBAAmB,EAAxE,CALJ,CADF,EAOE;AACA,EAAA,WAAO8C,iBAAiBhD,YAAYc,KAA7B,EAAoCA,KAApC,EAA2CsB,cAA3C,CAAP;AACD,EAAA;AACF,EAAA;;ECrBD,IAAMkB,oBAAoB;AACxB,EAAA,kBAAgB,YADQ;AAExB,EAAA,mBAAiB,SAFO;AAGxB,EAAA,gBAAc,OAHU;AAIxB,EAAA,cAAY,KAJY;AAKxBD,EAAAA,QAAM,SALkB;AAMxB,EAAA,iBAAe;AANS,EAAA,CAA1B;AAQA,EAAA,IAAME,mBAAmB;AACvBC,EAAAA,gBAAc,gBADS;AAEvBC,EAAAA,aAAW,iBAFY;AAGvBC,EAAAA,cAAY,aAHW;AAIvBC,EAAAA,kBAAgB,YAJO;AAKvBC,EAAAA,SAAO,aALgB;AAMvBC,EAAAA,YAAU,gBANa;AAOvBC,EAAAA,cAAY,gBAPW;AAQvBC,EAAAA,aAAW;AARY,EAAA,CAAzB;;AAWA,EAAe,SAASC,SAAT,CACbxC,QADa,EAEbV,KAFa,EAGbW,KAHa,QAKO;AAAA,EAAA,MADlBxB,WACkB,QADlBA,WACkB;AAAA,EAAA,MADLC,cACK,QADLA,cACK;AAAA,EAAA,MADWF,SACX,QADWA,SACX;AAAA,EAAA,MADsBoC,cACtB,QADsBA,cACtB;AAAA,EAAA,MADsCQ,cACtC,QADsCA,cACtC;;AACpB,EAAA,MACE,CAACW,iBAAiB/B,QAAjB,KACCA,aAAa,SAAb,IACE,OAAOV,KAAP,KAAiB,QADnB,IAEEA,MAAMC,OAAN,CAAc,MAAd,IAAwB,CAAC,CAH7B,KAIG,CAACd,gBAAgB,QAAhB,IAA4BA,gBAAgB,IAA7C,KAAsDC,mBAAmB,EAL9E,EAME;AACA,EAAA,WAAO0C,eAAepB,QAAf,CAAP;;AAEA,EAAA,QAAI,CAACY,cAAD,IAAmB,CAACtE,MAAMoD,OAAN,CAAcO,MAAMD,QAAN,CAAd,CAAxB,EAAwD;AACtD,EAAA,aAAOC,MAAMD,QAAN,CAAP;AACD,EAAA;AACD,EAAA,QAAIA,aAAa,SAAb,IAA0B8B,kBAAkBxC,KAAlB,CAA9B,EAAwD;AACtD,EAAA,aAAOkC,iBACLhD,YAAYsD,kBAAkBxC,KAAlB,CADP,EAELA,KAFK,EAGLsB,cAHK,CAAP;AAKD,EAAA;AACD,EAAA,QAAImB,iBAAiB/B,QAAjB,CAAJ,EAAgC;AAC9BC,EAAAA,YAAM8B,iBAAiB/B,QAAjB,CAAN,IAAoC8B,kBAAkBxC,KAAlB,KAA4BA,KAAhE;AACD,EAAA;AACF,EAAA;AACF,EAAA;;EChDD,IAAMwC,sBAAoB;AACxB,EAAA,kBAAgB,SADQ;AAExB,EAAA,mBAAiB,SAFO;AAGxB,EAAA,gBAAc,OAHU;AAIxB,EAAA,cAAY,KAJY;AAKxB,EAAA,kBAAgB,UALQ;AAMxBW,EAAAA,QAAM,UANkB;AAOxBZ,EAAAA,QAAM,KAPkB;AAQxB,EAAA,iBAAe;AARS,EAAA,CAA1B;;AAWA,EAAA,IAAME,qBAAmB;AACvBG,EAAAA,cAAY,gBADW;AAEvBC,EAAAA,kBAAgB,eAFO;AAGvBO,EAAAA,YAAU;AAHa,EAAA,CAAzB;;AAMA,EAAA,IAAMC,aAAa,CACjB,cADiB,EAEjB,WAFiB,EAGjB,OAHiB,EAIjB,UAJiB,EAKjB,YALiB,EAMjB,WANiB,EAOjB,eAPiB,CAAnB;AASA,EAAA,IAAMC,aAAa/C,OAAOqB,IAAP,CAAYa,kBAAZ,EAA8Bc,MAA9B,CAAqCF,UAArC,CAAnB;;AAEA,EAAe,SAASG,UAAT,CACb9C,QADa,EAEbV,KAFa,EAGbW,KAHa,QAKO;AAAA,EAAA,MADlBxB,WACkB,QADlBA,WACkB;AAAA,EAAA,MADLC,cACK,QADLA,cACK;AAAA,EAAA,MADWF,SACX,QADWA,SACX;AAAA,EAAA,MADsBoC,cACtB,QADsBA,cACtB;AAAA,EAAA,MADsCQ,cACtC,QADsCA,cACtC;;AACpB,EAAA,MACE,CAACwB,WAAWrD,OAAX,CAAmBS,QAAnB,IAA+B,CAAC,CAAhC,IACCA,aAAa,SAAb,IACE,OAAOV,KAAP,KAAiB,QADnB,IAEEA,MAAMC,OAAN,CAAc,MAAd,IAAwB,CAAC,CAH7B,MAIGd,gBAAgB,SAAhB,IAA6BC,iBAAiB,EAA9C,IACCD,gBAAgB,QAAhB,IAA4BC,iBAAiB,EAD9C,IAEC,CAACD,gBAAgB,QAAhB,IAA4BA,gBAAgB,SAA7C,KACEC,kBAAkB,GAHrB,IAICD,gBAAgB,SAAhB,IAA6BC,iBAAiB,GAJ/C,IAKCD,gBAAgB,QATpB,CADF,EAWE;AACA,EAAA,WAAO2C,eAAepB,QAAf,CAAP;;AAEA,EAAA,QAAI,CAACY,cAAD,IAAmB,CAACtE,MAAMoD,OAAN,CAAcO,MAAMD,QAAN,CAAd,CAAxB,EAAwD;AACtD,EAAA,aAAOC,MAAMD,QAAN,CAAP;AACD,EAAA;AACD,EAAA,QAAIA,aAAa,eAAb,IAAgC,OAAOV,KAAP,KAAiB,QAArD,EAA+D;AAC7D,EAAA,UAAIA,MAAMC,OAAN,CAAc,QAAd,IAA0B,CAAC,CAA/B,EAAkC;AAChCU,EAAAA,cAAM8C,eAAN,GAAwB,UAAxB;AACD,EAAA,OAFD,MAEO;AACL9C,EAAAA,cAAM8C,eAAN,GAAwB,YAAxB;AACD,EAAA;AACD,EAAA,UAAIzD,MAAMC,OAAN,CAAc,SAAd,IAA2B,CAAC,CAAhC,EAAmC;AACjCU,EAAAA,cAAM+C,kBAAN,GAA2B,SAA3B;AACD,EAAA,OAFD,MAEO;AACL/C,EAAAA,cAAM+C,kBAAN,GAA2B,QAA3B;AACD,EAAA;AACF,EAAA;AACD,EAAA,QAAIhD,aAAa,SAAb,IAA0B8B,oBAAkBxC,KAAlB,CAA9B,EAAwD;AACtD,EAAA,aAAOkC,iBACLhD,YAAYsD,oBAAkBxC,KAAlB,CADP,EAELA,KAFK,EAGLsB,cAHK,CAAP;AAKD,EAAA;AACD,EAAA,QAAImB,mBAAiB/B,QAAjB,CAAJ,EAAgC;AAC9BC,EAAAA,YAAM8B,mBAAiB/B,QAAjB,CAAN,IAAoC8B,oBAAkBxC,KAAlB,KAA4BA,KAAhE;AACD,EAAA;AACF,EAAA;AACF,EAAA;;EC1ED,IAAMG,WAAS;AACbwD,EAAAA,QAAM,IADO;AAEbC,EAAAA,YAAU;AAFG,EAAA,CAAf;;AAKA,EAAe,SAASC,UAAT,CACbnD,QADa,EAEbV,KAFa,EAGbW,KAHa,QAKO;AAAA,EAAA,MADlBxB,WACkB,QADlBA,WACkB;AAAA,EAAA,MADLD,SACK,QADLA,SACK;AAAA,EAAA,MADMoC,cACN,QADMA,cACN;;AACpB,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA,MACEZ,aAAa,QAAb,IACEP,SAAOH,KAAP,CADF,KAEGb,gBAAgB,SAAhB,IACCA,gBAAgB,QADjB,IAECA,gBAAgB,QAFjB,IAGCA,gBAAgB,OALpB,CADF,EAOE;AACA,EAAA,WAAO+C,iBAAiBhD,YAAYc,KAA7B,EAAoCA,KAApC,EAA2CsB,cAA3C,CAAP;AACD,EAAA;AACF,EAAA;;ECxBD,IAAMnB,WAAS,qFAAf;;AAEA,EAAe,SAAS2D,QAAT,CACbpD,QADa,EAEbV,KAFa,EAGbW,KAHa,QAKO;AAAA,EAAA,MADlBxB,WACkB,QADlBA,WACkB;AAAA,EAAA,MADLC,cACK,QADLA,cACK;AAAA,EAAA,MADWF,SACX,QADWA,SACX;AAAA,EAAA,MADsBoC,cACtB,QADsBA,cACtB;;AACpB,EAAA,MACE,OAAOtB,KAAP,KAAiB,QAAjB,IACEA,MAAM9G,KAAN,CAAYiH,QAAZ,MAAwB,IAD1B,KAEGhB,gBAAgB,SAAhB,IAA6BC,iBAAiB,EAA9C,IACCD,gBAAgB,QAAhB,IAA4BC,iBAAiB,EAD9C,IAEC,CAACD,gBAAgB,QAAhB,IAA4BA,gBAAgB,SAA7C,KAA2DC,iBAAiB,CAF7E,IAGC,CAACD,gBAAgB,OAAhB,IAA2BA,gBAAgB,SAA5C,KAA0DC,iBAAiB,IAH5E,IAICD,gBAAgB,SAAhB,IAA6BC,iBAAiB,GAJ/C,IAKCD,gBAAgB,QAPpB,CADF,EASE;AACA,EAAA,WAAO+C,iBAAiBhD,YAAYc,KAA7B,EAAoCA,KAApC,EAA2CsB,cAA3C,CAAP;AACD,EAAA;AACF,EAAA;;ECpBc,SAASyC,QAAT,CACbrD,QADa,EAEbV,KAFa,EAGbW,KAHa,QAKO;AAAA,EAAA,MADlBxB,WACkB,QADlBA,WACkB;AAAA,EAAA,MADLD,SACK,QADLA,SACK;AAAA,EAAA,MADMoC,cACN,QADMA,cACN;;AACpB,EAAA,MACE,OAAOtB,KAAP,KAAiB,QAAjB,IACEA,MAAMC,OAAN,CAAc,YAAd,IAA8B,CAAC,CADjC,KAEGd,gBAAgB,QAAhB,IACCA,gBAAgB,OADjB,IAECA,gBAAgB,SAFjB,IAGCA,gBAAgB,QAHjB,IAICA,gBAAgB,SAJjB,IAKCA,gBAAgB,QAPpB,CADF,EASE;AACA,EAAA,WAAO+C,iBACLlC,MAAMzE,OAAN,CAAc,cAAd,EAAiC2D,SAAjC,gBADK,EAELc,KAFK,EAGLsB,cAHK,CAAP;AAKD,EAAA;AACF,EAAA;;ECtBc,SAAS0C,QAAT,CACbtD,QADa,EAEbV,KAFa,QAIO;AAAA,EAAA,MADlBb,WACkB,QADlBA,WACkB;AAAA,EAAA,MADLD,SACK,QADLA,SACK;AAAA,EAAA,MADMoC,cACN,QADMA,cACN;;AACpB,EAAA,MACEZ,aAAa,UAAb,IACEV,UAAU,QADZ,KAEGb,gBAAgB,QAAhB,IAA4BA,gBAAgB,SAF/C,CADF,EAIE;AACA,EAAA,WAAO+C,iBAAiBhD,YAAYc,KAA7B,EAAoCA,KAApC,EAA2CsB,cAA3C,CAAP;AACD,EAAA;AACF,EAAA;;ECZD,IAAMgC,eAAa;AACjBW,EAAAA,aAAW,IADM;AAEjBC,EAAAA,YAAU,IAFO;AAGjBC,EAAAA,SAAO,IAHU;AAIjBC,EAAAA,UAAQ,IAJS;AAKjBC,EAAAA,eAAa,IALI;AAMjBC,EAAAA,YAAU,IANO;AAOjBC,EAAAA,aAAW;AAPM,EAAA,CAAnB;AASA,EAAA,IAAMpE,WAAS;AACb,EAAA,iBAAe,IADF;AAEb,EAAA,iBAAe,IAFF;AAGb,EAAA,oBAAkB,IAHL;AAIb,EAAA,iBAAe,IAJF;AAKb,EAAA,oBAAkB;AALL,EAAA,CAAf;;AAQA,EAAe,SAASqE,MAAT,CACb9D,QADa,EAEbV,KAFa,EAGbW,KAHa,QAKO;AAAA,EAAA,MADlBzB,SACkB,QADlBA,SACkB;AAAA,EAAA,MADPoC,cACO,QADPA,cACO;;AACpB,EAAA;AACA,EAAA;AACA,EAAA,MAAIgC,aAAW5C,QAAX,KAAwBP,SAAOH,KAAP,CAA5B,EAA2C;AACzC,EAAA,WAAOkC,iBAAiBhD,YAAYc,KAA7B,EAAoCA,KAApC,EAA2CsB,cAA3C,CAAP;AACD,EAAA;AACF,EAAA;;;ACjCD,EAAA;;AAEA,EAAA,IAAImD,mBAAmB,QAAvB;AACA,EAAA,IAAIC,YAAY,MAAhB;AACA,EAAA,IAAIC,QAAQ,EAAZ;;AAEA,EAAA,SAASC,kBAAT,CAA4BC,MAA5B,EAAoC;WACzBA,UAAUF,KAAV,GACLA,MAAME,MAAN,CADK,GAELF,MAAME,MAAN,IAAgBA,OACftJ,OADe,CACPkJ,gBADO,EACW,KADX,EAEfnL,WAFe,GAGfiC,OAHe,CAGPmJ,SAHO,EAGI,MAHJ,CAFlB;;;AAQJlM,EAAAA,OAAOC,OAAP,GAAiBmM,kBAAjB;;;;;ECXA,IAAMtB,eAAa;AACjBwB,EAAAA,cAAY,IADK;AAEjBC,EAAAA,sBAAoB,IAFH;AAGjBC,EAAAA,oBAAkB,IAHD;AAIjBC,EAAAA,4BAA0B,IAJT;AAKjBC,EAAAA,iBAAe,IALE;AAMjBC,EAAAA,yBAAuB;AANN,EAAA,CAAnB;;AASA,EAAA,IAAIC,gCAAJ;AACA,EAAA;AACA,EAAe,SAASN,UAAT,CACbpE,QADa,EAEbV,KAFa,EAGbW,KAHa,QAKO;AAAA,EAAA,MADlBzB,SACkB,QADlBA,SACkB;AAAA,EAAA,MADPoC,cACO,QADPA,cACO;AAAA,EAAA,MADSQ,cACT,QADSA,cACT;;AACpB,EAAA,MAAI,OAAO9B,KAAP,KAAiB,QAAjB,IAA6BsD,aAAW5C,QAAX,CAAjC,EAAuD;AAAA,EAAA;AACrD,EAAA;AACA,EAAA,UAAI,CAAC0E,uBAAL,EAA8B;AAC5BA,EAAAA,kCAA0B7E,OACvBqB,IADuB,CAClBE,cADkB,EAEvBjF,GAFuB,CAEnB;AAAA,EAAA,iBAAQ+H,mBAAmBS,IAAnB,CAAR;AAAA,EAAA,SAFmB,CAA1B;AAGD,EAAA;;AAED,EAAA;AACA,EAAA,UAAMC,iBAAiBtF,MAAMpE,KAAN,CAAY,+BAAZ,CAAvB;;AAEAwJ,EAAAA,8BAAwBG,OAAxB,CAAgC,UAACF,IAAD,EAAU;AACxCC,EAAAA,uBAAeC,OAAf,CAAuB,UAACC,GAAD,EAAMC,KAAN,EAAgB;AACrC,EAAA,cAAID,IAAIvF,OAAJ,CAAYoF,IAAZ,IAAoB,CAAC,CAArB,IAA0BA,SAAS,OAAvC,EAAgD;AAC9CC,EAAAA,2BAAeG,KAAf,IAAwBD,IAAIjK,OAAJ,CAAY8J,IAAZ,EAAkBnG,YAAYmG,IAA9B,KACrB/D,uBAAqBkE,GAArB,GAA6B,EADR,CAAxB;AAED,EAAA;AACF,EAAA,SALD;AAMD,EAAA,OAPD;;AASA,EAAA;AAAA,EAAA,WAAOF,eAAe3H,IAAf,CAAoB,GAApB;AAAP,EAAA;AApBqD,EAAA;;AAAA,EAAA;AAqBtD,EAAA;AACF,EAAA;;ECtCD,IAAMwC,WAAS;AACb,EAAA,aAAW,IADE;AAEb,EAAA,cAAY;AAFC,EAAA,CAAf;;AAKA,EAAe,SAASuF,UAAT,CACbhF,QADa,EAEbV,KAFa,EAGbW,KAHa,QAKO;AAAA,EAAA,MADlBxB,WACkB,QADlBA,WACkB;AAAA,EAAA,MADLC,cACK,QADLA,cACK;AAAA,EAAA,MADWF,SACX,QADWA,SACX;AAAA,EAAA,MADsBoC,cACtB,QADsBA,cACtB;;AACpB,EAAA,MACEZ,aAAa,QAAb,IACEP,SAAOH,KAAP,CADF,KAEGb,gBAAgB,SAAhB,IAA6BC,iBAAiB,EAA9C,IACCD,gBAAgB,QAAhB,IAA4BC,iBAAiB,EAD9C,IAECD,gBAAgB,QAAhB,IAA4BC,iBAAiB,CAF9C,IAGCD,gBAAgB,OAAhB,IAA2BC,iBAAiB,EALhD,CADF,EAOE;AACA,EAAA,WAAO8C,iBAAiBhD,YAAYc,KAA7B,EAAoCA,KAApC,EAA2CsB,cAA3C,CAAP;AACD,EAAA;AACF,EAAA;;gBCZc,CACb0C,QADa,EAEb5B,IAFa,EAGb2B,QAHa,EAIb1B,SAJa,EAKbC,MALa,EAMbuB,UANa,EAOb6B,UAPa,EAQblB,MARa,EASbV,QATa,EAUbgB,UAVa,EAWb5B,SAXa,EAYbM,UAZa,EAabjB,IAba,CAAf;;ECXe,SAASoD,cAAT,CACbC,gBADa,EAEblF,QAFa,EAGbC,KAHa,EAIP;AACN,EAAA,MAAMkF,mBAAmBD,iBAAiBlF,QAAjB,CAAzB;;AAEA,EAAA,MAAImF,gBAAJ,EAAsB;AACpB,EAAA,SAAK,IAAInJ,IAAI,CAAR,EAAW2D,MAAMwF,iBAAiB1M,MAAvC,EAA+CuD,IAAI2D,GAAnD,EAAwD,EAAE3D,CAA1D,EAA6D;AAC3DiE,EAAAA,YAAMkF,iBAAiBnJ,CAAjB,IAAsB+C,iBAAiBiB,QAAjB,CAA5B,IAA0DC,MAAMD,QAAN,CAA1D;AACD,EAAA;AACF,EAAA;AACF,EAAA;;ECRc,SAASI,gBAAT,CACbC,iBADa,EAGb;AAAA,EAAA,MADAN,OACA,uEAD2B,EAC3B;;AACA,EAAA,WAASqF,SAAT,CAAmBnF,KAAnB,EAA0C;AACxC,EAAA,SAAK,IAAMD,QAAX,IAAuBC,KAAvB,EAA8B;AAC5B,EAAA,UAAMX,QAAQW,MAAMD,QAAN,CAAd;;AAEA,EAAA;AACA,EAAA,UAAIJ,SAASN,KAAT,CAAJ,EAAqB;AACnBW,EAAAA,cAAMD,QAAN,IAAkBoF,UAAU9F,KAAV,CAAlB;AACA,EAAA;AACD,EAAA,OAHD,MAGO,IAAIhD,MAAMoD,OAAN,CAAcJ,KAAd,CAAJ,EAA0B;AAC/B,EAAA,YAAMgC,gBAAgB,EAAtB;;AAEA,EAAA,aAAK,IAAItF,IAAI,CAAR,EAAW2D,MAAML,MAAM7G,MAA5B,EAAoCuD,IAAI2D,GAAxC,EAA6C,EAAE3D,CAA/C,EAAkD;AAChD,EAAA,cAAMmE,iBAAiBL,YACrBC,OADqB,EAErBC,QAFqB,EAGrBV,MAAMtD,CAAN,CAHqB,EAIrBiE,KAJqB,EAKrBI,iBALqB,CAAvB;AAOAb,EAAAA,2BAAiB8B,aAAjB,EAAgCnB,kBAAkBb,MAAMtD,CAAN,CAAlD;AACD,EAAA;;AAED,EAAA;AACA,EAAA;AACA,EAAA,YAAIsF,cAAc7I,MAAd,GAAuB,CAA3B,EAA8B;AAC5BwH,EAAAA,gBAAMD,QAAN,IAAkBsB,aAAlB;AACD,EAAA;AACF,EAAA,OAnBM,MAmBA;AACL,EAAA,YAAMnB,kBAAiBL,YACrBC,OADqB,EAErBC,QAFqB,EAGrBV,KAHqB,EAIrBW,KAJqB,EAKrBI,iBALqB,CAAvB;;AAQA,EAAA;AACA,EAAA;AACA,EAAA,YAAIF,eAAJ,EAAoB;AAClBF,EAAAA,gBAAMD,QAAN,IAAkBG,eAAlB;AACD,EAAA;;AAED8E,EAAAA,uBAAe5E,iBAAf,EAAkCL,QAAlC,EAA4CC,KAA5C;AACD,EAAA;AACF,EAAA;;AAED,EAAA,WAAOA,KAAP;AACD,EAAA;;AAED,EAAA,SAAOmF,SAAP;AACD,EAAA;;4BC7Dc,EAAC,cAAa,CAAC,QAAD,EAAU,KAAV,CAAd,EAA+B,cAAa,CAAC,QAAD,EAAU,KAAV,EAAgB,IAAhB,CAA5C,EAAkE,wBAAuB,CAAC,QAAD,CAAzF,EAAoG,gBAAe,CAAC,QAAD,CAAnH,EAA8H,qBAAoB,CAAC,QAAD,CAAlJ,EAA6J,qBAAoB,CAAC,QAAD,CAAjL,EAA4L,sBAAqB,CAAC,QAAD,CAAjN,EAA4N,YAAW,CAAC,QAAD,CAAvO,EAAkP,aAAY,CAAC,QAAD,CAA9P,EAAyQ,YAAW,CAAC,QAAD,CAApR,EAA+R,cAAa,CAAC,QAAD,CAA5S,EAAuT,gBAAe,CAAC,QAAD,CAAtU,EAAiV,YAAW,CAAC,QAAD,CAA5V,EAAuW,cAAa,CAAC,QAAD,CAApX,EAA+X,YAAW,CAAC,QAAD,CAA1Y,EAAqZ,iBAAgB,CAAC,QAAD,CAAra,EAAgb,QAAO,CAAC,QAAD,CAAvb,EAAkc,oBAAmB,CAAC,QAAD,CAArd,EAAge,kBAAiB,CAAC,QAAD,CAAjf,EAA4f,mBAAkB,CAAC,QAAD,CAA9gB,EAAyhB,mBAAkB,CAAC,QAAD,CAA3iB,EAAsjB,oBAAmB,CAAC,QAAD,CAAzkB,EAAolB,oBAAmB,CAAC,QAAD,CAAvmB,EAAknB,cAAa,CAAC,QAAD,CAA/nB,EAA0oB,YAAW,CAAC,QAAD,CAArpB,EAAgqB,uBAAsB,CAAC,QAAD,EAAU,KAAV,CAAtrB,EAAusB,sBAAqB,CAAC,QAAD,EAAU,KAAV,CAA5tB,EAA6uB,sBAAqB,CAAC,QAAD,EAAU,KAAV,CAAlwB,EAAmxB,uBAAsB,CAAC,QAAD,EAAU,KAAV,CAAzyB,EAA0zB,UAAS,CAAC,QAAD,CAAn0B,EAA80B,uBAAsB,CAAC,QAAD,EAAU,KAAV,CAAp2B,EAAq3B,cAAa,CAAC,QAAD,EAAU,KAAV,EAAgB,IAAhB,CAAl4B,EAAw5B,eAAc,CAAC,QAAD,EAAU,KAAV,EAAgB,IAAhB,CAAt6B,EAA47B,eAAc,CAAC,QAAD,EAAU,KAAV,EAAgB,IAAhB,CAA18B,EAAg+B,eAAc,CAAC,QAAD,EAAU,KAAV,CAA9+B,EAA+/B,cAAa,CAAC,QAAD,EAAU,KAAV,CAA5gC,EAA6hC,aAAY,CAAC,QAAD,EAAU,KAAV,CAAziC,EAA0jC,cAAa,CAAC,QAAD,EAAU,KAAV,CAAvkC,EAAwlC,mBAAkB,CAAC,QAAD,EAAU,KAAV,CAA1mC,EAA2nC,mBAAkB,CAAC,QAAD,EAAU,KAAV,CAA7oC,EAA8pC,mBAAkB,CAAC,QAAD,EAAU,KAAV,CAAhrC,EAAisC,WAAU,CAAC,QAAD,EAAU,KAAV,CAA3sC,EAA4tC,cAAa,CAAC,QAAD,EAAU,KAAV,CAAzuC,EAA0vC,eAAc,CAAC,QAAD,EAAU,KAAV,CAAxwC,EAAyxC,QAAO,CAAC,QAAD,EAAU,KAAV,CAAhyC,EAAizC,aAAY,CAAC,QAAD,CAA7zC,EAAw0C,iBAAgB,CAAC,QAAD,CAAx1C,EAAm2C,YAAW,CAAC,QAAD,CAA92C,EAAy3C,YAAW,CAAC,QAAD,EAAU,KAAV,CAAp4C,EAAq5C,cAAa,CAAC,QAAD,CAAl6C,EAA66C,YAAW,CAAC,QAAD,EAAU,KAAV,CAAx7C,EAAy8C,gBAAe,CAAC,QAAD,CAAx9C,EAAm+C,cAAa,CAAC,QAAD,CAAh/C,EAA2/C,aAAY,CAAC,QAAD,CAAvgD,EAAkhD,kBAAiB,CAAC,QAAD,CAAniD,EAA8iD,SAAQ,CAAC,QAAD,CAAtjD,EAAikD,aAAY,CAAC,QAAD,EAAU,KAAV,CAA7kD,EAA8lD,mBAAkB,CAAC,QAAD,EAAU,KAAV,CAAhnD,EAAioD,oBAAmB,CAAC,QAAD,EAAU,KAAV,CAAppD,EAAqqD,oBAAmB,CAAC,QAAD,EAAU,KAAV,CAAxrD,EAAysD,sBAAqB,CAAC,QAAD,EAAU,KAAV,CAA9tD,EAA+uD,eAAc,CAAC,QAAD,EAAU,KAAV,CAA7vD,EAA8wD,qBAAoB,CAAC,QAAD,EAAU,KAAV,CAAlyD,EAAmzD,kBAAiB,CAAC,QAAD,EAAU,KAAV,CAAp0D,EAAq1D,oBAAmB,CAAC,QAAD,EAAU,KAAV,CAAx2D,EAAy3D,aAAY,CAAC,QAAD,EAAU,KAAV,CAAr4D,EAAs5D,kBAAiB,CAAC,QAAD,EAAU,KAAV,CAAv6D,EAAw7D,sBAAqB,CAAC,QAAD,EAAU,KAAV,CAA78D,EAA89D,qBAAoB,CAAC,QAAD,EAAU,KAAV,CAAl/D,EAAmgE,qBAAoB,CAAC,QAAD,EAAU,KAAV,CAAvhE,EAAwiE,2BAA0B,CAAC,QAAD,EAAU,KAAV,CAAlkE,EAAmlE,iBAAgB,CAAC,QAAD,EAAU,KAAV,CAAnmE,EAAonE,sBAAqB,CAAC,QAAD,EAAU,KAAV,CAAzoE,EAA0pE,2BAA0B,CAAC,QAAD,EAAU,KAAV,CAAprE,EAAqsE,kBAAiB,CAAC,QAAD,CAAttE,EAAiuE,eAAc,CAAC,QAAD,CAA/uE,EAA0vE,kBAAiB,CAAC,QAAD,EAAU,IAAV,CAA3wE,EAA2xE,qBAAoB,CAAC,QAAD,EAAU,IAAV,CAA/yE,EAA+zE,qBAAoB,CAAC,QAAD,EAAU,IAAV,CAAn1E,EAAm2E,yBAAwB,CAAC,QAAD,EAAU,IAAV,CAA33E,EAA24E,wBAAuB,CAAC,QAAD,EAAU,IAAV,CAAl6E,EAAk7E,uBAAsB,CAAC,QAAD,CAAx8E,EAAm9E,oBAAmB,CAAC,QAAD,CAAt+E,EAAi/E,qBAAoB,CAAC,QAAD,CAArgF,EAAghF,WAAU,CAAC,QAAD,EAAU,KAAV,EAAgB,IAAhB,CAA1hF,EAAgjF,YAAW,CAAC,QAAD,EAAU,IAAV,CAA3jF,EAA2kF,YAAW,CAAC,QAAD,EAAU,IAAV,CAAtlF,EAAsmF,kBAAiB,CAAC,QAAD,EAAU,IAAV,CAAvnF,EAAuoF,gBAAe,CAAC,KAAD,CAAtpF,EAA8pF,eAAc,CAAC,KAAD,CAA5qF,EAAorF,qBAAoB,CAAC,KAAD,CAAxsF,EAAgtF,qBAAoB,CAAC,KAAD,CAApuF,EAA4uF,oBAAmB,CAAC,KAAD,CAA/vF,EAAuwF,qBAAoB,CAAC,KAAD,CAA3xF,EAAmyF,oBAAmB,CAAC,KAAD,CAAtzF,EAA8zF,mBAAkB,CAAC,KAAD,EAAO,QAAP,CAAh1F,EAAi2F,sBAAqB,CAAC,KAAD,EAAO,QAAP,CAAt3F,EAAu4F,sBAAqB,CAAC,KAAD,EAAO,QAAP,CAA55F,EAA66F,4BAA2B,CAAC,KAAD,EAAO,QAAP,CAAx8F,EAAy9F,aAAY,CAAC,KAAD,CAAr+F,EAA6+F,iBAAgB,CAAC,KAAD,CAA7/F,EAAqgG,WAAU,CAAC,KAAD,CAA/gG,EAAuhG,UAAS,CAAC,KAAD,CAAhiG,EAAwiG,kBAAiB,CAAC,KAAD,CAAzjG,EAAikG,oBAAmB,CAAC,KAAD,CAAplG,EAA4lG,kBAAiB,CAAC,KAAD,CAA7mG,EAAqnG,aAAY,CAAC,KAAD,CAAjoG,EAAyoG,YAAW,CAAC,IAAD,CAAppG,EAA2pG,eAAc,CAAC,IAAD,CAAzqG,EAAgrG,cAAa,CAAC,IAAD,CAA7rG,EAAosG,uBAAsB,CAAC,IAAD,CAA1tG,EAAiuG,oBAAmB,CAAC,IAAD,CAApvG,EAA2vG,qBAAoB,CAAC,IAAD,CAA/wG,EAAsxG,gBAAe,CAAC,IAAD,CAAryG,EAA4yG,mBAAkB,CAAC,IAAD,CAA9zG,EAAq0G,gBAAe,CAAC,IAAD,CAAp1G,EAA21G,gBAAe,CAAC,IAAD,CAA12G,EAAi3G,QAAO,CAAC,IAAD,CAAx3G,EAA+3G,gBAAe,CAAC,IAAD,CAA94G,EAAq5G,mBAAkB,CAAC,IAAD,CAAv6G,EAA86G,cAAa,CAAC,IAAD,CAA37G,EAAk8G,WAAU,CAAC,IAAD,CAA58G,EAAm9G,cAAa,CAAC,IAAD,CAAh+G,EAAu+G,iBAAgB,CAAC,IAAD,CAAv/G,EAA8/G,iBAAgB,CAAC,IAAD,CAA9gH,EAAqhH,cAAa,CAAC,IAAD,CAAliH,EAAyiH,YAAW,CAAC,IAAD,CAApjH,EAA2jH,WAAU,CAAC,IAAD,CAArkH,EAA4kH,kBAAiB,CAAC,QAAD,EAAU,IAAV,CAA7lH,EAAf;;ECEA,IAAM7M,QAAQ,qBAAd;AACA,EAAe,SAAS8M,eAAT,CAAyB/F,KAAzB,EAA8C;AAC3D,EAAA,MAAIhD,MAAMoD,OAAN,CAAcJ,KAAd,CAAJ,EAA0B;AACxBA,EAAAA,YAAQA,MAAMrC,IAAN,CAAW,GAAX,CAAR;AACD,EAAA;;AAED,EAAA,SAAOqC,MAAM9G,KAAN,CAAYD,KAAZ,MAAuB,IAA9B;AACD,EAAA;;ECND,IAAM+M,WAAW,CAAC,UAAD,EAAa,OAAb,EAAsB,EAAtB,CAAjB;;AAEA,EAAe,SAAS5D,MAAT,CAAc1B,QAAd,EAAgCV,KAAhC,EAA4D;AACzE,EAAA,MAAI,OAAOA,KAAP,KAAiB,QAAjB,IAA6B,CAAC+F,gBAAgB/F,KAAhB,CAA9B,IAAwDA,MAAMC,OAAN,CAAc,OAAd,IAAyB,CAAC,CAAtF,EAAyF;AACvF,EAAA,WAAO+F,SAASnJ,GAAT,CAAa;AAAA,EAAA,aAAUmD,MAAMzE,OAAN,CAAc,SAAd,EAA4ByD,MAA5B,WAAV;AAAA,EAAA,KAAb,CAAP;AACD,EAAA;AACF,EAAA;;ECRD,IAAMgH,aAAW,CAAC,UAAD,EAAa,OAAb,EAAsB,EAAtB,CAAjB;;AAEA,EAAA,IAAM7F,WAAS;AACb,EAAA,aAAW,IADE;AAEb,EAAA,cAAY,IAFC;AAGbwD,EAAAA,QAAM,IAHO;AAIbC,EAAAA,YAAU;AAJG,EAAA,CAAf;;AAOA,EAAe,SAASqC,MAAT,CAAgBvF,QAAhB,EAAkCV,KAAlC,EAA8D;AAC3E,EAAA,MAAIU,aAAa,QAAb,IAAyBP,SAAOH,KAAP,CAA7B,EAA4C;AAC1C,EAAA,WAAOgG,WAASnJ,GAAT,CAAa;AAAA,EAAA,aAAUmC,SAASgB,KAAnB;AAAA,EAAA,KAAb,CAAP;AACD,EAAA;AACF,EAAA;;ECXD;AACA,EAAA,IAAMgG,aAAW,CAAC,UAAD,EAAa,EAAb,CAAjB;;AAEA,EAAe,SAAS3D,WAAT,CAAmB3B,QAAnB,EAAqCV,KAArC,EAAiE;AAC9E,EAAA,MAAI,OAAOA,KAAP,KAAiB,QAAjB,IAA6B,CAAC+F,gBAAgB/F,KAAhB,CAA9B,IAAwDA,MAAMC,OAAN,CAAc,aAAd,IAA+B,CAAC,CAA5F,EAA+F;AAC7F,EAAA,WAAO+F,WAASnJ,GAAT,CAAa;AAAA,EAAA,aAAUmD,MAAMzE,OAAN,CAAc,eAAd,EAAkCyD,MAAlC,iBAAV;AAAA,EAAA,KAAb,CAAP;AACD,EAAA;AACF,EAAA;;ECPD;AACA,EAAA,IAAMgH,aAAW,CAAC,UAAD,EAAa,EAAb,CAAjB;;AAEA,EAAe,SAAS1D,QAAT,CAAgB5B,QAAhB,EAAkCV,KAAlC,EAA8D;AAC3E,EAAA,MAAI,OAAOA,KAAP,KAAiB,QAAjB,IAA6B,CAAC+F,gBAAgB/F,KAAhB,CAA9B,IAAwDA,MAAMC,OAAN,CAAc,SAAd,IAA2B,CAAC,CAAxF,EAA2F;AACzF,EAAA,WAAO+F,WAASnJ,GAAT,CAAa;AAAA,EAAA,aAAUmD,MAAMzE,OAAN,CAAc,WAAd,EAA8ByD,MAA9B,aAAV;AAAA,EAAA,KAAb,CAAP;AACD,EAAA;AACF,EAAA;;ECTD,IAAMmB,WAAS;AACboC,EAAAA,QAAM,IADO;AAEb,EAAA,iBAAe;AAFF,EAAA,CAAf;;AAKA,EAAe,SAASA,MAAT,CAAc7B,QAAd,EAAgCV,KAAhC,EAA4D;AACzE,EAAA,MAAIU,aAAa,SAAb,IAA0BP,SAAOH,KAAP,CAA9B,EAA6C;AAC3C,EAAA,WAAO,CAAC,aAAD,EAAgB,UAAhB,WAAmCA,KAAnC,uBAA0DA,KAA1D,EAAmEA,KAAnE,CAAP;AACD,EAAA;AACF,EAAA;;ECTD,IAAMwC,sBAAoB;AACxB,EAAA,kBAAgB,YADQ;AAExB,EAAA,mBAAiB,SAFO;AAGxB,EAAA,gBAAc,OAHU;AAIxB,EAAA,cAAY;AAJY,EAAA,CAA1B;AAMA,EAAA,IAAMC,qBAAmB;AACvBC,EAAAA,gBAAc,gBADS;AAEvBC,EAAAA,aAAW,iBAFY;AAGvBC,EAAAA,cAAY,aAHW;AAIvBC,EAAAA,kBAAgB,YAJO;AAKvBC,EAAAA,SAAO,aALgB;AAMvBC,EAAAA,YAAU,gBANa;AAOvBC,EAAAA,cAAY,gBAPW;AAQvBC,EAAAA,aAAW;AARY,EAAA,CAAzB;;AAWA,EAAe,SAASC,WAAT,CACbxC,QADa,EAEbV,KAFa,EAGbW,KAHa,EAIP;AACN,EAAA,MAAI8B,mBAAiB/B,QAAjB,CAAJ,EAAgC;AAC9BC,EAAAA,UAAM8B,mBAAiB/B,QAAjB,CAAN,IAAoC8B,oBAAkBxC,KAAlB,KAA4BA,KAAhE;AACD,EAAA;AACF,EAAA;;ECzBD,IAAMwC,sBAAoB;AACxB,EAAA,kBAAgB,SADQ;AAExB,EAAA,mBAAiB,SAFO;AAGxB,EAAA,gBAAc,OAHU;AAIxB,EAAA,cAAY,KAJY;AAKxB,EAAA,kBAAgB,UALQ;AAMxBW,EAAAA,QAAM;AANkB,EAAA,CAA1B;;AASA,EAAA,IAAMV,qBAAmB;AACvBG,EAAAA,cAAY,gBADW;AAEvBC,EAAAA,kBAAgB,eAFO;AAGvBO,EAAAA,YAAU;AAHa,EAAA,CAAzB;;AAMA,EAAe,SAASI,YAAT,CACb9C,QADa,EAEbV,KAFa,EAGbW,KAHa,EAIP;AACN,EAAA,MAAID,aAAa,eAAb,IAAgC,OAAOV,KAAP,KAAiB,QAArD,EAA+D;AAC7D,EAAA,QAAIA,MAAMC,OAAN,CAAc,QAAd,IAA0B,CAAC,CAA/B,EAAkC;AAChCU,EAAAA,YAAM8C,eAAN,GAAwB,UAAxB;AACD,EAAA,KAFD,MAEO;AACL9C,EAAAA,YAAM8C,eAAN,GAAwB,YAAxB;AACD,EAAA;AACD,EAAA,QAAIzD,MAAMC,OAAN,CAAc,SAAd,IAA2B,CAAC,CAAhC,EAAmC;AACjCU,EAAAA,YAAM+C,kBAAN,GAA2B,SAA3B;AACD,EAAA,KAFD,MAEO;AACL/C,EAAAA,YAAM+C,kBAAN,GAA2B,QAA3B;AACD,EAAA;AACF,EAAA;AACD,EAAA,MAAIjB,mBAAiB/B,QAAjB,CAAJ,EAAgC;AAC9BC,EAAAA,UAAM8B,mBAAiB/B,QAAjB,CAAN,IAAoC8B,oBAAkBxC,KAAlB,KAA4BA,KAAhE;AACD,EAAA;AACF,EAAA;;ECjCD,IAAMgG,aAAW,CAAC,UAAD,EAAa,OAAb,EAAsB,EAAtB,CAAjB;AACA,EAAA,IAAM7F,WAAS,qFAAf;;AAEA,EAAe,SAAS2D,UAAT,CAAkBpD,QAAlB,EAAoCV,KAApC,EAAgE;AAC7E,EAAA,MAAI,OAAOA,KAAP,KAAiB,QAAjB,IAA6B,CAAC+F,gBAAgB/F,KAAhB,CAA9B,IAAwDA,MAAM9G,KAAN,CAAYiH,QAAZ,MAAwB,IAApF,EAA0F;AACxF,EAAA,WAAO6F,WAASnJ,GAAT,CAAa;AAAA,EAAA,aAAUmC,SAASgB,KAAnB;AAAA,EAAA,KAAb,CAAP;AACD,EAAA;AACF,EAAA;;ECPD;AACA,EAAA,IAAMgG,aAAW,CAAC,UAAD,EAAa,EAAb,CAAjB;;AAEA,EAAe,SAASjC,UAAT,CAAkBrD,QAAlB,EAAoCV,KAApC,EAAgE;AAC7E,EAAA,MAAI,OAAOA,KAAP,KAAiB,QAAjB,IAA6B,CAAC+F,gBAAgB/F,KAAhB,CAA9B,IAAwDA,MAAMC,OAAN,CAAc,YAAd,IAA8B,CAAC,CAA3F,EAA8F;AAC5F,EAAA,WAAO+F,WAASnJ,GAAT,CAAa;AAAA,EAAA,aAAUmD,MAAMzE,OAAN,CAAc,cAAd,EAAiCyD,MAAjC,gBAAV;AAAA,EAAA,KAAb,CAAP;AACD,EAAA;AACF,EAAA;;ECTc,SAASgF,UAAT,CAAkBtD,QAAlB,EAAoCV,KAApC,EAAgE;AAC7E,EAAA,MAAIU,aAAa,UAAb,IAA2BV,UAAU,QAAzC,EAAmD;AACjD,EAAA,WAAO,CAAC,gBAAD,EAAmB,QAAnB,CAAP;AACD,EAAA;AACF,EAAA;;ECJD,IAAMgG,aAAW,CAAC,UAAD,EAAa,OAAb,EAAsB,EAAtB,CAAjB;;AAEA,EAAA,IAAM1C,eAAa;AACjBW,EAAAA,aAAW,IADM;AAEjBC,EAAAA,YAAU,IAFO;AAGjBC,EAAAA,SAAO,IAHU;AAIjBC,EAAAA,UAAQ,IAJS;AAKjBC,EAAAA,eAAa,IALI;AAMjBC,EAAAA,YAAU,IANO;AAOjBC,EAAAA,aAAW;AAPM,EAAA,CAAnB;AASA,EAAA,IAAMpE,WAAS;AACb,EAAA,iBAAe,IADF;AAEb,EAAA,iBAAe,IAFF;AAGb,EAAA,oBAAkB,IAHL;AAIb,EAAA,iBAAe,IAJF;AAKb,EAAA,oBAAkB;AALL,EAAA,CAAf;;AAQA,EAAe,SAASqE,QAAT,CAAgB9D,QAAhB,EAAkCV,KAAlC,EAA2D;AACxE,EAAA,MAAIsD,aAAW5C,QAAX,KAAwBP,SAAOH,KAAP,CAA5B,EAA2C;AACzC,EAAA,WAAOgG,WAASnJ,GAAT,CAAa;AAAA,EAAA,aAAUmC,SAASgB,KAAnB;AAAA,EAAA,KAAb,CAAP;AACD,EAAA;AACF,EAAA;;EClBD,IAAMsD,eAAa;AACjBwB,EAAAA,cAAY,IADK;AAEjBC,EAAAA,sBAAoB,IAFH;AAGjBC,EAAAA,oBAAkB,IAHD;AAIjBC,EAAAA,4BAA0B,IAJT;AAKjBC,EAAAA,iBAAe,IALE;AAMjBC,EAAAA,yBAAuB;AANN,EAAA,CAAnB;;AASA,EAAA,IAAMe,gBAAgB;AACpBC,EAAAA,UAAQ,UADY;AAEpBC,EAAAA,OAAK,OAFe;AAGpBC,EAAAA,MAAI;AAHgB,EAAA,CAAtB;;AAMA,EAAA,SAAS7F,aAAT,CAAqBR,KAArB,EAAoCe,iBAApC,EAAuE;AACrE,EAAA,MAAIgF,gBAAgB/F,KAAhB,CAAJ,EAA4B;AAC1B,EAAA,WAAOA,KAAP;AACD,EAAA;;AAED,EAAA;AACA,EAAA,MAAMsF,iBAAiBtF,MAAMpE,KAAN,CAAY,+BAAZ,CAAvB;;AAEA,EAAA,OAAK,IAAIc,IAAI,CAAR,EAAW2D,MAAMiF,eAAenM,MAArC,EAA6CuD,IAAI2D,GAAjD,EAAsD,EAAE3D,CAAxD,EAA2D;AACzD,EAAA,QAAM4J,cAAchB,eAAe5I,CAAf,CAApB;AACA,EAAA,QAAMyD,SAAS,CAACmG,WAAD,CAAf;AACA,EAAA,SAAK,IAAM5F,QAAX,IAAuBK,iBAAvB,EAA0C;AACxC,EAAA,UAAMwF,mBAAmB3B,mBAAmBlE,QAAnB,CAAzB;;AAEA,EAAA,UAAI4F,YAAYrG,OAAZ,CAAoBsG,gBAApB,IAAwC,CAAC,CAAzC,IAA8CA,qBAAqB,OAAvE,EAAgF;AAC9E,EAAA,YAAMP,WAAWjF,kBAAkBL,QAAlB,CAAjB;AACA,EAAA,aAAK,IAAI8F,IAAI,CAAR,EAAWC,OAAOT,SAAS7M,MAAhC,EAAwCqN,IAAIC,IAA5C,EAAkD,EAAED,CAApD,EAAuD;AACrD,EAAA;AACArG,EAAAA,iBAAOuG,OAAP,CACEJ,YAAY/K,OAAZ,CAAoBgL,gBAApB,EAAsCL,cAAcF,SAASQ,CAAT,CAAd,IAA6BD,gBAAnE,CADF;AAGD,EAAA;AACF,EAAA;AACF,EAAA;;AAEDjB,EAAAA,mBAAe5I,CAAf,IAAoByD,OAAOxC,IAAP,CAAY,GAAZ,CAApB;AACD,EAAA;;AAED,EAAA,SAAO2H,eAAe3H,IAAf,CAAoB,GAApB,CAAP;AACD,EAAA;;AAED,EAAe,SAASmH,YAAT,CACbpE,QADa,EAEbV,KAFa,EAGbW,KAHa,EAIbI,iBAJa,EAKJ;AACT,EAAA;AACA,EAAA,MAAI,OAAOf,KAAP,KAAiB,QAAjB,IAA6BsD,aAAW5C,QAAX,CAAjC,EAAuD;AACrD,EAAA,QAAMiG,cAAcnG,cAAYR,KAAZ,EAAmBe,iBAAnB,CAApB;AACA,EAAA;AACA,EAAA,QAAM6F,eAAeD,YAClB/K,KADkB,CACZ,+BADY,EAElB0G,MAFkB,CAEX;AAAA,EAAA,aAAOkD,IAAItM,KAAJ,CAAU,YAAV,MAA4B,IAAnC;AAAA,EAAA,KAFW,EAGlByE,IAHkB,CAGb,GAHa,CAArB;;AAKA,EAAA,QAAI+C,SAAST,OAAT,CAAiB,QAAjB,IAA6B,CAAC,CAAlC,EAAqC;AACnC,EAAA,aAAO2G,YAAP;AACD,EAAA;;AAED,EAAA,QAAMC,YAAYF,YACf/K,KADe,CACT,+BADS,EAEf0G,MAFe,CAER;AAAA,EAAA,aAAOkD,IAAItM,KAAJ,CAAU,eAAV,MAA+B,IAAtC;AAAA,EAAA,KAFQ,EAGfyE,IAHe,CAGV,GAHU,CAAlB;;AAKA,EAAA,QAAI+C,SAAST,OAAT,CAAiB,KAAjB,IAA0B,CAAC,CAA/B,EAAkC;AAChC,EAAA,aAAO4G,SAAP;AACD,EAAA;;AAEDlG,EAAAA,qBAAelB,iBAAiBiB,QAAjB,CAAf,IAA+CkG,YAA/C;AACAjG,EAAAA,kBAAYlB,iBAAiBiB,QAAjB,CAAZ,IAA4CmG,SAA5C;AACA,EAAA,WAAOF,WAAP;AACD,EAAA;AACF,EAAA;;kBCvEc,CACb3C,UADa,EAEb5B,MAFa,EAGb2B,UAHa,EAIb1B,WAJa,EAKbC,QALa,EAMb2D,MANa,EAObzB,QAPa,EAQbV,UARa,EASbgB,YATa,EAUb5B,WAVa,EAWbM,YAXa,EAYbjB,MAZa,CAAf;;iBCRezB,iBAAeC,mBAAf,EAAkCN,SAAlC,CAAf;;cCEeK,eAAeC,iBAAf,EAAkCN,OAAlC,EAA2CO,QAA3C,CAAf;;;;"} \ No newline at end of file diff --git a/dist/inline-style-prefixer.min.js b/dist/inline-style-prefixer.min.js new file mode 100644 index 0000000..22e6ce6 --- /dev/null +++ b/dist/inline-style-prefixer.min.js @@ -0,0 +1,2 @@ +!function(e,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):e.InlineStylePrefixer=i()}(this,function(){"use strict";function e(e,i){return i={exports:{}},e(i,i.exports,N),i.exports}function i(e){if(e.firefox)return"firefox";if(e.mobile||e.tablet){if(e.ios)return"ios_saf";if(e.android)return"android";if(e.opera)return"op_mini"}for(var i in q)if(e[i])return q[i]}function r(e){var r=U._detect(e);for(var o in L)if(r[o]){var t=L[o];r.jsPrefix=t,r.cssPrefix="-"+t.toLowerCase()+"-";break}return r.browserName=i(r),r.version?r.browserVersion=parseFloat(r.version):r.browserVersion=parseInt(parseFloat(r.osversion),10),r.osVersion=parseFloat(r.osversion),"ios_saf"===r.browserName&&r.browserVersion>r.osVersion&&(r.browserVersion=r.osVersion),"android"===r.browserName&&r.chrome&&r.browserVersion>37&&(r.browserName="and_chr"),"android"===r.browserName&&r.osVersion<5&&(r.browserVersion=r.osVersion),"android"===r.browserName&&r.samsungBrowser&&(r.browserName="and_chr",r.browserVersion=44),r}function o(e,i,r){var o="keyframes";return"chrome"===e&&i<43||("safari"===e||"ios_saf"===e)&&i<9||"opera"===e&&i<30||"android"===e&&i<=4.4||"and_uc"===e?r+o:o}function t(e){return e.charAt(0).toUpperCase()+e.slice(1)}function n(e,i){e.indexOf(i)===-1&&e.push(i)}function a(e,i){if(Array.isArray(i))for(var r=0,o=i.length;r1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(e){return e};return function(){function m(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};V.classCallCheck(this,m);var t="undefined"!=typeof navigator?navigator.userAgent:void 0;if(this._userAgent=i.userAgent||t,this._keepUnprefixed=i.keepUnprefixed||!1,this._userAgent&&(this._browserInfo=r(this._userAgent)),!this._browserInfo||!this._browserInfo.cssPrefix)return this._useFallback=!0,!1;this.prefixedKeyframes=o(this._browserInfo.browserName,this._browserInfo.browserVersion,this._browserInfo.cssPrefix);var n=this._browserInfo.browserName&&e[this._browserInfo.browserName];if(n){this._requiresPrefix={};for(var a in n)n[a]>=this._browserInfo.browserVersion&&(this._requiresPrefix[a]=!0);this._hasPropsRequiringPrefix=Object.keys(this._requiresPrefix).length>0}else this._useFallback=!0;this._metaData={browserVersion:this._browserInfo.browserVersion,browserName:this._browserInfo.browserName,cssPrefix:this._browserInfo.cssPrefix,jsPrefix:this._browserInfo.jsPrefix,keepUnprefixed:this._keepUnprefixed,requiresPrefix:this._requiresPrefix}}return V.createClass(m,[{key:"prefix",value:function(e){return this._useFallback?n(e):this._hasPropsRequiringPrefix?this._prefixStyle(e):e}},{key:"_prefixStyle",value:function(e){for(var r in e){var o=e[r];if(s(o))e[r]=this.prefix(o);else if(Array.isArray(o)){for(var n=[],m=0,f=o.length;m0&&(e[r]=n)}else{var d=l(i,r,o,e,this._metaData);d&&(e[r]=d),this._requiresPrefix[r]&&(e[this._browserInfo.jsPrefix+t(r)]=o,this._keepUnprefixed||delete e[r])}}return e}}],[{key:"prefixAll",value:function(e){return n(e)}}]),m}()}function f(e,i,r){return r?[e,i]:e}function c(e,i,r,o){var t=o.browserName,n=o.browserVersion,a=o.cssPrefix,s=o.keepUnprefixed;if("string"==typeof i&&i.indexOf("calc(")>-1&&("firefox"===t&&n<15||"chrome"===t&&n<25||"safari"===t&&n<6.1||"ios_saf"===t&&n<7))return f(i.replace(/calc\(/g,a+"calc("),i,s)}function d(e,i,r,o){var t=o.browserName,n=o.browserVersion,a=o.cssPrefix,s=o.keepUnprefixed;if("string"==typeof i&&i.indexOf("cross-fade(")>-1&&("chrome"===t||"opera"===t||"and_chr"===t||("ios_saf"===t||"safari"===t)&&n<10))return f(i.replace(/cross-fade\(/g,a+"cross-fade("),i,s)}function u(e,i,r,o){var t=o.browserName,n=o.browserVersion,a=o.cssPrefix,s=o.keepUnprefixed;if("string"==typeof i&&i.indexOf("filter(")>-1&&("ios_saf"===t||"safari"===t&&n<9.1))return f(i.replace(/filter\(/g,a+"filter("),i,s)}function p(e,i,r,o){var t=o.browserName,n=o.browserVersion,a=o.cssPrefix,s=o.keepUnprefixed;if("display"===e&&X[i]&&("chrome"===t&&n<29&&n>20||("safari"===t||"ios_saf"===t)&&n<9&&n>6||"opera"===t&&(15===n||16===n)))return f(a+i,i,s)}function k(e,i,r,o){var t=o.browserName,n=o.browserVersion,a=o.cssPrefix,s=o.keepUnprefixed,l=o.requiresPrefix;if((K[e]||"display"===e&&"string"==typeof i&&i.indexOf("flex")>-1)&&("ie_mob"===t||"ie"===t)&&10===n){if(delete l[e],s||Array.isArray(r[e])||delete r[e],"display"===e&&Z[i])return f(a+Z[i],i,s);K[e]&&(r[K[e]]=Z[i]||i)}}function b(e,i,r,o){var t=o.browserName,n=o.browserVersion,a=o.cssPrefix,s=o.keepUnprefixed,l=o.requiresPrefix;if(($.indexOf(e)>-1||"display"===e&&"string"==typeof i&&i.indexOf("flex")>-1)&&("firefox"===t&&n<22||"chrome"===t&&n<21||("safari"===t||"ios_saf"===t)&&n<=6.1||"android"===t&&n<4.4||"and_uc"===t)){if(delete l[e],s||Array.isArray(r[e])||delete r[e],"flexDirection"===e&&"string"==typeof i&&(i.indexOf("column")>-1?r.WebkitBoxOrient="vertical":r.WebkitBoxOrient="horizontal",i.indexOf("reverse")>-1?r.WebkitBoxDirection="reverse":r.WebkitBoxDirection="normal"),"display"===e&&H[i])return f(a+H[i],i,s);J[e]&&(r[J[e]]=H[i]||i)}}function g(e,i,r,o){var t=o.browserName,n=o.cssPrefix,a=o.keepUnprefixed;if("cursor"===e&&ee[i]&&("firefox"===t||"chrome"===t||"safari"===t||"opera"===t))return f(n+i,i,a)}function x(e,i,r,o){var t=o.browserName,n=o.browserVersion,a=o.cssPrefix,s=o.keepUnprefixed;if("string"==typeof i&&null!==i.match(ie)&&("firefox"===t&&n<16||"chrome"===t&&n<26||("safari"===t||"ios_saf"===t)&&n<7||("opera"===t||"op_mini"===t)&&n<12.1||"android"===t&&n<4.4||"and_uc"===t))return f(a+i,i,s)}function h(e,i,r,o){var t=o.browserName,n=o.cssPrefix,a=o.keepUnprefixed;if("string"==typeof i&&i.indexOf("image-set(")>-1&&("chrome"===t||"opera"===t||"and_chr"===t||"and_uc"===t||"ios_saf"===t||"safari"===t))return f(i.replace(/image-set\(/g,n+"image-set("),i,a)}function y(e,i,r){var o=r.browserName,t=r.cssPrefix,n=r.keepUnprefixed;if("position"===e&&"sticky"===i&&("safari"===o||"ios_saf"===o))return f(t+i,i,n)}function w(e,i,r,o){var t=o.cssPrefix,n=o.keepUnprefixed;if(re[e]&&oe[i])return f(t+i,i,n)}function v(e,i,r,o){var t=o.cssPrefix,n=o.keepUnprefixed,a=o.requiresPrefix;if("string"==typeof i&&ae[e]){var s=function(){se||(se=Object.keys(a).map(function(e){return ne(e)}));var e=i.split(/,(?![^()]*(?:\([^()]*\))?\))/g);return se.forEach(function(i){e.forEach(function(r,o){r.indexOf(i)>-1&&"order"!==i&&(e[o]=r.replace(i,t+i)+(n?","+r:""))})}),{v:e.join(",")}}();if("object"===("undefined"==typeof s?"undefined":V.typeof(s)))return s.v}}function S(e,i,r,o){var t=o.browserName,n=o.browserVersion,a=o.cssPrefix,s=o.keepUnprefixed;if("cursor"===e&&le[i]&&("firefox"===t&&n<24||"chrome"===t&&n<37||"safari"===t&&n<9||"opera"===t&&n<24))return f(a+i,i,s)}function W(e,i,r){var o=e[i];if(o)for(var n=0,a=o.length;n0&&(o[t]=m)}else{var u=l(r,t,n,o,e);u&&(o[t]=u),W(e,t,o)}}return o}var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return i}function C(e){return Array.isArray(e)&&(e=e.join(",")),null!==e.match(ce)}function B(e,i){if("string"==typeof i&&!C(i)&&i.indexOf("calc(")>-1)return de.map(function(e){return i.replace(/calc\(/g,e+"calc(")})}function M(e,i){if("cursor"===e&&pe[i])return ue.map(function(e){return e+i})}function P(e,i){if("string"==typeof i&&!C(i)&&i.indexOf("cross-fade(")>-1)return ke.map(function(e){return i.replace(/cross-fade\(/g,e+"cross-fade(")})}function O(e,i){if("string"==typeof i&&!C(i)&&i.indexOf("filter(")>-1)return be.map(function(e){return i.replace(/filter\(/g,e+"filter(")})}function D(e,i){if("display"===e&&ge[i])return["-webkit-box","-moz-box","-ms-"+i+"box","-webkit-"+i,i]}function I(e,i,r){he[e]&&(r[he[e]]=xe[i]||i)}function F(e,i,r){"flexDirection"===e&&"string"==typeof i&&(i.indexOf("column")>-1?r.WebkitBoxOrient="vertical":r.WebkitBoxOrient="horizontal",i.indexOf("reverse")>-1?r.WebkitBoxDirection="reverse":r.WebkitBoxDirection="normal"),we[e]&&(r[we[e]]=ye[i]||i)}function R(e,i){if("string"==typeof i&&!C(i)&&null!==i.match(Se))return ve.map(function(e){return e+i})}function A(e,i){if("string"==typeof i&&!C(i)&&i.indexOf("image-set(")>-1)return We.map(function(e){return i.replace(/image-set\(/g,e+"image-set(")})}function _(e,i){if("position"===e&&"sticky"===i)return["-webkit-sticky","sticky"]}function T(e,i){if(Ce[e]&&Be[i])return ze.map(function(e){return e+i})}function j(e,i){if(C(e))return e;for(var r=e.split(/,(?![^()]*(?:\([^()]*\))?\))/g),o=0,t=r.length;o-1&&"order"!==l)for(var m=i[s],f=0,c=m.length;f-1)return a;var s=n.split(/,(?![^()]*(?:\([^()]*\))?\))/g).filter(function(e){return null===e.match(/-webkit-|-ms-/)}).join(",");return e.indexOf("Moz")>-1?s:(r["Webkit"+t(e)]=a,r["Moz"+t(e)]=s,n)}}var V={};V.typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},V.classCallCheck=function(e,i){if(!(e instanceof i))throw new TypeError("Cannot call a class as a function")},V.createClass=function(){function e(e,i){for(var r=0;r1&&r[1]||""}function r(i){var r=e.match(i);return r&&r.length>1&&r[2]||""}var o,t=i(/(ipod|iphone|ipad)/i).toLowerCase(),n=/like android/i.test(e),s=!n&&/android/i.test(e),l=/nexus\s*[0-6]\s*/i.test(e),m=!l&&/nexus\s*[0-9]+/i.test(e),f=/CrOS/.test(e),c=/silk/i.test(e),d=/sailfish/i.test(e),u=/tizen/i.test(e),p=/(web|hpw)os/i.test(e),k=/windows phone/i.test(e),b=(/SamsungBrowser/i.test(e),!k&&/windows/i.test(e)),g=!t&&!c&&/macintosh/i.test(e),x=!s&&!d&&!u&&!p&&/linux/i.test(e),h=i(/edge\/(\d+(\.\d+)?)/i),y=i(/version\/(\d+(\.\d+)?)/i),w=/tablet/i.test(e),v=!w&&/[^-]mobi/i.test(e),S=/xbox/i.test(e);/opera/i.test(e)?o={name:"Opera",opera:a,version:y||i(/(?:opera|opr|opios)[\s\/](\d+(\.\d+)?)/i)}:/opr|opios/i.test(e)?o={name:"Opera",opera:a,version:i(/(?:opr|opios)[\s\/](\d+(\.\d+)?)/i)||y}:/SamsungBrowser/i.test(e)?o={name:"Samsung Internet for Android",samsungBrowser:a,version:y||i(/(?:SamsungBrowser)[\s\/](\d+(\.\d+)?)/i)}:/coast/i.test(e)?o={name:"Opera Coast",coast:a,version:y||i(/(?:coast)[\s\/](\d+(\.\d+)?)/i)}:/yabrowser/i.test(e)?o={name:"Yandex Browser",yandexbrowser:a,version:y||i(/(?:yabrowser)[\s\/](\d+(\.\d+)?)/i)}:/ucbrowser/i.test(e)?o={name:"UC Browser",ucbrowser:a,version:i(/(?:ucbrowser)[\s\/](\d+(?:\.\d+)+)/i)}:/mxios/i.test(e)?o={name:"Maxthon",maxthon:a,version:i(/(?:mxios)[\s\/](\d+(?:\.\d+)+)/i)}:/epiphany/i.test(e)?o={name:"Epiphany",epiphany:a,version:i(/(?:epiphany)[\s\/](\d+(?:\.\d+)+)/i)}:/puffin/i.test(e)?o={name:"Puffin",puffin:a,version:i(/(?:puffin)[\s\/](\d+(?:\.\d+)?)/i)}:/sleipnir/i.test(e)?o={name:"Sleipnir",sleipnir:a,version:i(/(?:sleipnir)[\s\/](\d+(?:\.\d+)+)/i)}:/k-meleon/i.test(e)?o={name:"K-Meleon",kMeleon:a,version:i(/(?:k-meleon)[\s\/](\d+(?:\.\d+)+)/i)}:k?(o={name:"Windows Phone",windowsphone:a},h?(o.msedge=a,o.version=h):(o.msie=a,o.version=i(/iemobile\/(\d+(\.\d+)?)/i))):/msie|trident/i.test(e)?o={name:"Internet Explorer",msie:a,version:i(/(?:msie |rv:)(\d+(\.\d+)?)/i)}:f?o={name:"Chrome",chromeos:a,chromeBook:a,chrome:a,version:i(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)}:/chrome.+? edge/i.test(e)?o={name:"Microsoft Edge",msedge:a,version:h}:/vivaldi/i.test(e)?o={name:"Vivaldi",vivaldi:a,version:i(/vivaldi\/(\d+(\.\d+)?)/i)||y}:d?o={name:"Sailfish",sailfish:a,version:i(/sailfish\s?browser\/(\d+(\.\d+)?)/i)}:/seamonkey\//i.test(e)?o={name:"SeaMonkey",seamonkey:a,version:i(/seamonkey\/(\d+(\.\d+)?)/i)}:/firefox|iceweasel|fxios/i.test(e)?(o={name:"Firefox",firefox:a,version:i(/(?:firefox|iceweasel|fxios)[ \/](\d+(\.\d+)?)/i)},/\((mobile|tablet);[^\)]*rv:[\d\.]+\)/i.test(e)&&(o.firefoxos=a)):c?o={name:"Amazon Silk",silk:a,version:i(/silk\/(\d+(\.\d+)?)/i)}:/phantom/i.test(e)?o={name:"PhantomJS",phantom:a,version:i(/phantomjs\/(\d+(\.\d+)?)/i)}:/slimerjs/i.test(e)?o={name:"SlimerJS",slimer:a,version:i(/slimerjs\/(\d+(\.\d+)?)/i)}:/blackberry|\bbb\d+/i.test(e)||/rim\stablet/i.test(e)?o={name:"BlackBerry",blackberry:a,version:y||i(/blackberry[\d]+\/(\d+(\.\d+)?)/i)}:p?(o={name:"WebOS",webos:a,version:y||i(/w(?:eb)?osbrowser\/(\d+(\.\d+)?)/i)},/touchpad\//i.test(e)&&(o.touchpad=a)):/bada/i.test(e)?o={name:"Bada",bada:a,version:i(/dolfin\/(\d+(\.\d+)?)/i)}:u?o={name:"Tizen",tizen:a,version:i(/(?:tizen\s?)?browser\/(\d+(\.\d+)?)/i)||y}:/qupzilla/i.test(e)?o={name:"QupZilla",qupzilla:a,version:i(/(?:qupzilla)[\s\/](\d+(?:\.\d+)+)/i)||y}:/chromium/i.test(e)?o={name:"Chromium",chromium:a,version:i(/(?:chromium)[\s\/](\d+(?:\.\d+)?)/i)||y}:/chrome|crios|crmo/i.test(e)?o={name:"Chrome",chrome:a,version:i(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)}:s?o={name:"Android",version:y}:/safari|applewebkit/i.test(e)?(o={name:"Safari",safari:a},y&&(o.version=y)):t?(o={name:"iphone"==t?"iPhone":"ipad"==t?"iPad":"iPod"},y&&(o.version=y)):o=/googlebot/i.test(e)?{name:"Googlebot",googlebot:a,version:i(/googlebot\/(\d+(\.\d+))/i)||y}:{name:i(/^(.*)\/(.*) /),version:r(/^(.*)\/(.*) /)},!o.msedge&&/(apple)?webkit/i.test(e)?(/(apple)?webkit\/537\.36/i.test(e)?(o.name=o.name||"Blink",o.blink=a):(o.name=o.name||"Webkit",o.webkit=a),!o.version&&y&&(o.version=y)):!o.opera&&/gecko\//i.test(e)&&(o.name=o.name||"Gecko",o.gecko=a,o.version=o.version||i(/gecko\/(\d+(\.\d+)?)/i)),o.windowsphone||o.msedge||!s&&!o.silk?o.windowsphone||o.msedge||!t?g?o.mac=a:S?o.xbox=a:b?o.windows=a:x&&(o.linux=a):(o[t]=a,o.ios=a):o.android=a;var W="";o.windowsphone?W=i(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i):t?(W=i(/os (\d+([_\s]\d+)*) like mac os x/i),W=W.replace(/[_\s]/g,".")):s?W=i(/android[ \/-](\d+(\.\d+)*)/i):o.webos?W=i(/(?:web|hpw)os\/(\d+(\.\d+)*)/i):o.blackberry?W=i(/rim\stablet\sos\s(\d+(\.\d+)*)/i):o.bada?W=i(/bada\/(\d+(\.\d+)*)/i):o.tizen&&(W=i(/tizen[\/\s](\d+(\.\d+)*)/i)),W&&(o.osversion=W);var z=W.split(".")[0];return w||m||"ipad"==t||s&&(3==z||z>=4&&!v)||o.silk?o.tablet=a:(v||"iphone"==t||"ipod"==t||s||l||o.blackberry||o.webos||o.bada)&&(o.mobile=a),o.msedge||o.msie&&o.version>=10||o.yandexbrowser&&o.version>=15||o.vivaldi&&o.version>=1||o.chrome&&o.version>=20||o.samsungBrowser&&o.version>=4||o.firefox&&o.version>=20||o.safari&&o.version>=6||o.opera&&o.version>=10||o.ios&&o.osversion&&o.osversion.split(".")[0]>=6||o.blackberry&&o.version>=10.1||o.chromium&&o.version>=20?o.a=a:o.msie&&o.version<10||o.chrome&&o.version<20||o.firefox&&o.version<20||o.safari&&o.version<6||o.opera&&o.version<10||o.ios&&o.osversion&&o.osversion.split(".")[0]<6||o.chromium&&o.version<20?o.c=a:o.x=a,o}function i(e){return e.split(".").length}function r(e,i){var r,o=[];if(Array.prototype.map)return Array.prototype.map.call(e,i);for(r=0;r=0;){if(t[0][o]>t[1][o])return 1;if(t[0][o]!==t[1][o])return-1;if(0===o)return 0}}function t(i,r,t){var n=s;"string"==typeof r&&(t=r,r=void 0),void 0===r&&(r=!1),t&&(n=e(t));var a=""+n.version;for(var l in i)if(i.hasOwnProperty(l)&&n[l]){if("string"!=typeof i[l])throw new Error("Browser version in the minVersion map should be a string: "+l+": "+String(i));return o([a,i[l]])<0}return r}function n(e,i,r){return!t(e,i,r)}var a=!0,s=e("undefined"!=typeof navigator?navigator.userAgent||"":"");return s.test=function(e){for(var i=0;i { - const prefix = prefixBrowsers[browser] - Object.keys(searchMap).forEach((searchKey) => { - const versions = caniuse.getSupport(searchKey) - const properties = [].concat(searchMap[searchKey]) - - properties.forEach((prop) => { - if (versions[browser].x >= config[browser]) { - out[prefix][prop] = true - } - }) - }) - - return out -}, { - Webkit: {}, - Moz: {}, - ms: {} -}) - -// remove flexprops from IE -const flexPropsIE = [ - 'alignContent', - 'alignSelf', - 'alignItems', - 'justifyContent', - 'order', - 'flexGrow', - 'flexShrink', - 'flexBasis' -] - -flexPropsIE.forEach((prop) => { - delete prefixProperties.ms[prop] -}) - -delete prefixProperties.Webkit.transition - -const propertyPrefixes = Object.keys(prefixProperties).reduce(( - prefixes, - prefix -) => { - Object.keys(prefixProperties[prefix]).forEach((property) => { - if (!prefixes[property]) { - prefixes[property] = [] - } - - prefixes[property].push(prefix) - }) - return prefixes -}, {}) - -const file = `export default ${JSON.stringify(propertyPrefixes)}` - -fs.writeFile('./modules/static/prefixProps.js', file, (err) => { - if (err) { - throw err - } - console.log( - 'Successfully generated static property vendor-prefix data based on before generated caniuse data mapping.' - ) -}) - -const browsers = [ - 'chrome', - 'safari', - 'firefox', - 'opera', - 'ie', - 'edge', - 'ios_saf', - 'android', - 'and_chr', - 'and_uc', - 'op_mini', - 'ie_mob' -] - -function gatherInformation() { - const prefixProperties = {} - browsers.forEach((browser) => { - prefixProperties[browser] = {} - }) - - for (const search in searchMap) { - let properties = searchMap[search] - const versions = caniuse.getSupport(search, true) - if (properties instanceof Array !== true) { - properties = [properties] - } - properties.forEach((prop) => { - for (const prefix in prefixProperties) { - if (versions[prefix].x >= config[prefix]) { - prefixProperties[prefix][prop] = versions[prefix].x - } - } - }) - } - - prefixProperties.ie = assign( - {}, - prefixProperties.ie, - prefixProperties.ie_mob - ) - delete prefixProperties.ie_mob - flexPropsIE.forEach((prop) => { - delete prefixProperties.ie[prop] - }) - return `export default ${JSON.stringify(prefixProperties)}` -} - -fs.writeFile('./modules/dynamic/prefixProps.js', gatherInformation(), (err) => { - if (err) { - throw err - } - console.log( - 'Successfully generated CSS property vendor-prefix data using latest caniuse.com data.' - ) - console.log('Support following browser: ', browsers.join(', ')) -}) diff --git a/generator/searchMap.js b/generator/searchMap.js deleted file mode 100644 index 13731ac..0000000 --- a/generator/searchMap.js +++ /dev/null @@ -1,37 +0,0 @@ -export default { - 'border-radius': 'borderRadius', - 'border-image': [ 'borderImage', 'borderImageOutset', 'borderImageRepeat', 'borderImageSlice', 'borderImageSource', 'borderImageWidth' ], - flexbox: [ 'flex', 'flexBasis', 'flexDirection', 'flexGrow', 'flexFlow', 'flexShrink', 'flexWrap', 'alignContent', 'alignItems', 'alignSelf', 'justifyContent', 'order' ], - 'css-transitions': [ 'transition', 'transitionDelay', 'transitionDuration', 'transitionProperty', 'transitionTimingFunction' ], - transforms2d: [ 'transform', 'transformOrigin', 'transformOriginX', 'transformOriginY' ], - transforms3d: [ 'backfaceVisibility', 'perspective', 'perspectiveOrigin', 'transform', 'transformOrigin', 'transformStyle', 'transformOriginX', 'transformOriginY', 'transformOriginZ' ], - 'css-animation': [ 'animation', 'animationDelay', 'animationDirection', 'animationFillMode', 'animationDuration', 'animationIterationCount', 'animationName', 'animationPlayState', 'animationTimingFunction' ], - 'css-appearance': 'appearance', - 'user-select-none': 'userSelect', - 'css-backdrop-filter': 'backdropFilter', - 'css3-boxsizing': 'boxSizing', - 'font-kerning': 'fontKerning', - 'css-exclusions': [ 'wrapFlow', 'wrapThrough', 'wrapMargin' ], - 'css-snappoints': [ 'scrollSnapType', 'scrollSnapPointsX', 'scrollSnapPointsY', 'scrollSnapDestination', 'scrollSnapCoordinate' ], - 'text-emphasis': [ 'textEmphasisPosition', 'textEmphasis', 'textEmphasisStyle', 'textEmphasisColor' ], - 'css-text-align-last': 'textAlignLast', - 'css-boxdecorationbreak': 'boxDecorationBreak', - 'css-clip-path': 'clipPath', - 'css-masks': [ 'maskImage', 'maskMode', 'maskRepeat', 'maskPosition', 'maskClip', 'maskOrigin', 'maskSize', 'maskComposite', 'mask', 'maskBorderSource', 'maskBorderMode', 'maskBorderSlice', 'maskBorderWidth', 'maskBorderOutset', 'maskBorderRepeat', 'maskBorder', 'maskType' ], - 'css-touch-action': 'touchAction', - 'text-size-adjust': 'textSizeAdjust', - 'text-decoration': [ 'textDecorationStyle', 'textDecorationSkip', 'textDecorationLine', 'textDecorationColor' ], - 'css-shapes': [ 'shapeImageThreshold', 'shapeImageMargin', 'shapeImageOutside' ], - 'css3-tabsize': 'tabSize', - 'css-filters': 'filter', - 'css-resize': 'resize', - 'css-hyphens': 'hyphens', - 'css-regions': [ 'flowInto', 'flowFrom', 'breakBefore', 'breakAfter', 'breakInside', 'regionFragment' ], - 'css-grid': [ 'gridTemplateColumns', 'gridTemplateRows', 'gridTemplateAreas', 'gridTemplate', 'gridAutoColumns', 'gridAutoRows', 'gridAutoFlow', 'grid', 'gridRowStart', 'gridColumnStart', 'gridRowEnd', 'gridRow', 'gridColumn', 'gridColumnEnd', 'gridColumnGap', 'gridRowGap', 'gridArea', 'gridGap' ], - 'object-fit': [ 'objectFit', 'objectPosition' ], - 'text-overflow': 'textOverflow', - 'background-img-opts': [ 'backgroundClip', 'backgroundOrigin', 'backgroundSize' ], - 'font-feature': 'fontFeatureSettings', - 'css-boxshadow': 'boxShadow', - multicolumn: [ 'breakAfter', 'breakBefore', 'breakInside', 'columnCount', 'columnFill', 'columnGap', 'columnRule', 'columnRuleColor', 'columnRuleStyle', 'columnRuleWidth', 'columns', 'columnSpan', 'columnWidth', 'columnGap' ] -} diff --git a/modules/dynamic/Prefixer.js b/modules/dynamic/Prefixer.js deleted file mode 100644 index d32f9f7..0000000 --- a/modules/dynamic/Prefixer.js +++ /dev/null @@ -1,154 +0,0 @@ -import prefixValue from '../utils/prefixValue' - -import getBrowserInformation from '../utils/getBrowserInformation' -import getPrefixedKeyframes from '../utils/getPrefixedKeyframes' -import capitalizeString from '../utils/capitalizeString' -import addNewValuesOnly from '../utils/addNewValuesOnly' -import isObject from '../utils/isObject' - -import prefixProps from './prefixProps' -import prefixAll from '../static/prefixAll' - -import calc from './plugins/calc' -import flex from './plugins/flex' -import flexboxIE from './plugins/flexboxIE' -import flexboxOld from './plugins/flexboxOld' -import grabCursor from './plugins/grabCursor' -import gradient from './plugins/gradient' -import position from './plugins/position' -import sizing from './plugins/sizing' -import transition from './plugins/transition' -import zoomCursor from './plugins/zoomCursor' - -const plugins = [ - position, - calc, - zoomCursor, - grabCursor, - sizing, - gradient, - transition, - flexboxIE, - flexboxOld, - flex -] - -export default class Prefixer { - /** - * Instantiante a new prefixer - * @param {string} userAgent - userAgent to gather prefix information according to caniuse.com - * @param {string} keepUnprefixed - keeps unprefixed properties and values - */ - constructor(options = {}) { - const defaultUserAgent = typeof navigator !== 'undefined' ? navigator.userAgent : undefined - - this._userAgent = options.userAgent || defaultUserAgent - this._keepUnprefixed = options.keepUnprefixed || false - - if (this._userAgent) { - this._browserInfo = getBrowserInformation(this._userAgent) - } - - // Checks if the userAgent was resolved correctly - if (this._browserInfo && this._browserInfo.cssPrefix) { - this.prefixedKeyframes = getPrefixedKeyframes( - this._browserInfo.browserName, - this._browserInfo.browserVersion, - this._browserInfo.cssPrefix - ) - } else { - this._useFallback = true - return false - } - - const prefixData = this._browserInfo.browserName && prefixProps[this._browserInfo.browserName] - if (prefixData) { - this._requiresPrefix = {} - - for (const property in prefixData) { - if (prefixData[property] >= this._browserInfo.browserVersion) { - this._requiresPrefix[property] = true - } - } - - this._hasPropsRequiringPrefix = Object.keys(this._requiresPrefix).length > 0 - } else { - this._useFallback = true - } - - this._metaData = { - browserVersion: this._browserInfo.browserVersion, - browserName: this._browserInfo.browserName, - cssPrefix: this._browserInfo.cssPrefix, - jsPrefix: this._browserInfo.jsPrefix, - keepUnprefixed: this._keepUnprefixed, - requiresPrefix: this._requiresPrefix - } - } - - prefix(style: Object): Object { - // use prefixAll as fallback if userAgent can not be resolved - if (this._useFallback) { - return prefixAll(style) - } - - // only add prefixes if needed - if (!this._hasPropsRequiringPrefix) { - return style - } - - return this._prefixStyle(style) - } - - _prefixStyle(style: Object): Object { - for (const property in style) { - const value = style[property] - - // handle nested objects - if (isObject(value)) { - style[property] = this.prefix(value) - // handle array values - } else if (Array.isArray(value)) { - const combinedValue = [] - - for (let i = 0, len = value.length; i < len; ++i) { - const processedValue = prefixValue(plugins, property, value[i], style, this._metaData) - addNewValuesOnly(combinedValue, processedValue || value[i]) - } - - // only modify the value if it was touched - // by any plugin to prevent unnecessary mutations - if (combinedValue.length > 0) { - style[property] = combinedValue - } - } else { - const processedValue = prefixValue(plugins, property, value, style, this._metaData) - - // only modify the value if it was touched - // by any plugin to prevent unnecessary mutations - if (processedValue) { - style[property] = processedValue - } - - // add prefixes to properties - if (this._requiresPrefix[property]) { - style[this._browserInfo.jsPrefix + capitalizeString(property)] = value - if (!this._keepUnprefixed) { - delete style[property] - } - } - } - } - - return style - } - - /** - * Returns a prefixed version of the style object using all vendor prefixes - * @param {Object} styles - Style object that gets prefixed properties added - * @returns {Object} - Style object with prefixed properties and values - */ - static prefixAll(styles) { - return prefixAll(styles) - } -} diff --git a/modules/dynamic/createPrefixer.js b/modules/dynamic/createPrefixer.js new file mode 100644 index 0000000..ae088a2 --- /dev/null +++ b/modules/dynamic/createPrefixer.js @@ -0,0 +1,133 @@ +import getBrowserInformation from '../utils/getBrowserInformation' +import getPrefixedKeyframes from '../utils/getPrefixedKeyframes' +import capitalizeString from '../utils/capitalizeString' +import addNewValuesOnly from '../utils/addNewValuesOnly' +import isObject from '../utils/isObject' +import prefixValue from '../utils/prefixValue' + +export default function createPrefixer( + propertyPrefixMap: Object, + plugins: ?Array = [], + fallback: ?Function = style => style +) { + return class Prefixer { + /** + * Instantiante a new prefixer + * @param {string} userAgent - userAgent to gather prefix information according to caniuse.com + * @param {string} keepUnprefixed - keeps unprefixed properties and values + */ + constructor(options = {}) { + const defaultUserAgent = typeof navigator !== 'undefined' ? navigator.userAgent : undefined + + this._userAgent = options.userAgent || defaultUserAgent + this._keepUnprefixed = options.keepUnprefixed || false + + if (this._userAgent) { + this._browserInfo = getBrowserInformation(this._userAgent) + } + + // Checks if the userAgent was resolved correctly + if (this._browserInfo && this._browserInfo.cssPrefix) { + this.prefixedKeyframes = getPrefixedKeyframes( + this._browserInfo.browserName, + this._browserInfo.browserVersion, + this._browserInfo.cssPrefix + ) + } else { + this._useFallback = true + return false + } + + const prefixData = this._browserInfo.browserName && + propertyPrefixMap[this._browserInfo.browserName] + if (prefixData) { + this._requiresPrefix = {} + + for (const property in prefixData) { + if (prefixData[property] >= this._browserInfo.browserVersion) { + this._requiresPrefix[property] = true + } + } + + this._hasPropsRequiringPrefix = Object.keys(this._requiresPrefix).length > 0 + } else { + this._useFallback = true + } + + this._metaData = { + browserVersion: this._browserInfo.browserVersion, + browserName: this._browserInfo.browserName, + cssPrefix: this._browserInfo.cssPrefix, + jsPrefix: this._browserInfo.jsPrefix, + keepUnprefixed: this._keepUnprefixed, + requiresPrefix: this._requiresPrefix + } + } + + prefix(style: Object): Object { + // use static prefixer as fallback if userAgent can not be resolved + if (this._useFallback) { + return fallback(style) + } + + // only add prefixes if needed + if (!this._hasPropsRequiringPrefix) { + return style + } + + return this._prefixStyle(style) + } + + _prefixStyle(style: Object): Object { + for (const property in style) { + const value = style[property] + + // handle nested objects + if (isObject(value)) { + style[property] = this.prefix(value) + // handle array values + } else if (Array.isArray(value)) { + const combinedValue = [] + + for (let i = 0, len = value.length; i < len; ++i) { + const processedValue = prefixValue(plugins, property, value[i], style, this._metaData) + addNewValuesOnly(combinedValue, processedValue || value[i]) + } + + // only modify the value if it was touched + // by any plugin to prevent unnecessary mutations + if (combinedValue.length > 0) { + style[property] = combinedValue + } + } else { + const processedValue = prefixValue(plugins, property, value, style, this._metaData) + + // only modify the value if it was touched + // by any plugin to prevent unnecessary mutations + if (processedValue) { + style[property] = processedValue + } + + // add prefixes to properties + if (this._requiresPrefix[property]) { + style[this._browserInfo.jsPrefix + capitalizeString(property)] = value + if (!this._keepUnprefixed) { + delete style[property] + } + } + } + } + + return style + } + + /** + * Returns a prefixed version of the style object using all vendor prefixes + * @param {Object} styles - Style object that gets prefixed properties added + * @returns {Object} - Style object with prefixed properties and values + */ + static prefixAll(styles) { + return fallback(styles) + } + } +} diff --git a/modules/dynamic/index.js b/modules/dynamic/index.js new file mode 100644 index 0000000..5f3b1c9 --- /dev/null +++ b/modules/dynamic/index.js @@ -0,0 +1,8 @@ +import createPrefixer from './createPrefixer' + +import propertyPrefixMap from './propertyPrefixMap' +import plugins from './plugins' + +import fallback from '../static' + +export default createPrefixer(propertyPrefixMap, plugins, fallback) diff --git a/modules/dynamic/plugins/crossFade.js b/modules/dynamic/plugins/crossFade.js new file mode 100644 index 0000000..764fa6e --- /dev/null +++ b/modules/dynamic/plugins/crossFade.js @@ -0,0 +1,26 @@ +/* @flow */ +import getPrefixedValue from '../../utils/getPrefixedValue' + +import type { PluginMetaData } from '../../../flowtypes/PluginMetaData' + +export default function crossFade( + property: string, + value: any, + style: Object, + { browserName, browserVersion, cssPrefix, keepUnprefixed }: PluginMetaData +): ?Array | ?any { + if ( + typeof value === 'string' && + value.indexOf('cross-fade(') > -1 && + (browserName === 'chrome' || + browserName === 'opera' || + browserName === 'and_chr' || + (browserName === 'ios_saf' || browserName === 'safari') && browserVersion < 10) + ) { + return getPrefixedValue( + value.replace(/cross-fade\(/g, `${cssPrefix}cross-fade(`), + value, + keepUnprefixed + ) + } +} diff --git a/modules/dynamic/plugins/filter.js b/modules/dynamic/plugins/filter.js new file mode 100644 index 0000000..2d86409 --- /dev/null +++ b/modules/dynamic/plugins/filter.js @@ -0,0 +1,23 @@ +/* @flow */ +import getPrefixedValue from '../../utils/getPrefixedValue' + +import type { PluginMetaData } from '../../../flowtypes/PluginMetaData' + +export default function filter( + property: string, + value: any, + style: Object, + { browserName, browserVersion, cssPrefix, keepUnprefixed }: PluginMetaData +): ?Array | ?any { + if ( + typeof value === 'string' && + value.indexOf('filter(') > -1 && + (browserName === 'ios_saf' || browserName === 'safari' && browserVersion < 9.1) + ) { + return getPrefixedValue( + value.replace(/filter\(/g, `${cssPrefix}filter(`), + value, + keepUnprefixed + ) + } +} diff --git a/modules/dynamic/plugins/flexboxIE.js b/modules/dynamic/plugins/flexboxIE.js index 00e048b..9bd67d2 100644 --- a/modules/dynamic/plugins/flexboxIE.js +++ b/modules/dynamic/plugins/flexboxIE.js @@ -26,18 +26,26 @@ export default function flexboxIE( property: string, value: any, style: Object, - { browserName, browserVersion, cssPrefix, keepUnprefixed }: PluginMetaData + { browserName, browserVersion, cssPrefix, keepUnprefixed, requiresPrefix }: PluginMetaData ): ?Array | ?any { if ( (alternativeProps[property] || - property === 'display' && typeof value === 'string' && value.indexOf('flex') > -1) && + property === 'display' && + typeof value === 'string' && + value.indexOf('flex') > -1) && ((browserName === 'ie_mob' || browserName === 'ie') && browserVersion === 10) ) { + delete requiresPrefix[property] + if (!keepUnprefixed && !Array.isArray(style[property])) { delete style[property] } if (property === 'display' && alternativeValues[value]) { - return getPrefixedValue(cssPrefix + alternativeValues[value], value, keepUnprefixed) + return getPrefixedValue( + cssPrefix + alternativeValues[value], + value, + keepUnprefixed + ) } if (alternativeProps[property]) { style[alternativeProps[property]] = alternativeValues[value] || value diff --git a/modules/dynamic/plugins/flexboxOld.js b/modules/dynamic/plugins/flexboxOld.js index 14a7713..0b6e8fb 100644 --- a/modules/dynamic/plugins/flexboxOld.js +++ b/modules/dynamic/plugins/flexboxOld.js @@ -35,17 +35,22 @@ export default function flexboxOld( property: string, value: any, style: Object, - { browserName, browserVersion, cssPrefix, keepUnprefixed }: PluginMetaData + { browserName, browserVersion, cssPrefix, keepUnprefixed, requiresPrefix }: PluginMetaData ): ?Array | ?any { if ( (properties.indexOf(property) > -1 || - property === 'display' && typeof value === 'string' && value.indexOf('flex') > -1) && + property === 'display' && + typeof value === 'string' && + value.indexOf('flex') > -1) && (browserName === 'firefox' && browserVersion < 22 || browserName === 'chrome' && browserVersion < 21 || - (browserName === 'safari' || browserName === 'ios_saf') && browserVersion <= 6.1 || + (browserName === 'safari' || browserName === 'ios_saf') && + browserVersion <= 6.1 || browserName === 'android' && browserVersion < 4.4 || browserName === 'and_uc') ) { + delete requiresPrefix[property] + if (!keepUnprefixed && !Array.isArray(style[property])) { delete style[property] } @@ -62,7 +67,11 @@ export default function flexboxOld( } } if (property === 'display' && alternativeValues[value]) { - return getPrefixedValue(cssPrefix + alternativeValues[value], value, keepUnprefixed) + return getPrefixedValue( + cssPrefix + alternativeValues[value], + value, + keepUnprefixed + ) } if (alternativeProps[property]) { style[alternativeProps[property]] = alternativeValues[value] || value diff --git a/modules/dynamic/plugins/imageSet.js b/modules/dynamic/plugins/imageSet.js new file mode 100644 index 0000000..9a8bff4 --- /dev/null +++ b/modules/dynamic/plugins/imageSet.js @@ -0,0 +1,28 @@ +/* @flow */ +import getPrefixedValue from '../../utils/getPrefixedValue' + +import type { PluginMetaData } from '../../../flowtypes/PluginMetaData' + +export default function imageSet( + property: string, + value: any, + style: Object, + { browserName, cssPrefix, keepUnprefixed }: PluginMetaData +): ?Array | ?any { + if ( + typeof value === 'string' && + value.indexOf('image-set(') > -1 && + (browserName === 'chrome' || + browserName === 'opera' || + browserName === 'and_chr' || + browserName === 'and_uc' || + browserName === 'ios_saf' || + browserName === 'safari') + ) { + return getPrefixedValue( + value.replace(/image-set\(/g, `${cssPrefix}image-set(`), + value, + keepUnprefixed + ) + } +} diff --git a/modules/dynamic/plugins/index.js b/modules/dynamic/plugins/index.js new file mode 100644 index 0000000..4c47e2e --- /dev/null +++ b/modules/dynamic/plugins/index.js @@ -0,0 +1,45 @@ +import calc from './calc' +import crossFade from './crossFade' +import filter from './filter' +import flex from './flex' +import flexboxIE from './flexboxIE' +import flexboxOld from './flexboxOld' +import grabCursor from './grabCursor' +import gradient from './gradient' +import imageSet from './imageSet' +import position from './position' +import sizing from './sizing' +import transition from './transition' +import zoomCursor from './zoomCursor' + +export default [ + position, + calc, + imageSet, + crossFade, + filter, + grabCursor, + zoomCursor, + sizing, + gradient, + transition, + flexboxIE, + flexboxOld, + flex +] + +export { + position, + calc, + imageSet, + crossFade, + filter, + grabCursor, + zoomCursor, + sizing, + gradient, + transition, + flexboxIE, + flexboxOld, + flex +} diff --git a/modules/dynamic/plugins/transition.js b/modules/dynamic/plugins/transition.js index 49f1927..9b904a3 100644 --- a/modules/dynamic/plugins/transition.js +++ b/modules/dynamic/plugins/transition.js @@ -1,30 +1,30 @@ /* @flow */ import hyphenateStyleName from 'hyphenate-style-name' - -import unprefixProperty from '../../utils/unprefixProperty' - import type { PluginMetaData } from '../../../flowtypes/PluginMetaData' const properties = { transition: true, - transitionProperty: true + transitionProperty: true, + WebkitTransition: true, + WebkitTransitionProperty: true, + MozTransition: true, + MozTransitionProperty: true } let requiresPrefixDashCased: Array - +// TODO: extract population export default function transition( property: string, value: any, style: Object, { cssPrefix, keepUnprefixed, requiresPrefix }: PluginMetaData ): ?Array | ?any { - // also check for already prefixed transitions - const unprefixedProperty = unprefixProperty(property) - - if (typeof value === 'string' && properties[unprefixedProperty]) { + if (typeof value === 'string' && properties[property]) { // memoize the prefix array for later use if (!requiresPrefixDashCased) { - requiresPrefixDashCased = Object.keys(requiresPrefix).map(prop => hyphenateStyleName(prop)) + requiresPrefixDashCased = Object + .keys(requiresPrefix) + .map(prop => hyphenateStyleName(prop)) } // only split multi values, not cubic beziers diff --git a/modules/dynamic/prefixProps.js b/modules/dynamic/prefixProps.js deleted file mode 100644 index cb3be66..0000000 --- a/modules/dynamic/prefixProps.js +++ /dev/null @@ -1 +0,0 @@ -export default {"chrome":{"transform":35,"transformOrigin":35,"transformOriginX":35,"transformOriginY":35,"backfaceVisibility":35,"perspective":35,"perspectiveOrigin":35,"transformStyle":35,"transformOriginZ":35,"animation":42,"animationDelay":42,"animationDirection":42,"animationFillMode":42,"animationDuration":42,"animationIterationCount":42,"animationName":42,"animationPlayState":42,"animationTimingFunction":42,"appearance":59,"userSelect":53,"fontKerning":32,"textEmphasisPosition":59,"textEmphasis":59,"textEmphasisStyle":59,"textEmphasisColor":59,"boxDecorationBreak":59,"clipPath":54,"maskImage":59,"maskMode":59,"maskRepeat":59,"maskPosition":59,"maskClip":59,"maskOrigin":59,"maskSize":59,"maskComposite":59,"mask":59,"maskBorderSource":59,"maskBorderMode":59,"maskBorderSlice":59,"maskBorderWidth":59,"maskBorderOutset":59,"maskBorderRepeat":59,"maskBorder":59,"maskType":59,"textDecorationStyle":56,"textDecorationSkip":56,"textDecorationLine":56,"textDecorationColor":56,"filter":52,"fontFeatureSettings":47,"breakAfter":49,"breakBefore":49,"breakInside":49,"columnCount":49,"columnFill":49,"columnGap":49,"columnRule":49,"columnRuleColor":49,"columnRuleStyle":49,"columnRuleWidth":49,"columns":49,"columnSpan":49,"columnWidth":49},"safari":{"flex":8,"flexBasis":8,"flexDirection":8,"flexGrow":8,"flexFlow":8,"flexShrink":8,"flexWrap":8,"alignContent":8,"alignItems":8,"alignSelf":8,"justifyContent":8,"order":8,"transition":6,"transitionDelay":6,"transitionDuration":6,"transitionProperty":6,"transitionTimingFunction":6,"transform":8,"transformOrigin":8,"transformOriginX":8,"transformOriginY":8,"backfaceVisibility":8,"perspective":8,"perspectiveOrigin":8,"transformStyle":8,"transformOriginZ":8,"animation":8,"animationDelay":8,"animationDirection":8,"animationFillMode":8,"animationDuration":8,"animationIterationCount":8,"animationName":8,"animationPlayState":8,"animationTimingFunction":8,"appearance":10.1,"userSelect":10.1,"backdropFilter":10.1,"fontKerning":9,"scrollSnapType":10.1,"scrollSnapPointsX":10.1,"scrollSnapPointsY":10.1,"scrollSnapDestination":10.1,"scrollSnapCoordinate":10.1,"textEmphasisPosition":7,"textEmphasis":7,"textEmphasisStyle":7,"textEmphasisColor":7,"boxDecorationBreak":10.1,"clipPath":10.1,"maskImage":10.1,"maskMode":10.1,"maskRepeat":10.1,"maskPosition":10.1,"maskClip":10.1,"maskOrigin":10.1,"maskSize":10.1,"maskComposite":10.1,"mask":10.1,"maskBorderSource":10.1,"maskBorderMode":10.1,"maskBorderSlice":10.1,"maskBorderWidth":10.1,"maskBorderOutset":10.1,"maskBorderRepeat":10.1,"maskBorder":10.1,"maskType":10.1,"textDecorationStyle":10.1,"textDecorationSkip":10.1,"textDecorationLine":10.1,"textDecorationColor":10.1,"shapeImageThreshold":10,"shapeImageMargin":10,"shapeImageOutside":10,"filter":9,"hyphens":10.1,"flowInto":10.1,"flowFrom":10.1,"breakBefore":8,"breakAfter":8,"breakInside":8,"regionFragment":10.1,"columnCount":8,"columnFill":8,"columnGap":8,"columnRule":8,"columnRuleColor":8,"columnRuleStyle":8,"columnRuleWidth":8,"columns":8,"columnSpan":8,"columnWidth":8},"firefox":{"appearance":54,"userSelect":54,"boxSizing":28,"textAlignLast":48,"textDecorationStyle":35,"textDecorationSkip":35,"textDecorationLine":35,"textDecorationColor":35,"tabSize":54,"hyphens":42,"fontFeatureSettings":33,"breakAfter":51,"breakBefore":51,"breakInside":51,"columnCount":51,"columnFill":51,"columnGap":51,"columnRule":51,"columnRuleColor":51,"columnRuleStyle":51,"columnRuleWidth":51,"columns":51,"columnSpan":51,"columnWidth":51},"opera":{"flex":16,"flexBasis":16,"flexDirection":16,"flexGrow":16,"flexFlow":16,"flexShrink":16,"flexWrap":16,"alignContent":16,"alignItems":16,"alignSelf":16,"justifyContent":16,"order":16,"transform":22,"transformOrigin":22,"transformOriginX":22,"transformOriginY":22,"backfaceVisibility":22,"perspective":22,"perspectiveOrigin":22,"transformStyle":22,"transformOriginZ":22,"animation":29,"animationDelay":29,"animationDirection":29,"animationFillMode":29,"animationDuration":29,"animationIterationCount":29,"animationName":29,"animationPlayState":29,"animationTimingFunction":29,"appearance":44,"userSelect":40,"fontKerning":19,"textEmphasisPosition":44,"textEmphasis":44,"textEmphasisStyle":44,"textEmphasisColor":44,"boxDecorationBreak":44,"clipPath":41,"maskImage":44,"maskMode":44,"maskRepeat":44,"maskPosition":44,"maskClip":44,"maskOrigin":44,"maskSize":44,"maskComposite":44,"mask":44,"maskBorderSource":44,"maskBorderMode":44,"maskBorderSlice":44,"maskBorderWidth":44,"maskBorderOutset":44,"maskBorderRepeat":44,"maskBorder":44,"maskType":44,"textDecorationStyle":43,"textDecorationSkip":43,"textDecorationLine":43,"textDecorationColor":43,"filter":39,"fontFeatureSettings":34,"breakAfter":36,"breakBefore":36,"breakInside":36,"columnCount":36,"columnFill":36,"columnGap":36,"columnRule":36,"columnRuleColor":36,"columnRuleStyle":36,"columnRuleWidth":36,"columns":36,"columnSpan":36,"columnWidth":36},"ie":{"flex":10,"flexDirection":10,"flexFlow":10,"flexWrap":10,"transform":9,"transformOrigin":9,"transformOriginX":9,"transformOriginY":9,"userSelect":11,"wrapFlow":11,"wrapThrough":11,"wrapMargin":11,"scrollSnapType":11,"scrollSnapPointsX":11,"scrollSnapPointsY":11,"scrollSnapDestination":11,"scrollSnapCoordinate":11,"touchAction":10,"hyphens":11,"flowInto":11,"flowFrom":11,"breakBefore":11,"breakAfter":11,"breakInside":11,"regionFragment":11,"gridTemplateColumns":11,"gridTemplateRows":11,"gridTemplateAreas":11,"gridTemplate":11,"gridAutoColumns":11,"gridAutoRows":11,"gridAutoFlow":11,"grid":11,"gridRowStart":11,"gridColumnStart":11,"gridRowEnd":11,"gridRow":11,"gridColumn":11,"gridColumnEnd":11,"gridColumnGap":11,"gridRowGap":11,"gridArea":11,"gridGap":11,"textSizeAdjust":11},"edge":{"userSelect":15,"wrapFlow":15,"wrapThrough":15,"wrapMargin":15,"scrollSnapType":15,"scrollSnapPointsX":15,"scrollSnapPointsY":15,"scrollSnapDestination":15,"scrollSnapCoordinate":15,"hyphens":15,"flowInto":15,"flowFrom":15,"breakBefore":15,"breakAfter":15,"breakInside":15,"regionFragment":15,"gridTemplateColumns":15,"gridTemplateRows":15,"gridTemplateAreas":15,"gridTemplate":15,"gridAutoColumns":15,"gridAutoRows":15,"gridAutoFlow":15,"grid":15,"gridRowStart":15,"gridColumnStart":15,"gridRowEnd":15,"gridRow":15,"gridColumn":15,"gridColumnEnd":15,"gridColumnGap":15,"gridRowGap":15,"gridArea":15,"gridGap":15},"ios_saf":{"flex":8.1,"flexBasis":8.1,"flexDirection":8.1,"flexGrow":8.1,"flexFlow":8.1,"flexShrink":8.1,"flexWrap":8.1,"alignContent":8.1,"alignItems":8.1,"alignSelf":8.1,"justifyContent":8.1,"order":8.1,"transition":6,"transitionDelay":6,"transitionDuration":6,"transitionProperty":6,"transitionTimingFunction":6,"transform":8.1,"transformOrigin":8.1,"transformOriginX":8.1,"transformOriginY":8.1,"backfaceVisibility":8.1,"perspective":8.1,"perspectiveOrigin":8.1,"transformStyle":8.1,"transformOriginZ":8.1,"animation":8.1,"animationDelay":8.1,"animationDirection":8.1,"animationFillMode":8.1,"animationDuration":8.1,"animationIterationCount":8.1,"animationName":8.1,"animationPlayState":8.1,"animationTimingFunction":8.1,"appearance":10,"userSelect":10,"backdropFilter":10,"fontKerning":10,"scrollSnapType":10,"scrollSnapPointsX":10,"scrollSnapPointsY":10,"scrollSnapDestination":10,"scrollSnapCoordinate":10,"boxDecorationBreak":10,"clipPath":10,"maskImage":10,"maskMode":10,"maskRepeat":10,"maskPosition":10,"maskClip":10,"maskOrigin":10,"maskSize":10,"maskComposite":10,"mask":10,"maskBorderSource":10,"maskBorderMode":10,"maskBorderSlice":10,"maskBorderWidth":10,"maskBorderOutset":10,"maskBorderRepeat":10,"maskBorder":10,"maskType":10,"textSizeAdjust":10,"textDecorationStyle":10,"textDecorationSkip":10,"textDecorationLine":10,"textDecorationColor":10,"shapeImageThreshold":10,"shapeImageMargin":10,"shapeImageOutside":10,"filter":9,"hyphens":10,"flowInto":10,"flowFrom":10,"breakBefore":8.1,"breakAfter":8.1,"breakInside":8.1,"regionFragment":10,"columnCount":8.1,"columnFill":8.1,"columnGap":8.1,"columnRule":8.1,"columnRuleColor":8.1,"columnRuleStyle":8.1,"columnRuleWidth":8.1,"columns":8.1,"columnSpan":8.1,"columnWidth":8.1},"android":{"flex":4.2,"flexBasis":4.2,"flexDirection":4.2,"flexGrow":4.2,"flexFlow":4.2,"flexShrink":4.2,"flexWrap":4.2,"alignContent":4.2,"alignItems":4.2,"alignSelf":4.2,"justifyContent":4.2,"order":4.2,"transition":4.2,"transitionDelay":4.2,"transitionDuration":4.2,"transitionProperty":4.2,"transitionTimingFunction":4.2,"transform":4.4,"transformOrigin":4.4,"transformOriginX":4.4,"transformOriginY":4.4,"backfaceVisibility":4.4,"perspective":4.4,"perspectiveOrigin":4.4,"transformStyle":4.4,"transformOriginZ":4.4,"animation":4.4,"animationDelay":4.4,"animationDirection":4.4,"animationFillMode":4.4,"animationDuration":4.4,"animationIterationCount":4.4,"animationName":4.4,"animationPlayState":4.4,"animationTimingFunction":4.4,"appearance":53,"userSelect":53,"fontKerning":4.4,"textEmphasisPosition":53,"textEmphasis":53,"textEmphasisStyle":53,"textEmphasisColor":53,"boxDecorationBreak":53,"clipPath":53,"maskImage":53,"maskMode":53,"maskRepeat":53,"maskPosition":53,"maskClip":53,"maskOrigin":53,"maskSize":53,"maskComposite":53,"mask":53,"maskBorderSource":53,"maskBorderMode":53,"maskBorderSlice":53,"maskBorderWidth":53,"maskBorderOutset":53,"maskBorderRepeat":53,"maskBorder":53,"maskType":53,"filter":4.4,"fontFeatureSettings":4.4,"breakAfter":53,"breakBefore":53,"breakInside":53,"columnCount":53,"columnFill":53,"columnGap":53,"columnRule":53,"columnRuleColor":53,"columnRuleStyle":53,"columnRuleWidth":53,"columns":53,"columnSpan":53,"columnWidth":53},"and_chr":{"appearance":55,"textEmphasisPosition":55,"textEmphasis":55,"textEmphasisStyle":55,"textEmphasisColor":55,"boxDecorationBreak":55,"maskImage":55,"maskMode":55,"maskRepeat":55,"maskPosition":55,"maskClip":55,"maskOrigin":55,"maskSize":55,"maskComposite":55,"mask":55,"maskBorderSource":55,"maskBorderMode":55,"maskBorderSlice":55,"maskBorderWidth":55,"maskBorderOutset":55,"maskBorderRepeat":55,"maskBorder":55,"maskType":55,"textDecorationStyle":55,"textDecorationSkip":55,"textDecorationLine":55,"textDecorationColor":55},"and_uc":{"flex":11,"flexBasis":11,"flexDirection":11,"flexGrow":11,"flexFlow":11,"flexShrink":11,"flexWrap":11,"alignContent":11,"alignItems":11,"alignSelf":11,"justifyContent":11,"order":11,"transition":11,"transitionDelay":11,"transitionDuration":11,"transitionProperty":11,"transitionTimingFunction":11,"transform":11,"transformOrigin":11,"transformOriginX":11,"transformOriginY":11,"backfaceVisibility":11,"perspective":11,"perspectiveOrigin":11,"transformStyle":11,"transformOriginZ":11,"animation":11,"animationDelay":11,"animationDirection":11,"animationFillMode":11,"animationDuration":11,"animationIterationCount":11,"animationName":11,"animationPlayState":11,"animationTimingFunction":11,"appearance":11,"userSelect":11,"fontKerning":11,"textEmphasisPosition":11,"textEmphasis":11,"textEmphasisStyle":11,"textEmphasisColor":11,"maskImage":11,"maskMode":11,"maskRepeat":11,"maskPosition":11,"maskClip":11,"maskOrigin":11,"maskSize":11,"maskComposite":11,"mask":11,"maskBorderSource":11,"maskBorderMode":11,"maskBorderSlice":11,"maskBorderWidth":11,"maskBorderOutset":11,"maskBorderRepeat":11,"maskBorder":11,"maskType":11,"textSizeAdjust":11,"filter":11,"hyphens":11,"flowInto":11,"flowFrom":11,"breakBefore":11,"breakAfter":11,"breakInside":11,"regionFragment":11,"fontFeatureSettings":11,"columnCount":11,"columnFill":11,"columnGap":11,"columnRule":11,"columnRuleColor":11,"columnRuleStyle":11,"columnRuleWidth":11,"columns":11,"columnSpan":11,"columnWidth":11},"op_mini":{}} \ No newline at end of file diff --git a/modules/dynamic/propertyPrefixMap.js b/modules/dynamic/propertyPrefixMap.js new file mode 100644 index 0000000..ac95afa --- /dev/null +++ b/modules/dynamic/propertyPrefixMap.js @@ -0,0 +1 @@ +export default {"chrome":{"appearance":59,"userSelect":53,"textEmphasisPosition":59,"textEmphasis":59,"textEmphasisStyle":59,"textEmphasisColor":59,"boxDecorationBreak":59,"clipPath":54,"maskImage":59,"maskMode":59,"maskRepeat":59,"maskPosition":59,"maskClip":59,"maskOrigin":59,"maskSize":59,"maskComposite":59,"mask":59,"maskBorderSource":59,"maskBorderMode":59,"maskBorderSlice":59,"maskBorderWidth":59,"maskBorderOutset":59,"maskBorderRepeat":59,"maskBorder":59,"maskType":59,"textDecorationStyle":56,"textDecorationSkip":56,"textDecorationLine":56,"textDecorationColor":56,"filter":52,"fontFeatureSettings":47,"breakAfter":49,"breakBefore":49,"breakInside":49,"columnCount":49,"columnFill":49,"columnGap":49,"columnRule":49,"columnRuleColor":49,"columnRuleStyle":49,"columnRuleWidth":49,"columns":49,"columnSpan":49,"columnWidth":49},"safari":{"flex":8,"flexBasis":8,"flexDirection":8,"flexGrow":8,"flexFlow":8,"flexShrink":8,"flexWrap":8,"alignContent":8,"alignItems":8,"alignSelf":8,"justifyContent":8,"order":8,"transform":8,"transformOrigin":8,"transformOriginX":8,"transformOriginY":8,"backfaceVisibility":8,"perspective":8,"perspectiveOrigin":8,"transformStyle":8,"transformOriginZ":8,"animation":8,"animationDelay":8,"animationDirection":8,"animationFillMode":8,"animationDuration":8,"animationIterationCount":8,"animationName":8,"animationPlayState":8,"animationTimingFunction":8,"appearance":10.1,"userSelect":10.1,"backdropFilter":10.1,"fontKerning":9,"scrollSnapType":10.1,"scrollSnapPointsX":10.1,"scrollSnapPointsY":10.1,"scrollSnapDestination":10.1,"scrollSnapCoordinate":10.1,"boxDecorationBreak":10.1,"clipPath":10.1,"maskImage":10.1,"maskMode":10.1,"maskRepeat":10.1,"maskPosition":10.1,"maskClip":10.1,"maskOrigin":10.1,"maskSize":10.1,"maskComposite":10.1,"mask":10.1,"maskBorderSource":10.1,"maskBorderMode":10.1,"maskBorderSlice":10.1,"maskBorderWidth":10.1,"maskBorderOutset":10.1,"maskBorderRepeat":10.1,"maskBorder":10.1,"maskType":10.1,"textDecorationStyle":10.1,"textDecorationSkip":10.1,"textDecorationLine":10.1,"textDecorationColor":10.1,"shapeImageThreshold":10,"shapeImageMargin":10,"shapeImageOutside":10,"filter":9,"hyphens":10.1,"flowInto":10.1,"flowFrom":10.1,"breakBefore":8,"breakAfter":8,"breakInside":8,"regionFragment":10.1,"columnCount":8,"columnFill":8,"columnGap":8,"columnRule":8,"columnRuleColor":8,"columnRuleStyle":8,"columnRuleWidth":8,"columns":8,"columnSpan":8,"columnWidth":8},"firefox":{"borderRadius":3.6,"borderImage":14,"borderImageOutset":14,"borderImageRepeat":14,"borderImageSlice":14,"borderImageSource":14,"borderImageWidth":14,"flex":21,"flexBasis":21,"flexDirection":21,"flexGrow":21,"flexFlow":21,"flexShrink":21,"flexWrap":21,"alignContent":21,"alignItems":21,"alignSelf":21,"justifyContent":21,"order":21,"transition":15,"transitionDelay":15,"transitionDuration":15,"transitionProperty":15,"transitionTimingFunction":15,"transform":15,"transformOrigin":15,"transformOriginX":15,"transformOriginY":15,"backfaceVisibility":15,"perspective":15,"perspectiveOrigin":15,"transformStyle":15,"transformOriginZ":15,"animation":15,"animationDelay":15,"animationDirection":15,"animationFillMode":15,"animationDuration":15,"animationIterationCount":15,"animationName":15,"animationPlayState":15,"animationTimingFunction":15,"appearance":54,"userSelect":54,"boxSizing":28,"textAlignLast":48,"textDecorationStyle":35,"textDecorationSkip":35,"textDecorationLine":35,"textDecorationColor":35,"tabSize":54,"resize":4,"hyphens":42,"backgroundClip":3.6,"backgroundOrigin":3.6,"backgroundSize":3.6,"fontFeatureSettings":33,"boxShadow":3.6,"breakAfter":51,"breakBefore":51,"breakInside":51,"columnCount":51,"columnFill":51,"columnGap":51,"columnRule":51,"columnRuleColor":51,"columnRuleStyle":51,"columnRuleWidth":51,"columns":51,"columnSpan":51,"columnWidth":51},"opera":{"flex":16,"flexBasis":16,"flexDirection":16,"flexGrow":16,"flexFlow":16,"flexShrink":16,"flexWrap":16,"alignContent":16,"alignItems":16,"alignSelf":16,"justifyContent":16,"order":16,"transform":22,"transformOrigin":22,"transformOriginX":22,"transformOriginY":22,"backfaceVisibility":22,"perspective":22,"perspectiveOrigin":22,"transformStyle":22,"transformOriginZ":22,"animation":29,"animationDelay":29,"animationDirection":29,"animationFillMode":29,"animationDuration":29,"animationIterationCount":29,"animationName":29,"animationPlayState":29,"animationTimingFunction":29,"appearance":44,"userSelect":40,"fontKerning":19,"textEmphasisPosition":44,"textEmphasis":44,"textEmphasisStyle":44,"textEmphasisColor":44,"boxDecorationBreak":44,"clipPath":41,"maskImage":44,"maskMode":44,"maskRepeat":44,"maskPosition":44,"maskClip":44,"maskOrigin":44,"maskSize":44,"maskComposite":44,"mask":44,"maskBorderSource":44,"maskBorderMode":44,"maskBorderSlice":44,"maskBorderWidth":44,"maskBorderOutset":44,"maskBorderRepeat":44,"maskBorder":44,"maskType":44,"textDecorationStyle":43,"textDecorationSkip":43,"textDecorationLine":43,"textDecorationColor":43,"filter":39,"fontFeatureSettings":34,"breakAfter":36,"breakBefore":36,"breakInside":36,"columnCount":36,"columnFill":36,"columnGap":36,"columnRule":36,"columnRuleColor":36,"columnRuleStyle":36,"columnRuleWidth":36,"columns":36,"columnSpan":36,"columnWidth":36},"ie":{"userSelect":11,"wrapFlow":11,"wrapThrough":11,"wrapMargin":11,"scrollSnapType":11,"scrollSnapPointsX":11,"scrollSnapPointsY":11,"scrollSnapDestination":11,"scrollSnapCoordinate":11,"hyphens":11,"flowInto":11,"flowFrom":11,"breakBefore":11,"breakAfter":11,"breakInside":11,"regionFragment":11,"gridTemplateColumns":11,"gridTemplateRows":11,"gridTemplateAreas":11,"gridTemplate":11,"gridAutoColumns":11,"gridAutoRows":11,"gridAutoFlow":11,"grid":11,"gridRowStart":11,"gridColumnStart":11,"gridRowEnd":11,"gridRow":11,"gridColumn":11,"gridColumnEnd":11,"gridColumnGap":11,"gridRowGap":11,"gridArea":11,"gridGap":11,"textSizeAdjust":11},"edge":{"userSelect":15,"wrapFlow":15,"wrapThrough":15,"wrapMargin":15,"scrollSnapType":15,"scrollSnapPointsX":15,"scrollSnapPointsY":15,"scrollSnapDestination":15,"scrollSnapCoordinate":15,"hyphens":15,"flowInto":15,"flowFrom":15,"breakBefore":15,"breakAfter":15,"breakInside":15,"regionFragment":15,"gridTemplateColumns":15,"gridTemplateRows":15,"gridTemplateAreas":15,"gridTemplate":15,"gridAutoColumns":15,"gridAutoRows":15,"gridAutoFlow":15,"grid":15,"gridRowStart":15,"gridColumnStart":15,"gridRowEnd":15,"gridRow":15,"gridColumn":15,"gridColumnEnd":15,"gridColumnGap":15,"gridRowGap":15,"gridArea":15,"gridGap":15},"ios_saf":{"flex":8.1,"flexBasis":8.1,"flexDirection":8.1,"flexGrow":8.1,"flexFlow":8.1,"flexShrink":8.1,"flexWrap":8.1,"alignContent":8.1,"alignItems":8.1,"alignSelf":8.1,"justifyContent":8.1,"order":8.1,"transform":8.1,"transformOrigin":8.1,"transformOriginX":8.1,"transformOriginY":8.1,"backfaceVisibility":8.1,"perspective":8.1,"perspectiveOrigin":8.1,"transformStyle":8.1,"transformOriginZ":8.1,"animation":8.1,"animationDelay":8.1,"animationDirection":8.1,"animationFillMode":8.1,"animationDuration":8.1,"animationIterationCount":8.1,"animationName":8.1,"animationPlayState":8.1,"animationTimingFunction":8.1,"appearance":10,"userSelect":10,"backdropFilter":10,"fontKerning":10,"scrollSnapType":10,"scrollSnapPointsX":10,"scrollSnapPointsY":10,"scrollSnapDestination":10,"scrollSnapCoordinate":10,"boxDecorationBreak":10,"clipPath":10,"maskImage":10,"maskMode":10,"maskRepeat":10,"maskPosition":10,"maskClip":10,"maskOrigin":10,"maskSize":10,"maskComposite":10,"mask":10,"maskBorderSource":10,"maskBorderMode":10,"maskBorderSlice":10,"maskBorderWidth":10,"maskBorderOutset":10,"maskBorderRepeat":10,"maskBorder":10,"maskType":10,"textSizeAdjust":10,"textDecorationStyle":10,"textDecorationSkip":10,"textDecorationLine":10,"textDecorationColor":10,"shapeImageThreshold":10,"shapeImageMargin":10,"shapeImageOutside":10,"filter":9,"hyphens":10,"flowInto":10,"flowFrom":10,"breakBefore":8.1,"breakAfter":8.1,"breakInside":8.1,"regionFragment":10,"columnCount":8.1,"columnFill":8.1,"columnGap":8.1,"columnRule":8.1,"columnRuleColor":8.1,"columnRuleStyle":8.1,"columnRuleWidth":8.1,"columns":8.1,"columnSpan":8.1,"columnWidth":8.1},"android":{"flex":4.2,"flexBasis":4.2,"flexDirection":4.2,"flexGrow":4.2,"flexFlow":4.2,"flexShrink":4.2,"flexWrap":4.2,"alignContent":4.2,"alignItems":4.2,"alignSelf":4.2,"justifyContent":4.2,"order":4.2,"transition":4.2,"transitionDelay":4.2,"transitionDuration":4.2,"transitionProperty":4.2,"transitionTimingFunction":4.2,"transform":4.4,"transformOrigin":4.4,"transformOriginX":4.4,"transformOriginY":4.4,"backfaceVisibility":4.4,"perspective":4.4,"perspectiveOrigin":4.4,"transformStyle":4.4,"transformOriginZ":4.4,"animation":4.4,"animationDelay":4.4,"animationDirection":4.4,"animationFillMode":4.4,"animationDuration":4.4,"animationIterationCount":4.4,"animationName":4.4,"animationPlayState":4.4,"animationTimingFunction":4.4,"appearance":53,"userSelect":53,"fontKerning":4.4,"textEmphasisPosition":53,"textEmphasis":53,"textEmphasisStyle":53,"textEmphasisColor":53,"boxDecorationBreak":53,"clipPath":53,"maskImage":53,"maskMode":53,"maskRepeat":53,"maskPosition":53,"maskClip":53,"maskOrigin":53,"maskSize":53,"maskComposite":53,"mask":53,"maskBorderSource":53,"maskBorderMode":53,"maskBorderSlice":53,"maskBorderWidth":53,"maskBorderOutset":53,"maskBorderRepeat":53,"maskBorder":53,"maskType":53,"filter":4.4,"fontFeatureSettings":4.4,"breakAfter":53,"breakBefore":53,"breakInside":53,"columnCount":53,"columnFill":53,"columnGap":53,"columnRule":53,"columnRuleColor":53,"columnRuleStyle":53,"columnRuleWidth":53,"columns":53,"columnSpan":53,"columnWidth":53},"and_chr":{"appearance":55,"textEmphasisPosition":55,"textEmphasis":55,"textEmphasisStyle":55,"textEmphasisColor":55,"boxDecorationBreak":55,"maskImage":55,"maskMode":55,"maskRepeat":55,"maskPosition":55,"maskClip":55,"maskOrigin":55,"maskSize":55,"maskComposite":55,"mask":55,"maskBorderSource":55,"maskBorderMode":55,"maskBorderSlice":55,"maskBorderWidth":55,"maskBorderOutset":55,"maskBorderRepeat":55,"maskBorder":55,"maskType":55,"textDecorationStyle":55,"textDecorationSkip":55,"textDecorationLine":55,"textDecorationColor":55},"and_uc":{"flex":11,"flexBasis":11,"flexDirection":11,"flexGrow":11,"flexFlow":11,"flexShrink":11,"flexWrap":11,"alignContent":11,"alignItems":11,"alignSelf":11,"justifyContent":11,"order":11,"transition":11,"transitionDelay":11,"transitionDuration":11,"transitionProperty":11,"transitionTimingFunction":11,"transform":11,"transformOrigin":11,"transformOriginX":11,"transformOriginY":11,"backfaceVisibility":11,"perspective":11,"perspectiveOrigin":11,"transformStyle":11,"transformOriginZ":11,"animation":11,"animationDelay":11,"animationDirection":11,"animationFillMode":11,"animationDuration":11,"animationIterationCount":11,"animationName":11,"animationPlayState":11,"animationTimingFunction":11,"appearance":11,"userSelect":11,"fontKerning":11,"textEmphasisPosition":11,"textEmphasis":11,"textEmphasisStyle":11,"textEmphasisColor":11,"maskImage":11,"maskMode":11,"maskRepeat":11,"maskPosition":11,"maskClip":11,"maskOrigin":11,"maskSize":11,"maskComposite":11,"mask":11,"maskBorderSource":11,"maskBorderMode":11,"maskBorderSlice":11,"maskBorderWidth":11,"maskBorderOutset":11,"maskBorderRepeat":11,"maskBorder":11,"maskType":11,"textSizeAdjust":11,"filter":11,"hyphens":11,"flowInto":11,"flowFrom":11,"breakBefore":11,"breakAfter":11,"breakInside":11,"regionFragment":11,"fontFeatureSettings":11,"columnCount":11,"columnFill":11,"columnGap":11,"columnRule":11,"columnRuleColor":11,"columnRuleStyle":11,"columnRuleWidth":11,"columns":11,"columnSpan":11,"columnWidth":11},"op_mini":{}} \ No newline at end of file diff --git a/modules/generator/index.js b/modules/generator/index.js new file mode 100644 index 0000000..6732f44 --- /dev/null +++ b/modules/generator/index.js @@ -0,0 +1,149 @@ +/* @flow */ +// .getBrowserScope to check for available browsers +// .find to see all keywords +import { getSupport } from 'caniuse-api' +import propertyKeywordMap from './propertyKeywordMap' + +const prefixBrowserMap = { + chrome: 'Webkit', + safari: 'Webkit', + firefox: 'Moz', + opera: 'Webkit', + ie: 'ms', + edge: 'ms', + ios_saf: 'Webkit', + android: 'Webkit', + and_chr: 'Webkit', + and_uc: 'Webkit', + op_mini: 'Webkit', + ie_mob: 'ms' +} + +const browsers = Object.keys(prefixBrowserMap) + +// remove flexprops from IE +const flexPropsIE = [ + 'alignContent', + 'alignSelf', + 'alignItems', + 'justifyContent', + 'order', + 'flexGrow', + 'flexShrink', + 'flexBasis' +] + +function filterAndRemoveIfEmpty(map: Object, property: string, filter: Function): void { + map[property] = map[property].filter(filter) + + if (map[property].length === 0) { + delete map[property] + } +} + +export function generateStaticPrefixPropertyMap(browserList: Object): Object { + const prefixPropertyMap = {} + + for (const browser in prefixBrowserMap) { + const prefix = prefixBrowserMap[browser] + + for (const keyword in propertyKeywordMap) { + const keywordProperties = [].concat(propertyKeywordMap[keyword]) + const versions = getSupport(keyword) + + for (let i = 0, len = keywordProperties.length; i < len; ++i) { + if (versions[browser].x >= browserList[browser]) { + const property = keywordProperties[i] + if (!prefixPropertyMap[property]) { + prefixPropertyMap[property] = [] + } + + if (prefixPropertyMap[property].indexOf(prefix) === -1) { + prefixPropertyMap[property].push(prefix) + } + } + } + } + } + + // remove flexProps from IE and Firefox due to alternative syntax + for (let i = 0, len = flexPropsIE.length; i < len; ++i) { + filterAndRemoveIfEmpty( + prefixPropertyMap, + flexPropsIE[i], + prefix => prefix !== 'ms' && prefix !== 'Moz' + ) + } + + // remove transition from Moz and Webkit as they are handled + // specially by the transition plugins + filterAndRemoveIfEmpty( + prefixPropertyMap, + 'transition', + prefix => prefix !== 'Moz' && prefix !== 'Webkit' + ) + + // remove WebkitFlexDirection as it does not exist + filterAndRemoveIfEmpty(prefixPropertyMap, 'flexDirection', prefix => prefix !== 'Moz') + + return prefixPropertyMap +} + +export function generateDynamicPrefixPropertyMap(browserList: Object): Object { + const prefixPropertyMap = {} + + for (let i = 0, len = browsers.length; i < len; ++i) { + const browser = browsers[i] + if (!prefixPropertyMap[browser]) { + prefixPropertyMap[browser] = {} + } + + for (const keyword in propertyKeywordMap) { + const keywordProperties = [].concat(propertyKeywordMap[keyword]) + const versions = getSupport(keyword) + + for (let j = 0, kLen = keywordProperties.length; j < kLen; ++j) { + if (versions[browser].x >= browserList[browser]) { + prefixPropertyMap[browser][keywordProperties[j]] = versions[browser].x + } + } + } + } + + prefixPropertyMap.ie = { + ...prefixPropertyMap.ie, + ...prefixPropertyMap.ie_mob + } + + delete prefixPropertyMap.ie_mob + + // remove flexProps from IE due to alternative syntax + for (let i = 0, len = flexPropsIE.length; i < len; ++i) { + delete prefixPropertyMap.ie[flexPropsIE[i]] + // delete prefixPropertyMap.ie[flexPropsIE[i]] + } + + return prefixPropertyMap +} + +export function savePrefixPropertyMap( + prefixPropertyMap: Object, + path: string, + compatibility: ?boolean = false +): void { + /* eslint-disable global-require */ + const fs = require('fs') + /* eslint-enable global-require */ + const exportMode = compatibility ? 'module.exports = ' : 'export default ' + fs.writeFile(path, exportMode + JSON.stringify(prefixPropertyMap), (err) => { + if (err) { + throw err + } + + console.log( + `Successfully saved the prefix property map to "${path}". (compatibility mode: ${compatibility + ? '"on"' + : '"off"'})` + ) + }) +} diff --git a/modules/generator/propertyKeywordMap.js b/modules/generator/propertyKeywordMap.js new file mode 100644 index 0000000..7b88bd5 --- /dev/null +++ b/modules/generator/propertyKeywordMap.js @@ -0,0 +1,158 @@ +export default { + 'border-radius': 'borderRadius', + 'border-image': [ + 'borderImage', + 'borderImageOutset', + 'borderImageRepeat', + 'borderImageSlice', + 'borderImageSource', + 'borderImageWidth' + ], + flexbox: [ + 'flex', + 'flexBasis', + 'flexDirection', + 'flexGrow', + 'flexFlow', + 'flexShrink', + 'flexWrap', + 'alignContent', + 'alignItems', + 'alignSelf', + 'justifyContent', + 'order' + ], + 'css-transitions': [ + 'transition', + 'transitionDelay', + 'transitionDuration', + 'transitionProperty', + 'transitionTimingFunction' + ], + transforms2d: ['transform', 'transformOrigin', 'transformOriginX', 'transformOriginY'], + transforms3d: [ + 'backfaceVisibility', + 'perspective', + 'perspectiveOrigin', + 'transform', + 'transformOrigin', + 'transformStyle', + 'transformOriginX', + 'transformOriginY', + 'transformOriginZ' + ], + 'css-animation': [ + 'animation', + 'animationDelay', + 'animationDirection', + 'animationFillMode', + 'animationDuration', + 'animationIterationCount', + 'animationName', + 'animationPlayState', + 'animationTimingFunction' + ], + 'css-appearance': 'appearance', + 'user-select-none': 'userSelect', + 'css-backdrop-filter': 'backdropFilter', + 'css3-boxsizing': 'boxSizing', + 'font-kerning': 'fontKerning', + 'css-exclusions': ['wrapFlow', 'wrapThrough', 'wrapMargin'], + 'css-snappoints': [ + 'scrollSnapType', + 'scrollSnapPointsX', + 'scrollSnapPointsY', + 'scrollSnapDestination', + 'scrollSnapCoordinate' + ], + 'text-emphasis': [ + 'textEmphasisPosition', + 'textEmphasis', + 'textEmphasisStyle', + 'textEmphasisColor' + ], + 'css-text-align-last': 'textAlignLast', + 'css-boxdecorationbreak': 'boxDecorationBreak', + 'css-clip-path': 'clipPath', + 'css-masks': [ + 'maskImage', + 'maskMode', + 'maskRepeat', + 'maskPosition', + 'maskClip', + 'maskOrigin', + 'maskSize', + 'maskComposite', + 'mask', + 'maskBorderSource', + 'maskBorderMode', + 'maskBorderSlice', + 'maskBorderWidth', + 'maskBorderOutset', + 'maskBorderRepeat', + 'maskBorder', + 'maskType' + ], + 'css-touch-action': 'touchAction', + 'text-size-adjust': 'textSizeAdjust', + 'text-decoration': [ + 'textDecorationStyle', + 'textDecorationSkip', + 'textDecorationLine', + 'textDecorationColor' + ], + 'css-shapes': ['shapeImageThreshold', 'shapeImageMargin', 'shapeImageOutside'], + 'css3-tabsize': 'tabSize', + 'css-filters': 'filter', + 'css-resize': 'resize', + 'css-hyphens': 'hyphens', + 'css-regions': [ + 'flowInto', + 'flowFrom', + 'breakBefore', + 'breakAfter', + 'breakInside', + 'regionFragment' + ], + 'css-grid': [ + 'gridTemplateColumns', + 'gridTemplateRows', + 'gridTemplateAreas', + 'gridTemplate', + 'gridAutoColumns', + 'gridAutoRows', + 'gridAutoFlow', + 'grid', + 'gridRowStart', + 'gridColumnStart', + 'gridRowEnd', + 'gridRow', + 'gridColumn', + 'gridColumnEnd', + 'gridColumnGap', + 'gridRowGap', + 'gridArea', + 'gridGap' + ], + 'object-fit': ['objectFit', 'objectPosition'], + 'text-overflow': 'textOverflow', + 'background-img-opts': ['backgroundClip', 'backgroundOrigin', 'backgroundSize'], + 'font-feature': 'fontFeatureSettings', + 'css-boxshadow': 'boxShadow', + multicolumn: [ + 'breakAfter', + 'breakBefore', + 'breakInside', + 'columnCount', + 'columnFill', + 'columnGap', + 'columnRule', + 'columnRuleColor', + 'columnRuleStyle', + 'columnRuleWidth', + 'columns', + 'columnSpan', + 'columnWidth', + 'columnGap' + ] +} diff --git a/modules/static/createPrefixer.js b/modules/static/createPrefixer.js new file mode 100644 index 0000000..7ae629a --- /dev/null +++ b/modules/static/createPrefixer.js @@ -0,0 +1,62 @@ +/* @flow */ +import prefixProperty from '../utils/prefixProperty' +import prefixValue from '../utils/prefixValue' + +import addNewValuesOnly from '../utils/addNewValuesOnly' +import isObject from '../utils/isObject' + +export default function createPrefixer( + propertyPrefixMap: Object, + plugins: Array = [] +) { + function prefixAll(style: Object): Object { + for (const property in style) { + const value = style[property] + + // handle nested objects + if (isObject(value)) { + style[property] = prefixAll(value) + // handle array values + } else if (Array.isArray(value)) { + const combinedValue = [] + + for (let i = 0, len = value.length; i < len; ++i) { + const processedValue = prefixValue( + plugins, + property, + value[i], + style, + propertyPrefixMap + ) + addNewValuesOnly(combinedValue, processedValue || value[i]) + } + + // only modify the value if it was touched + // by any plugin to prevent unnecessary mutations + if (combinedValue.length > 0) { + style[property] = combinedValue + } + } else { + const processedValue = prefixValue( + plugins, + property, + value, + style, + propertyPrefixMap + ) + + // only modify the value if it was touched + // by any plugin to prevent unnecessary mutations + if (processedValue) { + style[property] = processedValue + } + + prefixProperty(propertyPrefixMap, property, style) + } + } + + return style + } + + return prefixAll +} diff --git a/modules/static/index.js b/modules/static/index.js new file mode 100644 index 0000000..844c6a0 --- /dev/null +++ b/modules/static/index.js @@ -0,0 +1,6 @@ +import createPrefixer from './createPrefixer' + +import propertyPrefixMap from './propertyPrefixMap' +import plugins from './plugins' + +export default createPrefixer(propertyPrefixMap, plugins) diff --git a/modules/static/plugins/crossFade.js b/modules/static/plugins/crossFade.js new file mode 100644 index 0000000..3330906 --- /dev/null +++ b/modules/static/plugins/crossFade.js @@ -0,0 +1,11 @@ +/* @flow */ +import isPrefixedValue from '../../utils/isPrefixedValue' + +// http://caniuse.com/#search=cross-fade +const prefixes = ['-webkit-', ''] + +export default function crossFade(property: string, value: any): ?Array { + if (typeof value === 'string' && !isPrefixedValue(value) && value.indexOf('cross-fade(') > -1) { + return prefixes.map(prefix => value.replace(/cross-fade\(/g, `${prefix}cross-fade(`)) + } +} diff --git a/modules/static/plugins/filter.js b/modules/static/plugins/filter.js new file mode 100644 index 0000000..c2f6aa2 --- /dev/null +++ b/modules/static/plugins/filter.js @@ -0,0 +1,11 @@ +/* @flow */ +import isPrefixedValue from '../../utils/isPrefixedValue' + +// http://caniuse.com/#feat=css-filter-function +const prefixes = ['-webkit-', ''] + +export default function filter(property: string, value: any): ?Array { + if (typeof value === 'string' && !isPrefixedValue(value) && value.indexOf('filter(') > -1) { + return prefixes.map(prefix => value.replace(/filter\(/g, `${prefix}filter(`)) + } +} diff --git a/modules/static/plugins/gradient.js b/modules/static/plugins/gradient.js index b493333..487f70d 100644 --- a/modules/static/plugins/gradient.js +++ b/modules/static/plugins/gradient.js @@ -1,16 +1,11 @@ /* @flow */ - import isPrefixedValue from '../../utils/isPrefixedValue' const prefixes = ['-webkit-', '-moz-', ''] const values = /linear-gradient|radial-gradient|repeating-linear-gradient|repeating-radial-gradient/ export default function gradient(property: string, value: any): ?Array { - if ( - typeof value === 'string' && - !isPrefixedValue(value) && - value.match(values) !== null - ) { + if (typeof value === 'string' && !isPrefixedValue(value) && value.match(values) !== null) { return prefixes.map(prefix => prefix + value) } } diff --git a/modules/static/plugins/imageSet.js b/modules/static/plugins/imageSet.js new file mode 100644 index 0000000..7c3c54b --- /dev/null +++ b/modules/static/plugins/imageSet.js @@ -0,0 +1,11 @@ +/* @flow */ +import isPrefixedValue from '../../utils/isPrefixedValue' + +// http://caniuse.com/#feat=css-image-set +const prefixes = ['-webkit-', ''] + +export default function imageSet(property: string, value: any): ?Array { + if (typeof value === 'string' && !isPrefixedValue(value) && value.indexOf('image-set(') > -1) { + return prefixes.map(prefix => value.replace(/image-set\(/g, `${prefix}image-set(`)) + } +} diff --git a/modules/static/plugins/index.js b/modules/static/plugins/index.js new file mode 100644 index 0000000..e2a9d3a --- /dev/null +++ b/modules/static/plugins/index.js @@ -0,0 +1,42 @@ +import calc from './calc' +import cursor from './cursor' +import crossFade from './crossFade' +import filter from './filter' +import flex from './flex' +import flexboxIE from './flexboxIE' +import flexboxOld from './flexboxOld' +import gradient from './gradient' +import imageSet from './imageSet' +import position from './position' +import sizing from './sizing' +import transition from './transition' + +export default [ + position, + calc, + imageSet, + crossFade, + filter, + cursor, + sizing, + gradient, + transition, + flexboxIE, + flexboxOld, + flex +] + +export { + position, + calc, + cursor, + sizing, + imageSet, + crossFade, + filter, + gradient, + transition, + flexboxIE, + flexboxOld, + flex +} diff --git a/modules/static/plugins/transition.js b/modules/static/plugins/transition.js index 8cb0284..5e3db59 100644 --- a/modules/static/plugins/transition.js +++ b/modules/static/plugins/transition.js @@ -3,13 +3,14 @@ import hyphenateStyleName from 'hyphenate-style-name' import capitalizeString from '../../utils/capitalizeString' import isPrefixedValue from '../../utils/isPrefixedValue' -import prefixProps from '../prefixProps' const properties = { transition: true, transitionProperty: true, WebkitTransition: true, - WebkitTransitionProperty: true + WebkitTransitionProperty: true, + MozTransition: true, + MozTransitionProperty: true } const prefixMapping = { @@ -18,7 +19,7 @@ const prefixMapping = { ms: '-ms-' } -function prefixValue(value: string): string { +function prefixValue(value: string, propertyPrefixMap: Object): string { if (isPrefixedValue(value)) { return value } @@ -29,11 +30,11 @@ function prefixValue(value: string): string { for (let i = 0, len = multipleValues.length; i < len; ++i) { const singleValue = multipleValues[i] const values = [singleValue] - for (const property in prefixProps) { + for (const property in propertyPrefixMap) { const dashCaseProperty = hyphenateStyleName(property) if (singleValue.indexOf(dashCaseProperty) > -1 && dashCaseProperty !== 'order') { - const prefixes = prefixProps[property] + const prefixes = propertyPrefixMap[property] for (let j = 0, pLen = prefixes.length; j < pLen; ++j) { // join all prefixes and create a new value values.unshift( @@ -49,20 +50,36 @@ function prefixValue(value: string): string { return multipleValues.join(',') } -export default function transition(property: string, value: any, style: Object): ?string { +export default function transition( + property: string, + value: any, + style: Object, + propertyPrefixMap: Object +): ?string { // also check for already prefixed transitions if (typeof value === 'string' && properties[property]) { - const outputValue = prefixValue(value) + const outputValue = prefixValue(value, propertyPrefixMap) + // if the property is already prefixed const webkitOutput = outputValue .split(/,(?![^()]*(?:\([^()]*\))?\))/g) .filter(val => val.match(/-moz-|-ms-/) === null) .join(',') - // if the property is already prefixed if (property.indexOf('Webkit') > -1) { return webkitOutput } + + const mozOutput = outputValue + .split(/,(?![^()]*(?:\([^()]*\))?\))/g) + .filter(val => val.match(/-webkit-|-ms-/) === null) + .join(',') + + if (property.indexOf('Moz') > -1) { + return mozOutput + } + style[`Webkit${capitalizeString(property)}`] = webkitOutput + style[`Moz${capitalizeString(property)}`] = mozOutput return outputValue } } diff --git a/modules/static/prefixAll.js b/modules/static/prefixAll.js deleted file mode 100644 index 78920fb..0000000 --- a/modules/static/prefixAll.js +++ /dev/null @@ -1,67 +0,0 @@ -/* @flow */ -import prefixProperty from '../utils/prefixProperty' -import prefixValue from '../utils/prefixValue' - -import addNewValuesOnly from '../utils/addNewValuesOnly' -import isObject from '../utils/isObject' - -import prefixProperties from './prefixProps' - -import calc from './plugins/calc' -import cursor from './plugins/cursor' -import flex from './plugins/flex' -import flexboxIE from './plugins/flexboxIE' -import flexboxOld from './plugins/flexboxOld' -import gradient from './plugins/gradient' -import position from './plugins/position' -import sizing from './plugins/sizing' -import transition from './plugins/transition' - -const plugins = [ - position, - calc, - cursor, - sizing, - gradient, - transition, - flexboxIE, - flexboxOld, - flex -] - -export default function prefixAll(style: Object): Object { - for (const property in style) { - const value = style[property] - - // handle nested objects - if (isObject(value)) { - style[property] = prefixAll(value) - // handle array values - } else if (Array.isArray(value)) { - const combinedValue = [] - - for (let i = 0, len = value.length; i < len; ++i) { - const processedValue = prefixValue(plugins, property, value[i], style) - addNewValuesOnly(combinedValue, processedValue || value[i]) - } - - // only modify the value if it was touched - // by any plugin to prevent unnecessary mutations - if (combinedValue.length > 0) { - style[property] = combinedValue - } - } else { - const processedValue = prefixValue(plugins, property, value, style) - - // only modify the value if it was touched - // by any plugin to prevent unnecessary mutations - if (processedValue) { - style[property] = processedValue - } - - prefixProperty(prefixProperties, property, style) - } - } - - return style -} diff --git a/modules/static/prefixProps.js b/modules/static/prefixProps.js deleted file mode 100644 index e8d8d65..0000000 --- a/modules/static/prefixProps.js +++ /dev/null @@ -1 +0,0 @@ -export default {"transform":["Webkit","ms"],"transformOrigin":["Webkit","ms"],"transformOriginX":["Webkit","ms"],"transformOriginY":["Webkit","ms"],"backfaceVisibility":["Webkit"],"perspective":["Webkit"],"perspectiveOrigin":["Webkit"],"transformStyle":["Webkit"],"transformOriginZ":["Webkit"],"animation":["Webkit"],"animationDelay":["Webkit"],"animationDirection":["Webkit"],"animationFillMode":["Webkit"],"animationDuration":["Webkit"],"animationIterationCount":["Webkit"],"animationName":["Webkit"],"animationPlayState":["Webkit"],"animationTimingFunction":["Webkit"],"appearance":["Webkit","Moz"],"userSelect":["Webkit","Moz","ms"],"fontKerning":["Webkit"],"textEmphasisPosition":["Webkit"],"textEmphasis":["Webkit"],"textEmphasisStyle":["Webkit"],"textEmphasisColor":["Webkit"],"boxDecorationBreak":["Webkit"],"clipPath":["Webkit"],"maskImage":["Webkit"],"maskMode":["Webkit"],"maskRepeat":["Webkit"],"maskPosition":["Webkit"],"maskClip":["Webkit"],"maskOrigin":["Webkit"],"maskSize":["Webkit"],"maskComposite":["Webkit"],"mask":["Webkit"],"maskBorderSource":["Webkit"],"maskBorderMode":["Webkit"],"maskBorderSlice":["Webkit"],"maskBorderWidth":["Webkit"],"maskBorderOutset":["Webkit"],"maskBorderRepeat":["Webkit"],"maskBorder":["Webkit"],"maskType":["Webkit"],"textDecorationStyle":["Webkit","Moz"],"textDecorationSkip":["Webkit","Moz"],"textDecorationLine":["Webkit","Moz"],"textDecorationColor":["Webkit","Moz"],"filter":["Webkit"],"fontFeatureSettings":["Webkit","Moz"],"breakAfter":["Webkit","Moz","ms"],"breakBefore":["Webkit","Moz","ms"],"breakInside":["Webkit","Moz","ms"],"columnCount":["Webkit","Moz"],"columnFill":["Webkit","Moz"],"columnGap":["Webkit","Moz"],"columnRule":["Webkit","Moz"],"columnRuleColor":["Webkit","Moz"],"columnRuleStyle":["Webkit","Moz"],"columnRuleWidth":["Webkit","Moz"],"columns":["Webkit","Moz"],"columnSpan":["Webkit","Moz"],"columnWidth":["Webkit","Moz"],"flex":["Webkit","ms"],"flexBasis":["Webkit"],"flexDirection":["Webkit","ms"],"flexGrow":["Webkit"],"flexFlow":["Webkit","ms"],"flexShrink":["Webkit"],"flexWrap":["Webkit","ms"],"alignContent":["Webkit"],"alignItems":["Webkit"],"alignSelf":["Webkit"],"justifyContent":["Webkit"],"order":["Webkit"],"transitionDelay":["Webkit"],"transitionDuration":["Webkit"],"transitionProperty":["Webkit"],"transitionTimingFunction":["Webkit"],"backdropFilter":["Webkit"],"scrollSnapType":["Webkit","ms"],"scrollSnapPointsX":["Webkit","ms"],"scrollSnapPointsY":["Webkit","ms"],"scrollSnapDestination":["Webkit","ms"],"scrollSnapCoordinate":["Webkit","ms"],"shapeImageThreshold":["Webkit"],"shapeImageMargin":["Webkit"],"shapeImageOutside":["Webkit"],"hyphens":["Webkit","Moz","ms"],"flowInto":["Webkit","ms"],"flowFrom":["Webkit","ms"],"regionFragment":["Webkit","ms"],"textSizeAdjust":["Webkit","ms"],"boxSizing":["Moz"],"textAlignLast":["Moz"],"tabSize":["Moz"],"wrapFlow":["ms"],"wrapThrough":["ms"],"wrapMargin":["ms"],"touchAction":["ms"],"gridTemplateColumns":["ms"],"gridTemplateRows":["ms"],"gridTemplateAreas":["ms"],"gridTemplate":["ms"],"gridAutoColumns":["ms"],"gridAutoRows":["ms"],"gridAutoFlow":["ms"],"grid":["ms"],"gridRowStart":["ms"],"gridColumnStart":["ms"],"gridRowEnd":["ms"],"gridRow":["ms"],"gridColumn":["ms"],"gridColumnEnd":["ms"],"gridColumnGap":["ms"],"gridRowGap":["ms"],"gridArea":["ms"],"gridGap":["ms"]} \ No newline at end of file diff --git a/modules/static/propertyPrefixMap.js b/modules/static/propertyPrefixMap.js new file mode 100644 index 0000000..77f3864 --- /dev/null +++ b/modules/static/propertyPrefixMap.js @@ -0,0 +1 @@ +export default {"appearance":["Webkit","Moz"],"userSelect":["Webkit","Moz","ms"],"textEmphasisPosition":["Webkit"],"textEmphasis":["Webkit"],"textEmphasisStyle":["Webkit"],"textEmphasisColor":["Webkit"],"boxDecorationBreak":["Webkit"],"clipPath":["Webkit"],"maskImage":["Webkit"],"maskMode":["Webkit"],"maskRepeat":["Webkit"],"maskPosition":["Webkit"],"maskClip":["Webkit"],"maskOrigin":["Webkit"],"maskSize":["Webkit"],"maskComposite":["Webkit"],"mask":["Webkit"],"maskBorderSource":["Webkit"],"maskBorderMode":["Webkit"],"maskBorderSlice":["Webkit"],"maskBorderWidth":["Webkit"],"maskBorderOutset":["Webkit"],"maskBorderRepeat":["Webkit"],"maskBorder":["Webkit"],"maskType":["Webkit"],"textDecorationStyle":["Webkit","Moz"],"textDecorationSkip":["Webkit","Moz"],"textDecorationLine":["Webkit","Moz"],"textDecorationColor":["Webkit","Moz"],"filter":["Webkit"],"fontFeatureSettings":["Webkit","Moz"],"breakAfter":["Webkit","Moz","ms"],"breakBefore":["Webkit","Moz","ms"],"breakInside":["Webkit","Moz","ms"],"columnCount":["Webkit","Moz"],"columnFill":["Webkit","Moz"],"columnGap":["Webkit","Moz"],"columnRule":["Webkit","Moz"],"columnRuleColor":["Webkit","Moz"],"columnRuleStyle":["Webkit","Moz"],"columnRuleWidth":["Webkit","Moz"],"columns":["Webkit","Moz"],"columnSpan":["Webkit","Moz"],"columnWidth":["Webkit","Moz"],"flex":["Webkit","Moz"],"flexBasis":["Webkit"],"flexDirection":["Webkit"],"flexGrow":["Webkit"],"flexFlow":["Webkit","Moz"],"flexShrink":["Webkit"],"flexWrap":["Webkit","Moz"],"alignContent":["Webkit"],"alignItems":["Webkit"],"alignSelf":["Webkit"],"justifyContent":["Webkit"],"order":["Webkit"],"transform":["Webkit","Moz"],"transformOrigin":["Webkit","Moz"],"transformOriginX":["Webkit","Moz"],"transformOriginY":["Webkit","Moz"],"backfaceVisibility":["Webkit","Moz"],"perspective":["Webkit","Moz"],"perspectiveOrigin":["Webkit","Moz"],"transformStyle":["Webkit","Moz"],"transformOriginZ":["Webkit","Moz"],"animation":["Webkit","Moz"],"animationDelay":["Webkit","Moz"],"animationDirection":["Webkit","Moz"],"animationFillMode":["Webkit","Moz"],"animationDuration":["Webkit","Moz"],"animationIterationCount":["Webkit","Moz"],"animationName":["Webkit","Moz"],"animationPlayState":["Webkit","Moz"],"animationTimingFunction":["Webkit","Moz"],"backdropFilter":["Webkit"],"fontKerning":["Webkit"],"scrollSnapType":["Webkit","ms"],"scrollSnapPointsX":["Webkit","ms"],"scrollSnapPointsY":["Webkit","ms"],"scrollSnapDestination":["Webkit","ms"],"scrollSnapCoordinate":["Webkit","ms"],"shapeImageThreshold":["Webkit"],"shapeImageMargin":["Webkit"],"shapeImageOutside":["Webkit"],"hyphens":["Webkit","Moz","ms"],"flowInto":["Webkit","ms"],"flowFrom":["Webkit","ms"],"regionFragment":["Webkit","ms"],"borderRadius":["Moz"],"borderImage":["Moz"],"borderImageOutset":["Moz"],"borderImageRepeat":["Moz"],"borderImageSlice":["Moz"],"borderImageSource":["Moz"],"borderImageWidth":["Moz"],"transitionDelay":["Moz","Webkit"],"transitionDuration":["Moz","Webkit"],"transitionProperty":["Moz","Webkit"],"transitionTimingFunction":["Moz","Webkit"],"boxSizing":["Moz"],"textAlignLast":["Moz"],"tabSize":["Moz"],"resize":["Moz"],"backgroundClip":["Moz"],"backgroundOrigin":["Moz"],"backgroundSize":["Moz"],"boxShadow":["Moz"],"wrapFlow":["ms"],"wrapThrough":["ms"],"wrapMargin":["ms"],"gridTemplateColumns":["ms"],"gridTemplateRows":["ms"],"gridTemplateAreas":["ms"],"gridTemplate":["ms"],"gridAutoColumns":["ms"],"gridAutoRows":["ms"],"gridAutoFlow":["ms"],"grid":["ms"],"gridRowStart":["ms"],"gridColumnStart":["ms"],"gridRowEnd":["ms"],"gridRow":["ms"],"gridColumn":["ms"],"gridColumnEnd":["ms"],"gridColumnGap":["ms"],"gridRowGap":["ms"],"gridArea":["ms"],"gridGap":["ms"],"textSizeAdjust":["Webkit","ms"]} \ No newline at end of file diff --git a/modules/utils/unprefixProperty.js b/modules/utils/unprefixProperty.js deleted file mode 100644 index e05a189..0000000 --- a/modules/utils/unprefixProperty.js +++ /dev/null @@ -1,11 +0,0 @@ -/* @flow */ -import isPrefixedProperty from './isPrefixedProperty' - -const regex = /^(Webkit|Moz|O|ms)/ -export default function unprefixProperty(property: string): string { - if (isPrefixedProperty(property)) { - const unprefixed = property.replace(regex, '') - return unprefixed.charAt(0).toLowerCase() + unprefixed.slice(1) - } - return property -} diff --git a/package.json b/package.json index 12c2b19..281983b 100644 --- a/package.json +++ b/package.json @@ -2,27 +2,27 @@ "name": "inline-style-prefixer", "version": "2.0.5", "description": "Run-time Autoprefixer for JavaScript style objects", - "main": "lib/Prefixer.js", + "main": "dynamic/index.js", "files": [ "LICENSE", "README.md", - "lib/", "dist/", - "static.js", - "generator.js" + "static/", + "generator/", + "dynamic/", + "utils/" ], "scripts": { - "babel": "babel modules/ --out-dir lib", - "build": "npm run clean && mkdir dist && npm run babel && npm run generate && npm run dist", - "check": "npm run lint && npm test && npm run flow", - "clean": "rimraf lib dist coverage", + "babel": "babel modules/ --out-dir .", + "build": "npm run check && mkdir dist && npm run generate && npm run babel && npm run dist", + "check": "npm run clean && npm run lint && npm test && npm run flow", + "clean": "rimraf static dynamic generator utils dist coverage", "dist": "cross-env NODE_ENV=production babel-node buildPackage && cross-env NODE_ENV=development babel-node buildPackage", "flow": "flow", - "generate": "babel-node generator/generateData.js", + "generate": "babel-node generateDefaultPrefixPropertyMap", "lint": "eslint modules", - "pretest": "npm run clean && npm run babel && npm run generate", - "release": "npm run check && npm run build && npm publish", - "test": "istanbul cover node_modules/mocha/bin/_mocha -- --recursive --compilers js:babel-core/register" + "release": "npm run build && npm publish", + "test": "istanbul cover node_modules/mocha/bin/_mocha -- --opts test/_setup/mocha.opts" }, "repository": "https://github.com/rofrischmann/inline-style-prefixer", "keywords": [ diff --git a/static.js b/static.js deleted file mode 100644 index 28c2828..0000000 --- a/static.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib/static/prefixAll') diff --git a/test/_setup/mocha.opts b/test/_setup/mocha.opts new file mode 100644 index 0000000..20e5c80 --- /dev/null +++ b/test/_setup/mocha.opts @@ -0,0 +1,3 @@ +--recursive +--require test/_setup/test-setup.js +--compilers js:babel-core/register diff --git a/test/_setup/test-setup.js b/test/_setup/test-setup.js new file mode 100644 index 0000000..73a8be4 --- /dev/null +++ b/test/_setup/test-setup.js @@ -0,0 +1,38 @@ +const chai = require('chai') +const createDynamicPrefixer = require('../../modules/dynamic/createPrefixer') +const dynamicPlugins = require('../../modules/dynamic/plugins').default + +const createStaticPrefixer = require('../../modules/static/createPrefixer') +const staticPlugins = require('../../modules/static/plugins').default + +const generator = require('../../modules/generator') + +const browserList = { + chrome: 0, + android: 0, + firefox: 0, + ios_saf: 0, + safari: 0, + ie: 0, + ie_mob: 0, + edge: 0, + opera: 0, + op_mini: 0, + and_uc: 0, + and_chr: 0 +} + +const fallback = createStaticPrefixer( + generator.generateStaticPrefixPropertyMap(browserList), + staticPlugins +) + +const Prefixer = createDynamicPrefixer( + generator.generateDynamicPrefixPropertyMap(browserList), + dynamicPlugins, + fallback +) + +global.expect = chai.expect +global.prefixAll = fallback +global.Prefixer = Prefixer diff --git a/test/prefixer-test.js b/test/dynamic/createPrefixer-test.js similarity index 92% rename from test/prefixer-test.js rename to test/dynamic/createPrefixer-test.js index 829238e..51f4fcf 100644 --- a/test/prefixer-test.js +++ b/test/dynamic/createPrefixer-test.js @@ -1,5 +1,3 @@ -import { expect } from 'chai' -import Prefixer from '../modules/dynamic/Prefixer' const MSIE9 = 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 7.1; Trident/5.0)' const MSIE10 = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)' const MSEdge12 = 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136' @@ -17,7 +15,7 @@ const Chromium = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, lik const PhantomJS = 'Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.0.0 Safari/538.1' const Samsung = 'Mozilla/5.0 (Linux; Android 6.0.1; SAMSUNG SM-G900F Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/4.0 Chrome/44.0.2403.133 Mobile Safari/537.36' -describe('inline-style-prefixer', () => { +describe('Dynamic Prefixer', () => { describe('Prefixing a property', () => { it('should only add required prefixes', () => { const input = { @@ -57,15 +55,20 @@ describe('inline-style-prefixer', () => { }) }) describe('Running on android < 4.4', () => { - it('should use the osversion if its the native browser to check for required props', () => { - const andPrefixer = new Prefixer({ userAgent: Android4_4_4 }) - console.log(andPrefixer._browserInfo) - expect(andPrefixer._browserInfo.browserVersion).to.eql(andPrefixer._browserInfo.osVersion) - expect(andPrefixer._browserInfo.browserVersion).to.eql(4.4) - const transform = { transform: 'rotate(40deg)' } - const output = { WebkitTransform: 'rotate(40deg)' } - expect(new Prefixer({ userAgent: Android4_4_4 }).prefix(transform)).to.eql(output) - }) + it( + 'should use the osversion if its the native browser to check for required props', + () => { + const andPrefixer = new Prefixer({ userAgent: Android4_4_4 }) + console.log(andPrefixer._browserInfo) + expect( + andPrefixer._browserInfo.browserVersion + ).to.eql(andPrefixer._browserInfo.osVersion) + expect(andPrefixer._browserInfo.browserVersion).to.eql(4.4) + const transform = { transform: 'rotate(40deg)' } + const output = { WebkitTransform: 'rotate(40deg)' } + expect(new Prefixer({ userAgent: Android4_4_4 }).prefix(transform)).to.eql(output) + } + ) it('should use the chrome version if its chrome to check for required props', () => { const andPrefixer = new Prefixer({ userAgent: Android4_2_2Chrome47 }) expect(andPrefixer._browserInfo.osVersion).to.eql(4.2) @@ -81,7 +84,9 @@ describe('inline-style-prefixer', () => { it('always force Safari prefixing as iOS forces to use Safari under the hood', () => { const iosPrefixer = new Prefixer({ userAgent: iOSChrome47 }) console.log(iosPrefixer._browserInfo) - expect(iosPrefixer._browserInfo.browserVersion).to.eql(iosPrefixer._browserInfo.osVersion) + expect( + iosPrefixer._browserInfo.browserVersion + ).to.eql(iosPrefixer._browserInfo.osVersion) const input = { display: 'flex' } const output = { display: '-webkit-flex' } expect(iosPrefixer.prefix(input)).to.eql(output) @@ -218,7 +223,9 @@ describe('inline-style-prefixer', () => { }) describe('Prefixing keyframes', () => { it('should return the correct keyframes string', () => { - expect(new Prefixer({ userAgent: Chrome14 }).prefixedKeyframes).to.eql('-webkit-keyframes') + expect( + new Prefixer({ userAgent: Chrome14 }).prefixedKeyframes + ).to.eql('-webkit-keyframes') expect(new Prefixer({ userAgent: Chrome49 }).prefixedKeyframes).to.eql('keyframes') expect(new Prefixer({ userAgent: Chromium }).prefixedKeyframes).to.eql('keyframes') expect(new Prefixer({ userAgent: PhantomJS }).prefixedKeyframes).to.eql('keyframes') @@ -315,6 +322,21 @@ describe('inline-style-prefixer', () => { }).prefix(input) ).to.eql(prefixed) }) + + it('should add alternatives and keep defaults', () => { + const input2 = { justifyContent: 'space-between' } + const output2 = { + WebkitBoxPack: 'justify', + justifyContent: 'space-between' + } + expect( + new Prefixer({ + userAgent: Chrome14, + keepUnprefixed: true + }).prefix(input2) + ).to.eql(output2) + }) + it('should keep default values', () => { expect( new Prefixer({ @@ -362,7 +384,9 @@ describe('inline-style-prefixer', () => { ).to.eql({ display: 'block' }) }) it('should not throw if display is null or undefined', () => { - expect(new Prefixer({ userAgent: Chrome45 }).prefix({ display: null })).to.eql({ display: null }) + expect( + new Prefixer({ userAgent: Chrome45 }).prefix({ display: null }) + ).to.eql({ display: null }) expect( new Prefixer({ userAgent: Chrome45 }).prefix({ display: undefined }) ).to.eql({ display: undefined }) diff --git a/test/prefixAll-test.js b/test/static/createPrefixer-test.js similarity index 85% rename from test/prefixAll-test.js rename to test/static/createPrefixer-test.js index b439d5a..8a75fed 100644 --- a/test/prefixAll-test.js +++ b/test/static/createPrefixer-test.js @@ -1,12 +1,10 @@ -import { expect } from 'chai' -import prefixAll from '../modules/static/prefixAll' - -describe('inline-style-prefixer/static', () => { +describe('Static Prefixer', () => { describe('Prefixing all properties', () => { it('should only add prefixes if browsers need it', () => { const input = { transition: '200ms all linear' } const output = { WebkitTransition: '200ms all linear', + MozTransition: '200ms all linear', transition: '200ms all linear' } expect(prefixAll(input)).to.eql(output) @@ -35,9 +33,11 @@ describe('inline-style-prefixer/static', () => { innerStyles: { transition: '300ms all ease-in' } } const output = { + MozTransition: '200ms all linear', WebkitTransition: '200ms all linear', transition: '200ms all linear', innerStyles: { + MozTransition: '300ms all ease-in', WebkitTransition: '300ms all ease-in', transition: '300ms all ease-in' } @@ -74,20 +74,17 @@ describe('inline-style-prefixer/static', () => { expect(prefixAll(input)).to.eql(output) }) - it( - 'should resolve alternative values for all flexbox specification', - () => { - const input = { justifyContent: 'space-around' } - const output = { - WebkitBoxPack: 'justify', - WebkitJustifyContent: 'space-around', - justifyContent: 'space-around', - msFlexPack: 'distribute' - } - expect(prefixAll(input)).to.eql(output) - expect(prefixAll(input)).to.eql(output) + it('should resolve alternative values for all flexbox specification', () => { + const input = { justifyContent: 'space-around' } + const output = { + WebkitBoxPack: 'justify', + WebkitJustifyContent: 'space-around', + justifyContent: 'space-around', + msFlexPack: 'distribute' } - ) + expect(prefixAll(input)).to.eql(output) + expect(prefixAll(input)).to.eql(output) + }) it('should resolve flexbox variants', () => { const input = { @@ -133,15 +130,7 @@ describe('inline-style-prefixer/static', () => { it('should add all flexbox display types', () => { const input = { display: 'flex' } - const output = { - display: [ - '-webkit-box', - '-moz-box', - '-ms-flexbox', - '-webkit-flex', - 'flex' - ] - } + const output = { display: ['-webkit-box', '-moz-box', '-ms-flexbox', '-webkit-flex', 'flex'] } expect(prefixAll(input)).to.eql(output) expect(prefixAll(input)).to.eql(output) }) @@ -172,6 +161,7 @@ describe('inline-style-prefixer/static', () => { const input = { transition: '200ms linear appearance, 100ms linear width' } const output = { WebkitTransition: '200ms linear -webkit-appearance,200ms linear appearance, 100ms linear width', + MozTransition: '200ms linear -moz-appearance,200ms linear appearance, 100ms linear width', transition: '200ms linear -moz-appearance,200ms linear -webkit-appearance,200ms linear appearance, 100ms linear width' } expect(prefixAll(input)).to.eql(output) @@ -181,8 +171,9 @@ describe('inline-style-prefixer/static', () => { it('should prefix transitions with cubic beziers', () => { const input = { transition: 'transform 0.4s cubic-bezier(0.065, 1.360, 0.680, 1.000)' } const output = { - transition: '-ms-transform 0.4s cubic-bezier(0.065, 1.360, 0.680, 1.000),-webkit-transform 0.4s cubic-bezier(0.065, 1.360, 0.680, 1.000),transform 0.4s cubic-bezier(0.065, 1.360, 0.680, 1.000)', - WebkitTransition: '-webkit-transform 0.4s cubic-bezier(0.065, 1.360, 0.680, 1.000),transform 0.4s cubic-bezier(0.065, 1.360, 0.680, 1.000)' + transition: '-ms-transform 0.4s cubic-bezier(0.065, 1.360, 0.680, 1.000),-moz-transform 0.4s cubic-bezier(0.065, 1.360, 0.680, 1.000),-webkit-transform 0.4s cubic-bezier(0.065, 1.360, 0.680, 1.000),transform 0.4s cubic-bezier(0.065, 1.360, 0.680, 1.000)', + WebkitTransition: '-webkit-transform 0.4s cubic-bezier(0.065, 1.360, 0.680, 1.000),transform 0.4s cubic-bezier(0.065, 1.360, 0.680, 1.000)', + MozTransition: '-moz-transform 0.4s cubic-bezier(0.065, 1.360, 0.680, 1.000),transform 0.4s cubic-bezier(0.065, 1.360, 0.680, 1.000)' } expect(prefixAll(input)).to.eql(output) expect(prefixAll(input)).to.eql(output) @@ -192,7 +183,8 @@ describe('inline-style-prefixer/static', () => { const input = { transition: 'border 500ms linear' } const output = { transition: 'border 500ms linear', - WebkitTransition: 'border 500ms linear' + WebkitTransition: 'border 500ms linear', + MozTransition: 'border 500ms linear' } expect(prefixAll(input)).to.eql(output) expect(prefixAll(input)).to.eql(output) @@ -243,14 +235,7 @@ describe('inline-style-prefixer/static', () => { it('should prefix multiple array values and keep others', () => { const input = { width: ['min-content', '100%'] } - const output = { - width: [ - '-webkit-min-content', - '-moz-min-content', - 'min-content', - '100%' - ] - } + const output = { width: ['-webkit-min-content', '-moz-min-content', 'min-content', '100%'] } expect(prefixAll(input)).to.eql(output) expect(prefixAll(input)).to.eql(output) })