text: 'use strict';
  
  Object.defineProperty(exports, '__esModule', {
    value: true
  });
  exports['default'] = prefixAll;
  
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
  
  var _prefixProps = require('./prefixProps');
  
  var _prefixProps2 = _interopRequireDefault(_prefixProps);
  
  var _utilsCapitalizeString = require('./utils/capitalizeString');
  
  var _utilsCapitalizeString2 = _interopRequireDefault(_utilsCapitalizeString);
  
  var _utilsAssign = require('./utils/assign');
  
  var _utilsAssign2 = _interopRequireDefault(_utilsAssign);
  
  var _pluginsCalc = require('./plugins/calc');
  
  var _pluginsCalc2 = _interopRequireDefault(_pluginsCalc);
  
  var _pluginsCursor = require('./plugins/cursor');
  
  var _pluginsCursor2 = _interopRequireDefault(_pluginsCursor);
  
  var _pluginsFlex = require('./plugins/flex');
  
  var _pluginsFlex2 = _interopRequireDefault(_pluginsFlex);
  
  var _pluginsSizing = require('./plugins/sizing');
  
  var _pluginsSizing2 = _interopRequireDefault(_pluginsSizing);
  
  var _pluginsGradient = require('./plugins/gradient');
  
  var _pluginsGradient2 = _interopRequireDefault(_pluginsGradient);
  
  var _pluginsTransition = require('./plugins/transition');
  
  var _pluginsTransition2 = _interopRequireDefault(_pluginsTransition);
  
  // special flexbox specifications
  
  var _pluginsFlexboxIE = require('./plugins/flexboxIE');
  
  var _pluginsFlexboxIE2 = _interopRequireDefault(_pluginsFlexboxIE);
  
  var _pluginsFlexboxOld = require('./plugins/flexboxOld');
  
  var _pluginsFlexboxOld2 = _interopRequireDefault(_pluginsFlexboxOld);
  
  var plugins = [_pluginsCalc2['default'], _pluginsCursor2['default'], _pluginsSizing2['default'], _pluginsGradient2['default'], _pluginsTransition2['default'], _pluginsFlexboxIE2['default'], _pluginsFlexboxOld2['default'], _pluginsFlex2['default']];
  
  /**
   * 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
   */
  
  function prefixAll(styles) {
    return Object.keys(styles).reduce(function (prefixedStyles, property) {
      var value = styles[property];
      if (value instanceof Object) {
        // recurse through nested style objects
        prefixedStyles[property] = prefixAll(value);
      } else {
        Object.keys(_prefixProps2['default']).forEach(function (prefix) {
          var properties = _prefixProps2['default'][prefix];
          // add prefixes if needed
          if (properties[property]) {
            prefixedStyles[prefix + (0, _utilsCapitalizeString2['default'])(property)] = value;
          }
        });
  
        // resolve every special plugins
        plugins.forEach(function (plugin) {
          return (0, _utilsAssign2['default'])(prefixedStyles, plugin(property, value));
        });
      }
  
      return prefixedStyles;
    }, styles);
  }
  
  module.exports = exports['default'];