(function (global, factory) {
	if (typeof define === "function" && define.amd) {
		define(['exports', 'react'], factory);
	} else if (typeof exports !== "undefined") {
		factory(exports, require('react'));
	} else {
		var mod = {
			exports: {}
		};
		factory(mod.exports, global.react);
		global.BaseComponent = mod.exports;
	}
})(this, function (exports, _react) {
	'use strict';

	Object.defineProperty(exports, "__esModule", {
		value: true
	});

	function _classCallCheck(instance, Constructor) {
		if (!(instance instanceof Constructor)) {
			throw new TypeError("Cannot call a class as a function");
		}
	}

	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;
		};
	}();

	function _possibleConstructorReturn(self, call) {
		if (!self) {
			throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
		}

		return call && (typeof call === "object" || typeof call === "function") ? call : self;
	}

	function _inherits(subClass, superClass) {
		if (typeof superClass !== "function" && superClass !== null) {
			throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);
		}

		subClass.prototype = Object.create(superClass && superClass.prototype, {
			constructor: {
				value: subClass,
				enumerable: false,
				writable: true,
				configurable: true
			}
		});
		if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
	}

	var BaseComponent = function (_Component) {
		_inherits(BaseComponent, _Component);

		function BaseComponent(props) {
			var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
				displayName: 'base-component',
				log: true
			};

			_classCallCheck(this, BaseComponent);

			var _this = _possibleConstructorReturn(this, (BaseComponent.__proto__ || Object.getPrototypeOf(BaseComponent)).call(this, props));

			_this.displayName = options.name || options.displayName;

			options.log = true;
			if (options && options.log) {
				_this._log = function () {};
			} else {
				_this._log = function () {};
			}
			return _this;
		}

		_createClass(BaseComponent, [{
			key: 'setBaseRef',
			value: function setBaseRef(el) {
				this.base = el;
			}
		}, {
			key: '$$',
			value: function $$(slctr) {
				if (this.base) {
					return this.base.querySelector(slctr);
				}
			}
		}, {
			key: 'transform',
			value: function transform(_transform, node) {
				node = node || this.base;
				node.style.webkitTransform = _transform;
				node.style.transform = _transform;
			}
		}, {
			key: 'translate3d',
			value: function translate3d(x, y, z, node) {
				node = node || this.base;
				this.transform('translate3d(' + x + ', ' + y + ', ' + z + ')', node);
			}
		}, {
			key: 'componentWillMount',
			value: function componentWillMount() {}
		}, {
			key: 'render',
			value: function render() {}
		}, {
			key: 'componentDidMount',
			value: function componentDidMount() {}
		}, {
			key: 'componentWillReceiveProps',
			value: function componentWillReceiveProps(nextProps) {}
		}, {
			key: 'shouldComponentUpdate',
			value: function shouldComponentUpdate(nextProps, nextState) {
				return true;
			}
		}, {
			key: 'componentWillUpdate',
			value: function componentWillUpdate(nextProps, nextState) {
				return true;
			}
		}, {
			key: 'componentWillUnmount',
			value: function componentWillUnmount() {}
		}]);

		return BaseComponent;
	}(_react.Component);

	exports.default = BaseComponent;
});