diff --git a/dist/react-select.es.js b/dist/react-select.es.js index 82de180ea8..03daeee79c 100644 --- a/dist/react-select.es.js +++ b/dist/react-select.es.js @@ -1,42 +1,47 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; -import { findDOMNode } from 'react-dom'; import AutosizeInput from 'react-input-autosize'; import classNames from 'classnames'; +import PropTypes from 'prop-types'; +import React, { Component } from 'react'; +import { findDOMNode } from 'react-dom'; -function arrowRenderer(_ref) { +var arrowRenderer = function arrowRenderer(_ref) { var onMouseDown = _ref.onMouseDown; return React.createElement('span', { className: 'Select-arrow', onMouseDown: onMouseDown }); -} +}; arrowRenderer.propTypes = { onMouseDown: PropTypes.func }; +var clearRenderer = function clearRenderer() { + return React.createElement('span', { + className: 'Select-clear', + dangerouslySetInnerHTML: { __html: '×' } + }); +}; + var map = [{ '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 }]; -function stripDiacritics(str) { +var stripDiacritics = function stripDiacritics(str) { for (var i = 0; i < map.length; i++) { str = str.replace(map[i].letters, map[i].base); } return str; -} +}; -function trim(str) { - return str.replace(/^\s+|\s+$/g, ''); -} +var trim = function trim(str) { + return str.replace(/^\s+|\s+$/g, ''); +}; -function isValid(value) { +var isValid = function isValid(value) { return typeof value !== 'undefined' && value !== null && value !== ''; -} - -function filterOptions(options, filterValue, excludeOptions, props) { - var _this = this; +}; +var filterOptions = function filterOptions(options, filterValue, excludeOptions, props) { if (props.ignoreAccents) { filterValue = stripDiacritics(filterValue); } @@ -55,7 +60,7 @@ function filterOptions(options, filterValue, excludeOptions, props) { return options.filter(function (option) { if (excludeOptions && excludeOptions.indexOf(option[props.valueKey]) > -1) return false; - if (props.filterOption) return props.filterOption.call(_this, option, filterValue); + if (props.filterOption) return props.filterOption.call(undefined, option, filterValue); if (!filterValue) return true; var value = option[props.valueKey]; @@ -82,14 +87,13 @@ function filterOptions(options, filterValue, excludeOptions, props) { return props.matchPos === 'start' ? valueTest && props.matchProp !== 'label' && valueTest.substr(0, filterValue.length) === filterValue || labelTest && props.matchProp !== 'value' && labelTest.substr(0, filterValue.length) === filterValue : valueTest && props.matchProp !== 'label' && valueTest.indexOf(filterValue) >= 0 || labelTest && props.matchProp !== 'value' && labelTest.indexOf(filterValue) >= 0; }); -} +}; -function menuRenderer(_ref) { +var menuRenderer = function menuRenderer(_ref) { var focusedOption = _ref.focusedOption, focusOption = _ref.focusOption, inputValue = _ref.inputValue, instancePrefix = _ref.instancePrefix, - labelKey = _ref.labelKey, onFocus = _ref.onFocus, onOptionRef = _ref.onOptionRef, onSelect = _ref.onSelect, @@ -106,7 +110,7 @@ function menuRenderer(_ref) { return options.map(function (option, i) { var isSelected = valueArray && valueArray.some(function (x) { - return x[valueKey] == option[valueKey]; + return x[valueKey] === option[valueKey]; }); var isFocused = option === focusedOption; var optionClass = classNames(optionClassName, { @@ -140,14 +144,38 @@ function menuRenderer(_ref) { optionRenderer(option, i, inputValue) ); }); -} +}; -function clearRenderer() { - return React.createElement('span', { - className: 'Select-clear', - dangerouslySetInnerHTML: { __html: '×' } - }); -} +menuRenderer.propTypes = { + focusOption: PropTypes.func, + focusedOption: PropTypes.object, + inputValue: PropTypes.string, + instancePrefix: PropTypes.string, + onFocus: PropTypes.func, + onOptionRef: PropTypes.func, + onSelect: PropTypes.func, + optionClassName: PropTypes.string, + optionComponent: PropTypes.func, + optionRenderer: PropTypes.func, + options: PropTypes.array, + removeValue: PropTypes.func, + selectValue: PropTypes.func, + valueArray: PropTypes.array, + valueKey: PropTypes.string +}; + +var blockEvent = (function (event) { + event.preventDefault(); + event.stopPropagation(); + if (event.target.tagName !== 'A' || !('href' in event.target)) { + return; + } + if (event.target.target) { + window.open(event.target.href, event.target.target); + } else { + window.location.href = event.target.href; + } +}); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; @@ -398,20 +426,6 @@ var Option = function (_React$Component) { } createClass(Option, [{ - key: 'blockEvent', - value: function blockEvent(event) { - event.preventDefault(); - event.stopPropagation(); - if (event.target.tagName !== 'A' || !('href' in event.target)) { - return; - } - if (event.target.target) { - window.open(event.target.href, event.target.target); - } else { - window.location.href = event.target.href; - } - } - }, { key: 'handleMouseDown', value: function handleMouseDown(event) { event.preventDefault(); @@ -439,13 +453,13 @@ var Option = function (_React$Component) { } }, { key: 'handleTouchMove', - value: function handleTouchMove(event) { + value: function handleTouchMove() { // Set a flag that the view is being dragged this.dragging = true; } }, { key: 'handleTouchStart', - value: function handleTouchStart(event) { + value: function handleTouchStart() { // Set a flag that the view is not being dragged this.dragging = false; } @@ -469,8 +483,8 @@ var Option = function (_React$Component) { return option.disabled ? React.createElement( 'div', { className: className, - onMouseDown: this.blockEvent, - onClick: this.blockEvent }, + onMouseDown: blockEvent, + onClick: blockEvent }, this.props.children ) : React.createElement( 'div', @@ -493,8 +507,6 @@ var Option = function (_React$Component) { return Option; }(React.Component); - - Option.propTypes = { children: PropTypes.node, className: PropTypes.string, // className (based on mouse position) @@ -559,13 +571,13 @@ var Value = function (_React$Component) { } }, { key: 'handleTouchMove', - value: function handleTouchMove(event) { + value: function handleTouchMove() { // Set a flag that the view is being dragged this.dragging = true; } }, { key: 'handleTouchStart', - value: function handleTouchStart(event) { + value: function handleTouchStart() { // Set a flag that the view is not being dragged this.dragging = false; } @@ -615,8 +627,6 @@ var Value = function (_React$Component) { return Value; }(React.Component); - - Value.propTypes = { children: PropTypes.node, disabled: PropTypes.bool, // disabled prop passed to ReactSelect @@ -626,10 +636,10 @@ Value.propTypes = { value: PropTypes.object.isRequired // the option object for this value }; -/*! - Copyright (c) 2017 Jed Watson. - Licensed under the MIT License (MIT), see - http://jedwatson.github.io/react-select +/*! + Copyright (c) 2017 Jed Watson. + Licensed under the MIT License (MIT), see + http://jedwatson.github.io/react-select */ var stringifyValue = function stringifyValue(value) { return typeof value === 'string' ? value : value !== null && JSON.stringify(value) || ''; @@ -666,6 +676,28 @@ var shouldShowPlaceholder = function shouldShowPlaceholder(state, props, isOpen) return !inputValue || !onSelectResetsInput && !isOpen && !isPseudoFocused && !isFocused; }; +/** + * Retrieve a value from the given options and valueKey + * @param {String|Number|Array} value - the selected value(s) + * @param {Object} props - the Select component's props (or nextProps) + */ +var expandValue = function expandValue(value, props) { + var valueType = typeof value === 'undefined' ? 'undefined' : _typeof(value); + if (valueType !== 'string' && valueType !== 'number' && valueType !== 'boolean') return value; + var options = props.options, + valueKey = props.valueKey; + + if (!options) return; + for (var i = 0; i < options.length; i++) { + if (String(options[i][valueKey]) === String(value)) return options[i]; + } +}; + +var handleRequired = function handleRequired(value, multi) { + if (!value) return true; + return multi ? value.length === 0 : Object.keys(value).length === 0; +}; + var Select$1 = function (_React$Component) { inherits(Select, _React$Component); @@ -674,7 +706,7 @@ var Select$1 = function (_React$Component) { var _this = possibleConstructorReturn(this, (Select.__proto__ || Object.getPrototypeOf(Select)).call(this, props)); - ['clearValue', 'focusOption', 'handleInputBlur', 'handleInputChange', 'handleInputFocus', 'handleInputValueChange', 'handleKeyDown', 'handleMenuScroll', 'handleMouseDown', 'handleMouseDownOnArrow', 'handleMouseDownOnMenu', 'handleRequired', 'handleTouchOutside', 'handleTouchMove', 'handleTouchStart', 'handleTouchEnd', 'handleTouchEndClearValue', 'handleValueClick', 'getOptionLabel', 'onOptionRef', 'removeValue', 'selectValue'].forEach(function (fn) { + ['clearValue', 'focusOption', 'getOptionLabel', 'handleInputBlur', 'handleInputChange', 'handleInputFocus', 'handleInputValueChange', 'handleKeyDown', 'handleMenuScroll', 'handleMouseDown', 'handleMouseDownOnArrow', 'handleMouseDownOnMenu', 'handleTouchEnd', 'handleTouchEndClearValue', 'handleTouchMove', 'handleTouchOutside', 'handleTouchStart', 'handleValueClick', 'onOptionRef', 'removeValue', 'selectValue'].forEach(function (fn) { return _this[fn] = _this[fn].bind(_this); }); @@ -696,7 +728,7 @@ var Select$1 = function (_React$Component) { if (this.props.required) { this.setState({ - required: this.handleRequired(valueArray[0], this.props.multi) + required: handleRequired(valueArray[0], this.props.multi) }); } } @@ -717,7 +749,7 @@ var Select$1 = function (_React$Component) { if (nextProps.required) { this.setState({ - required: this.handleRequired(valueArray[0], nextProps.multi) + required: handleRequired(valueArray[0], nextProps.multi) }); } else if (this.props.required) { // Used to be required but it's not any more @@ -825,13 +857,13 @@ var Select$1 = function (_React$Component) { } }, { key: 'handleTouchMove', - value: function handleTouchMove(event) { + value: function handleTouchMove() { // Set a flag that the view is being dragged this.dragging = true; } }, { key: 'handleTouchStart', - value: function handleTouchStart(event) { + value: function handleTouchStart() { // Set a flag that the view is not being dragged this.dragging = false; } @@ -883,7 +915,7 @@ var Select$1 = function (_React$Component) { // for the non-searchable select, toggle the menu if (!this.props.searchable) { - // TODO: This code means that if a select is searchable, onClick the options menu will not appear, only on subsequent click will it open. + // This code means that if a select is searchable, onClick the options menu will not appear, only on subsequent click will it open. this.focus(); return this.setState({ isOpen: !this.state.isOpen @@ -915,12 +947,14 @@ var Select$1 = function (_React$Component) { // if the input is focused, ensure the menu is open this.setState({ isOpen: toOpen, - isPseudoFocused: false + isPseudoFocused: false, + focusedOption: null }); } else { // otherwise, focus the input and open the menu this._openAfterFocus = this.props.openOnClick; this.focus(); + this.setState({ focusedOption: null }); } } }, { @@ -965,9 +999,9 @@ var Select$1 = function (_React$Component) { value: function closeMenu() { if (this.props.onCloseResetsInput) { this.setState({ + inputValue: this.handleInputValueChange(''), isOpen: false, - isPseudoFocused: this.state.isFocused && !this.props.multi, - inputValue: this.handleInputValueChange('') + isPseudoFocused: this.state.isFocused && !this.props.multi }); } else { this.setState({ @@ -991,11 +1025,11 @@ var Select$1 = function (_React$Component) { this.setState({ isFocused: true, - isOpen: toOpen + isOpen: !!toOpen }); - this._openAfterFocus = false; this._focusAfterClear = false; + this._openAfterFocus = false; } }, { key: 'handleInputBlur', @@ -1029,9 +1063,22 @@ var Select$1 = function (_React$Component) { } this.setState({ + inputValue: newInputValue, isOpen: true, - isPseudoFocused: false, - inputValue: newInputValue + isPseudoFocused: false + }); + } + }, { + key: 'setInputValue', + value: function setInputValue(newValue) { + if (this.props.onInputChange) { + var nextState = this.props.onInputChange(newValue); + if (nextState != null && (typeof nextState === 'undefined' ? 'undefined' : _typeof(nextState)) !== 'object') { + newValue = '' + nextState; + } + } + this.setState({ + inputValue: newValue }); } }, { @@ -1169,29 +1216,23 @@ var Select$1 = function (_React$Component) { this.props.onMenuScrollToBottom(); } } - }, { - key: 'handleRequired', - value: function handleRequired(value, multi) { - if (!value) return true; - return multi ? value.length === 0 : Object.keys(value).length === 0; - } }, { key: 'getOptionLabel', value: function getOptionLabel(op) { return op[this.props.labelKey]; } - /** - * Turns a value into an array from the given options - * @param {String|Number|Array} value - the value of the select input - * @param {Object} nextProps - optionally specify the nextProps so the returned array uses the latest configuration - * @returns {Array} the value of the select represented in an array + /** + * Turns a value into an array from the given options + * @param {String|Number|Array} value - the value of the select input + * @param {Object} nextProps - optionally specify the nextProps so the returned array uses the latest configuration + * @returns {Array} the value of the select represented in an array */ }, { key: 'getValueArray', - value: function getValueArray(value, nextProps) { - var _this2 = this; + value: function getValueArray(value) { + var nextProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; /** support optionally passing in the `nextProps` so `componentWillReceiveProps` updates will function as expected */ var props = (typeof nextProps === 'undefined' ? 'undefined' : _typeof(nextProps)) === 'object' ? nextProps : this.props; @@ -1204,59 +1245,39 @@ var Select$1 = function (_React$Component) { value = [value]; } return value.map(function (value) { - return _this2.expandValue(value, props); + return expandValue(value, props); }).filter(function (i) { return i; }); } - var expandedValue = this.expandValue(value, props); + var expandedValue = expandValue(value, props); return expandedValue ? [expandedValue] : []; } - - /** - * Retrieve a value from the given options and valueKey - * @param {String|Number|Array} value - the selected value(s) - * @param {Object} props - the Select component's props (or nextProps) - */ - - }, { - key: 'expandValue', - value: function expandValue(value, props) { - var valueType = typeof value === 'undefined' ? 'undefined' : _typeof(value); - if (valueType !== 'string' && valueType !== 'number' && valueType !== 'boolean') return value; - var options = props.options, - valueKey = props.valueKey; - - if (!options) return; - for (var i = 0; i < options.length; i++) { - if (String(options[i][valueKey]) === String(value)) return options[i]; - } - } }, { key: 'setValue', value: function setValue(value) { - var _this3 = this; + var _this2 = this; if (this.props.autoBlur) { this.blurInput(); } if (this.props.required) { - var required = this.handleRequired(value, this.props.multi); + var required = handleRequired(value, this.props.multi); this.setState({ required: required }); } + if (this.props.simpleValue && value) { + value = this.props.multi ? value.map(function (i) { + return i[_this2.props.valueKey]; + }).join(this.props.delimiter) : value[this.props.valueKey]; + } if (this.props.onChange) { - if (this.props.simpleValue && value) { - value = this.props.multi ? value.map(function (i) { - return i[_this3.props.valueKey]; - }).join(this.props.delimiter) : value[this.props.valueKey]; - } this.props.onChange(value); } } }, { key: 'selectValue', value: function selectValue(value) { - var _this4 = this; + var _this3 = this; // NOTE: we actually add/set the value in a callback to make sure the // input value is empty to avoid styling issues in Chrome @@ -1270,13 +1291,13 @@ var Select$1 = function (_React$Component) { inputValue: this.handleInputValueChange(updatedValue), isOpen: !this.props.closeOnSelect }, function () { - var valueArray = _this4.getValueArray(_this4.props.value); + var valueArray = _this3.getValueArray(_this3.props.value); if (valueArray.some(function (i) { - return i[_this4.props.valueKey] === value[_this4.props.valueKey]; + return i[_this3.props.valueKey] === value[_this3.props.valueKey]; })) { - _this4.removeValue(value); + _this3.removeValue(value); } else { - _this4.addValue(value); + _this3.addValue(value); } }); } else { @@ -1285,7 +1306,7 @@ var Select$1 = function (_React$Component) { isOpen: !this.props.closeOnSelect, isPseudoFocused: this.state.isFocused }, function () { - _this4.setValue(value); + _this3.setValue(value); }); } } @@ -1317,11 +1338,11 @@ var Select$1 = function (_React$Component) { }, { key: 'removeValue', value: function removeValue(value) { - var _this5 = this; + var _this4 = this; var valueArray = this.getValueArray(this.props.value); this.setValue(valueArray.filter(function (i) { - return i[_this5.props.valueKey] !== value[_this5.props.valueKey]; + return i[_this4.props.valueKey] !== value[_this4.props.valueKey]; })); this.focus(); } @@ -1338,8 +1359,8 @@ var Select$1 = function (_React$Component) { this.setValue(this.getResetValue()); this.setState({ - isOpen: false, - inputValue: this.handleInputValueChange('') + inputValue: this.handleInputValueChange(''), + isOpen: false }, this.focus); this._focusAfterClear = true; @@ -1402,11 +1423,14 @@ var Select$1 = function (_React$Component) { }); this._scrollToFocusedOptionOnUpdate = true; if (!this.state.isOpen) { - this.setState({ - isOpen: true, - inputValue: '', - focusedOption: this._focusedOption || (options.length ? options[dir === 'next' ? 0 : options.length - 1].option : null) - }); + var newState = { + focusedOption: this._focusedOption || (options.length ? options[dir === 'next' ? 0 : options.length - 1].option : null), + isOpen: true + }; + if (this.props.onSelectResetsInput) { + newState.inputValue = ''; + } + this.setState(newState); return; } if (!options.length) return; @@ -1437,11 +1461,11 @@ var Select$1 = function (_React$Component) { focusedIndex = potentialIndex; } } else if (dir === 'page_down') { - var potentialIndex = focusedIndex + this.props.pageSize; - if (potentialIndex > options.length - 1) { + var _potentialIndex = focusedIndex + this.props.pageSize; + if (_potentialIndex > options.length - 1) { focusedIndex = options.length - 1; } else { - focusedIndex = potentialIndex; + focusedIndex = _potentialIndex; } } @@ -1479,7 +1503,7 @@ var Select$1 = function (_React$Component) { }, { key: 'renderValue', value: function renderValue(valueArray, isOpen) { - var _this6 = this; + var _this5 = this; var renderLabel = this.props.valueRenderer || this.getOptionLabel; var ValueComponent = this.props.valueComponent; @@ -1497,14 +1521,14 @@ var Select$1 = function (_React$Component) { return React.createElement( ValueComponent, { - id: _this6._instancePrefix + '-value-' + i, - instancePrefix: _this6._instancePrefix, - disabled: _this6.props.disabled || value.clearableValue === false, - key: 'value-' + i + '-' + value[_this6.props.valueKey], + disabled: _this5.props.disabled || value.clearableValue === false, + id: _this5._instancePrefix + '-value-' + i, + instancePrefix: _this5._instancePrefix, + key: 'value-' + i + '-' + value[_this5.props.valueKey], onClick: onClick, - onRemove: _this6.removeValue, - value: value, - placeholder: _this6.props.placeholder + onRemove: _this5.removeValue, + placeholder: _this5.props.placeholder, + value: value }, renderLabel(value, i), React.createElement( @@ -1519,12 +1543,12 @@ var Select$1 = function (_React$Component) { return React.createElement( ValueComponent, { - id: this._instancePrefix + '-value-item', disabled: this.props.disabled, + id: this._instancePrefix + '-value-item', instancePrefix: this._instancePrefix, onClick: onClick, - value: valueArray[0], - placeholder: this.props.placeholder + placeholder: this.props.placeholder, + value: valueArray[0] }, renderLabel(valueArray[0]) ); @@ -1534,10 +1558,10 @@ var Select$1 = function (_React$Component) { key: 'renderInput', value: function renderInput(valueArray, focusedOptionIndex) { var _classNames, - _this7 = this; + _this6 = this; var className = classNames('Select-input', this.props.inputProps.className); - var isOpen = !!this.state.isOpen; + var isOpen = this.state.isOpen; var ariaOwns = classNames((_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)); @@ -1548,23 +1572,23 @@ var Select$1 = function (_React$Component) { } 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-describedby': this.props['aria-describedby'], - 'aria-labelledby': this.props['aria-labelledby'], + 'aria-expanded': '' + isOpen, + 'aria-haspopup': '' + isOpen, 'aria-label': this.props['aria-label'], + 'aria-labelledby': this.props['aria-labelledby'], + 'aria-owns': ariaOwns, className: className, - tabIndex: this.props.tabIndex, onBlur: this.handleInputBlur, onChange: this.handleInputChange, onFocus: this.handleInputFocus, ref: function ref(_ref) { - return _this7.input = _ref; + return _this6.input = _ref; }, + role: 'combobox', required: this.state.required, + tabIndex: this.props.tabIndex, value: value }); @@ -1573,28 +1597,27 @@ var Select$1 = function (_React$Component) { } if (this.props.disabled || !this.props.searchable) { - var _props$inputProps = this.props.inputProps, - inputClassName = _props$inputProps.inputClassName, - divProps = objectWithoutProperties(_props$inputProps, ['inputClassName']); + var divProps = objectWithoutProperties(this.props.inputProps, []); var _ariaOwns = classNames(defineProperty({}, this._instancePrefix + '-list', isOpen)); return React.createElement('div', _extends({}, divProps, { - role: 'combobox', 'aria-expanded': isOpen, 'aria-owns': _ariaOwns, 'aria-activedescendant': isOpen ? this._instancePrefix + '-option-' + focusedOptionIndex : this._instancePrefix + '-value', - 'aria-labelledby': this.props['aria-labelledby'], + 'aria-disabled': '' + this.props.disabled, 'aria-label': this.props['aria-label'], + 'aria-labelledby': this.props['aria-labelledby'], className: className, - tabIndex: this.props.tabIndex || 0, onBlur: this.handleInputBlur, onFocus: this.handleInputFocus, ref: function ref(_ref2) { - return _this7.input = _ref2; + return _this6.input = _ref2; }, - 'aria-disabled': '' + !!this.props.disabled, - style: { border: 0, width: 1, display: 'inline-block' } })); + role: 'combobox', + style: { border: 0, width: 1, display: 'inline-block' }, + tabIndex: this.props.tabIndex || 0 + })); } if (this.props.autosize) { @@ -1611,16 +1634,19 @@ var Select$1 = function (_React$Component) { value: function renderClear() { var valueArray = this.getValueArray(this.props.value); if (!this.props.clearable || !valueArray.length || this.props.disabled || this.props.isLoading) return; + var ariaLabel = this.props.multi ? this.props.clearAllText : this.props.clearValueText; var clear = this.props.clearRenderer(); return React.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, + { + 'aria-label': ariaLabel, + className: 'Select-clear-zone', onMouseDown: this.clearValue, - onTouchStart: this.handleTouchStart, + onTouchEnd: this.handleTouchEndClearValue, onTouchMove: this.handleTouchMove, - onTouchEnd: this.handleTouchEndClearValue + onTouchStart: this.handleTouchStart, + title: ariaLabel }, clear ); @@ -1663,8 +1689,8 @@ var Select$1 = function (_React$Component) { labelKey: this.props.labelKey, matchPos: this.props.matchPos, matchProp: this.props.matchProp, - valueKey: this.props.valueKey, - trimFilter: this.props.trimFilter + trimFilter: this.props.trimFilter, + valueKey: this.props.valueKey }); } else { return options; @@ -1688,16 +1714,16 @@ var Select$1 = function (_React$Component) { instancePrefix: this._instancePrefix, labelKey: this.props.labelKey, onFocus: this.focusOption, + onOptionRef: this.onOptionRef, onSelect: this.selectValue, optionClassName: this.props.optionClassName, optionComponent: this.props.optionComponent, optionRenderer: this.props.optionRenderer || this.getOptionLabel, options: options, - selectValue: this.selectValue, removeValue: this.removeValue, + selectValue: this.selectValue, valueArray: valueArray, - valueKey: this.props.valueKey, - onOptionRef: this.onOptionRef + valueKey: this.props.valueKey }); } else if (this.props.noResultsText) { return React.createElement( @@ -1712,29 +1738,32 @@ var Select$1 = function (_React$Component) { }, { key: 'renderHiddenField', value: function renderHiddenField(valueArray) { - var _this8 = this; + var _this7 = this; if (!this.props.name) return; if (this.props.joinValues) { var value = valueArray.map(function (i) { - return stringifyValue(i[_this8.props.valueKey]); + return stringifyValue(i[_this7.props.valueKey]); }).join(this.props.delimiter); return React.createElement('input', { - type: 'hidden', + disabled: this.props.disabled, + name: this.props.name, ref: function ref(_ref3) { - return _this8.value = _ref3; + return _this7.value = _ref3; }, - name: this.props.name, - value: value, - disabled: this.props.disabled }); + type: 'hidden', + value: value + }); } return valueArray.map(function (item, index) { - return React.createElement('input', { key: 'hidden.' + index, - type: 'hidden', + return React.createElement('input', { + disabled: _this7.props.disabled, + key: 'hidden.' + index, + name: _this7.props.name, ref: 'value' + index, - name: _this8.props.name, - value: stringifyValue(item[_this8.props.valueKey]), - disabled: _this8.props.disabled }); + type: 'hidden', + value: stringifyValue(item[_this7.props.valueKey]) + }); }); } }, { @@ -1767,7 +1796,7 @@ var Select$1 = function (_React$Component) { }, { key: 'renderOuter', value: function renderOuter(options, valueArray, focusedOption) { - var _this9 = this; + var _this8 = this; var menu = this.renderMenu(options, valueArray, focusedOption); if (!menu) { @@ -1777,16 +1806,22 @@ var Select$1 = function (_React$Component) { return React.createElement( 'div', { ref: function ref(_ref5) { - return _this9.menuContainer = _ref5; + return _this8.menuContainer = _ref5; }, className: 'Select-menu-outer', style: this.props.menuContainerStyle }, React.createElement( 'div', - { ref: function ref(_ref4) { - return _this9.menu = _ref4; - }, role: 'listbox', tabIndex: -1, className: 'Select-menu', id: this._instancePrefix + '-list', - style: this.props.menuStyle, + { + className: 'Select-menu', + id: this._instancePrefix + '-list', + onMouseDown: this.handleMouseDownOnMenu, onScroll: this.handleMenuScroll, - onMouseDown: this.handleMouseDownOnMenu }, + ref: function ref(_ref4) { + return _this8.menu = _ref4; + }, + role: 'listbox', + style: this.props.menuStyle, + tabIndex: -1 + }, menu ) ); @@ -1794,7 +1829,7 @@ var Select$1 = function (_React$Component) { }, { key: 'render', value: function render() { - var _this10 = this; + var _this9 = this; var valueArray = this.getValueArray(this.props.value); var options = this._visibleOptions = this.filterOptions(this.props.multi && this.props.removeSelected ? valueArray : null); @@ -1809,8 +1844,7 @@ var Select$1 = function (_React$Component) { focusedOption = this._focusedOption = null; } var className = classNames('Select', this.props.className, { - 'Select--multi': this.props.multi, - 'Select--single': !this.props.multi, + 'has-value': valueArray.length, 'is-clearable': this.props.clearable, 'is-disabled': this.props.disabled, 'is-focused': this.state.isFocused, @@ -1818,8 +1852,9 @@ var Select$1 = function (_React$Component) { 'is-open': isOpen, 'is-pseudo-focused': this.state.isPseudoFocused, 'is-searchable': this.props.searchable, - 'has-value': valueArray.length, - 'Select--rtl': this.props.rtl + 'Select--multi': this.props.multi, + 'Select--rtl': this.props.rtl, + 'Select--single': !this.props.multi }); var removeMessage = null; @@ -1834,7 +1869,7 @@ var Select$1 = function (_React$Component) { return React.createElement( 'div', { ref: function ref(_ref7) { - return _this10.wrapper = _ref7; + return _this9.wrapper = _ref7; }, className: className, style: this.props.wrapperStyle }, @@ -1842,15 +1877,15 @@ var Select$1 = function (_React$Component) { React.createElement( 'div', { ref: function ref(_ref6) { - return _this10.control = _ref6; + return _this9.control = _ref6; }, className: 'Select-control', - style: this.props.style, onKeyDown: this.handleKeyDown, onMouseDown: this.handleMouseDown, onTouchEnd: this.handleTouchEnd, + onTouchMove: this.handleTouchMove, onTouchStart: this.handleTouchStart, - onTouchMove: this.handleTouchMove + style: this.props.style }, React.createElement( 'span', @@ -1870,8 +1905,6 @@ var Select$1 = function (_React$Component) { return Select; }(React.Component); - - Select$1.propTypes = { 'aria-describedby': PropTypes.string, // html id(s) of element(s) that should be used to describe this input (for assistive tech) 'aria-label': PropTypes.string, // aria label (for assistive tech) @@ -1979,8 +2012,8 @@ Select$1.defaultProps = { multi: false, noResultsText: 'No results found', onBlurResetsInput: true, - onSelectResetsInput: true, onCloseResetsInput: true, + onSelectResetsInput: true, openOnClick: true, optionComponent: Option, pageSize: 5, @@ -2021,6 +2054,10 @@ var propTypes = { var defaultCache = {}; +var defaultChildren = function defaultChildren(props) { + return React.createElement(Select$1, props); +}; + var defaultProps = { autoload: true, cache: defaultCache, @@ -2198,8 +2235,6 @@ var Async = function (_Component) { var _props3 = this.props, children = _props3.children, loadingPlaceholder = _props3.loadingPlaceholder, - multi = _props3.multi, - onChange = _props3.onChange, placeholder = _props3.placeholder; var _state2 = this.state, isLoading = _state2.isLoading, @@ -2227,10 +2262,6 @@ var Async = function (_Component) { Async.propTypes = propTypes; Async.defaultProps = defaultProps; -function defaultChildren(props) { - return React.createElement(Select$1, props); -} - var CreatableSelect = function (_React$Component) { inherits(CreatableSelect, _React$Component); @@ -2385,7 +2416,7 @@ var CreatableSelect = function (_React$Component) { } }, { key: 'onOptionSelect', - value: function onOptionSelect(option, event) { + value: function onOptionSelect(option) { if (option === this._createPlaceholderOption) { this.createNewOption(); } else { @@ -2403,10 +2434,8 @@ var CreatableSelect = function (_React$Component) { var _this2 = this; var _props4 = this.props, - newOptionCreator = _props4.newOptionCreator, - shouldKeyDownEventCreateNewOption = _props4.shouldKeyDownEventCreateNewOption, refProp = _props4.ref, - restProps = objectWithoutProperties(_props4, ['newOptionCreator', 'shouldKeyDownEventCreateNewOption', 'ref']); + restProps = objectWithoutProperties(_props4, ['ref']); var children = this.props.children; // We can't use destructuring default values to set the children, @@ -2443,13 +2472,11 @@ var CreatableSelect = function (_React$Component) { return CreatableSelect; }(React.Component); - - -function defaultChildren$2(props) { +var defaultChildren$2 = function defaultChildren(props) { return React.createElement(Select$1, props); -} +}; -function isOptionUnique(_ref3) { +var isOptionUnique = function isOptionUnique(_ref3) { var option = _ref3.option, options = _ref3.options, labelKey = _ref3.labelKey, @@ -2462,15 +2489,14 @@ function isOptionUnique(_ref3) { return options.filter(function (existingOption) { return existingOption[labelKey] === option[labelKey] || existingOption[valueKey] === option[valueKey]; }).length === 0; -} +}; -function isValidNewOption(_ref4) { +var isValidNewOption = function isValidNewOption(_ref4) { var label = _ref4.label; - return !!label; -} +}; -function newOptionCreator(_ref5) { +var newOptionCreator = function newOptionCreator(_ref5) { var label = _ref5.label, labelKey = _ref5.labelKey, valueKey = _ref5.valueKey; @@ -2479,14 +2505,15 @@ function newOptionCreator(_ref5) { option[valueKey] = label; option[labelKey] = label; option.className = 'Select-create-option-placeholder'; + return option; -} +}; -function promptTextCreator(label) { +var promptTextCreator = function promptTextCreator(label) { return 'Create option "' + label + '"'; -} +}; -function shouldKeyDownEventCreateNewOption(_ref6) { +var shouldKeyDownEventCreateNewOption = function shouldKeyDownEventCreateNewOption(_ref6) { var keyCode = _ref6.keyCode; switch (keyCode) { @@ -2498,7 +2525,7 @@ function shouldKeyDownEventCreateNewOption(_ref6) { default: return false; } -} +}; // Default prop methods CreatableSelect.isOptionUnique = isOptionUnique; @@ -2614,11 +2641,9 @@ var AsyncCreatableSelect = function (_React$Component) { return AsyncCreatableSelect; }(React.Component); - - -function defaultChildren$1(props) { +var defaultChildren$1 = function defaultChildren(props) { return React.createElement(Select$1, props); -} +}; AsyncCreatableSelect.propTypes = { children: PropTypes.func.isRequired // Child function responsible for creating the inner Select component; (props: Object): PropTypes.element diff --git a/dist/react-select.js b/dist/react-select.js index 2bc1cf705a..523e280887 100644 --- a/dist/react-select.js +++ b/dist/react-select.js @@ -1,47 +1,52 @@ (function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('react'), require('prop-types'), require('react-dom'), require('react-input-autosize'), require('classnames')) : - typeof define === 'function' && define.amd ? define(['react', 'prop-types', 'react-dom', 'react-input-autosize', 'classnames'], factory) : - (global.Select = factory(global.React,global.PropTypes,global.ReactDOM,global.AutosizeInput,global.classNames)); -}(this, (function (React,PropTypes,reactDom,AutosizeInput,classNames) { 'use strict'; + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('react-input-autosize'), require('classnames'), require('prop-types'), require('react'), require('react-dom')) : + typeof define === 'function' && define.amd ? define(['react-input-autosize', 'classnames', 'prop-types', 'react', 'react-dom'], factory) : + (global.Select = factory(global.AutosizeInput,global.classNames,global.PropTypes,global.React,global.ReactDOM)); +}(this, (function (AutosizeInput,classNames,PropTypes,React,reactDom) { 'use strict'; -var React__default = 'default' in React ? React['default'] : React; -PropTypes = PropTypes && PropTypes.hasOwnProperty('default') ? PropTypes['default'] : PropTypes; AutosizeInput = AutosizeInput && AutosizeInput.hasOwnProperty('default') ? AutosizeInput['default'] : AutosizeInput; classNames = classNames && classNames.hasOwnProperty('default') ? classNames['default'] : classNames; +PropTypes = PropTypes && PropTypes.hasOwnProperty('default') ? PropTypes['default'] : PropTypes; +var React__default = 'default' in React ? React['default'] : React; -function arrowRenderer(_ref) { +var arrowRenderer = function arrowRenderer(_ref) { var onMouseDown = _ref.onMouseDown; return React__default.createElement('span', { className: 'Select-arrow', onMouseDown: onMouseDown }); -} +}; arrowRenderer.propTypes = { onMouseDown: PropTypes.func }; +var clearRenderer = function clearRenderer() { + return React__default.createElement('span', { + className: 'Select-clear', + dangerouslySetInnerHTML: { __html: '×' } + }); +}; + var map = [{ '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 }]; -function stripDiacritics(str) { +var stripDiacritics = function stripDiacritics(str) { for (var i = 0; i < map.length; i++) { str = str.replace(map[i].letters, map[i].base); } return str; -} +}; -function trim(str) { - return str.replace(/^\s+|\s+$/g, ''); -} +var trim = function trim(str) { + return str.replace(/^\s+|\s+$/g, ''); +}; -function isValid(value) { +var isValid = function isValid(value) { return typeof value !== 'undefined' && value !== null && value !== ''; -} - -function filterOptions(options, filterValue, excludeOptions, props) { - var _this = this; +}; +var filterOptions = function filterOptions(options, filterValue, excludeOptions, props) { if (props.ignoreAccents) { filterValue = stripDiacritics(filterValue); } @@ -60,7 +65,7 @@ function filterOptions(options, filterValue, excludeOptions, props) { return options.filter(function (option) { if (excludeOptions && excludeOptions.indexOf(option[props.valueKey]) > -1) return false; - if (props.filterOption) return props.filterOption.call(_this, option, filterValue); + if (props.filterOption) return props.filterOption.call(undefined, option, filterValue); if (!filterValue) return true; var value = option[props.valueKey]; @@ -87,14 +92,13 @@ function filterOptions(options, filterValue, excludeOptions, props) { return props.matchPos === 'start' ? valueTest && props.matchProp !== 'label' && valueTest.substr(0, filterValue.length) === filterValue || labelTest && props.matchProp !== 'value' && labelTest.substr(0, filterValue.length) === filterValue : valueTest && props.matchProp !== 'label' && valueTest.indexOf(filterValue) >= 0 || labelTest && props.matchProp !== 'value' && labelTest.indexOf(filterValue) >= 0; }); -} +}; -function menuRenderer(_ref) { +var menuRenderer = function menuRenderer(_ref) { var focusedOption = _ref.focusedOption, focusOption = _ref.focusOption, inputValue = _ref.inputValue, instancePrefix = _ref.instancePrefix, - labelKey = _ref.labelKey, onFocus = _ref.onFocus, onOptionRef = _ref.onOptionRef, onSelect = _ref.onSelect, @@ -111,7 +115,7 @@ function menuRenderer(_ref) { return options.map(function (option, i) { var isSelected = valueArray && valueArray.some(function (x) { - return x[valueKey] == option[valueKey]; + return x[valueKey] === option[valueKey]; }); var isFocused = option === focusedOption; var optionClass = classNames(optionClassName, { @@ -145,14 +149,38 @@ function menuRenderer(_ref) { optionRenderer(option, i, inputValue) ); }); -} +}; -function clearRenderer() { - return React__default.createElement('span', { - className: 'Select-clear', - dangerouslySetInnerHTML: { __html: '×' } - }); -} +menuRenderer.propTypes = { + focusOption: PropTypes.func, + focusedOption: PropTypes.object, + inputValue: PropTypes.string, + instancePrefix: PropTypes.string, + onFocus: PropTypes.func, + onOptionRef: PropTypes.func, + onSelect: PropTypes.func, + optionClassName: PropTypes.string, + optionComponent: PropTypes.func, + optionRenderer: PropTypes.func, + options: PropTypes.array, + removeValue: PropTypes.func, + selectValue: PropTypes.func, + valueArray: PropTypes.array, + valueKey: PropTypes.string +}; + +var blockEvent = (function (event) { + event.preventDefault(); + event.stopPropagation(); + if (event.target.tagName !== 'A' || !('href' in event.target)) { + return; + } + if (event.target.target) { + window.open(event.target.href, event.target.target); + } else { + window.location.href = event.target.href; + } +}); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; @@ -403,20 +431,6 @@ var Option = function (_React$Component) { } createClass(Option, [{ - key: 'blockEvent', - value: function blockEvent(event) { - event.preventDefault(); - event.stopPropagation(); - if (event.target.tagName !== 'A' || !('href' in event.target)) { - return; - } - if (event.target.target) { - window.open(event.target.href, event.target.target); - } else { - window.location.href = event.target.href; - } - } - }, { key: 'handleMouseDown', value: function handleMouseDown(event) { event.preventDefault(); @@ -444,13 +458,13 @@ var Option = function (_React$Component) { } }, { key: 'handleTouchMove', - value: function handleTouchMove(event) { + value: function handleTouchMove() { // Set a flag that the view is being dragged this.dragging = true; } }, { key: 'handleTouchStart', - value: function handleTouchStart(event) { + value: function handleTouchStart() { // Set a flag that the view is not being dragged this.dragging = false; } @@ -474,8 +488,8 @@ var Option = function (_React$Component) { return option.disabled ? React__default.createElement( 'div', { className: className, - onMouseDown: this.blockEvent, - onClick: this.blockEvent }, + onMouseDown: blockEvent, + onClick: blockEvent }, this.props.children ) : React__default.createElement( 'div', @@ -498,8 +512,6 @@ var Option = function (_React$Component) { return Option; }(React__default.Component); - - Option.propTypes = { children: PropTypes.node, className: PropTypes.string, // className (based on mouse position) @@ -564,13 +576,13 @@ var Value = function (_React$Component) { } }, { key: 'handleTouchMove', - value: function handleTouchMove(event) { + value: function handleTouchMove() { // Set a flag that the view is being dragged this.dragging = true; } }, { key: 'handleTouchStart', - value: function handleTouchStart(event) { + value: function handleTouchStart() { // Set a flag that the view is not being dragged this.dragging = false; } @@ -620,8 +632,6 @@ var Value = function (_React$Component) { return Value; }(React__default.Component); - - Value.propTypes = { children: PropTypes.node, disabled: PropTypes.bool, // disabled prop passed to ReactSelect @@ -631,10 +641,10 @@ Value.propTypes = { value: PropTypes.object.isRequired // the option object for this value }; -/*! - Copyright (c) 2017 Jed Watson. - Licensed under the MIT License (MIT), see - http://jedwatson.github.io/react-select +/*! + Copyright (c) 2017 Jed Watson. + Licensed under the MIT License (MIT), see + http://jedwatson.github.io/react-select */ var stringifyValue = function stringifyValue(value) { return typeof value === 'string' ? value : value !== null && JSON.stringify(value) || ''; @@ -671,6 +681,28 @@ var shouldShowPlaceholder = function shouldShowPlaceholder(state, props, isOpen) return !inputValue || !onSelectResetsInput && !isOpen && !isPseudoFocused && !isFocused; }; +/** + * Retrieve a value from the given options and valueKey + * @param {String|Number|Array} value - the selected value(s) + * @param {Object} props - the Select component's props (or nextProps) + */ +var expandValue = function expandValue(value, props) { + var valueType = typeof value === 'undefined' ? 'undefined' : _typeof(value); + if (valueType !== 'string' && valueType !== 'number' && valueType !== 'boolean') return value; + var options = props.options, + valueKey = props.valueKey; + + if (!options) return; + for (var i = 0; i < options.length; i++) { + if (String(options[i][valueKey]) === String(value)) return options[i]; + } +}; + +var handleRequired = function handleRequired(value, multi) { + if (!value) return true; + return multi ? value.length === 0 : Object.keys(value).length === 0; +}; + var Select$1 = function (_React$Component) { inherits(Select, _React$Component); @@ -679,7 +711,7 @@ var Select$1 = function (_React$Component) { var _this = possibleConstructorReturn(this, (Select.__proto__ || Object.getPrototypeOf(Select)).call(this, props)); - ['clearValue', 'focusOption', 'handleInputBlur', 'handleInputChange', 'handleInputFocus', 'handleInputValueChange', 'handleKeyDown', 'handleMenuScroll', 'handleMouseDown', 'handleMouseDownOnArrow', 'handleMouseDownOnMenu', 'handleRequired', 'handleTouchOutside', 'handleTouchMove', 'handleTouchStart', 'handleTouchEnd', 'handleTouchEndClearValue', 'handleValueClick', 'getOptionLabel', 'onOptionRef', 'removeValue', 'selectValue'].forEach(function (fn) { + ['clearValue', 'focusOption', 'getOptionLabel', 'handleInputBlur', 'handleInputChange', 'handleInputFocus', 'handleInputValueChange', 'handleKeyDown', 'handleMenuScroll', 'handleMouseDown', 'handleMouseDownOnArrow', 'handleMouseDownOnMenu', 'handleTouchEnd', 'handleTouchEndClearValue', 'handleTouchMove', 'handleTouchOutside', 'handleTouchStart', 'handleValueClick', 'onOptionRef', 'removeValue', 'selectValue'].forEach(function (fn) { return _this[fn] = _this[fn].bind(_this); }); @@ -701,7 +733,7 @@ var Select$1 = function (_React$Component) { if (this.props.required) { this.setState({ - required: this.handleRequired(valueArray[0], this.props.multi) + required: handleRequired(valueArray[0], this.props.multi) }); } } @@ -722,7 +754,7 @@ var Select$1 = function (_React$Component) { if (nextProps.required) { this.setState({ - required: this.handleRequired(valueArray[0], nextProps.multi) + required: handleRequired(valueArray[0], nextProps.multi) }); } else if (this.props.required) { // Used to be required but it's not any more @@ -830,13 +862,13 @@ var Select$1 = function (_React$Component) { } }, { key: 'handleTouchMove', - value: function handleTouchMove(event) { + value: function handleTouchMove() { // Set a flag that the view is being dragged this.dragging = true; } }, { key: 'handleTouchStart', - value: function handleTouchStart(event) { + value: function handleTouchStart() { // Set a flag that the view is not being dragged this.dragging = false; } @@ -888,7 +920,7 @@ var Select$1 = function (_React$Component) { // for the non-searchable select, toggle the menu if (!this.props.searchable) { - // TODO: This code means that if a select is searchable, onClick the options menu will not appear, only on subsequent click will it open. + // This code means that if a select is searchable, onClick the options menu will not appear, only on subsequent click will it open. this.focus(); return this.setState({ isOpen: !this.state.isOpen @@ -920,12 +952,14 @@ var Select$1 = function (_React$Component) { // if the input is focused, ensure the menu is open this.setState({ isOpen: toOpen, - isPseudoFocused: false + isPseudoFocused: false, + focusedOption: null }); } else { // otherwise, focus the input and open the menu this._openAfterFocus = this.props.openOnClick; this.focus(); + this.setState({ focusedOption: null }); } } }, { @@ -970,9 +1004,9 @@ var Select$1 = function (_React$Component) { value: function closeMenu() { if (this.props.onCloseResetsInput) { this.setState({ + inputValue: this.handleInputValueChange(''), isOpen: false, - isPseudoFocused: this.state.isFocused && !this.props.multi, - inputValue: this.handleInputValueChange('') + isPseudoFocused: this.state.isFocused && !this.props.multi }); } else { this.setState({ @@ -996,11 +1030,11 @@ var Select$1 = function (_React$Component) { this.setState({ isFocused: true, - isOpen: toOpen + isOpen: !!toOpen }); - this._openAfterFocus = false; this._focusAfterClear = false; + this._openAfterFocus = false; } }, { key: 'handleInputBlur', @@ -1034,9 +1068,22 @@ var Select$1 = function (_React$Component) { } this.setState({ + inputValue: newInputValue, isOpen: true, - isPseudoFocused: false, - inputValue: newInputValue + isPseudoFocused: false + }); + } + }, { + key: 'setInputValue', + value: function setInputValue(newValue) { + if (this.props.onInputChange) { + var nextState = this.props.onInputChange(newValue); + if (nextState != null && (typeof nextState === 'undefined' ? 'undefined' : _typeof(nextState)) !== 'object') { + newValue = '' + nextState; + } + } + this.setState({ + inputValue: newValue }); } }, { @@ -1174,29 +1221,23 @@ var Select$1 = function (_React$Component) { this.props.onMenuScrollToBottom(); } } - }, { - key: 'handleRequired', - value: function handleRequired(value, multi) { - if (!value) return true; - return multi ? value.length === 0 : Object.keys(value).length === 0; - } }, { key: 'getOptionLabel', value: function getOptionLabel(op) { return op[this.props.labelKey]; } - /** - * Turns a value into an array from the given options - * @param {String|Number|Array} value - the value of the select input - * @param {Object} nextProps - optionally specify the nextProps so the returned array uses the latest configuration - * @returns {Array} the value of the select represented in an array + /** + * Turns a value into an array from the given options + * @param {String|Number|Array} value - the value of the select input + * @param {Object} nextProps - optionally specify the nextProps so the returned array uses the latest configuration + * @returns {Array} the value of the select represented in an array */ }, { key: 'getValueArray', - value: function getValueArray(value, nextProps) { - var _this2 = this; + value: function getValueArray(value) { + var nextProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; /** support optionally passing in the `nextProps` so `componentWillReceiveProps` updates will function as expected */ var props = (typeof nextProps === 'undefined' ? 'undefined' : _typeof(nextProps)) === 'object' ? nextProps : this.props; @@ -1209,59 +1250,39 @@ var Select$1 = function (_React$Component) { value = [value]; } return value.map(function (value) { - return _this2.expandValue(value, props); + return expandValue(value, props); }).filter(function (i) { return i; }); } - var expandedValue = this.expandValue(value, props); + var expandedValue = expandValue(value, props); return expandedValue ? [expandedValue] : []; } - - /** - * Retrieve a value from the given options and valueKey - * @param {String|Number|Array} value - the selected value(s) - * @param {Object} props - the Select component's props (or nextProps) - */ - - }, { - key: 'expandValue', - value: function expandValue(value, props) { - var valueType = typeof value === 'undefined' ? 'undefined' : _typeof(value); - if (valueType !== 'string' && valueType !== 'number' && valueType !== 'boolean') return value; - var options = props.options, - valueKey = props.valueKey; - - if (!options) return; - for (var i = 0; i < options.length; i++) { - if (String(options[i][valueKey]) === String(value)) return options[i]; - } - } }, { key: 'setValue', value: function setValue(value) { - var _this3 = this; + var _this2 = this; if (this.props.autoBlur) { this.blurInput(); } if (this.props.required) { - var required = this.handleRequired(value, this.props.multi); + var required = handleRequired(value, this.props.multi); this.setState({ required: required }); } + if (this.props.simpleValue && value) { + value = this.props.multi ? value.map(function (i) { + return i[_this2.props.valueKey]; + }).join(this.props.delimiter) : value[this.props.valueKey]; + } if (this.props.onChange) { - if (this.props.simpleValue && value) { - value = this.props.multi ? value.map(function (i) { - return i[_this3.props.valueKey]; - }).join(this.props.delimiter) : value[this.props.valueKey]; - } this.props.onChange(value); } } }, { key: 'selectValue', value: function selectValue(value) { - var _this4 = this; + var _this3 = this; // NOTE: we actually add/set the value in a callback to make sure the // input value is empty to avoid styling issues in Chrome @@ -1275,13 +1296,13 @@ var Select$1 = function (_React$Component) { inputValue: this.handleInputValueChange(updatedValue), isOpen: !this.props.closeOnSelect }, function () { - var valueArray = _this4.getValueArray(_this4.props.value); + var valueArray = _this3.getValueArray(_this3.props.value); if (valueArray.some(function (i) { - return i[_this4.props.valueKey] === value[_this4.props.valueKey]; + return i[_this3.props.valueKey] === value[_this3.props.valueKey]; })) { - _this4.removeValue(value); + _this3.removeValue(value); } else { - _this4.addValue(value); + _this3.addValue(value); } }); } else { @@ -1290,7 +1311,7 @@ var Select$1 = function (_React$Component) { isOpen: !this.props.closeOnSelect, isPseudoFocused: this.state.isFocused }, function () { - _this4.setValue(value); + _this3.setValue(value); }); } } @@ -1322,11 +1343,11 @@ var Select$1 = function (_React$Component) { }, { key: 'removeValue', value: function removeValue(value) { - var _this5 = this; + var _this4 = this; var valueArray = this.getValueArray(this.props.value); this.setValue(valueArray.filter(function (i) { - return i[_this5.props.valueKey] !== value[_this5.props.valueKey]; + return i[_this4.props.valueKey] !== value[_this4.props.valueKey]; })); this.focus(); } @@ -1343,8 +1364,8 @@ var Select$1 = function (_React$Component) { this.setValue(this.getResetValue()); this.setState({ - isOpen: false, - inputValue: this.handleInputValueChange('') + inputValue: this.handleInputValueChange(''), + isOpen: false }, this.focus); this._focusAfterClear = true; @@ -1407,11 +1428,14 @@ var Select$1 = function (_React$Component) { }); this._scrollToFocusedOptionOnUpdate = true; if (!this.state.isOpen) { - this.setState({ - isOpen: true, - inputValue: '', - focusedOption: this._focusedOption || (options.length ? options[dir === 'next' ? 0 : options.length - 1].option : null) - }); + var newState = { + focusedOption: this._focusedOption || (options.length ? options[dir === 'next' ? 0 : options.length - 1].option : null), + isOpen: true + }; + if (this.props.onSelectResetsInput) { + newState.inputValue = ''; + } + this.setState(newState); return; } if (!options.length) return; @@ -1442,11 +1466,11 @@ var Select$1 = function (_React$Component) { focusedIndex = potentialIndex; } } else if (dir === 'page_down') { - var potentialIndex = focusedIndex + this.props.pageSize; - if (potentialIndex > options.length - 1) { + var _potentialIndex = focusedIndex + this.props.pageSize; + if (_potentialIndex > options.length - 1) { focusedIndex = options.length - 1; } else { - focusedIndex = potentialIndex; + focusedIndex = _potentialIndex; } } @@ -1484,7 +1508,7 @@ var Select$1 = function (_React$Component) { }, { key: 'renderValue', value: function renderValue(valueArray, isOpen) { - var _this6 = this; + var _this5 = this; var renderLabel = this.props.valueRenderer || this.getOptionLabel; var ValueComponent = this.props.valueComponent; @@ -1502,14 +1526,14 @@ var Select$1 = function (_React$Component) { return React__default.createElement( ValueComponent, { - id: _this6._instancePrefix + '-value-' + i, - instancePrefix: _this6._instancePrefix, - disabled: _this6.props.disabled || value.clearableValue === false, - key: 'value-' + i + '-' + value[_this6.props.valueKey], + disabled: _this5.props.disabled || value.clearableValue === false, + id: _this5._instancePrefix + '-value-' + i, + instancePrefix: _this5._instancePrefix, + key: 'value-' + i + '-' + value[_this5.props.valueKey], onClick: onClick, - onRemove: _this6.removeValue, - value: value, - placeholder: _this6.props.placeholder + onRemove: _this5.removeValue, + placeholder: _this5.props.placeholder, + value: value }, renderLabel(value, i), React__default.createElement( @@ -1524,12 +1548,12 @@ var Select$1 = function (_React$Component) { return React__default.createElement( ValueComponent, { - id: this._instancePrefix + '-value-item', disabled: this.props.disabled, + id: this._instancePrefix + '-value-item', instancePrefix: this._instancePrefix, onClick: onClick, - value: valueArray[0], - placeholder: this.props.placeholder + placeholder: this.props.placeholder, + value: valueArray[0] }, renderLabel(valueArray[0]) ); @@ -1539,10 +1563,10 @@ var Select$1 = function (_React$Component) { key: 'renderInput', value: function renderInput(valueArray, focusedOptionIndex) { var _classNames, - _this7 = this; + _this6 = this; var className = classNames('Select-input', this.props.inputProps.className); - var isOpen = !!this.state.isOpen; + var isOpen = this.state.isOpen; var ariaOwns = classNames((_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)); @@ -1553,23 +1577,23 @@ var Select$1 = function (_React$Component) { } 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-describedby': this.props['aria-describedby'], - 'aria-labelledby': this.props['aria-labelledby'], + 'aria-expanded': '' + isOpen, + 'aria-haspopup': '' + isOpen, 'aria-label': this.props['aria-label'], + 'aria-labelledby': this.props['aria-labelledby'], + 'aria-owns': ariaOwns, className: className, - tabIndex: this.props.tabIndex, onBlur: this.handleInputBlur, onChange: this.handleInputChange, onFocus: this.handleInputFocus, ref: function ref(_ref) { - return _this7.input = _ref; + return _this6.input = _ref; }, + role: 'combobox', required: this.state.required, + tabIndex: this.props.tabIndex, value: value }); @@ -1578,28 +1602,27 @@ var Select$1 = function (_React$Component) { } if (this.props.disabled || !this.props.searchable) { - var _props$inputProps = this.props.inputProps, - inputClassName = _props$inputProps.inputClassName, - divProps = objectWithoutProperties(_props$inputProps, ['inputClassName']); + var divProps = objectWithoutProperties(this.props.inputProps, []); var _ariaOwns = classNames(defineProperty({}, this._instancePrefix + '-list', isOpen)); return React__default.createElement('div', _extends({}, divProps, { - role: 'combobox', 'aria-expanded': isOpen, 'aria-owns': _ariaOwns, 'aria-activedescendant': isOpen ? this._instancePrefix + '-option-' + focusedOptionIndex : this._instancePrefix + '-value', - 'aria-labelledby': this.props['aria-labelledby'], + 'aria-disabled': '' + this.props.disabled, 'aria-label': this.props['aria-label'], + 'aria-labelledby': this.props['aria-labelledby'], className: className, - tabIndex: this.props.tabIndex || 0, onBlur: this.handleInputBlur, onFocus: this.handleInputFocus, ref: function ref(_ref2) { - return _this7.input = _ref2; + return _this6.input = _ref2; }, - 'aria-disabled': '' + !!this.props.disabled, - style: { border: 0, width: 1, display: 'inline-block' } })); + role: 'combobox', + style: { border: 0, width: 1, display: 'inline-block' }, + tabIndex: this.props.tabIndex || 0 + })); } if (this.props.autosize) { @@ -1616,16 +1639,19 @@ var Select$1 = function (_React$Component) { value: function renderClear() { var valueArray = this.getValueArray(this.props.value); if (!this.props.clearable || !valueArray.length || this.props.disabled || this.props.isLoading) return; + var ariaLabel = this.props.multi ? this.props.clearAllText : this.props.clearValueText; var clear = this.props.clearRenderer(); return React__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, + { + 'aria-label': ariaLabel, + className: 'Select-clear-zone', onMouseDown: this.clearValue, - onTouchStart: this.handleTouchStart, + onTouchEnd: this.handleTouchEndClearValue, onTouchMove: this.handleTouchMove, - onTouchEnd: this.handleTouchEndClearValue + onTouchStart: this.handleTouchStart, + title: ariaLabel }, clear ); @@ -1668,8 +1694,8 @@ var Select$1 = function (_React$Component) { labelKey: this.props.labelKey, matchPos: this.props.matchPos, matchProp: this.props.matchProp, - valueKey: this.props.valueKey, - trimFilter: this.props.trimFilter + trimFilter: this.props.trimFilter, + valueKey: this.props.valueKey }); } else { return options; @@ -1693,16 +1719,16 @@ var Select$1 = function (_React$Component) { instancePrefix: this._instancePrefix, labelKey: this.props.labelKey, onFocus: this.focusOption, + onOptionRef: this.onOptionRef, onSelect: this.selectValue, optionClassName: this.props.optionClassName, optionComponent: this.props.optionComponent, optionRenderer: this.props.optionRenderer || this.getOptionLabel, options: options, - selectValue: this.selectValue, removeValue: this.removeValue, + selectValue: this.selectValue, valueArray: valueArray, - valueKey: this.props.valueKey, - onOptionRef: this.onOptionRef + valueKey: this.props.valueKey }); } else if (this.props.noResultsText) { return React__default.createElement( @@ -1717,29 +1743,32 @@ var Select$1 = function (_React$Component) { }, { key: 'renderHiddenField', value: function renderHiddenField(valueArray) { - var _this8 = this; + var _this7 = this; if (!this.props.name) return; if (this.props.joinValues) { var value = valueArray.map(function (i) { - return stringifyValue(i[_this8.props.valueKey]); + return stringifyValue(i[_this7.props.valueKey]); }).join(this.props.delimiter); return React__default.createElement('input', { - type: 'hidden', + disabled: this.props.disabled, + name: this.props.name, ref: function ref(_ref3) { - return _this8.value = _ref3; + return _this7.value = _ref3; }, - name: this.props.name, - value: value, - disabled: this.props.disabled }); + type: 'hidden', + value: value + }); } return valueArray.map(function (item, index) { - return React__default.createElement('input', { key: 'hidden.' + index, - type: 'hidden', + return React__default.createElement('input', { + disabled: _this7.props.disabled, + key: 'hidden.' + index, + name: _this7.props.name, ref: 'value' + index, - name: _this8.props.name, - value: stringifyValue(item[_this8.props.valueKey]), - disabled: _this8.props.disabled }); + type: 'hidden', + value: stringifyValue(item[_this7.props.valueKey]) + }); }); } }, { @@ -1772,7 +1801,7 @@ var Select$1 = function (_React$Component) { }, { key: 'renderOuter', value: function renderOuter(options, valueArray, focusedOption) { - var _this9 = this; + var _this8 = this; var menu = this.renderMenu(options, valueArray, focusedOption); if (!menu) { @@ -1782,16 +1811,22 @@ var Select$1 = function (_React$Component) { return React__default.createElement( 'div', { ref: function ref(_ref5) { - return _this9.menuContainer = _ref5; + return _this8.menuContainer = _ref5; }, className: 'Select-menu-outer', style: this.props.menuContainerStyle }, React__default.createElement( 'div', - { ref: function ref(_ref4) { - return _this9.menu = _ref4; - }, role: 'listbox', tabIndex: -1, className: 'Select-menu', id: this._instancePrefix + '-list', - style: this.props.menuStyle, + { + className: 'Select-menu', + id: this._instancePrefix + '-list', + onMouseDown: this.handleMouseDownOnMenu, onScroll: this.handleMenuScroll, - onMouseDown: this.handleMouseDownOnMenu }, + ref: function ref(_ref4) { + return _this8.menu = _ref4; + }, + role: 'listbox', + style: this.props.menuStyle, + tabIndex: -1 + }, menu ) ); @@ -1799,7 +1834,7 @@ var Select$1 = function (_React$Component) { }, { key: 'render', value: function render() { - var _this10 = this; + var _this9 = this; var valueArray = this.getValueArray(this.props.value); var options = this._visibleOptions = this.filterOptions(this.props.multi && this.props.removeSelected ? valueArray : null); @@ -1814,8 +1849,7 @@ var Select$1 = function (_React$Component) { focusedOption = this._focusedOption = null; } var className = classNames('Select', this.props.className, { - 'Select--multi': this.props.multi, - 'Select--single': !this.props.multi, + 'has-value': valueArray.length, 'is-clearable': this.props.clearable, 'is-disabled': this.props.disabled, 'is-focused': this.state.isFocused, @@ -1823,8 +1857,9 @@ var Select$1 = function (_React$Component) { 'is-open': isOpen, 'is-pseudo-focused': this.state.isPseudoFocused, 'is-searchable': this.props.searchable, - 'has-value': valueArray.length, - 'Select--rtl': this.props.rtl + 'Select--multi': this.props.multi, + 'Select--rtl': this.props.rtl, + 'Select--single': !this.props.multi }); var removeMessage = null; @@ -1839,7 +1874,7 @@ var Select$1 = function (_React$Component) { return React__default.createElement( 'div', { ref: function ref(_ref7) { - return _this10.wrapper = _ref7; + return _this9.wrapper = _ref7; }, className: className, style: this.props.wrapperStyle }, @@ -1847,15 +1882,15 @@ var Select$1 = function (_React$Component) { React__default.createElement( 'div', { ref: function ref(_ref6) { - return _this10.control = _ref6; + return _this9.control = _ref6; }, className: 'Select-control', - style: this.props.style, onKeyDown: this.handleKeyDown, onMouseDown: this.handleMouseDown, onTouchEnd: this.handleTouchEnd, + onTouchMove: this.handleTouchMove, onTouchStart: this.handleTouchStart, - onTouchMove: this.handleTouchMove + style: this.props.style }, React__default.createElement( 'span', @@ -1875,8 +1910,6 @@ var Select$1 = function (_React$Component) { return Select; }(React__default.Component); - - Select$1.propTypes = { 'aria-describedby': PropTypes.string, // html id(s) of element(s) that should be used to describe this input (for assistive tech) 'aria-label': PropTypes.string, // aria label (for assistive tech) @@ -1984,8 +2017,8 @@ Select$1.defaultProps = { multi: false, noResultsText: 'No results found', onBlurResetsInput: true, - onSelectResetsInput: true, onCloseResetsInput: true, + onSelectResetsInput: true, openOnClick: true, optionComponent: Option, pageSize: 5, @@ -2026,6 +2059,10 @@ var propTypes = { var defaultCache = {}; +var defaultChildren = function defaultChildren(props) { + return React__default.createElement(Select$1, props); +}; + var defaultProps = { autoload: true, cache: defaultCache, @@ -2203,8 +2240,6 @@ var Async = function (_Component) { var _props3 = this.props, children = _props3.children, loadingPlaceholder = _props3.loadingPlaceholder, - multi = _props3.multi, - onChange = _props3.onChange, placeholder = _props3.placeholder; var _state2 = this.state, isLoading = _state2.isLoading, @@ -2232,10 +2267,6 @@ var Async = function (_Component) { Async.propTypes = propTypes; Async.defaultProps = defaultProps; -function defaultChildren(props) { - return React__default.createElement(Select$1, props); -} - var CreatableSelect = function (_React$Component) { inherits(CreatableSelect, _React$Component); @@ -2390,7 +2421,7 @@ var CreatableSelect = function (_React$Component) { } }, { key: 'onOptionSelect', - value: function onOptionSelect(option, event) { + value: function onOptionSelect(option) { if (option === this._createPlaceholderOption) { this.createNewOption(); } else { @@ -2408,10 +2439,8 @@ var CreatableSelect = function (_React$Component) { var _this2 = this; var _props4 = this.props, - newOptionCreator = _props4.newOptionCreator, - shouldKeyDownEventCreateNewOption = _props4.shouldKeyDownEventCreateNewOption, refProp = _props4.ref, - restProps = objectWithoutProperties(_props4, ['newOptionCreator', 'shouldKeyDownEventCreateNewOption', 'ref']); + restProps = objectWithoutProperties(_props4, ['ref']); var children = this.props.children; // We can't use destructuring default values to set the children, @@ -2448,13 +2477,11 @@ var CreatableSelect = function (_React$Component) { return CreatableSelect; }(React__default.Component); - - -function defaultChildren$2(props) { +var defaultChildren$2 = function defaultChildren(props) { return React__default.createElement(Select$1, props); -} +}; -function isOptionUnique(_ref3) { +var isOptionUnique = function isOptionUnique(_ref3) { var option = _ref3.option, options = _ref3.options, labelKey = _ref3.labelKey, @@ -2467,15 +2494,14 @@ function isOptionUnique(_ref3) { return options.filter(function (existingOption) { return existingOption[labelKey] === option[labelKey] || existingOption[valueKey] === option[valueKey]; }).length === 0; -} +}; -function isValidNewOption(_ref4) { +var isValidNewOption = function isValidNewOption(_ref4) { var label = _ref4.label; - return !!label; -} +}; -function newOptionCreator(_ref5) { +var newOptionCreator = function newOptionCreator(_ref5) { var label = _ref5.label, labelKey = _ref5.labelKey, valueKey = _ref5.valueKey; @@ -2484,14 +2510,15 @@ function newOptionCreator(_ref5) { option[valueKey] = label; option[labelKey] = label; option.className = 'Select-create-option-placeholder'; + return option; -} +}; -function promptTextCreator(label) { +var promptTextCreator = function promptTextCreator(label) { return 'Create option "' + label + '"'; -} +}; -function shouldKeyDownEventCreateNewOption(_ref6) { +var shouldKeyDownEventCreateNewOption = function shouldKeyDownEventCreateNewOption(_ref6) { var keyCode = _ref6.keyCode; switch (keyCode) { @@ -2503,7 +2530,7 @@ function shouldKeyDownEventCreateNewOption(_ref6) { default: return false; } -} +}; // Default prop methods CreatableSelect.isOptionUnique = isOptionUnique; @@ -2619,11 +2646,9 @@ var AsyncCreatableSelect = function (_React$Component) { return AsyncCreatableSelect; }(React__default.Component); - - -function defaultChildren$1(props) { +var defaultChildren$1 = function defaultChildren(props) { return React__default.createElement(Select$1, props); -} +}; AsyncCreatableSelect.propTypes = { children: PropTypes.func.isRequired // Child function responsible for creating the inner Select component; (props: Object): PropTypes.element diff --git a/dist/react-select.min.js b/dist/react-select.min.js index 2c9b6a1e86..a164930982 100644 --- a/dist/react-select.min.js +++ b/dist/react-select.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("react"),require("prop-types"),require("react-dom"),require("react-input-autosize"),require("classnames")):"function"==typeof define&&define.amd?define(["react","prop-types","react-dom","react-input-autosize","classnames"],t):e.Select=t(e.React,e.PropTypes,e.ReactDOM,e.AutosizeInput,e.classNames)}(this,function(e,t,u,n,s){"use strict";var o="default"in e?e.default:e;t=t&&t.hasOwnProperty("default")?t.default:t,n=n&&n.hasOwnProperty("default")?n.default:n,s=s&&s.hasOwnProperty("default")?s.default:s;var i=[{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}];function a(e){for(var t=0;t-1)return!1;if(n.filterOption)return n.filterOption.call(s,e,t);if(!t)return!0;var o=e[n.valueKey],i=e[n.labelKey],l=r(o),p=r(i);if(!l&&!p)return!1;var h=l?String(o):null,c=p?String(i):null;return n.ignoreAccents&&(h&&"label"!==n.matchProp&&(h=a(h)),c&&"value"!==n.matchProp&&(c=a(c))),n.ignoreCase&&(h&&"label"!==n.matchProp&&(h=h.toLowerCase()),c&&"value"!==n.matchProp&&(c=c.toLowerCase())),"start"===n.matchPos?h&&"label"!==n.matchProp&&h.substr(0,t.length)===t||c&&"value"!==n.matchProp&&c.substr(0,t.length)===t:h&&"label"!==n.matchProp&&h.indexOf(t)>=0||c&&"value"!==n.matchProp&&c.indexOf(t)>=0})}function p(e){var t=e.focusedOption,u=e.focusOption,n=e.inputValue,i=e.instancePrefix,a=(e.labelKey,e.onFocus),r=e.onOptionRef,l=e.onSelect,p=e.optionClassName,h=e.optionComponent,c=e.optionRenderer,d=e.options,f=e.removeValue,E=e.selectValue,v=e.valueArray,b=e.valueKey,g=h;return d.map(function(e,h){var d=v&&v.some(function(t){return t[b]==e[b]}),y=e===t,m=s(p,{"Select-option":!0,"is-selected":d,"is-focused":y,"is-disabled":e.disabled});return o.createElement(g,{className:m,focusOption:u,inputValue:n,instancePrefix:i,isDisabled:e.disabled,isFocused:y,isSelected:d,key:"option-"+h+"-"+e[b],onFocus:a,onSelect:l,option:e,optionIndex:h,ref:function(e){r(e,y)},removeValue:f,selectValue:E},c(e,h,n))})}var h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c=(function(){function e(e){this.value=e}function t(t){var u,n;function s(u,n){try{var i=t[u](n),a=i.value;a instanceof e?Promise.resolve(a.value).then(function(e){s("next",e)},function(e){s("throw",e)}):o(i.done?"return":"normal",i.value)}catch(e){o("throw",e)}}function o(e,t){switch(e){case"return":u.resolve({value:t,done:!0});break;case"throw":u.reject(t);break;default:u.resolve({value:t,done:!1})}(u=u.next)?s(u.key,u.arg):n=null}this._invoke=function(e,t){return new Promise(function(o,i){var a={key:e,arg:t,resolve:o,reject:i,next:null};n?n=n.next=a:(u=n=a,s(e,t))})},"function"!=typeof t.return&&(this.return=void 0)}"function"==typeof Symbol&&Symbol.asyncIterator&&(t.prototype[Symbol.asyncIterator]=function(){return this}),t.prototype.next=function(e){return this._invoke("next",e)},t.prototype.throw=function(e){return this._invoke("throw",e)},t.prototype.return=function(e){return this._invoke("return",e)}}(),function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}),d=function(){function e(e,t){for(var u=0;u=0||Object.prototype.hasOwnProperty.call(e,n)&&(u[n]=e[n]);return u},g=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t},y=function(e){v(t,e);function t(e){c(this,t);var u=g(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return u.handleMouseDown=u.handleMouseDown.bind(u),u.handleMouseEnter=u.handleMouseEnter.bind(u),u.handleMouseMove=u.handleMouseMove.bind(u),u.handleTouchStart=u.handleTouchStart.bind(u),u.handleTouchEnd=u.handleTouchEnd.bind(u),u.handleTouchMove=u.handleTouchMove.bind(u),u.onFocus=u.onFocus.bind(u),u}return d(t,[{key:"blockEvent",value: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)}},{key:"handleMouseDown",value:function(e){e.preventDefault(),e.stopPropagation(),this.props.onSelect(this.props.option,e)}},{key:"handleMouseEnter",value:function(e){this.onFocus(e)}},{key:"handleMouseMove",value:function(e){this.onFocus(e)}},{key:"handleTouchEnd",value:function(e){this.dragging||this.handleMouseDown(e)}},{key:"handleTouchMove",value:function(e){this.dragging=!0}},{key:"handleTouchStart",value:function(e){this.dragging=!1}},{key:"onFocus",value:function(e){this.props.isFocused||this.props.onFocus(this.props.option,e)}},{key:"render",value:function(){var e=this.props,t=e.option,u=e.instancePrefix,n=e.optionIndex,i=s(this.props.className,t.className);return t.disabled?o.createElement("div",{className:i,onMouseDown:this.blockEvent,onClick:this.blockEvent},this.props.children):o.createElement("div",{className:i,style:t.style,role:"option","aria-label":t.label,onMouseDown:this.handleMouseDown,onMouseEnter:this.handleMouseEnter,onMouseMove:this.handleMouseMove,onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove,onTouchEnd:this.handleTouchEnd,id:u+"-option-"+n,title:t.title},this.props.children)}}]),t}(o.Component),m=function(e){v(t,e);function t(e){c(this,t);var u=g(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return u.handleMouseDown=u.handleMouseDown.bind(u),u.onRemove=u.onRemove.bind(u),u.handleTouchEndRemove=u.handleTouchEndRemove.bind(u),u.handleTouchMove=u.handleTouchMove.bind(u),u.handleTouchStart=u.handleTouchStart.bind(u),u}return d(t,[{key:"handleMouseDown",value:function(e){if("mousedown"!==e.type||0===e.button)return this.props.onClick?(e.stopPropagation(),void this.props.onClick(this.props.value,e)):void(this.props.value.href&&e.stopPropagation())}},{key:"onRemove",value:function(e){e.preventDefault(),e.stopPropagation(),this.props.onRemove(this.props.value)}},{key:"handleTouchEndRemove",value:function(e){this.dragging||this.onRemove(e)}},{key:"handleTouchMove",value:function(e){this.dragging=!0}},{key:"handleTouchStart",value:function(e){this.dragging=!1}},{key:"renderRemoveIcon",value:function(){if(!this.props.disabled&&this.props.onRemove)return o.createElement("span",{className:"Select-value-icon","aria-hidden":"true",onMouseDown:this.onRemove,onTouchEnd:this.handleTouchEndRemove,onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove},"×")}},{key:"renderLabel",value:function(){var e="Select-value-label";return this.props.onClick||this.props.value.href?o.createElement("a",{className:e,href:this.props.value.href,target:this.props.value.target,onMouseDown:this.handleMouseDown,onTouchEnd:this.handleMouseDown},this.props.children):o.createElement("span",{className:e,role:"option","aria-selected":"true",id:this.props.id},this.props.children)}},{key:"render",value:function(){return o.createElement("div",{className:s("Select-value",this.props.value.className),style:this.props.value.style,title:this.props.value.title},this.renderRemoveIcon(),this.renderLabel())}}]),t}(o.Component),F=function(e){return"string"==typeof e?e:null!==e&&JSON.stringify(e)||""},C=(t.oneOfType([t.string,t.node]),t.oneOfType([t.string,t.number]),1),O=function(e){v(t,e);function t(e){c(this,t);var u=g(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return["clearValue","focusOption","handleInputBlur","handleInputChange","handleInputFocus","handleInputValueChange","handleKeyDown","handleMenuScroll","handleMouseDown","handleMouseDownOnArrow","handleMouseDownOnMenu","handleRequired","handleTouchOutside","handleTouchMove","handleTouchStart","handleTouchEnd","handleTouchEndClearValue","handleValueClick","getOptionLabel","onOptionRef","removeValue","selectValue"].forEach(function(e){return u[e]=u[e].bind(u)}),u.state={inputValue:"",isFocused:!1,isOpen:!1,isPseudoFocused:!1,required:!1},u}return d(t,[{key:"componentWillMount",value:function(){this._instancePrefix="react-select-"+(this.props.instanceId||++C)+"-";var e=this.getValueArray(this.props.value);this.props.required&&this.setState({required:this.handleRequired(e[0],this.props.multi)})}},{key:"componentDidMount",value:function(){void 0!==this.props.autofocus&&"undefined"!=typeof console&&console.warn("Warning: The autofocus prop has changed to autoFocus, support will be removed after react-select@1.0"),(this.props.autoFocus||this.props.autofocus)&&this.focus()}},{key:"componentWillReceiveProps",value:function(e){var t=this.getValueArray(e.value,e);e.required?this.setState({required:this.handleRequired(t[0],e.multi)}):this.props.required&&this.setState({required:!1}),this.state.inputValue&&this.props.value!==e.value&&e.onSelectResetsInput&&this.setState({inputValue:this.handleInputValueChange("")})}},{key:"componentDidUpdate",value:function(e,t){if(this.menu&&this.focused&&this.state.isOpen&&!this.hasScrolledToOption){var n=u.findDOMNode(this.focused),s=u.findDOMNode(this.menu),o=s.scrollTop,i=o+s.offsetHeight,a=n.offsetTop,r=a+n.offsetHeight;(o>a||ic.bottom?p.scrollTop=l.offsetTop+l.clientHeight-p.offsetHeight:h.topt.offsetHeight&&t.scrollHeight-t.offsetHeight-t.scrollTop<=0&&this.props.onMenuScrollToBottom()}}},{key:"handleRequired",value:function(e,t){return!e||(t?0===e.length:0===Object.keys(e).length)}},{key:"getOptionLabel",value:function(e){return e[this.props.labelKey]}},{key:"getValueArray",value:function(e,t){var u=this,n="object"===(void 0===t?"undefined":h(t))?t:this.props;if(n.multi){if("string"==typeof e&&(e=e.split(n.delimiter)),!Array.isArray(e)){if(null===e||void 0===e)return[];e=[e]}return e.map(function(e){return u.expandValue(e,n)}).filter(function(e){return e})}var s=this.expandValue(e,n);return s?[s]:[]}},{key:"expandValue",value:function(e,t){var u=void 0===e?"undefined":h(e);if("string"!==u&&"number"!==u&&"boolean"!==u)return e;var n=t.options,s=t.valueKey;if(n)for(var o=0;on&&this.focusOption(u[n+1])}},{key:"popValue",value:function(){var e=this.getValueArray(this.props.value);e.length&&!1!==e[e.length-1].clearableValue&&this.setValue(this.props.multi?e.slice(0,e.length-1):null)}},{key:"removeValue",value:function(e){var t=this,u=this.getValueArray(this.props.value);this.setValue(u.filter(function(u){return u[t.props.valueKey]!==e[t.props.valueKey]})),this.focus()}},{key:"clearValue",value:function(e){e&&"mousedown"===e.type&&0!==e.button||(e.preventDefault(),this.setValue(this.getResetValue()),this.setState({isOpen:!1,inputValue:this.handleInputValueChange("")},this.focus),this._focusAfterClear=!0)}},{key:"getResetValue",value:function(){return void 0!==this.props.resetValue?this.props.resetValue:this.props.multi?[]:null}},{key:"focusOption",value:function(e){this.setState({focusedOption:e})}},{key:"focusNextOption",value:function(){this.focusAdjacentOption("next")}},{key:"focusPreviousOption",value:function(){this.focusAdjacentOption("previous")}},{key:"focusPageUpOption",value:function(){this.focusAdjacentOption("page_up")}},{key:"focusPageDownOption",value:function(){this.focusAdjacentOption("page_down")}},{key:"focusStartOption",value:function(){this.focusAdjacentOption("start")}},{key:"focusEndOption",value:function(){this.focusAdjacentOption("end")}},{key:"focusAdjacentOption",value: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){if(t.length){for(var u=-1,n=0;n0?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){u=(s=u-this.props.pageSize)<0?0:s}else if("page_down"===e){var s;u=(s=u+this.props.pageSize)>t.length-1?t.length-1:s}-1===u&&(u=0),this.setState({focusedIndex:t[u].index,focusedOption:t[u].option})}}else this.setState({isOpen:!0,inputValue:"",focusedOption:this._focusedOption||(t.length?t["next"===e?0:t.length-1].option:null)})}},{key:"getFocusedOption",value:function(){return this._focusedOption}},{key:"selectFocusedOption",value:function(){if(this._focusedOption)return this.selectValue(this._focusedOption)}},{key:"renderLoading",value:function(){if(this.props.isLoading)return o.createElement("span",{className:"Select-loading-zone","aria-hidden":"true"},o.createElement("span",{className:"Select-loading"}))}},{key:"renderValue",value:function(e,t){var u=this,n=this.props.valueRenderer||this.getOptionLabel,s=this.props.valueComponent;if(!e.length){return function(e,t,u){var n=e.inputValue,s=e.isPseudoFocused,o=e.isFocused,i=t.onSelectResetsInput;return!n||!i&&!u&&!s&&!o}(this.state,this.props,t)?o.createElement("div",{className:"Select-placeholder"},this.props.placeholder):null}var i=this.props.onValueClick?this.handleValueClick:null;return this.props.multi?e.map(function(e,t){return o.createElement(s,{id:u._instancePrefix+"-value-"+t,instancePrefix:u._instancePrefix,disabled:u.props.disabled||!1===e.clearableValue,key:"value-"+t+"-"+e[u.props.valueKey],onClick:i,onRemove:u.removeValue,value:e,placeholder:u.props.placeholder},n(e,t),o.createElement("span",{className:"Select-aria-only"}," "))}):function(e,t){var u=e.inputValue,n=e.isPseudoFocused,s=e.isFocused,o=t.onSelectResetsInput;return!u||!o&&!(!s&&n||s&&!n)}(this.state,this.props)?(t&&(i=null),o.createElement(s,{id:this._instancePrefix+"-value-item",disabled:this.props.disabled,instancePrefix:this._instancePrefix,onClick:i,value:e[0],placeholder:this.props.placeholder},n(e[0]))):void 0}},{key:"renderInput",value:function(e,t){var u,i=this,a=s("Select-input",this.props.inputProps.className),r=!!this.state.isOpen,l=s((u={},f(u,this._instancePrefix+"-list",r),f(u,this._instancePrefix+"-backspace-remove-message",this.props.multi&&!this.props.disabled&&this.state.isFocused&&!this.state.inputValue),u)),p=this.state.inputValue;!p||this.props.onSelectResetsInput||this.state.isFocused||(p="");var h=E({},this.props.inputProps,{role:"combobox","aria-expanded":""+r,"aria-owns":l,"aria-haspopup":""+r,"aria-activedescendant":r?this._instancePrefix+"-option-"+t:this._instancePrefix+"-value","aria-describedby":this.props["aria-describedby"],"aria-labelledby":this.props["aria-labelledby"],"aria-label":this.props["aria-label"],className:a,tabIndex:this.props.tabIndex,onBlur:this.handleInputBlur,onChange:this.handleInputChange,onFocus:this.handleInputFocus,ref:function(e){return i.input=e},required:this.state.required,value:p});if(this.props.inputRenderer)return this.props.inputRenderer(h);if(this.props.disabled||!this.props.searchable){var c=this.props.inputProps,d=(c.inputClassName,b(c,["inputClassName"])),v=s(f({},this._instancePrefix+"-list",r));return o.createElement("div",E({},d,{role:"combobox","aria-expanded":r,"aria-owns":v,"aria-activedescendant":r?this._instancePrefix+"-option-"+t:this._instancePrefix+"-value","aria-labelledby":this.props["aria-labelledby"],"aria-label":this.props["aria-label"],className:a,tabIndex:this.props.tabIndex||0,onBlur:this.handleInputBlur,onFocus:this.handleInputFocus,ref:function(e){return i.input=e},"aria-disabled":""+!!this.props.disabled,style:{border:0,width:1,display:"inline-block"}}))}return this.props.autosize?o.createElement(n,E({id:this.props.id},h,{minWidth:"5"})):o.createElement("div",{className:a,key:"input-wrap"},o.createElement("input",E({id:this.props.id},h)))}},{key:"renderClear",value:function(){var e=this.getValueArray(this.props.value);if(this.props.clearable&&e.length&&!this.props.disabled&&!this.props.isLoading){var t=this.props.clearRenderer();return o.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},t)}}},{key:"renderArrow",value:function(){if(this.props.arrowRenderer){var e=this.handleMouseDownOnArrow,t=this.state.isOpen,u=this.props.arrowRenderer({onMouseDown:e,isOpen:t});return u?o.createElement("span",{className:"Select-arrow-zone",onMouseDown:e},u):null}}},{key:"filterOptions",value:function(e){var t=this.state.inputValue,u=this.props.options||[];if(this.props.filterOptions){var n="function"==typeof this.props.filterOptions?this.props.filterOptions:l;return n(u,t,e,{filterOption:this.props.filterOption,ignoreAccents:this.props.ignoreAccents,ignoreCase:this.props.ignoreCase,labelKey:this.props.labelKey,matchPos:this.props.matchPos,matchProp:this.props.matchProp,valueKey:this.props.valueKey,trimFilter:this.props.trimFilter})}return u}},{key:"onOptionRef",value:function(e,t){t&&(this.focused=e)}},{key:"renderMenu",value:function(e,t,u){return e&&e.length?this.props.menuRenderer({focusedOption:u,focusOption:this.focusOption,inputValue:this.state.inputValue,instancePrefix:this._instancePrefix,labelKey:this.props.labelKey,onFocus:this.focusOption,onSelect:this.selectValue,optionClassName:this.props.optionClassName,optionComponent:this.props.optionComponent,optionRenderer:this.props.optionRenderer||this.getOptionLabel,options:e,selectValue:this.selectValue,removeValue:this.removeValue,valueArray:t,valueKey:this.props.valueKey,onOptionRef:this.onOptionRef}):this.props.noResultsText?o.createElement("div",{className:"Select-noresults"},this.props.noResultsText):null}},{key:"renderHiddenField",value:function(e){var t=this;if(this.props.name){if(this.props.joinValues){var u=e.map(function(e){return F(e[t.props.valueKey])}).join(this.props.delimiter);return o.createElement("input",{type:"hidden",ref:function(e){return t.value=e},name:this.props.name,value:u,disabled:this.props.disabled})}return e.map(function(e,u){return o.createElement("input",{key:"hidden."+u,type:"hidden",ref:"value"+u,name:t.props.name,value:F(e[t.props.valueKey]),disabled:t.props.disabled})})}}},{key:"getFocusableOptionIndex",value:function(e){var t=this._visibleOptions;if(!t.length)return null;var u=this.props.valueKey,n=this.state.focusedOption||e;if(n&&!n.disabled){var s=-1;if(t.some(function(e,t){var o=e[u]===n[u];return o&&(s=t),o}),-1!==s)return s}for(var o=0;o-1)return!1;if(n.filterOption)return n.filterOption.call(void 0,e,t);if(!t)return!0;var s=e[n.valueKey],o=e[n.labelKey],i=r(s),l=r(o);if(!i&&!l)return!1;var p=i?String(s):null,h=l?String(o):null;return n.ignoreAccents&&(p&&"label"!==n.matchProp&&(p=a(p)),h&&"value"!==n.matchProp&&(h=a(h))),n.ignoreCase&&(p&&"label"!==n.matchProp&&(p=p.toLowerCase()),h&&"value"!==n.matchProp&&(h=h.toLowerCase())),"start"===n.matchPos?p&&"label"!==n.matchProp&&p.substr(0,t.length)===t||h&&"value"!==n.matchProp&&h.substr(0,t.length)===t:p&&"label"!==n.matchProp&&p.indexOf(t)>=0||h&&"value"!==n.matchProp&&h.indexOf(t)>=0})},p=function(e){var u=e.focusedOption,n=e.focusOption,s=e.inputValue,i=e.instancePrefix,a=e.onFocus,r=e.onOptionRef,l=e.onSelect,p=e.optionClassName,h=e.optionComponent,c=e.optionRenderer,d=e.options,f=e.removeValue,v=e.selectValue,E=e.valueArray,b=e.valueKey,g=h;return d.map(function(e,h){var d=E&&E.some(function(t){return t[b]===e[b]}),y=e===u,m=t(p,{"Select-option":!0,"is-selected":d,"is-focused":y,"is-disabled":e.disabled});return o.createElement(g,{className:m,focusOption:n,inputValue:s,instancePrefix:i,isDisabled:e.disabled,isFocused:y,isSelected:d,key:"option-"+h+"-"+e[b],onFocus:a,onSelect:l,option:e,optionIndex:h,ref:function(e){r(e,y)},removeValue:f,selectValue:v},c(e,h,s))})},h=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)},c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},d=(function(){function e(e){this.value=e}function t(t){function u(s,o){try{var i=t[s](o),a=i.value;a instanceof e?Promise.resolve(a.value).then(function(e){u("next",e)},function(e){u("throw",e)}):n(i.done?"return":"normal",i.value)}catch(e){n("throw",e)}}function n(e,t){switch(e){case"return":s.resolve({value:t,done:!0});break;case"throw":s.reject(t);break;default:s.resolve({value:t,done:!1})}(s=s.next)?u(s.key,s.arg):o=null}var s,o;this._invoke=function(e,t){return new Promise(function(n,i){var a={key:e,arg:t,resolve:n,reject:i,next:null};o?o=o.next=a:(s=o=a,u(e,t))})},"function"!=typeof t.return&&(this.return=void 0)}"function"==typeof Symbol&&Symbol.asyncIterator&&(t.prototype[Symbol.asyncIterator]=function(){return this}),t.prototype.next=function(e){return this._invoke("next",e)},t.prototype.throw=function(e){return this._invoke("throw",e)},t.prototype.return=function(e){return this._invoke("return",e)}}(),function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}),f=function(){function e(e,t){for(var u=0;u=0||Object.prototype.hasOwnProperty.call(e,n)&&(u[n]=e[n]);return u},y=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t},m=function(e){function u(e){d(this,u);var t=y(this,(u.__proto__||Object.getPrototypeOf(u)).call(this,e));return t.handleMouseDown=t.handleMouseDown.bind(t),t.handleMouseEnter=t.handleMouseEnter.bind(t),t.handleMouseMove=t.handleMouseMove.bind(t),t.handleTouchStart=t.handleTouchStart.bind(t),t.handleTouchEnd=t.handleTouchEnd.bind(t),t.handleTouchMove=t.handleTouchMove.bind(t),t.onFocus=t.onFocus.bind(t),t}return b(u,e),f(u,[{key:"handleMouseDown",value:function(e){e.preventDefault(),e.stopPropagation(),this.props.onSelect(this.props.option,e)}},{key:"handleMouseEnter",value:function(e){this.onFocus(e)}},{key:"handleMouseMove",value:function(e){this.onFocus(e)}},{key:"handleTouchEnd",value:function(e){this.dragging||this.handleMouseDown(e)}},{key:"handleTouchMove",value:function(){this.dragging=!0}},{key:"handleTouchStart",value:function(){this.dragging=!1}},{key:"onFocus",value:function(e){this.props.isFocused||this.props.onFocus(this.props.option,e)}},{key:"render",value:function(){var e=this.props,u=e.option,n=e.instancePrefix,s=e.optionIndex,i=t(this.props.className,u.className);return u.disabled?o.createElement("div",{className:i,onMouseDown:h,onClick:h},this.props.children):o.createElement("div",{className:i,style:u.style,role:"option","aria-label":u.label,onMouseDown:this.handleMouseDown,onMouseEnter:this.handleMouseEnter,onMouseMove:this.handleMouseMove,onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove,onTouchEnd:this.handleTouchEnd,id:n+"-option-"+s,title:u.title},this.props.children)}}]),u}(o.Component),F=function(e){function u(e){d(this,u);var t=y(this,(u.__proto__||Object.getPrototypeOf(u)).call(this,e));return t.handleMouseDown=t.handleMouseDown.bind(t),t.onRemove=t.onRemove.bind(t),t.handleTouchEndRemove=t.handleTouchEndRemove.bind(t),t.handleTouchMove=t.handleTouchMove.bind(t),t.handleTouchStart=t.handleTouchStart.bind(t),t}return b(u,e),f(u,[{key:"handleMouseDown",value:function(e){if("mousedown"!==e.type||0===e.button)return this.props.onClick?(e.stopPropagation(),void this.props.onClick(this.props.value,e)):void(this.props.value.href&&e.stopPropagation())}},{key:"onRemove",value:function(e){e.preventDefault(),e.stopPropagation(),this.props.onRemove(this.props.value)}},{key:"handleTouchEndRemove",value:function(e){this.dragging||this.onRemove(e)}},{key:"handleTouchMove",value:function(){this.dragging=!0}},{key:"handleTouchStart",value:function(){this.dragging=!1}},{key:"renderRemoveIcon",value:function(){if(!this.props.disabled&&this.props.onRemove)return o.createElement("span",{className:"Select-value-icon","aria-hidden":"true",onMouseDown:this.onRemove,onTouchEnd:this.handleTouchEndRemove,onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove},"×")}},{key:"renderLabel",value:function(){return this.props.onClick||this.props.value.href?o.createElement("a",{className:"Select-value-label",href:this.props.value.href,target:this.props.value.target,onMouseDown:this.handleMouseDown,onTouchEnd:this.handleMouseDown},this.props.children):o.createElement("span",{className:"Select-value-label",role:"option","aria-selected":"true",id:this.props.id},this.props.children)}},{key:"render",value:function(){return o.createElement("div",{className:t("Select-value",this.props.value.className),style:this.props.value.style,title:this.props.value.title},this.renderRemoveIcon(),this.renderLabel())}}]),u}(o.Component),C=function(e){return"string"==typeof e?e:null!==e&&JSON.stringify(e)||""},O=(u.oneOfType([u.string,u.node]),u.oneOfType([u.string,u.number]),1),A=function(e,t){var u=void 0===e?"undefined":c(e);if("string"!==u&&"number"!==u&&"boolean"!==u)return e;var n=t.options,s=t.valueKey;if(n)for(var o=0;oa||ic.bottom?p.scrollTop=l.offsetTop+l.clientHeight-p.offsetHeight:h.topt.offsetHeight&&t.scrollHeight-t.offsetHeight-t.scrollTop<=0&&this.props.onMenuScrollToBottom()}}},{key:"getOptionLabel",value:function(e){return e[this.props.labelKey]}},{key:"getValueArray",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,u="object"===(void 0===t?"undefined":c(t))?t:this.props;if(u.multi){if("string"==typeof e&&(e=e.split(u.delimiter)),!Array.isArray(e)){if(null===e||void 0===e)return[];e=[e]}return e.map(function(e){return A(e,u)}).filter(function(e){return e})}var n=A(e,u);return n?[n]:[]}},{key:"setValue",value:function(e){var t=this;if(this.props.autoBlur&&this.blurInput(),this.props.required){var u=D(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&&this.props.onChange(e)}},{key:"selectValue",value:function(e){var t=this;this.props.closeOnSelect&&(this.hasScrolledToOption=!1);var u=this.props.onSelectResetsInput?"":this.state.inputValue;this.props.multi?this.setState({focusedIndex:null,inputValue:this.handleInputValueChange(u),isOpen:!this.props.closeOnSelect},function(){t.getValueArray(t.props.value).some(function(u){return u[t.props.valueKey]===e[t.props.valueKey]})?t.removeValue(e):t.addValue(e)}):this.setState({inputValue:this.handleInputValueChange(u),isOpen:!this.props.closeOnSelect,isPseudoFocused:this.state.isFocused},function(){t.setValue(e)})}},{key:"addValue",value:function(e){var t=this.getValueArray(this.props.value),u=this._visibleOptions.filter(function(e){return!e.disabled}),n=u.indexOf(e);this.setValue(t.concat(e)),u.length-1===n?this.focusOption(u[n-1]):u.length>n&&this.focusOption(u[n+1])}},{key:"popValue",value:function(){var e=this.getValueArray(this.props.value);e.length&&!1!==e[e.length-1].clearableValue&&this.setValue(this.props.multi?e.slice(0,e.length-1):null)}},{key:"removeValue",value:function(e){var t=this,u=this.getValueArray(this.props.value);this.setValue(u.filter(function(u){return u[t.props.valueKey]!==e[t.props.valueKey]})),this.focus()}},{key:"clearValue",value:function(e){e&&"mousedown"===e.type&&0!==e.button||(e.preventDefault(),this.setValue(this.getResetValue()),this.setState({inputValue:this.handleInputValueChange(""),isOpen:!1},this.focus),this._focusAfterClear=!0)}},{key:"getResetValue",value:function(){return void 0!==this.props.resetValue?this.props.resetValue:this.props.multi?[]:null}},{key:"focusOption",value:function(e){this.setState({focusedOption:e})}},{key:"focusNextOption",value:function(){this.focusAdjacentOption("next")}},{key:"focusPreviousOption",value:function(){this.focusAdjacentOption("previous")}},{key:"focusPageUpOption",value:function(){this.focusAdjacentOption("page_up")}},{key:"focusPageDownOption",value:function(){this.focusAdjacentOption("page_down")}},{key:"focusStartOption",value:function(){this.focusAdjacentOption("start")}},{key:"focusEndOption",value:function(){this.focusAdjacentOption("end")}},{key:"focusAdjacentOption",value: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){var u={focusedOption:this._focusedOption||(t.length?t["next"===e?0:t.length-1].option:null),isOpen:!0};return this.props.onSelectResetsInput&&(u.inputValue=""),void this.setState(u)}if(t.length){for(var n=-1,s=0;s0?n-=1:n=t.length-1;else if("start"===e)n=0;else if("end"===e)n=t.length-1;else if("page_up"===e){var o=n-this.props.pageSize;n=o<0?0:o}else if("page_down"===e){var i=n+this.props.pageSize;n=i>t.length-1?t.length-1:i}-1===n&&(n=0),this.setState({focusedIndex:t[n].index,focusedOption:t[n].option})}}},{key:"getFocusedOption",value:function(){return this._focusedOption}},{key:"selectFocusedOption",value:function(){if(this._focusedOption)return this.selectValue(this._focusedOption)}},{key:"renderLoading",value:function(){if(this.props.isLoading)return o.createElement("span",{className:"Select-loading-zone","aria-hidden":"true"},o.createElement("span",{className:"Select-loading"}))}},{key:"renderValue",value:function(e,t){var u=this,n=this.props.valueRenderer||this.getOptionLabel,s=this.props.valueComponent;if(!e.length){return function(e,t,u){var n=e.inputValue,s=e.isPseudoFocused,o=e.isFocused,i=t.onSelectResetsInput;return!n||!i&&!u&&!s&&!o}(this.state,this.props,t)?o.createElement("div",{className:"Select-placeholder"},this.props.placeholder):null}var i=this.props.onValueClick?this.handleValueClick:null;return this.props.multi?e.map(function(e,t){return o.createElement(s,{disabled:u.props.disabled||!1===e.clearableValue,id:u._instancePrefix+"-value-"+t,instancePrefix:u._instancePrefix,key:"value-"+t+"-"+e[u.props.valueKey],onClick:i,onRemove:u.removeValue,placeholder:u.props.placeholder,value:e},n(e,t),o.createElement("span",{className:"Select-aria-only"}," "))}):function(e,t){var u=e.inputValue,n=e.isPseudoFocused,s=e.isFocused,o=t.onSelectResetsInput;return!u||!o&&!(!s&&n||s&&!n)}(this.state,this.props)?(t&&(i=null),o.createElement(s,{disabled:this.props.disabled,id:this._instancePrefix+"-value-item",instancePrefix:this._instancePrefix,onClick:i,placeholder:this.props.placeholder,value:e[0]},n(e[0]))):void 0}},{key:"renderInput",value:function(u,n){var s,i=this,a=t("Select-input",this.props.inputProps.className),r=this.state.isOpen,l=t((s={},v(s,this._instancePrefix+"-list",r),v(s,this._instancePrefix+"-backspace-remove-message",this.props.multi&&!this.props.disabled&&this.state.isFocused&&!this.state.inputValue),s)),p=this.state.inputValue;!p||this.props.onSelectResetsInput||this.state.isFocused||(p="");var h=E({},this.props.inputProps,{"aria-activedescendant":r?this._instancePrefix+"-option-"+n:this._instancePrefix+"-value","aria-describedby":this.props["aria-describedby"],"aria-expanded":""+r,"aria-haspopup":""+r,"aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"],"aria-owns":l,className:a,onBlur:this.handleInputBlur,onChange:this.handleInputChange,onFocus:this.handleInputFocus,ref:function(e){return i.input=e},role:"combobox",required:this.state.required,tabIndex:this.props.tabIndex,value:p});if(this.props.inputRenderer)return this.props.inputRenderer(h);if(this.props.disabled||!this.props.searchable){var c=g(this.props.inputProps,[]),d=t(v({},this._instancePrefix+"-list",r));return o.createElement("div",E({},c,{"aria-expanded":r,"aria-owns":d,"aria-activedescendant":r?this._instancePrefix+"-option-"+n:this._instancePrefix+"-value","aria-disabled":""+this.props.disabled,"aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"],className:a,onBlur:this.handleInputBlur,onFocus:this.handleInputFocus,ref:function(e){return i.input=e},role:"combobox",style:{border:0,width:1,display:"inline-block"},tabIndex:this.props.tabIndex||0}))}return this.props.autosize?o.createElement(e,E({id:this.props.id},h,{minWidth:"5"})):o.createElement("div",{className:a,key:"input-wrap"},o.createElement("input",E({id:this.props.id},h)))}},{key:"renderClear",value:function(){var e=this.getValueArray(this.props.value);if(this.props.clearable&&e.length&&!this.props.disabled&&!this.props.isLoading){var t=this.props.multi?this.props.clearAllText:this.props.clearValueText,u=this.props.clearRenderer();return o.createElement("span",{"aria-label":t,className:"Select-clear-zone",onMouseDown:this.clearValue,onTouchEnd:this.handleTouchEndClearValue,onTouchMove:this.handleTouchMove,onTouchStart:this.handleTouchStart,title:t},u)}}},{key:"renderArrow",value:function(){if(this.props.arrowRenderer){var e=this.handleMouseDownOnArrow,t=this.state.isOpen,u=this.props.arrowRenderer({onMouseDown:e,isOpen:t});return u?o.createElement("span",{className:"Select-arrow-zone",onMouseDown:e},u):null}}},{key:"filterOptions",value:function(e){var t=this.state.inputValue,u=this.props.options||[];if(this.props.filterOptions){var n="function"==typeof this.props.filterOptions?this.props.filterOptions:l;return n(u,t,e,{filterOption:this.props.filterOption,ignoreAccents:this.props.ignoreAccents,ignoreCase:this.props.ignoreCase,labelKey:this.props.labelKey,matchPos:this.props.matchPos,matchProp:this.props.matchProp,trimFilter:this.props.trimFilter,valueKey:this.props.valueKey})}return u}},{key:"onOptionRef",value:function(e,t){t&&(this.focused=e)}},{key:"renderMenu",value:function(e,t,u){return e&&e.length?this.props.menuRenderer({focusedOption:u,focusOption:this.focusOption,inputValue:this.state.inputValue,instancePrefix:this._instancePrefix,labelKey:this.props.labelKey,onFocus:this.focusOption,onOptionRef:this.onOptionRef,onSelect:this.selectValue,optionClassName:this.props.optionClassName,optionComponent:this.props.optionComponent,optionRenderer:this.props.optionRenderer||this.getOptionLabel,options:e,removeValue:this.removeValue,selectValue:this.selectValue,valueArray:t,valueKey:this.props.valueKey}):this.props.noResultsText?o.createElement("div",{className:"Select-noresults"},this.props.noResultsText):null}},{key:"renderHiddenField",value:function(e){var t=this;if(this.props.name){if(this.props.joinValues){var u=e.map(function(e){return C(e[t.props.valueKey])}).join(this.props.delimiter);return o.createElement("input",{disabled:this.props.disabled,name:this.props.name,ref:function(e){return t.value=e},type:"hidden",value:u})}return e.map(function(e,u){return o.createElement("input",{disabled:t.props.disabled,key:"hidden."+u,name:t.props.name,ref:"value"+u,type:"hidden",value:C(e[t.props.valueKey])})})}}},{key:"getFocusableOptionIndex",value:function(e){var t=this._visibleOptions;if(!t.length)return null;var u=this.props.valueKey,n=this.state.focusedOption||e;if(n&&!n.disabled){var s=-1;if(t.some(function(e,t){var o=e[u]===n[u];return o&&(s=t),o}),-1!==s)return s}for(var o=0;o= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } @@ -90,9 +90,7 @@ var AsyncCreatableSelect = function (_React$Component) { return AsyncCreatableSelect; }(_react2.default.Component); -; - -function defaultChildren(props) { +var defaultChildren = function defaultChildren(props) { return _react2.default.createElement(_Select2.default, props); }; diff --git a/lib/Creatable.js b/lib/Creatable.js index 31bd5089cf..2bcf07ebb9 100644 --- a/lib/Creatable.js +++ b/lib/Creatable.js @@ -8,17 +8,13 @@ var _extends = Object.assign || function (target) { for (var i = 1; i < argument var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); -var _Select = require('./Select'); +var _react = require('react'); -var _Select2 = _interopRequireDefault(_Select); +var _react2 = _interopRequireDefault(_react); var _defaultFilterOptions = require('./utils/defaultFilterOptions'); @@ -28,6 +24,10 @@ var _defaultMenuRenderer = require('./utils/defaultMenuRenderer'); var _defaultMenuRenderer2 = _interopRequireDefault(_defaultMenuRenderer); +var _Select = require('./Select'); + +var _Select2 = _interopRequireDefault(_Select); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } @@ -62,8 +62,7 @@ var CreatableSelect = function (_React$Component) { newOptionCreator = _props.newOptionCreator, onNewOptionClick = _props.onNewOptionClick, _props$options = _props.options, - options = _props$options === undefined ? [] : _props$options, - shouldKeyDownEventCreateNewOption = _props.shouldKeyDownEventCreateNewOption; + options = _props$options === undefined ? [] : _props$options; if (isValidNewOption({ label: this.inputValue })) { @@ -193,7 +192,7 @@ var CreatableSelect = function (_React$Component) { } }, { key: 'onOptionSelect', - value: function onOptionSelect(option, event) { + value: function onOptionSelect(option) { if (option === this._createPlaceholderOption) { this.createNewOption(); } else { @@ -211,10 +210,8 @@ var CreatableSelect = function (_React$Component) { var _this2 = this; var _props4 = this.props, - newOptionCreator = _props4.newOptionCreator, - shouldKeyDownEventCreateNewOption = _props4.shouldKeyDownEventCreateNewOption, refProp = _props4.ref, - restProps = _objectWithoutProperties(_props4, ['newOptionCreator', 'shouldKeyDownEventCreateNewOption', 'ref']); + restProps = _objectWithoutProperties(_props4, ['ref']); var children = this.props.children; @@ -253,13 +250,11 @@ var CreatableSelect = function (_React$Component) { return CreatableSelect; }(_react2.default.Component); -; - -function defaultChildren(props) { +var defaultChildren = function defaultChildren(props) { return _react2.default.createElement(_Select2.default, props); }; -function isOptionUnique(_ref3) { +var isOptionUnique = function isOptionUnique(_ref3) { var option = _ref3.option, options = _ref3.options, labelKey = _ref3.labelKey, @@ -274,13 +269,12 @@ function isOptionUnique(_ref3) { }).length === 0; }; -function isValidNewOption(_ref4) { +var isValidNewOption = function isValidNewOption(_ref4) { var label = _ref4.label; - return !!label; }; -function newOptionCreator(_ref5) { +var newOptionCreator = function newOptionCreator(_ref5) { var label = _ref5.label, labelKey = _ref5.labelKey, valueKey = _ref5.valueKey; @@ -289,14 +283,15 @@ function newOptionCreator(_ref5) { option[valueKey] = label; option[labelKey] = label; option.className = 'Select-create-option-placeholder'; + return option; }; -function promptTextCreator(label) { +var promptTextCreator = function promptTextCreator(label) { return 'Create option "' + label + '"'; -} +}; -function shouldKeyDownEventCreateNewOption(_ref6) { +var shouldKeyDownEventCreateNewOption = function shouldKeyDownEventCreateNewOption(_ref6) { var keyCode = _ref6.keyCode; switch (keyCode) { diff --git a/lib/Option.js b/lib/Option.js index 346446e528..c278005b28 100644 --- a/lib/Option.js +++ b/lib/Option.js @@ -6,17 +6,21 @@ Object.defineProperty(exports, "__esModule", { var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); -var _react = require('react'); +var _classnames = require('classnames'); -var _react2 = _interopRequireDefault(_react); +var _classnames2 = _interopRequireDefault(_classnames); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); -var _classnames = require('classnames'); +var _react = require('react'); -var _classnames2 = _interopRequireDefault(_classnames); +var _react2 = _interopRequireDefault(_react); + +var _blockEvent = require('./utils/blockEvent'); + +var _blockEvent2 = _interopRequireDefault(_blockEvent); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -45,20 +49,6 @@ var Option = function (_React$Component) { } _createClass(Option, [{ - key: 'blockEvent', - value: function blockEvent(event) { - event.preventDefault(); - event.stopPropagation(); - if (event.target.tagName !== 'A' || !('href' in event.target)) { - return; - } - if (event.target.target) { - window.open(event.target.href, event.target.target); - } else { - window.location.href = event.target.href; - } - } - }, { key: 'handleMouseDown', value: function handleMouseDown(event) { event.preventDefault(); @@ -86,13 +76,13 @@ var Option = function (_React$Component) { } }, { key: 'handleTouchMove', - value: function handleTouchMove(event) { + value: function handleTouchMove() { // Set a flag that the view is being dragged this.dragging = true; } }, { key: 'handleTouchStart', - value: function handleTouchStart(event) { + value: function handleTouchStart() { // Set a flag that the view is not being dragged this.dragging = false; } @@ -116,8 +106,8 @@ var Option = function (_React$Component) { return option.disabled ? _react2.default.createElement( 'div', { className: className, - onMouseDown: this.blockEvent, - onClick: this.blockEvent }, + onMouseDown: _blockEvent2.default, + onClick: _blockEvent2.default }, this.props.children ) : _react2.default.createElement( 'div', @@ -141,8 +131,6 @@ var Option = function (_React$Component) { return Option; }(_react2.default.Component); -; - Option.propTypes = { children: _propTypes2.default.node, className: _propTypes2.default.string, // className (based on mouse position) diff --git a/lib/Select.js b/lib/Select.js index 5535adb17a..176b7683d8 100644 --- a/lib/Select.js +++ b/lib/Select.js @@ -6,19 +6,14 @@ Object.defineProperty(exports, "__esModule", { var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); -var _react = require('react'); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = require('prop-types'); - -var _propTypes2 = _interopRequireDefault(_propTypes); +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /*! + Copyright (c) 2017 Jed Watson. + Licensed under the MIT License (MIT), see + http://jedwatson.github.io/react-select + */ -var _reactDom = require('react-dom'); var _reactInputAutosize = require('react-input-autosize'); @@ -28,10 +23,24 @@ var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); +var _propTypes = require('prop-types'); + +var _propTypes2 = _interopRequireDefault(_propTypes); + +var _react = require('react'); + +var _react2 = _interopRequireDefault(_react); + +var _reactDom = require('react-dom'); + var _defaultArrowRenderer = require('./utils/defaultArrowRenderer'); var _defaultArrowRenderer2 = _interopRequireDefault(_defaultArrowRenderer); +var _defaultClearRenderer = require('./utils/defaultClearRenderer'); + +var _defaultClearRenderer2 = _interopRequireDefault(_defaultClearRenderer); + var _defaultFilterOptions = require('./utils/defaultFilterOptions'); var _defaultFilterOptions2 = _interopRequireDefault(_defaultFilterOptions); @@ -40,10 +49,6 @@ var _defaultMenuRenderer = require('./utils/defaultMenuRenderer'); var _defaultMenuRenderer2 = _interopRequireDefault(_defaultMenuRenderer); -var _defaultClearRenderer = require('./utils/defaultClearRenderer'); - -var _defaultClearRenderer2 = _interopRequireDefault(_defaultClearRenderer); - var _Option = require('./Option'); var _Option2 = _interopRequireDefault(_Option); @@ -62,12 +67,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /*! - Copyright (c) 2017 Jed Watson. - Licensed under the MIT License (MIT), see - http://jedwatson.github.io/react-select - */ - +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var stringifyValue = function stringifyValue(value) { return typeof value === 'string' ? value : value !== null && JSON.stringify(value) || ''; @@ -104,6 +104,28 @@ var shouldShowPlaceholder = function shouldShowPlaceholder(state, props, isOpen) return !inputValue || !onSelectResetsInput && !isOpen && !isPseudoFocused && !isFocused; }; +/** + * Retrieve a value from the given options and valueKey + * @param {String|Number|Array} value - the selected value(s) + * @param {Object} props - the Select component's props (or nextProps) + */ +var expandValue = function expandValue(value, props) { + var valueType = typeof value === 'undefined' ? 'undefined' : _typeof(value); + if (valueType !== 'string' && valueType !== 'number' && valueType !== 'boolean') return value; + var options = props.options, + valueKey = props.valueKey; + + if (!options) return; + for (var i = 0; i < options.length; i++) { + if (String(options[i][valueKey]) === String(value)) return options[i]; + } +}; + +var handleRequired = function handleRequired(value, multi) { + if (!value) return true; + return multi ? value.length === 0 : Object.keys(value).length === 0; +}; + var Select = function (_React$Component) { _inherits(Select, _React$Component); @@ -112,7 +134,7 @@ var Select = function (_React$Component) { var _this = _possibleConstructorReturn(this, (Select.__proto__ || Object.getPrototypeOf(Select)).call(this, props)); - ['clearValue', 'focusOption', 'handleInputBlur', 'handleInputChange', 'handleInputFocus', 'handleInputValueChange', 'handleKeyDown', 'handleMenuScroll', 'handleMouseDown', 'handleMouseDownOnArrow', 'handleMouseDownOnMenu', 'handleRequired', 'handleTouchOutside', 'handleTouchMove', 'handleTouchStart', 'handleTouchEnd', 'handleTouchEndClearValue', 'handleValueClick', 'getOptionLabel', 'onOptionRef', 'removeValue', 'selectValue'].forEach(function (fn) { + ['clearValue', 'focusOption', 'getOptionLabel', 'handleInputBlur', 'handleInputChange', 'handleInputFocus', 'handleInputValueChange', 'handleKeyDown', 'handleMenuScroll', 'handleMouseDown', 'handleMouseDownOnArrow', 'handleMouseDownOnMenu', 'handleTouchEnd', 'handleTouchEndClearValue', 'handleTouchMove', 'handleTouchOutside', 'handleTouchStart', 'handleValueClick', 'onOptionRef', 'removeValue', 'selectValue'].forEach(function (fn) { return _this[fn] = _this[fn].bind(_this); }); @@ -134,7 +156,7 @@ var Select = function (_React$Component) { if (this.props.required) { this.setState({ - required: this.handleRequired(valueArray[0], this.props.multi) + required: handleRequired(valueArray[0], this.props.multi) }); } } @@ -155,7 +177,7 @@ var Select = function (_React$Component) { if (nextProps.required) { this.setState({ - required: this.handleRequired(valueArray[0], nextProps.multi) + required: handleRequired(valueArray[0], nextProps.multi) }); } else if (this.props.required) { // Used to be required but it's not any more @@ -263,13 +285,13 @@ var Select = function (_React$Component) { } }, { key: 'handleTouchMove', - value: function handleTouchMove(event) { + value: function handleTouchMove() { // Set a flag that the view is being dragged this.dragging = true; } }, { key: 'handleTouchStart', - value: function handleTouchStart(event) { + value: function handleTouchStart() { // Set a flag that the view is not being dragged this.dragging = false; } @@ -321,7 +343,7 @@ var Select = function (_React$Component) { // for the non-searchable select, toggle the menu if (!this.props.searchable) { - // TODO: This code means that if a select is searchable, onClick the options menu will not appear, only on subsequent click will it open. + // This code means that if a select is searchable, onClick the options menu will not appear, only on subsequent click will it open. this.focus(); return this.setState({ isOpen: !this.state.isOpen @@ -353,12 +375,14 @@ var Select = function (_React$Component) { // if the input is focused, ensure the menu is open this.setState({ isOpen: toOpen, - isPseudoFocused: false + isPseudoFocused: false, + focusedOption: null }); } else { // otherwise, focus the input and open the menu this._openAfterFocus = this.props.openOnClick; this.focus(); + this.setState({ focusedOption: null }); } } }, { @@ -403,9 +427,9 @@ var Select = function (_React$Component) { value: function closeMenu() { if (this.props.onCloseResetsInput) { this.setState({ + inputValue: this.handleInputValueChange(''), isOpen: false, - isPseudoFocused: this.state.isFocused && !this.props.multi, - inputValue: this.handleInputValueChange('') + isPseudoFocused: this.state.isFocused && !this.props.multi }); } else { this.setState({ @@ -429,11 +453,11 @@ var Select = function (_React$Component) { this.setState({ isFocused: true, - isOpen: toOpen + isOpen: !!toOpen }); - this._openAfterFocus = false; this._focusAfterClear = false; + this._openAfterFocus = false; } }, { key: 'handleInputBlur', @@ -467,9 +491,22 @@ var Select = function (_React$Component) { } this.setState({ + inputValue: newInputValue, isOpen: true, - isPseudoFocused: false, - inputValue: newInputValue + isPseudoFocused: false + }); + } + }, { + key: 'setInputValue', + value: function setInputValue(newValue) { + if (this.props.onInputChange) { + var nextState = this.props.onInputChange(newValue); + if (nextState != null && (typeof nextState === 'undefined' ? 'undefined' : _typeof(nextState)) !== 'object') { + newValue = '' + nextState; + } + } + this.setState({ + inputValue: newValue }); } }, { @@ -607,29 +644,23 @@ var Select = function (_React$Component) { this.props.onMenuScrollToBottom(); } } - }, { - key: 'handleRequired', - value: function handleRequired(value, multi) { - if (!value) return true; - return multi ? value.length === 0 : Object.keys(value).length === 0; - } }, { key: 'getOptionLabel', value: function getOptionLabel(op) { return op[this.props.labelKey]; } - /** - * Turns a value into an array from the given options - * @param {String|Number|Array} value - the value of the select input - * @param {Object} nextProps - optionally specify the nextProps so the returned array uses the latest configuration - * @returns {Array} the value of the select represented in an array + /** + * Turns a value into an array from the given options + * @param {String|Number|Array} value - the value of the select input + * @param {Object} nextProps - optionally specify the nextProps so the returned array uses the latest configuration + * @returns {Array} the value of the select represented in an array */ }, { key: 'getValueArray', - value: function getValueArray(value, nextProps) { - var _this2 = this; + value: function getValueArray(value) { + var nextProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; /** support optionally passing in the `nextProps` so `componentWillReceiveProps` updates will function as expected */ var props = (typeof nextProps === 'undefined' ? 'undefined' : _typeof(nextProps)) === 'object' ? nextProps : this.props; @@ -642,59 +673,39 @@ var Select = function (_React$Component) { value = [value]; } return value.map(function (value) { - return _this2.expandValue(value, props); + return expandValue(value, props); }).filter(function (i) { return i; }); } - var expandedValue = this.expandValue(value, props); + var expandedValue = expandValue(value, props); return expandedValue ? [expandedValue] : []; } - - /** - * Retrieve a value from the given options and valueKey - * @param {String|Number|Array} value - the selected value(s) - * @param {Object} props - the Select component's props (or nextProps) - */ - - }, { - key: 'expandValue', - value: function expandValue(value, props) { - var valueType = typeof value === 'undefined' ? 'undefined' : _typeof(value); - if (valueType !== 'string' && valueType !== 'number' && valueType !== 'boolean') return value; - var options = props.options, - valueKey = props.valueKey; - - if (!options) return; - for (var i = 0; i < options.length; i++) { - if (String(options[i][valueKey]) === String(value)) return options[i]; - } - } }, { key: 'setValue', value: function setValue(value) { - var _this3 = this; + var _this2 = this; if (this.props.autoBlur) { this.blurInput(); } if (this.props.required) { - var required = this.handleRequired(value, this.props.multi); + var required = handleRequired(value, this.props.multi); this.setState({ required: required }); } + if (this.props.simpleValue && value) { + value = this.props.multi ? value.map(function (i) { + return i[_this2.props.valueKey]; + }).join(this.props.delimiter) : value[this.props.valueKey]; + } if (this.props.onChange) { - if (this.props.simpleValue && value) { - value = this.props.multi ? value.map(function (i) { - return i[_this3.props.valueKey]; - }).join(this.props.delimiter) : value[this.props.valueKey]; - } this.props.onChange(value); } } }, { key: 'selectValue', value: function selectValue(value) { - var _this4 = this; + var _this3 = this; // NOTE: we actually add/set the value in a callback to make sure the // input value is empty to avoid styling issues in Chrome @@ -708,13 +719,13 @@ var Select = function (_React$Component) { inputValue: this.handleInputValueChange(updatedValue), isOpen: !this.props.closeOnSelect }, function () { - var valueArray = _this4.getValueArray(_this4.props.value); + var valueArray = _this3.getValueArray(_this3.props.value); if (valueArray.some(function (i) { - return i[_this4.props.valueKey] === value[_this4.props.valueKey]; + return i[_this3.props.valueKey] === value[_this3.props.valueKey]; })) { - _this4.removeValue(value); + _this3.removeValue(value); } else { - _this4.addValue(value); + _this3.addValue(value); } }); } else { @@ -723,7 +734,7 @@ var Select = function (_React$Component) { isOpen: !this.props.closeOnSelect, isPseudoFocused: this.state.isFocused }, function () { - _this4.setValue(value); + _this3.setValue(value); }); } } @@ -755,11 +766,11 @@ var Select = function (_React$Component) { }, { key: 'removeValue', value: function removeValue(value) { - var _this5 = this; + var _this4 = this; var valueArray = this.getValueArray(this.props.value); this.setValue(valueArray.filter(function (i) { - return i[_this5.props.valueKey] !== value[_this5.props.valueKey]; + return i[_this4.props.valueKey] !== value[_this4.props.valueKey]; })); this.focus(); } @@ -776,8 +787,8 @@ var Select = function (_React$Component) { this.setValue(this.getResetValue()); this.setState({ - isOpen: false, - inputValue: this.handleInputValueChange('') + inputValue: this.handleInputValueChange(''), + isOpen: false }, this.focus); this._focusAfterClear = true; @@ -840,11 +851,14 @@ var Select = function (_React$Component) { }); this._scrollToFocusedOptionOnUpdate = true; if (!this.state.isOpen) { - this.setState({ - isOpen: true, - inputValue: '', - focusedOption: this._focusedOption || (options.length ? options[dir === 'next' ? 0 : options.length - 1].option : null) - }); + var newState = { + focusedOption: this._focusedOption || (options.length ? options[dir === 'next' ? 0 : options.length - 1].option : null), + isOpen: true + }; + if (this.props.onSelectResetsInput) { + newState.inputValue = ''; + } + this.setState(newState); return; } if (!options.length) return; @@ -875,11 +889,11 @@ var Select = function (_React$Component) { focusedIndex = potentialIndex; } } else if (dir === 'page_down') { - var potentialIndex = focusedIndex + this.props.pageSize; - if (potentialIndex > options.length - 1) { + var _potentialIndex = focusedIndex + this.props.pageSize; + if (_potentialIndex > options.length - 1) { focusedIndex = options.length - 1; } else { - focusedIndex = potentialIndex; + focusedIndex = _potentialIndex; } } @@ -917,7 +931,7 @@ var Select = function (_React$Component) { }, { key: 'renderValue', value: function renderValue(valueArray, isOpen) { - var _this6 = this; + var _this5 = this; var renderLabel = this.props.valueRenderer || this.getOptionLabel; var ValueComponent = this.props.valueComponent; @@ -935,14 +949,14 @@ var Select = function (_React$Component) { return _react2.default.createElement( ValueComponent, { - id: _this6._instancePrefix + '-value-' + i, - instancePrefix: _this6._instancePrefix, - disabled: _this6.props.disabled || value.clearableValue === false, - key: 'value-' + i + '-' + value[_this6.props.valueKey], + disabled: _this5.props.disabled || value.clearableValue === false, + id: _this5._instancePrefix + '-value-' + i, + instancePrefix: _this5._instancePrefix, + key: 'value-' + i + '-' + value[_this5.props.valueKey], onClick: onClick, - onRemove: _this6.removeValue, - value: value, - placeholder: _this6.props.placeholder + onRemove: _this5.removeValue, + placeholder: _this5.props.placeholder, + value: value }, renderLabel(value, i), _react2.default.createElement( @@ -957,12 +971,12 @@ var Select = function (_React$Component) { return _react2.default.createElement( ValueComponent, { - id: this._instancePrefix + '-value-item', disabled: this.props.disabled, + id: this._instancePrefix + '-value-item', instancePrefix: this._instancePrefix, onClick: onClick, - value: valueArray[0], - placeholder: this.props.placeholder + placeholder: this.props.placeholder, + value: valueArray[0] }, renderLabel(valueArray[0]) ); @@ -972,10 +986,10 @@ var Select = function (_React$Component) { key: 'renderInput', value: function renderInput(valueArray, focusedOptionIndex) { var _classNames, - _this7 = this; + _this6 = this; var className = (0, _classnames2.default)('Select-input', this.props.inputProps.className); - var isOpen = !!this.state.isOpen; + 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)); @@ -986,23 +1000,23 @@ var Select = function (_React$Component) { } 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-describedby': this.props['aria-describedby'], - 'aria-labelledby': this.props['aria-labelledby'], + 'aria-expanded': '' + isOpen, + 'aria-haspopup': '' + isOpen, 'aria-label': this.props['aria-label'], + 'aria-labelledby': this.props['aria-labelledby'], + 'aria-owns': ariaOwns, className: className, - tabIndex: this.props.tabIndex, onBlur: this.handleInputBlur, onChange: this.handleInputChange, onFocus: this.handleInputFocus, ref: function ref(_ref) { - return _this7.input = _ref; + return _this6.input = _ref; }, + role: 'combobox', required: this.state.required, + tabIndex: this.props.tabIndex, value: value }); @@ -1011,27 +1025,26 @@ var Select = function (_React$Component) { } if (this.props.disabled || !this.props.searchable) { - var _props$inputProps = this.props.inputProps, - inputClassName = _props$inputProps.inputClassName, - divProps = _objectWithoutProperties(_props$inputProps, ['inputClassName']); + var divProps = _objectWithoutProperties(this.props.inputProps, []); var _ariaOwns = (0, _classnames2.default)(_defineProperty({}, this._instancePrefix + '-list', isOpen)); return _react2.default.createElement('div', _extends({}, divProps, { - role: 'combobox', 'aria-expanded': isOpen, 'aria-owns': _ariaOwns, 'aria-activedescendant': isOpen ? this._instancePrefix + '-option-' + focusedOptionIndex : this._instancePrefix + '-value', - 'aria-labelledby': this.props['aria-labelledby'], + 'aria-disabled': '' + this.props.disabled, 'aria-label': this.props['aria-label'], + 'aria-labelledby': this.props['aria-labelledby'], className: className, - tabIndex: this.props.tabIndex || 0, onBlur: this.handleInputBlur, onFocus: this.handleInputFocus, ref: function ref(_ref2) { - return _this7.input = _ref2; + return _this6.input = _ref2; }, - 'aria-disabled': '' + !!this.props.disabled, - style: { border: 0, width: 1, display: 'inline-block' } })); + role: 'combobox', + style: { border: 0, width: 1, display: 'inline-block' }, + tabIndex: this.props.tabIndex || 0 + })); } if (this.props.autosize) { @@ -1048,16 +1061,19 @@ var Select = function (_React$Component) { value: function renderClear() { var valueArray = this.getValueArray(this.props.value); if (!this.props.clearable || !valueArray.length || this.props.disabled || this.props.isLoading) return; + var ariaLabel = this.props.multi ? this.props.clearAllText : this.props.clearValueText; var clear = this.props.clearRenderer(); return _react2.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, + { + 'aria-label': ariaLabel, + className: 'Select-clear-zone', onMouseDown: this.clearValue, - onTouchStart: this.handleTouchStart, + onTouchEnd: this.handleTouchEndClearValue, onTouchMove: this.handleTouchMove, - onTouchEnd: this.handleTouchEndClearValue + onTouchStart: this.handleTouchStart, + title: ariaLabel }, clear ); @@ -1100,8 +1116,8 @@ var Select = function (_React$Component) { labelKey: this.props.labelKey, matchPos: this.props.matchPos, matchProp: this.props.matchProp, - valueKey: this.props.valueKey, - trimFilter: this.props.trimFilter + trimFilter: this.props.trimFilter, + valueKey: this.props.valueKey }); } else { return options; @@ -1125,16 +1141,16 @@ var Select = function (_React$Component) { instancePrefix: this._instancePrefix, labelKey: this.props.labelKey, onFocus: this.focusOption, + onOptionRef: this.onOptionRef, onSelect: this.selectValue, optionClassName: this.props.optionClassName, optionComponent: this.props.optionComponent, optionRenderer: this.props.optionRenderer || this.getOptionLabel, options: options, - selectValue: this.selectValue, removeValue: this.removeValue, + selectValue: this.selectValue, valueArray: valueArray, - valueKey: this.props.valueKey, - onOptionRef: this.onOptionRef + valueKey: this.props.valueKey }); } else if (this.props.noResultsText) { return _react2.default.createElement( @@ -1149,29 +1165,32 @@ var Select = function (_React$Component) { }, { key: 'renderHiddenField', value: function renderHiddenField(valueArray) { - var _this8 = this; + var _this7 = this; if (!this.props.name) return; if (this.props.joinValues) { var value = valueArray.map(function (i) { - return stringifyValue(i[_this8.props.valueKey]); + return stringifyValue(i[_this7.props.valueKey]); }).join(this.props.delimiter); return _react2.default.createElement('input', { - type: 'hidden', + disabled: this.props.disabled, + name: this.props.name, ref: function ref(_ref3) { - return _this8.value = _ref3; + return _this7.value = _ref3; }, - name: this.props.name, - value: value, - disabled: this.props.disabled }); + type: 'hidden', + value: value + }); } return valueArray.map(function (item, index) { - return _react2.default.createElement('input', { key: 'hidden.' + index, - type: 'hidden', + return _react2.default.createElement('input', { + disabled: _this7.props.disabled, + key: 'hidden.' + index, + name: _this7.props.name, ref: 'value' + index, - name: _this8.props.name, - value: stringifyValue(item[_this8.props.valueKey]), - disabled: _this8.props.disabled }); + type: 'hidden', + value: stringifyValue(item[_this7.props.valueKey]) + }); }); } }, { @@ -1204,7 +1223,7 @@ var Select = function (_React$Component) { }, { key: 'renderOuter', value: function renderOuter(options, valueArray, focusedOption) { - var _this9 = this; + var _this8 = this; var menu = this.renderMenu(options, valueArray, focusedOption); if (!menu) { @@ -1214,16 +1233,22 @@ var Select = function (_React$Component) { return _react2.default.createElement( 'div', { ref: function ref(_ref5) { - return _this9.menuContainer = _ref5; + return _this8.menuContainer = _ref5; }, className: 'Select-menu-outer', style: this.props.menuContainerStyle }, _react2.default.createElement( 'div', - { ref: function ref(_ref4) { - return _this9.menu = _ref4; - }, role: 'listbox', tabIndex: -1, className: 'Select-menu', id: this._instancePrefix + '-list', - style: this.props.menuStyle, + { + className: 'Select-menu', + id: this._instancePrefix + '-list', + onMouseDown: this.handleMouseDownOnMenu, onScroll: this.handleMenuScroll, - onMouseDown: this.handleMouseDownOnMenu }, + ref: function ref(_ref4) { + return _this8.menu = _ref4; + }, + role: 'listbox', + style: this.props.menuStyle, + tabIndex: -1 + }, menu ) ); @@ -1231,7 +1256,7 @@ var Select = function (_React$Component) { }, { key: 'render', value: function render() { - var _this10 = this; + var _this9 = this; var valueArray = this.getValueArray(this.props.value); var options = this._visibleOptions = this.filterOptions(this.props.multi && this.props.removeSelected ? valueArray : null); @@ -1246,8 +1271,7 @@ var Select = function (_React$Component) { focusedOption = this._focusedOption = null; } var className = (0, _classnames2.default)('Select', this.props.className, { - 'Select--multi': this.props.multi, - 'Select--single': !this.props.multi, + 'has-value': valueArray.length, 'is-clearable': this.props.clearable, 'is-disabled': this.props.disabled, 'is-focused': this.state.isFocused, @@ -1255,8 +1279,9 @@ var Select = function (_React$Component) { 'is-open': isOpen, 'is-pseudo-focused': this.state.isPseudoFocused, 'is-searchable': this.props.searchable, - 'has-value': valueArray.length, - 'Select--rtl': this.props.rtl + 'Select--multi': this.props.multi, + 'Select--rtl': this.props.rtl, + 'Select--single': !this.props.multi }); var removeMessage = null; @@ -1271,7 +1296,7 @@ var Select = function (_React$Component) { return _react2.default.createElement( 'div', { ref: function ref(_ref7) { - return _this10.wrapper = _ref7; + return _this9.wrapper = _ref7; }, className: className, style: this.props.wrapperStyle }, @@ -1279,15 +1304,15 @@ var Select = function (_React$Component) { _react2.default.createElement( 'div', { ref: function ref(_ref6) { - return _this10.control = _ref6; + return _this9.control = _ref6; }, className: 'Select-control', - style: this.props.style, onKeyDown: this.handleKeyDown, onMouseDown: this.handleMouseDown, onTouchEnd: this.handleTouchEnd, + onTouchMove: this.handleTouchMove, onTouchStart: this.handleTouchStart, - onTouchMove: this.handleTouchMove + style: this.props.style }, _react2.default.createElement( 'span', @@ -1308,8 +1333,6 @@ var Select = function (_React$Component) { return Select; }(_react2.default.Component); -; - Select.propTypes = { 'aria-describedby': _propTypes2.default.string, // html id(s) of element(s) that should be used to describe this input (for assistive tech) 'aria-label': _propTypes2.default.string, // aria label (for assistive tech) @@ -1417,8 +1440,8 @@ Select.defaultProps = { multi: false, noResultsText: 'No results found', onBlurResetsInput: true, - onSelectResetsInput: true, onCloseResetsInput: true, + onSelectResetsInput: true, openOnClick: true, optionComponent: _Option2.default, pageSize: 5, diff --git a/lib/Value.js b/lib/Value.js index 29de51a75a..650162addb 100644 --- a/lib/Value.js +++ b/lib/Value.js @@ -6,17 +6,17 @@ Object.defineProperty(exports, "__esModule", { var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); -var _react = require('react'); +var _classnames = require('classnames'); -var _react2 = _interopRequireDefault(_react); +var _classnames2 = _interopRequireDefault(_classnames); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); -var _classnames = require('classnames'); +var _react = require('react'); -var _classnames2 = _interopRequireDefault(_classnames); +var _react2 = _interopRequireDefault(_react); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -76,13 +76,13 @@ var Value = function (_React$Component) { } }, { key: 'handleTouchMove', - value: function handleTouchMove(event) { + value: function handleTouchMove() { // Set a flag that the view is being dragged this.dragging = true; } }, { key: 'handleTouchStart', - value: function handleTouchStart(event) { + value: function handleTouchStart() { // Set a flag that the view is not being dragged this.dragging = false; } @@ -133,8 +133,6 @@ var Value = function (_React$Component) { return Value; }(_react2.default.Component); -; - Value.propTypes = { children: _propTypes2.default.node, disabled: _propTypes2.default.bool, // disabled prop passed to ReactSelect diff --git a/lib/utils/blockEvent.js b/lib/utils/blockEvent.js new file mode 100644 index 0000000000..1c3e40deb6 --- /dev/null +++ b/lib/utils/blockEvent.js @@ -0,0 +1,18 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (event) { + event.preventDefault(); + event.stopPropagation(); + if (event.target.tagName !== 'A' || !('href' in event.target)) { + return; + } + if (event.target.target) { + window.open(event.target.href, event.target.target); + } else { + window.location.href = event.target.href; + } +}; \ No newline at end of file diff --git a/lib/utils/defaultArrowRenderer.js b/lib/utils/defaultArrowRenderer.js index 3a8cda8cd7..36ade7036b 100644 --- a/lib/utils/defaultArrowRenderer.js +++ b/lib/utils/defaultArrowRenderer.js @@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true }); -exports.default = arrowRenderer; var _react = require('react'); @@ -15,7 +14,7 @@ var _propTypes2 = _interopRequireDefault(_propTypes); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -function arrowRenderer(_ref) { +var arrowRenderer = function arrowRenderer(_ref) { var onMouseDown = _ref.onMouseDown; return _react2.default.createElement('span', { @@ -26,4 +25,6 @@ function arrowRenderer(_ref) { arrowRenderer.propTypes = { onMouseDown: _propTypes2.default.func -}; \ No newline at end of file +}; + +exports.default = arrowRenderer; \ No newline at end of file diff --git a/lib/utils/defaultClearRenderer.js b/lib/utils/defaultClearRenderer.js index b220d79ac8..48045458ab 100644 --- a/lib/utils/defaultClearRenderer.js +++ b/lib/utils/defaultClearRenderer.js @@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true }); -exports.default = clearRenderer; var _react = require('react'); @@ -11,9 +10,11 @@ var _react2 = _interopRequireDefault(_react); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -function clearRenderer() { +var clearRenderer = function clearRenderer() { return _react2.default.createElement('span', { className: 'Select-clear', dangerouslySetInnerHTML: { __html: '×' } }); -}; \ No newline at end of file +}; + +exports.default = clearRenderer; \ No newline at end of file diff --git a/lib/utils/defaultFilterOptions.js b/lib/utils/defaultFilterOptions.js index d86b29136f..96f23f9fc6 100644 --- a/lib/utils/defaultFilterOptions.js +++ b/lib/utils/defaultFilterOptions.js @@ -14,13 +14,11 @@ var _trim2 = _interopRequireDefault(_trim); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -function isValid(value) { +var isValid = function isValid(value) { return typeof value !== 'undefined' && value !== null && value !== ''; -} - -function filterOptions(options, filterValue, excludeOptions, props) { - var _this = this; +}; +var filterOptions = function filterOptions(options, filterValue, excludeOptions, props) { if (props.ignoreAccents) { filterValue = (0, _stripDiacritics2.default)(filterValue); } @@ -39,7 +37,7 @@ function filterOptions(options, filterValue, excludeOptions, props) { return options.filter(function (option) { if (excludeOptions && excludeOptions.indexOf(option[props.valueKey]) > -1) return false; - if (props.filterOption) return props.filterOption.call(_this, option, filterValue); + if (props.filterOption) return props.filterOption.call(undefined, option, filterValue); if (!filterValue) return true; var value = option[props.valueKey]; @@ -66,6 +64,6 @@ function filterOptions(options, filterValue, excludeOptions, props) { return props.matchPos === 'start' ? valueTest && props.matchProp !== 'label' && valueTest.substr(0, filterValue.length) === filterValue || labelTest && props.matchProp !== 'value' && labelTest.substr(0, filterValue.length) === filterValue : valueTest && props.matchProp !== 'label' && valueTest.indexOf(filterValue) >= 0 || labelTest && props.matchProp !== 'value' && labelTest.indexOf(filterValue) >= 0; }); -} +}; exports.default = filterOptions; \ No newline at end of file diff --git a/lib/utils/defaultMenuRenderer.js b/lib/utils/defaultMenuRenderer.js index 5f1aedacc3..19c52a963d 100644 --- a/lib/utils/defaultMenuRenderer.js +++ b/lib/utils/defaultMenuRenderer.js @@ -8,18 +8,21 @@ var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); +var _propTypes = require('prop-types'); + +var _propTypes2 = _interopRequireDefault(_propTypes); + var _react = require('react'); var _react2 = _interopRequireDefault(_react); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -function menuRenderer(_ref) { +var menuRenderer = function menuRenderer(_ref) { var focusedOption = _ref.focusedOption, focusOption = _ref.focusOption, inputValue = _ref.inputValue, instancePrefix = _ref.instancePrefix, - labelKey = _ref.labelKey, onFocus = _ref.onFocus, onOptionRef = _ref.onOptionRef, onSelect = _ref.onSelect, @@ -36,7 +39,7 @@ function menuRenderer(_ref) { return options.map(function (option, i) { var isSelected = valueArray && valueArray.some(function (x) { - return x[valueKey] == option[valueKey]; + return x[valueKey] === option[valueKey]; }); var isFocused = option === focusedOption; var optionClass = (0, _classnames2.default)(optionClassName, { @@ -70,6 +73,24 @@ function menuRenderer(_ref) { optionRenderer(option, i, inputValue) ); }); -} +}; + +menuRenderer.propTypes = { + focusOption: _propTypes2.default.func, + focusedOption: _propTypes2.default.object, + inputValue: _propTypes2.default.string, + instancePrefix: _propTypes2.default.string, + onFocus: _propTypes2.default.func, + onOptionRef: _propTypes2.default.func, + onSelect: _propTypes2.default.func, + optionClassName: _propTypes2.default.string, + optionComponent: _propTypes2.default.func, + optionRenderer: _propTypes2.default.func, + options: _propTypes2.default.array, + removeValue: _propTypes2.default.func, + selectValue: _propTypes2.default.func, + valueArray: _propTypes2.default.array, + valueKey: _propTypes2.default.string +}; exports.default = menuRenderer; \ No newline at end of file diff --git a/lib/utils/stripDiacritics.js b/lib/utils/stripDiacritics.js index 93641f1706..b88c040535 100644 --- a/lib/utils/stripDiacritics.js +++ b/lib/utils/stripDiacritics.js @@ -3,12 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true }); -exports.default = stripDiacritics; var map = [{ '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 }]; -function stripDiacritics(str) { +var stripDiacritics = function stripDiacritics(str) { for (var i = 0; i < map.length; i++) { str = str.replace(map[i].letters, map[i].base); } return str; -}; \ No newline at end of file +}; + +exports.default = stripDiacritics; \ No newline at end of file diff --git a/lib/utils/trim.js b/lib/utils/trim.js index 891843b9b8..59630b2c52 100644 --- a/lib/utils/trim.js +++ b/lib/utils/trim.js @@ -1,9 +1,10 @@ 'use strict'; Object.defineProperty(exports, "__esModule", { - value: true + value: true }); -exports.default = trim; -function trim(str) { - return str.replace(/^\s+|\s+$/g, ''); -} \ No newline at end of file +var trim = function trim(str) { + return str.replace(/^\s+|\s+$/g, ''); +}; + +exports.default = trim; \ No newline at end of file