react-select-plus
Advanced tools
Comparing version 1.0.0-beta13 to 1.0.0-beta13.patch1
@@ -66,3 +66,4 @@ require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ | ||
minimumInput: _react2['default'].PropTypes.number, // the minimum number of characters that trigger loadOptions | ||
noResultsText: _react2['default'].PropTypes.string, // placeholder displayed when there are no matching search results (shared with Select) | ||
noResultsText: stringOrNode, // placeholder displayed when there are no matching search results (shared with Select) | ||
onInputChange: _react2['default'].PropTypes.func, // onInputChange handler: function (inputValue) {} | ||
placeholder: stringOrNode, // field placeholder, displayed when there's no value (shared with Select) | ||
@@ -129,2 +130,9 @@ searchPromptText: _react2['default'].PropTypes.string, // label to prompt for search input | ||
loadOptions: function loadOptions(input) { | ||
if (this.props.onInputChange) { | ||
var nextState = this.props.onInputChange(input); | ||
// Note: != used deliberately here to catch undefined and null | ||
if (nextState != null) { | ||
input = '' + nextState; | ||
} | ||
} | ||
if (this.props.ignoreAccents) input = (0, _utilsStripDiacritics2['default'])(input); | ||
@@ -593,3 +601,3 @@ if (this.props.ignoreCase) input = input.toLowerCase(); | ||
allowCreate: _react2['default'].PropTypes.bool, // whether to allow creation of new entries | ||
autoBlur: _react2['default'].PropTypes.bool, | ||
autoBlur: _react2['default'].PropTypes.bool, // automatically blur the component when an option is selected | ||
autofocus: _react2['default'].PropTypes.bool, // autofocus the component on mount | ||
@@ -611,2 +619,3 @@ autosize: _react2['default'].PropTypes.bool, // whether to enable autosizing or not | ||
inputProps: _react2['default'].PropTypes.object, // custom attributes for the Input | ||
inputRenderer: _react2['default'].PropTypes.func, // returns a custom input component | ||
isLoading: _react2['default'].PropTypes.bool, // whether the Select is loading externally or not (such as options being loaded) | ||
@@ -636,2 +645,3 @@ isOpen: _react2['default'].PropTypes.bool, // whether the Select dropdown menu is open or not | ||
openAfterFocus: _react2['default'].PropTypes.bool, // boolean to enable opening dropdown when focused | ||
openOnFocus: _react2['default'].PropTypes.bool, // always open options menu on focus | ||
optionClassName: _react2['default'].PropTypes.string, // additional class(es) to apply to the <Option /> elements | ||
@@ -645,2 +655,3 @@ optionComponent: _react2['default'].PropTypes.func, // option component to render in dropdown | ||
required: _react2['default'].PropTypes.bool, // applies HTML5 required attribute when needed | ||
resetValue: _react2['default'].PropTypes.any, // value to use when you clear the control | ||
scrollMenuIntoView: _react2['default'].PropTypes.bool, // boolean to enable the viewport to shift so that the full menu fully visible when engaged | ||
@@ -651,2 +662,3 @@ searchable: _react2['default'].PropTypes.bool, // whether to enable searching feature or not | ||
tabIndex: _react2['default'].PropTypes.string, // optional tab index of the control | ||
tabSelectsValue: _react2['default'].PropTypes.bool, // whether to treat tabbing out while focused to be value selection | ||
value: _react2['default'].PropTypes.any, // initial field value | ||
@@ -693,5 +705,7 @@ valueComponent: _react2['default'].PropTypes.func, // value component to render | ||
required: false, | ||
resetValue: null, | ||
scrollMenuIntoView: true, | ||
searchable: true, | ||
simpleValue: false, | ||
tabSelectsValue: true, | ||
valueComponent: _Value2['default'], | ||
@@ -709,3 +723,3 @@ valueKey: 'value' | ||
isPseudoFocused: false, | ||
required: this.props.required && this.handleRequired(this.props.value, this.props.multi) | ||
required: false | ||
}; | ||
@@ -716,2 +730,10 @@ }, | ||
this._flatOptions = this.flattenOptions(this.props.options); | ||
var valueArray = this.getValueArray(this.props.value); | ||
if (this.props.required) { | ||
this.setState({ | ||
required: this.handleRequired(valueArray[0], this.props.multi) | ||
}); | ||
} | ||
}, | ||
@@ -729,5 +751,8 @@ | ||
} | ||
if (this.props.value !== nextProps.value && nextProps.required) { | ||
var valueArray = this.getValueArray(nextProps.value); | ||
if (nextProps.required) { | ||
this.setState({ | ||
required: this.handleRequired(nextProps.value, nextProps.multi) | ||
required: this.handleRequired(valueArray[0], nextProps.multi) | ||
}); | ||
@@ -748,4 +773,5 @@ } | ||
var focusedOptionNode = _reactDom2['default'].findDOMNode(this.refs.focused); | ||
var focusedOptionParent = focusedOptionNode.parentElement; | ||
var menuNode = _reactDom2['default'].findDOMNode(this.refs.menu); | ||
menuNode.scrollTop = focusedOptionNode.offsetTop; | ||
menuNode.scrollTop = focusedOptionParent.className === 'Select-menu' ? focusedOptionNode.offsetTop : focusedOptionParent.offsetTop; | ||
this.hasScrolledToOption = true; | ||
@@ -756,5 +782,2 @@ } else if (!this.state.isOpen) { | ||
if (prevState.inputValue !== this.state.inputValue && this.props.onInputChange) { | ||
this.props.onInputChange(this.state.inputValue); | ||
} | ||
if (this._scrollToFocusedOptionOnUpdate && this.refs.focused && this.refs.menu) { | ||
@@ -773,3 +796,3 @@ this._scrollToFocusedOptionOnUpdate = false; | ||
if (window.innerHeight < menuContainerRect.bottom + this.props.menuBuffer) { | ||
window.scrollTo(0, window.scrollY + menuContainerRect.bottom + this.props.menuBuffer - window.innerHeight); | ||
window.scrollBy(0, menuContainerRect.bottom + this.props.menuBuffer - window.innerHeight); | ||
} | ||
@@ -898,3 +921,3 @@ } | ||
handleInputFocus: function handleInputFocus(event) { | ||
var isOpen = this.state.isOpen || this._openAfterFocus; | ||
var isOpen = this.state.isOpen || this._openAfterFocus || this.props.openOnFocus; | ||
if (this.props.onFocus) { | ||
@@ -911,3 +934,4 @@ this.props.onFocus(event); | ||
handleInputBlur: function handleInputBlur(event) { | ||
if (this.refs.menu && document.activeElement.isEqualNode(this.refs.menu)) { | ||
if (this.refs.menu && document.activeElement === this.refs.menu) { | ||
this.focus(); | ||
return; | ||
@@ -931,6 +955,14 @@ } | ||
handleInputChange: function handleInputChange(event) { | ||
var newInputValue = event.target.value; | ||
if (this.state.inputValue !== event.target.value && this.props.onInputChange) { | ||
var nextState = this.props.onInputChange(newInputValue); | ||
// Note: != used deliberately here to catch undefined and null | ||
if (nextState != null) { | ||
newInputValue = '' + nextState; | ||
} | ||
} | ||
this.setState({ | ||
isOpen: true, | ||
isPseudoFocused: false, | ||
inputValue: event.target.value | ||
inputValue: newInputValue | ||
}); | ||
@@ -951,3 +983,3 @@ }, | ||
// tab | ||
if (event.shiftKey || !this.state.isOpen) { | ||
if (event.shiftKey || !this.state.isOpen || !this.props.tabSelectsValue) { | ||
return; | ||
@@ -1017,4 +1049,3 @@ } | ||
getValueArray: function getValueArray() { | ||
var value = this.props.value; | ||
getValueArray: function getValueArray(value) { | ||
if (this.props.multi) { | ||
@@ -1094,3 +1125,3 @@ if (typeof value === 'string') value = value.split(this.props.delimiter); | ||
addValue: function addValue(value) { | ||
var valueArray = this.getValueArray(); | ||
var valueArray = this.getValueArray(this.props.value); | ||
this.setValue(valueArray.concat(value)); | ||
@@ -1100,3 +1131,3 @@ }, | ||
popValue: function popValue() { | ||
var valueArray = this.getValueArray(); | ||
var valueArray = this.getValueArray(this.props.value); | ||
if (!valueArray.length) return; | ||
@@ -1108,3 +1139,3 @@ if (valueArray[valueArray.length - 1].clearableValue === false) return; | ||
removeValue: function removeValue(value) { | ||
var valueArray = this.getValueArray(); | ||
var valueArray = this.getValueArray(this.props.value); | ||
this.setValue(valueArray.filter(function (i) { | ||
@@ -1124,3 +1155,3 @@ return i !== value; | ||
event.preventDefault(); | ||
this.setValue(null); | ||
this.setValue(this.props.resetValue); | ||
this.setState({ | ||
@@ -1242,38 +1273,42 @@ isOpen: false, | ||
renderInput: function renderInput(valueArray) { | ||
var className = (0, _classnames2['default'])('Select-input', this.props.inputProps.className); | ||
if (this.props.disabled || !this.props.searchable) { | ||
return _react2['default'].createElement('div', _extends({}, this.props.inputProps, { | ||
className: className, | ||
tabIndex: this.props.tabIndex || 0, | ||
onBlur: this.handleInputBlur, | ||
onFocus: this.handleInputFocus, | ||
ref: 'input', | ||
style: { border: 0, width: 1, display: 'inline-block' } })); | ||
if (this.props.inputRenderer) { | ||
return this.props.inputRenderer(); | ||
} else { | ||
var className = (0, _classnames2['default'])('Select-input', this.props.inputProps.className); | ||
if (this.props.disabled || !this.props.searchable) { | ||
return _react2['default'].createElement('div', _extends({}, this.props.inputProps, { | ||
className: className, | ||
tabIndex: this.props.tabIndex || 0, | ||
onBlur: this.handleInputBlur, | ||
onFocus: this.handleInputFocus, | ||
ref: 'input', | ||
style: { border: 0, width: 1, display: 'inline-block' } })); | ||
} | ||
if (this.props.autosize) { | ||
return _react2['default'].createElement(_reactInputAutosize2['default'], _extends({}, this.props.inputProps, { | ||
className: className, | ||
tabIndex: this.props.tabIndex, | ||
onBlur: this.handleInputBlur, | ||
onChange: this.handleInputChange, | ||
onFocus: this.handleInputFocus, | ||
minWidth: '5', | ||
ref: 'input', | ||
required: this.state.required, | ||
value: this.state.inputValue | ||
})); | ||
} | ||
return _react2['default'].createElement( | ||
'div', | ||
{ className: className }, | ||
_react2['default'].createElement('input', _extends({}, this.props.inputProps, { | ||
tabIndex: this.props.tabIndex, | ||
onBlur: this.handleInputBlur, | ||
onChange: this.handleInputChange, | ||
onFocus: this.handleInputFocus, | ||
ref: 'input', | ||
required: this.state.required, | ||
value: this.state.inputValue | ||
})) | ||
); | ||
} | ||
if (this.props.autosize) { | ||
return _react2['default'].createElement(_reactInputAutosize2['default'], _extends({}, this.props.inputProps, { | ||
className: className, | ||
tabIndex: this.props.tabIndex, | ||
onBlur: this.handleInputBlur, | ||
onChange: this.handleInputChange, | ||
onFocus: this.handleInputFocus, | ||
minWidth: '5', | ||
ref: 'input', | ||
required: this.state.required, | ||
value: this.state.inputValue | ||
})); | ||
} | ||
return _react2['default'].createElement( | ||
'div', | ||
{ className: className }, | ||
_react2['default'].createElement('input', _extends({}, this.props.inputProps, { | ||
tabIndex: this.props.tabIndex, | ||
onBlur: this.handleInputBlur, | ||
onChange: this.handleInputChange, | ||
onFocus: this.handleInputFocus, | ||
ref: 'input', | ||
required: this.state.required, | ||
value: this.state.inputValue | ||
})) | ||
); | ||
}, | ||
@@ -1492,4 +1527,29 @@ | ||
renderOuter: function renderOuter(options, valueArray, focusedOption) { | ||
var Dropdown = this.props.dropdownComponent; | ||
var menu = this.renderMenu(options, valueArray, focusedOption); | ||
if (!menu) { | ||
return null; | ||
} | ||
return _react2['default'].createElement( | ||
Dropdown, | ||
null, | ||
_react2['default'].createElement( | ||
'div', | ||
{ ref: 'menuContainer', className: 'Select-menu-outer', style: this.props.menuContainerStyle }, | ||
_react2['default'].createElement( | ||
'div', | ||
{ ref: 'menu', className: 'Select-menu', | ||
style: this.props.menuStyle, | ||
onScroll: this.handleMenuScroll, | ||
onMouseDown: this.handleMouseDownOnMenu }, | ||
menu | ||
) | ||
) | ||
); | ||
}, | ||
render: function render() { | ||
var valueArray = this.getValueArray(); | ||
var valueArray = this.getValueArray(this.props.value); | ||
var options = this.filterOptions(this.props.options || [], this.props.multi ? valueArray : null); | ||
@@ -1502,2 +1562,3 @@ this._visibleOptions = this.flattenOptions(options); | ||
'Select--multi': this.props.multi, | ||
'Select--single': !this.props.multi, | ||
'is-disabled': this.props.disabled, | ||
@@ -1511,3 +1572,3 @@ 'is-focused': this.state.isFocused, | ||
}); | ||
var Dropdown = this.props.dropdownComponent; | ||
return _react2['default'].createElement( | ||
@@ -1533,18 +1594,3 @@ 'div', | ||
), | ||
isOpen ? _react2['default'].createElement( | ||
Dropdown, | ||
null, | ||
_react2['default'].createElement( | ||
'div', | ||
{ ref: 'menuContainer', className: 'Select-menu-outer', style: this.props.menuContainerStyle }, | ||
_react2['default'].createElement( | ||
'div', | ||
{ ref: 'menu', className: 'Select-menu', | ||
style: this.props.menuStyle, | ||
onScroll: this.handleMenuScroll, | ||
onMouseDown: this.handleMouseDownOnMenu }, | ||
this.renderMenu(options, !this.props.multi ? valueArray : null, focusedOption) | ||
) | ||
) | ||
) : null | ||
isOpen ? this.renderOuter(options, !this.props.multi ? valueArray : null, focusedOption) : null | ||
); | ||
@@ -1551,0 +1597,0 @@ } |
@@ -67,3 +67,4 @@ (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Select = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ | ||
minimumInput: _react2['default'].PropTypes.number, // the minimum number of characters that trigger loadOptions | ||
noResultsText: _react2['default'].PropTypes.string, // placeholder displayed when there are no matching search results (shared with Select) | ||
noResultsText: stringOrNode, // placeholder displayed when there are no matching search results (shared with Select) | ||
onInputChange: _react2['default'].PropTypes.func, // onInputChange handler: function (inputValue) {} | ||
placeholder: stringOrNode, // field placeholder, displayed when there's no value (shared with Select) | ||
@@ -130,2 +131,9 @@ searchPromptText: _react2['default'].PropTypes.string, // label to prompt for search input | ||
loadOptions: function loadOptions(input) { | ||
if (this.props.onInputChange) { | ||
var nextState = this.props.onInputChange(input); | ||
// Note: != used deliberately here to catch undefined and null | ||
if (nextState != null) { | ||
input = '' + nextState; | ||
} | ||
} | ||
if (this.props.ignoreAccents) input = (0, _utilsStripDiacritics2['default'])(input); | ||
@@ -484,3 +492,3 @@ if (this.props.ignoreCase) input = input.toLowerCase(); | ||
allowCreate: _react2['default'].PropTypes.bool, // whether to allow creation of new entries | ||
autoBlur: _react2['default'].PropTypes.bool, | ||
autoBlur: _react2['default'].PropTypes.bool, // automatically blur the component when an option is selected | ||
autofocus: _react2['default'].PropTypes.bool, // autofocus the component on mount | ||
@@ -502,2 +510,3 @@ autosize: _react2['default'].PropTypes.bool, // whether to enable autosizing or not | ||
inputProps: _react2['default'].PropTypes.object, // custom attributes for the Input | ||
inputRenderer: _react2['default'].PropTypes.func, // returns a custom input component | ||
isLoading: _react2['default'].PropTypes.bool, // whether the Select is loading externally or not (such as options being loaded) | ||
@@ -527,2 +536,3 @@ isOpen: _react2['default'].PropTypes.bool, // whether the Select dropdown menu is open or not | ||
openAfterFocus: _react2['default'].PropTypes.bool, // boolean to enable opening dropdown when focused | ||
openOnFocus: _react2['default'].PropTypes.bool, // always open options menu on focus | ||
optionClassName: _react2['default'].PropTypes.string, // additional class(es) to apply to the <Option /> elements | ||
@@ -536,2 +546,3 @@ optionComponent: _react2['default'].PropTypes.func, // option component to render in dropdown | ||
required: _react2['default'].PropTypes.bool, // applies HTML5 required attribute when needed | ||
resetValue: _react2['default'].PropTypes.any, // value to use when you clear the control | ||
scrollMenuIntoView: _react2['default'].PropTypes.bool, // boolean to enable the viewport to shift so that the full menu fully visible when engaged | ||
@@ -542,2 +553,3 @@ searchable: _react2['default'].PropTypes.bool, // whether to enable searching feature or not | ||
tabIndex: _react2['default'].PropTypes.string, // optional tab index of the control | ||
tabSelectsValue: _react2['default'].PropTypes.bool, // whether to treat tabbing out while focused to be value selection | ||
value: _react2['default'].PropTypes.any, // initial field value | ||
@@ -584,5 +596,7 @@ valueComponent: _react2['default'].PropTypes.func, // value component to render | ||
required: false, | ||
resetValue: null, | ||
scrollMenuIntoView: true, | ||
searchable: true, | ||
simpleValue: false, | ||
tabSelectsValue: true, | ||
valueComponent: _Value2['default'], | ||
@@ -600,3 +614,3 @@ valueKey: 'value' | ||
isPseudoFocused: false, | ||
required: this.props.required && this.handleRequired(this.props.value, this.props.multi) | ||
required: false | ||
}; | ||
@@ -607,2 +621,10 @@ }, | ||
this._flatOptions = this.flattenOptions(this.props.options); | ||
var valueArray = this.getValueArray(this.props.value); | ||
if (this.props.required) { | ||
this.setState({ | ||
required: this.handleRequired(valueArray[0], this.props.multi) | ||
}); | ||
} | ||
}, | ||
@@ -620,5 +642,8 @@ | ||
} | ||
if (this.props.value !== nextProps.value && nextProps.required) { | ||
var valueArray = this.getValueArray(nextProps.value); | ||
if (nextProps.required) { | ||
this.setState({ | ||
required: this.handleRequired(nextProps.value, nextProps.multi) | ||
required: this.handleRequired(valueArray[0], nextProps.multi) | ||
}); | ||
@@ -639,4 +664,5 @@ } | ||
var focusedOptionNode = _reactDom2['default'].findDOMNode(this.refs.focused); | ||
var focusedOptionParent = focusedOptionNode.parentElement; | ||
var menuNode = _reactDom2['default'].findDOMNode(this.refs.menu); | ||
menuNode.scrollTop = focusedOptionNode.offsetTop; | ||
menuNode.scrollTop = focusedOptionParent.className === 'Select-menu' ? focusedOptionNode.offsetTop : focusedOptionParent.offsetTop; | ||
this.hasScrolledToOption = true; | ||
@@ -647,5 +673,2 @@ } else if (!this.state.isOpen) { | ||
if (prevState.inputValue !== this.state.inputValue && this.props.onInputChange) { | ||
this.props.onInputChange(this.state.inputValue); | ||
} | ||
if (this._scrollToFocusedOptionOnUpdate && this.refs.focused && this.refs.menu) { | ||
@@ -664,3 +687,3 @@ this._scrollToFocusedOptionOnUpdate = false; | ||
if (window.innerHeight < menuContainerRect.bottom + this.props.menuBuffer) { | ||
window.scrollTo(0, window.scrollY + menuContainerRect.bottom + this.props.menuBuffer - window.innerHeight); | ||
window.scrollBy(0, menuContainerRect.bottom + this.props.menuBuffer - window.innerHeight); | ||
} | ||
@@ -789,3 +812,3 @@ } | ||
handleInputFocus: function handleInputFocus(event) { | ||
var isOpen = this.state.isOpen || this._openAfterFocus; | ||
var isOpen = this.state.isOpen || this._openAfterFocus || this.props.openOnFocus; | ||
if (this.props.onFocus) { | ||
@@ -802,3 +825,4 @@ this.props.onFocus(event); | ||
handleInputBlur: function handleInputBlur(event) { | ||
if (this.refs.menu && document.activeElement.isEqualNode(this.refs.menu)) { | ||
if (this.refs.menu && document.activeElement === this.refs.menu) { | ||
this.focus(); | ||
return; | ||
@@ -822,6 +846,14 @@ } | ||
handleInputChange: function handleInputChange(event) { | ||
var newInputValue = event.target.value; | ||
if (this.state.inputValue !== event.target.value && this.props.onInputChange) { | ||
var nextState = this.props.onInputChange(newInputValue); | ||
// Note: != used deliberately here to catch undefined and null | ||
if (nextState != null) { | ||
newInputValue = '' + nextState; | ||
} | ||
} | ||
this.setState({ | ||
isOpen: true, | ||
isPseudoFocused: false, | ||
inputValue: event.target.value | ||
inputValue: newInputValue | ||
}); | ||
@@ -842,3 +874,3 @@ }, | ||
// tab | ||
if (event.shiftKey || !this.state.isOpen) { | ||
if (event.shiftKey || !this.state.isOpen || !this.props.tabSelectsValue) { | ||
return; | ||
@@ -908,4 +940,3 @@ } | ||
getValueArray: function getValueArray() { | ||
var value = this.props.value; | ||
getValueArray: function getValueArray(value) { | ||
if (this.props.multi) { | ||
@@ -985,3 +1016,3 @@ if (typeof value === 'string') value = value.split(this.props.delimiter); | ||
addValue: function addValue(value) { | ||
var valueArray = this.getValueArray(); | ||
var valueArray = this.getValueArray(this.props.value); | ||
this.setValue(valueArray.concat(value)); | ||
@@ -991,3 +1022,3 @@ }, | ||
popValue: function popValue() { | ||
var valueArray = this.getValueArray(); | ||
var valueArray = this.getValueArray(this.props.value); | ||
if (!valueArray.length) return; | ||
@@ -999,3 +1030,3 @@ if (valueArray[valueArray.length - 1].clearableValue === false) return; | ||
removeValue: function removeValue(value) { | ||
var valueArray = this.getValueArray(); | ||
var valueArray = this.getValueArray(this.props.value); | ||
this.setValue(valueArray.filter(function (i) { | ||
@@ -1015,3 +1046,3 @@ return i !== value; | ||
event.preventDefault(); | ||
this.setValue(null); | ||
this.setValue(this.props.resetValue); | ||
this.setState({ | ||
@@ -1133,38 +1164,42 @@ isOpen: false, | ||
renderInput: function renderInput(valueArray) { | ||
var className = (0, _classnames2['default'])('Select-input', this.props.inputProps.className); | ||
if (this.props.disabled || !this.props.searchable) { | ||
return _react2['default'].createElement('div', _extends({}, this.props.inputProps, { | ||
className: className, | ||
tabIndex: this.props.tabIndex || 0, | ||
onBlur: this.handleInputBlur, | ||
onFocus: this.handleInputFocus, | ||
ref: 'input', | ||
style: { border: 0, width: 1, display: 'inline-block' } })); | ||
if (this.props.inputRenderer) { | ||
return this.props.inputRenderer(); | ||
} else { | ||
var className = (0, _classnames2['default'])('Select-input', this.props.inputProps.className); | ||
if (this.props.disabled || !this.props.searchable) { | ||
return _react2['default'].createElement('div', _extends({}, this.props.inputProps, { | ||
className: className, | ||
tabIndex: this.props.tabIndex || 0, | ||
onBlur: this.handleInputBlur, | ||
onFocus: this.handleInputFocus, | ||
ref: 'input', | ||
style: { border: 0, width: 1, display: 'inline-block' } })); | ||
} | ||
if (this.props.autosize) { | ||
return _react2['default'].createElement(_reactInputAutosize2['default'], _extends({}, this.props.inputProps, { | ||
className: className, | ||
tabIndex: this.props.tabIndex, | ||
onBlur: this.handleInputBlur, | ||
onChange: this.handleInputChange, | ||
onFocus: this.handleInputFocus, | ||
minWidth: '5', | ||
ref: 'input', | ||
required: this.state.required, | ||
value: this.state.inputValue | ||
})); | ||
} | ||
return _react2['default'].createElement( | ||
'div', | ||
{ className: className }, | ||
_react2['default'].createElement('input', _extends({}, this.props.inputProps, { | ||
tabIndex: this.props.tabIndex, | ||
onBlur: this.handleInputBlur, | ||
onChange: this.handleInputChange, | ||
onFocus: this.handleInputFocus, | ||
ref: 'input', | ||
required: this.state.required, | ||
value: this.state.inputValue | ||
})) | ||
); | ||
} | ||
if (this.props.autosize) { | ||
return _react2['default'].createElement(_reactInputAutosize2['default'], _extends({}, this.props.inputProps, { | ||
className: className, | ||
tabIndex: this.props.tabIndex, | ||
onBlur: this.handleInputBlur, | ||
onChange: this.handleInputChange, | ||
onFocus: this.handleInputFocus, | ||
minWidth: '5', | ||
ref: 'input', | ||
required: this.state.required, | ||
value: this.state.inputValue | ||
})); | ||
} | ||
return _react2['default'].createElement( | ||
'div', | ||
{ className: className }, | ||
_react2['default'].createElement('input', _extends({}, this.props.inputProps, { | ||
tabIndex: this.props.tabIndex, | ||
onBlur: this.handleInputBlur, | ||
onChange: this.handleInputChange, | ||
onFocus: this.handleInputFocus, | ||
ref: 'input', | ||
required: this.state.required, | ||
value: this.state.inputValue | ||
})) | ||
); | ||
}, | ||
@@ -1383,4 +1418,29 @@ | ||
renderOuter: function renderOuter(options, valueArray, focusedOption) { | ||
var Dropdown = this.props.dropdownComponent; | ||
var menu = this.renderMenu(options, valueArray, focusedOption); | ||
if (!menu) { | ||
return null; | ||
} | ||
return _react2['default'].createElement( | ||
Dropdown, | ||
null, | ||
_react2['default'].createElement( | ||
'div', | ||
{ ref: 'menuContainer', className: 'Select-menu-outer', style: this.props.menuContainerStyle }, | ||
_react2['default'].createElement( | ||
'div', | ||
{ ref: 'menu', className: 'Select-menu', | ||
style: this.props.menuStyle, | ||
onScroll: this.handleMenuScroll, | ||
onMouseDown: this.handleMouseDownOnMenu }, | ||
menu | ||
) | ||
) | ||
); | ||
}, | ||
render: function render() { | ||
var valueArray = this.getValueArray(); | ||
var valueArray = this.getValueArray(this.props.value); | ||
var options = this.filterOptions(this.props.options || [], this.props.multi ? valueArray : null); | ||
@@ -1393,2 +1453,3 @@ this._visibleOptions = this.flattenOptions(options); | ||
'Select--multi': this.props.multi, | ||
'Select--single': !this.props.multi, | ||
'is-disabled': this.props.disabled, | ||
@@ -1402,3 +1463,3 @@ 'is-focused': this.state.isFocused, | ||
}); | ||
var Dropdown = this.props.dropdownComponent; | ||
return _react2['default'].createElement( | ||
@@ -1424,18 +1485,3 @@ 'div', | ||
), | ||
isOpen ? _react2['default'].createElement( | ||
Dropdown, | ||
null, | ||
_react2['default'].createElement( | ||
'div', | ||
{ ref: 'menuContainer', className: 'Select-menu-outer', style: this.props.menuContainerStyle }, | ||
_react2['default'].createElement( | ||
'div', | ||
{ ref: 'menu', className: 'Select-menu', | ||
style: this.props.menuStyle, | ||
onScroll: this.handleMenuScroll, | ||
onMouseDown: this.handleMouseDownOnMenu }, | ||
this.renderMenu(options, !this.props.multi ? valueArray : null, focusedOption) | ||
) | ||
) | ||
) : null | ||
isOpen ? this.renderOuter(options, !this.props.multi ? valueArray : null, focusedOption) : null | ||
); | ||
@@ -1442,0 +1488,0 @@ } |
@@ -1,2 +0,2 @@ | ||
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Select=e()}}(function(){return function e(t,u,s){function o(i,r){if(!u[i]){if(!t[i]){var a="function"==typeof require&&require;if(!r&&a)return a(i,!0);if(n)return n(i,!0);var l=new Error("Cannot find module '"+i+"'");throw l.code="MODULE_NOT_FOUND",l}var p=u[i]={exports:{}};t[i][0].call(p.exports,function(e){var u=t[i][1][e];return o(u?u:e)},p,p.exports,e,t,u,s)}return u[i].exports}for(var n="function"==typeof require&&require,i=0;i<s.length;i++)o(s[i]);return o}({1:[function(e,t,u){(function(u){"use strict";function s(e){return e&&e.__esModule?e:{"default":e}}function o(e){return e&&"object"!=typeof e&&(e={}),e?e:null}function n(e,t,u){e&&(e[t]=u)}function i(e,t){if(e)for(var u=t.length;u>=0;--u){var s=t.slice(0,u);if(e[s]&&(t===s||e[s].complete))return e[s]}}function r(e,t){return e&&"function"==typeof e.then?e.then(function(e){t(null,e)},function(e){t(e)}):void 0}var a=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var u=arguments[t];for(var s in u)Object.prototype.hasOwnProperty.call(u,s)&&(e[s]=u[s])}return e},l="undefined"!=typeof window?window.React:"undefined"!=typeof u?u.React:null,p=s(l),d=e("./Select"),c=s(d),f=e("./utils/stripDiacritics"),h=s(f),E=0,g=p["default"].PropTypes.oneOfType([p["default"].PropTypes.string,p["default"].PropTypes.node]),b=p["default"].createClass({displayName:"Async",propTypes:{cache:p["default"].PropTypes.any,ignoreAccents:p["default"].PropTypes.bool,ignoreCase:p["default"].PropTypes.bool,isLoading:p["default"].PropTypes.bool,loadOptions:p["default"].PropTypes.func.isRequired,loadingPlaceholder:p["default"].PropTypes.string,minimumInput:p["default"].PropTypes.number,noResultsText:g,onInputChange:p["default"].PropTypes.func,placeholder:g,searchPromptText:p["default"].PropTypes.string,searchingText:p["default"].PropTypes.string},getDefaultProps:function(){return{cache:!0,ignoreAccents:!0,ignoreCase:!0,loadingPlaceholder:"Loading...",minimumInput:0,searchingText:"Searching...",searchPromptText:"Type to search"}},getInitialState:function(){return{cache:o(this.props.cache),isLoading:!1,options:[]}},componentWillMount:function(){this._lastInput=""},componentDidMount:function(){this.loadOptions("")},componentWillReceiveProps:function(e){e.cache!==this.props.cache&&this.setState({cache:o(e.cache)})},focus:function(){this.refs.select.focus()},resetState:function(){this._currentRequestId=-1,this.setState({isLoading:!1,options:[]})},getResponseHandler:function(e){var t=this,u=this._currentRequestId=E++;return function(s,o){if(s)throw s;t.isMounted()&&(n(t.state.cache,e,o),u===t._currentRequestId&&t.setState({isLoading:!1,options:o&&o.options||[]}))}},loadOptions:function(e){if(this.props.onInputChange){var t=this.props.onInputChange(e);null!=t&&(e=""+t)}if(this.props.ignoreAccents&&(e=(0,h["default"])(e)),this.props.ignoreCase&&(e=e.toLowerCase()),this._lastInput=e,e.length<this.props.minimumInput)return this.resetState();var u=i(this.state.cache,e);if(u)return this.setState({options:u.options});this.setState({isLoading:!0});var s=this.getResponseHandler(e);return r(this.props.loadOptions(e,s),s)},render:function(){var e=this.props.noResultsText,t=this.state,u=t.isLoading,s=t.options;this.props.isLoading&&(u=!0);var o=u?this.props.loadingPlaceholder:this.props.placeholder;return s.length||(this._lastInput.length<this.props.minimumInput&&(e=this.props.searchPromptText),u&&(e=this.props.searchingText)),p["default"].createElement(c["default"],a({},this.props,{ref:"select",isLoading:u,noResultsText:e,onInputChange:this.loadOptions,options:s,placeholder:o}))}});t.exports=b}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./Select":5,"./utils/stripDiacritics":7}],2:[function(e,t,u){(function(e){"use strict";function u(e){return e&&e.__esModule?e:{"default":e}}var s="undefined"!=typeof window?window.React:"undefined"!=typeof e?e.React:null,o=u(s),n=o["default"].createClass({displayName:"Dropdown",propTypes:{children:o["default"].PropTypes.node},render:function(){return this.props.children}});t.exports=n}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],3:[function(e,t,u){(function(e){"use strict";function u(e){return e&&e.__esModule?e:{"default":e}}var s="undefined"!=typeof window?window.React:"undefined"!=typeof e?e.React:null,o=u(s),n="undefined"!=typeof window?window.classNames:"undefined"!=typeof e?e.classNames:null,i=u(n),r=o["default"].createClass({displayName:"Option",propTypes:{children:o["default"].PropTypes.node,className:o["default"].PropTypes.string,isDisabled:o["default"].PropTypes.bool,isFocused:o["default"].PropTypes.bool,isSelected:o["default"].PropTypes.bool,onFocus:o["default"].PropTypes.func,onSelect:o["default"].PropTypes.func,onUnfocus:o["default"].PropTypes.func,option:o["default"].PropTypes.object.isRequired},blockEvent:function(e){e.preventDefault(),e.stopPropagation(),"A"===e.target.tagName&&"href"in e.target&&(e.target.target?window.open(e.target.href,e.target.target):window.location.href=e.target.href)},handleMouseDown:function(e){e.preventDefault(),e.stopPropagation(),this.props.onSelect(this.props.option,e)},handleMouseEnter:function(e){this.onFocus(e)},handleMouseMove:function(e){this.onFocus(e)},handleTouchEnd:function(e){this.dragging||this.handleMouseDown(e)},handleTouchMove:function(e){this.dragging=!0},handleTouchStart:function(e){this.dragging=!1},onFocus:function(e){this.props.isFocused||this.props.onFocus(this.props.option,e)},render:function(){var e=this.props.option,t=(0,i["default"])(this.props.className,e.className);return e.disabled?o["default"].createElement("div",{className:t,onMouseDown:this.blockEvent,onClick:this.blockEvent},this.props.children):o["default"].createElement("div",{className:t,style:e.style,onMouseDown:this.handleMouseDown,onMouseEnter:this.handleMouseEnter,onMouseMove:this.handleMouseMove,onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove,onTouchEnd:this.handleTouchEnd,title:e.title},this.props.children)}});t.exports=r}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],4:[function(e,t,u){(function(e){"use strict";function u(e){return e&&e.__esModule?e:{"default":e}}var s="undefined"!=typeof window?window.React:"undefined"!=typeof e?e.React:null,o=u(s),n="undefined"!=typeof window?window.classNames:"undefined"!=typeof e?e.classNames:null,i=u(n),r=o["default"].createClass({displayName:"OptionGroup",propTypes:{children:o["default"].PropTypes.any,className:o["default"].PropTypes.string,label:o["default"].PropTypes.node,option:o["default"].PropTypes.object.isRequired},blockEvent:function(e){e.preventDefault(),e.stopPropagation(),"A"===e.target.tagName&&"href"in e.target&&(e.target.target?window.open(e.target.href,e.target.target):window.location.href=e.target.href)},handleMouseDown:function(e){e.preventDefault(),e.stopPropagation()},handleTouchEnd:function(e){this.dragging||this.handleMouseDown(e)},handleTouchMove:function(e){this.dragging=!0},handleTouchStart:function(e){this.dragging=!1},render:function(){var e=this.props.option,t=(0,i["default"])(this.props.className,e.className);return e.disabled?o["default"].createElement("div",{className:t,onMouseDown:this.blockEvent,onClick:this.blockEvent},this.props.children):o["default"].createElement("div",{className:t,style:e.style,onMouseDown:this.handleMouseDown,onMouseEnter:this.handleMouseEnter,onMouseMove:this.handleMouseMove,onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove,onTouchEnd:this.handleTouchEnd,title:e.title},o["default"].createElement("div",{className:"Select-option-group-label"},this.props.label),this.props.children)}});t.exports=r}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],5:[function(e,t,u){(function(s){"use strict";function o(e){return e&&e.__esModule?e:{"default":e}}function n(e,t,u){return t in e?Object.defineProperty(e,t,{value:u,enumerable:!0,configurable:!0,writable:!0}):e[t]=u,e}function i(e){var t={};for(var u in e)e.hasOwnProperty(u)&&(t[u]=e[u]);return t}function r(e){return"object"==typeof e?JSON.stringify(e):e}Object.defineProperty(u,"__esModule",{value:!0});var a=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var u=arguments[t];for(var s in u)Object.prototype.hasOwnProperty.call(u,s)&&(e[s]=u[s])}return e},l="undefined"!=typeof window?window.React:"undefined"!=typeof s?s.React:null,p=o(l),d="undefined"!=typeof window?window.ReactDOM:"undefined"!=typeof s?s.ReactDOM:null,c=o(d),f="undefined"!=typeof window?window.AutosizeInput:"undefined"!=typeof s?s.AutosizeInput:null,h=o(f),E="undefined"!=typeof window?window.classNames:"undefined"!=typeof s?s.classNames:null,g=o(E),b=e("./utils/stripDiacritics"),y=o(b),F=e("./Async"),m=o(F),v=e("./Dropdown"),A=o(v),C=e("./Option"),T=o(C),D=e("./OptionGroup"),w=o(D),P=e("./Value"),O=o(P),B=p["default"].PropTypes.oneOfType([p["default"].PropTypes.string,p["default"].PropTypes.node]),S=p["default"].createClass({displayName:"Select",propTypes:{addLabelText:p["default"].PropTypes.string,allowCreate:p["default"].PropTypes.bool,autoBlur:p["default"].PropTypes.bool,autofocus:p["default"].PropTypes.bool,autosize:p["default"].PropTypes.bool,backspaceRemoves:p["default"].PropTypes.bool,className:p["default"].PropTypes.string,clearAllText:B,clearValueText:B,clearable:p["default"].PropTypes.bool,delimiter:p["default"].PropTypes.string,disabled:p["default"].PropTypes.bool,dropdownComponent:p["default"].PropTypes.func,escapeClearsValue:p["default"].PropTypes.bool,filterOption:p["default"].PropTypes.func,filterOptions:p["default"].PropTypes.any,ignoreAccents:p["default"].PropTypes.bool,ignoreCase:p["default"].PropTypes.bool,inputProps:p["default"].PropTypes.object,inputRenderer:p["default"].PropTypes.func,isLoading:p["default"].PropTypes.bool,isOpen:p["default"].PropTypes.bool,joinValues:p["default"].PropTypes.bool,labelKey:p["default"].PropTypes.string,matchPos:p["default"].PropTypes.string,matchProp:p["default"].PropTypes.string,menuBuffer:p["default"].PropTypes.number,menuContainerStyle:p["default"].PropTypes.object,menuRenderer:p["default"].PropTypes.func,menuStyle:p["default"].PropTypes.object,multi:p["default"].PropTypes.bool,name:p["default"].PropTypes.string,newOptionCreator:p["default"].PropTypes.func,noResultsText:B,onBlur:p["default"].PropTypes.func,onBlurResetsInput:p["default"].PropTypes.bool,onChange:p["default"].PropTypes.func,onClose:p["default"].PropTypes.func,onFocus:p["default"].PropTypes.func,onInputChange:p["default"].PropTypes.func,onMenuScrollToBottom:p["default"].PropTypes.func,onOpen:p["default"].PropTypes.func,onValueClick:p["default"].PropTypes.func,openAfterFocus:p["default"].PropTypes.bool,openOnFocus:p["default"].PropTypes.bool,optionClassName:p["default"].PropTypes.string,optionComponent:p["default"].PropTypes.func,optionGroupComponent:p["default"].PropTypes.func,optionRenderer:p["default"].PropTypes.func,options:p["default"].PropTypes.array,placeholder:B,renderInvalidValues:p["default"].PropTypes.bool,required:p["default"].PropTypes.bool,resetValue:p["default"].PropTypes.any,scrollMenuIntoView:p["default"].PropTypes.bool,searchable:p["default"].PropTypes.bool,simpleValue:p["default"].PropTypes.bool,style:p["default"].PropTypes.object,tabIndex:p["default"].PropTypes.string,tabSelectsValue:p["default"].PropTypes.bool,value:p["default"].PropTypes.any,valueComponent:p["default"].PropTypes.func,valueKey:p["default"].PropTypes.string,valueRenderer:p["default"].PropTypes.func,wrapperStyle:p["default"].PropTypes.object},statics:{Async:m["default"]},getDefaultProps:function(){return{addLabelText:'Add "{label}"?',autosize:!0,allowCreate:!1,backspaceRemoves:!0,clearable:!0,clearAllText:"Clear all",clearValueText:"Clear value",delimiter:",",disabled:!1,dropdownComponent:A["default"],escapeClearsValue:!0,filterOptions:!0,ignoreAccents:!0,ignoreCase:!0,inputProps:{},isLoading:!1,joinValues:!1,labelKey:"label",matchPos:"any",matchProp:"any",menuBuffer:0,multi:!1,noResultsText:"No results found",onBlurResetsInput:!0,openAfterFocus:!1,optionComponent:T["default"],optionGroupComponent:w["default"],placeholder:"Select...",renderInvalidValues:!1,required:!1,resetValue:null,scrollMenuIntoView:!0,searchable:!0,simpleValue:!1,tabSelectsValue:!0,valueComponent:O["default"],valueKey:"value"}},getInitialState:function(){return{inputValue:"",isFocused:!1,isLoading:!1,isOpen:!1,isPseudoFocused:!1,required:!1}},componentWillMount:function(){this._flatOptions=this.flattenOptions(this.props.options);var e=this.getValueArray(this.props.value);this.props.required&&this.setState({required:this.handleRequired(e[0],this.props.multi)})},componentDidMount:function(){this.props.autofocus&&this.focus()},componentWillReceiveProps:function(e){e.options!==this.props.options&&(this._flatOptions=this.flattenOptions(e.options));var t=this.getValueArray(e.value);e.required&&this.setState({required:this.handleRequired(t[0],e.multi)})},componentWillUpdate:function(e,t){if(t.isOpen!==this.state.isOpen){var u=t.isOpen?e.onOpen:e.onClose;u&&u()}},componentDidUpdate:function(e,t){if(this.refs.menu&&this.refs.focused&&this.state.isOpen&&!this.hasScrolledToOption){var u=c["default"].findDOMNode(this.refs.focused),s=u.parentElement,o=c["default"].findDOMNode(this.refs.menu);o.scrollTop="Select-menu"===s.className?u.offsetTop:s.offsetTop,this.hasScrolledToOption=!0}else this.state.isOpen||(this.hasScrolledToOption=!1);if(this._scrollToFocusedOptionOnUpdate&&this.refs.focused&&this.refs.menu){this._scrollToFocusedOptionOnUpdate=!1;var n=c["default"].findDOMNode(this.refs.focused),i=c["default"].findDOMNode(this.refs.menu),r=n.getBoundingClientRect(),a=i.getBoundingClientRect();(r.bottom>a.bottom||r.top<a.top)&&(i.scrollTop=n.offsetTop+n.clientHeight-i.offsetHeight)}if(this.props.scrollMenuIntoView&&this.refs.menuContainer){var l=this.refs.menuContainer.getBoundingClientRect();window.innerHeight<l.bottom+this.props.menuBuffer&&window.scrollBy(0,l.bottom+this.props.menuBuffer-window.innerHeight)}e.disabled!==this.props.disabled&&this.setState({isFocused:!1})},focus:function(){this.refs.input&&(this.refs.input.focus(),this.props.openAfterFocus&&this.setState({isOpen:!0}))},blurInput:function(){this.refs.input&&this.refs.input.blur()},handleTouchMove:function(e){this.dragging=!0},handleTouchStart:function(e){this.dragging=!1},handleTouchEnd:function(e){this.dragging||this.handleMouseDown(e)},handleTouchEndClearValue:function(e){this.dragging||this.clearValue(e)},handleMouseDown:function(e){return this.props.disabled||"mousedown"===e.type&&0!==e.button?void 0:(e.stopPropagation(),e.preventDefault(),this.props.searchable?void(this.state.isFocused?this.setState({isOpen:!0,isPseudoFocused:!1}):(this._openAfterFocus=!0,this.focus())):(this.focus(),this.setState({isOpen:!this.state.isOpen})))},handleMouseDownOnArrow:function(e){this.props.disabled||"mousedown"===e.type&&0!==e.button||this.state.isOpen&&(e.stopPropagation(),e.preventDefault(),this.closeMenu())},handleMouseDownOnMenu:function(e){this.props.disabled||"mousedown"===e.type&&0!==e.button||(e.stopPropagation(),e.preventDefault(),this._openAfterFocus=!0,this.focus())},closeMenu:function(){this.setState({isOpen:!1,isPseudoFocused:this.state.isFocused&&!this.props.multi,inputValue:""}),this.hasScrolledToOption=!1},handleInputFocus:function(e){var t=this.state.isOpen||this._openAfterFocus||this.props.openOnFocus;this.props.onFocus&&this.props.onFocus(e),this.setState({isFocused:!0,isOpen:t}),this._openAfterFocus=!1},handleInputBlur:function(e){if(this.refs.menu&&document.activeElement===this.refs.menu)return void this.focus();this.props.onBlur&&this.props.onBlur(e);var t={isFocused:!1,isOpen:!1,isPseudoFocused:!1};this.props.onBlurResetsInput&&(t.inputValue=""),this.setState(t)},handleInputChange:function(e){var t=e.target.value;if(this.state.inputValue!==e.target.value&&this.props.onInputChange){var u=this.props.onInputChange(t);null!=u&&(t=""+u)}this.setState({isOpen:!0,isPseudoFocused:!1,inputValue:t})},handleKeyDown:function(e){if(!this.props.disabled){switch(e.keyCode){case 8:return void(!this.state.inputValue&&this.props.backspaceRemoves&&(e.preventDefault(),this.popValue()));case 9:if(e.shiftKey||!this.state.isOpen||!this.props.tabSelectsValue)return;return void this.selectFocusedOption();case 13:if(!this.state.isOpen)return;e.stopPropagation(),this.selectFocusedOption();break;case 27:this.state.isOpen?this.closeMenu():this.props.clearable&&this.props.escapeClearsValue&&this.clearValue(e);break;case 38:this.focusPreviousOption();break;case 40:this.focusNextOption();break;default:return}e.preventDefault()}},handleValueClick:function(e,t){this.props.onValueClick&&this.props.onValueClick(e,t)},handleMenuScroll:function(e){if(this.props.onMenuScrollToBottom){var t=e.target;t.scrollHeight>t.offsetHeight&&!(t.scrollHeight-t.offsetHeight-t.scrollTop)&&this.props.onMenuScrollToBottom()}},handleRequired:function(e,t){return e?t?0===e.length:0===Object.keys(e).length:!0},getOptionLabel:function(e){return e[this.props.labelKey]},getValueArray:function(e){if(this.props.multi){if("string"==typeof e&&(e=e.split(this.props.delimiter)),!Array.isArray(e)){if(null===e||void 0===e)return[];e=[e]}return e.map(this.expandValue).filter(function(e){return e})}var t=this.expandValue(e);return t?[t]:[]},expandValue:function(e){if("string"!=typeof e&&"number"!=typeof e)return e;var t=this.props,u=t.labelKey,s=t.valueKey,o=t.renderInvalidValues,i=this._flatOptions;if(i&&""!==e){for(var r=0;r<i.length;r++)if(i[r][s]===e)return i[r];if(o){var a;return a={invalid:!0},n(a,u,e),n(a,s,e),a}}},setValue:function(e){var t=this;if(this.props.autoBlur&&this.blurInput(),this.props.onChange){if(this.props.required){var u=this.handleRequired(e,this.props.multi);this.setState({required:u})}this.props.simpleValue&&e&&(e=this.props.multi?e.map(function(e){return e[t.props.valueKey]}).join(this.props.delimiter):e[this.props.valueKey]),this.props.onChange(e)}},selectValue:function(e){this.hasScrolledToOption=!1,this.props.multi?(this.addValue(e),this.setState({inputValue:""})):(this.setValue(e),this.setState({isOpen:!1,inputValue:"",isPseudoFocused:this.state.isFocused}))},addValue:function(e){var t=this.getValueArray(this.props.value);this.setValue(t.concat(e))},popValue:function(){var e=this.getValueArray(this.props.value);e.length&&e[e.length-1].clearableValue!==!1&&this.setValue(e.slice(0,e.length-1))},removeValue:function(e){var t=this.getValueArray(this.props.value);this.setValue(t.filter(function(t){return t!==e})),this.focus()},clearValue:function(e){e&&"mousedown"===e.type&&0!==e.button||(e.stopPropagation(),e.preventDefault(),this.setValue(this.props.resetValue),this.setState({isOpen:!1,inputValue:""},this.focus))},focusOption:function(e){this.setState({focusedOption:e})},focusNextOption:function(){this.focusAdjacentOption("next")},focusPreviousOption:function(){this.focusAdjacentOption("previous")},focusAdjacentOption:function(e){var t=this._visibleOptions.filter(function(e){return!e.disabled});if(this._scrollToFocusedOptionOnUpdate=!0,!this.state.isOpen)return void this.setState({isOpen:!0,inputValue:"",focusedOption:this._focusedOption||t["next"===e?0:t.length-1]});if(t.length){for(var u=-1,s=0;s<t.length;s++)if(this._focusedOption===t[s]){u=s;break}var o=t[0];"next"===e&&u>-1&&u<t.length-1?o=t[u+1]:"previous"===e&&(o=u>0?t[u-1]:t[t.length-1]),this.setState({focusedOption:o})}},selectFocusedOption:function(){return this._focusedOption?this.selectValue(this._focusedOption):void 0},renderLoading:function(){return this.props.isLoading?p["default"].createElement("span",{className:"Select-loading-zone","aria-hidden":"true"},p["default"].createElement("span",{className:"Select-loading"})):void 0},renderValue:function(e,t){var u=this,s=this.props.valueRenderer||this.getOptionLabel,o=this.props.valueComponent;if(!e.length)return this.state.inputValue?null:p["default"].createElement("div",{className:"Select-placeholder"},this.props.placeholder);var n=this.props.onValueClick?this.handleValueClick:null;return this.props.multi?e.map(function(e,t){return p["default"].createElement(o,{disabled:u.props.disabled||e.clearableValue===!1,key:"value-"+t+"-"+e[u.props.valueKey],onClick:n,onRemove:u.removeValue,value:e},s(e))}):this.state.inputValue?void 0:(t&&(n=null),p["default"].createElement(o,{disabled:this.props.disabled,onClick:n,value:e[0]},s(e[0])))},renderInput:function(e){if(this.props.inputRenderer)return this.props.inputRenderer();var t=(0,g["default"])("Select-input",this.props.inputProps.className);return this.props.disabled||!this.props.searchable?p["default"].createElement("div",a({},this.props.inputProps,{className:t,tabIndex:this.props.tabIndex||0,onBlur:this.handleInputBlur,onFocus:this.handleInputFocus,ref:"input",style:{border:0,width:1,display:"inline-block"}})):this.props.autosize?p["default"].createElement(h["default"],a({},this.props.inputProps,{className:t,tabIndex:this.props.tabIndex,onBlur:this.handleInputBlur,onChange:this.handleInputChange,onFocus:this.handleInputFocus,minWidth:"5",ref:"input",required:this.state.required,value:this.state.inputValue})):p["default"].createElement("div",{className:t},p["default"].createElement("input",a({},this.props.inputProps,{tabIndex:this.props.tabIndex,onBlur:this.handleInputBlur,onChange:this.handleInputChange,onFocus:this.handleInputFocus,ref:"input",required:this.state.required,value:this.state.inputValue})))},renderClear:function(){return!this.props.clearable||!this.props.value||this.props.multi&&!this.props.value.length||this.props.disabled||this.props.isLoading?void 0:p["default"].createElement("span",{className:"Select-clear-zone",title:this.props.multi?this.props.clearAllText:this.props.clearValueText,"aria-label":this.props.multi?this.props.clearAllText:this.props.clearValueText,onMouseDown:this.clearValue,onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove,onTouchEnd:this.handleTouchEndClearValue},p["default"].createElement("span",{className:"Select-clear",dangerouslySetInnerHTML:{__html:"×"}}))},renderArrow:function(){return p["default"].createElement("span",{className:"Select-arrow-zone",onMouseDown:this.handleMouseDownOnArrow},p["default"].createElement("span",{className:"Select-arrow",onMouseDown:this.handleMouseDownOnArrow}))},filterOptions:function(e,t){var u=this,s=null,o=this.state.inputValue;if("function"==typeof this.props.filterOptions)return this.props.filterOptions.call(this,e,o,t);if(!this.props.filterOptions)return e;var n=function(){u.props.ignoreAccents&&(o=(0,y["default"])(o)),u.props.ignoreCase&&(o=o.toLowerCase()),t&&(s=t.map(function(e){return e[u.props.valueKey]}));var n=function(e){if(s&&s.indexOf(e[u.props.valueKey])>-1)return!1;if(u.props.filterOption)return u.props.filterOption.call(u,e,o);if(!o)return!0;var t=String(e[u.props.valueKey]),n=String(e[u.props.labelKey]);return u.props.ignoreAccents&&("label"!==u.props.matchProp&&(t=(0,y["default"])(t)),"value"!==u.props.matchProp&&(n=(0,y["default"])(n))),u.props.ignoreCase&&("label"!==u.props.matchProp&&(t=t.toLowerCase()),"value"!==u.props.matchProp&&(n=n.toLowerCase())),"start"===u.props.matchPos?"label"!==u.props.matchProp&&t.substr(0,o.length)===o||"value"!==u.props.matchProp&&n.substr(0,o.length)===o:"label"!==u.props.matchProp&&t.indexOf(o)>=0||"value"!==u.props.matchProp&&n.indexOf(o)>=0},r=[];return e.forEach(function(e){if(u.isGroup(e)){var s=i(e);s.options=u.filterOptions(e.options,t),s.options.length&&r.push(s)}else n(e)&&r.push(e)}),{v:r}}();return"object"==typeof n?n.v:void 0},isGroup:function(e){return e&&Array.isArray(e.options)},flattenOptions:function(e){if(e){for(var t=[],u=0;u<e.length;u++)this.isGroup(e[u])?t=t.concat(this.flattenOptions(e[u].options)):t.push(e[u]);return t}},renderMenu:function(e,t,u){var s=this;if(!e||!e.length)return this.props.noResultsText?p["default"].createElement("div",{className:"Select-noresults"},this.props.noResultsText):null;if(this.props.menuRenderer)return this.props.menuRenderer({focusedOption:u,focusOption:this.focusOption,labelKey:this.props.labelKey,options:e,selectValue:this.selectValue,valueArray:t});var o=function(){var o=s.props.optionGroupComponent,n=s.props.optionComponent,i=s.props.optionRenderer||s.getOptionLabel;return{v:e.map(function(e,r){if(s.isGroup(e)){var a=(0,g["default"])({"Select-option-group":!0});return p["default"].createElement(o,{className:a,key:"option-group-"+r,label:i(e),option:e},s.renderMenu(e.options,t,u))}var l=t&&t.indexOf(e)>-1,d=e===u,c=d?"focused":null,f=(0,g["default"])(s.props.optionClassName,{"Select-option":!0,"is-selected":l,"is-focused":d,"is-disabled":e.disabled});return p["default"].createElement(n,{className:f,isDisabled:e.disabled,isFocused:d,key:"option-"+r+"-"+e[s.props.valueKey],onSelect:s.selectValue,onFocus:s.focusOption,option:e,isSelected:l,ref:c},i(e))})}}();return"object"==typeof o?o.v:void 0},renderHiddenField:function(e){var t=this;if(this.props.name){if(this.props.joinValues){var u=e.map(function(e){return r(e[t.props.valueKey])}).join(this.props.delimiter);return p["default"].createElement("input",{type:"hidden",ref:"value",name:this.props.name,value:u,disabled:this.props.disabled})}return e.map(function(e,u){return p["default"].createElement("input",{key:"hidden."+u,type:"hidden",ref:"value"+u,name:t.props.name,value:r(e[t.props.valueKey]),disabled:t.props.disabled})})}},getFocusableOption:function(e){var t=this._visibleOptions;if(t.length){var u=this.state.focusedOption||e;if(u&&t.indexOf(u)>-1)return u;for(var s=0;s<t.length;s++)if(!t[s].disabled)return t[s]}},renderOuter:function(e,t,u){var s=this.props.dropdownComponent,o=this.renderMenu(e,t,u);return o?p["default"].createElement(s,null,p["default"].createElement("div",{ref:"menuContainer",className:"Select-menu-outer",style:this.props.menuContainerStyle},p["default"].createElement("div",{ref:"menu",className:"Select-menu",style:this.props.menuStyle,onScroll:this.handleMenuScroll,onMouseDown:this.handleMouseDownOnMenu},o))):null},render:function(){var e=this.getValueArray(this.props.value),t=this.filterOptions(this.props.options||[],this.props.multi?e:null);this._visibleOptions=this.flattenOptions(t);var u="boolean"==typeof this.props.isOpen?this.props.isOpen:this.state.isOpen;this.props.multi&&!t.length&&e.length&&!this.state.inputValue&&(u=!1);var s=this._focusedOption=this.getFocusableOption(e[0]),o=(0,g["default"])("Select",this.props.className,{"Select--multi":this.props.multi,"Select--single":!this.props.multi,"is-disabled":this.props.disabled,"is-focused":this.state.isFocused,"is-loading":this.props.isLoading,"is-open":u,"is-pseudo-focused":this.state.isPseudoFocused,"is-searchable":this.props.searchable,"has-value":e.length});return p["default"].createElement("div",{ref:"wrapper",className:o,style:this.props.wrapperStyle},this.renderHiddenField(e),p["default"].createElement("div",{ref:"control",className:"Select-control",style:this.props.style,onKeyDown:this.handleKeyDown,onMouseDown:this.handleMouseDown,onTouchEnd:this.handleTouchEnd,onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove},this.renderValue(e,u),this.renderInput(e),this.renderLoading(),this.renderClear(),this.renderArrow()),u?this.renderOuter(t,this.props.multi?null:e,s):null)}});u["default"]=S,t.exports=u["default"]}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./Async":1,"./Dropdown":2,"./Option":3,"./OptionGroup":4,"./Value":6,"./utils/stripDiacritics":7}],6:[function(e,t,u){(function(e){"use strict";function u(e){return e&&e.__esModule?e:{"default":e}}var s="undefined"!=typeof window?window.React:"undefined"!=typeof e?e.React:null,o=u(s),n="undefined"!=typeof window?window.classNames:"undefined"!=typeof e?e.classNames:null,i=u(n),r=o["default"].createClass({displayName:"Value",propTypes:{children:o["default"].PropTypes.node,disabled:o["default"].PropTypes.bool,onClick:o["default"].PropTypes.func,onRemove:o["default"].PropTypes.func,value:o["default"].PropTypes.object.isRequired},handleMouseDown:function(e){return"mousedown"!==e.type||0===e.button?this.props.onClick?(e.stopPropagation(),void this.props.onClick(this.props.value,e)):void(this.props.value.href&&e.stopPropagation()):void 0},onRemove:function(e){e.preventDefault(),e.stopPropagation(),this.props.onRemove(this.props.value)},handleTouchEndRemove:function(e){this.dragging||this.onRemove(e)},handleTouchMove:function(e){this.dragging=!0},handleTouchStart:function(e){this.dragging=!1},renderRemoveIcon:function(){return!this.props.disabled&&this.props.onRemove?o["default"].createElement("span",{className:"Select-value-icon",onMouseDown:this.onRemove,onTouchEnd:this.handleTouchEndRemove,onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove},"×"):void 0},renderLabel:function(){var e="Select-value-label";return this.props.onClick||this.props.value.href?o["default"].createElement("a",{className:e,href:this.props.value.href,target:this.props.value.target,onMouseDown:this.handleMouseDown,onTouchEnd:this.handleMouseDown},this.props.children):o["default"].createElement("span",{className:e},this.props.children)},render:function(){return o["default"].createElement("div",{className:(0,i["default"])("Select-value",this.props.value.className),style:this.props.value.style,title:this.props.value.title},this.renderRemoveIcon(),this.renderLabel())}});t.exports=r}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],7:[function(e,t,u){"use strict";var s=[{base:"A",letters:/[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F]/g},{base:"AA",letters:/[\uA732]/g},{base:"AE",letters:/[\u00C6\u01FC\u01E2]/g},{base:"AO",letters:/[\uA734]/g},{base:"AU",letters:/[\uA736]/g},{base:"AV",letters:/[\uA738\uA73A]/g},{base:"AY",letters:/[\uA73C]/g},{base:"B",letters:/[\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181]/g},{base:"C",letters:/[\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E]/g},{base:"D",letters:/[\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779]/g},{base:"DZ",letters:/[\u01F1\u01C4]/g},{base:"Dz",letters:/[\u01F2\u01C5]/g},{base:"E",letters:/[\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E]/g},{base:"F",letters:/[\u0046\u24BB\uFF26\u1E1E\u0191\uA77B]/g},{base:"G",letters:/[\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E]/g},{base:"H",letters:/[\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D]/g},{base:"I",letters:/[\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197]/g},{base:"J",letters:/[\u004A\u24BF\uFF2A\u0134\u0248]/g},{base:"K",letters:/[\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2]/g},{base:"L",letters:/[\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780]/g},{base:"LJ",letters:/[\u01C7]/g},{base:"Lj",letters:/[\u01C8]/g},{base:"M",letters:/[\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C]/g},{base:"N",letters:/[\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4]/g},{base:"NJ",letters:/[\u01CA]/g | ||
},{base:"Nj",letters:/[\u01CB]/g},{base:"O",letters:/[\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C]/g},{base:"OI",letters:/[\u01A2]/g},{base:"OO",letters:/[\uA74E]/g},{base:"OU",letters:/[\u0222]/g},{base:"P",letters:/[\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754]/g},{base:"Q",letters:/[\u0051\u24C6\uFF31\uA756\uA758\u024A]/g},{base:"R",letters:/[\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782]/g},{base:"S",letters:/[\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784]/g},{base:"T",letters:/[\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786]/g},{base:"TZ",letters:/[\uA728]/g},{base:"U",letters:/[\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244]/g},{base:"V",letters:/[\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245]/g},{base:"VY",letters:/[\uA760]/g},{base:"W",letters:/[\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72]/g},{base:"X",letters:/[\u0058\u24CD\uFF38\u1E8A\u1E8C]/g},{base:"Y",letters:/[\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE]/g},{base:"Z",letters:/[\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762]/g},{base:"a",letters:/[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250]/g},{base:"aa",letters:/[\uA733]/g},{base:"ae",letters:/[\u00E6\u01FD\u01E3]/g},{base:"ao",letters:/[\uA735]/g},{base:"au",letters:/[\uA737]/g},{base:"av",letters:/[\uA739\uA73B]/g},{base:"ay",letters:/[\uA73D]/g},{base:"b",letters:/[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253]/g},{base:"c",letters:/[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184]/g},{base:"d",letters:/[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A]/g},{base:"dz",letters:/[\u01F3\u01C6]/g},{base:"e",letters:/[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD]/g},{base:"f",letters:/[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C]/g},{base:"g",letters:/[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F]/g},{base:"h",letters:/[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265]/g},{base:"hv",letters:/[\u0195]/g},{base:"i",letters:/[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131]/g},{base:"j",letters:/[\u006A\u24D9\uFF4A\u0135\u01F0\u0249]/g},{base:"k",letters:/[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3]/g},{base:"l",letters:/[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747]/g},{base:"lj",letters:/[\u01C9]/g},{base:"m",letters:/[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F]/g},{base:"n",letters:/[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5]/g},{base:"nj",letters:/[\u01CC]/g},{base:"o",letters:/[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275]/g},{base:"oi",letters:/[\u01A3]/g},{base:"ou",letters:/[\u0223]/g},{base:"oo",letters:/[\uA74F]/g},{base:"p",letters:/[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755]/g},{base:"q",letters:/[\u0071\u24E0\uFF51\u024B\uA757\uA759]/g},{base:"r",letters:/[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783]/g},{base:"s",letters:/[\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B]/g},{base:"t",letters:/[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787]/g},{base:"tz",letters:/[\uA729]/g},{base:"u",letters:/[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289]/g},{base:"v",letters:/[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C]/g},{base:"vy",letters:/[\uA761]/g},{base:"w",letters:/[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73]/g},{base:"x",letters:/[\u0078\u24E7\uFF58\u1E8B\u1E8D]/g},{base:"y",letters:/[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF]/g},{base:"z",letters:/[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763]/g}];t.exports=function(e){for(var t=0;t<s.length;t++)e=e.replace(s[t].letters,s[t].base);return e}},{}]},{},[5])(5)}); | ||
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Select=e()}}(function(){return function e(t,u,s){function o(i,a){if(!u[i]){if(!t[i]){var r="function"==typeof require&&require;if(!a&&r)return r(i,!0);if(n)return n(i,!0);var l=new Error("Cannot find module '"+i+"'");throw l.code="MODULE_NOT_FOUND",l}var p=u[i]={exports:{}};t[i][0].call(p.exports,function(e){var u=t[i][1][e];return o(u?u:e)},p,p.exports,e,t,u,s)}return u[i].exports}for(var n="function"==typeof require&&require,i=0;i<s.length;i++)o(s[i]);return o}({1:[function(e,t,u){(function(u){"use strict";function s(e){return e&&e.__esModule?e:{"default":e}}function o(e){return e&&"object"!=typeof e&&(e={}),e?e:null}function n(e,t,u){e&&(e[t]=u)}function i(e,t){if(e)for(var u=t.length;u>=0;--u){var s=t.slice(0,u);if(e[s]&&(t===s||e[s].complete))return e[s]}}function a(e,t){return e&&"function"==typeof e.then?e.then(function(e){t(null,e)},function(e){t(e)}):void 0}var r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var u=arguments[t];for(var s in u)Object.prototype.hasOwnProperty.call(u,s)&&(e[s]=u[s])}return e},l="undefined"!=typeof window?window.React:"undefined"!=typeof u?u.React:null,p=s(l),d=e("./Select"),c=s(d),f=e("./utils/stripDiacritics"),h=s(f),E=0,g=p["default"].PropTypes.oneOfType([p["default"].PropTypes.string,p["default"].PropTypes.node]),b=p["default"].createClass({displayName:"Async",propTypes:{cache:p["default"].PropTypes.any,ignoreAccents:p["default"].PropTypes.bool,ignoreCase:p["default"].PropTypes.bool,isLoading:p["default"].PropTypes.bool,loadOptions:p["default"].PropTypes.func.isRequired,loadingPlaceholder:p["default"].PropTypes.string,minimumInput:p["default"].PropTypes.number,noResultsText:g,onInputChange:p["default"].PropTypes.func,placeholder:g,searchPromptText:g,searchingText:p["default"].PropTypes.string},getDefaultProps:function(){return{cache:!0,ignoreAccents:!0,ignoreCase:!0,loadingPlaceholder:"Loading...",minimumInput:0,searchingText:"Searching...",searchPromptText:"Type to search"}},getInitialState:function(){return{cache:o(this.props.cache),isLoading:!1,options:[]}},componentWillMount:function(){this._lastInput=""},componentDidMount:function(){this.loadOptions("")},componentWillReceiveProps:function(e){e.cache!==this.props.cache&&this.setState({cache:o(e.cache)})},focus:function(){this.refs.select.focus()},resetState:function(){this._currentRequestId=-1,this.setState({isLoading:!1,options:[]})},getResponseHandler:function(e){var t=this,u=this._currentRequestId=E++;return function(s,o){if(s)throw s;t.isMounted()&&(n(t.state.cache,e,o),u===t._currentRequestId&&t.setState({isLoading:!1,options:o&&o.options||[]}))}},loadOptions:function(e){if(this.props.onInputChange){var t=this.props.onInputChange(e);null!=t&&(e=""+t)}if(this.props.ignoreAccents&&(e=(0,h["default"])(e)),this.props.ignoreCase&&(e=e.toLowerCase()),this._lastInput=e,e.length<this.props.minimumInput)return this.resetState();var u=i(this.state.cache,e);if(u)return this.setState({options:u.options});this.setState({isLoading:!0});var s=this.getResponseHandler(e),o=a(this.props.loadOptions(e,s),s);return o?o.then(function(){return e}):e},render:function(){var e=this.props.noResultsText,t=this.state,u=t.isLoading,s=t.options;this.props.isLoading&&(u=!0);var o=u?this.props.loadingPlaceholder:this.props.placeholder;return u?e=this.props.searchingText:!s.length&&this._lastInput.length<this.props.minimumInput&&(e=this.props.searchPromptText),p["default"].createElement(c["default"],r({},this.props,{ref:"select",isLoading:u,noResultsText:e,onInputChange:this.loadOptions,options:s,placeholder:o}))}});t.exports=b}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./Select":5,"./utils/stripDiacritics":7}],2:[function(e,t,u){(function(e){"use strict";function u(e){return e&&e.__esModule?e:{"default":e}}var s="undefined"!=typeof window?window.React:"undefined"!=typeof e?e.React:null,o=u(s),n=o["default"].createClass({displayName:"Dropdown",propTypes:{children:o["default"].PropTypes.node},render:function(){return this.props.children}});t.exports=n}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],3:[function(e,t,u){(function(e){"use strict";function u(e){return e&&e.__esModule?e:{"default":e}}var s="undefined"!=typeof window?window.React:"undefined"!=typeof e?e.React:null,o=u(s),n="undefined"!=typeof window?window.classNames:"undefined"!=typeof e?e.classNames:null,i=u(n),a=o["default"].createClass({displayName:"Option",propTypes:{children:o["default"].PropTypes.node,className:o["default"].PropTypes.string,instancePrefix:o["default"].PropTypes.string.isRequired,isDisabled:o["default"].PropTypes.bool,isFocused:o["default"].PropTypes.bool,isSelected:o["default"].PropTypes.bool,onFocus:o["default"].PropTypes.func,onSelect:o["default"].PropTypes.func,onUnfocus:o["default"].PropTypes.func,option:o["default"].PropTypes.object.isRequired,optionIndex:o["default"].PropTypes.number},blockEvent:function(e){e.preventDefault(),e.stopPropagation(),"A"===e.target.tagName&&"href"in e.target&&(e.target.target?window.open(e.target.href,e.target.target):window.location.href=e.target.href)},handleMouseDown:function(e){e.preventDefault(),e.stopPropagation(),this.props.onSelect(this.props.option,e)},handleMouseEnter:function(e){this.onFocus(e)},handleMouseMove:function(e){this.onFocus(e)},handleTouchEnd:function(e){this.dragging||this.handleMouseDown(e)},handleTouchMove:function(e){this.dragging=!0},handleTouchStart:function(e){this.dragging=!1},onFocus:function(e){this.props.isFocused||this.props.onFocus(this.props.option,e)},render:function(){var e=this.props,t=e.option,u=e.instancePrefix,s=e.optionIndex,n=(0,i["default"])(this.props.className,t.className);return t.disabled?o["default"].createElement("div",{className:n,onMouseDown:this.blockEvent,onClick:this.blockEvent},this.props.children):o["default"].createElement("div",{className:n,style:t.style,role:"option",onMouseDown:this.handleMouseDown,onMouseEnter:this.handleMouseEnter,onMouseMove:this.handleMouseMove,onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove,onTouchEnd:this.handleTouchEnd,id:u+"-option-"+s,title:t.title},this.props.children)}});t.exports=a}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],4:[function(e,t,u){(function(e){"use strict";function u(e){return e&&e.__esModule?e:{"default":e}}var s="undefined"!=typeof window?window.React:"undefined"!=typeof e?e.React:null,o=u(s),n="undefined"!=typeof window?window.classNames:"undefined"!=typeof e?e.classNames:null,i=u(n),a=o["default"].createClass({displayName:"OptionGroup",propTypes:{children:o["default"].PropTypes.any,className:o["default"].PropTypes.string,label:o["default"].PropTypes.node,option:o["default"].PropTypes.object.isRequired},blockEvent:function(e){e.preventDefault(),e.stopPropagation(),"A"===e.target.tagName&&"href"in e.target&&(e.target.target?window.open(e.target.href,e.target.target):window.location.href=e.target.href)},handleMouseDown:function(e){e.preventDefault(),e.stopPropagation()},handleTouchEnd:function(e){this.dragging||this.handleMouseDown(e)},handleTouchMove:function(e){this.dragging=!0},handleTouchStart:function(e){this.dragging=!1},render:function(){var e=this.props.option,t=(0,i["default"])(this.props.className,e.className);return e.disabled?o["default"].createElement("div",{className:t,onMouseDown:this.blockEvent,onClick:this.blockEvent},this.props.children):o["default"].createElement("div",{className:t,style:e.style,onMouseDown:this.handleMouseDown,onMouseEnter:this.handleMouseEnter,onMouseMove:this.handleMouseMove,onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove,onTouchEnd:this.handleTouchEnd,title:e.title},o["default"].createElement("div",{className:"Select-option-group-label"},this.props.label),this.props.children)}});t.exports=a}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],5:[function(e,t,u){(function(s){"use strict";function o(e){return e&&e.__esModule?e:{"default":e}}function n(e,t,u){return t in e?Object.defineProperty(e,t,{value:u,enumerable:!0,configurable:!0,writable:!0}):e[t]=u,e}function i(e){var t={};for(var u in e)e.hasOwnProperty(u)&&(t[u]=e[u]);return t}function a(e){return"object"==typeof e?JSON.stringify(e):e}Object.defineProperty(u,"__esModule",{value:!0});var r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var u=arguments[t];for(var s in u)Object.prototype.hasOwnProperty.call(u,s)&&(e[s]=u[s])}return e},l="undefined"!=typeof window?window.React:"undefined"!=typeof s?s.React:null,p=o(l),d="undefined"!=typeof window?window.ReactDOM:"undefined"!=typeof s?s.ReactDOM:null,c=o(d),f="undefined"!=typeof window?window.AutosizeInput:"undefined"!=typeof s?s.AutosizeInput:null,h=o(f),E="undefined"!=typeof window?window.classNames:"undefined"!=typeof s?s.classNames:null,g=o(E),b=e("./utils/stripDiacritics"),y=o(b),m=e("./Async"),v=o(m),F=e("./Dropdown"),A=o(F),C=e("./Option"),T=o(C),P=e("./OptionGroup"),D=o(P),w=e("./Value"),O=o(w),B=p["default"].PropTypes.oneOfType([p["default"].PropTypes.string,p["default"].PropTypes.node]),S=1,M=p["default"].createClass({displayName:"Select",propTypes:{addLabelText:p["default"].PropTypes.string,allowCreate:p["default"].PropTypes.bool,"aria-label":p["default"].PropTypes.string,"aria-labelledby":p["default"].PropTypes.string,autoBlur:p["default"].PropTypes.bool,autofocus:p["default"].PropTypes.bool,autosize:p["default"].PropTypes.bool,backspaceRemoves:p["default"].PropTypes.bool,backspaceToRemoveMessage:p["default"].PropTypes.string,className:p["default"].PropTypes.string,clearAllText:B,clearValueText:B,clearable:p["default"].PropTypes.bool,delimiter:p["default"].PropTypes.string,disabled:p["default"].PropTypes.bool,dropdownComponent:p["default"].PropTypes.func,escapeClearsValue:p["default"].PropTypes.bool,filterOption:p["default"].PropTypes.func,filterOptions:p["default"].PropTypes.any,ignoreAccents:p["default"].PropTypes.bool,ignoreCase:p["default"].PropTypes.bool,inputProps:p["default"].PropTypes.object,inputRenderer:p["default"].PropTypes.func,isLoading:p["default"].PropTypes.bool,isOpen:p["default"].PropTypes.bool,joinValues:p["default"].PropTypes.bool,labelKey:p["default"].PropTypes.string,matchPos:p["default"].PropTypes.string,matchProp:p["default"].PropTypes.string,menuBuffer:p["default"].PropTypes.number,menuContainerStyle:p["default"].PropTypes.object,menuRenderer:p["default"].PropTypes.func,menuStyle:p["default"].PropTypes.object,multi:p["default"].PropTypes.bool,name:p["default"].PropTypes.string,newOptionCreator:p["default"].PropTypes.func,noResultsText:B,onBlur:p["default"].PropTypes.func,onBlurResetsInput:p["default"].PropTypes.bool,onChange:p["default"].PropTypes.func,onClose:p["default"].PropTypes.func,onFocus:p["default"].PropTypes.func,onInputChange:p["default"].PropTypes.func,onMenuScrollToBottom:p["default"].PropTypes.func,onOpen:p["default"].PropTypes.func,onValueClick:p["default"].PropTypes.func,openAfterFocus:p["default"].PropTypes.bool,openOnFocus:p["default"].PropTypes.bool,optionClassName:p["default"].PropTypes.string,optionComponent:p["default"].PropTypes.func,optionGroupComponent:p["default"].PropTypes.func,optionRenderer:p["default"].PropTypes.func,options:p["default"].PropTypes.array,pageSize:p["default"].PropTypes.number,placeholder:B,renderInvalidValues:p["default"].PropTypes.bool,required:p["default"].PropTypes.bool,resetValue:p["default"].PropTypes.any,scrollMenuIntoView:p["default"].PropTypes.bool,searchable:p["default"].PropTypes.bool,simpleValue:p["default"].PropTypes.bool,style:p["default"].PropTypes.object,tabIndex:p["default"].PropTypes.string,tabSelectsValue:p["default"].PropTypes.bool,value:p["default"].PropTypes.any,valueComponent:p["default"].PropTypes.func,valueKey:p["default"].PropTypes.string,valueRenderer:p["default"].PropTypes.func,wrapperStyle:p["default"].PropTypes.object},statics:{Async:v["default"]},getDefaultProps:function(){return{addLabelText:'Add "{label}"?',autosize:!0,allowCreate:!1,backspaceRemoves:!0,backspaceToRemoveMessage:"Press backspace to remove {label}",clearable:!0,clearAllText:"Clear all",clearValueText:"Clear value",delimiter:",",disabled:!1,dropdownComponent:A["default"],escapeClearsValue:!0,filterOptions:!0,ignoreAccents:!0,ignoreCase:!0,inputProps:{},isLoading:!1,joinValues:!1,labelKey:"label",matchPos:"any",matchProp:"any",menuBuffer:0,multi:!1,noResultsText:"No results found",onBlurResetsInput:!0,openAfterFocus:!1,optionComponent:T["default"],optionGroupComponent:D["default"],pageSize:5,placeholder:"Select...",renderInvalidValues:!1,required:!1,resetValue:null,scrollMenuIntoView:!0,searchable:!0,simpleValue:!1,tabSelectsValue:!0,valueComponent:O["default"],valueKey:"value"}},getInitialState:function(){return{inputValue:"",isFocused:!1,isLoading:!1,isOpen:!1,isPseudoFocused:!1,required:!1}},componentWillMount:function(){this._flatOptions=this.flattenOptions(this.props.options),this._instancePrefix="react-select-"+ ++S+"-";var e=this.getValueArray(this.props.value);this.props.required&&this.setState({required:this.handleRequired(e[0],this.props.multi)})},componentDidMount:function(){this.props.autofocus&&this.focus()},componentWillReceiveProps:function(e){e.options!==this.props.options&&(this._flatOptions=this.flattenOptions(e.options));var t=this.getValueArray(e.value);e.required&&this.setState({required:this.handleRequired(t[0],e.multi)})},componentWillUpdate:function(e,t){if(t.isOpen!==this.state.isOpen){var u=t.isOpen?e.onOpen:e.onClose;u&&u()}},componentDidUpdate:function(e,t){if(this.refs.menu&&this.refs.focused&&this.state.isOpen&&!this.hasScrolledToOption){var u=c["default"].findDOMNode(this.refs.focused),s=u.parentElement,o=c["default"].findDOMNode(this.refs.menu);o.scrollTop="Select-menu"===s.className?u.offsetTop:s.offsetTop,this.hasScrolledToOption=!0}else this.state.isOpen||(this.hasScrolledToOption=!1);if(this._scrollToFocusedOptionOnUpdate&&this.refs.focused&&this.refs.menu){this._scrollToFocusedOptionOnUpdate=!1;var n=c["default"].findDOMNode(this.refs.focused),i=c["default"].findDOMNode(this.refs.menu),a=n.getBoundingClientRect(),r=i.getBoundingClientRect();(a.bottom>r.bottom||a.top<r.top)&&(i.scrollTop=n.offsetTop+n.clientHeight-i.offsetHeight)}if(this.props.scrollMenuIntoView&&this.refs.menuContainer){var l=this.refs.menuContainer.getBoundingClientRect();window.innerHeight<l.bottom+this.props.menuBuffer&&window.scrollBy(0,l.bottom+this.props.menuBuffer-window.innerHeight)}e.disabled!==this.props.disabled&&(this.setState({isFocused:!1}),this.closeMenu())},focus:function(){this.refs.input&&(this.refs.input.focus(),this.props.openAfterFocus&&this.setState({isOpen:!0}))},blurInput:function(){this.refs.input&&this.refs.input.blur()},handleTouchMove:function(e){this.dragging=!0},handleTouchStart:function(e){this.dragging=!1},handleTouchEnd:function(e){this.dragging||this.handleMouseDown(e)},handleTouchEndClearValue:function(e){this.dragging||this.clearValue(e)},handleMouseDown:function(e){return this.props.disabled||"mousedown"===e.type&&0!==e.button||"INPUT"===e.target.tagName?void 0:(e.stopPropagation(),e.preventDefault(),this.props.searchable?void(this.state.isFocused?(this.focus(),this.refs.input.getInput().value="",this.setState({isOpen:!0,isPseudoFocused:!1})):(this._openAfterFocus=!0,this.focus())):(this.focus(),this.setState({isOpen:!this.state.isOpen})))},handleMouseDownOnArrow:function(e){this.props.disabled||"mousedown"===e.type&&0!==e.button||this.state.isOpen&&(e.stopPropagation(),e.preventDefault(),this.closeMenu())},handleMouseDownOnMenu:function(e){this.props.disabled||"mousedown"===e.type&&0!==e.button||(e.stopPropagation(),e.preventDefault(),this._openAfterFocus=!0,this.focus())},closeMenu:function(){this.setState({isOpen:!1,isPseudoFocused:this.state.isFocused&&!this.props.multi,inputValue:""}),this.hasScrolledToOption=!1},handleInputFocus:function(e){var t=this.state.isOpen||this._openAfterFocus||this.props.openOnFocus;this.props.onFocus&&this.props.onFocus(e),this.setState({isFocused:!0,isOpen:t}),this._openAfterFocus=!1},handleInputBlur:function(e){if(this.refs.menu&&(this.refs.menu===document.activeElement||this.refs.menu.contains(document.activeElement)))return void this.focus();this.props.onBlur&&this.props.onBlur(e);var t={isFocused:!1,isOpen:!1,isPseudoFocused:!1};this.props.onBlurResetsInput&&(t.inputValue=""),this.setState(t)},handleInputChange:function(e){var t=e.target.value;if(this.state.inputValue!==e.target.value&&this.props.onInputChange){var u=this.props.onInputChange(t);null!=u&&"object"!=typeof u&&(t=""+u)}this.setState({isOpen:!0,isPseudoFocused:!1,inputValue:t})},handleKeyDown:function(e){if(!this.props.disabled){switch(e.keyCode){case 8:return void(!this.state.inputValue&&this.props.backspaceRemoves&&(e.preventDefault(),this.popValue()));case 9:if(e.shiftKey||!this.state.isOpen||!this.props.tabSelectsValue)return;return void this.selectFocusedOption();case 13:if(!this.state.isOpen)return;e.stopPropagation(),this.selectFocusedOption();break;case 27:this.state.isOpen?this.closeMenu():this.props.clearable&&this.props.escapeClearsValue&&this.clearValue(e);break;case 38:this.focusPreviousOption();break;case 40:this.focusNextOption();break;case 33:this.focusPageUpOption();break;case 34:this.focusPageDownOption();break;case 35:this.focusEndOption();break;case 36:this.focusStartOption();break;default:return}e.preventDefault()}},handleValueClick:function(e,t){this.props.onValueClick&&this.props.onValueClick(e,t)},handleMenuScroll:function(e){if(this.props.onMenuScrollToBottom){var t=e.target;t.scrollHeight>t.offsetHeight&&!(t.scrollHeight-t.offsetHeight-t.scrollTop)&&this.props.onMenuScrollToBottom()}},handleRequired:function(e,t){return e?t?0===e.length:0===Object.keys(e).length:!0},getOptionLabel:function(e){return e[this.props.labelKey]},getValueArray:function(e){if(this.props.multi){if("string"==typeof e&&(e=e.split(this.props.delimiter)),!Array.isArray(e)){if(null===e||void 0===e)return[];e=[e]}return e.map(this.expandValue).filter(function(e){return e})}var t=this.expandValue(e);return t?[t]:[]},expandValue:function(e){if("string"!=typeof e&&"number"!=typeof e)return e;var t=this.props,u=t.labelKey,s=t.valueKey,o=t.renderInvalidValues,i=this._flatOptions;if(i&&""!==e){for(var a=0;a<i.length;a++)if(i[a][s]===e)return i[a];if(o){var r;return r={invalid:!0},n(r,u,e),n(r,s,e),r}}},setValue:function(e){var t=this;if(this.props.autoBlur&&this.blurInput(),this.props.onChange){if(this.props.required){var u=this.handleRequired(e,this.props.multi);this.setState({required:u})}this.props.simpleValue&&e&&(e=this.props.multi?e.map(function(e){return e[t.props.valueKey]}).join(this.props.delimiter):e[this.props.valueKey]),this.props.onChange(e)}},selectValue:function(e){this.hasScrolledToOption=!1,this.props.multi?(this.addValue(e),this.setState({inputValue:"",focusedIndex:null})):(this.setState({isOpen:!1,inputValue:"",isPseudoFocused:this.state.isFocused}),this.setValue(e))},addValue:function(e){var t=this.getValueArray(this.props.value);this.setValue(t.concat(e))},popValue:function(){var e=this.getValueArray(this.props.value);e.length&&e[e.length-1].clearableValue!==!1&&this.setValue(e.slice(0,e.length-1))},removeValue:function(e){var t=this.getValueArray(this.props.value);this.setValue(t.filter(function(t){return t!==e})),this.focus()},clearValue:function(e){e&&"mousedown"===e.type&&0!==e.button||(e.stopPropagation(),e.preventDefault(),this.setValue(this.props.resetValue),this.setState({isOpen:!1,inputValue:""},this.focus))},focusOption:function(e){this.setState({focusedOption:e})},focusNextOption:function(){this.focusAdjacentOption("next")},focusPreviousOption:function(){this.focusAdjacentOption("previous")},focusPageUpOption:function(){this.focusAdjacentOption("page_up")},focusPageDownOption:function(){this.focusAdjacentOption("page_down")},focusStartOption:function(){this.focusAdjacentOption("start")},focusEndOption:function(){this.focusAdjacentOption("end")},focusAdjacentOption:function(e){var t=this._visibleOptions.map(function(e,t){return{option:e,index:t}}).filter(function(e){return!e.option.disabled});if(this._scrollToFocusedOptionOnUpdate=!0,!this.state.isOpen)return void this.setState({isOpen:!0,inputValue:"",focusedOption:this._focusedOption||t["next"===e?0:t.length-1].option});if(t.length){for(var u=-1,s=0;s<t.length;s++)if(this._focusedOption===t[s].option){u=s;break}if("next"===e&&-1!==u)u=(u+1)%t.length;else if("previous"===e)u>0?u-=1:u=t.length-1;else if("start"===e)u=0;else if("end"===e)u=t.length-1;else if("page_up"===e){var o=u-this.props.pageSize;u=0>o?0:o}else if("page_down"===e){var o=u+this.props.pageSize;u=o>t.length-1?t.length-1:o}-1===u&&(u=0),this.setState({focusedIndex:t[u].index,focusedOption:t[u].option})}},selectFocusedOption:function(){return this._focusedOption?this.selectValue(this._focusedOption):void 0},renderLoading:function(){return this.props.isLoading?p["default"].createElement("span",{className:"Select-loading-zone","aria-hidden":"true"},p["default"].createElement("span",{className:"Select-loading"})):void 0},renderValue:function(e,t){var u=this,s=this.props.valueRenderer||this.getOptionLabel,o=this.props.valueComponent;if(!e.length)return this.state.inputValue?null:p["default"].createElement("div",{className:"Select-placeholder"},this.props.placeholder);var n=this.props.onValueClick?this.handleValueClick:null;return this.props.multi?e.map(function(e,t){return p["default"].createElement(o,{id:u._instancePrefix+"-value-"+t,instancePrefix:u._instancePrefix,disabled:u.props.disabled||e.clearableValue===!1,key:"value-"+t+"-"+e[u.props.valueKey],onClick:n,onRemove:u.removeValue,value:e},s(e),p["default"].createElement("span",{className:"Select-aria-only"}," "))}):this.state.inputValue?void 0:(t&&(n=null),p["default"].createElement(o,{id:this._instancePrefix+"-value-item",disabled:this.props.disabled,instancePrefix:this._instancePrefix,onClick:n,value:e[0]},s(e[0])))},renderInput:function(e,t){if(this.props.inputRenderer)return this.props.inputRenderer();var u,s=(0,g["default"])("Select-input",this.props.inputProps.className),o=!!this.state.isOpen,i=(0,g["default"])((u={},n(u,this._instancePrefix+"-list",o),n(u,this._instancePrefix+"-backspace-remove-message",this.props.multi&&!this.props.disabled&&this.state.isFocused&&!this.state.inputValue),u)),a=r({},this.props.inputProps,{role:"combobox","aria-expanded":""+o,"aria-owns":i,"aria-haspopup":""+o,"aria-activedescendant":o?this._instancePrefix+"-option-"+t:this._instancePrefix+"-value","aria-labelledby":this.props["aria-labelledby"],"aria-label":this.props["aria-label"],className:s,tabIndex:this.props.tabIndex,onBlur:this.handleInputBlur,onChange:this.handleInputChange,onFocus:this.handleInputFocus,ref:"input",required:this.state.required,value:this.state.inputValue});return this.props.disabled||!this.props.searchable?p["default"].createElement("div",r({},this.props.inputProps,{role:"combobox","aria-expanded":o,"aria-owns":o?this._instancePrefix+"-list":this._instancePrefix+"-value","aria-activedescendant":o?this._instancePrefix+"-option-"+t:this._instancePrefix+"-value",className:s,tabIndex:this.props.tabIndex||0,onBlur:this.handleInputBlur,onFocus:this.handleInputFocus,ref:"input","aria-readonly":""+!!this.props.disabled,style:{border:0,width:1,display:"inline-block"}})):this.props.autosize?p["default"].createElement(h["default"],r({},a,{minWidth:"5px"})):p["default"].createElement("div",{className:s},p["default"].createElement("input",a))},renderClear:function(){return!this.props.clearable||!this.props.value||this.props.multi&&!this.props.value.length||this.props.disabled||this.props.isLoading?void 0:p["default"].createElement("span",{className:"Select-clear-zone",title:this.props.multi?this.props.clearAllText:this.props.clearValueText,"aria-label":this.props.multi?this.props.clearAllText:this.props.clearValueText,onMouseDown:this.clearValue,onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove,onTouchEnd:this.handleTouchEndClearValue},p["default"].createElement("span",{className:"Select-clear",dangerouslySetInnerHTML:{__html:"×"}}))},renderArrow:function(){return p["default"].createElement("span",{className:"Select-arrow-zone",onMouseDown:this.handleMouseDownOnArrow},p["default"].createElement("span",{className:"Select-arrow",onMouseDown:this.handleMouseDownOnArrow}))},filterOptions:function(e,t){var u=this,s=null,o=this.state.inputValue;if("function"==typeof this.props.filterOptions)return this.props.filterOptions.call(this,e,o,t);if(!this.props.filterOptions)return e;var n=function(){u.props.ignoreAccents&&(o=(0,y["default"])(o)),u.props.ignoreCase&&(o=o.toLowerCase()),t&&(s=t.map(function(e){return e[u.props.valueKey]}));var n=function(e){if(s&&s.indexOf(e[u.props.valueKey])>-1)return!1;if(u.props.filterOption)return u.props.filterOption.call(u,e,o);if(!o)return!0;var t=String(e[u.props.valueKey]),n=String(e[u.props.labelKey]);return u.props.ignoreAccents&&("label"!==u.props.matchProp&&(t=(0,y["default"])(t)),"value"!==u.props.matchProp&&(n=(0,y["default"])(n))),u.props.ignoreCase&&("label"!==u.props.matchProp&&(t=t.toLowerCase()),"value"!==u.props.matchProp&&(n=n.toLowerCase())),"start"===u.props.matchPos?"label"!==u.props.matchProp&&t.substr(0,o.length)===o||"value"!==u.props.matchProp&&n.substr(0,o.length)===o:"label"!==u.props.matchProp&&t.indexOf(o)>=0||"value"!==u.props.matchProp&&n.indexOf(o)>=0},a=[];return e.forEach(function(e){if(u.isGroup(e)){var s=i(e);s.options=u.filterOptions(e.options,t),s.options.length&&a.push(s)}else n(e)&&a.push(e)}),{v:a}}();return"object"==typeof n?n.v:void 0},isGroup:function(e){return e&&Array.isArray(e.options)},flattenOptions:function(e){if(e){for(var t=[],u=0;u<e.length;u++)this.isGroup(e[u])?t=t.concat(this.flattenOptions(e[u].options)):t.push(e[u]);return t}},renderMenu:function(e,t,u){var s=this;if(!e||!e.length)return this.props.noResultsText?p["default"].createElement("div",{className:"Select-noresults"},this.props.noResultsText):null;if(this.props.menuRenderer)return this.props.menuRenderer({focusedOption:u,focusOption:this.focusOption,labelKey:this.props.labelKey,options:e,selectValue:this.selectValue,valueArray:t});var o=function(){var o=s.props.optionGroupComponent,n=s.props.optionComponent,i=s.props.optionRenderer||s.getOptionLabel;return{v:e.map(function(e,a){if(s.isGroup(e)){var r=(0,g["default"])({"Select-option-group":!0});return p["default"].createElement(o,{className:r,key:"option-group-"+a,label:i(e),option:e},s.renderMenu(e.options,t,u))}var l=t&&t.indexOf(e)>-1,d=e===u,c=d?"focused":null,f=(0,g["default"])(s.props.optionClassName,{"Select-option":!0,"is-selected":l,"is-focused":d,"is-disabled":e.disabled});return p["default"].createElement(n,{instancePrefix:s._instancePrefix,optionIndex:a,className:f,isDisabled:e.disabled,isFocused:d,key:"option-"+a+"-"+e[s.props.valueKey],onSelect:s.selectValue,onFocus:s.focusOption,option:e,isSelected:l,ref:c},i(e))})}}();return"object"==typeof o?o.v:void 0},renderHiddenField:function(e){var t=this;if(this.props.name){if(this.props.joinValues){var u=e.map(function(e){return a(e[t.props.valueKey])}).join(this.props.delimiter);return p["default"].createElement("input",{type:"hidden",ref:"value",name:this.props.name,value:u,disabled:this.props.disabled})}return e.map(function(e,u){return p["default"].createElement("input",{key:"hidden."+u,type:"hidden",ref:"value"+u,name:t.props.name,value:a(e[t.props.valueKey]),disabled:t.props.disabled})})}},getFocusableOptionIndex:function(e){var t=this._visibleOptions;if(!t.length)return null;var u=this.state.focusedOption||e;if(u&&!u.disabled){var s=t.indexOf(u);if(-1!==s)return s}for(var o=0;o<t.length;o++)if(!t[o].disabled)return o;return null},renderOuter:function(e,t,u){var s=this.props.dropdownComponent,o=this.renderMenu(e,t,u);return o?p["default"].createElement(s,null,p["default"].createElement("div",{ref:"menuContainer",className:"Select-menu-outer",style:this.props.menuContainerStyle},p["default"].createElement("div",{ref:"menu",role:"listbox",className:"Select-menu",id:this._instancePrefix+"-list",style:this.props.menuStyle,onScroll:this.handleMenuScroll,onMouseDown:this.handleMouseDownOnMenu},o))):null},render:function(){var e=this.getValueArray(this.props.value),t=this.filterOptions(this.props.options||[],this.props.multi?e:null);this._visibleOptions=this.flattenOptions(t);var u="boolean"==typeof this.props.isOpen?this.props.isOpen:this.state.isOpen;this.props.multi&&!t.length&&e.length&&!this.state.inputValue&&(u=!1);var s=this.getFocusableOptionIndex(e[0]),o=null;o=null!==s?this._focusedOption=this._visibleOptions[s]:this._focusedOption=null;var n=(0,g["default"])("Select",this.props.className,{"Select--multi":this.props.multi,"Select--single":!this.props.multi,"is-disabled":this.props.disabled,"is-focused":this.state.isFocused,"is-loading":this.props.isLoading,"is-open":u,"is-pseudo-focused":this.state.isPseudoFocused,"is-searchable":this.props.searchable,"has-value":e.length}),i=null;return this.props.multi&&!this.props.disabled&&e.length&&!this.state.inputValue&&this.state.isFocused&&this.props.backspaceRemoves&&(i=p["default"].createElement("span",{id:this._instancePrefix+"-backspace-remove-message",className:"Select-aria-only","aria-live":"assertive"},this.props.backspaceToRemoveMessage.replace("{label}",e[e.length-1][this.props.labelKey]))),p["default"].createElement("div",{ref:"wrapper",className:n,style:this.props.wrapperStyle},this.renderHiddenField(e),p["default"].createElement("div",{ref:"control",className:"Select-control",style:this.props.style,onKeyDown:this.handleKeyDown,onMouseDown:this.handleMouseDown,onTouchEnd:this.handleTouchEnd,onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove},p["default"].createElement("span",{className:"Select-multi-value-wrapper",id:this._instancePrefix+"-value"},this.renderValue(e,u),this.renderInput(e,s)),i,this.renderLoading(),this.renderClear(),this.renderArrow()),u?this.renderOuter(t,this.props.multi?null:e,o):null)}});u["default"]=M,t.exports=u["default"]}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./Async":1,"./Dropdown":2,"./Option":3,"./OptionGroup":4,"./Value":6,"./utils/stripDiacritics":7}],6:[function(e,t,u){(function(e){"use strict";function u(e){return e&&e.__esModule?e:{"default":e}}var s="undefined"!=typeof window?window.React:"undefined"!=typeof e?e.React:null,o=u(s),n="undefined"!=typeof window?window.classNames:"undefined"!=typeof e?e.classNames:null,i=u(n),a=o["default"].createClass({displayName:"Value",propTypes:{children:o["default"].PropTypes.node,disabled:o["default"].PropTypes.bool,id:o["default"].PropTypes.string,onClick:o["default"].PropTypes.func,onRemove:o["default"].PropTypes.func,value:o["default"].PropTypes.object.isRequired},handleMouseDown:function(e){return"mousedown"!==e.type||0===e.button?this.props.onClick?(e.stopPropagation(),void this.props.onClick(this.props.value,e)):void(this.props.value.href&&e.stopPropagation()):void 0},onRemove:function(e){e.preventDefault(),e.stopPropagation(),this.props.onRemove(this.props.value)},handleTouchEndRemove:function(e){this.dragging||this.onRemove(e)},handleTouchMove:function(e){this.dragging=!0},handleTouchStart:function(e){this.dragging=!1},renderRemoveIcon:function(){return!this.props.disabled&&this.props.onRemove?o["default"].createElement("span",{className:"Select-value-icon","aria-hidden":"true",onMouseDown:this.onRemove,onTouchEnd:this.handleTouchEndRemove, | ||
onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove},"×"):void 0},renderLabel:function(){var e="Select-value-label";return this.props.onClick||this.props.value.href?o["default"].createElement("a",{className:e,href:this.props.value.href,target:this.props.value.target,onMouseDown:this.handleMouseDown,onTouchEnd:this.handleMouseDown},this.props.children):o["default"].createElement("span",{className:e,role:"option","aria-selected":"true",id:this.props.id},this.props.children)},render:function(){return o["default"].createElement("div",{className:(0,i["default"])("Select-value",this.props.value.className),style:this.props.value.style,title:this.props.value.title},this.renderRemoveIcon(),this.renderLabel())}});t.exports=a}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],7:[function(e,t,u){"use strict";var s=[{base:"A",letters:/[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F]/g},{base:"AA",letters:/[\uA732]/g},{base:"AE",letters:/[\u00C6\u01FC\u01E2]/g},{base:"AO",letters:/[\uA734]/g},{base:"AU",letters:/[\uA736]/g},{base:"AV",letters:/[\uA738\uA73A]/g},{base:"AY",letters:/[\uA73C]/g},{base:"B",letters:/[\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181]/g},{base:"C",letters:/[\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E]/g},{base:"D",letters:/[\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779]/g},{base:"DZ",letters:/[\u01F1\u01C4]/g},{base:"Dz",letters:/[\u01F2\u01C5]/g},{base:"E",letters:/[\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E]/g},{base:"F",letters:/[\u0046\u24BB\uFF26\u1E1E\u0191\uA77B]/g},{base:"G",letters:/[\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E]/g},{base:"H",letters:/[\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D]/g},{base:"I",letters:/[\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197]/g},{base:"J",letters:/[\u004A\u24BF\uFF2A\u0134\u0248]/g},{base:"K",letters:/[\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2]/g},{base:"L",letters:/[\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780]/g},{base:"LJ",letters:/[\u01C7]/g},{base:"Lj",letters:/[\u01C8]/g},{base:"M",letters:/[\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C]/g},{base:"N",letters:/[\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4]/g},{base:"NJ",letters:/[\u01CA]/g},{base:"Nj",letters:/[\u01CB]/g},{base:"O",letters:/[\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C]/g},{base:"OI",letters:/[\u01A2]/g},{base:"OO",letters:/[\uA74E]/g},{base:"OU",letters:/[\u0222]/g},{base:"P",letters:/[\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754]/g},{base:"Q",letters:/[\u0051\u24C6\uFF31\uA756\uA758\u024A]/g},{base:"R",letters:/[\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782]/g},{base:"S",letters:/[\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784]/g},{base:"T",letters:/[\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786]/g},{base:"TZ",letters:/[\uA728]/g},{base:"U",letters:/[\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244]/g},{base:"V",letters:/[\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245]/g},{base:"VY",letters:/[\uA760]/g},{base:"W",letters:/[\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72]/g},{base:"X",letters:/[\u0058\u24CD\uFF38\u1E8A\u1E8C]/g},{base:"Y",letters:/[\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE]/g},{base:"Z",letters:/[\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762]/g},{base:"a",letters:/[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250]/g},{base:"aa",letters:/[\uA733]/g},{base:"ae",letters:/[\u00E6\u01FD\u01E3]/g},{base:"ao",letters:/[\uA735]/g},{base:"au",letters:/[\uA737]/g},{base:"av",letters:/[\uA739\uA73B]/g},{base:"ay",letters:/[\uA73D]/g},{base:"b",letters:/[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253]/g},{base:"c",letters:/[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184]/g},{base:"d",letters:/[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A]/g},{base:"dz",letters:/[\u01F3\u01C6]/g},{base:"e",letters:/[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD]/g},{base:"f",letters:/[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C]/g},{base:"g",letters:/[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F]/g},{base:"h",letters:/[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265]/g},{base:"hv",letters:/[\u0195]/g},{base:"i",letters:/[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131]/g},{base:"j",letters:/[\u006A\u24D9\uFF4A\u0135\u01F0\u0249]/g},{base:"k",letters:/[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3]/g},{base:"l",letters:/[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747]/g},{base:"lj",letters:/[\u01C9]/g},{base:"m",letters:/[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F]/g},{base:"n",letters:/[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5]/g},{base:"nj",letters:/[\u01CC]/g},{base:"o",letters:/[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275]/g},{base:"oi",letters:/[\u01A3]/g},{base:"ou",letters:/[\u0223]/g},{base:"oo",letters:/[\uA74F]/g},{base:"p",letters:/[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755]/g},{base:"q",letters:/[\u0071\u24E0\uFF51\u024B\uA757\uA759]/g},{base:"r",letters:/[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783]/g},{base:"s",letters:/[\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B]/g},{base:"t",letters:/[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787]/g},{base:"tz",letters:/[\uA729]/g},{base:"u",letters:/[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289]/g},{base:"v",letters:/[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C]/g},{base:"vy",letters:/[\uA761]/g},{base:"w",letters:/[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73]/g},{base:"x",letters:/[\u0078\u24E7\uFF58\u1E8B\u1E8D]/g},{base:"y",letters:/[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF]/g},{base:"z",letters:/[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763]/g}];t.exports=function(e){for(var t=0;t<s.length;t++)e=e.replace(s[t].letters,s[t].base);return e}},{}]},{},[5])(5)}); |
@@ -8,2 +8,3 @@ /* eslint react/prop-types: 0 */ | ||
import Contributors from './components/Contributors'; | ||
import GithubUsers from './components/GithubUsers'; | ||
import CustomComponents from './components/CustomComponents'; | ||
@@ -23,2 +24,3 @@ import CustomRender from './components/CustomRender'; | ||
<Contributors label="Contributors (Async)" /> | ||
<GithubUsers label="Github users (Async with fetch.js)" /> | ||
<NumericSelect label="Numeric Values" /> | ||
@@ -25,0 +27,0 @@ <GroupedOptionsField label="Option Groups" /> |
@@ -17,3 +17,2 @@ import React from 'react'; | ||
onSelect: React.PropTypes.func, | ||
onUnfocus: React.PropTypes.func, | ||
option: React.PropTypes.object.isRequired, | ||
@@ -33,5 +32,2 @@ }, | ||
}, | ||
handleMouseLeave (event) { | ||
this.props.onUnfocus(this.props.option, event); | ||
}, | ||
render () { | ||
@@ -51,3 +47,2 @@ let gravatarStyle = { | ||
onMouseMove={this.handleMouseMove} | ||
onMouseLeave={this.handleMouseLeave} | ||
title={this.props.option.title}> | ||
@@ -54,0 +49,0 @@ <Gravatar email={this.props.option.email} size={GRAVATAR_SIZE} style={gravatarStyle} /> |
@@ -76,7 +76,7 @@ import React from 'react'; | ||
<input type="checkbox" className="checkbox-control" checked={this.state.matchValue} onChange={this.onChangeMatchValue} /> | ||
<span className="checkbox-label">Match value only</span> | ||
<span className="checkbox-label">Match value</span> | ||
</label> | ||
<label className="checkbox"> | ||
<input type="checkbox" className="checkbox-control" checked={this.state.matchLabel} onChange={this.onChangeMatchLabel} /> | ||
<span className="checkbox-label">Match label only</span> | ||
<span className="checkbox-label">Match label</span> | ||
</label> | ||
@@ -83,0 +83,0 @@ <label className="checkbox"> |
## v1.0.0-beta13 / 2016-05-30 | ||
## v1.0.0-beta13.patch1 / 2016-06-22 | ||
* (react-select-plus) intermediate release to incorporate upstream fix for https://github.com/JedWatson/react-select/issues/940 | ||
## v1.0.0-beta13 / 2016-04-30 | ||
* added; `inputRenderer` prop, allows you to override the input component, thanks [Sean Burke](https://github.com/leftmostcat) | ||
@@ -5,0 +9,0 @@ * added; `openOnFocus` prop, causes the menu to always open when the select control is focused, thanks [HuysentruytRuben](https://github.com/HuysentruytRuben) |
@@ -68,3 +68,3 @@ 'use strict'; | ||
placeholder: stringOrNode, // field placeholder, displayed when there's no value (shared with Select) | ||
searchPromptText: _react2['default'].PropTypes.string, // label to prompt for search input | ||
searchPromptText: stringOrNode, // label to prompt for search input | ||
searchingText: _react2['default'].PropTypes.string }, | ||
@@ -138,2 +138,3 @@ // message to display while options are loading | ||
if (this.props.ignoreCase) input = input.toLowerCase(); | ||
this._lastInput = input; | ||
@@ -153,3 +154,6 @@ if (input.length < this.props.minimumInput) { | ||
var responseHandler = this.getResponseHandler(input); | ||
return thenPromise(this.props.loadOptions(input, responseHandler), responseHandler); | ||
var inputPromise = thenPromise(this.props.loadOptions(input, responseHandler), responseHandler); | ||
return inputPromise ? inputPromise.then(function () { | ||
return input; | ||
}) : input; | ||
}, | ||
@@ -164,5 +168,6 @@ render: function render() { | ||
var placeholder = isLoading ? this.props.loadingPlaceholder : this.props.placeholder; | ||
if (!options.length) { | ||
if (this._lastInput.length < this.props.minimumInput) noResultsText = this.props.searchPromptText; | ||
if (isLoading) noResultsText = this.props.searchingText; | ||
if (isLoading) { | ||
noResultsText = this.props.searchingText; | ||
} else if (!options.length && this._lastInput.length < this.props.minimumInput) { | ||
noResultsText = this.props.searchPromptText; | ||
} | ||
@@ -169,0 +174,0 @@ return _react2['default'].createElement(_Select2['default'], _extends({}, this.props, { |
@@ -19,2 +19,3 @@ 'use strict'; | ||
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 | ||
@@ -26,4 +27,5 @@ isFocused: _react2['default'].PropTypes.bool, // the option is focused | ||
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 | ||
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) { | ||
@@ -80,3 +82,6 @@ event.preventDefault(); | ||
render: function render() { | ||
var option = this.props.option; | ||
var _props = this.props; | ||
var option = _props.option; | ||
var instancePrefix = _props.instancePrefix; | ||
var optionIndex = _props.optionIndex; | ||
@@ -95,2 +100,3 @@ var className = (0, _classnames2['default'])(this.props.className, option.className); | ||
style: option.style, | ||
role: 'option', | ||
onMouseDown: this.handleMouseDown, | ||
@@ -102,2 +108,3 @@ onMouseEnter: this.handleMouseEnter, | ||
onTouchEnd: this.handleTouchEnd, | ||
id: instancePrefix + '-option-' + optionIndex, | ||
title: option.title }, | ||
@@ -104,0 +111,0 @@ this.props.children |
@@ -73,2 +73,4 @@ 'use strict'; | ||
var instanceId = 1; | ||
var Select = _react2['default'].createClass({ | ||
@@ -81,2 +83,4 @@ | ||
allowCreate: _react2['default'].PropTypes.bool, // whether to allow creation of new entries | ||
'aria-label': _react2['default'].PropTypes.string, // Aria label (for assistive tech) | ||
'aria-labelledby': _react2['default'].PropTypes.string, // HTML ID of an element that should be used as the label (for assistive tech) | ||
autoBlur: _react2['default'].PropTypes.bool, // automatically blur the component when an option is selected | ||
@@ -86,2 +90,4 @@ autofocus: _react2['default'].PropTypes.bool, // autofocus the component on mount | ||
backspaceRemoves: _react2['default'].PropTypes.bool, // whether backspace removes an item if there is no text input | ||
backspaceToRemoveMessage: _react2['default'].PropTypes.string, // Message to use for screenreaders to press backspace to remove the current item - | ||
// {label} is replaced with the item label | ||
className: _react2['default'].PropTypes.string, // className for the outer element | ||
@@ -131,2 +137,3 @@ clearAllText: stringOrNode, // title for the "clear" control when multi: true | ||
options: _react2['default'].PropTypes.array, // array of options | ||
pageSize: _react2['default'].PropTypes.number, // number of entries to page when using page up/down keys | ||
placeholder: stringOrNode, // field placeholder, displayed when there's no value | ||
@@ -157,2 +164,3 @@ renderInvalidValues: _react2['default'].PropTypes.bool, // boolean to enable rendering values that do not match any options | ||
backspaceRemoves: true, | ||
backspaceToRemoveMessage: 'Press backspace to remove {label}', | ||
clearable: true, | ||
@@ -181,2 +189,3 @@ clearAllText: 'Clear all', | ||
optionGroupComponent: _OptionGroup2['default'], | ||
pageSize: 5, | ||
placeholder: 'Select...', | ||
@@ -208,3 +217,3 @@ renderInvalidValues: false, | ||
this._flatOptions = this.flattenOptions(this.props.options); | ||
this._instancePrefix = 'react-select-' + ++instanceId + '-'; | ||
var valueArray = this.getValueArray(this.props.value); | ||
@@ -276,2 +285,3 @@ | ||
this.setState({ isFocused: false }); // eslint-disable-line react/no-did-update-set-state | ||
this.closeMenu(); | ||
} | ||
@@ -331,2 +341,6 @@ }, | ||
if (event.target.tagName === 'INPUT') { | ||
return; | ||
} | ||
// prevent default event handlers | ||
@@ -345,2 +359,10 @@ event.stopPropagation(); | ||
if (this.state.isFocused) { | ||
// On iOS, we can get into a state where we think the input is focused but it isn't really, | ||
// since iOS ignores programmatic calls to input.focus() that weren't triggered by a click event. | ||
// Call focus() again here to be safe. | ||
this.focus(); | ||
// clears value so that the cursor will be a the end of input then the component re-renders | ||
this.refs.input.getInput().value = ''; | ||
// if the input is focused, ensure the menu is open | ||
@@ -410,3 +432,4 @@ this.setState({ | ||
handleInputBlur: function handleInputBlur(event) { | ||
if (this.refs.menu && document.activeElement === this.refs.menu) { | ||
// The check for menu.contains(activeElement) is necessary to prevent IE11's scrollbar from closing the menu in certain contexts. | ||
if (this.refs.menu && (this.refs.menu === document.activeElement || this.refs.menu.contains(document.activeElement))) { | ||
this.focus(); | ||
@@ -435,3 +458,3 @@ return; | ||
// Note: != used deliberately here to catch undefined and null | ||
if (nextState != null) { | ||
if (nextState != null && typeof nextState !== 'object') { | ||
newInputValue = '' + nextState; | ||
@@ -486,2 +509,18 @@ } | ||
break; | ||
case 33: | ||
// page up | ||
this.focusPageUpOption(); | ||
break; | ||
case 34: | ||
// page down | ||
this.focusPageDownOption(); | ||
break; | ||
case 35: | ||
// end key | ||
this.focusEndOption(); | ||
break; | ||
case 36: | ||
// home key | ||
this.focusStartOption(); | ||
break; | ||
// case 188: // , | ||
@@ -587,6 +626,6 @@ // if (this.props.allowCreate && this.props.multi) { | ||
this.setState({ | ||
inputValue: '' | ||
inputValue: '', | ||
focusedIndex: null | ||
}); | ||
} else { | ||
this.setValue(value); | ||
this.setState({ | ||
@@ -597,2 +636,3 @@ isOpen: false, | ||
}); | ||
this.setValue(value); | ||
} | ||
@@ -650,5 +690,23 @@ }, | ||
focusPageUpOption: function focusPageUpOption() { | ||
this.focusAdjacentOption('page_up'); | ||
}, | ||
focusPageDownOption: function focusPageDownOption() { | ||
this.focusAdjacentOption('page_down'); | ||
}, | ||
focusStartOption: function focusStartOption() { | ||
this.focusAdjacentOption('start'); | ||
}, | ||
focusEndOption: function focusEndOption() { | ||
this.focusAdjacentOption('end'); | ||
}, | ||
focusAdjacentOption: function focusAdjacentOption(dir) { | ||
var options = this._visibleOptions.filter(function (i) { | ||
return !i.disabled; | ||
var options = this._visibleOptions.map(function (option, index) { | ||
return { option: option, index: index }; | ||
}).filter(function (option) { | ||
return !option.option.disabled; | ||
}); | ||
@@ -660,3 +718,3 @@ this._scrollToFocusedOptionOnUpdate = true; | ||
inputValue: '', | ||
focusedOption: this._focusedOption || options[dir === 'next' ? 0 : options.length - 1] | ||
focusedOption: this._focusedOption || options[dir === 'next' ? 0 : options.length - 1].option | ||
}); | ||
@@ -668,3 +726,3 @@ return; | ||
for (var i = 0; i < options.length; i++) { | ||
if (this._focusedOption === options[i]) { | ||
if (this._focusedOption === options[i].option) { | ||
focusedIndex = i; | ||
@@ -674,14 +732,37 @@ break; | ||
} | ||
var focusedOption = options[0]; | ||
if (dir === 'next' && focusedIndex > -1 && focusedIndex < options.length - 1) { | ||
focusedOption = options[focusedIndex + 1]; | ||
if (dir === 'next' && focusedIndex !== -1) { | ||
focusedIndex = (focusedIndex + 1) % options.length; | ||
} else if (dir === 'previous') { | ||
if (focusedIndex > 0) { | ||
focusedOption = options[focusedIndex - 1]; | ||
focusedIndex = focusedIndex - 1; | ||
} else { | ||
focusedOption = options[options.length - 1]; | ||
focusedIndex = options.length - 1; | ||
} | ||
} else if (dir === 'start') { | ||
focusedIndex = 0; | ||
} else if (dir === 'end') { | ||
focusedIndex = options.length - 1; | ||
} else if (dir === 'page_up') { | ||
var potentialIndex = focusedIndex - this.props.pageSize; | ||
if (potentialIndex < 0) { | ||
focusedIndex = 0; | ||
} else { | ||
focusedIndex = potentialIndex; | ||
} | ||
} else if (dir === 'page_down') { | ||
var potentialIndex = focusedIndex + this.props.pageSize; | ||
if (potentialIndex > options.length - 1) { | ||
focusedIndex = options.length - 1; | ||
} else { | ||
focusedIndex = potentialIndex; | ||
} | ||
} | ||
if (focusedIndex === -1) { | ||
focusedIndex = 0; | ||
} | ||
this.setState({ | ||
focusedOption: focusedOption | ||
focusedIndex: options[focusedIndex].index, | ||
focusedOption: options[focusedIndex].option | ||
}); | ||
@@ -726,2 +807,4 @@ }, | ||
{ | ||
id: _this2._instancePrefix + '-value-' + i, | ||
instancePrefix: _this2._instancePrefix, | ||
disabled: _this2.props.disabled || value.clearableValue === false, | ||
@@ -733,3 +816,8 @@ key: 'value-' + i + '-' + value[_this2.props.valueKey], | ||
}, | ||
renderLabel(value) | ||
renderLabel(value), | ||
_react2['default'].createElement( | ||
'span', | ||
{ className: 'Select-aria-only' }, | ||
' ' | ||
) | ||
); | ||
@@ -742,3 +830,5 @@ }); | ||
{ | ||
id: this._instancePrefix + '-value-item', | ||
disabled: this.props.disabled, | ||
instancePrefix: this._instancePrefix, | ||
onClick: onClick, | ||
@@ -752,9 +842,38 @@ value: valueArray[0] | ||
renderInput: function renderInput(valueArray) { | ||
renderInput: function renderInput(valueArray, focusedOptionIndex) { | ||
if (this.props.inputRenderer) { | ||
return this.props.inputRenderer(); | ||
} else { | ||
var _classNames; | ||
var className = (0, _classnames2['default'])('Select-input', this.props.inputProps.className); | ||
var isOpen = !!this.state.isOpen; | ||
var ariaOwns = (0, _classnames2['default'])((_classNames = {}, _defineProperty(_classNames, this._instancePrefix + '-list', isOpen), _defineProperty(_classNames, this._instancePrefix + '-backspace-remove-message', this.props.multi && !this.props.disabled && this.state.isFocused && !this.state.inputValue), _classNames)); | ||
// TODO: Check how this project includes Object.assign() | ||
var inputProps = _extends({}, this.props.inputProps, { | ||
role: 'combobox', | ||
'aria-expanded': '' + isOpen, | ||
'aria-owns': ariaOwns, | ||
'aria-haspopup': '' + isOpen, | ||
'aria-activedescendant': isOpen ? this._instancePrefix + '-option-' + focusedOptionIndex : this._instancePrefix + '-value', | ||
'aria-labelledby': this.props['aria-labelledby'], | ||
'aria-label': this.props['aria-label'], | ||
className: className, | ||
tabIndex: this.props.tabIndex, | ||
onBlur: this.handleInputBlur, | ||
onChange: this.handleInputChange, | ||
onFocus: this.handleInputFocus, | ||
ref: 'input', | ||
required: this.state.required, | ||
value: this.state.inputValue | ||
}); | ||
if (this.props.disabled || !this.props.searchable) { | ||
return _react2['default'].createElement('div', _extends({}, this.props.inputProps, { | ||
role: 'combobox', | ||
'aria-expanded': isOpen, | ||
'aria-owns': isOpen ? this._instancePrefix + '-list' : this._instancePrefix + '-value', | ||
'aria-activedescendant': isOpen ? this._instancePrefix + '-option-' + focusedOptionIndex : this._instancePrefix + '-value', | ||
className: className, | ||
@@ -765,16 +884,8 @@ tabIndex: this.props.tabIndex || 0, | ||
ref: 'input', | ||
'aria-readonly': '' + !!this.props.disabled, | ||
style: { border: 0, width: 1, display: 'inline-block' } })); | ||
} | ||
if (this.props.autosize) { | ||
return _react2['default'].createElement(_reactInputAutosize2['default'], _extends({}, this.props.inputProps, { | ||
className: className, | ||
tabIndex: this.props.tabIndex, | ||
onBlur: this.handleInputBlur, | ||
onChange: this.handleInputChange, | ||
onFocus: this.handleInputFocus, | ||
minWidth: '5', | ||
ref: 'input', | ||
required: this.state.required, | ||
value: this.state.inputValue | ||
})); | ||
return _react2['default'].createElement(_reactInputAutosize2['default'], _extends({}, inputProps, { minWidth: '5px' })); | ||
} | ||
@@ -784,11 +895,3 @@ return _react2['default'].createElement( | ||
{ className: className }, | ||
_react2['default'].createElement('input', _extends({}, this.props.inputProps, { | ||
tabIndex: this.props.tabIndex, | ||
onBlur: this.handleInputBlur, | ||
onChange: this.handleInputChange, | ||
onFocus: this.handleInputFocus, | ||
ref: 'input', | ||
required: this.state.required, | ||
value: this.state.inputValue | ||
})) | ||
_react2['default'].createElement('input', inputProps) | ||
); | ||
@@ -944,2 +1047,4 @@ } | ||
{ | ||
instancePrefix: _this4._instancePrefix, | ||
optionIndex: i, | ||
className: optionClass, | ||
@@ -1000,10 +1105,18 @@ isDisabled: option.disabled, | ||
getFocusableOption: function getFocusableOption(selectedOption) { | ||
getFocusableOptionIndex: function getFocusableOptionIndex(selectedOption) { | ||
var options = this._visibleOptions; | ||
if (!options.length) return; | ||
if (!options.length) return null; | ||
var focusedOption = this.state.focusedOption || selectedOption; | ||
if (focusedOption && options.indexOf(focusedOption) > -1) return focusedOption; | ||
if (focusedOption && !focusedOption.disabled) { | ||
var focusedOptionIndex = options.indexOf(focusedOption); | ||
if (focusedOptionIndex !== -1) { | ||
return focusedOptionIndex; | ||
} | ||
} | ||
for (var i = 0; i < options.length; i++) { | ||
if (!options[i].disabled) return options[i]; | ||
if (!options[i].disabled) return i; | ||
} | ||
return null; | ||
}, | ||
@@ -1026,3 +1139,3 @@ | ||
'div', | ||
{ ref: 'menu', className: 'Select-menu', | ||
{ ref: 'menu', role: 'listbox', className: 'Select-menu', id: this._instancePrefix + '-list', | ||
style: this.props.menuStyle, | ||
@@ -1043,3 +1156,10 @@ onScroll: this.handleMenuScroll, | ||
if (this.props.multi && !options.length && valueArray.length && !this.state.inputValue) isOpen = false; | ||
var focusedOption = this._focusedOption = this.getFocusableOption(valueArray[0]); | ||
var focusedOptionIndex = this.getFocusableOptionIndex(valueArray[0]); | ||
var focusedOption = null; | ||
if (focusedOptionIndex !== null) { | ||
focusedOption = this._focusedOption = this._visibleOptions[focusedOptionIndex]; | ||
} else { | ||
focusedOption = this._focusedOption = null; | ||
} | ||
var className = (0, _classnames2['default'])('Select', this.props.className, { | ||
@@ -1057,5 +1177,16 @@ 'Select--multi': this.props.multi, | ||
var removeMessage = null; | ||
if (this.props.multi && !this.props.disabled && valueArray.length && !this.state.inputValue && this.state.isFocused && this.props.backspaceRemoves) { | ||
removeMessage = _react2['default'].createElement( | ||
'span', | ||
{ id: this._instancePrefix + '-backspace-remove-message', className: 'Select-aria-only', 'aria-live': 'assertive' }, | ||
this.props.backspaceToRemoveMessage.replace('{label}', valueArray[valueArray.length - 1][this.props.labelKey]) | ||
); | ||
} | ||
return _react2['default'].createElement( | ||
'div', | ||
{ ref: 'wrapper', className: className, style: this.props.wrapperStyle }, | ||
{ ref: 'wrapper', | ||
className: className, | ||
style: this.props.wrapperStyle }, | ||
this.renderHiddenField(valueArray), | ||
@@ -1072,4 +1203,9 @@ _react2['default'].createElement( | ||
onTouchMove: this.handleTouchMove }, | ||
this.renderValue(valueArray, isOpen), | ||
this.renderInput(valueArray), | ||
_react2['default'].createElement( | ||
'span', | ||
{ className: 'Select-multi-value-wrapper', id: this._instancePrefix + '-value' }, | ||
this.renderValue(valueArray, isOpen), | ||
this.renderInput(valueArray, focusedOptionIndex) | ||
), | ||
removeMessage, | ||
this.renderLoading(), | ||
@@ -1076,0 +1212,0 @@ this.renderClear(), |
@@ -20,2 +20,3 @@ 'use strict'; | ||
disabled: _react2['default'].PropTypes.bool, // disabled prop passed to ReactSelect | ||
id: _react2['default'].PropTypes.string, // Unique id for the value - used for aria | ||
onClick: _react2['default'].PropTypes.func, // method to handle click on value label | ||
@@ -70,2 +71,3 @@ onRemove: _react2['default'].PropTypes.func, // method to handle removal of the value | ||
{ className: 'Select-value-icon', | ||
'aria-hidden': 'true', | ||
onMouseDown: this.onRemove, | ||
@@ -87,3 +89,3 @@ onTouchEnd: this.handleTouchEndRemove, | ||
'span', | ||
{ className: className }, | ||
{ className: className, role: 'option', 'aria-selected': 'true', id: this.props.id }, | ||
this.props.children | ||
@@ -90,0 +92,0 @@ ); |
{ | ||
"name": "react-select-plus", | ||
"version": "1.0.0-beta13", | ||
"version": "1.0.0-beta13.patch1", | ||
"description": "A Select control built with and for ReactJS", | ||
@@ -25,2 +25,3 @@ "main": "lib/Select.js", | ||
"gulp": "^3.9.1", | ||
"isomorphic-fetch": "^2.2.1", | ||
"istanbul": "^0.4.3", | ||
@@ -40,3 +41,3 @@ "jsdom": "^8.4.1", | ||
"unexpected-dom": "^3.1.0", | ||
"unexpected-react": "^3.1.3", | ||
"unexpected-react": "^3.2.3", | ||
"unexpected-sinon": "^10.2.0" | ||
@@ -43,0 +44,0 @@ }, |
@@ -40,9 +40,23 @@ React-Select-Plus | ||
You can also use the standalone build by including `dist/react-select.js` and `dist/react-select.css` in your page. If you use this, make sure you have already included the following dependencies: | ||
At this point you can import react-select and its styles in your application as follows: | ||
* [React](http://facebook.github.io/react/) | ||
* [classNames](http://jedwatson.github.io/classnames/) | ||
* [react-input-autosize](https://github.com/JedWatson/react-input-autosize) | ||
```js | ||
import Select from 'react-select-plus'; | ||
// Be sure to include styles at some point, probably during your bootstrapping | ||
import 'react-select/dist/react-select-plus.css'; | ||
``` | ||
You can also use the standalone build by including `react-select-plus.js` and `react-select-plus.css` in your page. (If you do this though you'll also need to include the dependencies.) For example: | ||
```html | ||
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> | ||
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> | ||
<script src="https://npmcdn.com/classnames/index.js"></script> | ||
<script src="https://npmcdn.com/react-input-autosize/dist/react-input-autosize.js"></script> | ||
<script src="https://npmcdn.com/react-select-plus/dist/react-select-plus.js"></script> | ||
<link rel="stylesheet" href="https://npmcdn.com/react-select-plus/dist/react-select-plus.css"> | ||
``` | ||
## Usage | ||
@@ -56,3 +70,3 @@ | ||
When the value is changed, `onChange(newValue, [selectedOptions])` will fire. | ||
When the value is changed, `onChange(selectedValueOrValues)` will fire. | ||
@@ -87,4 +101,3 @@ ```javascript | ||
* A simple value, if provided, will be split using the `delimiter` prop | ||
* The `onChange` event provides an array of the selected options as the second argument | ||
* The first argument to `onChange` is always a string, regardless of whether the values of the selected options are numbers or strings | ||
* The `onChange` event provides an array of selected options _or_ a comma-separated string of values (eg `"1,2,3"`) if `simpleValue` is true | ||
* By default, only options in the `options` array can be selected. Setting `allowCreate` to true allows new options to be created if they do not already exist. | ||
@@ -210,2 +223,8 @@ * By default, selected options can be cleared. To disable the possibility of clearing a particular option, add `clearableValue: false` to that option: | ||
This should be done when the list is large (hundreds or thousands of items) for faster rendering. | ||
Windowing libraries like [`react-virtualized`](https://github.com/bvaughn/react-virtualized) can then be used to more efficiently render the drop-down menu like so. | ||
The easiest way to do this is with the [`react-virtualized-select`](https://github.com/bvaughn/react-virtualized-select/) HOC. | ||
This component decorates a `Select` and uses the react-virtualized `VirtualScroll` component to render options. | ||
Demo and documentation for this component are available [here](https://bvaughn.github.io/react-virtualized-select/). | ||
You can also specify your own custom renderer. | ||
The custom `menuRenderer` property accepts the following named parameters: | ||
@@ -222,33 +241,2 @@ | ||
Windowing libraries like [`react-virtualized`](https://github.com/bvaughn/react-virtualized) can then be used to more efficiently render the drop-down menu like so: | ||
```js | ||
menuRenderer({ focusedOption, focusOption, labelKey, options, selectValue, valueArray }) { | ||
const focusedOptionIndex = options.indexOf(focusedOption); | ||
const option = options[index]; | ||
const isFocusedOption = option === focusedOption; | ||
return ( | ||
<VirtualScroll | ||
ref="VirtualScroll" | ||
height={200} | ||
rowHeight={35} | ||
rowRenderer={(index) => ( | ||
<div | ||
onMouseOver={() => focusOption(option)} | ||
onClick={() => selectValue(option)} | ||
> | ||
{option[labelKey]} | ||
</div> | ||
)} | ||
rowsCount={options.length} | ||
scrollToIndex={focusedOptionIndex} | ||
width={200} | ||
/> | ||
) | ||
} | ||
``` | ||
Check out the demo site for a more complete example of this. | ||
### Updating input values with onInputChange | ||
@@ -278,2 +266,3 @@ | ||
autoBlur | bool | false | Blurs the input element after a selection has been made. Handy for lowering the keyboard on mobile devices | ||
autofocus | bool | undefined | autofocus the component on mount | ||
autoload | bool | true | whether to auto-load the default async options set | ||
@@ -322,7 +311,7 @@ autosize | bool | true | If enabled, the input will expand as the length of its value increases | ||
searchingText | string | 'Searching...' | message to display whilst options are loading via asyncOptions, or when `isLoading` is true | ||
searchPromptText | string | 'Type to search' | label to prompt for search input | ||
searchPromptText | string\|node | 'Type to search' | label to prompt for search input | ||
tabSelectsValue | bool | true | whether to select the currently focused value when the `[tab]` key is pressed | ||
value | any | undefined | initial field value | ||
valueKey | string | 'value' | the option property to use for the value | ||
valueRenderer | func | undefined | function which returns a custom way to render the value selected | ||
valueRenderer | func | undefined | function which returns a custom way to render the value selected `function (option) {}` | ||
@@ -329,0 +318,0 @@ ### Methods |
@@ -56,3 +56,3 @@ import React from 'react'; | ||
placeholder: stringOrNode, // field placeholder, displayed when there's no value (shared with Select) | ||
searchPromptText: React.PropTypes.string, // label to prompt for search input | ||
searchPromptText: stringOrNode, // label to prompt for search input | ||
searchingText: React.PropTypes.string, // message to display while options are loading | ||
@@ -124,2 +124,3 @@ }, | ||
if (this.props.ignoreCase) input = input.toLowerCase(); | ||
this._lastInput = input; | ||
@@ -139,3 +140,6 @@ if (input.length < this.props.minimumInput) { | ||
let responseHandler = this.getResponseHandler(input); | ||
return thenPromise(this.props.loadOptions(input, responseHandler), responseHandler); | ||
let inputPromise = thenPromise(this.props.loadOptions(input, responseHandler), responseHandler); | ||
return inputPromise ? inputPromise.then(() => { | ||
return input; | ||
}) : input; | ||
}, | ||
@@ -147,5 +151,6 @@ render () { | ||
let placeholder = isLoading ? this.props.loadingPlaceholder : this.props.placeholder; | ||
if (!options.length) { | ||
if (this._lastInput.length < this.props.minimumInput) noResultsText = this.props.searchPromptText; | ||
if (isLoading) noResultsText = this.props.searchingText; | ||
if (isLoading) { | ||
noResultsText = this.props.searchingText; | ||
} else if (!options.length && this._lastInput.length < this.props.minimumInput) { | ||
noResultsText = this.props.searchPromptText; | ||
} | ||
@@ -152,0 +157,0 @@ return ( |
@@ -8,2 +8,3 @@ import React from 'react'; | ||
className: React.PropTypes.string, // className (based on mouse position) | ||
instancePrefix: React.PropTypes.string.isRequired, // unique prefix for the ids (used for aria) | ||
isDisabled: React.PropTypes.bool, // the option is disabled | ||
@@ -16,2 +17,3 @@ isFocused: React.PropTypes.bool, // the option is focused | ||
option: React.PropTypes.object.isRequired, // object that is base for that option | ||
optionIndex: React.PropTypes.number, // index of the option, used to generate unique ids for aria | ||
}, | ||
@@ -69,3 +71,3 @@ blockEvent (event) { | ||
render () { | ||
var { option } = this.props; | ||
var { option, instancePrefix, optionIndex } = this.props; | ||
var className = classNames(this.props.className, option.className); | ||
@@ -82,3 +84,4 @@ | ||
style={option.style} | ||
onMouseDown={this.handleMouseDown} | ||
role="option" | ||
onMouseDown={this.handleMouseDown} | ||
onMouseEnter={this.handleMouseEnter} | ||
@@ -89,2 +92,3 @@ onMouseMove={this.handleMouseMove} | ||
onTouchEnd={this.handleTouchEnd} | ||
id={instancePrefix + '-option-' + optionIndex} | ||
title={option.title}> | ||
@@ -91,0 +95,0 @@ {this.props.children} |
@@ -37,2 +37,4 @@ import React from 'react'; | ||
let instanceId = 1; | ||
const Select = React.createClass({ | ||
@@ -45,2 +47,4 @@ | ||
allowCreate: React.PropTypes.bool, // whether to allow creation of new entries | ||
'aria-label': React.PropTypes.string, // Aria label (for assistive tech) | ||
'aria-labelledby': React.PropTypes.string, // HTML ID of an element that should be used as the label (for assistive tech) | ||
autoBlur: React.PropTypes.bool, // automatically blur the component when an option is selected | ||
@@ -50,2 +54,4 @@ autofocus: React.PropTypes.bool, // autofocus the component on mount | ||
backspaceRemoves: React.PropTypes.bool, // whether backspace removes an item if there is no text input | ||
backspaceToRemoveMessage: React.PropTypes.string, // Message to use for screenreaders to press backspace to remove the current item - | ||
// {label} is replaced with the item label | ||
className: React.PropTypes.string, // className for the outer element | ||
@@ -95,2 +101,3 @@ clearAllText: stringOrNode, // title for the "clear" control when multi: true | ||
options: React.PropTypes.array, // array of options | ||
pageSize: React.PropTypes.number, // number of entries to page when using page up/down keys | ||
placeholder: stringOrNode, // field placeholder, displayed when there's no value | ||
@@ -121,2 +128,3 @@ renderInvalidValues: React.PropTypes.bool, // boolean to enable rendering values that do not match any options | ||
backspaceRemoves: true, | ||
backspaceToRemoveMessage: 'Press backspace to remove {label}', | ||
clearable: true, | ||
@@ -145,2 +153,3 @@ clearAllText: 'Clear all', | ||
optionGroupComponent: OptionGroup, | ||
pageSize: 5, | ||
placeholder: 'Select...', | ||
@@ -172,3 +181,3 @@ renderInvalidValues: false, | ||
this._flatOptions = this.flattenOptions(this.props.options); | ||
this._instancePrefix = 'react-select-' + (++instanceId) + '-'; | ||
const valueArray = this.getValueArray(this.props.value); | ||
@@ -242,2 +251,3 @@ | ||
this.setState({ isFocused: false }); // eslint-disable-line react/no-did-update-set-state | ||
this.closeMenu(); | ||
} | ||
@@ -297,2 +307,6 @@ }, | ||
if (event.target.tagName === 'INPUT') { | ||
return; | ||
} | ||
// prevent default event handlers | ||
@@ -311,2 +325,10 @@ event.stopPropagation(); | ||
if (this.state.isFocused) { | ||
// On iOS, we can get into a state where we think the input is focused but it isn't really, | ||
// since iOS ignores programmatic calls to input.focus() that weren't triggered by a click event. | ||
// Call focus() again here to be safe. | ||
this.focus(); | ||
// clears value so that the cursor will be a the end of input then the component re-renders | ||
this.refs.input.getInput().value = ''; | ||
// if the input is focused, ensure the menu is open | ||
@@ -376,3 +398,4 @@ this.setState({ | ||
handleInputBlur (event) { | ||
if (this.refs.menu && document.activeElement === this.refs.menu) { | ||
// The check for menu.contains(activeElement) is necessary to prevent IE11's scrollbar from closing the menu in certain contexts. | ||
if (this.refs.menu && (this.refs.menu === document.activeElement || this.refs.menu.contains(document.activeElement))) { | ||
this.focus(); | ||
@@ -401,3 +424,3 @@ return; | ||
// Note: != used deliberately here to catch undefined and null | ||
if (nextState != null) { | ||
if (nextState != null && typeof nextState !== 'object') { | ||
newInputValue = '' + nextState; | ||
@@ -446,2 +469,14 @@ } | ||
break; | ||
case 33: // page up | ||
this.focusPageUpOption(); | ||
break; | ||
case 34: // page down | ||
this.focusPageDownOption(); | ||
break; | ||
case 35: // end key | ||
this.focusEndOption(); | ||
break; | ||
case 36: // home key | ||
this.focusStartOption(); | ||
break; | ||
// case 188: // , | ||
@@ -536,5 +571,5 @@ // if (this.props.allowCreate && this.props.multi) { | ||
inputValue: '', | ||
focusedIndex: null | ||
}); | ||
} else { | ||
this.setValue(value); | ||
this.setState({ | ||
@@ -545,2 +580,3 @@ isOpen: false, | ||
}); | ||
this.setValue(value); | ||
} | ||
@@ -596,4 +632,22 @@ }, | ||
focusPageUpOption () { | ||
this.focusAdjacentOption('page_up'); | ||
}, | ||
focusPageDownOption () { | ||
this.focusAdjacentOption('page_down'); | ||
}, | ||
focusStartOption () { | ||
this.focusAdjacentOption('start'); | ||
}, | ||
focusEndOption () { | ||
this.focusAdjacentOption('end'); | ||
}, | ||
focusAdjacentOption (dir) { | ||
var options = this._visibleOptions.filter(i => !i.disabled); | ||
var options = this._visibleOptions | ||
.map((option, index) => ({ option, index })) | ||
.filter(option => !option.option.disabled); | ||
this._scrollToFocusedOptionOnUpdate = true; | ||
@@ -604,3 +658,3 @@ if (!this.state.isOpen) { | ||
inputValue: '', | ||
focusedOption: this._focusedOption || options[dir === 'next' ? 0 : options.length - 1] | ||
focusedOption: this._focusedOption || options[dir === 'next' ? 0 : options.length - 1].option | ||
}); | ||
@@ -612,3 +666,3 @@ return; | ||
for (var i = 0; i < options.length; i++) { | ||
if (this._focusedOption === options[i]) { | ||
if (this._focusedOption === options[i].option) { | ||
focusedIndex = i; | ||
@@ -618,14 +672,37 @@ break; | ||
} | ||
var focusedOption = options[0]; | ||
if (dir === 'next' && focusedIndex > -1 && focusedIndex < options.length - 1) { | ||
focusedOption = options[focusedIndex + 1]; | ||
if (dir === 'next' && focusedIndex !== -1 ) { | ||
focusedIndex = (focusedIndex + 1) % options.length; | ||
} else if (dir === 'previous') { | ||
if (focusedIndex > 0) { | ||
focusedOption = options[focusedIndex - 1]; | ||
focusedIndex = focusedIndex - 1; | ||
} else { | ||
focusedOption = options[options.length - 1]; | ||
focusedIndex = options.length - 1; | ||
} | ||
} else if (dir === 'start') { | ||
focusedIndex = 0; | ||
} else if (dir === 'end') { | ||
focusedIndex = options.length - 1; | ||
} else if (dir === 'page_up') { | ||
var potentialIndex = focusedIndex - this.props.pageSize; | ||
if ( potentialIndex < 0 ) { | ||
focusedIndex = 0; | ||
} else { | ||
focusedIndex = potentialIndex; | ||
} | ||
} else if (dir === 'page_down') { | ||
var potentialIndex = focusedIndex + this.props.pageSize; | ||
if ( potentialIndex > options.length - 1 ) { | ||
focusedIndex = options.length - 1; | ||
} else { | ||
focusedIndex = potentialIndex; | ||
} | ||
} | ||
if (focusedIndex === -1) { | ||
focusedIndex = 0; | ||
} | ||
this.setState({ | ||
focusedOption: focusedOption | ||
focusedIndex: options[focusedIndex].index, | ||
focusedOption: options[focusedIndex].option | ||
}); | ||
@@ -663,2 +740,4 @@ }, | ||
<ValueComponent | ||
id={this._instancePrefix + '-value-' + i} | ||
instancePrefix={this._instancePrefix} | ||
disabled={this.props.disabled || value.clearableValue === false} | ||
@@ -669,4 +748,5 @@ key={`value-${i}-${value[this.props.valueKey]}`} | ||
value={value} | ||
> | ||
> | ||
{renderLabel(value)} | ||
<span className="Select-aria-only"> </span> | ||
</ValueComponent> | ||
@@ -679,6 +759,8 @@ ); | ||
<ValueComponent | ||
id={this._instancePrefix + '-value-item'} | ||
disabled={this.props.disabled} | ||
instancePrefix={this._instancePrefix} | ||
onClick={onClick} | ||
value={valueArray[0]} | ||
> | ||
> | ||
{renderLabel(valueArray[0])} | ||
@@ -690,3 +772,3 @@ </ValueComponent> | ||
renderInput (valueArray) { | ||
renderInput (valueArray, focusedOptionIndex) { | ||
if (this.props.inputRenderer) { | ||
@@ -696,2 +778,31 @@ return this.props.inputRenderer(); | ||
var className = classNames('Select-input', this.props.inputProps.className); | ||
const isOpen = !!this.state.isOpen; | ||
const ariaOwns = classNames({ | ||
[this._instancePrefix + '-list']: isOpen, | ||
[this._instancePrefix + '-backspace-remove-message']: this.props.multi && | ||
!this.props.disabled && | ||
this.state.isFocused && | ||
!this.state.inputValue | ||
}); | ||
// TODO: Check how this project includes Object.assign() | ||
const inputProps = Object.assign({}, this.props.inputProps, { | ||
role: 'combobox', | ||
'aria-expanded': '' + isOpen, | ||
'aria-owns': ariaOwns, | ||
'aria-haspopup': '' + isOpen, | ||
'aria-activedescendant': isOpen ? this._instancePrefix + '-option-' + focusedOptionIndex : this._instancePrefix + '-value', | ||
'aria-labelledby': this.props['aria-labelledby'], | ||
'aria-label': this.props['aria-label'], | ||
className: className, | ||
tabIndex: this.props.tabIndex, | ||
onBlur: this.handleInputBlur, | ||
onChange: this.handleInputChange, | ||
onFocus: this.handleInputFocus, | ||
ref: 'input', | ||
required: this.state.required, | ||
value: this.state.inputValue | ||
}); | ||
if (this.props.disabled || !this.props.searchable) { | ||
@@ -701,2 +812,6 @@ return ( | ||
{...this.props.inputProps} | ||
role="combobox" | ||
aria-expanded={isOpen} | ||
aria-owns={isOpen ? this._instancePrefix + '-list' : this._instancePrefix + '-value'} | ||
aria-activedescendant={isOpen ? this._instancePrefix + '-option-' + focusedOptionIndex : this._instancePrefix + '-value'} | ||
className={className} | ||
@@ -707,19 +822,10 @@ tabIndex={this.props.tabIndex || 0} | ||
ref="input" | ||
aria-readonly={'' + !!this.props.disabled} | ||
style={{ border: 0, width: 1, display:'inline-block' }}/> | ||
); | ||
} | ||
if (this.props.autosize) { | ||
return ( | ||
<Input | ||
{...this.props.inputProps} | ||
className={className} | ||
tabIndex={this.props.tabIndex} | ||
onBlur={this.handleInputBlur} | ||
onChange={this.handleInputChange} | ||
onFocus={this.handleInputFocus} | ||
minWidth="5" | ||
ref="input" | ||
required={this.state.required} | ||
value={this.state.inputValue} | ||
/> | ||
<Input {...inputProps} minWidth="5px" /> | ||
); | ||
@@ -729,12 +835,3 @@ } | ||
<div className={ className }> | ||
<input | ||
{...this.props.inputProps} | ||
tabIndex={this.props.tabIndex} | ||
onBlur={this.handleInputBlur} | ||
onChange={this.handleInputChange} | ||
onFocus={this.handleInputFocus} | ||
ref="input" | ||
required={this.state.required} | ||
value={this.state.inputValue} | ||
/> | ||
<input {...inputProps} /> | ||
</div> | ||
@@ -882,2 +979,4 @@ ); | ||
<Option | ||
instancePrefix={this._instancePrefix} | ||
optionIndex={i} | ||
className={optionClass} | ||
@@ -933,10 +1032,18 @@ isDisabled={option.disabled} | ||
getFocusableOption (selectedOption) { | ||
getFocusableOptionIndex (selectedOption) { | ||
var options = this._visibleOptions; | ||
if (!options.length) return; | ||
if (!options.length) return null; | ||
let focusedOption = this.state.focusedOption || selectedOption; | ||
if (focusedOption && options.indexOf(focusedOption) > -1) return focusedOption; | ||
if (focusedOption && !focusedOption.disabled) { | ||
const focusedOptionIndex = options.indexOf(focusedOption); | ||
if (focusedOptionIndex !== -1) { | ||
return focusedOptionIndex; | ||
} | ||
} | ||
for (var i = 0; i < options.length; i++) { | ||
if (!options[i].disabled) return options[i]; | ||
if (!options[i].disabled) return i; | ||
} | ||
return null; | ||
}, | ||
@@ -954,3 +1061,3 @@ | ||
<div ref="menuContainer" className="Select-menu-outer" style={this.props.menuContainerStyle}> | ||
<div ref="menu" className="Select-menu" | ||
<div ref="menu" role="listbox" className="Select-menu" id={this._instancePrefix + '-list'} | ||
style={this.props.menuStyle} | ||
@@ -972,3 +1079,10 @@ onScroll={this.handleMenuScroll} | ||
if (this.props.multi && !options.length && valueArray.length && !this.state.inputValue) isOpen = false; | ||
let focusedOption = this._focusedOption = this.getFocusableOption(valueArray[0]); | ||
const focusedOptionIndex = this.getFocusableOptionIndex(valueArray[0]); | ||
let focusedOption = null; | ||
if (focusedOptionIndex !== null) { | ||
focusedOption = this._focusedOption = this._visibleOptions[focusedOptionIndex]; | ||
} else { | ||
focusedOption = this._focusedOption = null; | ||
} | ||
let className = classNames('Select', this.props.className, { | ||
@@ -986,4 +1100,20 @@ 'Select--multi': this.props.multi, | ||
let removeMessage = null; | ||
if (this.props.multi && | ||
!this.props.disabled && | ||
valueArray.length && | ||
!this.state.inputValue && | ||
this.state.isFocused && | ||
this.props.backspaceRemoves) { | ||
removeMessage = ( | ||
<span id={this._instancePrefix + '-backspace-remove-message'} className="Select-aria-only" aria-live="assertive"> | ||
{this.props.backspaceToRemoveMessage.replace('{label}', valueArray[valueArray.length - 1][this.props.labelKey])} | ||
</span> | ||
); | ||
} | ||
return ( | ||
<div ref="wrapper" className={className} style={this.props.wrapperStyle}> | ||
<div ref="wrapper" | ||
className={className} | ||
style={this.props.wrapperStyle}> | ||
{this.renderHiddenField(valueArray)} | ||
@@ -998,4 +1128,7 @@ <div ref="control" | ||
onTouchMove={this.handleTouchMove}> | ||
{this.renderValue(valueArray, isOpen)} | ||
{this.renderInput(valueArray)} | ||
<span className="Select-multi-value-wrapper" id={this._instancePrefix + '-value'}> | ||
{this.renderValue(valueArray, isOpen)} | ||
{this.renderInput(valueArray, focusedOptionIndex)} | ||
</span> | ||
{removeMessage} | ||
{this.renderLoading()} | ||
@@ -1002,0 +1135,0 @@ {this.renderClear()} |
@@ -11,2 +11,3 @@ import React from 'react'; | ||
disabled: React.PropTypes.bool, // disabled prop passed to ReactSelect | ||
id: React.PropTypes.string, // Unique id for the value - used for aria | ||
onClick: React.PropTypes.func, // method to handle click on value label | ||
@@ -60,2 +61,3 @@ onRemove: React.PropTypes.func, // method to handle removal of the value | ||
<span className="Select-value-icon" | ||
aria-hidden="true" | ||
onMouseDown={this.onRemove} | ||
@@ -77,3 +79,3 @@ onTouchEnd={this.handleTouchEndRemove} | ||
) : ( | ||
<span className={className}> | ||
<span className={className} role="option" aria-selected="true" id={this.props.id}> | ||
{this.props.children} | ||
@@ -80,0 +82,0 @@ </span> |
@@ -85,3 +85,2 @@ 'use strict'; | ||
it('shows the returns options when the result returns', () => { | ||
@@ -109,3 +108,23 @@ | ||
it('shows "Loading..." after typing if refined search matches none of the previous results', () => { | ||
loadOptions.returns(expect.promise((resolve, reject) => { | ||
resolve({ options: [{ value: 1, label: 'test' }] }); | ||
})); | ||
typeSearchText('te'); | ||
return loadOptions.firstCall.returnValue.then(() => { | ||
typeSearchText('ten'); | ||
return expect(renderer, 'to have rendered', | ||
<Select | ||
isLoading | ||
placeholder="Loading..." | ||
noResultsText="Searching..." | ||
/>); | ||
}); | ||
}); | ||
it('ignores the result of an earlier call, when the responses come in the wrong order', () => { | ||
@@ -112,0 +131,0 @@ |
@@ -9,7 +9,10 @@ /* | ||
return { | ||
files: ['src/**/*.js', 'testHelpers/*.js'], | ||
files: ['src/**/*.js', { | ||
pattern: 'testHelpers/*.js', | ||
instrument: false | ||
}], | ||
tests: ['test/*-test.js' ], | ||
env: { | ||
type: 'node', | ||
runner: '/home/dave/.nvm/versions/node/v4.2.1/bin/node' | ||
runner: 'node' | ||
}, | ||
@@ -16,0 +19,0 @@ compilers: { |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
1752209
82
38000
24
330
2