text: 'use strict';
  
  Object.defineProperty(exports, "__esModule", {
  	value: true
  });
  exports.default = dirtyHandlerIds;
  exports.areDirty = areDirty;
  
  var _xor = require('lodash/xor');
  
  var _xor2 = _interopRequireDefault(_xor);
  
  var _intersection = require('lodash/intersection');
  
  var _intersection2 = _interopRequireDefault(_intersection);
  
  var _dragDrop = require('../actions/dragDrop');
  
  var _registry = require('../actions/registry');
  
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  
  var NONE = [];
  var ALL = [];
  
  function dirtyHandlerIds() {
  	var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : NONE;
  	var action = arguments[1];
  	var dragOperation = arguments[2];
  
  	switch (action.type) {
  		case _dragDrop.HOVER:
  			break;
  		case _registry.ADD_SOURCE:
  		case _registry.ADD_TARGET:
  		case _registry.REMOVE_TARGET:
  		case _registry.REMOVE_SOURCE:
  			return NONE;
  		case _dragDrop.BEGIN_DRAG:
  		case _dragDrop.PUBLISH_DRAG_SOURCE:
  		case _dragDrop.END_DRAG:
  		case _dragDrop.DROP:
  		default:
  			return ALL;
  	}
  
  	var targetIds = action.targetIds;
  	var prevTargetIds = dragOperation.targetIds;
  
  	var result = (0, _xor2.default)(targetIds, prevTargetIds);
  
  	var didChange = false;
  	if (result.length === 0) {
  		for (var i = 0; i < targetIds.length; i++) {
  			if (targetIds[i] !== prevTargetIds[i]) {
  				didChange = true;
  				break;
  			}
  		}
  	} else {
  		didChange = true;
  	}
  
  	if (!didChange) {
  		return NONE;
  	}
  
  	var prevInnermostTargetId = prevTargetIds[prevTargetIds.length - 1];
  	var innermostTargetId = targetIds[targetIds.length - 1];
  
  	if (prevInnermostTargetId !== innermostTargetId) {
  		if (prevInnermostTargetId) {
  			result.push(prevInnermostTargetId);
  		}
  		if (innermostTargetId) {
  			result.push(innermostTargetId);
  		}
  	}
  
  	return result;
  }
  
  function areDirty(state, handlerIds) {
  	if (state === NONE) {
  		return false;
  	}
  
  	if (state === ALL || typeof handlerIds === 'undefined') {
  		return true;
  	}
  
  	return (0, _intersection2.default)(handlerIds, state).length > 0;
  }