react-prefixer
Version:
Add vendor-specific prefixes to React styles
85 lines (59 loc) • 2.94 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _isPlainObject = require('lodash/isPlainObject');
var _isPlainObject2 = _interopRequireDefault(_isPlainObject);
var _prefix = require('./prefix');
var _prefix2 = _interopRequireDefault(_prefix);
var _supports = require('./supports');
var _supports2 = _interopRequireDefault(_supports);
var _constants = require('./constants');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var toKebabCase = function toKebabCase(string) {
return string.replace(/([A-Z])/g, function ($1) {
return '-' + $1.toLowerCase();
});
};
/**
* create a new style object with prefixes applied
*
* @param {Object} object
* @returns {Object}
*/
var applyPrefixes = function applyPrefixes(object) {
if (!(0, _isPlainObject2.default)(object)) {
return object;
}
var value = void 0;
return Object.keys(object).reduce(function (styleObject, originalKey) {
var key = originalKey;
value = object[key];
if ((0, _isPlainObject2.default)(value)) {
return _extends({}, styleObject, _defineProperty({}, key, applyPrefixes(value)));
}
if (_constants.CSS_PROPERTIES.indexOf(key) !== -1 && !(0, _supports2.default)(toKebabCase(key), value)) {
key = '' + _prefix2.default.js + key.charAt(0).toUpperCase() + key.slice(1);
}
if (originalKey === 'display' && object[originalKey] === 'flex' && !(0, _supports2.default)('display', 'flex')) {
return _extends({}, styleObject, _defineProperty({}, key, _prefix2.default.js === 'ms' ? '-ms-flexbox' : _prefix2.default.css + 'flex'));
}
if (originalKey === 'transition') {
var animatableValuesObject = _constants.ANIMATABLE_VALUES.reduce(function (animatableValues, animatableValue) {
var kebabValue = toKebabCase(animatableValue);
var re = new RegExp(kebabValue, 'g');
if (re.test(object[originalKey]) && !(0, _supports2.default)(kebabValue)) {
var cleanValue = object[originalKey].replace(re, '' + _prefix2.default.css + kebabValue);
return _extends({}, animatableValues, _defineProperty({}, key, cleanValue));
}
return animatableValues;
}, {});
return _extends({}, styleObject, animatableValuesObject);
}
return _extends({}, styleObject, _defineProperty({}, key, value));
}, {});
};
exports.default = applyPrefixes;
module.exports = exports['default'];
;