/**
 * @class Ext.drag.Constraint
 * @extend Ext.Base
 * @mixin Ext.mixin.Factoryable
 * @alias drag.constraint.base
 * Provides constraining behavior for a {@link Ext.drag.Source}.
 */
 
/**
 * @cfg {Boolean/String/HTMLElement/Ext.dom.Element} [element=null]
 *
 * The element to constrain to:
 * - `true` to constrain to the parent of the {@link Ext.drag.Source#element}.
 * - The id, DOM element or Ext.dom.Element to constrain to.
 * @accessor
 */
 
/**
 * @cfg {Boolean} [horizontal=null]
 * `true` to limit dragging to the horizontal axis.
 * @accessor
 */
 
/**
 * @cfg {Ext.util.Region} [region=null]
 *
 * The region to constrain to.
 * @accessor
 */
 
/**
 * @cfg {Number/Object} [snap=null]
 * The interval to move this drag target during a drag in both dimensions.
 * - `{x: 30}`, snap only x
 * - `{y: 30}`, snap only y
 * - `{x: 30, y: 40}`, snap both
 * - `40`, snap both to `40`.
 *
 * The snap may also be a function to calculate the snap value on each tick.
 *
 *      snap: {
 *          x: function(info, x) {
 *              return x < 300 ? 150 : 500;
 *          }
 *      }
 * @accessor
 */
 
/**
 * @cfg {Ext.drag.Source} [source=null]
 * The {@link Ext.drag.Source source} for the constraint. This will be
 * set automatically when constructed via the source.
 * @accessor
 */
 
/**
 * @cfg {Boolean} [vertical=null]
 * `true` to limit dragging to the vertical axis.
 * @accessor
 */
 
/**
 * @cfg {Number[]} [x=null]
 * The minimum and maximum x position. Use `null` to
 * not set a constraint:
 * - `[100, null]`, constrain only the minimum
 * - `[null, 100]`, constrain only the maximum
 * - `[200, 200]`, constrain both.
 * @accessor
 */
 
/**
 * @cfg {Number[]} [y=null]
 * The minimum and maximum y position. Use `null` to
 * not set a constraint:
 * - `[100, null]`, constrain only the minimum
 * - `[null, 100]`, constrain only the maximum
 * - `[200, 200]`, constrain both.
 * @accessor
 */
 
/**
 * @method constrain
 * Constrain the position of the drag proxy using the configured rules.
 *
 * @param {Number[]} xy The position.
 * @param {Ext.drag.Info} info The drag information.
 *
 * @return {Number[]} The xy position.
 */