// external dependencies
import PropTypes from 'prop-types';
/**
* @constant {Object} DEFAULT_OPTIONS
*/
export const DEFAULT_OPTIONS = {
debounce: 0,
flatten: false,
inheritedMethods: [],
positionProp: 'position',
renderOnResize: true,
sizeProp: 'size'
};
/**
* @constant {Array<string>} BOUNDING_CLIENT_RECT_SIZE_KEYS
*/
export const BOUNDING_CLIENT_RECT_SIZE_KEYS = ['height', 'width'];
/**
* @constant {Array<string>} BOUNDING_CLIENT_RECT_POSITION_KEYS
*/
export const BOUNDING_CLIENT_RECT_POSITION_KEYS = ['bottom', 'left', 'right', 'top'];
/**
* @constant {Array<string>} ALL_BOUNDING_CLIENT_RECT_KEYS
*/
export const ALL_BOUNDING_CLIENT_RECT_KEYS = [...BOUNDING_CLIENT_RECT_POSITION_KEYS, ...BOUNDING_CLIENT_RECT_SIZE_KEYS];
/**
* @constant {Array<string>} DOM_ELEMENT_POSITION_KEYS
*/
export const DOM_ELEMENT_POSITION_KEYS = [
'clientLeft',
'clientTop',
'offsetLeft',
'offsetTop',
'scrollLeft',
'scrollTop'
];
/**
* @constant {Array<string>} DOM_ELEMENT_SIZE_KEYS
*/
export const DOM_ELEMENT_SIZE_KEYS = [
'clientHeight',
'clientWidth',
'naturalHeight',
'naturalWidth',
'offsetHeight',
'offsetWidth',
'scrollHeight',
'scrollWidth'
];
/**
* @constant {RegExp} FUNCTION_NAME_REGEXP
*/
export const FUNCTION_NAME_REGEXP = /^\s*function\s*([^\(]*)/i;
/**
* @constant {RegExp} NATURAL_REGEXP
*/
export const NATURAL_REGEXP = /natural/;
/**
* @constant {Array<string>} VOID_ELEMENT_TAG_NAMES
*/
export const VOID_ELEMENT_TAG_NAMES = [
'AREA',
'BASE',
'BR',
'COL',
'EMBED',
'HR',
'IMG',
'INPUT',
'LINK',
'MENUITEM',
'META',
'PARAM',
'SOURCE',
'TRACK',
'WBR'
];
/**
* @constant {Array<string>} ALL_DOM_ELEMENT_KEYS
*/
export const ALL_DOM_ELEMENT_KEYS = [...DOM_ELEMENT_POSITION_KEYS, ...DOM_ELEMENT_SIZE_KEYS];
/**
* @constant {Array<string>} ALL_POSITION_KEYS
*/
export const ALL_POSITION_KEYS = [...DOM_ELEMENT_POSITION_KEYS, ...BOUNDING_CLIENT_RECT_POSITION_KEYS];
/**
* @constant {Array<string>} ALL_SIZE_KEYS
*/
export const ALL_SIZE_KEYS = [...DOM_ELEMENT_SIZE_KEYS, ...BOUNDING_CLIENT_RECT_SIZE_KEYS];
/**
* @constant {Array<string>} ALL_KEYS
*/
export const ALL_KEYS = [...ALL_POSITION_KEYS, ...ALL_SIZE_KEYS];
/**
* @constant {string} CLIENT_RECT_TYPE
*/
export const CLIENT_RECT_TYPE = 'clientRect';
/**
* @constant {string} ELEMENT_TYPE
*/
export const ELEMENT_TYPE = 'element';
/**
* @constant {Object} OPTIONS_SHAPE
*/
export const OPTIONS_SHAPE = {
debounce: PropTypes.number,
flatten: PropTypes.bool,
inheritedMethods: PropTypes.arrayOf(PropTypes.string),
isPure: PropTypes.bool,
positionProp: PropTypes.string,
renderOnResize: PropTypes.bool,
sizeProp: PropTypes.string
};