UNPKG

react-prefixer

Version:

Add vendor-specific prefixes to React styles

85 lines (59 loc) 2.94 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _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'];