(function webpackUniversalModuleDefinition(root, factory) {
	if(typeof exports === 'object' && typeof module === 'object')
		module.exports = factory();
	else if(typeof define === 'function' && define.amd)
		define([], factory);
	else if(typeof exports === 'object')
		exports["jssCompose"] = factory();
	else
		root["jssCompose"] = factory();
})(this, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId])
/******/ 			return installedModules[moduleId].exports;
/******/
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			exports: {},
/******/ 			id: moduleId,
/******/ 			loaded: false
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.loaded = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.default = jssCompose;
	
	var _warning = __webpack_require__(1);
	
	var _warning2 = _interopRequireDefault(_warning);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * Set selector.
	 *
	 * @param {Object} original rule
	 * @param {String} className class string
	 * @return {Boolean} flag, indicating function was successfull or not
	 */
	function registerClass(rule, className) {
	  // Skip falsy values
	  if (!className) return true;
	
	  // Support array of class names `{composes: ['foo', 'bar']}`
	  if (Array.isArray(className)) {
	    for (var index = 0; index < className.length; index++) {
	      var isSetted = registerClass(rule, className[index]);
	      if (!isSetted) return false;
	    }
	
	    return true;
	  }
	
	  // Support space separated class names `{composes: 'foo bar'}`
	  if (className.indexOf(' ') > -1) {
	    return registerClass(rule, className.split(' '));
	  }
	
	  var parent = rule.options.parent;
	
	  // It is a ref to a local rule.
	
	  if (className[0] === '$') {
	    var refRule = parent.getRule(className.substr(1));
	
	    if (!refRule) {
	      (0, _warning2.default)(false, '[JSS] Referenced rule is not defined. \r\n%s', rule);
	      return false;
	    }
	
	    if (refRule === rule) {
	      (0, _warning2.default)(false, '[JSS] Cyclic composition detected. \r\n%s', rule);
	      return false;
	    }
	
	    parent.classes[rule.key] += ' ' + parent.classes[refRule.key];
	
	    return true;
	  }
	
	  rule.options.parent.classes[rule.key] += ' ' + className;
	
	  return true;
	}
	
	/**
	 * Convert compose property to additional class, remove property from original styles.
	 *
	 * @param {Rule} rule
	 * @api public
	 */
	function jssCompose() {
	  function onProcessStyle(style, rule) {
	    if (!style.composes) return style;
	    registerClass(rule, style.composes);
	    // Remove composes property to prevent infinite loop.
	    delete style.composes;
	    return style;
	  }
	  return { onProcessStyle: onProcessStyle };
	}

/***/ },
/* 1 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2014-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 */
	
	'use strict';
	
	/**
	 * Similar to invariant but only logs a warning if the condition is not met.
	 * This can be used to log issues in development environments in critical
	 * paths. Removing the logging code for production environments will keep the
	 * same logic and follow the same code paths.
	 */
	
	var warning = function() {};
	
	if (true) {
	  warning = function(condition, format, args) {
	    var len = arguments.length;
	    args = new Array(len > 2 ? len - 2 : 0);
	    for (var key = 2; key < len; key++) {
	      args[key - 2] = arguments[key];
	    }
	    if (format === undefined) {
	      throw new Error(
	        '`warning(condition, format, ...args)` requires a warning ' +
	        'message argument'
	      );
	    }
	
	    if (format.length < 10 || (/^[s\W]*$/).test(format)) {
	      throw new Error(
	        'The warning format should be able to uniquely identify this ' +
	        'warning. Please, use a more descriptive format than: ' + format
	      );
	    }
	
	    if (!condition) {
	      var argIndex = 0;
	      var message = 'Warning: ' +
	        format.replace(/%s/g, function() {
	          return args[argIndex++];
	        });
	      if (typeof console !== 'undefined') {
	        console.error(message);
	      }
	      try {
	        // This error was thrown as a convenience so that you can use this stack
	        // to find the callsite that caused this warning to fire.
	        throw new Error(message);
	      } catch(x) {}
	    }
	  };
	}
	
	module.exports = warning;


/***/ }
/******/ ])
});
;
//# sourceMappingURL=jss-compose.js.map