text: 'use strict';
  
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
  
  var _react = require('react');
  
  var _react2 = _interopRequireDefault(_react);
  
  var _classnames = require('classnames');
  
  var _classnames2 = _interopRequireDefault(_classnames);
  
  var Option = _react2['default'].createClass({
  	displayName: 'Option',
  
  	propTypes: {
  		children: _react2['default'].PropTypes.node,
  		className: _react2['default'].PropTypes.string, // className (based on mouse position)
  		instancePrefix: _react2['default'].PropTypes.string.isRequired, // unique prefix for the ids (used for aria)
  		isDisabled: _react2['default'].PropTypes.bool, // the option is disabled
  		isFocused: _react2['default'].PropTypes.bool, // the option is focused
  		isSelected: _react2['default'].PropTypes.bool, // the option is selected
  		onFocus: _react2['default'].PropTypes.func, // method to handle mouseEnter on option element
  		onSelect: _react2['default'].PropTypes.func, // method to handle click on option element
  		onUnfocus: _react2['default'].PropTypes.func, // method to handle mouseLeave on option element
  		option: _react2['default'].PropTypes.object.isRequired, // object that is base for that option
  		optionIndex: _react2['default'].PropTypes.number },
  	// index of the option, used to generate unique ids for aria
  	blockEvent: function blockEvent(event) {
  		event.preventDefault();
  		event.stopPropagation();
  		if (event.target.tagName !== 'A' || !('href' in event.target)) {
  			return;
  		}
  		if (event.target.target) {
  			window.open(event.target.href, event.target.target);
  		} else {
  			window.location.href = event.target.href;
  		}
  	},
  
  	handleMouseDown: function handleMouseDown(event) {
  		event.preventDefault();
  		event.stopPropagation();
  		this.props.onSelect(this.props.option, event);
  	},
  
  	handleMouseEnter: function handleMouseEnter(event) {
  		this.onFocus(event);
  	},
  
  	handleMouseMove: function handleMouseMove(event) {
  		this.onFocus(event);
  	},
  
  	handleTouchEnd: function handleTouchEnd(event) {
  		// Check if the view is being dragged, In this case
  		// we don't want to fire the click event (because the user only wants to scroll)
  		if (this.dragging) return;
  
  		this.handleMouseDown(event);
  	},
  
  	handleTouchMove: function handleTouchMove(event) {
  		// Set a flag that the view is being dragged
  		this.dragging = true;
  	},
  
  	handleTouchStart: function handleTouchStart(event) {
  		// Set a flag that the view is not being dragged
  		this.dragging = false;
  	},
  
  	onFocus: function onFocus(event) {
  		if (!this.props.isFocused) {
  			this.props.onFocus(this.props.option, event);
  		}
  	},
  	render: function render() {
  		var _props = this.props;
  		var option = _props.option;
  		var instancePrefix = _props.instancePrefix;
  		var optionIndex = _props.optionIndex;
  
  		var className = (0, _classnames2['default'])(this.props.className, option.className);
  
  		return option.disabled ? _react2['default'].createElement(
  			'div',
  			{ className: className,
  				onMouseDown: this.blockEvent,
  				onClick: this.blockEvent },
  			this.props.children
  		) : _react2['default'].createElement(
  			'div',
  			{ className: className,
  				style: option.style,
  				role: 'option',
  				onMouseDown: this.handleMouseDown,
  				onMouseEnter: this.handleMouseEnter,
  				onMouseMove: this.handleMouseMove,
  				onTouchStart: this.handleTouchStart,
  				onTouchMove: this.handleTouchMove,
  				onTouchEnd: this.handleTouchEnd,
  				id: instancePrefix + '-option-' + optionIndex,
  				title: option.title },
  			this.props.children
  		);
  	}
  });
  
  module.exports = Option;