diff --git a/.babelrc b/.babelrc
new file mode 100644
index 00000000..8fb47a89
--- /dev/null
+++ b/.babelrc
@@ -0,0 +1,9 @@
+{
+ "ignore": ["node-modules/**", "src/index.umd.js"],
+ "presets": [ "es2015", "stage-0", "react"],
+ "env": {
+ "test": {
+ "plugins": ["istanbul"],
+ },
+ }
+}
diff --git a/.eslintrc b/.eslintrc
deleted file mode 100644
index f4253545..00000000
--- a/.eslintrc
+++ /dev/null
@@ -1,35 +0,0 @@
-{
- "parser": "babel-eslint",
- "env": {
- "browser": true,
- "node": true
- },
- "plugins": [
- "react"
- ],
- "rules": {
- "curly": [2, "multi-line"],
- "jsx-quotes": 1,
- "no-shadow": 0,
- "no-trailing-spaces": 0,
- "no-underscore-dangle": 0,
- "no-unused-expressions": 0,
- "object-curly-spacing": [1, "always"],
- "quotes": [2, "single", "avoid-escape"],
- "react/jsx-boolean-value": 1,
- "react/jsx-no-undef": 1,
- "react/jsx-sort-prop-types": 1,
- "react/jsx-uses-react": 1,
- "react/jsx-uses-vars": 1,
- "react/no-did-mount-set-state": 1,
- "react/no-did-update-set-state": 1,
- "react/no-unknown-property": 1,
- "react/prop-types": 1,
- "react/react-in-jsx-scope": 1,
- "react/self-closing-comp": 1,
- "react/sort-comp": 1,
- "react/wrap-multilines": 1,
- "semi": 2,
- "strict": 0
- }
-}
diff --git a/.eslintrc.js b/.eslintrc.js
new file mode 100644
index 00000000..0dacb6aa
--- /dev/null
+++ b/.eslintrc.js
@@ -0,0 +1,41 @@
+module.exports = {
+ parserOptions: {
+ ecmaVersion: 6,
+ sourceType: 'module',
+ ecmaFeatures: {
+ experimentalObjectRestSpread: true,
+ jsx: true,
+ },
+ },
+ env: {
+ browser: true,
+ es6: true,
+ node: true,
+ },
+ plugins: ['react'],
+ rules: {
+ 'curly': [2, 'multi-line'],
+ 'jsx-quotes': 1,
+ 'no-shadow': 0,
+ 'no-trailing-spaces': 0,
+ 'no-underscore-dangle': 0,
+ 'no-unused-expressions': 0,
+ 'object-curly-spacing': [1, 'always'],
+ 'quotes': [2, 'single', 'avoid-escape'],
+ 'react/jsx-boolean-value': 1,
+ 'react/jsx-no-undef': 1,
+ 'react/jsx-uses-react': 1,
+ 'react/jsx-uses-vars': 1,
+ 'react/jsx-wrap-multilines': 1,
+ 'react/no-did-mount-set-state': 1,
+ 'react/no-did-update-set-state': 1,
+ 'react/no-unknown-property': 1,
+ 'react/prop-types': 1,
+ 'react/react-in-jsx-scope': 1,
+ 'react/self-closing-comp': 1,
+ 'react/sort-comp': 1,
+ 'react/sort-prop-types': 1,
+ 'semi': 2,
+ 'strict': 0,
+ },
+};
diff --git a/.gitignore b/.gitignore
index d2dfea8f..582edcc8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,6 +10,7 @@ pids
# Coverage tools
lib-cov
coverage
+.nyc_output
# Dependency directory
node_modules
diff --git a/.nycrc b/.nycrc
new file mode 100644
index 00000000..e6c59634
--- /dev/null
+++ b/.nycrc
@@ -0,0 +1,12 @@
+{
+ "reporter": [
+ "lcov",
+ "text-summary"
+ ],
+ "require": [
+ "babel-register"
+ ],
+ "sourceMap": false,
+ "instrument": false,
+ "report-dir": "./coverage"
+}
diff --git a/.travis.yml b/.travis.yml
index 8278823b..ac23f398 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,6 +1,8 @@
sudo: false
language: node_js
node_js:
- - "v4"
+ - "v4"
script:
- - npm run coveralls
+ - npm run lint
+ - npm run test
+ - npm run coveralls
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 6afd856a..776eac1b 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -3,9 +3,9 @@
Thanks for your interest in React-Select. All forms of contribution are
welcome, from issue reports to PRs and documentation / write-ups.
-* We use node.js v4 for development and testing. Due to incompatibilities with
-JSDOM and older versions of node.js, you'll need to use node 4 to run the
-tests. If you can't install node v4 as your "default" node installation, you
+* We use node.js v4+ for development and testing. Due to incompatibilities with
+JSDOM and older versions of node.js, you'll need to use node 4 and above to run the
+tests. If you can't install node v4 or above as your "default" node installation, you
could try using [nvm](https://github.com/creationix/nvm) to install multiple
versions concurrently.
* If you're upgrading your node.js 0.x environment, it's sometimes necessary
diff --git a/HISTORY.md b/HISTORY.md
index 67c687e5..deeba3b9 100644
--- a/HISTORY.md
+++ b/HISTORY.md
@@ -1,5 +1,59 @@
# React-Select-Plus
+## v1.0.0-rc.10 / 2017-09-13
+
+* changed; `openAfterFocus` prop has been renamed to `openOnClick`, and now default to `true`
+* fixed; React.PropTypes deprecation warning, thanks [Jeremy Liberman](https://github.com/MrLeebo)
+* improved; scrolling behaviour when navigating the menu with the keyboard, thanks [boatkorachal](https://github.com/boatkorachal)
+* fixed; error with the `Async` cache when you type `"hasOwnProperty"`, thanks [SuhushinAS](https://github.com/SuhushinAS)
+
+## v1.0.0-rc.9 / 2017-09-13
+
+* fixed; clearable padding style, thanks [Minori Miyauchi](https://github.com/mmiyauchi)
+* fixed; removed use of `Object.assign`, fixes IE compatibility
+* added; new `closeOnSelect` prop (defaults to `true`) that controls whether the menu is closed when an option is selected, thanks to [Michael Elgar](https://github.com/melgar) for the original idea
+* changed; by default, the menu for multi-selects now closes when an option is selected
+* changed; `Async` component no longer always clears options when one is selected (although the menu is now closed by default). Use `closeOnSelect={false} onSelectResetsInput={false}` to leave the menu open.
+* fixed; `Async` component always called `onChange` even when it wasn't provided
+* fixed; input lag for the `Async` component when results are returned from cache
+* fixed; required was not being updated without an onChange handler
+* fixed; peer dependencies for `prop-types`, thanks [Michaël De Boey](https://github.com/MichaelDeBoey)
+* fixed; internal optimisations, thanks [Kieran Boyle](https://github.com/dysfunc)
+* added; `Value` component is now exported, thanks [Prof Gra](https://github.com/Grahack)
+* fixed; callback fired after `Async` component unmounts, thanks [Andrew Russell](https://github.com/DeadHeadRussell)
+* fixed; wrapping on Firefox in SCSS files, thanks [Michael Williamson](https://github.com/mwilliamson)
+
+## v1.0.0-rc.8 / 2017-09-12
+
+* fixed; `onMenuScrollToBottom` does not work in chrome 58.0, thanks [Simon Hartcher](https://github.com/deevus)
+* fixed; missing es6 module build for `js:next` entrypoint
+* updated; `react-input-autosize@2.0.0` including several fixes for react-select (see [changes](https://github.com/JedWatson/react-input-autosize/blob/master/HISTORY.md))
+
+## v1.0.0-rc.7 / 2017-09-11
+
+* fixed; issue with `lib` build preventing use in ES2015 environments
+
+## v1.0.0-rc.6 / 2017-09-10
+
+* fixed; changing `required` prop from `true` to `false` now works as expected, thanks [George Karagkiaouris](https://github.com/karaggeorge)
+* added; new prop `onSelectResetsInput` controls whether the input value is cleared when options are selected, thanks [David Roeca](https://github.com/davidroeca) and [Alexander Nosov](https://github.com/nosovsh)
+* fixed; tabindex parent bug fix for Edge, thanks [George Payne](https://github.com/George-A-Payne)
+* fixed; update selectize link in README.md, thanks [kerumen](https://github.com/kerumen)
+* added; standard issue template, thanks [agirton](https://github.com/agirton)
+* added; new build process using rollup and webpack. Removed grunt. thanks [gwyneplaine](https://github.com/gwyneplaine)
+* fixed; updated contributor docs with the correct node version reference [gwyneplaine](https://github.com/gwyneplaine)
+* fixed; missing method binds in Option, thanks [agirton](https://github.com/agirton)
+* fixed; converted components to use es6 classes, thanks [jochenberger](https://github.com/jochenberger)
+* fixed; console.log example in usage docs, thanks [rohmanhm](https://github.com/rohmanhm)
+* fixed; hide create option after closing menu, thanks [andreme](https://github.com/andreme)
+* fixed; remove circular reference, thanks [agirton](https://github.com/agirton)
+* fixed; readme typo, thanks [ieldanr](https:/github.com/ieldanr)
+* fixed; add missing function binds in Option component, thanks [agirton](https://github.com/agirton) and [blacktemplar](https://github.com/blacktemplar)
+* fixed; re-added fix to [#1580](https://github.com/JedWatson/react-select/issues/1580), thanks [agirton](https://github.com/agirton)
+* fixed; avoid mutating user inputs when ignoring case/accents, thanks [not-an-aardvark](https://github.com/not-an-aardvark)
+* fixed; issues synchronising options props in `Async`, thanks [cbergmiller](https://github.com/cbergmiller)
+* fixed; backspace handling for non-multi select controls, thanks [Jeremy Liberman](https://github.com/MrLeebo)
+
## v1.0.0-rc.5 / 2017-05-25
* fixed; Allow `falsey` values to be clearable, thanks [Simon Gaestel](https://github.com/sgaestel)
diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md
index b7451a6b..fb96d21b 100644
--- a/ISSUE_TEMPLATE.md
+++ b/ISSUE_TEMPLATE.md
@@ -1,9 +1,24 @@
### Thanks for using react-select!
-If you are reporting an error please include a test case that demonstrates the issue you're reporting!
+Before creating an issue...
+
+# Are you asking a question?
+Please don't file GitHub issues to ask questions. Use Stack Overflow with a [#react-select](http://stackoverflow.com/questions/tagged/react-select) tag
+
+
+# Are you reporting a bug or runtime error?
+Please include a test case that demonstrates the issue you're reporting!
This is very helpful to maintainers in order to help us see the issue you're seeing.
Here is a Plunker you can fork that has react-select loaded and supports JSX syntax:
-https://plnkr.co/edit/HTmtER9AMNcPoWhXV707?p=preview
+https://plnkr.co/edit/dHygFMWWqVwaRAfpEmbn?p=preview
You may also find the [online Babel tool](https://babeljs.io/repl/) quite helpful if you wish to use ES6/ES7 syntax not yet supported by the browser you are using.
+
+
+# Are you making a feature request?
+Provide as much information as possible about your requested feature. Here are a few questions you may consider answering:
+
+* What's your use case? (Tell us about your application and what problem you're trying to solve.)
+* What interface do you have in mind? (What new properties or methods do you think might be helpful?)
+* Can you point to similar functionality with any existing libraries or components? (Working demos can be helpful.)
diff --git a/LICENSE b/LICENSE
index 58b127b3..4993fba5 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
The MIT License (MIT)
-Copyright (c) 2016 HubSpot
+Copyright (c) 2017 HubSpot
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/README.md b/README.md
index 0d29bb38..316745fb 100644
--- a/README.md
+++ b/README.md
@@ -43,13 +43,15 @@ import Select from 'react-select-plus';
import 'react-select-plus/dist/react-select-plus.css';
```
-You can also use the standalone build by including `react-select-plus.js` and `react-select-plus.css` in your page. (If you do this though you'll also need to include the dependencies.) For example:
+You can also use the standalone UMD build by including `dist/react-select-plus.js` and `dist/react-select-plus.css` in your page. If you do this you'll also need to include the dependencies. For example:
+
```html
-
-
-
-
-
+
+
+
+
+
+
```
@@ -74,7 +76,7 @@ var options = [
];
function logChange(val) {
- console.log("Selected: " + val);
+ console.log("Selected: " + JSON.stringify(val));
}
| function which returns a custom way to render/manage the value selected ` ` |
| valueKey | string | 'value' | the option property to use for the value |
| valueRenderer | func | undefined | function which returns a custom way to render the value selected `function (option) {}` |
@@ -407,9 +415,9 @@ Right now there's simply a `focus()` method that gives the control focus. All ot
See our [CONTRIBUTING.md](https://github.com/JedWatson/react-select/blob/master/CONTRIBUTING.md) for information on how to contribute.
-Thanks to the projects this was inspired by: [Selectize](http://brianreavis.github.io/selectize.js/) (in terms of behaviour and user experience), [React-Autocomplete](https://github.com/rackt/react-autocomplete) (as a quality React Combobox implementation), as well as other select controls including [Chosen](http://harvesthq.github.io/chosen/) and [Select2](http://ivaynberg.github.io/select2/).
+Thanks to the projects this was inspired by: [Selectize](http://selectize.github.io/selectize.js/) (in terms of behaviour and user experience), [React-Autocomplete](https://github.com/rackt/react-autocomplete) (as a quality React Combobox implementation), as well as other select controls including [Chosen](http://harvesthq.github.io/chosen/) and [Select2](http://ivaynberg.github.io/select2/).
# License
-MIT Licensed. Copyright (c) HubSpot 2016.
+MIT Licensed. Copyright (c) HubSpot 2017.
diff --git a/bower.json b/bower.json
index e970ecf1..08cea90b 100644
--- a/bower.json
+++ b/bower.json
@@ -4,20 +4,16 @@
"dist/react-select-plus.min.js",
"dist/react-select-plus.min.css"
],
- "version": "1.0.0-rc.4",
+ "version": "1.0.0-rc.10",
"homepage": "https://github.com/HubSpot/react-select-plus",
"authors": [
"Trevor Burnham"
],
"description": "A Select control built with and for ReactJS",
- "moduleType": [
- "amd",
- "globals",
- "node"
- ],
+ "moduleType": ["amd", "globals", "node"],
"dependencies": {
"classnames": "^2.2.0",
- "react-input-autosize": "^1.1.0"
+ "react-input-autosize": "^2.0.1"
},
"keywords": [
"react",
diff --git a/dist/react-select-plus.css b/dist/react-select-plus.css
index 4aa52052..5c7ff988 100644
--- a/dist/react-select-plus.css
+++ b/dist/react-select-plus.css
@@ -84,6 +84,9 @@
text-overflow: ellipsis;
white-space: nowrap;
}
+.has-value.is-clearable.Select--single > .Select-control .Select-value {
+ padding-right: 42px;
+}
.has-value.Select--single > .Select-control .Select-value .Select-value-label,
.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value .Select-value-label {
color: #333;
diff --git a/dist/react-select-plus.js b/dist/react-select-plus.js
deleted file mode 100644
index 6c26245d..00000000
--- a/dist/react-select-plus.js
+++ /dev/null
@@ -1,2631 +0,0 @@
-(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Select = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o _this3.props.value.length) {
- _this3.clearOptions();
- }
- _this3.props.onChange(newValues);
- }
- };
-
- return children(_extends({}, this.props, props, {
- isLoading: isLoading,
- onInputChange: this._onInputChange
- }));
- }
- }]);
-
- return Async;
-})(_react.Component);
-
-exports['default'] = Async;
-
-Async.propTypes = propTypes;
-Async.defaultProps = defaultProps;
-
-function defaultChildren(props) {
- return _react2['default'].createElement(_Select2['default'], props);
-}
-module.exports = exports['default'];
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"./Select":7,"./utils/stripDiacritics":13,"prop-types":undefined}],2:[function(require,module,exports){
-(function (global){
-'use strict';
-
-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; };
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-var _react = (typeof window !== "undefined" ? window['React'] : typeof global !== "undefined" ? global['React'] : null);
-
-var _react2 = _interopRequireDefault(_react);
-
-var _createReactClass = require('create-react-class');
-
-var _createReactClass2 = _interopRequireDefault(_createReactClass);
-
-var _Select = require('./Select');
-
-var _Select2 = _interopRequireDefault(_Select);
-
-function reduce(obj) {
- var props = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
-
- return Object.keys(obj).reduce(function (props, key) {
- var value = obj[key];
- if (value !== undefined) props[key] = value;
- return props;
- }, props);
-}
-
-var AsyncCreatable = (0, _createReactClass2['default'])({
- displayName: 'AsyncCreatableSelect',
-
- focus: function focus() {
- this.select.focus();
- },
-
- render: function render() {
- var _this = this;
-
- return _react2['default'].createElement(
- _Select2['default'].Async,
- this.props,
- function (asyncProps) {
- return _react2['default'].createElement(
- _Select2['default'].Creatable,
- _this.props,
- function (creatableProps) {
- return _react2['default'].createElement(_Select2['default'], _extends({}, reduce(asyncProps, reduce(creatableProps, {})), {
- onInputChange: function (input) {
- creatableProps.onInputChange(input);
- return asyncProps.onInputChange(input);
- },
- ref: function (ref) {
- _this.select = ref;
- creatableProps.ref(ref);
- asyncProps.ref(ref);
- }
- }));
- }
- );
- }
- );
- }
-});
-
-module.exports = AsyncCreatable;
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"./Select":7,"create-react-class":undefined}],3:[function(require,module,exports){
-(function (global){
-'use strict';
-
-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; };
-
-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; }
-
-var _react = (typeof window !== "undefined" ? window['React'] : typeof global !== "undefined" ? global['React'] : null);
-
-var _react2 = _interopRequireDefault(_react);
-
-var _createReactClass = require('create-react-class');
-
-var _createReactClass2 = _interopRequireDefault(_createReactClass);
-
-var _propTypes = require('prop-types');
-
-var _propTypes2 = _interopRequireDefault(_propTypes);
-
-var _Select = require('./Select');
-
-var _Select2 = _interopRequireDefault(_Select);
-
-var _utilsDefaultFilterOptions = require('./utils/defaultFilterOptions');
-
-var _utilsDefaultFilterOptions2 = _interopRequireDefault(_utilsDefaultFilterOptions);
-
-var _utilsDefaultMenuRenderer = require('./utils/defaultMenuRenderer');
-
-var _utilsDefaultMenuRenderer2 = _interopRequireDefault(_utilsDefaultMenuRenderer);
-
-var Creatable = (0, _createReactClass2['default'])({
- displayName: 'CreatableSelect',
-
- propTypes: {
- // Child function responsible for creating the inner Select component
- // This component can be used to compose HOCs (eg Creatable and Async)
- // (props: Object): PropTypes.element
- children: _propTypes2['default'].func,
-
- // See Select.propTypes.filterOptions
- filterOptions: _propTypes2['default'].any,
-
- // Searches for any matching option within the set of options.
- // This function prevents duplicate options from being created.
- // ({ option: Object, options: Array, labelKey: string, valueKey: string }): boolean
- isOptionUnique: _propTypes2['default'].func,
-
- // Determines if the current input text represents a valid option.
- // ({ label: string }): boolean
- isValidNewOption: _propTypes2['default'].func,
-
- // See Select.propTypes.menuRenderer
- menuRenderer: _propTypes2['default'].any,
-
- // Factory to create new option.
- // ({ label: string, labelKey: string, valueKey: string }): Object
- newOptionCreator: _propTypes2['default'].func,
-
- // input change handler: function (inputValue) {}
- onInputChange: _propTypes2['default'].func,
-
- // input keyDown handler: function (event) {}
- onInputKeyDown: _propTypes2['default'].func,
-
- // new option click handler: function (option) {}
- onNewOptionClick: _propTypes2['default'].func,
-
- // See Select.propTypes.options
- options: _propTypes2['default'].array,
-
- // Creates prompt/placeholder option text.
- // (filterText: string): string
- promptTextCreator: _propTypes2['default'].func,
-
- // Decides if a keyDown event (eg its `keyCode`) should result in the creation of a new option.
- shouldKeyDownEventCreateNewOption: _propTypes2['default'].func
- },
-
- // Default prop methods
- statics: {
- isOptionUnique: isOptionUnique,
- isValidNewOption: isValidNewOption,
- newOptionCreator: newOptionCreator,
- promptTextCreator: promptTextCreator,
- shouldKeyDownEventCreateNewOption: shouldKeyDownEventCreateNewOption
- },
-
- getDefaultProps: function getDefaultProps() {
- return {
- filterOptions: _utilsDefaultFilterOptions2['default'],
- isOptionUnique: isOptionUnique,
- isValidNewOption: isValidNewOption,
- menuRenderer: _utilsDefaultMenuRenderer2['default'],
- newOptionCreator: newOptionCreator,
- promptTextCreator: promptTextCreator,
- shouldKeyDownEventCreateNewOption: shouldKeyDownEventCreateNewOption
- };
- },
-
- createNewOption: function createNewOption() {
- var _props = this.props;
- var isValidNewOption = _props.isValidNewOption;
- var newOptionCreator = _props.newOptionCreator;
- var onNewOptionClick = _props.onNewOptionClick;
- var _props$options = _props.options;
- var options = _props$options === undefined ? [] : _props$options;
- var shouldKeyDownEventCreateNewOption = _props.shouldKeyDownEventCreateNewOption;
-
- if (isValidNewOption({ label: this.inputValue })) {
- var option = newOptionCreator({ label: this.inputValue, labelKey: this.labelKey, valueKey: this.valueKey });
- var _isOptionUnique = this.isOptionUnique({ option: option });
-
- // Don't add the same option twice.
- if (_isOptionUnique) {
- if (onNewOptionClick) {
- onNewOptionClick(option);
- } else {
- options.unshift(option);
-
- this.select.selectValue(option);
- }
- }
- }
- },
-
- filterOptions: function filterOptions() {
- var _props2 = this.props;
- var filterOptions = _props2.filterOptions;
- var isValidNewOption = _props2.isValidNewOption;
- var options = _props2.options;
- var promptTextCreator = _props2.promptTextCreator;
-
- // TRICKY Check currently selected options as well.
- // Don't display a create-prompt for a value that's selected.
- // This covers async edge-cases where a newly-created Option isn't yet in the async-loaded array.
- var excludeOptions = arguments[2] || [];
-
- var filteredOptions = filterOptions.apply(undefined, arguments) || [];
-
- if (isValidNewOption({ label: this.inputValue })) {
- var _newOptionCreator = this.props.newOptionCreator;
-
- var option = _newOptionCreator({
- label: this.inputValue,
- labelKey: this.labelKey,
- valueKey: this.valueKey
- });
-
- // TRICKY Compare to all options (not just filtered options) in case option has already been selected).
- // For multi-selects, this would remove it from the filtered list.
- var _isOptionUnique2 = this.isOptionUnique({
- option: option,
- options: excludeOptions.concat(filteredOptions)
- });
-
- if (_isOptionUnique2) {
- var _prompt = promptTextCreator(this.inputValue);
-
- this._createPlaceholderOption = _newOptionCreator({
- label: _prompt,
- labelKey: this.labelKey,
- valueKey: this.valueKey
- });
-
- filteredOptions.unshift(this._createPlaceholderOption);
- }
- }
-
- return filteredOptions;
- },
-
- isOptionUnique: function isOptionUnique(_ref2) {
- var option = _ref2.option;
- var options = _ref2.options;
- var isOptionUnique = this.props.isOptionUnique;
-
- options = options || this.select.filterFlatOptions();
-
- return isOptionUnique({
- labelKey: this.labelKey,
- option: option,
- options: options,
- valueKey: this.valueKey
- });
- },
-
- menuRenderer: function menuRenderer(params) {
- var menuRenderer = this.props.menuRenderer;
-
- return menuRenderer(_extends({}, params, {
- onSelect: this.onOptionSelect,
- selectValue: this.onOptionSelect
- }));
- },
-
- onInputChange: function onInputChange(input) {
- var onInputChange = this.props.onInputChange;
-
- if (onInputChange) {
- onInputChange(input);
- }
-
- // This value may be needed in between Select mounts (when this.select is null)
- this.inputValue = input;
- },
-
- onInputKeyDown: function onInputKeyDown(event) {
- var _props3 = this.props;
- var shouldKeyDownEventCreateNewOption = _props3.shouldKeyDownEventCreateNewOption;
- var onInputKeyDown = _props3.onInputKeyDown;
-
- var focusedOption = this.select.getFocusedOption();
-
- if (focusedOption && focusedOption === this._createPlaceholderOption && shouldKeyDownEventCreateNewOption({ keyCode: event.keyCode })) {
- this.createNewOption();
-
- // Prevent decorated Select from doing anything additional with this keyDown event
- event.preventDefault();
- } else if (onInputKeyDown) {
- onInputKeyDown(event);
- }
- },
-
- onOptionSelect: function onOptionSelect(option, event) {
- if (option === this._createPlaceholderOption) {
- this.createNewOption();
- } else {
- this.select.selectValue(option);
- }
- },
-
- focus: function focus() {
- this.select.focus();
- },
-
- render: function render() {
- var _this = this;
-
- var _props4 = this.props;
- var newOptionCreator = _props4.newOptionCreator;
- var shouldKeyDownEventCreateNewOption = _props4.shouldKeyDownEventCreateNewOption;
-
- var restProps = _objectWithoutProperties(_props4, ['newOptionCreator', 'shouldKeyDownEventCreateNewOption']);
-
- var children = this.props.children;
-
- // We can't use destructuring default values to set the children,
- // because it won't apply work if `children` is null. A falsy check is
- // more reliable in real world use-cases.
- if (!children) {
- children = defaultChildren;
- }
-
- var props = _extends({}, restProps, {
- allowCreate: true,
- filterOptions: this.filterOptions,
- menuRenderer: this.menuRenderer,
- onInputChange: this.onInputChange,
- onInputKeyDown: this.onInputKeyDown,
- ref: function ref(_ref) {
- _this.select = _ref;
-
- // These values may be needed in between Select mounts (when this.select is null)
- if (_ref) {
- _this.labelKey = _ref.props.labelKey;
- _this.valueKey = _ref.props.valueKey;
- }
- }
- });
-
- return children(props);
- }
-});
-
-function defaultChildren(props) {
- return _react2['default'].createElement(_Select2['default'], props);
-};
-
-function isOptionUnique(_ref3) {
- var option = _ref3.option;
- var options = _ref3.options;
- var labelKey = _ref3.labelKey;
- var valueKey = _ref3.valueKey;
-
- return options.filter(function (existingOption) {
- return existingOption[labelKey] === option[labelKey] || existingOption[valueKey] === option[valueKey];
- }).length === 0;
-};
-
-function isValidNewOption(_ref4) {
- var label = _ref4.label;
-
- return !!label;
-};
-
-function newOptionCreator(_ref5) {
- var label = _ref5.label;
- var labelKey = _ref5.labelKey;
- var valueKey = _ref5.valueKey;
-
- var option = {};
- option[valueKey] = label;
- option[labelKey] = label;
- option.className = 'Select-create-option-placeholder';
- return option;
-};
-
-function promptTextCreator(label) {
- return 'Create option "' + label + '"';
-}
-
-function shouldKeyDownEventCreateNewOption(_ref6) {
- var keyCode = _ref6.keyCode;
-
- switch (keyCode) {
- case 9: // TAB
- case 13: // ENTER
- case 188:
- // COMMA
- return true;
- }
-
- return false;
-};
-
-module.exports = Creatable;
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"./Select":7,"./utils/defaultFilterOptions":11,"./utils/defaultMenuRenderer":12,"create-react-class":undefined,"prop-types":undefined}],4:[function(require,module,exports){
-(function (global){
-'use strict';
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-var _react = (typeof window !== "undefined" ? window['React'] : typeof global !== "undefined" ? global['React'] : null);
-
-var _react2 = _interopRequireDefault(_react);
-
-var _createReactClass = require('create-react-class');
-
-var _createReactClass2 = _interopRequireDefault(_createReactClass);
-
-var _propTypes = require('prop-types');
-
-var _propTypes2 = _interopRequireDefault(_propTypes);
-
-var Dropdown = (0, _createReactClass2['default'])({
- propTypes: {
- children: _propTypes2['default'].node
- },
- render: function render() {
- // This component adds no markup
- return this.props.children;
- }
-});
-
-module.exports = Dropdown;
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"create-react-class":undefined,"prop-types":undefined}],5:[function(require,module,exports){
-(function (global){
-'use strict';
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-var _react = (typeof window !== "undefined" ? window['React'] : typeof global !== "undefined" ? global['React'] : null);
-
-var _react2 = _interopRequireDefault(_react);
-
-var _createReactClass = require('create-react-class');
-
-var _createReactClass2 = _interopRequireDefault(_createReactClass);
-
-var _propTypes = require('prop-types');
-
-var _propTypes2 = _interopRequireDefault(_propTypes);
-
-var _classnames = (typeof window !== "undefined" ? window['classNames'] : typeof global !== "undefined" ? global['classNames'] : null);
-
-var _classnames2 = _interopRequireDefault(_classnames);
-
-var Option = (0, _createReactClass2['default'])({
- propTypes: {
- children: _propTypes2['default'].node,
- className: _propTypes2['default'].string, // className (based on mouse position)
- instancePrefix: _propTypes2['default'].string.isRequired, // unique prefix for the ids (used for aria)
- isDisabled: _propTypes2['default'].bool, // the option is disabled
- isFocused: _propTypes2['default'].bool, // the option is focused
- isSelected: _propTypes2['default'].bool, // the option is selected
- onFocus: _propTypes2['default'].func, // method to handle mouseEnter on option element
- onSelect: _propTypes2['default'].func, // method to handle click on option element
- onUnfocus: _propTypes2['default'].func, // method to handle mouseLeave on option element
- option: _propTypes2['default'].object.isRequired, // object that is base for that option
- optionIndex: _propTypes2['default'].number },
- // index of the option, used to generate unique ids for aria
- blockEvent: 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;
- }
- },
-
- handleMouseDown: function handleMouseDown(event) {
- event.preventDefault();
- event.stopPropagation();
- this.props.onSelect(this.props.option, event);
- },
-
- handleMouseEnter: function handleMouseEnter(event) {
- this.onFocus(event);
- },
-
- handleMouseMove: function handleMouseMove(event) {
- this.onFocus(event);
- },
-
- handleTouchEnd: function handleTouchEnd(event) {
- // Check if the view is being dragged, In this case
- // we don't want to fire the click event (because the user only wants to scroll)
- if (this.dragging) return;
-
- this.handleMouseDown(event);
- },
-
- handleTouchMove: function handleTouchMove(event) {
- // Set a flag that the view is being dragged
- this.dragging = true;
- },
-
- handleTouchStart: function handleTouchStart(event) {
- // Set a flag that the view is not being dragged
- this.dragging = false;
- },
-
- onFocus: function onFocus(event) {
- if (!this.props.isFocused) {
- this.props.onFocus(this.props.option, event);
- }
- },
- render: function render() {
- var _props = this.props;
- var option = _props.option;
- var instancePrefix = _props.instancePrefix;
- var optionIndex = _props.optionIndex;
-
- var className = (0, _classnames2['default'])(this.props.className, option.className);
-
- return option.disabled ? _react2['default'].createElement(
- 'div',
- { className: className,
- onMouseDown: this.blockEvent,
- onClick: this.blockEvent },
- this.props.children
- ) : _react2['default'].createElement(
- 'div',
- { className: className,
- style: option.style,
- role: 'option',
- onMouseDown: this.handleMouseDown,
- onMouseEnter: this.handleMouseEnter,
- onMouseMove: this.handleMouseMove,
- onTouchStart: this.handleTouchStart,
- onTouchMove: this.handleTouchMove,
- onTouchEnd: this.handleTouchEnd,
- id: instancePrefix + '-option-' + optionIndex,
- title: option.title },
- this.props.children
- );
- }
-});
-
-module.exports = Option;
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"create-react-class":undefined,"prop-types":undefined}],6:[function(require,module,exports){
-(function (global){
-'use strict';
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-var _react = (typeof window !== "undefined" ? window['React'] : typeof global !== "undefined" ? global['React'] : null);
-
-var _react2 = _interopRequireDefault(_react);
-
-var _createReactClass = require('create-react-class');
-
-var _createReactClass2 = _interopRequireDefault(_createReactClass);
-
-var _propTypes = require('prop-types');
-
-var _propTypes2 = _interopRequireDefault(_propTypes);
-
-var _classnames = (typeof window !== "undefined" ? window['classNames'] : typeof global !== "undefined" ? global['classNames'] : null);
-
-var _classnames2 = _interopRequireDefault(_classnames);
-
-var OptionGroup = (0, _createReactClass2['default'])({
- propTypes: {
- children: _propTypes2['default'].any,
- className: _propTypes2['default'].string, // className (based on mouse position)
- label: _propTypes2['default'].node, // the heading to show above the child options
- option: _propTypes2['default'].object.isRequired },
-
- // object that is base for that option group
- blockEvent: 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;
- }
- },
-
- handleMouseDown: function handleMouseDown(event) {
- event.preventDefault();
- event.stopPropagation();
- },
-
- handleTouchEnd: function handleTouchEnd(event) {
- // Check if the view is being dragged, In this case
- // we don't want to fire the click event (because the user only wants to scroll)
- if (this.dragging) return;
-
- this.handleMouseDown(event);
- },
-
- handleTouchMove: function handleTouchMove(event) {
- // Set a flag that the view is being dragged
- this.dragging = true;
- },
-
- handleTouchStart: function handleTouchStart(event) {
- // Set a flag that the view is not being dragged
- this.dragging = false;
- },
-
- render: function render() {
- var option = this.props.option;
-
- var className = (0, _classnames2['default'])(this.props.className, option.className);
-
- return option.disabled ? _react2['default'].createElement(
- 'div',
- { className: className,
- onMouseDown: this.blockEvent,
- onClick: this.blockEvent },
- this.props.children
- ) : _react2['default'].createElement(
- 'div',
- { className: className,
- style: option.style,
- onMouseDown: this.handleMouseDown,
- onMouseEnter: this.handleMouseEnter,
- onMouseMove: this.handleMouseMove,
- onTouchStart: this.handleTouchStart,
- onTouchMove: this.handleTouchMove,
- onTouchEnd: this.handleTouchEnd,
- title: option.title },
- _react2['default'].createElement(
- 'div',
- { className: 'Select-option-group-label' },
- this.props.label
- ),
- this.props.children
- );
- }
-});
-
-module.exports = OptionGroup;
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"create-react-class":undefined,"prop-types":undefined}],7:[function(require,module,exports){
-(function (global){
-/*!
- Copyright (c) 2016 Jed Watson.
- Licensed under the MIT License (MIT), see
- http://jedwatson.github.io/react-select
-*/
-
-'use strict';
-
-Object.defineProperty(exports, '__esModule', {
- value: true
-});
-
-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; };
-
-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; }
-
-function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
-
-var _react = (typeof window !== "undefined" ? window['React'] : typeof global !== "undefined" ? global['React'] : null);
-
-var _react2 = _interopRequireDefault(_react);
-
-var _createReactClass = require('create-react-class');
-
-var _createReactClass2 = _interopRequireDefault(_createReactClass);
-
-var _propTypes = require('prop-types');
-
-var _propTypes2 = _interopRequireDefault(_propTypes);
-
-var _reactDom = (typeof window !== "undefined" ? window['ReactDOM'] : typeof global !== "undefined" ? global['ReactDOM'] : null);
-
-var _reactDom2 = _interopRequireDefault(_reactDom);
-
-var _reactInputAutosize = (typeof window !== "undefined" ? window['AutosizeInput'] : typeof global !== "undefined" ? global['AutosizeInput'] : null);
-
-var _reactInputAutosize2 = _interopRequireDefault(_reactInputAutosize);
-
-var _classnames = (typeof window !== "undefined" ? window['classNames'] : typeof global !== "undefined" ? global['classNames'] : null);
-
-var _classnames2 = _interopRequireDefault(_classnames);
-
-var _utilsDefaultArrowRenderer = require('./utils/defaultArrowRenderer');
-
-var _utilsDefaultArrowRenderer2 = _interopRequireDefault(_utilsDefaultArrowRenderer);
-
-var _utilsDefaultFilterOptions = require('./utils/defaultFilterOptions');
-
-var _utilsDefaultFilterOptions2 = _interopRequireDefault(_utilsDefaultFilterOptions);
-
-var _utilsDefaultMenuRenderer = require('./utils/defaultMenuRenderer');
-
-var _utilsDefaultMenuRenderer2 = _interopRequireDefault(_utilsDefaultMenuRenderer);
-
-var _utilsDefaultClearRenderer = require('./utils/defaultClearRenderer');
-
-var _utilsDefaultClearRenderer2 = _interopRequireDefault(_utilsDefaultClearRenderer);
-
-var _Async = require('./Async');
-
-var _Async2 = _interopRequireDefault(_Async);
-
-var _AsyncCreatable = require('./AsyncCreatable');
-
-var _AsyncCreatable2 = _interopRequireDefault(_AsyncCreatable);
-
-var _Creatable = require('./Creatable');
-
-var _Creatable2 = _interopRequireDefault(_Creatable);
-
-var _Dropdown = require('./Dropdown');
-
-var _Dropdown2 = _interopRequireDefault(_Dropdown);
-
-var _Option = require('./Option');
-
-var _Option2 = _interopRequireDefault(_Option);
-
-var _OptionGroup = require('./OptionGroup');
-
-var _OptionGroup2 = _interopRequireDefault(_OptionGroup);
-
-var _Value = require('./Value');
-
-var _Value2 = _interopRequireDefault(_Value);
-
-function clone(obj) {
- var copy = {};
- for (var attr in obj) {
- if (obj.hasOwnProperty(attr)) {
- copy[attr] = obj[attr];
- };
- }
- return copy;
-}
-
-function isGroup(option) {
- return option && Array.isArray(option.options);
-}
-
-function stringifyValue(value) {
- var valueType = typeof value;
- if (valueType === 'string') {
- return value;
- } else if (valueType === 'object') {
- return JSON.stringify(value);
- } else if (valueType === 'number' || valueType === 'boolean') {
- return String(value);
- } else {
- return '';
- }
-}
-
-var stringOrNode = _propTypes2['default'].oneOfType([_propTypes2['default'].string, _propTypes2['default'].node]);
-
-var instanceId = 1;
-
-var invalidOptions = {};
-
-var Select = (0, _createReactClass2['default'])({
-
- displayName: 'Select',
-
- propTypes: {
- addLabelText: _propTypes2['default'].string, // placeholder displayed when you want to add a label on a multi-value input
- '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)
- 'aria-labelledby': _propTypes2['default'].string, // HTML ID of an element that should be used as the label (for assistive tech)
- arrowRenderer: _propTypes2['default'].func, // Create drop-down caret element
- autoBlur: _propTypes2['default'].bool, // automatically blur the component when an option is selected
- autofocus: _propTypes2['default'].bool, // autofocus the component on mount
- autosize: _propTypes2['default'].bool, // whether to enable autosizing or not
- backspaceRemoves: _propTypes2['default'].bool, // whether backspace removes an item if there is no text input
- backspaceToRemoveMessage: _propTypes2['default'].string, // Message to use for screenreaders to press backspace to remove the current item - {label} is replaced with the item label
- className: _propTypes2['default'].string, // className for the outer element
- clearAllText: stringOrNode, // title for the "clear" control when multi: true
- clearRenderer: _propTypes2['default'].func, // create clearable x element
- clearValueText: stringOrNode, // title for the "clear" control
- clearable: _propTypes2['default'].bool, // should it be possible to reset value
- deleteRemoves: _propTypes2['default'].bool, // whether backspace removes an item if there is no text input
- delimiter: _propTypes2['default'].string, // delimiter to use to join multiple values for the hidden field value
- disabled: _propTypes2['default'].bool, // whether the Select is disabled or not
- dropdownComponent: _propTypes2['default'].func, // dropdown component to render the menu in
- escapeClearsValue: _propTypes2['default'].bool, // whether escape clears the value when the menu is closed
- filterOption: _propTypes2['default'].func, // method to filter a single option (option, filterString)
- filterOptions: _propTypes2['default'].any, // boolean to enable default filtering or function to filter the options array ([options], filterString, [values])
- ignoreAccents: _propTypes2['default'].bool, // whether to strip diacritics when filtering
- ignoreCase: _propTypes2['default'].bool, // whether to perform case-insensitive filtering
- inputProps: _propTypes2['default'].object, // custom attributes for the Input
- inputRenderer: _propTypes2['default'].func, // returns a custom input component
- instanceId: _propTypes2['default'].string, // set the components instanceId
- isLoading: _propTypes2['default'].bool, // whether the Select is loading externally or not (such as options being loaded)
- isOpen: _propTypes2['default'].bool, // whether the Select dropdown menu is open or not
- joinValues: _propTypes2['default'].bool, // joins multiple values into a single form field with the delimiter (legacy mode)
- labelKey: _propTypes2['default'].string, // path of the label value in option objects
- matchPos: _propTypes2['default'].string, // (any|start) match the start or entire string when filtering
- matchProp: _propTypes2['default'].string, // (any|label|value) which option property to filter on
- menuBuffer: _propTypes2['default'].number, // optional buffer (in px) between the bottom of the viewport and the bottom of the menu
- menuContainerStyle: _propTypes2['default'].object, // optional style to apply to the menu container
- menuRenderer: _propTypes2['default'].func, // renders a custom menu with options
- menuStyle: _propTypes2['default'].object, // optional style to apply to the menu
- multi: _propTypes2['default'].bool, // multi-value input
- name: _propTypes2['default'].string, // generates a hidden tag with this field name for html forms
- noResultsText: stringOrNode, // placeholder displayed when there are no matching search results
- onBlur: _propTypes2['default'].func, // onBlur handler: function (event) {}
- onBlurResetsInput: _propTypes2['default'].bool, // whether input is cleared on blur
- onChange: _propTypes2['default'].func, // onChange handler: function (newValue) {}
- onClose: _propTypes2['default'].func, // fires when the menu is closed
- onCloseResetsInput: _propTypes2['default'].bool, // whether input is cleared when menu is closed through the arrow
- onFocus: _propTypes2['default'].func, // onFocus handler: function (event) {}
- onInputChange: _propTypes2['default'].func, // onInputChange handler: function (inputValue) {}
- onInputKeyDown: _propTypes2['default'].func, // input keyDown handler: function (event) {}
- onMenuScrollToBottom: _propTypes2['default'].func, // fires when the menu is scrolled to the bottom; can be used to paginate options
- onOpen: _propTypes2['default'].func, // fires when the menu is opened
- onValueClick: _propTypes2['default'].func, // onClick handler for value labels: function (value, event) {}
- openAfterFocus: _propTypes2['default'].bool, // boolean to enable opening dropdown when focused
- openOnFocus: _propTypes2['default'].bool, // always open options menu on focus
- optionClassName: _propTypes2['default'].string, // additional class(es) to apply to the elements
- optionComponent: _propTypes2['default'].func, // option component to render in dropdown
- optionGroupComponent: _propTypes2['default'].func, // option group component to render in dropdown
- optionRenderer: _propTypes2['default'].func, // optionRenderer: function (option) {}
- options: _propTypes2['default'].array, // array of options
- pageSize: _propTypes2['default'].number, // number of entries to page when using page up/down keys
- placeholder: stringOrNode, // field placeholder, displayed when there's no value
- renderInvalidValues: _propTypes2['default'].bool, // boolean to enable rendering values that do not match any options
- required: _propTypes2['default'].bool, // applies HTML5 required attribute when needed
- resetValue: _propTypes2['default'].any, // value to use when you clear the control
- scrollMenuIntoView: _propTypes2['default'].bool, // boolean to enable the viewport to shift so that the full menu fully visible when engaged
- searchable: _propTypes2['default'].bool, // whether to enable searching feature or not
- simpleValue: _propTypes2['default'].bool, // pass the value to onChange as a simple value (legacy pre 1.0 mode), defaults to false
- style: _propTypes2['default'].object, // optional style to apply to the control
- tabIndex: _propTypes2['default'].string, // optional tab index of the control
- tabSelectsValue: _propTypes2['default'].bool, // whether to treat tabbing out while focused to be value selection
- value: _propTypes2['default'].any, // initial field value
- valueComponent: _propTypes2['default'].func, // value component to render
- valueKey: _propTypes2['default'].string, // path of the label value in option objects
- valueRenderer: _propTypes2['default'].func, // valueRenderer: function (option) {}
- wrapperStyle: _propTypes2['default'].object },
-
- // optional style to apply to the component wrapper
- statics: { Async: _Async2['default'], AsyncCreatable: _AsyncCreatable2['default'], Creatable: _Creatable2['default'] },
-
- getDefaultProps: function getDefaultProps() {
- return {
- addLabelText: 'Add "{label}"?',
- arrowRenderer: _utilsDefaultArrowRenderer2['default'],
- autosize: true,
- backspaceRemoves: true,
- backspaceToRemoveMessage: 'Press backspace to remove {label}',
- clearable: true,
- clearAllText: 'Clear all',
- clearRenderer: _utilsDefaultClearRenderer2['default'],
- clearValueText: 'Clear value',
- deleteRemoves: true,
- delimiter: ',',
- disabled: false,
- dropdownComponent: _Dropdown2['default'],
- escapeClearsValue: true,
- filterOptions: _utilsDefaultFilterOptions2['default'],
- ignoreAccents: true,
- ignoreCase: true,
- inputProps: {},
- isLoading: false,
- joinValues: false,
- labelKey: 'label',
- matchPos: 'any',
- matchProp: 'any',
- menuBuffer: 0,
- menuRenderer: _utilsDefaultMenuRenderer2['default'],
- multi: false,
- noResultsText: 'No results found',
- onBlurResetsInput: true,
- onCloseResetsInput: true,
- optionComponent: _Option2['default'],
- optionGroupComponent: _OptionGroup2['default'],
- pageSize: 5,
- placeholder: 'Select...',
- renderInvalidValues: false,
- required: false,
- scrollMenuIntoView: true,
- searchable: true,
- simpleValue: false,
- tabSelectsValue: true,
- valueComponent: _Value2['default'],
- valueKey: 'value'
- };
- },
-
- getInitialState: function getInitialState() {
- return {
- inputValue: '',
- isFocused: false,
- isOpen: false,
- isPseudoFocused: false,
- required: false
- };
- },
-
- componentWillMount: function componentWillMount() {
- this._flatOptions = this.flattenOptions(this.props.options);
- this._instancePrefix = 'react-select-' + (this.props.instanceId || ++instanceId) + '-';
- var valueArray = this.getValueArray(this.props.value);
-
- if (this.props.required) {
- this.setState({
- required: this.handleRequired(valueArray[0], this.props.multi)
- });
- }
- },
-
- componentDidMount: function componentDidMount() {
- if (this.props.autofocus) {
- this.focus();
- }
- },
-
- componentWillReceiveProps: function componentWillReceiveProps(nextProps) {
- if (nextProps.options !== this.props.options) {
- this._flatOptions = this.flattenOptions(nextProps.options);
- }
-
- var valueArray = this.getValueArray(nextProps.value, nextProps);
-
- if (!nextProps.isOpen && this.props.isOpen) {
- this.closeMenu();
- }
-
- if (nextProps.required) {
- this.setState({
- required: this.handleRequired(valueArray[0], nextProps.multi)
- });
- }
- },
-
- componentWillUpdate: function componentWillUpdate(nextProps, nextState) {
- if (nextState.isOpen !== this.state.isOpen) {
- this.toggleTouchOutsideEvent(nextState.isOpen);
- var handler = nextState.isOpen ? nextProps.onOpen : nextProps.onClose;
- handler && handler();
- }
- },
-
- componentDidUpdate: function componentDidUpdate(prevProps, prevState) {
- // focus to the selected option
- if (this.menu && this.focused && this.state.isOpen && !this.hasScrolledToOption) {
- var focusedOptionNode = _reactDom2['default'].findDOMNode(this.focused);
- var focusedOptionPreviousSibling = focusedOptionNode.previousSibling;
- var focusedOptionParent = focusedOptionNode.parentElement;
- var menuNode = _reactDom2['default'].findDOMNode(this.menu);
- if (focusedOptionPreviousSibling) {
- menuNode.scrollTop = focusedOptionPreviousSibling.offsetTop;
- } else if (focusedOptionParent && focusedOptionParent === 'Select-menu') {
- menuNode.scrollTop = focusedOptionParent.offsetTop;
- } else {
- menuNode.scrollTop = focusedOptionNode.offsetTop;
- }
- this.hasScrolledToOption = true;
- } else if (!this.state.isOpen) {
- this.hasScrolledToOption = false;
- }
-
- if (this._scrollToFocusedOptionOnUpdate && this.focused && this.menu) {
- this._scrollToFocusedOptionOnUpdate = false;
- var focusedDOM = _reactDom2['default'].findDOMNode(this.focused);
- var menuDOM = _reactDom2['default'].findDOMNode(this.menu);
- var focusedRect = focusedDOM.getBoundingClientRect();
- var menuRect = menuDOM.getBoundingClientRect();
- if (focusedRect.bottom > menuRect.bottom || focusedRect.top < menuRect.top) {
- menuDOM.scrollTop = focusedDOM.offsetTop + focusedDOM.clientHeight - menuDOM.offsetHeight;
- }
- }
- if (this.props.scrollMenuIntoView && this.menuContainer) {
- var menuContainerRect = this.menuContainer.getBoundingClientRect();
- if (window.innerHeight < menuContainerRect.bottom + this.props.menuBuffer) {
- window.scrollBy(0, menuContainerRect.bottom + this.props.menuBuffer - window.innerHeight);
- }
- }
- if (prevProps.disabled !== this.props.disabled) {
- this.setState({ isFocused: false }); // eslint-disable-line react/no-did-update-set-state
- this.closeMenu();
- }
- },
-
- componentWillUnmount: function componentWillUnmount() {
- if (!document.removeEventListener && document.detachEvent) {
- document.detachEvent('ontouchstart', this.handleTouchOutside);
- } else {
- document.removeEventListener('touchstart', this.handleTouchOutside);
- }
- },
-
- toggleTouchOutsideEvent: function toggleTouchOutsideEvent(enabled) {
- if (enabled) {
- if (!document.addEventListener && document.attachEvent) {
- document.attachEvent('ontouchstart', this.handleTouchOutside);
- } else {
- document.addEventListener('touchstart', this.handleTouchOutside);
- }
- } else {
- if (!document.removeEventListener && document.detachEvent) {
- document.detachEvent('ontouchstart', this.handleTouchOutside);
- } else {
- document.removeEventListener('touchstart', this.handleTouchOutside);
- }
- }
- },
-
- handleTouchOutside: function handleTouchOutside(event) {
- // handle touch outside on ios to dismiss menu
- if (this.wrapper && !this.wrapper.contains(event.target) && this.menuContainer && !this.menuContainer.contains(event.target)) {
- this.closeMenu();
- }
- },
-
- focus: function focus() {
- if (!this.input) return;
- this.input.focus();
- },
-
- blurInput: function blurInput() {
- if (!this.input) return;
- this.input.blur();
- },
-
- handleTouchMove: function handleTouchMove(event) {
- // Set a flag that the view is being dragged
- this.dragging = true;
- },
-
- handleTouchStart: function handleTouchStart(event) {
- // Set a flag that the view is not being dragged
- this.dragging = false;
- },
-
- handleTouchEnd: function handleTouchEnd(event) {
- // Check if the view is being dragged, In this case
- // we don't want to fire the click event (because the user only wants to scroll)
- if (this.dragging) return;
-
- // Fire the mouse events
- this.handleMouseDown(event);
- },
-
- handleTouchEndClearValue: function handleTouchEndClearValue(event) {
- // Check if the view is being dragged, In this case
- // we don't want to fire the click event (because the user only wants to scroll)
- if (this.dragging) return;
-
- // Clear the value
- this.clearValue(event);
- },
-
- handleMouseDown: function handleMouseDown(event) {
- // if the event was triggered by a mousedown and not the primary
- // button, or if the component is disabled, ignore it.
- if (this.props.disabled || event.type === 'mousedown' && event.button !== 0) {
- return;
- }
-
- if (event.target.tagName === 'INPUT') {
- return;
- }
-
- // prevent default event handlers
- event.stopPropagation();
- event.preventDefault();
-
- // for the non-searchable select, toggle the menu
- if (!this.props.searchable) {
- this.focus();
- return this.setState({
- isOpen: !this.state.isOpen
- });
- }
-
- if (this.state.isFocused) {
- // On iOS, we can get into a state where we think the input is focused but it isn't really,
- // since iOS ignores programmatic calls to input.focus() that weren't triggered by a click event.
- // Call focus() again here to be safe.
- this.focus();
-
- var input = this.input;
- if (typeof input.getInput === 'function') {
- // Get the actual DOM input if the ref is an component
- input = input.getInput();
- }
-
- // clears the value so that the cursor will be at the end of input when the component re-renders
- input.value = '';
-
- // if the input is focused, ensure the menu is open
- this.setState({
- isOpen: true,
- isPseudoFocused: false
- });
- } else {
- // otherwise, focus the input and open the menu
- this._openAfterFocus = true;
- this.focus();
- }
- },
-
- handleMouseDownOnArrow: function handleMouseDownOnArrow(event) {
- // if the event was triggered by a mousedown and not the primary
- // button, or if the component is disabled, ignore it.
- if (this.props.disabled || event.type === 'mousedown' && event.button !== 0) {
- return;
- }
- // If the menu isn't open, let the event bubble to the main handleMouseDown
- if (!this.state.isOpen) {
- return;
- }
- // prevent default event handlers
- event.stopPropagation();
- event.preventDefault();
- // close the menu
- this.closeMenu();
- },
-
- handleMouseDownOnMenu: function handleMouseDownOnMenu(event) {
- // if the event was triggered by a mousedown and not the primary
- // button, or if the component is disabled, ignore it.
- if (this.props.disabled || event.type === 'mousedown' && event.button !== 0) {
- return;
- }
- event.stopPropagation();
- event.preventDefault();
-
- this._openAfterFocus = true;
- this.focus();
- },
-
- closeMenu: function closeMenu() {
- if (this.props.onCloseResetsInput) {
- this.setState({
- isOpen: false,
- isPseudoFocused: this.state.isFocused && !this.props.multi,
- inputValue: ''
- });
- } else {
- this.setState({
- isOpen: false,
- isPseudoFocused: this.state.isFocused && !this.props.multi,
- inputValue: this.state.inputValue
- });
- }
- this.hasScrolledToOption = false;
- },
-
- handleInputFocus: function handleInputFocus(event) {
- if (this.props.disabled) return;
- var isOpen = this.state.isOpen || this._openAfterFocus || this.props.openOnFocus;
- if (this.props.onFocus) {
- this.props.onFocus(event);
- }
- this.setState({
- isFocused: true,
- isOpen: isOpen
- });
- this._openAfterFocus = false;
- },
-
- handleInputBlur: function handleInputBlur(event) {
- // The check for menu.contains(activeElement) is necessary to prevent IE11's scrollbar from closing the menu in certain contexts.
- if (this.menu && (this.menu === document.activeElement || this.menu.contains(document.activeElement))) {
- this.focus();
- return;
- }
-
- if (this.props.onBlur) {
- this.props.onBlur(event);
- }
- var onBlurredState = {
- isFocused: false,
- isOpen: false,
- isPseudoFocused: false
- };
- if (this.props.onBlurResetsInput) {
- onBlurredState.inputValue = '';
- }
- this.setState(onBlurredState);
- },
-
- handleInputChange: function handleInputChange(event) {
- var newInputValue = event.target.value;
-
- if (this.state.inputValue !== event.target.value && this.props.onInputChange) {
- var nextState = this.props.onInputChange(newInputValue);
- // Note: != used deliberately here to catch undefined and null
- if (nextState != null && typeof nextState !== 'object') {
- newInputValue = '' + nextState;
- }
- }
-
- this.setState({
- isOpen: true,
- isPseudoFocused: false,
- inputValue: newInputValue
- });
- },
-
- handleKeyDown: function handleKeyDown(event) {
- if (this.props.disabled) return;
-
- if (typeof this.props.onInputKeyDown === 'function') {
- this.props.onInputKeyDown(event);
- if (event.defaultPrevented) {
- return;
- }
- }
-
- switch (event.keyCode) {
- case 8:
- // backspace
- if (!this.state.inputValue && this.props.backspaceRemoves) {
- event.preventDefault();
- this.popValue();
- }
- return;
- case 9:
- // tab
- if (event.shiftKey || !this.state.isOpen || !this.props.tabSelectsValue) {
- return;
- }
- this.selectFocusedOption();
- return;
- case 13:
- // enter
- if (!this.state.isOpen) return;
- event.stopPropagation();
- this.selectFocusedOption();
- break;
- case 27:
- // escape
- if (this.state.isOpen) {
- this.closeMenu();
- event.stopPropagation();
- } else if (this.props.clearable && this.props.escapeClearsValue) {
- this.clearValue(event);
- event.stopPropagation();
- }
- break;
- case 38:
- // up
- this.focusPreviousOption();
- break;
- case 40:
- // down
- this.focusNextOption();
- break;
- case 33:
- // page up
- this.focusPageUpOption();
- break;
- case 34:
- // page down
- this.focusPageDownOption();
- break;
- case 35:
- // end key
- if (event.shiftKey) {
- return;
- }
- this.focusEndOption();
- break;
- case 36:
- // home key
- if (event.shiftKey) {
- return;
- }
- this.focusStartOption();
- break;
- case 46:
- // backspace
- if (!this.state.inputValue && this.props.deleteRemoves) {
- event.preventDefault();
- this.popValue();
- }
- return;
- default:
- return;
- }
- event.preventDefault();
- },
-
- handleValueClick: function handleValueClick(option, event) {
- if (!this.props.onValueClick) return;
- this.props.onValueClick(option, event);
- },
-
- handleMenuScroll: function handleMenuScroll(event) {
- if (!this.props.onMenuScrollToBottom) return;
- var target = event.target;
-
- if (target.scrollHeight > target.offsetHeight && !(target.scrollHeight - target.offsetHeight - target.scrollTop)) {
- this.props.onMenuScrollToBottom();
- }
- },
-
- handleRequired: function handleRequired(value, multi) {
- if (!value) return true;
- return multi ? value.length === 0 : Object.keys(value).length === 0;
- },
-
- getOptionLabel: 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
- */
- getValueArray: function getValueArray(value, nextProps) {
- var _this = this;
-
- /** support optionally passing in the `nextProps` so `componentWillReceiveProps` updates will function as expected */
- var props = typeof nextProps === 'object' ? nextProps : this.props;
- if (props.multi) {
- if (typeof value === 'string') value = value.split(props.delimiter);
- if (!Array.isArray(value)) {
- if (value === null || value === undefined) return [];
- value = [value];
- }
- return value.map(function (value) {
- return _this.expandValue(value, props);
- }).filter(function (i) {
- return i;
- });
- }
- var expandedValue = this.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)
- */
- expandValue: function expandValue(value, props) {
- var valueType = typeof value;
- if (valueType !== 'string' && valueType !== 'number' && valueType !== 'boolean') return value;
- var _props = this.props;
- var labelKey = _props.labelKey;
- var valueKey = _props.valueKey;
- var renderInvalidValues = _props.renderInvalidValues;
-
- var options = this._flatOptions;
- if (!options || value === '') return;
- for (var i = 0; i < options.length; i++) {
- if (options[i][valueKey] === value) return options[i];
- }
-
- // no matching option, return an invalid option if renderInvalidValues is enabled
- if (renderInvalidValues) {
- var _ref;
-
- invalidOptions[value] = invalidOptions[value] || (_ref = {
- invalid: true
- }, _defineProperty(_ref, labelKey, value), _defineProperty(_ref, valueKey, value), _ref);
- return invalidOptions[value];
- }
- },
-
- setValue: function setValue(value) {
- var _this2 = this;
-
- if (this.props.autoBlur) {
- this.blurInput();
- }
- if (!this.props.onChange) return;
- if (this.props.required) {
- var required = this.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];
- }
- this.props.onChange(value);
- },
-
- selectValue: function selectValue(value) {
- var _this3 = this;
-
- //NOTE: update value in the callback to make sure the input value is empty so that there are no styling issues (Chrome had issue otherwise)
- this.hasScrolledToOption = false;
- if (this.props.multi) {
- this.setState({
- inputValue: '',
- focusedIndex: null
- }, function () {
- _this3.addValue(value);
- });
- } else {
- this.setState({
- isOpen: false,
- inputValue: '',
- isPseudoFocused: this.state.isFocused
- }, function () {
- _this3.setValue(value);
- });
- }
- },
-
- addValue: function addValue(value) {
- var valueArray = this.getValueArray(this.props.value);
- var visibleOptions = this._visibleOptions.filter(function (val) {
- return !val.disabled;
- });
- var lastValueIndex = visibleOptions.indexOf(value);
- this.setValue(valueArray.concat(value));
- if (visibleOptions.length - 1 === lastValueIndex) {
- // the last option was selected; focus the second-last one
- this.focusOption(visibleOptions[lastValueIndex - 1]);
- } else if (visibleOptions.length > lastValueIndex) {
- // focus the option below the selected one
- this.focusOption(visibleOptions[lastValueIndex + 1]);
- }
- },
-
- popValue: function popValue() {
- var valueArray = this.getValueArray(this.props.value);
- if (!valueArray.length) return;
- if (valueArray[valueArray.length - 1].clearableValue === false) return;
- this.setValue(valueArray.slice(0, valueArray.length - 1));
- },
-
- removeValue: function removeValue(value) {
- var valueArray = this.getValueArray(this.props.value);
- this.setValue(valueArray.filter(function (i) {
- return i !== value;
- }));
- },
-
- clearValue: function clearValue(event) {
- // if the event was triggered by a mousedown and not the primary
- // button, ignore it.
- if (event && event.type === 'mousedown' && event.button !== 0) {
- return;
- }
- event.stopPropagation();
- event.preventDefault();
- this.setValue(this.getResetValue());
- this.setState({
- isOpen: false,
- inputValue: ''
- }, this.focus);
- },
-
- getResetValue: function getResetValue() {
- if (this.props.resetValue !== undefined) {
- return this.props.resetValue;
- } else if (this.props.multi) {
- return [];
- } else {
- return null;
- }
- },
-
- focusOption: function focusOption(option) {
- this.setState({
- focusedOption: option
- });
- },
-
- focusNextOption: function focusNextOption() {
- this.focusAdjacentOption('next');
- },
-
- focusPreviousOption: function focusPreviousOption() {
- this.focusAdjacentOption('previous');
- },
-
- focusPageUpOption: function focusPageUpOption() {
- this.focusAdjacentOption('page_up');
- },
-
- focusPageDownOption: function focusPageDownOption() {
- this.focusAdjacentOption('page_down');
- },
-
- focusStartOption: function focusStartOption() {
- this.focusAdjacentOption('start');
- },
-
- focusEndOption: function focusEndOption() {
- this.focusAdjacentOption('end');
- },
-
- focusAdjacentOption: function focusAdjacentOption(dir) {
- var options = this._visibleOptions.map(function (option, index) {
- return { option: option, index: index };
- }).filter(function (option) {
- return !option.option.disabled;
- });
- 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)
- });
- return;
- }
- if (!options.length) return;
- var focusedIndex = -1;
- for (var i = 0; i < options.length; i++) {
- if (this._focusedOption === options[i].option) {
- focusedIndex = i;
- break;
- }
- }
- if (dir === 'next' && focusedIndex !== -1) {
- focusedIndex = (focusedIndex + 1) % options.length;
- } else if (dir === 'previous') {
- if (focusedIndex > 0) {
- focusedIndex = focusedIndex - 1;
- } else {
- focusedIndex = options.length - 1;
- }
- } else if (dir === 'start') {
- focusedIndex = 0;
- } else if (dir === 'end') {
- focusedIndex = options.length - 1;
- } else if (dir === 'page_up') {
- var potentialIndex = focusedIndex - this.props.pageSize;
- if (potentialIndex < 0) {
- focusedIndex = 0;
- } else {
- focusedIndex = potentialIndex;
- }
- } else if (dir === 'page_down') {
- var potentialIndex = focusedIndex + this.props.pageSize;
- if (potentialIndex > options.length - 1) {
- focusedIndex = options.length - 1;
- } else {
- focusedIndex = potentialIndex;
- }
- }
-
- if (focusedIndex === -1) {
- focusedIndex = 0;
- }
-
- this.setState({
- focusedIndex: options[focusedIndex].index,
- focusedOption: options[focusedIndex].option
- });
- },
-
- getFocusedOption: function getFocusedOption() {
- return this._focusedOption;
- },
-
- getInputValue: function getInputValue() {
- return this.state.inputValue;
- },
-
- selectFocusedOption: function selectFocusedOption() {
- if (this._focusedOption) {
- return this.selectValue(this._focusedOption);
- }
- },
-
- renderLoading: function renderLoading() {
- if (!this.props.isLoading) return;
- return _react2['default'].createElement(
- 'span',
- { className: 'Select-loading-zone', 'aria-hidden': 'true' },
- _react2['default'].createElement('span', { className: 'Select-loading' })
- );
- },
-
- renderValue: function renderValue(valueArray, isOpen) {
- var _this4 = this;
-
- var renderLabel = this.props.valueRenderer || this.getOptionLabel;
- var ValueComponent = this.props.valueComponent;
- if (!valueArray.length) {
- return !this.state.inputValue ? _react2['default'].createElement(
- 'div',
- { className: 'Select-placeholder' },
- this.props.placeholder
- ) : null;
- }
- var onClick = this.props.onValueClick ? this.handleValueClick : null;
- if (this.props.multi) {
- return valueArray.map(function (value, i) {
- return _react2['default'].createElement(
- ValueComponent,
- {
- id: _this4._instancePrefix + '-value-' + i,
- instancePrefix: _this4._instancePrefix,
- disabled: _this4.props.disabled || value.clearableValue === false,
- key: 'value-' + i + '-' + value[_this4.props.valueKey],
- onClick: onClick,
- onRemove: _this4.removeValue,
- value: value
- },
- renderLabel(value, i),
- _react2['default'].createElement(
- 'span',
- { className: 'Select-aria-only' },
- ' '
- )
- );
- });
- } else if (!this.state.inputValue) {
- if (isOpen) onClick = null;
- return _react2['default'].createElement(
- ValueComponent,
- {
- id: this._instancePrefix + '-value-item',
- disabled: this.props.disabled,
- instancePrefix: this._instancePrefix,
- onClick: onClick,
- value: valueArray[0]
- },
- renderLabel(valueArray[0])
- );
- }
- },
-
- renderInput: function renderInput(valueArray, focusedOptionIndex) {
- var _classNames,
- _this5 = this;
-
- var className = (0, _classnames2['default'])('Select-input', this.props.inputProps.className);
- var isOpen = !!this.state.isOpen;
-
- var ariaOwns = (0, _classnames2['default'])((_classNames = {}, _defineProperty(_classNames, this._instancePrefix + '-list', isOpen), _defineProperty(_classNames, this._instancePrefix + '-backspace-remove-message', this.props.multi && !this.props.disabled && this.state.isFocused && !this.state.inputValue), _classNames));
-
- // TODO: Check how this project includes Object.assign()
- var inputProps = _extends({}, this.props.inputProps, {
- role: 'combobox',
- 'aria-expanded': '' + isOpen,
- 'aria-owns': ariaOwns,
- 'aria-haspopup': '' + isOpen,
- 'aria-activedescendant': isOpen ? this._instancePrefix + '-option-' + focusedOptionIndex : this._instancePrefix + '-value',
- 'aria-describedby': this.props['aria-describedby'],
- 'aria-labelledby': this.props['aria-labelledby'],
- 'aria-label': this.props['aria-label'],
- className: className,
- tabIndex: this.props.tabIndex,
- onBlur: this.handleInputBlur,
- onChange: this.handleInputChange,
- onFocus: this.handleInputFocus,
- ref: function ref(_ref2) {
- return _this5.input = _ref2;
- },
- required: this.state.required,
- value: this.state.inputValue
- });
-
- if (this.props.inputRenderer) {
- return this.props.inputRenderer(inputProps);
- }
-
- if (this.props.disabled || !this.props.searchable) {
- var _props$inputProps = this.props.inputProps;
- var inputClassName = _props$inputProps.inputClassName;
-
- var divProps = _objectWithoutProperties(_props$inputProps, ['inputClassName']);
-
- 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',
- className: className,
- tabIndex: this.props.tabIndex || 0,
- onBlur: this.handleInputBlur,
- onFocus: this.handleInputFocus,
- ref: function (ref) {
- return _this5.input = ref;
- },
- 'aria-readonly': '' + !!this.props.disabled,
- style: { border: 0, width: 1, display: 'inline-block' } }));
- }
-
- if (this.props.autosize) {
- return _react2['default'].createElement(_reactInputAutosize2['default'], _extends({}, inputProps, { minWidth: '5' }));
- }
- return _react2['default'].createElement(
- 'div',
- { className: className },
- _react2['default'].createElement('input', inputProps)
- );
- },
-
- renderClear: function renderClear() {
-
- if (!this.props.clearable || this.props.value === undefined || this.props.value === null || this.props.multi && !this.props.value.length || this.props.disabled || this.props.isLoading) return;
- 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,
- onMouseDown: this.clearValue,
- onTouchStart: this.handleTouchStart,
- onTouchMove: this.handleTouchMove,
- onTouchEnd: this.handleTouchEndClearValue
- },
- clear
- );
- },
-
- renderArrow: function renderArrow() {
- var onMouseDown = this.handleMouseDownOnArrow;
- var isOpen = this.state.isOpen;
- var arrow = this.props.arrowRenderer({ onMouseDown: onMouseDown, isOpen: isOpen });
-
- return _react2['default'].createElement(
- 'span',
- {
- className: 'Select-arrow-zone',
- onMouseDown: onMouseDown
- },
- arrow
- );
- },
-
- filterFlatOptions: function filterFlatOptions(excludeOptions) {
- var filterValue = this.state.inputValue;
- var flatOptions = this._flatOptions;
- if (this.props.filterOptions) {
- // Maintain backwards compatibility with boolean attribute
- var filterOptions = typeof this.props.filterOptions === 'function' ? this.props.filterOptions : _utilsDefaultFilterOptions2['default'];
-
- return filterOptions(flatOptions, filterValue, excludeOptions, {
- 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
- });
- } else {
- return flatOptions;
- }
- },
-
- flattenOptions: function flattenOptions(options, group) {
- if (!options) return [];
- var flatOptions = [];
- for (var i = 0; i < options.length; i++) {
- // We clone each option with a pointer to its parent group for efficient unflattening
- var optionCopy = clone(options[i]);
- optionCopy.isInTree = false;
- if (group) {
- optionCopy.group = group;
- }
- if (isGroup(optionCopy)) {
- flatOptions = flatOptions.concat(this.flattenOptions(optionCopy.options, optionCopy));
- optionCopy.options = [];
- } else {
- flatOptions.push(optionCopy);
- }
- }
- return flatOptions;
- },
-
- unflattenOptions: function unflattenOptions(flatOptions) {
- var groupedOptions = [];
- var parent = undefined,
- child = undefined;
-
- // Remove all ancestor groups from the tree
- flatOptions.forEach(function (option) {
- option.isInTree = false;
- parent = option.group;
- while (parent) {
- if (parent.isInTree) {
- parent.options = [];
- parent.isInTree = false;
- }
- parent = parent.group;
- }
- });
-
- // Now reconstruct the options tree
- flatOptions.forEach(function (option) {
- child = option;
- parent = child.group;
- while (parent) {
- if (!child.isInTree) {
- parent.options.push(child);
- child.isInTree = true;
- }
-
- child = parent;
- parent = child.group;
- }
- if (!child.isInTree) {
- groupedOptions.push(child);
- child.isInTree = true;
- }
- });
- return groupedOptions;
- },
-
- onOptionRef: function onOptionRef(ref, isFocused) {
- if (isFocused) {
- this.focused = ref;
- }
- },
-
- renderMenu: function renderMenu(options, valueArray, focusedOption) {
- if (options && options.length) {
- return this.props.menuRenderer({
- focusedOption: focusedOption,
- focusOption: this.focusOption,
- instancePrefix: this._instancePrefix,
- labelKey: this.props.labelKey,
- onFocus: this.focusOption,
- onOptionRef: this.onOptionRef,
- onSelect: this.selectValue,
- optionClassName: this.props.optionClassName,
- optionComponent: this.props.optionComponent,
- optionGroupComponent: this.props.optionGroupComponent,
- optionRenderer: this.props.optionRenderer || this.getOptionLabel,
- options: options,
- selectValue: this.selectValue,
- valueArray: valueArray,
- valueKey: this.props.valueKey
- });
- } else if (this.props.noResultsText) {
- return _react2['default'].createElement(
- 'div',
- { className: 'Select-noresults' },
- this.props.noResultsText
- );
- } else {
- return null;
- }
- },
-
- renderHiddenField: function renderHiddenField(valueArray) {
- var _this6 = this;
-
- if (!this.props.name) return;
- if (this.props.joinValues) {
- var value = valueArray.map(function (i) {
- return stringifyValue(i[_this6.props.valueKey]);
- }).join(this.props.delimiter);
- return _react2['default'].createElement('input', {
- type: 'hidden',
- ref: function (ref) {
- return _this6.value = ref;
- },
- name: this.props.name,
- value: value,
- disabled: this.props.disabled });
- }
- return valueArray.map(function (item, index) {
- return _react2['default'].createElement('input', { key: 'hidden.' + index,
- type: 'hidden',
- ref: 'value' + index,
- name: _this6.props.name,
- value: stringifyValue(item[_this6.props.valueKey]),
- disabled: _this6.props.disabled });
- });
- },
-
- getFocusableOptionIndex: function getFocusableOptionIndex(selectedOption) {
- var options = this._visibleOptions;
- if (!options.length) return null;
-
- var valueKey = this.props.valueKey;
- var focusedOption = this.state.focusedOption || selectedOption;
- if (focusedOption && !focusedOption.disabled) {
- var focusedOptionIndex = -1;
- options.some(function (option, index) {
- var isOptionEqual = option[valueKey] === focusedOption[valueKey];
- if (isOptionEqual) {
- focusedOptionIndex = index;
- }
- return isOptionEqual;
- });
- if (focusedOptionIndex !== -1) {
- return focusedOptionIndex;
- }
- }
-
- for (var i = 0; i < options.length; i++) {
- if (!options[i].disabled) return i;
- }
- return null;
- },
-
- renderOuter: function renderOuter(options, valueArray, focusedOption) {
- var _this7 = this;
-
- var Dropdown = this.props.dropdownComponent;
- var menu = this.renderMenu(options, valueArray, focusedOption);
- if (!menu) {
- return null;
- }
-
- return _react2['default'].createElement(
- Dropdown,
- null,
- _react2['default'].createElement(
- 'div',
- { ref: function (ref) {
- return _this7.menuContainer = ref;
- }, className: 'Select-menu-outer', style: this.props.menuContainerStyle },
- _react2['default'].createElement(
- 'div',
- { ref: function (ref) {
- return _this7.menu = ref;
- }, role: 'listbox', className: 'Select-menu', id: this._instancePrefix + '-list',
- style: this.props.menuStyle,
- onScroll: this.handleMenuScroll,
- onMouseDown: this.handleMouseDownOnMenu },
- menu
- )
- )
- );
- },
-
- render: function render() {
- var _this8 = this;
-
- var valueArray = this.getValueArray(this.props.value);
- this._visibleOptions = this.filterFlatOptions(this.props.multi ? valueArray : null);
- var options = this.unflattenOptions(this._visibleOptions);
- var isOpen = typeof this.props.isOpen === 'boolean' ? this.props.isOpen : this.state.isOpen;
- if (this.props.multi && !options.length && valueArray.length && !this.state.inputValue) isOpen = false;
- var focusedOptionIndex = this.getFocusableOptionIndex(valueArray[0]);
-
- var focusedOption = null;
- if (focusedOptionIndex !== null) {
- focusedOption = this._focusedOption = this._visibleOptions[focusedOptionIndex];
- } else {
- focusedOption = this._focusedOption = null;
- }
- var className = (0, _classnames2['default'])('Select', this.props.className, {
- 'Select--multi': this.props.multi,
- 'Select--single': !this.props.multi,
- 'is-clearable': this.props.clearable,
- 'is-disabled': this.props.disabled,
- 'is-focused': this.state.isFocused,
- 'is-loading': this.props.isLoading,
- 'is-open': isOpen,
- 'is-pseudo-focused': this.state.isPseudoFocused,
- 'is-searchable': this.props.searchable,
- 'has-value': valueArray.length
- });
-
- var removeMessage = null;
- if (this.props.multi && !this.props.disabled && valueArray.length && !this.state.inputValue && this.state.isFocused && this.props.backspaceRemoves) {
- removeMessage = _react2['default'].createElement(
- 'span',
- { id: this._instancePrefix + '-backspace-remove-message', className: 'Select-aria-only', 'aria-live': 'assertive' },
- this.props.backspaceToRemoveMessage.replace('{label}', valueArray[valueArray.length - 1][this.props.labelKey])
- );
- }
-
- return _react2['default'].createElement(
- 'div',
- { ref: function (ref) {
- return _this8.wrapper = ref;
- },
- className: className,
- style: this.props.wrapperStyle },
- this.renderHiddenField(valueArray),
- _react2['default'].createElement(
- 'div',
- { ref: function (ref) {
- return _this8.control = ref;
- },
- className: 'Select-control',
- style: this.props.style,
- onKeyDown: this.handleKeyDown,
- onMouseDown: this.handleMouseDown,
- onTouchEnd: this.handleTouchEnd,
- onTouchStart: this.handleTouchStart,
- onTouchMove: this.handleTouchMove
- },
- _react2['default'].createElement(
- 'span',
- { className: 'Select-multi-value-wrapper', id: this._instancePrefix + '-value' },
- this.renderValue(valueArray, isOpen),
- this.renderInput(valueArray, focusedOptionIndex)
- ),
- removeMessage,
- this.renderLoading(),
- this.renderClear(),
- this.renderArrow()
- ),
- isOpen ? this.renderOuter(options, !this.props.multi ? valueArray : null, focusedOption) : null
- );
- }
-
-});
-
-exports['default'] = Select;
-module.exports = exports['default'];
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"./Async":1,"./AsyncCreatable":2,"./Creatable":3,"./Dropdown":4,"./Option":5,"./OptionGroup":6,"./Value":8,"./utils/defaultArrowRenderer":9,"./utils/defaultClearRenderer":10,"./utils/defaultFilterOptions":11,"./utils/defaultMenuRenderer":12,"create-react-class":undefined,"prop-types":undefined}],8:[function(require,module,exports){
-(function (global){
-'use strict';
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-var _react = (typeof window !== "undefined" ? window['React'] : typeof global !== "undefined" ? global['React'] : null);
-
-var _react2 = _interopRequireDefault(_react);
-
-var _createReactClass = require('create-react-class');
-
-var _createReactClass2 = _interopRequireDefault(_createReactClass);
-
-var _propTypes = require('prop-types');
-
-var _propTypes2 = _interopRequireDefault(_propTypes);
-
-var _classnames = (typeof window !== "undefined" ? window['classNames'] : typeof global !== "undefined" ? global['classNames'] : null);
-
-var _classnames2 = _interopRequireDefault(_classnames);
-
-var Value = (0, _createReactClass2['default'])({
-
- displayName: 'Value',
-
- propTypes: {
- children: _propTypes2['default'].node,
- disabled: _propTypes2['default'].bool, // disabled prop passed to ReactSelect
- id: _propTypes2['default'].string, // Unique id for the value - used for aria
- onClick: _propTypes2['default'].func, // method to handle click on value label
- onRemove: _propTypes2['default'].func, // method to handle removal of the value
- value: _propTypes2['default'].object.isRequired },
-
- // the option object for this value
- handleMouseDown: function handleMouseDown(event) {
- if (event.type === 'mousedown' && event.button !== 0) {
- return;
- }
- if (this.props.onClick) {
- event.stopPropagation();
- this.props.onClick(this.props.value, event);
- return;
- }
- if (this.props.value.href) {
- event.stopPropagation();
- }
- },
-
- onRemove: function onRemove(event) {
- event.preventDefault();
- event.stopPropagation();
- this.props.onRemove(this.props.value);
- },
-
- handleTouchEndRemove: function handleTouchEndRemove(event) {
- // Check if the view is being dragged, In this case
- // we don't want to fire the click event (because the user only wants to scroll)
- if (this.dragging) return;
-
- // Fire the mouse events
- this.onRemove(event);
- },
-
- handleTouchMove: function handleTouchMove(event) {
- // Set a flag that the view is being dragged
- this.dragging = true;
- },
-
- handleTouchStart: function handleTouchStart(event) {
- // Set a flag that the view is not being dragged
- this.dragging = false;
- },
-
- renderRemoveIcon: function renderRemoveIcon() {
- if (this.props.disabled || !this.props.onRemove) return;
- return _react2['default'].createElement(
- 'span',
- { className: 'Select-value-icon',
- 'aria-hidden': 'true',
- onMouseDown: this.onRemove,
- onTouchEnd: this.handleTouchEndRemove,
- onTouchStart: this.handleTouchStart,
- onTouchMove: this.handleTouchMove },
- '×'
- );
- },
-
- renderLabel: function renderLabel() {
- var className = 'Select-value-label';
- return this.props.onClick || this.props.value.href ? _react2['default'].createElement(
- 'a',
- { className: className, href: this.props.value.href, target: this.props.value.target, onMouseDown: this.handleMouseDown, onTouchEnd: this.handleMouseDown },
- this.props.children
- ) : _react2['default'].createElement(
- 'span',
- { className: className, role: 'option', 'aria-selected': 'true', id: this.props.id },
- this.props.children
- );
- },
-
- render: function render() {
- return _react2['default'].createElement(
- 'div',
- { className: (0, _classnames2['default'])('Select-value', this.props.value.className),
- style: this.props.value.style,
- title: this.props.value.title
- },
- this.renderRemoveIcon(),
- this.renderLabel()
- );
- }
-
-});
-
-module.exports = Value;
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"create-react-class":undefined,"prop-types":undefined}],9:[function(require,module,exports){
-(function (global){
-"use strict";
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports["default"] = arrowRenderer;
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-var _react = (typeof window !== "undefined" ? window['React'] : typeof global !== "undefined" ? global['React'] : null);
-
-var _react2 = _interopRequireDefault(_react);
-
-function arrowRenderer(_ref) {
- var onMouseDown = _ref.onMouseDown;
-
- return _react2["default"].createElement("span", {
- className: "Select-arrow",
- onMouseDown: onMouseDown
- });
-}
-
-;
-module.exports = exports["default"];
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{}],10:[function(require,module,exports){
-(function (global){
-'use strict';
-
-Object.defineProperty(exports, '__esModule', {
- value: true
-});
-exports['default'] = clearRenderer;
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-var _react = (typeof window !== "undefined" ? window['React'] : typeof global !== "undefined" ? global['React'] : null);
-
-var _react2 = _interopRequireDefault(_react);
-
-function clearRenderer() {
- return _react2['default'].createElement('span', {
- className: 'Select-clear',
- dangerouslySetInnerHTML: { __html: '×' }
- });
-}
-
-;
-module.exports = exports['default'];
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{}],11:[function(require,module,exports){
-'use strict';
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-var _stripDiacritics = require('./stripDiacritics');
-
-var _stripDiacritics2 = _interopRequireDefault(_stripDiacritics);
-
-function filterOptions(options, filterValue, excludeOptions, props) {
- var _this = this;
-
- if (props.ignoreAccents) {
- filterValue = (0, _stripDiacritics2['default'])(filterValue);
- }
-
- if (props.ignoreCase) {
- filterValue = filterValue.toLowerCase();
- }
-
- if (excludeOptions) excludeOptions = excludeOptions.map(function (i) {
- return i[props.valueKey];
- });
-
- 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 (!filterValue) return true;
- var valueTest = String(option[props.valueKey]);
- var labelTest = String(option[props.labelKey]);
- if (props.ignoreAccents) {
- if (props.matchProp !== 'label') valueTest = (0, _stripDiacritics2['default'])(valueTest);
- if (props.matchProp !== 'value') labelTest = (0, _stripDiacritics2['default'])(labelTest);
- }
- if (props.ignoreCase) {
- if (props.matchProp !== 'label') valueTest = valueTest.toLowerCase();
- if (props.matchProp !== 'value') labelTest = labelTest.toLowerCase();
- }
- return props.matchPos === 'start' ? props.matchProp !== 'label' && valueTest.substr(0, filterValue.length) === filterValue || props.matchProp !== 'value' && labelTest.substr(0, filterValue.length) === filterValue : props.matchProp !== 'label' && valueTest.indexOf(filterValue) >= 0 || props.matchProp !== 'value' && labelTest.indexOf(filterValue) >= 0;
- });
-}
-
-module.exports = filterOptions;
-
-},{"./stripDiacritics":13}],12:[function(require,module,exports){
-(function (global){
-'use strict';
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-var _classnames = (typeof window !== "undefined" ? window['classNames'] : typeof global !== "undefined" ? global['classNames'] : null);
-
-var _classnames2 = _interopRequireDefault(_classnames);
-
-var _react = (typeof window !== "undefined" ? window['React'] : typeof global !== "undefined" ? global['React'] : null);
-
-var _react2 = _interopRequireDefault(_react);
-
-function isGroup(option) {
- return option && Array.isArray(option.options);
-}
-
-function menuRenderer(_ref) {
- var focusedOption = _ref.focusedOption;
- var instancePrefix = _ref.instancePrefix;
- var labelKey = _ref.labelKey;
- var onFocus = _ref.onFocus;
- var onOptionRef = _ref.onOptionRef;
- var onSelect = _ref.onSelect;
- var optionClassName = _ref.optionClassName;
- var optionComponent = _ref.optionComponent;
- var optionGroupComponent = _ref.optionGroupComponent;
- var optionRenderer = _ref.optionRenderer;
- var options = _ref.options;
- var valueArray = _ref.valueArray;
- var valueKey = _ref.valueKey;
-
- var OptionGroup = optionGroupComponent;
- var Option = optionComponent;
- var renderLabel = optionRenderer || this.getOptionLabel;
-
- var renderOptions = function renderOptions(optionsSubset) {
- return optionsSubset.map(function (option, i) {
- if (isGroup(option)) {
- var optionGroupClass = (0, _classnames2['default'])({
- 'Select-option-group': true
- });
-
- return _react2['default'].createElement(
- OptionGroup,
- {
- className: optionGroupClass,
- key: 'option-group-' + i,
- label: renderLabel(option),
- option: option,
- optionIndex: i
- },
- renderOptions(option.options)
- );
- } else {
- var _ret = (function () {
- var isSelected = valueArray && valueArray.indexOf(option) > -1;
- var isFocused = option === focusedOption;
- var optionRef = isFocused ? 'focused' : null;
- var optionClass = (0, _classnames2['default'])(optionClassName, {
- 'Select-option': true,
- 'is-selected': isSelected,
- 'is-focused': isFocused,
- 'is-disabled': option.disabled
- });
-
- return {
- v: _react2['default'].createElement(
- Option,
- {
- className: optionClass,
- instancePrefix: instancePrefix,
- isDisabled: option.disabled,
- isFocused: isFocused,
- isSelected: isSelected,
- key: 'option-' + i + '-' + option[valueKey],
- onFocus: onFocus,
- onSelect: onSelect,
- option: option,
- optionIndex: i,
- ref: function (ref) {
- onOptionRef(ref, isFocused);
- }
- },
- renderLabel(option, i)
- )
- };
- })();
-
- if (typeof _ret === 'object') return _ret.v;
- }
- });
- };
-
- return renderOptions(options);
-}
-
-module.exports = menuRenderer;
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{}],13:[function(require,module,exports){
-'use strict';
-
-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 }];
-
-module.exports = function stripDiacritics(str) {
- for (var i = 0; i < map.length; i++) {
- str = str.replace(map[i].letters, map[i].base);
- }
- return str;
-};
-
-},{}]},{},[7])(7)
-});
\ No newline at end of file
diff --git a/dist/react-select-plus.min.css b/dist/react-select-plus.min.css
index 8bb82d67..227b6b6b 100644
--- a/dist/react-select-plus.min.css
+++ b/dist/react-select-plus.min.css
@@ -1 +1 @@
-.Select,.Select-control{position:relative}.Select,.Select div,.Select input,.Select span{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.Select.is-disabled>.Select-control{background-color:#f9f9f9}.Select.is-disabled>.Select-control:hover{box-shadow:none}.Select.is-disabled .Select-arrow-zone{cursor:default;pointer-events:none;opacity:.35}.Select-control{background-color:#fff;border-radius:4px;border:1px solid #ccc;color:#333;cursor:default;display:table;border-spacing:0;border-collapse:separate;height:36px;outline:0;overflow:hidden;width:100%}.is-searchable.is-focused:not(.is-open)>.Select-control,.is-searchable.is-open>.Select-control{cursor:text}.Select-control:hover{box-shadow:0 1px 0 rgba(0,0,0,.06)}.Select-control .Select-input:focus{outline:0}.is-open>.Select-control{border-bottom-right-radius:0;border-bottom-left-radius:0;background:#fff;border-color:#b3b3b3 #ccc #d9d9d9}.is-open>.Select-control .Select-arrow{top:-2px;border-color:transparent transparent #999;border-width:0 5px 5px}.is-focused:not(.is-open)>.Select-control{border-color:#007eff;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 0 3px rgba(0,126,255,.1)}.Select--single>.Select-control .Select-value,.Select-placeholder{bottom:0;color:#aaa;left:0;line-height:34px;padding-left:10px;padding-right:10px;position:absolute;right:0;top:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.has-value.Select--single>.Select-control .Select-value .Select-value-label,.has-value.is-pseudo-focused.Select--single>.Select-control .Select-value .Select-value-label{color:#333}.has-value.Select--single>.Select-control .Select-value a.Select-value-label,.has-value.is-pseudo-focused.Select--single>.Select-control .Select-value a.Select-value-label{cursor:pointer;text-decoration:none}.has-value.Select--single>.Select-control .Select-value a.Select-value-label:focus,.has-value.Select--single>.Select-control .Select-value a.Select-value-label:hover,.has-value.is-pseudo-focused.Select--single>.Select-control .Select-value a.Select-value-label:focus,.has-value.is-pseudo-focused.Select--single>.Select-control .Select-value a.Select-value-label:hover{color:#007eff;outline:0;text-decoration:underline}.Select-input{height:34px;padding-left:10px;padding-right:10px;vertical-align:middle}.Select-input>input{width:100%;background:none;border:0;box-shadow:none;cursor:default;display:inline-block;font-family:inherit;font-size:inherit;margin:0;outline:0;line-height:14px;padding:8px 0 12px;-webkit-appearance:none}.is-focused .Select-input>input{cursor:text}.Select-arrow-zone,.Select-clear-zone,.Select-loading-zone{cursor:pointer;text-align:center;position:relative;vertical-align:middle}.has-value.is-pseudo-focused .Select-input{opacity:0}.Select-control:not(.is-searchable)>.Select-input{outline:0}.Select-loading-zone{display:table-cell;width:16px}.Select-loading{-webkit-animation:Select-animation-spin .4s infinite linear;-o-animation:Select-animation-spin .4s infinite linear;animation:Select-animation-spin .4s infinite linear;width:16px;height:16px;box-sizing:border-box;border-radius:50%;border:2px solid #ccc;border-right-color:#333;display:inline-block;position:relative;vertical-align:middle}.Select-clear-zone{-webkit-animation:Select-animation-fadeIn .2s;-o-animation:Select-animation-fadeIn .2s;animation:Select-animation-fadeIn .2s;color:#999;display:table-cell;width:17px}.Select-clear-zone:hover{color:#D0021B}.Select-clear{display:inline-block;font-size:18px;line-height:1}.Select--multi .Select-clear-zone{width:17px}.Select-arrow-zone{display:table-cell;width:25px;padding-right:5px}.Select--multi .Select-multi-value-wrapper,.Select-arrow{display:inline-block}.Select-arrow{border-color:#999 transparent transparent;border-style:solid;border-width:5px 5px 2.5px;height:0;width:0;position:relative}.Select-arrow-zone:hover>.Select-arrow,.is-open .Select-arrow{border-top-color:#666}.Select .Select-aria-only{display:inline-block;height:1px;width:1px;margin:-1px;clip:rect(0,0,0,0);overflow:hidden;float:left}@-webkit-keyframes Select-animation-fadeIn{from{opacity:0}to{opacity:1}}@keyframes Select-animation-fadeIn{from{opacity:0}to{opacity:1}}.Select-menu-outer{border-bottom-right-radius:4px;border-bottom-left-radius:4px;background-color:#fff;border:1px solid #ccc;border-top-color:#e6e6e6;box-shadow:0 1px 0 rgba(0,0,0,.06);box-sizing:border-box;margin-top:-1px;max-height:200px;position:absolute;top:100%;width:100%;z-index:1;-webkit-overflow-scrolling:touch}.Select-menu{max-height:198px;overflow-y:auto}.Select-option-group-label{box-sizing:border-box;background-color:#fff;color:#666;font-weight:700;cursor:default;display:block;padding:8px 10px}.Select-option-group-label~.Select-option,.Select-option-group-label~.Select-option-group{padding-left:20px}.Select-noresults,.Select-option{box-sizing:border-box;display:block;padding:8px 10px}.Select-option{background-color:#fff;color:#666;cursor:pointer}.Select-option:last-child{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.Select-option.is-selected{background-color:#f5faff;background-color:rgba(0,126,255,.04);color:#333}.Select-option.is-focused{background-color:#ebf5ff;background-color:rgba(0,126,255,.08);color:#333}.Select-option.is-disabled{color:#ccc;cursor:default}.Select-noresults{color:#999;cursor:default}.Select--multi .Select-input{vertical-align:middle;margin-left:10px;padding:0}.Select--multi.has-value .Select-input{margin-left:5px}.Select--multi .Select-value{background-color:#ebf5ff;background-color:rgba(0,126,255,.08);border-radius:2px;border:1px solid #c2e0ff;border:1px solid rgba(0,126,255,.24);color:#007eff;display:inline-block;font-size:.9em;line-height:1.4;margin-left:5px;margin-top:5px;vertical-align:top}.Select--multi .Select-value-icon,.Select--multi .Select-value-label{display:inline-block;vertical-align:middle}.Select--multi .Select-value-label{border-bottom-right-radius:2px;border-top-right-radius:2px;cursor:default;padding:2px 5px}.Select--multi a.Select-value-label{color:#007eff;cursor:pointer;text-decoration:none}.Select--multi a.Select-value-label:hover{text-decoration:underline}.Select--multi .Select-value-icon{cursor:pointer;border-bottom-left-radius:2px;border-top-left-radius:2px;border-right:1px solid #c2e0ff;border-right:1px solid rgba(0,126,255,.24);padding:1px 5px 3px}.Select--multi .Select-value-icon:focus,.Select--multi .Select-value-icon:hover{background-color:#d8eafd;background-color:rgba(0,113,230,.08);color:#0071e6}.Select--multi .Select-value-icon:active{background-color:#c2e0ff;background-color:rgba(0,126,255,.24)}.Select--multi.is-disabled .Select-value{background-color:#fcfcfc;border:1px solid #e3e3e3;color:#333}.Select--multi.is-disabled .Select-value-icon{cursor:not-allowed;border-right:1px solid #e3e3e3}.Select--multi.is-disabled .Select-value-icon:active,.Select--multi.is-disabled .Select-value-icon:focus,.Select--multi.is-disabled .Select-value-icon:hover{background-color:#fcfcfc}@keyframes Select-animation-spin{to{transform:rotate(1turn)}}@-webkit-keyframes Select-animation-spin{to{-webkit-transform:rotate(1turn)}}
\ No newline at end of file
+.Select{position:relative}.Select,.Select div,.Select input,.Select span{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.Select.is-disabled>.Select-control{background-color:#f9f9f9}.Select.is-disabled>.Select-control:hover{box-shadow:none}.Select.is-disabled .Select-arrow-zone{cursor:default;pointer-events:none;opacity:.35}.Select-control{background-color:#fff;border-color:#d9d9d9 #ccc #b3b3b3;border-radius:4px;border:1px solid #ccc;color:#333;cursor:default;display:table;border-spacing:0;border-collapse:separate;height:36px;outline:0;overflow:hidden;position:relative;width:100%}.Select-control:hover{box-shadow:0 1px 0 rgba(0,0,0,.06)}.Select-control .Select-input:focus{outline:0}.is-searchable.is-open>.Select-control{cursor:text}.is-open>.Select-control{border-bottom-right-radius:0;border-bottom-left-radius:0;background:#fff;border-color:#b3b3b3 #ccc #d9d9d9}.is-open>.Select-control .Select-arrow{top:-2px;border-color:transparent transparent #999;border-width:0 5px 5px}.is-searchable.is-focused:not(.is-open)>.Select-control{cursor:text}.is-focused:not(.is-open)>.Select-control{border-color:#007eff;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 0 3px rgba(0,126,255,.1)}.Select--single>.Select-control .Select-value,.Select-placeholder{bottom:0;color:#aaa;left:0;line-height:34px;padding-left:10px;padding-right:10px;position:absolute;right:0;top:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.has-value.is-clearable.Select--single>.Select-control .Select-value{padding-right:42px}.has-value.Select--single>.Select-control .Select-value .Select-value-label,.has-value.is-pseudo-focused.Select--single>.Select-control .Select-value .Select-value-label{color:#333}.has-value.Select--single>.Select-control .Select-value a.Select-value-label,.has-value.is-pseudo-focused.Select--single>.Select-control .Select-value a.Select-value-label{cursor:pointer;text-decoration:none}.has-value.Select--single>.Select-control .Select-value a.Select-value-label:focus,.has-value.Select--single>.Select-control .Select-value a.Select-value-label:hover,.has-value.is-pseudo-focused.Select--single>.Select-control .Select-value a.Select-value-label:focus,.has-value.is-pseudo-focused.Select--single>.Select-control .Select-value a.Select-value-label:hover{color:#007eff;outline:0;text-decoration:underline}.Select-input{height:34px;padding-left:10px;padding-right:10px;vertical-align:middle}.Select-input>input{width:100%;background:none transparent;border:0 none;box-shadow:none;cursor:default;display:inline-block;font-family:inherit;font-size:inherit;margin:0;outline:0;line-height:14px;padding:8px 0 12px;-webkit-appearance:none}.is-focused .Select-input>input{cursor:text}.has-value.is-pseudo-focused .Select-input{opacity:0}.Select-control:not(.is-searchable)>.Select-input{outline:0}.Select-loading-zone{cursor:pointer;display:table-cell;position:relative;text-align:center;vertical-align:middle;width:16px}.Select-loading{-webkit-animation:Select-animation-spin .4s infinite linear;-o-animation:Select-animation-spin .4s infinite linear;animation:Select-animation-spin .4s infinite linear;width:16px;height:16px;box-sizing:border-box;border-radius:50%;border:2px solid #ccc;border-right-color:#333;display:inline-block;position:relative;vertical-align:middle}.Select-clear-zone{-webkit-animation:Select-animation-fadeIn .2s;-o-animation:Select-animation-fadeIn .2s;animation:Select-animation-fadeIn .2s;color:#999;cursor:pointer;display:table-cell;position:relative;text-align:center;vertical-align:middle;width:17px}.Select-clear-zone:hover{color:#D0021B}.Select-clear{display:inline-block;font-size:18px;line-height:1}.Select--multi .Select-clear-zone{width:17px}.Select-arrow-zone{cursor:pointer;display:table-cell;position:relative;text-align:center;vertical-align:middle;width:25px;padding-right:5px}.Select-arrow{border-color:#999 transparent transparent;border-style:solid;border-width:5px 5px 2.5px;display:inline-block;height:0;width:0;position:relative}.Select-arrow-zone:hover>.Select-arrow,.is-open .Select-arrow{border-top-color:#666}.Select--multi .Select-multi-value-wrapper{display:inline-block}.Select .Select-aria-only{display:inline-block;height:1px;width:1px;margin:-1px;clip:rect(0,0,0,0);overflow:hidden;float:left}@-webkit-keyframes Select-animation-fadeIn{from{opacity:0}to{opacity:1}}@keyframes Select-animation-fadeIn{from{opacity:0}to{opacity:1}}.Select-menu-outer{border-bottom-right-radius:4px;border-bottom-left-radius:4px;background-color:#fff;border:1px solid #ccc;border-top-color:#e6e6e6;box-shadow:0 1px 0 rgba(0,0,0,.06);box-sizing:border-box;margin-top:-1px;max-height:200px;position:absolute;top:100%;width:100%;z-index:1;-webkit-overflow-scrolling:touch}.Select-menu{max-height:198px;overflow-y:auto}.Select-option-group-label{box-sizing:border-box;background-color:#fff;color:#666;font-weight:700;cursor:default;display:block;padding:8px 10px}.Select-option-group-label~.Select-option,.Select-option-group-label~.Select-option-group{padding-left:20px}.Select-option{box-sizing:border-box;background-color:#fff;color:#666;cursor:pointer;display:block;padding:8px 10px}.Select-option:last-child{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.Select-option.is-selected{background-color:#f5faff;background-color:rgba(0,126,255,.04);color:#333}.Select-option.is-focused{background-color:#ebf5ff;background-color:rgba(0,126,255,.08);color:#333}.Select-option.is-disabled{color:#ccc;cursor:default}.Select-noresults{box-sizing:border-box;color:#999;cursor:default;display:block;padding:8px 10px}.Select--multi .Select-input{vertical-align:middle;margin-left:10px;padding:0}.Select--multi.has-value .Select-input{margin-left:5px}.Select--multi .Select-value{background-color:#ebf5ff;background-color:rgba(0,126,255,.08);border-radius:2px;border:1px solid #c2e0ff;border:1px solid rgba(0,126,255,.24);color:#007eff;display:inline-block;font-size:.9em;line-height:1.4;margin-left:5px;margin-top:5px;vertical-align:top}.Select--multi .Select-value-icon,.Select--multi .Select-value-label{display:inline-block;vertical-align:middle}.Select--multi .Select-value-label{border-bottom-right-radius:2px;border-top-right-radius:2px;cursor:default;padding:2px 5px}.Select--multi a.Select-value-label{color:#007eff;cursor:pointer;text-decoration:none}.Select--multi a.Select-value-label:hover{text-decoration:underline}.Select--multi .Select-value-icon{cursor:pointer;border-bottom-left-radius:2px;border-top-left-radius:2px;border-right:1px solid #c2e0ff;border-right:1px solid rgba(0,126,255,.24);padding:1px 5px 3px}.Select--multi .Select-value-icon:focus,.Select--multi .Select-value-icon:hover{background-color:#d8eafd;background-color:rgba(0,113,230,.08);color:#0071e6}.Select--multi .Select-value-icon:active{background-color:#c2e0ff;background-color:rgba(0,126,255,.24)}.Select--multi.is-disabled .Select-value{background-color:#fcfcfc;border:1px solid #e3e3e3;color:#333}.Select--multi.is-disabled .Select-value-icon{cursor:not-allowed;border-right:1px solid #e3e3e3}.Select--multi.is-disabled .Select-value-icon:active,.Select--multi.is-disabled .Select-value-icon:focus,.Select--multi.is-disabled .Select-value-icon:hover{background-color:#fcfcfc}@keyframes Select-animation-spin{to{transform:rotate(1turn)}}@-webkit-keyframes Select-animation-spin{to{-webkit-transform:rotate(1turn)}}
\ No newline at end of file
diff --git a/dist/react-select-plus.min.js b/dist/react-select-plus.min.js
deleted file mode 100644
index 53f9a26e..00000000
--- a/dist/react-select-plus.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Select=e()}}(function(){return function e(t,u,n){function o(i,a){if(!u[i]){if(!t[i]){var r="function"==typeof require&&require;if(!a&&r)return r(i,!0);if(s)return s(i,!0);var l=new Error("Cannot find module '"+i+"'");throw l.code="MODULE_NOT_FOUND",l}var p=u[i]={exports:{}};t[i][0].call(p.exports,function(e){var u=t[i][1][e];return o(u?u:e)},p,p.exports,e,t,u,n)}return u[i].exports}for(var s="function"==typeof require&&require,i=0;ie.props.value.length&&e.clearOptions(),e.props.onChange(t)}};return u(l({},this.props,r,{isLoading:i,onInputChange:this._onInputChange}))}}]),t}(c.Component);u["default"]=w,w.propTypes=m,w.defaultProps=O,t.exports=u["default"]}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./Select":7,"./utils/stripDiacritics":13,"prop-types":void 0}],2:[function(e,t,u){(function(u){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function o(e){var t=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return Object.keys(e).reduce(function(t,u){var n=e[u];return void 0!==n&&(t[u]=n),t},t)}var s=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,n)&&(u[n]=e[n]);return u}function s(e){return f["default"].createElement(y["default"],e)}function i(e){var t=e.option,u=e.options,n=e.labelKey,o=e.valueKey;return 0===u.filter(function(e){return e[n]===t[n]||e[o]===t[o]}).length}function a(e){var t=e.label;return!!t}function r(e){var t=e.label,u=e.labelKey,n=e.valueKey,o={};return o[n]=t,o[u]=t,o.className="Select-create-option-placeholder",o}function l(e){return'Create option "'+e+'"'}function p(e){var t=e.keyCode;switch(t){case 9:case 13:case 188:return!0}return!1}var d=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,n)&&(u[n]=e[n]);return u}function i(e,t,u){return t in e?Object.defineProperty(e,t,{value:u,enumerable:!0,configurable:!0,writable:!0}):e[t]=u,e}function a(e){var t={};for(var u in e)e.hasOwnProperty(u)&&(t[u]=e[u]);return t}function r(e){return e&&Array.isArray(e.options)}function l(e){var t=typeof e;return"string"===t?e:"object"===t?JSON.stringify(e):"number"===t||"boolean"===t?String(e):""}Object.defineProperty(u,"__esModule",{value:!0});var p=Object.assign||function(e){for(var t=1;tl.bottom||r.topt.offsetHeight&&!(t.scrollHeight-t.offsetHeight-t.scrollTop)&&this.props.onMenuScrollToBottom()}},handleRequired:function(e,t){return!e||(t?0===e.length:0===Object.keys(e).length)},getOptionLabel:function(e){return e[this.props.labelKey]},getValueArray:function(e,t){var u=this,n="object"==typeof 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 o=this.expandValue(e,n);return o?[o]:[]},expandValue:function(e,t){var u=typeof e;if("string"!==u&&"number"!==u&&"boolean"!==u)return e;var n=this.props,o=n.labelKey,s=n.valueKey,a=n.renderInvalidValues,r=this._flatOptions;if(r&&""!==e){for(var l=0;ln&&this.focusOption(u[n+1])},popValue:function(){var e=this.getValueArray(this.props.value);e.length&&e[e.length-1].clearableValue!==!1&&this.setValue(e.slice(0,e.length-1))},removeValue:function(e){var t=this.getValueArray(this.props.value);this.setValue(t.filter(function(t){return t!==e}))},clearValue:function(e){e&&"mousedown"===e.type&&0!==e.button||(e.stopPropagation(),e.preventDefault(),this.setValue(this.getResetValue()),this.setState({isOpen:!1,inputValue:""},this.focus))},getResetValue:function(){return void 0!==this.props.resetValue?this.props.resetValue:this.props.multi?[]:null},focusOption:function(e){this.setState({focusedOption:e})},focusNextOption:function(){this.focusAdjacentOption("next")},focusPreviousOption:function(){this.focusAdjacentOption("previous")},focusPageUpOption:function(){this.focusAdjacentOption("page_up")},focusPageDownOption:function(){this.focusAdjacentOption("page_down")},focusStartOption:function(){this.focusAdjacentOption("start")},focusEndOption:function(){this.focusAdjacentOption("end")},focusAdjacentOption:function(e){var t=this._visibleOptions.map(function(e,t){return{option:e,index:t}}).filter(function(e){return!e.option.disabled});if(this._scrollToFocusedOptionOnUpdate=!0,!this.state.isOpen)return void this.setState({isOpen:!0,inputValue:"",focusedOption:this._focusedOption||(t.length?t["next"===e?0:t.length-1].option:null)});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){var o=u-this.props.pageSize;u=o<0?0:o}else if("page_down"===e){var o=u+this.props.pageSize;u=o>t.length-1?t.length-1:o}u===-1&&(u=0),this.setState({focusedIndex:t[u].index,focusedOption:t[u].option})}},getFocusedOption:function(){return this._focusedOption},getInputValue:function(){return this.state.inputValue},selectFocusedOption:function(){if(this._focusedOption)return this.selectValue(this._focusedOption)},renderLoading:function(){if(this.props.isLoading)return c["default"].createElement("span",{className:"Select-loading-zone","aria-hidden":"true"},c["default"].createElement("span",{className:"Select-loading"}))},renderValue:function(e,t){var u=this,n=this.props.valueRenderer||this.getOptionLabel,o=this.props.valueComponent;if(!e.length)return this.state.inputValue?null:c["default"].createElement("div",{className:"Select-placeholder"},this.props.placeholder);var s=this.props.onValueClick?this.handleValueClick:null;return this.props.multi?e.map(function(e,t){return c["default"].createElement(o,{id:u._instancePrefix+"-value-"+t,instancePrefix:u._instancePrefix,disabled:u.props.disabled||e.clearableValue===!1,key:"value-"+t+"-"+e[u.props.valueKey],onClick:s,onRemove:u.removeValue,value:e},n(e,t),c["default"].createElement("span",{className:"Select-aria-only"}," "))}):this.state.inputValue?void 0:(t&&(s=null),c["default"].createElement(o,{id:this._instancePrefix+"-value-item",disabled:this.props.disabled,instancePrefix:this._instancePrefix,onClick:s,value:e[0]},n(e[0])))},renderInput:function(e,t){var u,n=this,o=(0,O["default"])("Select-input",this.props.inputProps.className),a=!!this.state.isOpen,r=(0,O["default"])((u={},i(u,this._instancePrefix+"-list",a),i(u,this._instancePrefix+"-backspace-remove-message",this.props.multi&&!this.props.disabled&&this.state.isFocused&&!this.state.inputValue),u)),l=p({},this.props.inputProps,{role:"combobox","aria-expanded":""+a,"aria-owns":r,"aria-haspopup":""+a,"aria-activedescendant":a?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:o,tabIndex:this.props.tabIndex,onBlur:this.handleInputBlur,onChange:this.handleInputChange,onFocus:this.handleInputFocus,ref:function(e){return n.input=e},required:this.state.required,value:this.state.inputValue});if(this.props.inputRenderer)return this.props.inputRenderer(l);if(this.props.disabled||!this.props.searchable){var d=this.props.inputProps,f=(d.inputClassName,s(d,["inputClassName"])),h=(0,O["default"])(i({},this._instancePrefix+"-list",a));return c["default"].createElement("div",p({},f,{role:"combobox","aria-expanded":a,"aria-owns":h,"aria-activedescendant":a?this._instancePrefix+"-option-"+t:this._instancePrefix+"-value",className:o,tabIndex:this.props.tabIndex||0,onBlur:this.handleInputBlur,onFocus:this.handleInputFocus,ref:function(e){return n.input=e},"aria-readonly":""+!!this.props.disabled,style:{border:0,width:1,display:"inline-block"}}))}return this.props.autosize?c["default"].createElement(m["default"],p({},l,{minWidth:"5"})):c["default"].createElement("div",{className:o},c["default"].createElement("input",l))},renderClear:function(){if(!(!this.props.clearable||void 0===this.props.value||null===this.props.value||this.props.multi&&!this.props.value.length||this.props.disabled||this.props.isLoading)){var e=this.props.clearRenderer();return c["default"].createElement("span",{className:"Select-clear-zone",title:this.props.multi?this.props.clearAllText:this.props.clearValueText,"aria-label":this.props.multi?this.props.clearAllText:this.props.clearValueText,onMouseDown:this.clearValue,onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove,onTouchEnd:this.handleTouchEndClearValue},e)}},renderArrow:function(){var e=this.handleMouseDownOnArrow,t=this.state.isOpen,u=this.props.arrowRenderer({onMouseDown:e,isOpen:t});return c["default"].createElement("span",{className:"Select-arrow-zone",onMouseDown:e},u)},filterFlatOptions:function(e){var t=this.state.inputValue,u=this._flatOptions;if(this.props.filterOptions){var n="function"==typeof this.props.filterOptions?this.props.filterOptions:D["default"];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})}return u},flattenOptions:function(e,t){if(!e)return[];for(var u=[],n=0;n-1)return!1;if(n.filterOption)return n.filterOption.call(o,e,t);if(!t)return!0;var s=String(e[n.valueKey]),a=String(e[n.labelKey]);return n.ignoreAccents&&("label"!==n.matchProp&&(s=(0,i["default"])(s)),"value"!==n.matchProp&&(a=(0,i["default"])(a))),n.ignoreCase&&("label"!==n.matchProp&&(s=s.toLowerCase()),"value"!==n.matchProp&&(a=a.toLowerCase())),"start"===n.matchPos?"label"!==n.matchProp&&s.substr(0,t.length)===t||"value"!==n.matchProp&&a.substr(0,t.length)===t:"label"!==n.matchProp&&s.indexOf(t)>=0||"value"!==n.matchProp&&a.indexOf(t)>=0})}var s=e("./stripDiacritics"),i=n(s);t.exports=o},{"./stripDiacritics":13}],12:[function(e,t,u){(function(e){"use strict";function u(e){return e&&e.__esModule?e:{"default":e}}function n(e){return e&&Array.isArray(e.options)}function o(e){var t=e.focusedOption,u=e.instancePrefix,o=(e.labelKey,e.onFocus),s=e.onOptionRef,a=e.onSelect,l=e.optionClassName,p=e.optionComponent,d=e.optionGroupComponent,c=e.optionRenderer,f=e.options,h=e.valueArray,E=e.valueKey,g=d,v=p,b=c||this.getOptionLabel,y=function m(e){return e.map(function(e,p){if(n(e)){var d=(0,i["default"])({"Select-option-group":!0});return r["default"].createElement(g,{className:d,key:"option-group-"+p,label:b(e),option:e,optionIndex:p},m(e.options))}var c=function(){var n=h&&h.indexOf(e)>-1,d=e===t,c=(0,i["default"])(l,{"Select-option":!0,"is-selected":n,"is-focused":d,"is-disabled":e.disabled});return{v:r["default"].createElement(v,{className:c,instancePrefix:u,isDisabled:e.disabled,isFocused:d,isSelected:n,key:"option-"+p+"-"+e[E],onFocus:o,onSelect:a,option:e,optionIndex:p,ref:function(e){s(e,d)}},b(e,p))}}();if("object"==typeof c)return c.v})};return y(f)}var s="undefined"!=typeof window?window.classNames:"undefined"!=typeof e?e.classNames:null,i=u(s),a="undefined"!=typeof window?window.React:"undefined"!=typeof e?e.React:null,r=u(a);t.exports=o}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],13:[function(e,t,u){"use strict";var n=[{base:"A",letters:/[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F]/g},{base:"AA",letters:/[\uA732]/g},{base:"AE",letters:/[\u00C6\u01FC\u01E2]/g},{base:"AO",letters:/[\uA734]/g},{base:"AU",letters:/[\uA736]/g},{base:"AV",letters:/[\uA738\uA73A]/g},{base:"AY",letters:/[\uA73C]/g},{base:"B",letters:/[\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181]/g},{base:"C",letters:/[\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E]/g},{base:"D",letters:/[\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779]/g},{base:"DZ",letters:/[\u01F1\u01C4]/g},{base:"Dz",letters:/[\u01F2\u01C5]/g},{base:"E",letters:/[\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E]/g},{base:"F",letters:/[\u0046\u24BB\uFF26\u1E1E\u0191\uA77B]/g},{base:"G",letters:/[\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E]/g},{base:"H",letters:/[\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D]/g},{base:"I",letters:/[\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197]/g},{base:"J",letters:/[\u004A\u24BF\uFF2A\u0134\u0248]/g},{base:"K",letters:/[\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2]/g},{base:"L",letters:/[\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780]/g},{base:"LJ",letters:/[\u01C7]/g},{base:"Lj",letters:/[\u01C8]/g},{base:"M",letters:/[\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C]/g},{base:"N",letters:/[\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4]/g},{base:"NJ",letters:/[\u01CA]/g},{base:"Nj",letters:/[\u01CB]/g},{base:"O",letters:/[\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C]/g},{base:"OI",letters:/[\u01A2]/g},{base:"OO",letters:/[\uA74E]/g},{base:"OU",letters:/[\u0222]/g},{base:"P",letters:/[\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754]/g},{base:"Q",letters:/[\u0051\u24C6\uFF31\uA756\uA758\u024A]/g},{base:"R",letters:/[\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782]/g},{base:"S",letters:/[\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784]/g},{base:"T",letters:/[\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786]/g},{base:"TZ",letters:/[\uA728]/g},{base:"U",letters:/[\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244]/g},{base:"V",letters:/[\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245]/g},{base:"VY",letters:/[\uA760]/g},{base:"W",letters:/[\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72]/g},{base:"X",letters:/[\u0058\u24CD\uFF38\u1E8A\u1E8C]/g},{base:"Y",letters:/[\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE]/g},{base:"Z",letters:/[\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762]/g},{base:"a",letters:/[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250]/g},{base:"aa",letters:/[\uA733]/g},{base:"ae",letters:/[\u00E6\u01FD\u01E3]/g},{base:"ao",letters:/[\uA735]/g},{base:"au",letters:/[\uA737]/g},{base:"av",letters:/[\uA739\uA73B]/g},{base:"ay",letters:/[\uA73D]/g},{base:"b",letters:/[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253]/g},{base:"c",letters:/[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184]/g},{base:"d",letters:/[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A]/g},{base:"dz",letters:/[\u01F3\u01C6]/g},{base:"e",letters:/[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD]/g},{base:"f",letters:/[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C]/g},{base:"g",letters:/[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F]/g},{base:"h",letters:/[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265]/g},{base:"hv",letters:/[\u0195]/g},{base:"i",letters:/[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131]/g},{base:"j",letters:/[\u006A\u24D9\uFF4A\u0135\u01F0\u0249]/g},{base:"k",letters:/[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3]/g},{base:"l",letters:/[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747]/g},{base:"lj",letters:/[\u01C9]/g},{base:"m",letters:/[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F]/g},{base:"n",letters:/[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5]/g},{base:"nj",letters:/[\u01CC]/g},{base:"o",letters:/[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275]/g},{base:"oi",letters:/[\u01A3]/g},{base:"ou",letters:/[\u0223]/g},{base:"oo",letters:/[\uA74F]/g},{base:"p",letters:/[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755]/g},{base:"q",letters:/[\u0071\u24E0\uFF51\u024B\uA757\uA759]/g},{base:"r",letters:/[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783]/g},{base:"s",letters:/[\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B]/g},{base:"t",letters:/[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787]/g},{base:"tz",letters:/[\uA729]/g},{base:"u",letters:/[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289]/g},{base:"v",letters:/[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C]/g},{base:"vy",letters:/[\uA761]/g},{base:"w",letters:/[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73]/g},{base:"x",letters:/[\u0078\u24E7\uFF58\u1E8B\u1E8D]/g},{base:"y",letters:/[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF]/g},{base:"z",letters:/[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763]/g}];t.exports=function(e){for(var t=0;t -1) return false;
+ if (props.filterOption) return props.filterOption.call(_this, option, filterValue);
+ if (!filterValue) return true;
+ var valueTest = String(option[props.valueKey]);
+ var labelTest = String(option[props.labelKey]);
+ if (props.ignoreAccents) {
+ if (props.matchProp !== 'label') valueTest = stripDiacritics(valueTest);
+ if (props.matchProp !== 'value') labelTest = stripDiacritics(labelTest);
+ }
+ if (props.ignoreCase) {
+ if (props.matchProp !== 'label') valueTest = valueTest.toLowerCase();
+ if (props.matchProp !== 'value') labelTest = labelTest.toLowerCase();
+ }
+ return props.matchPos === 'start' ? props.matchProp !== 'label' && valueTest.substr(0, filterValue.length) === filterValue || props.matchProp !== 'value' && labelTest.substr(0, filterValue.length) === filterValue : props.matchProp !== 'label' && valueTest.indexOf(filterValue) >= 0 || props.matchProp !== 'value' && labelTest.indexOf(filterValue) >= 0;
+ });
+}
+
+function isGroup$1(option) {
+ return option && Array.isArray(option.options);
+}
+
+function menuRenderer(_ref) {
+ var focusedOption = _ref.focusedOption,
+ instancePrefix = _ref.instancePrefix,
+ labelKey = _ref.labelKey,
+ onFocus = _ref.onFocus,
+ onOptionRef = _ref.onOptionRef,
+ onSelect = _ref.onSelect,
+ optionClassName = _ref.optionClassName,
+ optionComponent = _ref.optionComponent,
+ optionGroupComponent = _ref.optionGroupComponent,
+ optionRenderer = _ref.optionRenderer,
+ options = _ref.options,
+ valueArray = _ref.valueArray,
+ valueKey = _ref.valueKey;
+
+ var OptionGroup = optionGroupComponent;
+ var Option = optionComponent;
+ var renderLabel = optionRenderer || this.getOptionLabel;
+
+ var renderOptions = function renderOptions(optionsSubset) {
+ return optionsSubset.map(function (option, i) {
+ if (isGroup$1(option)) {
+ var optionGroupClass = classNames({
+ 'Select-option-group': true
+ });
+
+ return React.createElement(
+ OptionGroup,
+ {
+ className: optionGroupClass,
+ key: 'option-group-' + i,
+ label: renderLabel(option),
+ option: option,
+ optionIndex: i
+ },
+ renderOptions(option.options)
+ );
+ } else {
+ var isSelected = valueArray && valueArray.indexOf(option) > -1;
+ var isFocused = option === focusedOption;
+ var optionClass = classNames(optionClassName, {
+ 'Select-option': true,
+ 'is-selected': isSelected,
+ 'is-focused': isFocused,
+ 'is-disabled': option.disabled
+ });
+
+ return React.createElement(
+ Option,
+ {
+ className: optionClass,
+ instancePrefix: instancePrefix,
+ isDisabled: option.disabled,
+ isFocused: isFocused,
+ isSelected: isSelected,
+ key: 'option-' + i + '-' + option[valueKey],
+ onFocus: onFocus,
+ onSelect: onSelect,
+ option: option,
+ optionIndex: i,
+ ref: function ref(_ref2) {
+ onOptionRef(_ref2, isFocused);
+ }
+ },
+ renderLabel(option, i)
+ );
+ }
+ });
+ };
+
+ return renderOptions(options);
+}
+
+function clearRenderer() {
+ return React.createElement('span', {
+ className: 'Select-clear',
+ dangerouslySetInnerHTML: { __html: '×' }
+ });
+}
+
+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 asyncGenerator = function () {
+ function AwaitValue(value) {
+ this.value = value;
+ }
+
+ function AsyncGenerator(gen) {
+ var front, back;
+
+ function send(key, arg) {
+ return new Promise(function (resolve, reject) {
+ var request = {
+ key: key,
+ arg: arg,
+ resolve: resolve,
+ reject: reject,
+ next: null
+ };
+
+ if (back) {
+ back = back.next = request;
+ } else {
+ front = back = request;
+ resume(key, arg);
+ }
+ });
+ }
+
+ function resume(key, arg) {
+ try {
+ var result = gen[key](arg);
+ var value = result.value;
+
+ if (value instanceof AwaitValue) {
+ Promise.resolve(value.value).then(function (arg) {
+ resume("next", arg);
+ }, function (arg) {
+ resume("throw", arg);
+ });
+ } else {
+ settle(result.done ? "return" : "normal", result.value);
+ }
+ } catch (err) {
+ settle("throw", err);
+ }
+ }
+
+ function settle(type, value) {
+ switch (type) {
+ case "return":
+ front.resolve({
+ value: value,
+ done: true
+ });
+ break;
+
+ case "throw":
+ front.reject(value);
+ break;
+
+ default:
+ front.resolve({
+ value: value,
+ done: false
+ });
+ break;
+ }
+
+ front = front.next;
+
+ if (front) {
+ resume(front.key, front.arg);
+ } else {
+ back = null;
+ }
+ }
+
+ this._invoke = send;
+
+ if (typeof gen.return !== "function") {
+ this.return = undefined;
+ }
+ }
+
+ if (typeof Symbol === "function" && Symbol.asyncIterator) {
+ AsyncGenerator.prototype[Symbol.asyncIterator] = function () {
+ return this;
+ };
+ }
+
+ AsyncGenerator.prototype.next = function (arg) {
+ return this._invoke("next", arg);
+ };
+
+ AsyncGenerator.prototype.throw = function (arg) {
+ return this._invoke("throw", arg);
+ };
+
+ AsyncGenerator.prototype.return = function (arg) {
+ return this._invoke("return", arg);
+ };
+
+ return {
+ wrap: function (fn) {
+ return function () {
+ return new AsyncGenerator(fn.apply(this, arguments));
+ };
+ },
+ await: function (value) {
+ return new AwaitValue(value);
+ }
+ };
+}();
+
+
+
+
+
+var classCallCheck = function (instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+};
+
+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 defineProperty = function (obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+
+ return obj;
+};
+
+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 inherits = function (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 objectWithoutProperties = function (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;
+};
+
+var possibleConstructorReturn = function (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;
+};
+
+var Dropdown = function (_React$Component) {
+ inherits(Dropdown, _React$Component);
+
+ function Dropdown() {
+ classCallCheck(this, Dropdown);
+ return possibleConstructorReturn(this, (Dropdown.__proto__ || Object.getPrototypeOf(Dropdown)).apply(this, arguments));
+ }
+
+ createClass(Dropdown, [{
+ key: 'render',
+ value: function render() {
+ // This component adds no markup
+ return this.props.children;
+ }
+ }]);
+ return Dropdown;
+}(React.Component);
+
+
+
+Dropdown.propTypes = {
+ children: PropTypes.node
+};
+
+var Option = function (_React$Component) {
+ inherits(Option, _React$Component);
+
+ function Option(props) {
+ classCallCheck(this, Option);
+
+ var _this = possibleConstructorReturn(this, (Option.__proto__ || Object.getPrototypeOf(Option)).call(this, props));
+
+ _this.handleMouseDown = _this.handleMouseDown.bind(_this);
+ _this.handleMouseEnter = _this.handleMouseEnter.bind(_this);
+ _this.handleMouseMove = _this.handleMouseMove.bind(_this);
+ _this.handleTouchStart = _this.handleTouchStart.bind(_this);
+ _this.handleTouchEnd = _this.handleTouchEnd.bind(_this);
+ _this.handleTouchMove = _this.handleTouchMove.bind(_this);
+ _this.onFocus = _this.onFocus.bind(_this);
+ return _this;
+ }
+
+ 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();
+ event.stopPropagation();
+ this.props.onSelect(this.props.option, event);
+ }
+ }, {
+ key: 'handleMouseEnter',
+ value: function handleMouseEnter(event) {
+ this.onFocus(event);
+ }
+ }, {
+ key: 'handleMouseMove',
+ value: function handleMouseMove(event) {
+ this.onFocus(event);
+ }
+ }, {
+ key: 'handleTouchEnd',
+ value: function handleTouchEnd(event) {
+ // Check if the view is being dragged, In this case
+ // we don't want to fire the click event (because the user only wants to scroll)
+ if (this.dragging) return;
+
+ this.handleMouseDown(event);
+ }
+ }, {
+ key: 'handleTouchMove',
+ value: function handleTouchMove(event) {
+ // Set a flag that the view is being dragged
+ this.dragging = true;
+ }
+ }, {
+ key: 'handleTouchStart',
+ value: function handleTouchStart(event) {
+ // Set a flag that the view is not being dragged
+ this.dragging = false;
+ }
+ }, {
+ key: 'onFocus',
+ value: function onFocus(event) {
+ if (!this.props.isFocused) {
+ this.props.onFocus(this.props.option, event);
+ }
+ }
+ }, {
+ key: 'render',
+ value: function render() {
+ var _props = this.props,
+ option = _props.option,
+ instancePrefix = _props.instancePrefix,
+ optionIndex = _props.optionIndex;
+
+ var className = classNames(this.props.className, option.className);
+
+ return option.disabled ? React.createElement(
+ 'div',
+ { className: className,
+ onMouseDown: this.blockEvent,
+ onClick: this.blockEvent },
+ this.props.children
+ ) : React.createElement(
+ 'div',
+ { className: className,
+ style: option.style,
+ role: 'option',
+ onMouseDown: this.handleMouseDown,
+ onMouseEnter: this.handleMouseEnter,
+ onMouseMove: this.handleMouseMove,
+ onTouchStart: this.handleTouchStart,
+ onTouchMove: this.handleTouchMove,
+ onTouchEnd: this.handleTouchEnd,
+ id: instancePrefix + '-option-' + optionIndex,
+ title: option.title },
+ this.props.children
+ );
+ }
+ }]);
+ return Option;
+}(React.Component);
+
+
+
+Option.propTypes = {
+ children: PropTypes.node,
+ className: PropTypes.string, // className (based on mouse position)
+ instancePrefix: PropTypes.string.isRequired, // unique prefix for the ids (used for aria)
+ isDisabled: PropTypes.bool, // the option is disabled
+ isFocused: PropTypes.bool, // the option is focused
+ isSelected: PropTypes.bool, // the option is selected
+ onFocus: PropTypes.func, // method to handle mouseEnter on option element
+ onSelect: PropTypes.func, // method to handle click on option element
+ onUnfocus: PropTypes.func, // method to handle mouseLeave on option element
+ option: PropTypes.object.isRequired, // object that is base for that option
+ optionIndex: PropTypes.number // index of the option, used to generate unique ids for aria
+};
+
+var OptionGroup = function (_React$Component) {
+ inherits(OptionGroup, _React$Component);
+
+ function OptionGroup() {
+ classCallCheck(this, OptionGroup);
+ return possibleConstructorReturn(this, (OptionGroup.__proto__ || Object.getPrototypeOf(OptionGroup)).apply(this, arguments));
+ }
+
+ createClass(OptionGroup, [{
+ 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();
+ event.stopPropagation();
+ }
+ }, {
+ key: 'handleTouchEnd',
+ value: function handleTouchEnd(event) {
+ // Check if the view is being dragged, In this case
+ // we don't want to fire the click event (because the user only wants to scroll)
+ if (this.dragging) return;
+
+ this.handleMouseDown(event);
+ }
+ }, {
+ key: 'handleTouchMove',
+ value: function handleTouchMove(event) {
+ // Set a flag that the view is being dragged
+ this.dragging = true;
+ }
+ }, {
+ key: 'handleTouchStart',
+ value: function handleTouchStart(event) {
+ // Set a flag that the view is not being dragged
+ this.dragging = false;
+ }
+ }, {
+ key: 'render',
+ value: function render() {
+ var option = this.props.option;
+
+ var className = classNames(this.props.className, option.className);
+
+ return option.disabled ? React.createElement(
+ 'div',
+ { className: className,
+ onMouseDown: this.blockEvent,
+ onClick: this.blockEvent },
+ this.props.children
+ ) : React.createElement(
+ 'div',
+ { className: className,
+ style: option.style,
+ onMouseDown: this.handleMouseDown,
+ onMouseEnter: this.handleMouseEnter,
+ onMouseMove: this.handleMouseMove,
+ onTouchStart: this.handleTouchStart,
+ onTouchMove: this.handleTouchMove,
+ onTouchEnd: this.handleTouchEnd,
+ title: option.title },
+ React.createElement(
+ 'div',
+ { className: 'Select-option-group-label' },
+ this.props.label
+ ),
+ this.props.children
+ );
+ }
+ }]);
+ return OptionGroup;
+}(React.Component);
+
+
+
+OptionGroup.propTypes = {
+ children: PropTypes.any,
+ className: PropTypes.string, // className (based on mouse position)
+ label: PropTypes.node, // the heading to show above the child options
+ option: PropTypes.object.isRequired // object that is base for that option group
+};
+
+var Value = function (_React$Component) {
+ inherits(Value, _React$Component);
+
+ function Value(props) {
+ classCallCheck(this, Value);
+
+ var _this = possibleConstructorReturn(this, (Value.__proto__ || Object.getPrototypeOf(Value)).call(this, props));
+
+ _this.handleMouseDown = _this.handleMouseDown.bind(_this);
+ _this.onRemove = _this.onRemove.bind(_this);
+ _this.handleTouchEndRemove = _this.handleTouchEndRemove.bind(_this);
+ _this.handleTouchMove = _this.handleTouchMove.bind(_this);
+ _this.handleTouchStart = _this.handleTouchStart.bind(_this);
+ return _this;
+ }
+
+ createClass(Value, [{
+ key: 'handleMouseDown',
+ value: function handleMouseDown(event) {
+ if (event.type === 'mousedown' && event.button !== 0) {
+ return;
+ }
+ if (this.props.onClick) {
+ event.stopPropagation();
+ this.props.onClick(this.props.value, event);
+ return;
+ }
+ if (this.props.value.href) {
+ event.stopPropagation();
+ }
+ }
+ }, {
+ key: 'onRemove',
+ value: function onRemove(event) {
+ event.preventDefault();
+ event.stopPropagation();
+ this.props.onRemove(this.props.value);
+ }
+ }, {
+ key: 'handleTouchEndRemove',
+ value: function handleTouchEndRemove(event) {
+ // Check if the view is being dragged, In this case
+ // we don't want to fire the click event (because the user only wants to scroll)
+ if (this.dragging) return;
+
+ // Fire the mouse events
+ this.onRemove(event);
+ }
+ }, {
+ key: 'handleTouchMove',
+ value: function handleTouchMove(event) {
+ // Set a flag that the view is being dragged
+ this.dragging = true;
+ }
+ }, {
+ key: 'handleTouchStart',
+ value: function handleTouchStart(event) {
+ // Set a flag that the view is not being dragged
+ this.dragging = false;
+ }
+ }, {
+ key: 'renderRemoveIcon',
+ value: function renderRemoveIcon() {
+ if (this.props.disabled || !this.props.onRemove) return;
+ return React.createElement(
+ 'span',
+ { className: 'Select-value-icon',
+ 'aria-hidden': 'true',
+ onMouseDown: this.onRemove,
+ onTouchEnd: this.handleTouchEndRemove,
+ onTouchStart: this.handleTouchStart,
+ onTouchMove: this.handleTouchMove },
+ '\xD7'
+ );
+ }
+ }, {
+ key: 'renderLabel',
+ value: function renderLabel() {
+ var className = 'Select-value-label';
+ return this.props.onClick || this.props.value.href ? React.createElement(
+ 'a',
+ { className: className, href: this.props.value.href, target: this.props.value.target, onMouseDown: this.handleMouseDown, onTouchEnd: this.handleMouseDown },
+ this.props.children
+ ) : React.createElement(
+ 'span',
+ { className: className, role: 'option', 'aria-selected': 'true', id: this.props.id },
+ this.props.children
+ );
+ }
+ }, {
+ key: 'render',
+ value: function render() {
+ return React.createElement(
+ 'div',
+ { className: classNames('Select-value', this.props.value.className),
+ style: this.props.value.style,
+ title: this.props.value.title
+ },
+ this.renderRemoveIcon(),
+ this.renderLabel()
+ );
+ }
+ }]);
+ return Value;
+}(React.Component);
+
+
+
+Value.propTypes = {
+ children: PropTypes.node,
+ disabled: PropTypes.bool, // disabled prop passed to ReactSelect
+ id: PropTypes.string, // Unique id for the value - used for aria
+ onClick: PropTypes.func, // method to handle click on value label
+ onRemove: PropTypes.func, // method to handle removal of the value
+ 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
+*/
+function clone(obj) {
+ var copy = {};
+ for (var attr in obj) {
+ if (obj.hasOwnProperty(attr)) {
+ copy[attr] = obj[attr];
+ }
+ }
+ return copy;
+}
+
+function isGroup(option) {
+ return option && Array.isArray(option.options);
+}
+
+var stringifyValue = function stringifyValue(value) {
+ return typeof value === 'string' ? value : value !== null && JSON.stringify(value) || '';
+};
+
+var stringOrNode = PropTypes.oneOfType([PropTypes.string, PropTypes.node]);
+
+var instanceId = 1;
+
+var Select$1 = function (_React$Component) {
+ inherits(Select, _React$Component);
+
+ function Select(props) {
+ classCallCheck(this, Select);
+
+ 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) {
+ return _this[fn] = _this[fn].bind(_this);
+ });
+
+ _this.state = {
+ inputValue: '',
+ isFocused: false,
+ isOpen: false,
+ isPseudoFocused: false,
+ required: false
+ };
+ return _this;
+ }
+
+ createClass(Select, [{
+ key: 'componentWillMount',
+ value: function componentWillMount() {
+ this._flatOptions = this.flattenOptions(this.props.options);
+ this._instancePrefix = 'react-select-' + (this.props.instanceId || ++instanceId) + '-';
+ var valueArray = this.getValueArray(this.props.value);
+
+ if (this.props.required) {
+ this.setState({
+ required: this.handleRequired(valueArray[0], this.props.multi)
+ });
+ }
+ }
+ }, {
+ key: 'componentDidMount',
+ value: function componentDidMount() {
+ if (this.props.autofocus) {
+ this.focus();
+ }
+ }
+ }, {
+ key: 'componentWillReceiveProps',
+ value: function componentWillReceiveProps(nextProps) {
+ if (nextProps.options !== this.props.options) {
+ this._flatOptions = this.flattenOptions(nextProps.options);
+ }
+
+ var valueArray = this.getValueArray(nextProps.value, nextProps);
+
+ if (!nextProps.isOpen && this.props.isOpen) {
+ this.closeMenu();
+ }
+
+ if (nextProps.required) {
+ this.setState({
+ required: this.handleRequired(valueArray[0], nextProps.multi)
+ });
+ } else if (this.props.required) {
+ // Used to be required but it's not any more
+ this.setState({ required: false });
+ }
+ }
+ }, {
+ key: 'componentWillUpdate',
+ value: function componentWillUpdate(nextProps, nextState) {
+ if (nextState.isOpen !== this.state.isOpen) {
+ this.toggleTouchOutsideEvent(nextState.isOpen);
+ var handler = nextState.isOpen ? nextProps.onOpen : nextProps.onClose;
+ handler && handler();
+ }
+ }
+ }, {
+ key: 'componentDidUpdate',
+ value: function componentDidUpdate(prevProps, prevState) {
+ // focus to the selected option
+ if (this.menu && this.focused && this.state.isOpen && !this.hasScrolledToOption) {
+ var focusedOptionNode = ReactDOM.findDOMNode(this.focused);
+ var focusedOptionPreviousSibling = focusedOptionNode.previousSibling;
+ var focusedOptionParent = focusedOptionNode.parentElement;
+ var menuNode = ReactDOM.findDOMNode(this.menu);
+ if (focusedOptionPreviousSibling) {
+ menuNode.scrollTop = focusedOptionPreviousSibling.offsetTop;
+ } else if (focusedOptionParent && focusedOptionParent === 'Select-menu') {
+ menuNode.scrollTop = focusedOptionParent.offsetTop;
+ } else {
+ menuNode.scrollTop = focusedOptionNode.offsetTop;
+ }
+ this.hasScrolledToOption = true;
+ } else if (!this.state.isOpen) {
+ this.hasScrolledToOption = false;
+ }
+
+ if (this._scrollToFocusedOptionOnUpdate && this.focused && this.menu) {
+ this._scrollToFocusedOptionOnUpdate = false;
+ var focusedDOM = ReactDOM.findDOMNode(this.focused);
+ var menuDOM = ReactDOM.findDOMNode(this.menu);
+ var focusedRect = focusedDOM.getBoundingClientRect();
+ var menuRect = menuDOM.getBoundingClientRect();
+ if (focusedRect.bottom > menuRect.bottom) {
+ menuDOM.scrollTop = focusedDOM.offsetTop + focusedDOM.clientHeight - menuDOM.offsetHeight;
+ } else if (focusedRect.top < menuRect.top) {
+ menuDOM.scrollTop = focusedDOM.offsetTop;
+ }
+ }
+ if (this.props.scrollMenuIntoView && this.menuContainer) {
+ var menuContainerRect = this.menuContainer.getBoundingClientRect();
+ if (window.innerHeight < menuContainerRect.bottom + this.props.menuBuffer) {
+ window.scrollBy(0, menuContainerRect.bottom + this.props.menuBuffer - window.innerHeight);
+ }
+ }
+ if (prevProps.disabled !== this.props.disabled) {
+ this.setState({ isFocused: false }); // eslint-disable-line react/no-did-update-set-state
+ this.closeMenu();
+ }
+ }
+ }, {
+ key: 'componentWillUnmount',
+ value: function componentWillUnmount() {
+ if (!document.removeEventListener && document.detachEvent) {
+ document.detachEvent('ontouchstart', this.handleTouchOutside);
+ } else {
+ document.removeEventListener('touchstart', this.handleTouchOutside);
+ }
+ }
+ }, {
+ key: 'toggleTouchOutsideEvent',
+ value: function toggleTouchOutsideEvent(enabled) {
+ if (enabled) {
+ if (!document.addEventListener && document.attachEvent) {
+ document.attachEvent('ontouchstart', this.handleTouchOutside);
+ } else {
+ document.addEventListener('touchstart', this.handleTouchOutside);
+ }
+ } else {
+ if (!document.removeEventListener && document.detachEvent) {
+ document.detachEvent('ontouchstart', this.handleTouchOutside);
+ } else {
+ document.removeEventListener('touchstart', this.handleTouchOutside);
+ }
+ }
+ }
+ }, {
+ key: 'handleTouchOutside',
+ value: function handleTouchOutside(event) {
+ // handle touch outside on ios to dismiss menu
+ if (this.wrapper && !this.wrapper.contains(event.target) && this.menuContainer && !this.menuContainer.contains(event.target)) {
+ this.closeMenu();
+ }
+ }
+ }, {
+ key: 'focus',
+ value: function focus() {
+ if (!this.input) return;
+ this.input.focus();
+ }
+ }, {
+ key: 'blurInput',
+ value: function blurInput() {
+ if (!this.input) return;
+ this.input.blur();
+ }
+ }, {
+ key: 'handleTouchMove',
+ value: function handleTouchMove(event) {
+ // Set a flag that the view is being dragged
+ this.dragging = true;
+ }
+ }, {
+ key: 'handleTouchStart',
+ value: function handleTouchStart(event) {
+ // Set a flag that the view is not being dragged
+ this.dragging = false;
+ }
+ }, {
+ key: 'handleTouchEnd',
+ value: function handleTouchEnd(event) {
+ // Check if the view is being dragged, In this case
+ // we don't want to fire the click event (because the user only wants to scroll)
+ if (this.dragging) return;
+
+ // Fire the mouse events
+ this.handleMouseDown(event);
+ }
+ }, {
+ key: 'handleTouchEndClearValue',
+ value: function handleTouchEndClearValue(event) {
+ // Check if the view is being dragged, In this case
+ // we don't want to fire the click event (because the user only wants to scroll)
+ if (this.dragging) return;
+
+ // Clear the value
+ this.clearValue(event);
+ }
+ }, {
+ key: 'handleMouseDown',
+ value: function handleMouseDown(event) {
+ // if the event was triggered by a mousedown and not the primary
+ // button, or if the component is disabled, ignore it.
+ if (this.props.disabled || event.type === 'mousedown' && event.button !== 0) {
+ return;
+ }
+
+ if (event.target.tagName === 'INPUT') {
+ return;
+ }
+
+ // prevent default event handlers
+ event.stopPropagation();
+ event.preventDefault();
+
+ // 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.focus();
+ return this.setState({
+ isOpen: !this.state.isOpen
+ });
+ }
+
+ if (this.state.isFocused) {
+ // On iOS, we can get into a state where we think the input is focused but it isn't really,
+ // since iOS ignores programmatic calls to input.focus() that weren't triggered by a click event.
+ // Call focus() again here to be safe.
+ this.focus();
+
+ var input = this.input;
+ if (typeof input.getInput === 'function') {
+ // Get the actual DOM input if the ref is an component
+ input = input.getInput();
+ }
+
+ // clears the value so that the cursor will be at the end of input when the component re-renders
+ input.value = '';
+
+ // if the input is focused, ensure the menu is open
+ this.setState({
+ isOpen: true,
+ isPseudoFocused: false
+ });
+ } else {
+ // otherwise, focus the input and open the menu
+ this._openAfterFocus = this.props.openOnClick;
+ this.focus();
+ }
+ }
+ }, {
+ key: 'handleMouseDownOnArrow',
+ value: function handleMouseDownOnArrow(event) {
+ // if the event was triggered by a mousedown and not the primary
+ // button, or if the component is disabled, ignore it.
+ if (this.props.disabled || event.type === 'mousedown' && event.button !== 0) {
+ return;
+ }
+ // If the menu isn't open, let the event bubble to the main handleMouseDown
+ if (!this.state.isOpen) {
+ return;
+ }
+ // prevent default event handlers
+ event.stopPropagation();
+ event.preventDefault();
+ // close the menu
+ this.closeMenu();
+ }
+ }, {
+ key: 'handleMouseDownOnMenu',
+ value: function handleMouseDownOnMenu(event) {
+ // if the event was triggered by a mousedown and not the primary
+ // button, or if the component is disabled, ignore it.
+ if (this.props.disabled || event.type === 'mousedown' && event.button !== 0) {
+ return;
+ }
+ event.stopPropagation();
+ event.preventDefault();
+
+ this._openAfterFocus = true;
+ this.focus();
+ }
+ }, {
+ key: 'closeMenu',
+ value: function closeMenu() {
+ if (this.props.onCloseResetsInput) {
+ this.setState({
+ isOpen: false,
+ isPseudoFocused: this.state.isFocused && !this.props.multi,
+ inputValue: this.handleInputValueChange('')
+ });
+ } else {
+ this.setState({
+ isOpen: false,
+ isPseudoFocused: this.state.isFocused && !this.props.multi
+ });
+ }
+ this.hasScrolledToOption = false;
+ }
+ }, {
+ key: 'handleInputFocus',
+ value: function handleInputFocus(event) {
+ if (this.props.disabled) return;
+ var isOpen = this.state.isOpen || this._openAfterFocus || this.props.openOnFocus;
+ if (this.props.onFocus) {
+ this.props.onFocus(event);
+ }
+ this.setState({
+ isFocused: true,
+ isOpen: isOpen
+ });
+ this._openAfterFocus = false;
+ }
+ }, {
+ key: 'handleInputBlur',
+ value: function handleInputBlur(event) {
+ // The check for menu.contains(activeElement) is necessary to prevent IE11's scrollbar from closing the menu in certain contexts.
+ if (this.menu && (this.menu === document.activeElement || this.menu.contains(document.activeElement))) {
+ this.focus();
+ return;
+ }
+
+ if (this.props.onBlur) {
+ this.props.onBlur(event);
+ }
+ var onBlurredState = {
+ isFocused: false,
+ isOpen: false,
+ isPseudoFocused: false
+ };
+ if (this.props.onBlurResetsInput) {
+ onBlurredState.inputValue = this.handleInputValueChange('');
+ }
+ this.setState(onBlurredState);
+ }
+ }, {
+ key: 'handleInputChange',
+ value: function handleInputChange(event) {
+ var newInputValue = event.target.value;
+
+ if (this.state.inputValue !== event.target.value) {
+ newInputValue = this.handleInputValueChange(newInputValue);
+ }
+
+ this.setState({
+ isOpen: true,
+ isPseudoFocused: false,
+ inputValue: newInputValue
+ });
+ }
+ }, {
+ key: 'handleInputValueChange',
+ value: function handleInputValueChange(newValue) {
+ if (this.props.onInputChange) {
+ var nextState = this.props.onInputChange(newValue);
+ // Note: != used deliberately here to catch undefined and null
+ if (nextState != null && (typeof nextState === 'undefined' ? 'undefined' : _typeof(nextState)) !== 'object') {
+ newValue = '' + nextState;
+ }
+ }
+ return newValue;
+ }
+ }, {
+ key: 'handleKeyDown',
+ value: function handleKeyDown(event) {
+ if (this.props.disabled) return;
+
+ if (typeof this.props.onInputKeyDown === 'function') {
+ this.props.onInputKeyDown(event);
+ if (event.defaultPrevented) {
+ return;
+ }
+ }
+
+ switch (event.keyCode) {
+ case 8:
+ // backspace
+ if (!this.state.inputValue && this.props.backspaceRemoves) {
+ event.preventDefault();
+ this.popValue();
+ }
+ return;
+ case 9:
+ // tab
+ if (event.shiftKey || !this.state.isOpen || !this.props.tabSelectsValue) {
+ return;
+ }
+ this.selectFocusedOption();
+ return;
+ case 13:
+ // enter
+ if (!this.state.isOpen) return;
+ event.stopPropagation();
+ this.selectFocusedOption();
+ break;
+ case 27:
+ // escape
+ if (this.state.isOpen) {
+ this.closeMenu();
+ event.stopPropagation();
+ } else if (this.props.clearable && this.props.escapeClearsValue) {
+ this.clearValue(event);
+ event.stopPropagation();
+ }
+ break;
+ case 38:
+ // up
+ this.focusPreviousOption();
+ break;
+ case 40:
+ // down
+ this.focusNextOption();
+ break;
+ case 33:
+ // page up
+ this.focusPageUpOption();
+ break;
+ case 34:
+ // page down
+ this.focusPageDownOption();
+ break;
+ case 35:
+ // end key
+ if (event.shiftKey) {
+ return;
+ }
+ this.focusEndOption();
+ break;
+ case 36:
+ // home key
+ if (event.shiftKey) {
+ return;
+ }
+ this.focusStartOption();
+ break;
+ case 46:
+ // backspace
+ if (!this.state.inputValue && this.props.deleteRemoves) {
+ event.preventDefault();
+ this.popValue();
+ }
+ return;
+ default:
+ return;
+ }
+ event.preventDefault();
+ }
+ }, {
+ key: 'handleValueClick',
+ value: function handleValueClick(option, event) {
+ if (!this.props.onValueClick) return;
+ this.props.onValueClick(option, event);
+ }
+ }, {
+ key: 'handleMenuScroll',
+ value: function handleMenuScroll(event) {
+ if (!this.props.onMenuScrollToBottom) return;
+ var target = event.target;
+
+ if (target.scrollHeight > target.offsetHeight && target.scrollHeight - target.offsetHeight - target.scrollTop <= 0) {
+ 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
+ */
+
+ }, {
+ key: 'getValueArray',
+ value: function getValueArray(value, nextProps) {
+ var _this2 = this;
+
+ /** 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;
+ if (props.multi) {
+ if (typeof value === 'string') value = value.split(props.delimiter);
+ if (!Array.isArray(value)) {
+ if (value === null || value === undefined) return [];
+ value = [value];
+ }
+ return value.map(function (value) {
+ return _this2.expandValue(value, props);
+ }).filter(function (i) {
+ return i;
+ });
+ }
+ var expandedValue = this.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 _props = this.props,
+ labelKey = _props.labelKey,
+ valueKey = _props.valueKey,
+ renderInvalidValues = _props.renderInvalidValues;
+
+ var options = this._flatOptions;
+ if (!options || value === '') return;
+ for (var i = 0; i < options.length; i++) {
+ if (options[i][valueKey] === value) return options[i];
+ }
+
+ // no matching option, return an invalid option if renderInvalidValues is enabled
+ if (renderInvalidValues) {
+ var _ref;
+
+ this._invalidOptions = this._invalidOptions || {};
+ this._invalidOptions[value] = this._invalidOptions[value] || (_ref = {
+ invalid: true
+ }, defineProperty(_ref, labelKey, value), defineProperty(_ref, valueKey, value), _ref);
+ return this._invalidOptions[value];
+ }
+ }
+ }, {
+ key: 'setValue',
+ value: function setValue(value) {
+ var _this3 = this;
+
+ if (this.props.autoBlur) {
+ this.blurInput();
+ }
+ if (this.props.required) {
+ var required = this.handleRequired(value, this.props.multi);
+ this.setState({ required: required });
+ }
+ 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;
+
+ // NOTE: we actually add/set the value in a callback to make sure the
+ // input value is empty to avoid styling issues in Chrome
+ if (this.props.closeOnSelect) {
+ this.hasScrolledToOption = false;
+ }
+ if (this.props.multi) {
+ var updatedValue = this.props.onSelectResetsInput ? '' : this.state.inputValue;
+ this.setState({
+ focusedIndex: null,
+ inputValue: this.handleInputValueChange(updatedValue),
+ isOpen: !this.props.closeOnSelect
+ }, function () {
+ _this4.addValue(value);
+ });
+ } else {
+ this.setState({
+ inputValue: this.handleInputValueChange(''),
+ isOpen: !this.props.closeOnSelect,
+ isPseudoFocused: this.state.isFocused
+ }, function () {
+ _this4.setValue(value);
+ });
+ }
+ }
+ }, {
+ key: 'addValue',
+ value: function addValue(value) {
+ var valueArray = this.getValueArray(this.props.value);
+ var visibleOptions = this._visibleOptions.filter(function (val) {
+ return !val.disabled;
+ });
+ var lastValueIndex = visibleOptions.indexOf(value);
+ this.setValue(valueArray.concat(value));
+ if (visibleOptions.length - 1 === lastValueIndex) {
+ // the last option was selected; focus the second-last one
+ this.focusOption(visibleOptions[lastValueIndex - 1]);
+ } else if (visibleOptions.length > lastValueIndex) {
+ // focus the option below the selected one
+ this.focusOption(visibleOptions[lastValueIndex + 1]);
+ }
+ }
+ }, {
+ key: 'popValue',
+ value: function popValue() {
+ var valueArray = this.getValueArray(this.props.value);
+ if (!valueArray.length) return;
+ if (valueArray[valueArray.length - 1].clearableValue === false) return;
+ this.setValue(this.props.multi ? valueArray.slice(0, valueArray.length - 1) : null);
+ }
+ }, {
+ key: 'removeValue',
+ value: function removeValue(value) {
+ var valueArray = this.getValueArray(this.props.value);
+ this.setValue(valueArray.filter(function (i) {
+ return i !== value;
+ }));
+ this.focus();
+ }
+ }, {
+ key: 'clearValue',
+ value: function clearValue(event) {
+ // if the event was triggered by a mousedown and not the primary
+ // button, ignore it.
+ if (event && event.type === 'mousedown' && event.button !== 0) {
+ return;
+ }
+ event.stopPropagation();
+ event.preventDefault();
+ this.setValue(this.getResetValue());
+ this.setState({
+ isOpen: false,
+ inputValue: this.handleInputValueChange('')
+ }, this.focus);
+ }
+ }, {
+ key: 'getResetValue',
+ value: function getResetValue() {
+ if (this.props.resetValue !== undefined) {
+ return this.props.resetValue;
+ } else if (this.props.multi) {
+ return [];
+ } else {
+ return null;
+ }
+ }
+ }, {
+ key: 'focusOption',
+ value: function focusOption(option) {
+ this.setState({
+ focusedOption: option
+ });
+ }
+ }, {
+ key: 'focusNextOption',
+ value: function focusNextOption() {
+ this.focusAdjacentOption('next');
+ }
+ }, {
+ key: 'focusPreviousOption',
+ value: function focusPreviousOption() {
+ this.focusAdjacentOption('previous');
+ }
+ }, {
+ key: 'focusPageUpOption',
+ value: function focusPageUpOption() {
+ this.focusAdjacentOption('page_up');
+ }
+ }, {
+ key: 'focusPageDownOption',
+ value: function focusPageDownOption() {
+ this.focusAdjacentOption('page_down');
+ }
+ }, {
+ key: 'focusStartOption',
+ value: function focusStartOption() {
+ this.focusAdjacentOption('start');
+ }
+ }, {
+ key: 'focusEndOption',
+ value: function focusEndOption() {
+ this.focusAdjacentOption('end');
+ }
+ }, {
+ key: 'focusAdjacentOption',
+ value: function focusAdjacentOption(dir) {
+ var options = this._visibleOptions.map(function (option, index) {
+ return { option: option, index: index };
+ }).filter(function (option) {
+ return !option.option.disabled;
+ });
+ 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)
+ });
+ return;
+ }
+ if (!options.length) return;
+ var focusedIndex = -1;
+ for (var i = 0; i < options.length; i++) {
+ if (this._focusedOption === options[i].option) {
+ focusedIndex = i;
+ break;
+ }
+ }
+ if (dir === 'next' && focusedIndex !== -1) {
+ focusedIndex = (focusedIndex + 1) % options.length;
+ } else if (dir === 'previous') {
+ if (focusedIndex > 0) {
+ focusedIndex = focusedIndex - 1;
+ } else {
+ focusedIndex = options.length - 1;
+ }
+ } else if (dir === 'start') {
+ focusedIndex = 0;
+ } else if (dir === 'end') {
+ focusedIndex = options.length - 1;
+ } else if (dir === 'page_up') {
+ var potentialIndex = focusedIndex - this.props.pageSize;
+ if (potentialIndex < 0) {
+ focusedIndex = 0;
+ } else {
+ focusedIndex = potentialIndex;
+ }
+ } else if (dir === 'page_down') {
+ var potentialIndex = focusedIndex + this.props.pageSize;
+ if (potentialIndex > options.length - 1) {
+ focusedIndex = options.length - 1;
+ } else {
+ focusedIndex = potentialIndex;
+ }
+ }
+
+ if (focusedIndex === -1) {
+ focusedIndex = 0;
+ }
+
+ this.setState({
+ focusedIndex: options[focusedIndex].index,
+ focusedOption: options[focusedIndex].option
+ });
+ }
+ }, {
+ key: 'getFocusedOption',
+ value: function getFocusedOption() {
+ return this._focusedOption;
+ }
+ }, {
+ key: 'getInputValue',
+ value: function getInputValue() {
+ return this.state.inputValue;
+ }
+ }, {
+ key: 'selectFocusedOption',
+ value: function selectFocusedOption() {
+ if (this._focusedOption) {
+ return this.selectValue(this._focusedOption);
+ }
+ }
+ }, {
+ key: 'renderLoading',
+ value: function renderLoading() {
+ if (!this.props.isLoading) return;
+ return React.createElement(
+ 'span',
+ { className: 'Select-loading-zone', 'aria-hidden': 'true' },
+ React.createElement('span', { className: 'Select-loading' })
+ );
+ }
+ }, {
+ key: 'renderValue',
+ value: function renderValue(valueArray, isOpen) {
+ var _this5 = this;
+
+ var renderLabel = this.props.valueRenderer || this.getOptionLabel;
+ var ValueComponent = this.props.valueComponent;
+ if (!valueArray.length) {
+ return !this.state.inputValue ? React.createElement(
+ 'div',
+ { className: 'Select-placeholder' },
+ this.props.placeholder
+ ) : null;
+ }
+ var onClick = this.props.onValueClick ? this.handleValueClick : null;
+ if (this.props.multi) {
+ return valueArray.map(function (value, i) {
+ return React.createElement(
+ ValueComponent,
+ {
+ id: _this5._instancePrefix + '-value-' + i,
+ instancePrefix: _this5._instancePrefix,
+ disabled: _this5.props.disabled || value.clearableValue === false,
+ key: 'value-' + i + '-' + value[_this5.props.valueKey],
+ onClick: onClick,
+ onRemove: _this5.removeValue,
+ value: value
+ },
+ renderLabel(value, i),
+ React.createElement(
+ 'span',
+ { className: 'Select-aria-only' },
+ '\xA0'
+ )
+ );
+ });
+ } else if (!this.state.inputValue) {
+ if (isOpen) onClick = null;
+ return React.createElement(
+ ValueComponent,
+ {
+ id: this._instancePrefix + '-value-item',
+ disabled: this.props.disabled,
+ instancePrefix: this._instancePrefix,
+ onClick: onClick,
+ value: valueArray[0]
+ },
+ renderLabel(valueArray[0])
+ );
+ }
+ }
+ }, {
+ key: 'renderInput',
+ value: function renderInput(valueArray, focusedOptionIndex) {
+ var _classNames,
+ _this6 = this;
+
+ var className = classNames('Select-input', this.props.inputProps.className);
+ 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));
+
+ 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-label': this.props['aria-label'],
+ className: className,
+ tabIndex: this.props.tabIndex,
+ onBlur: this.handleInputBlur,
+ onChange: this.handleInputChange,
+ onFocus: this.handleInputFocus,
+ ref: function ref(_ref2) {
+ return _this6.input = _ref2;
+ },
+ required: this.state.required,
+ value: this.state.inputValue
+ });
+
+ if (this.props.inputRenderer) {
+ return this.props.inputRenderer(inputProps);
+ }
+
+ if (this.props.disabled || !this.props.searchable) {
+ var _props$inputProps = this.props.inputProps,
+ inputClassName = _props$inputProps.inputClassName,
+ divProps = objectWithoutProperties(_props$inputProps, ['inputClassName']);
+
+
+ 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',
+ className: className,
+ tabIndex: this.props.tabIndex || 0,
+ onBlur: this.handleInputBlur,
+ onFocus: this.handleInputFocus,
+ ref: function ref(_ref3) {
+ return _this6.input = _ref3;
+ },
+ 'aria-readonly': '' + !!this.props.disabled,
+ style: { border: 0, width: 1, display: 'inline-block' } }));
+ }
+
+ if (this.props.autosize) {
+ return React.createElement(AutosizeInput, _extends({}, inputProps, { minWidth: '5' }));
+ }
+ return React.createElement(
+ 'div',
+ { className: className },
+ React.createElement('input', inputProps)
+ );
+ }
+ }, {
+ key: 'renderClear',
+ value: function renderClear() {
+ if (!this.props.clearable || this.props.value === undefined || this.props.value === null || this.props.multi && !this.props.value.length || this.props.disabled || this.props.isLoading) return;
+ 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,
+ onMouseDown: this.clearValue,
+ onTouchStart: this.handleTouchStart,
+ onTouchMove: this.handleTouchMove,
+ onTouchEnd: this.handleTouchEndClearValue
+ },
+ clear
+ );
+ }
+ }, {
+ key: 'renderArrow',
+ value: function renderArrow() {
+ var onMouseDown = this.handleMouseDownOnArrow;
+ var isOpen = this.state.isOpen;
+ var arrow = this.props.arrowRenderer({ onMouseDown: onMouseDown, isOpen: isOpen });
+
+ return React.createElement(
+ 'span',
+ {
+ className: 'Select-arrow-zone',
+ onMouseDown: onMouseDown
+ },
+ arrow
+ );
+ }
+ }, {
+ key: 'filterFlatOptions',
+ value: function filterFlatOptions(excludeOptions) {
+ var filterValue = this.state.inputValue;
+ var flatOptions = this._flatOptions;
+ if (this.props.filterOptions) {
+ // Maintain backwards compatibility with boolean attribute
+ var filterOptions$$1 = typeof this.props.filterOptions === 'function' ? this.props.filterOptions : filterOptions;
+
+ return filterOptions$$1(flatOptions, filterValue, excludeOptions, {
+ 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
+ });
+ } else {
+ return flatOptions;
+ }
+ }
+ }, {
+ key: 'flattenOptions',
+ value: function flattenOptions(options, group) {
+ if (!options) return [];
+ var flatOptions = [];
+ for (var i = 0; i < options.length; i++) {
+ // We clone each option with a pointer to its parent group for efficient unflattening
+ var optionCopy = clone(options[i]);
+ optionCopy.isInTree = false;
+ if (group) {
+ optionCopy.group = group;
+ }
+ if (isGroup(optionCopy)) {
+ flatOptions = flatOptions.concat(this.flattenOptions(optionCopy.options, optionCopy));
+ optionCopy.options = [];
+ } else {
+ flatOptions.push(optionCopy);
+ }
+ }
+ return flatOptions;
+ }
+ }, {
+ key: 'unflattenOptions',
+ value: function unflattenOptions(flatOptions) {
+ var groupedOptions = [];
+ var parent = void 0,
+ child = void 0;
+
+ // Remove all ancestor groups from the tree
+ flatOptions.forEach(function (option) {
+ option.isInTree = false;
+ parent = option.group;
+ while (parent) {
+ if (parent.isInTree) {
+ parent.options = [];
+ parent.isInTree = false;
+ }
+ parent = parent.group;
+ }
+ });
+
+ // Now reconstruct the options tree
+ flatOptions.forEach(function (option) {
+ child = option;
+ parent = child.group;
+ while (parent) {
+ if (!child.isInTree) {
+ parent.options.push(child);
+ child.isInTree = true;
+ }
+
+ child = parent;
+ parent = child.group;
+ }
+ if (!child.isInTree) {
+ groupedOptions.push(child);
+ child.isInTree = true;
+ }
+ });
+ return groupedOptions;
+ }
+ }, {
+ key: 'onOptionRef',
+ value: function onOptionRef(ref, isFocused) {
+ if (isFocused) {
+ this.focused = ref;
+ }
+ }
+ }, {
+ key: 'renderMenu',
+ value: function renderMenu(options, valueArray, focusedOption) {
+ if (options && options.length) {
+ return this.props.menuRenderer({
+ focusedOption: focusedOption,
+ focusOption: this.focusOption,
+ instancePrefix: this._instancePrefix,
+ labelKey: this.props.labelKey,
+ onFocus: this.focusOption,
+ onOptionRef: this.onOptionRef,
+ onSelect: this.selectValue,
+ optionClassName: this.props.optionClassName,
+ optionComponent: this.props.optionComponent,
+ optionGroupComponent: this.props.optionGroupComponent,
+ optionRenderer: this.props.optionRenderer || this.getOptionLabel,
+ options: options,
+ selectValue: this.selectValue,
+ valueArray: valueArray,
+ valueKey: this.props.valueKey
+ });
+ } else if (this.props.noResultsText) {
+ return React.createElement(
+ 'div',
+ { className: 'Select-noresults' },
+ this.props.noResultsText
+ );
+ } else {
+ return null;
+ }
+ }
+ }, {
+ key: 'renderHiddenField',
+ value: function renderHiddenField(valueArray) {
+ var _this7 = this;
+
+ if (!this.props.name) return;
+ if (this.props.joinValues) {
+ var value = valueArray.map(function (i) {
+ return stringifyValue(i[_this7.props.valueKey]);
+ }).join(this.props.delimiter);
+ return React.createElement('input', {
+ type: 'hidden',
+ ref: function ref(_ref4) {
+ return _this7.value = _ref4;
+ },
+ name: this.props.name,
+ value: value,
+ disabled: this.props.disabled });
+ }
+ return valueArray.map(function (item, index) {
+ return React.createElement('input', { key: 'hidden.' + index,
+ type: 'hidden',
+ ref: 'value' + index,
+ name: _this7.props.name,
+ value: stringifyValue(item[_this7.props.valueKey]),
+ disabled: _this7.props.disabled });
+ });
+ }
+ }, {
+ key: 'getFocusableOptionIndex',
+ value: function getFocusableOptionIndex(selectedOption) {
+ var options = this._visibleOptions;
+ if (!options.length) return null;
+
+ var valueKey = this.props.valueKey;
+ var focusedOption = this.state.focusedOption || selectedOption;
+ if (focusedOption && !focusedOption.disabled) {
+ var focusedOptionIndex = -1;
+ options.some(function (option, index) {
+ var isOptionEqual = option[valueKey] === focusedOption[valueKey];
+ if (isOptionEqual) {
+ focusedOptionIndex = index;
+ }
+ return isOptionEqual;
+ });
+ if (focusedOptionIndex !== -1) {
+ return focusedOptionIndex;
+ }
+ }
+
+ for (var i = 0; i < options.length; i++) {
+ if (!options[i].disabled) return i;
+ }
+ return null;
+ }
+ }, {
+ key: 'renderOuter',
+ value: function renderOuter(options, valueArray, focusedOption) {
+ var _this8 = this;
+
+ var Dropdown$$1 = this.props.dropdownComponent;
+ var menu = this.renderMenu(options, valueArray, focusedOption);
+ if (!menu) {
+ return null;
+ }
+
+ return React.createElement(
+ Dropdown$$1,
+ null,
+ React.createElement(
+ 'div',
+ { ref: function ref(_ref6) {
+ return _this8.menuContainer = _ref6;
+ }, className: 'Select-menu-outer', style: this.props.menuContainerStyle },
+ React.createElement(
+ 'div',
+ { ref: function ref(_ref5) {
+ return _this8.menu = _ref5;
+ }, role: 'listbox', tabIndex: -1, className: 'Select-menu', id: this._instancePrefix + '-list',
+ style: this.props.menuStyle,
+ onScroll: this.handleMenuScroll,
+ onMouseDown: this.handleMouseDownOnMenu },
+ menu
+ )
+ )
+ );
+ }
+ }, {
+ key: 'render',
+ value: function render() {
+ var _this9 = this;
+
+ var valueArray = this.getValueArray(this.props.value);
+ this._visibleOptions = this.filterFlatOptions(this.props.multi ? valueArray : null);
+ var options = this.unflattenOptions(this._visibleOptions);
+ var isOpen = typeof this.props.isOpen === 'boolean' ? this.props.isOpen : this.state.isOpen;
+ if (this.props.multi && !options.length && valueArray.length && !this.state.inputValue) isOpen = false;
+ var focusedOptionIndex = this.getFocusableOptionIndex(valueArray[0]);
+
+ var focusedOption = null;
+ if (focusedOptionIndex !== null) {
+ focusedOption = this._focusedOption = this._visibleOptions[focusedOptionIndex];
+ } else {
+ focusedOption = this._focusedOption = null;
+ }
+ var className = classNames('Select', this.props.className, {
+ 'Select--multi': this.props.multi,
+ 'Select--single': !this.props.multi,
+ 'is-clearable': this.props.clearable,
+ 'is-disabled': this.props.disabled,
+ 'is-focused': this.state.isFocused,
+ 'is-loading': this.props.isLoading,
+ 'is-open': isOpen,
+ 'is-pseudo-focused': this.state.isPseudoFocused,
+ 'is-searchable': this.props.searchable,
+ 'has-value': valueArray.length
+ });
+
+ var removeMessage = null;
+ if (this.props.multi && !this.props.disabled && valueArray.length && !this.state.inputValue && this.state.isFocused && this.props.backspaceRemoves) {
+ removeMessage = React.createElement(
+ 'span',
+ { id: this._instancePrefix + '-backspace-remove-message', className: 'Select-aria-only', 'aria-live': 'assertive' },
+ this.props.backspaceToRemoveMessage.replace('{label}', valueArray[valueArray.length - 1][this.props.labelKey])
+ );
+ }
+
+ return React.createElement(
+ 'div',
+ { ref: function ref(_ref8) {
+ return _this9.wrapper = _ref8;
+ },
+ className: className,
+ style: this.props.wrapperStyle },
+ this.renderHiddenField(valueArray),
+ React.createElement(
+ 'div',
+ { ref: function ref(_ref7) {
+ return _this9.control = _ref7;
+ },
+ className: 'Select-control',
+ style: this.props.style,
+ onKeyDown: this.handleKeyDown,
+ onMouseDown: this.handleMouseDown,
+ onTouchEnd: this.handleTouchEnd,
+ onTouchStart: this.handleTouchStart,
+ onTouchMove: this.handleTouchMove
+ },
+ React.createElement(
+ 'span',
+ { className: 'Select-multi-value-wrapper', id: this._instancePrefix + '-value' },
+ this.renderValue(valueArray, isOpen),
+ this.renderInput(valueArray, focusedOptionIndex)
+ ),
+ removeMessage,
+ this.renderLoading(),
+ this.renderClear(),
+ this.renderArrow()
+ ),
+ isOpen ? this.renderOuter(options, !this.props.multi ? valueArray : null, focusedOption) : null
+ );
+ }
+ }]);
+ 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)
+ 'aria-labelledby': PropTypes.string, // HTML ID of an element that should be used as the label (for assistive tech)
+ addLabelText: PropTypes.string, // placeholder displayed when you want to add a label on a multi-value input
+ arrowRenderer: PropTypes.func, // Create drop-down caret element
+ autoBlur: PropTypes.bool, // automatically blur the component when an option is selected
+ autofocus: PropTypes.bool, // autofocus the component on mount
+ autosize: PropTypes.bool, // whether to enable autosizing or not
+ backspaceRemoves: PropTypes.bool, // whether backspace removes an item if there is no text input
+ backspaceToRemoveMessage: PropTypes.string, // Message to use for screenreaders to press backspace to remove the current item - {label} is replaced with the item label
+ className: PropTypes.string, // className for the outer element
+ clearAllText: stringOrNode, // title for the "clear" control when multi: true
+ clearRenderer: PropTypes.func, // create clearable x element
+ clearValueText: stringOrNode, // title for the "clear" control
+ clearable: PropTypes.bool, // should it be possible to reset value
+ closeOnSelect: PropTypes.bool, // whether to close the menu when a value is selected
+ deleteRemoves: PropTypes.bool, // whether backspace removes an item if there is no text input
+ delimiter: PropTypes.string, // delimiter to use to join multiple values for the hidden field value
+ disabled: PropTypes.bool, // whether the Select is disabled or not
+ dropdownComponent: PropTypes.func, // dropdown component to render the menu in
+ escapeClearsValue: PropTypes.bool, // whether escape clears the value when the menu is closed
+ filterOption: PropTypes.func, // method to filter a single option (option, filterString)
+ filterOptions: PropTypes.any, // boolean to enable default filtering or function to filter the options array ([options], filterString, [values])
+ ignoreAccents: PropTypes.bool, // whether to strip diacritics when filtering
+ ignoreCase: PropTypes.bool, // whether to perform case-insensitive filtering
+ inputProps: PropTypes.object, // custom attributes for the Input
+ inputRenderer: PropTypes.func, // returns a custom input component
+ instanceId: PropTypes.string, // set the components instanceId
+ isLoading: PropTypes.bool, // whether the Select is loading externally or not (such as options being loaded)
+ isOpen: PropTypes.bool, // whether the Select dropdown menu is open or not
+ joinValues: PropTypes.bool, // joins multiple values into a single form field with the delimiter (legacy mode)
+ labelKey: PropTypes.string, // path of the label value in option objects
+ matchPos: PropTypes.string, // (any|start) match the start or entire string when filtering
+ matchProp: PropTypes.string, // (any|label|value) which option property to filter on
+ menuBuffer: PropTypes.number, // optional buffer (in px) between the bottom of the viewport and the bottom of the menu
+ menuContainerStyle: PropTypes.object, // optional style to apply to the menu container
+ menuRenderer: PropTypes.func, // renders a custom menu with options
+ menuStyle: PropTypes.object, // optional style to apply to the menu
+ multi: PropTypes.bool, // multi-value input
+ name: PropTypes.string, // generates a hidden tag with this field name for html forms
+ noResultsText: stringOrNode, // placeholder displayed when there are no matching search results
+ onBlur: PropTypes.func, // onBlur handler: function (event) {}
+ onBlurResetsInput: PropTypes.bool, // whether input is cleared on blur
+ onChange: PropTypes.func, // onChange handler: function (newValue) {}
+ onClose: PropTypes.func, // fires when the menu is closed
+ onCloseResetsInput: PropTypes.bool, // whether input is cleared when menu is closed through the arrow
+ onFocus: PropTypes.func, // onFocus handler: function (event) {}
+ onInputChange: PropTypes.func, // onInputChange handler: function (inputValue) {}
+ onInputKeyDown: PropTypes.func, // input keyDown handler: function (event) {}
+ onMenuScrollToBottom: PropTypes.func, // fires when the menu is scrolled to the bottom; can be used to paginate options
+ onOpen: PropTypes.func, // fires when the menu is opened
+ onSelectResetsInput: PropTypes.bool, // whether input is cleared on select (works only for multiselect)
+ onValueClick: PropTypes.func, // onClick handler for value labels: function (value, event) {}
+ openOnClick: PropTypes.bool, // boolean to control opening the menu when the control is clicked
+ openOnFocus: PropTypes.bool, // always open options menu on focus
+ optionClassName: PropTypes.string, // additional class(es) to apply to the elements
+ optionComponent: PropTypes.func, // option component to render in dropdown
+ optionGroupComponent: PropTypes.func, // option group component to render in dropdown
+ optionRenderer: PropTypes.func, // optionRenderer: function (option) {}
+ options: PropTypes.array, // array of options
+ pageSize: PropTypes.number, // number of entries to page when using page up/down keys
+ placeholder: stringOrNode, // field placeholder, displayed when there's no value
+ renderInvalidValues: PropTypes.bool, // boolean to enable rendering values that do not match any options
+ required: PropTypes.bool, // applies HTML5 required attribute when needed
+ resetValue: PropTypes.any, // value to use when you clear the control
+ scrollMenuIntoView: PropTypes.bool, // boolean to enable the viewport to shift so that the full menu fully visible when engaged
+ searchable: PropTypes.bool, // whether to enable searching feature or not
+ simpleValue: PropTypes.bool, // pass the value to onChange as a simple value (legacy pre 1.0 mode), defaults to false
+ style: PropTypes.object, // optional style to apply to the control
+ tabIndex: PropTypes.string, // optional tab index of the control
+ tabSelectsValue: PropTypes.bool, // whether to treat tabbing out while focused to be value selection
+ value: PropTypes.any, // initial field value
+ valueComponent: PropTypes.func, // value component to render
+ valueKey: PropTypes.string, // path of the label value in option objects
+ valueRenderer: PropTypes.func, // valueRenderer: function (option) {}
+ wrapperStyle: PropTypes.object // optional style to apply to the component wrapper
+};
+
+Select$1.defaultProps = {
+ addLabelText: 'Add "{label}"?',
+ arrowRenderer: arrowRenderer,
+ autosize: true,
+ backspaceRemoves: true,
+ backspaceToRemoveMessage: 'Press backspace to remove {label}',
+ clearable: true,
+ clearAllText: 'Clear all',
+ clearRenderer: clearRenderer,
+ clearValueText: 'Clear value',
+ closeOnSelect: true,
+ deleteRemoves: true,
+ delimiter: ',',
+ disabled: false,
+ dropdownComponent: Dropdown,
+ escapeClearsValue: true,
+ filterOptions: filterOptions,
+ ignoreAccents: true,
+ ignoreCase: true,
+ inputProps: {},
+ isLoading: false,
+ joinValues: false,
+ labelKey: 'label',
+ matchPos: 'any',
+ matchProp: 'any',
+ menuBuffer: 0,
+ menuRenderer: menuRenderer,
+ multi: false,
+ noResultsText: 'No results found',
+ onBlurResetsInput: true,
+ onSelectResetsInput: true,
+ onCloseResetsInput: true,
+ openOnClick: true,
+ optionComponent: Option,
+ optionGroupComponent: OptionGroup,
+ pageSize: 5,
+ placeholder: 'Select...',
+ required: false,
+ scrollMenuIntoView: true,
+ searchable: true,
+ simpleValue: false,
+ tabSelectsValue: true,
+ valueComponent: Value,
+ valueKey: 'value'
+};
+
+var propTypes = {
+ autoload: PropTypes.bool.isRequired, // automatically call the `loadOptions` prop on-mount; defaults to true
+ cache: PropTypes.any, // object to use to cache results; set to null/false to disable caching
+ children: PropTypes.func.isRequired, // Child function responsible for creating the inner Select component; (props: Object): PropTypes.element
+ ignoreAccents: PropTypes.bool, // strip diacritics when filtering; defaults to true
+ ignoreCase: PropTypes.bool, // perform case-insensitive filtering; defaults to true
+ loadOptions: PropTypes.func.isRequired, // callback to load options asynchronously; (inputValue: string, callback: Function): ?Promise
+ loadingPlaceholder: PropTypes.oneOfType([// replaces the placeholder while options are loading
+ PropTypes.string, PropTypes.node]),
+ multi: PropTypes.bool, // multi-value input
+ noResultsText: PropTypes.oneOfType([// field noResultsText, displayed when no options come back from the server
+ PropTypes.string, PropTypes.node]),
+ onChange: PropTypes.func, // onChange handler: function (newValue) {}
+ onInputChange: PropTypes.func, // optional for keeping track of what is being typed
+ options: PropTypes.array.isRequired, // array of options
+ placeholder: PropTypes.oneOfType([// field placeholder, displayed when there's no value (shared with Select)
+ PropTypes.string, PropTypes.node]),
+ searchPromptText: PropTypes.oneOfType([// label to prompt for search input
+ PropTypes.string, PropTypes.node]),
+ value: PropTypes.any // initial field value
+};
+
+var defaultCache = {};
+
+var defaultProps = {
+ autoload: true,
+ cache: defaultCache,
+ children: defaultChildren,
+ ignoreAccents: true,
+ ignoreCase: true,
+ loadingPlaceholder: 'Loading...',
+ options: [],
+ searchPromptText: 'Type to search'
+};
+
+var Async = function (_Component) {
+ inherits(Async, _Component);
+
+ function Async(props, context) {
+ classCallCheck(this, Async);
+
+ var _this = possibleConstructorReturn(this, (Async.__proto__ || Object.getPrototypeOf(Async)).call(this, props, context));
+
+ _this._cache = props.cache === defaultCache ? {} : props.cache;
+
+ _this.state = {
+ inputValue: '',
+ isLoading: false,
+ options: props.options
+ };
+
+ _this.onInputChange = _this.onInputChange.bind(_this);
+ return _this;
+ }
+
+ createClass(Async, [{
+ key: 'componentDidMount',
+ value: function componentDidMount() {
+ var autoload = this.props.autoload;
+
+
+ if (autoload) {
+ this.loadOptions('');
+ }
+ }
+ }, {
+ key: 'componentWillReceiveProps',
+ value: function componentWillReceiveProps(nextProps) {
+ if (nextProps.options !== this.props.options) {
+ this.setState({
+ options: nextProps.options
+ });
+ }
+ }
+ }, {
+ key: 'componentWillUnmount',
+ value: function componentWillUnmount() {
+ this._callback = null;
+ }
+ }, {
+ key: 'loadOptions',
+ value: function loadOptions(inputValue) {
+ var _this2 = this;
+
+ var loadOptions = this.props.loadOptions;
+
+ var cache = this._cache;
+
+ if (cache && Object.prototype.hasOwnProperty.call(cache, inputValue)) {
+ this.setState({
+ options: cache[inputValue]
+ });
+
+ return;
+ }
+
+ var callback = function callback(error, data) {
+ if (callback === _this2._callback) {
+ _this2._callback = null;
+
+ var options = data && data.options || [];
+
+ if (cache) {
+ cache[inputValue] = options;
+ }
+
+ _this2.setState({
+ isLoading: false,
+ options: options
+ });
+ }
+ };
+
+ // Ignore all but the most recent request
+ this._callback = callback;
+
+ var promise = loadOptions(inputValue, callback);
+ if (promise) {
+ promise.then(function (data) {
+ return callback(null, data);
+ }, function (error) {
+ return callback(error);
+ });
+ }
+
+ if (this._callback && !this.state.isLoading) {
+ this.setState({
+ isLoading: true
+ });
+ }
+ }
+ }, {
+ key: 'onInputChange',
+ value: function onInputChange(inputValue) {
+ var _props = this.props,
+ ignoreAccents = _props.ignoreAccents,
+ ignoreCase = _props.ignoreCase,
+ onInputChange = _props.onInputChange;
+
+ var transformedInputValue = inputValue;
+
+ if (ignoreAccents) {
+ transformedInputValue = stripDiacritics(transformedInputValue);
+ }
+
+ if (ignoreCase) {
+ transformedInputValue = transformedInputValue.toLowerCase();
+ }
+
+ if (onInputChange) {
+ onInputChange(transformedInputValue);
+ }
+
+ this.setState({ inputValue: inputValue });
+ this.loadOptions(transformedInputValue);
+
+ // Return the original input value to avoid modifying the user's view of the input while typing.
+ return inputValue;
+ }
+ }, {
+ key: 'noResultsText',
+ value: function noResultsText() {
+ var _props2 = this.props,
+ loadingPlaceholder = _props2.loadingPlaceholder,
+ noResultsText = _props2.noResultsText,
+ searchPromptText = _props2.searchPromptText;
+ var _state = this.state,
+ inputValue = _state.inputValue,
+ isLoading = _state.isLoading;
+
+
+ if (isLoading) {
+ return loadingPlaceholder;
+ }
+ if (inputValue && noResultsText) {
+ return noResultsText;
+ }
+ return searchPromptText;
+ }
+ }, {
+ key: 'focus',
+ value: function focus() {
+ this.select.focus();
+ }
+ }, {
+ key: 'render',
+ value: function render() {
+ var _this3 = this;
+
+ 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,
+ options = _state2.options;
+
+
+ var props = {
+ noResultsText: this.noResultsText(),
+ placeholder: isLoading ? loadingPlaceholder : placeholder,
+ options: isLoading && loadingPlaceholder ? [] : options,
+ ref: function ref(_ref) {
+ return _this3.select = _ref;
+ }
+ };
+
+ return children(_extends({}, this.props, props, {
+ isLoading: isLoading,
+ onInputChange: this.onInputChange
+ }));
+ }
+ }]);
+ return Async;
+}(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);
+
+ function CreatableSelect(props, context) {
+ classCallCheck(this, CreatableSelect);
+
+ var _this = possibleConstructorReturn(this, (CreatableSelect.__proto__ || Object.getPrototypeOf(CreatableSelect)).call(this, props, context));
+
+ _this.filterOptions = _this.filterOptions.bind(_this);
+ _this.menuRenderer = _this.menuRenderer.bind(_this);
+ _this.onInputKeyDown = _this.onInputKeyDown.bind(_this);
+ _this.onInputChange = _this.onInputChange.bind(_this);
+ _this.onOptionSelect = _this.onOptionSelect.bind(_this);
+ return _this;
+ }
+
+ createClass(CreatableSelect, [{
+ key: 'createNewOption',
+ value: function createNewOption() {
+ var _props = this.props,
+ isValidNewOption = _props.isValidNewOption,
+ newOptionCreator = _props.newOptionCreator,
+ onNewOptionClick = _props.onNewOptionClick,
+ _props$options = _props.options,
+ options = _props$options === undefined ? [] : _props$options;
+
+
+ if (isValidNewOption({ label: this.inputValue })) {
+ var option = newOptionCreator({ label: this.inputValue, labelKey: this.labelKey, valueKey: this.valueKey });
+ var _isOptionUnique = this.isOptionUnique({ option: option });
+
+ // Don't add the same option twice.
+ if (_isOptionUnique) {
+ if (onNewOptionClick) {
+ onNewOptionClick(option);
+ } else {
+ options.unshift(option);
+
+ this.select.selectValue(option);
+ }
+ }
+ }
+ }
+ }, {
+ key: 'filterOptions',
+ value: function filterOptions$$1() {
+ var _props2 = this.props,
+ filterOptions$$1 = _props2.filterOptions,
+ isValidNewOption = _props2.isValidNewOption,
+ options = _props2.options,
+ promptTextCreator = _props2.promptTextCreator;
+
+ // TRICKY Check currently selected options as well.
+ // Don't display a create-prompt for a value that's selected.
+ // This covers async edge-cases where a newly-created Option isn't yet in the async-loaded array.
+
+ var excludeOptions = (arguments.length <= 2 ? undefined : arguments[2]) || [];
+
+ var filteredOptions = filterOptions$$1.apply(undefined, arguments) || [];
+
+ if (isValidNewOption({ label: this.inputValue })) {
+ var _newOptionCreator = this.props.newOptionCreator;
+
+
+ var option = _newOptionCreator({
+ label: this.inputValue,
+ labelKey: this.labelKey,
+ valueKey: this.valueKey
+ });
+
+ // TRICKY Compare to all options (not just filtered options) in case option has already been selected).
+ // For multi-selects, this would remove it from the filtered list.
+ var _isOptionUnique2 = this.isOptionUnique({
+ option: option,
+ options: excludeOptions.concat(filteredOptions)
+ });
+
+ if (_isOptionUnique2) {
+ var prompt = promptTextCreator(this.inputValue);
+
+ this._createPlaceholderOption = _newOptionCreator({
+ label: prompt,
+ labelKey: this.labelKey,
+ valueKey: this.valueKey
+ });
+
+ filteredOptions.unshift(this._createPlaceholderOption);
+ }
+ }
+
+ return filteredOptions;
+ }
+ }, {
+ key: 'isOptionUnique',
+ value: function isOptionUnique(_ref) {
+ var option = _ref.option,
+ options = _ref.options;
+ var isOptionUnique = this.props.isOptionUnique;
+
+
+ options = options || this.select.filterFlatOptions();
+
+ return isOptionUnique({
+ labelKey: this.labelKey,
+ option: option,
+ options: options,
+ valueKey: this.valueKey
+ });
+ }
+ }, {
+ key: 'menuRenderer',
+ value: function menuRenderer$$1(params) {
+ var menuRenderer$$1 = this.props.menuRenderer;
+
+
+ return menuRenderer$$1(_extends({}, params, {
+ onSelect: this.onOptionSelect,
+ selectValue: this.onOptionSelect
+ }));
+ }
+ }, {
+ key: 'onInputChange',
+ value: function onInputChange(input) {
+ var onInputChange = this.props.onInputChange;
+
+
+ if (onInputChange) {
+ onInputChange(input);
+ }
+
+ // This value may be needed in between Select mounts (when this.select is null)
+ this.inputValue = input;
+ }
+ }, {
+ key: 'onInputKeyDown',
+ value: function onInputKeyDown(event) {
+ var _props3 = this.props,
+ shouldKeyDownEventCreateNewOption = _props3.shouldKeyDownEventCreateNewOption,
+ onInputKeyDown = _props3.onInputKeyDown;
+
+ var focusedOption = this.select.getFocusedOption();
+
+ if (focusedOption && focusedOption === this._createPlaceholderOption && shouldKeyDownEventCreateNewOption({ keyCode: event.keyCode })) {
+ this.createNewOption();
+
+ // Prevent decorated Select from doing anything additional with this keyDown event
+ event.preventDefault();
+ } else if (onInputKeyDown) {
+ onInputKeyDown(event);
+ }
+ }
+ }, {
+ key: 'onOptionSelect',
+ value: function onOptionSelect(option, event) {
+ if (option === this._createPlaceholderOption) {
+ this.createNewOption();
+ } else {
+ this.select.selectValue(option);
+ }
+ }
+ }, {
+ key: 'focus',
+ value: function focus() {
+ this.select.focus();
+ }
+ }, {
+ key: 'render',
+ value: function render() {
+ var _this2 = this;
+
+ var _props4 = this.props,
+ newOptionCreator = _props4.newOptionCreator,
+ shouldKeyDownEventCreateNewOption = _props4.shouldKeyDownEventCreateNewOption,
+ restProps = objectWithoutProperties(_props4, ['newOptionCreator', 'shouldKeyDownEventCreateNewOption']);
+ var children = this.props.children;
+
+ // We can't use destructuring default values to set the children,
+ // because it won't apply work if `children` is null. A falsy check is
+ // more reliable in real world use-cases.
+
+ if (!children) {
+ children = defaultChildren$1;
+ }
+
+ var props = _extends({}, restProps, {
+ allowCreate: true,
+ filterOptions: this.filterOptions,
+ menuRenderer: this.menuRenderer,
+ onInputChange: this.onInputChange,
+ onInputKeyDown: this.onInputKeyDown,
+ ref: function ref(_ref2) {
+ _this2.select = _ref2;
+
+ // These values may be needed in between Select mounts (when this.select is null)
+ if (_ref2) {
+ _this2.labelKey = _ref2.props.labelKey;
+ _this2.valueKey = _ref2.props.valueKey;
+ }
+ }
+ });
+
+ return children(props);
+ }
+ }]);
+ return CreatableSelect;
+}(React.Component);
+
+
+
+function defaultChildren$1(props) {
+ return React.createElement(Select$1, props);
+}
+
+function isOptionUnique(_ref3) {
+ var option = _ref3.option,
+ options = _ref3.options,
+ labelKey = _ref3.labelKey,
+ valueKey = _ref3.valueKey;
+
+ return options.filter(function (existingOption) {
+ return existingOption[labelKey] === option[labelKey] || existingOption[valueKey] === option[valueKey];
+ }).length === 0;
+}
+
+function isValidNewOption(_ref4) {
+ var label = _ref4.label;
+
+ return !!label;
+}
+
+function newOptionCreator(_ref5) {
+ var label = _ref5.label,
+ labelKey = _ref5.labelKey,
+ valueKey = _ref5.valueKey;
+
+ var option = {};
+ option[valueKey] = label;
+ option[labelKey] = label;
+ option.className = 'Select-create-option-placeholder';
+ return option;
+}
+
+function promptTextCreator(label) {
+ return 'Create option "' + label + '"';
+}
+
+function shouldKeyDownEventCreateNewOption(_ref6) {
+ var keyCode = _ref6.keyCode;
+
+ switch (keyCode) {
+ case 9: // TAB
+ case 13: // ENTER
+ case 188:
+ // COMMA
+ return true;
+ }
+
+ return false;
+}
+
+// Default prop methods
+CreatableSelect.isOptionUnique = isOptionUnique;
+CreatableSelect.isValidNewOption = isValidNewOption;
+CreatableSelect.newOptionCreator = newOptionCreator;
+CreatableSelect.promptTextCreator = promptTextCreator;
+CreatableSelect.shouldKeyDownEventCreateNewOption = shouldKeyDownEventCreateNewOption;
+
+CreatableSelect.defaultProps = {
+ filterOptions: filterOptions,
+ isOptionUnique: isOptionUnique,
+ isValidNewOption: isValidNewOption,
+ menuRenderer: menuRenderer,
+ newOptionCreator: newOptionCreator,
+ promptTextCreator: promptTextCreator,
+ shouldKeyDownEventCreateNewOption: shouldKeyDownEventCreateNewOption
+};
+
+CreatableSelect.propTypes = {
+ // Child function responsible for creating the inner Select component
+ // This component can be used to compose HOCs (eg Creatable and Async)
+ // (props: Object): PropTypes.element
+ children: PropTypes.func,
+
+ // See Select.propTypes.filterOptions
+ filterOptions: PropTypes.any,
+
+ // Searches for any matching option within the set of options.
+ // This function prevents duplicate options from being created.
+ // ({ option: Object, options: Array, labelKey: string, valueKey: string }): boolean
+ isOptionUnique: PropTypes.func,
+
+ // Determines if the current input text represents a valid option.
+ // ({ label: string }): boolean
+ isValidNewOption: PropTypes.func,
+
+ // See Select.propTypes.menuRenderer
+ menuRenderer: PropTypes.any,
+
+ // Factory to create new option.
+ // ({ label: string, labelKey: string, valueKey: string }): Object
+ newOptionCreator: PropTypes.func,
+
+ // input change handler: function (inputValue) {}
+ onInputChange: PropTypes.func,
+
+ // input keyDown handler: function (event) {}
+ onInputKeyDown: PropTypes.func,
+
+ // new option click handler: function (option) {}
+ onNewOptionClick: PropTypes.func,
+
+ // See Select.propTypes.options
+ options: PropTypes.array,
+
+ // Creates prompt/placeholder option text.
+ // (filterText: string): string
+ promptTextCreator: PropTypes.func,
+
+ // Decides if a keyDown event (eg its `keyCode`) should result in the creation of a new option.
+ shouldKeyDownEventCreateNewOption: PropTypes.func
+};
+
+function reduce(obj) {
+ var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ return Object.keys(obj).reduce(function (props, key) {
+ var value = obj[key];
+ if (value !== undefined) props[key] = value;
+ return props;
+ }, props);
+}
+
+var AsyncCreatableSelect = function (_React$Component) {
+ inherits(AsyncCreatableSelect, _React$Component);
+
+ function AsyncCreatableSelect() {
+ classCallCheck(this, AsyncCreatableSelect);
+ return possibleConstructorReturn(this, (AsyncCreatableSelect.__proto__ || Object.getPrototypeOf(AsyncCreatableSelect)).apply(this, arguments));
+ }
+
+ createClass(AsyncCreatableSelect, [{
+ key: 'focus',
+ value: function focus() {
+ this.select.focus();
+ }
+ }, {
+ key: 'render',
+ value: function render() {
+ var _this2 = this;
+
+ return React.createElement(
+ Async,
+ this.props,
+ function (asyncProps) {
+ return React.createElement(
+ CreatableSelect,
+ _this2.props,
+ function (creatableProps) {
+ return React.createElement(Select$1, _extends({}, reduce(asyncProps, reduce(creatableProps, {})), {
+ onInputChange: function onInputChange(input) {
+ creatableProps.onInputChange(input);
+ return asyncProps.onInputChange(input);
+ },
+ ref: function ref(_ref) {
+ _this2.select = _ref;
+ creatableProps.ref(_ref);
+ asyncProps.ref(_ref);
+ }
+ }));
+ }
+ );
+ }
+ );
+ }
+ }]);
+ return AsyncCreatableSelect;
+}(React.Component);
+
+Select$1.Async = Async;
+Select$1.AsyncCreatable = AsyncCreatableSelect;
+Select$1.Creatable = CreatableSelect;
+Select$1.Value = Value;
+
+export { Async, AsyncCreatableSelect as AsyncCreatable, CreatableSelect as Creatable, Value };
+export default Select$1;
diff --git a/dist/react-select.js b/dist/react-select.js
new file mode 100644
index 00000000..1ae5f527
--- /dev/null
+++ b/dist/react-select.js
@@ -0,0 +1,2728 @@
+(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';
+
+var React__default = 'default' in React ? React['default'] : React;
+PropTypes = PropTypes && PropTypes.hasOwnProperty('default') ? PropTypes['default'] : PropTypes;
+ReactDOM = ReactDOM && ReactDOM.hasOwnProperty('default') ? ReactDOM['default'] : ReactDOM;
+AutosizeInput = AutosizeInput && AutosizeInput.hasOwnProperty('default') ? AutosizeInput['default'] : AutosizeInput;
+classNames = classNames && classNames.hasOwnProperty('default') ? classNames['default'] : classNames;
+
+function arrowRenderer(_ref) {
+ var onMouseDown = _ref.onMouseDown;
+
+ return React__default.createElement('span', {
+ className: 'Select-arrow',
+ onMouseDown: onMouseDown
+ });
+}
+
+arrowRenderer.propTypes = {
+ onMouseDown: PropTypes.func
+};
+
+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) {
+ for (var i = 0; i < map.length; i++) {
+ str = str.replace(map[i].letters, map[i].base);
+ }
+ return str;
+}
+
+function filterOptions(options, filterValue, excludeOptions, props) {
+ var _this = this;
+
+ if (props.ignoreAccents) {
+ filterValue = stripDiacritics(filterValue);
+ }
+
+ if (props.ignoreCase) {
+ filterValue = filterValue.toLowerCase();
+ }
+
+ if (excludeOptions) excludeOptions = excludeOptions.map(function (i) {
+ return i[props.valueKey];
+ });
+
+ 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 (!filterValue) return true;
+ var valueTest = String(option[props.valueKey]);
+ var labelTest = String(option[props.labelKey]);
+ if (props.ignoreAccents) {
+ if (props.matchProp !== 'label') valueTest = stripDiacritics(valueTest);
+ if (props.matchProp !== 'value') labelTest = stripDiacritics(labelTest);
+ }
+ if (props.ignoreCase) {
+ if (props.matchProp !== 'label') valueTest = valueTest.toLowerCase();
+ if (props.matchProp !== 'value') labelTest = labelTest.toLowerCase();
+ }
+ return props.matchPos === 'start' ? props.matchProp !== 'label' && valueTest.substr(0, filterValue.length) === filterValue || props.matchProp !== 'value' && labelTest.substr(0, filterValue.length) === filterValue : props.matchProp !== 'label' && valueTest.indexOf(filterValue) >= 0 || props.matchProp !== 'value' && labelTest.indexOf(filterValue) >= 0;
+ });
+}
+
+function isGroup$1(option) {
+ return option && Array.isArray(option.options);
+}
+
+function menuRenderer(_ref) {
+ var focusedOption = _ref.focusedOption,
+ instancePrefix = _ref.instancePrefix,
+ labelKey = _ref.labelKey,
+ onFocus = _ref.onFocus,
+ onOptionRef = _ref.onOptionRef,
+ onSelect = _ref.onSelect,
+ optionClassName = _ref.optionClassName,
+ optionComponent = _ref.optionComponent,
+ optionGroupComponent = _ref.optionGroupComponent,
+ optionRenderer = _ref.optionRenderer,
+ options = _ref.options,
+ valueArray = _ref.valueArray,
+ valueKey = _ref.valueKey;
+
+ var OptionGroup = optionGroupComponent;
+ var Option = optionComponent;
+ var renderLabel = optionRenderer || this.getOptionLabel;
+
+ var renderOptions = function renderOptions(optionsSubset) {
+ return optionsSubset.map(function (option, i) {
+ if (isGroup$1(option)) {
+ var optionGroupClass = classNames({
+ 'Select-option-group': true
+ });
+
+ return React__default.createElement(
+ OptionGroup,
+ {
+ className: optionGroupClass,
+ key: 'option-group-' + i,
+ label: renderLabel(option),
+ option: option,
+ optionIndex: i
+ },
+ renderOptions(option.options)
+ );
+ } else {
+ var isSelected = valueArray && valueArray.indexOf(option) > -1;
+ var isFocused = option === focusedOption;
+ var optionClass = classNames(optionClassName, {
+ 'Select-option': true,
+ 'is-selected': isSelected,
+ 'is-focused': isFocused,
+ 'is-disabled': option.disabled
+ });
+
+ return React__default.createElement(
+ Option,
+ {
+ className: optionClass,
+ instancePrefix: instancePrefix,
+ isDisabled: option.disabled,
+ isFocused: isFocused,
+ isSelected: isSelected,
+ key: 'option-' + i + '-' + option[valueKey],
+ onFocus: onFocus,
+ onSelect: onSelect,
+ option: option,
+ optionIndex: i,
+ ref: function ref(_ref2) {
+ onOptionRef(_ref2, isFocused);
+ }
+ },
+ renderLabel(option, i)
+ );
+ }
+ });
+ };
+
+ return renderOptions(options);
+}
+
+function clearRenderer() {
+ return React__default.createElement('span', {
+ className: 'Select-clear',
+ dangerouslySetInnerHTML: { __html: '×' }
+ });
+}
+
+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 asyncGenerator = function () {
+ function AwaitValue(value) {
+ this.value = value;
+ }
+
+ function AsyncGenerator(gen) {
+ var front, back;
+
+ function send(key, arg) {
+ return new Promise(function (resolve, reject) {
+ var request = {
+ key: key,
+ arg: arg,
+ resolve: resolve,
+ reject: reject,
+ next: null
+ };
+
+ if (back) {
+ back = back.next = request;
+ } else {
+ front = back = request;
+ resume(key, arg);
+ }
+ });
+ }
+
+ function resume(key, arg) {
+ try {
+ var result = gen[key](arg);
+ var value = result.value;
+
+ if (value instanceof AwaitValue) {
+ Promise.resolve(value.value).then(function (arg) {
+ resume("next", arg);
+ }, function (arg) {
+ resume("throw", arg);
+ });
+ } else {
+ settle(result.done ? "return" : "normal", result.value);
+ }
+ } catch (err) {
+ settle("throw", err);
+ }
+ }
+
+ function settle(type, value) {
+ switch (type) {
+ case "return":
+ front.resolve({
+ value: value,
+ done: true
+ });
+ break;
+
+ case "throw":
+ front.reject(value);
+ break;
+
+ default:
+ front.resolve({
+ value: value,
+ done: false
+ });
+ break;
+ }
+
+ front = front.next;
+
+ if (front) {
+ resume(front.key, front.arg);
+ } else {
+ back = null;
+ }
+ }
+
+ this._invoke = send;
+
+ if (typeof gen.return !== "function") {
+ this.return = undefined;
+ }
+ }
+
+ if (typeof Symbol === "function" && Symbol.asyncIterator) {
+ AsyncGenerator.prototype[Symbol.asyncIterator] = function () {
+ return this;
+ };
+ }
+
+ AsyncGenerator.prototype.next = function (arg) {
+ return this._invoke("next", arg);
+ };
+
+ AsyncGenerator.prototype.throw = function (arg) {
+ return this._invoke("throw", arg);
+ };
+
+ AsyncGenerator.prototype.return = function (arg) {
+ return this._invoke("return", arg);
+ };
+
+ return {
+ wrap: function (fn) {
+ return function () {
+ return new AsyncGenerator(fn.apply(this, arguments));
+ };
+ },
+ await: function (value) {
+ return new AwaitValue(value);
+ }
+ };
+}();
+
+
+
+
+
+var classCallCheck = function (instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+};
+
+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 defineProperty = function (obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+
+ return obj;
+};
+
+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 inherits = function (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 objectWithoutProperties = function (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;
+};
+
+var possibleConstructorReturn = function (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;
+};
+
+var Dropdown = function (_React$Component) {
+ inherits(Dropdown, _React$Component);
+
+ function Dropdown() {
+ classCallCheck(this, Dropdown);
+ return possibleConstructorReturn(this, (Dropdown.__proto__ || Object.getPrototypeOf(Dropdown)).apply(this, arguments));
+ }
+
+ createClass(Dropdown, [{
+ key: 'render',
+ value: function render() {
+ // This component adds no markup
+ return this.props.children;
+ }
+ }]);
+ return Dropdown;
+}(React__default.Component);
+
+
+
+Dropdown.propTypes = {
+ children: PropTypes.node
+};
+
+var Option = function (_React$Component) {
+ inherits(Option, _React$Component);
+
+ function Option(props) {
+ classCallCheck(this, Option);
+
+ var _this = possibleConstructorReturn(this, (Option.__proto__ || Object.getPrototypeOf(Option)).call(this, props));
+
+ _this.handleMouseDown = _this.handleMouseDown.bind(_this);
+ _this.handleMouseEnter = _this.handleMouseEnter.bind(_this);
+ _this.handleMouseMove = _this.handleMouseMove.bind(_this);
+ _this.handleTouchStart = _this.handleTouchStart.bind(_this);
+ _this.handleTouchEnd = _this.handleTouchEnd.bind(_this);
+ _this.handleTouchMove = _this.handleTouchMove.bind(_this);
+ _this.onFocus = _this.onFocus.bind(_this);
+ return _this;
+ }
+
+ 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();
+ event.stopPropagation();
+ this.props.onSelect(this.props.option, event);
+ }
+ }, {
+ key: 'handleMouseEnter',
+ value: function handleMouseEnter(event) {
+ this.onFocus(event);
+ }
+ }, {
+ key: 'handleMouseMove',
+ value: function handleMouseMove(event) {
+ this.onFocus(event);
+ }
+ }, {
+ key: 'handleTouchEnd',
+ value: function handleTouchEnd(event) {
+ // Check if the view is being dragged, In this case
+ // we don't want to fire the click event (because the user only wants to scroll)
+ if (this.dragging) return;
+
+ this.handleMouseDown(event);
+ }
+ }, {
+ key: 'handleTouchMove',
+ value: function handleTouchMove(event) {
+ // Set a flag that the view is being dragged
+ this.dragging = true;
+ }
+ }, {
+ key: 'handleTouchStart',
+ value: function handleTouchStart(event) {
+ // Set a flag that the view is not being dragged
+ this.dragging = false;
+ }
+ }, {
+ key: 'onFocus',
+ value: function onFocus(event) {
+ if (!this.props.isFocused) {
+ this.props.onFocus(this.props.option, event);
+ }
+ }
+ }, {
+ key: 'render',
+ value: function render() {
+ var _props = this.props,
+ option = _props.option,
+ instancePrefix = _props.instancePrefix,
+ optionIndex = _props.optionIndex;
+
+ var className = classNames(this.props.className, option.className);
+
+ return option.disabled ? React__default.createElement(
+ 'div',
+ { className: className,
+ onMouseDown: this.blockEvent,
+ onClick: this.blockEvent },
+ this.props.children
+ ) : React__default.createElement(
+ 'div',
+ { className: className,
+ style: option.style,
+ role: 'option',
+ onMouseDown: this.handleMouseDown,
+ onMouseEnter: this.handleMouseEnter,
+ onMouseMove: this.handleMouseMove,
+ onTouchStart: this.handleTouchStart,
+ onTouchMove: this.handleTouchMove,
+ onTouchEnd: this.handleTouchEnd,
+ id: instancePrefix + '-option-' + optionIndex,
+ title: option.title },
+ this.props.children
+ );
+ }
+ }]);
+ return Option;
+}(React__default.Component);
+
+
+
+Option.propTypes = {
+ children: PropTypes.node,
+ className: PropTypes.string, // className (based on mouse position)
+ instancePrefix: PropTypes.string.isRequired, // unique prefix for the ids (used for aria)
+ isDisabled: PropTypes.bool, // the option is disabled
+ isFocused: PropTypes.bool, // the option is focused
+ isSelected: PropTypes.bool, // the option is selected
+ onFocus: PropTypes.func, // method to handle mouseEnter on option element
+ onSelect: PropTypes.func, // method to handle click on option element
+ onUnfocus: PropTypes.func, // method to handle mouseLeave on option element
+ option: PropTypes.object.isRequired, // object that is base for that option
+ optionIndex: PropTypes.number // index of the option, used to generate unique ids for aria
+};
+
+var OptionGroup = function (_React$Component) {
+ inherits(OptionGroup, _React$Component);
+
+ function OptionGroup() {
+ classCallCheck(this, OptionGroup);
+ return possibleConstructorReturn(this, (OptionGroup.__proto__ || Object.getPrototypeOf(OptionGroup)).apply(this, arguments));
+ }
+
+ createClass(OptionGroup, [{
+ 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();
+ event.stopPropagation();
+ }
+ }, {
+ key: 'handleTouchEnd',
+ value: function handleTouchEnd(event) {
+ // Check if the view is being dragged, In this case
+ // we don't want to fire the click event (because the user only wants to scroll)
+ if (this.dragging) return;
+
+ this.handleMouseDown(event);
+ }
+ }, {
+ key: 'handleTouchMove',
+ value: function handleTouchMove(event) {
+ // Set a flag that the view is being dragged
+ this.dragging = true;
+ }
+ }, {
+ key: 'handleTouchStart',
+ value: function handleTouchStart(event) {
+ // Set a flag that the view is not being dragged
+ this.dragging = false;
+ }
+ }, {
+ key: 'render',
+ value: function render() {
+ var option = this.props.option;
+
+ var className = classNames(this.props.className, option.className);
+
+ return option.disabled ? React__default.createElement(
+ 'div',
+ { className: className,
+ onMouseDown: this.blockEvent,
+ onClick: this.blockEvent },
+ this.props.children
+ ) : React__default.createElement(
+ 'div',
+ { className: className,
+ style: option.style,
+ onMouseDown: this.handleMouseDown,
+ onMouseEnter: this.handleMouseEnter,
+ onMouseMove: this.handleMouseMove,
+ onTouchStart: this.handleTouchStart,
+ onTouchMove: this.handleTouchMove,
+ onTouchEnd: this.handleTouchEnd,
+ title: option.title },
+ React__default.createElement(
+ 'div',
+ { className: 'Select-option-group-label' },
+ this.props.label
+ ),
+ this.props.children
+ );
+ }
+ }]);
+ return OptionGroup;
+}(React__default.Component);
+
+
+
+OptionGroup.propTypes = {
+ children: PropTypes.any,
+ className: PropTypes.string, // className (based on mouse position)
+ label: PropTypes.node, // the heading to show above the child options
+ option: PropTypes.object.isRequired // object that is base for that option group
+};
+
+var Value = function (_React$Component) {
+ inherits(Value, _React$Component);
+
+ function Value(props) {
+ classCallCheck(this, Value);
+
+ var _this = possibleConstructorReturn(this, (Value.__proto__ || Object.getPrototypeOf(Value)).call(this, props));
+
+ _this.handleMouseDown = _this.handleMouseDown.bind(_this);
+ _this.onRemove = _this.onRemove.bind(_this);
+ _this.handleTouchEndRemove = _this.handleTouchEndRemove.bind(_this);
+ _this.handleTouchMove = _this.handleTouchMove.bind(_this);
+ _this.handleTouchStart = _this.handleTouchStart.bind(_this);
+ return _this;
+ }
+
+ createClass(Value, [{
+ key: 'handleMouseDown',
+ value: function handleMouseDown(event) {
+ if (event.type === 'mousedown' && event.button !== 0) {
+ return;
+ }
+ if (this.props.onClick) {
+ event.stopPropagation();
+ this.props.onClick(this.props.value, event);
+ return;
+ }
+ if (this.props.value.href) {
+ event.stopPropagation();
+ }
+ }
+ }, {
+ key: 'onRemove',
+ value: function onRemove(event) {
+ event.preventDefault();
+ event.stopPropagation();
+ this.props.onRemove(this.props.value);
+ }
+ }, {
+ key: 'handleTouchEndRemove',
+ value: function handleTouchEndRemove(event) {
+ // Check if the view is being dragged, In this case
+ // we don't want to fire the click event (because the user only wants to scroll)
+ if (this.dragging) return;
+
+ // Fire the mouse events
+ this.onRemove(event);
+ }
+ }, {
+ key: 'handleTouchMove',
+ value: function handleTouchMove(event) {
+ // Set a flag that the view is being dragged
+ this.dragging = true;
+ }
+ }, {
+ key: 'handleTouchStart',
+ value: function handleTouchStart(event) {
+ // Set a flag that the view is not being dragged
+ this.dragging = false;
+ }
+ }, {
+ key: 'renderRemoveIcon',
+ value: function renderRemoveIcon() {
+ if (this.props.disabled || !this.props.onRemove) return;
+ return React__default.createElement(
+ 'span',
+ { className: 'Select-value-icon',
+ 'aria-hidden': 'true',
+ onMouseDown: this.onRemove,
+ onTouchEnd: this.handleTouchEndRemove,
+ onTouchStart: this.handleTouchStart,
+ onTouchMove: this.handleTouchMove },
+ '\xD7'
+ );
+ }
+ }, {
+ key: 'renderLabel',
+ value: function renderLabel() {
+ var className = 'Select-value-label';
+ return this.props.onClick || this.props.value.href ? React__default.createElement(
+ 'a',
+ { className: className, href: this.props.value.href, target: this.props.value.target, onMouseDown: this.handleMouseDown, onTouchEnd: this.handleMouseDown },
+ this.props.children
+ ) : React__default.createElement(
+ 'span',
+ { className: className, role: 'option', 'aria-selected': 'true', id: this.props.id },
+ this.props.children
+ );
+ }
+ }, {
+ key: 'render',
+ value: function render() {
+ return React__default.createElement(
+ 'div',
+ { className: classNames('Select-value', this.props.value.className),
+ style: this.props.value.style,
+ title: this.props.value.title
+ },
+ this.renderRemoveIcon(),
+ this.renderLabel()
+ );
+ }
+ }]);
+ return Value;
+}(React__default.Component);
+
+
+
+Value.propTypes = {
+ children: PropTypes.node,
+ disabled: PropTypes.bool, // disabled prop passed to ReactSelect
+ id: PropTypes.string, // Unique id for the value - used for aria
+ onClick: PropTypes.func, // method to handle click on value label
+ onRemove: PropTypes.func, // method to handle removal of the value
+ 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
+*/
+function clone(obj) {
+ var copy = {};
+ for (var attr in obj) {
+ if (obj.hasOwnProperty(attr)) {
+ copy[attr] = obj[attr];
+ }
+ }
+ return copy;
+}
+
+function isGroup(option) {
+ return option && Array.isArray(option.options);
+}
+
+var stringifyValue = function stringifyValue(value) {
+ return typeof value === 'string' ? value : value !== null && JSON.stringify(value) || '';
+};
+
+var stringOrNode = PropTypes.oneOfType([PropTypes.string, PropTypes.node]);
+
+var instanceId = 1;
+
+var Select$1 = function (_React$Component) {
+ inherits(Select, _React$Component);
+
+ function Select(props) {
+ classCallCheck(this, Select);
+
+ 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) {
+ return _this[fn] = _this[fn].bind(_this);
+ });
+
+ _this.state = {
+ inputValue: '',
+ isFocused: false,
+ isOpen: false,
+ isPseudoFocused: false,
+ required: false
+ };
+ return _this;
+ }
+
+ createClass(Select, [{
+ key: 'componentWillMount',
+ value: function componentWillMount() {
+ this._flatOptions = this.flattenOptions(this.props.options);
+ this._instancePrefix = 'react-select-' + (this.props.instanceId || ++instanceId) + '-';
+ var valueArray = this.getValueArray(this.props.value);
+
+ if (this.props.required) {
+ this.setState({
+ required: this.handleRequired(valueArray[0], this.props.multi)
+ });
+ }
+ }
+ }, {
+ key: 'componentDidMount',
+ value: function componentDidMount() {
+ if (this.props.autofocus) {
+ this.focus();
+ }
+ }
+ }, {
+ key: 'componentWillReceiveProps',
+ value: function componentWillReceiveProps(nextProps) {
+ if (nextProps.options !== this.props.options) {
+ this._flatOptions = this.flattenOptions(nextProps.options);
+ }
+
+ var valueArray = this.getValueArray(nextProps.value, nextProps);
+
+ if (!nextProps.isOpen && this.props.isOpen) {
+ this.closeMenu();
+ }
+
+ if (nextProps.required) {
+ this.setState({
+ required: this.handleRequired(valueArray[0], nextProps.multi)
+ });
+ } else if (this.props.required) {
+ // Used to be required but it's not any more
+ this.setState({ required: false });
+ }
+ }
+ }, {
+ key: 'componentWillUpdate',
+ value: function componentWillUpdate(nextProps, nextState) {
+ if (nextState.isOpen !== this.state.isOpen) {
+ this.toggleTouchOutsideEvent(nextState.isOpen);
+ var handler = nextState.isOpen ? nextProps.onOpen : nextProps.onClose;
+ handler && handler();
+ }
+ }
+ }, {
+ key: 'componentDidUpdate',
+ value: function componentDidUpdate(prevProps, prevState) {
+ // focus to the selected option
+ if (this.menu && this.focused && this.state.isOpen && !this.hasScrolledToOption) {
+ var focusedOptionNode = ReactDOM.findDOMNode(this.focused);
+ var focusedOptionPreviousSibling = focusedOptionNode.previousSibling;
+ var focusedOptionParent = focusedOptionNode.parentElement;
+ var menuNode = ReactDOM.findDOMNode(this.menu);
+ if (focusedOptionPreviousSibling) {
+ menuNode.scrollTop = focusedOptionPreviousSibling.offsetTop;
+ } else if (focusedOptionParent && focusedOptionParent === 'Select-menu') {
+ menuNode.scrollTop = focusedOptionParent.offsetTop;
+ } else {
+ menuNode.scrollTop = focusedOptionNode.offsetTop;
+ }
+ this.hasScrolledToOption = true;
+ } else if (!this.state.isOpen) {
+ this.hasScrolledToOption = false;
+ }
+
+ if (this._scrollToFocusedOptionOnUpdate && this.focused && this.menu) {
+ this._scrollToFocusedOptionOnUpdate = false;
+ var focusedDOM = ReactDOM.findDOMNode(this.focused);
+ var menuDOM = ReactDOM.findDOMNode(this.menu);
+ var focusedRect = focusedDOM.getBoundingClientRect();
+ var menuRect = menuDOM.getBoundingClientRect();
+ if (focusedRect.bottom > menuRect.bottom) {
+ menuDOM.scrollTop = focusedDOM.offsetTop + focusedDOM.clientHeight - menuDOM.offsetHeight;
+ } else if (focusedRect.top < menuRect.top) {
+ menuDOM.scrollTop = focusedDOM.offsetTop;
+ }
+ }
+ if (this.props.scrollMenuIntoView && this.menuContainer) {
+ var menuContainerRect = this.menuContainer.getBoundingClientRect();
+ if (window.innerHeight < menuContainerRect.bottom + this.props.menuBuffer) {
+ window.scrollBy(0, menuContainerRect.bottom + this.props.menuBuffer - window.innerHeight);
+ }
+ }
+ if (prevProps.disabled !== this.props.disabled) {
+ this.setState({ isFocused: false }); // eslint-disable-line react/no-did-update-set-state
+ this.closeMenu();
+ }
+ }
+ }, {
+ key: 'componentWillUnmount',
+ value: function componentWillUnmount() {
+ if (!document.removeEventListener && document.detachEvent) {
+ document.detachEvent('ontouchstart', this.handleTouchOutside);
+ } else {
+ document.removeEventListener('touchstart', this.handleTouchOutside);
+ }
+ }
+ }, {
+ key: 'toggleTouchOutsideEvent',
+ value: function toggleTouchOutsideEvent(enabled) {
+ if (enabled) {
+ if (!document.addEventListener && document.attachEvent) {
+ document.attachEvent('ontouchstart', this.handleTouchOutside);
+ } else {
+ document.addEventListener('touchstart', this.handleTouchOutside);
+ }
+ } else {
+ if (!document.removeEventListener && document.detachEvent) {
+ document.detachEvent('ontouchstart', this.handleTouchOutside);
+ } else {
+ document.removeEventListener('touchstart', this.handleTouchOutside);
+ }
+ }
+ }
+ }, {
+ key: 'handleTouchOutside',
+ value: function handleTouchOutside(event) {
+ // handle touch outside on ios to dismiss menu
+ if (this.wrapper && !this.wrapper.contains(event.target) && this.menuContainer && !this.menuContainer.contains(event.target)) {
+ this.closeMenu();
+ }
+ }
+ }, {
+ key: 'focus',
+ value: function focus() {
+ if (!this.input) return;
+ this.input.focus();
+ }
+ }, {
+ key: 'blurInput',
+ value: function blurInput() {
+ if (!this.input) return;
+ this.input.blur();
+ }
+ }, {
+ key: 'handleTouchMove',
+ value: function handleTouchMove(event) {
+ // Set a flag that the view is being dragged
+ this.dragging = true;
+ }
+ }, {
+ key: 'handleTouchStart',
+ value: function handleTouchStart(event) {
+ // Set a flag that the view is not being dragged
+ this.dragging = false;
+ }
+ }, {
+ key: 'handleTouchEnd',
+ value: function handleTouchEnd(event) {
+ // Check if the view is being dragged, In this case
+ // we don't want to fire the click event (because the user only wants to scroll)
+ if (this.dragging) return;
+
+ // Fire the mouse events
+ this.handleMouseDown(event);
+ }
+ }, {
+ key: 'handleTouchEndClearValue',
+ value: function handleTouchEndClearValue(event) {
+ // Check if the view is being dragged, In this case
+ // we don't want to fire the click event (because the user only wants to scroll)
+ if (this.dragging) return;
+
+ // Clear the value
+ this.clearValue(event);
+ }
+ }, {
+ key: 'handleMouseDown',
+ value: function handleMouseDown(event) {
+ // if the event was triggered by a mousedown and not the primary
+ // button, or if the component is disabled, ignore it.
+ if (this.props.disabled || event.type === 'mousedown' && event.button !== 0) {
+ return;
+ }
+
+ if (event.target.tagName === 'INPUT') {
+ return;
+ }
+
+ // prevent default event handlers
+ event.stopPropagation();
+ event.preventDefault();
+
+ // 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.focus();
+ return this.setState({
+ isOpen: !this.state.isOpen
+ });
+ }
+
+ if (this.state.isFocused) {
+ // On iOS, we can get into a state where we think the input is focused but it isn't really,
+ // since iOS ignores programmatic calls to input.focus() that weren't triggered by a click event.
+ // Call focus() again here to be safe.
+ this.focus();
+
+ var input = this.input;
+ if (typeof input.getInput === 'function') {
+ // Get the actual DOM input if the ref is an component
+ input = input.getInput();
+ }
+
+ // clears the value so that the cursor will be at the end of input when the component re-renders
+ input.value = '';
+
+ // if the input is focused, ensure the menu is open
+ this.setState({
+ isOpen: true,
+ isPseudoFocused: false
+ });
+ } else {
+ // otherwise, focus the input and open the menu
+ this._openAfterFocus = this.props.openOnClick;
+ this.focus();
+ }
+ }
+ }, {
+ key: 'handleMouseDownOnArrow',
+ value: function handleMouseDownOnArrow(event) {
+ // if the event was triggered by a mousedown and not the primary
+ // button, or if the component is disabled, ignore it.
+ if (this.props.disabled || event.type === 'mousedown' && event.button !== 0) {
+ return;
+ }
+ // If the menu isn't open, let the event bubble to the main handleMouseDown
+ if (!this.state.isOpen) {
+ return;
+ }
+ // prevent default event handlers
+ event.stopPropagation();
+ event.preventDefault();
+ // close the menu
+ this.closeMenu();
+ }
+ }, {
+ key: 'handleMouseDownOnMenu',
+ value: function handleMouseDownOnMenu(event) {
+ // if the event was triggered by a mousedown and not the primary
+ // button, or if the component is disabled, ignore it.
+ if (this.props.disabled || event.type === 'mousedown' && event.button !== 0) {
+ return;
+ }
+ event.stopPropagation();
+ event.preventDefault();
+
+ this._openAfterFocus = true;
+ this.focus();
+ }
+ }, {
+ key: 'closeMenu',
+ value: function closeMenu() {
+ if (this.props.onCloseResetsInput) {
+ this.setState({
+ isOpen: false,
+ isPseudoFocused: this.state.isFocused && !this.props.multi,
+ inputValue: this.handleInputValueChange('')
+ });
+ } else {
+ this.setState({
+ isOpen: false,
+ isPseudoFocused: this.state.isFocused && !this.props.multi
+ });
+ }
+ this.hasScrolledToOption = false;
+ }
+ }, {
+ key: 'handleInputFocus',
+ value: function handleInputFocus(event) {
+ if (this.props.disabled) return;
+ var isOpen = this.state.isOpen || this._openAfterFocus || this.props.openOnFocus;
+ if (this.props.onFocus) {
+ this.props.onFocus(event);
+ }
+ this.setState({
+ isFocused: true,
+ isOpen: isOpen
+ });
+ this._openAfterFocus = false;
+ }
+ }, {
+ key: 'handleInputBlur',
+ value: function handleInputBlur(event) {
+ // The check for menu.contains(activeElement) is necessary to prevent IE11's scrollbar from closing the menu in certain contexts.
+ if (this.menu && (this.menu === document.activeElement || this.menu.contains(document.activeElement))) {
+ this.focus();
+ return;
+ }
+
+ if (this.props.onBlur) {
+ this.props.onBlur(event);
+ }
+ var onBlurredState = {
+ isFocused: false,
+ isOpen: false,
+ isPseudoFocused: false
+ };
+ if (this.props.onBlurResetsInput) {
+ onBlurredState.inputValue = this.handleInputValueChange('');
+ }
+ this.setState(onBlurredState);
+ }
+ }, {
+ key: 'handleInputChange',
+ value: function handleInputChange(event) {
+ var newInputValue = event.target.value;
+
+ if (this.state.inputValue !== event.target.value) {
+ newInputValue = this.handleInputValueChange(newInputValue);
+ }
+
+ this.setState({
+ isOpen: true,
+ isPseudoFocused: false,
+ inputValue: newInputValue
+ });
+ }
+ }, {
+ key: 'handleInputValueChange',
+ value: function handleInputValueChange(newValue) {
+ if (this.props.onInputChange) {
+ var nextState = this.props.onInputChange(newValue);
+ // Note: != used deliberately here to catch undefined and null
+ if (nextState != null && (typeof nextState === 'undefined' ? 'undefined' : _typeof(nextState)) !== 'object') {
+ newValue = '' + nextState;
+ }
+ }
+ return newValue;
+ }
+ }, {
+ key: 'handleKeyDown',
+ value: function handleKeyDown(event) {
+ if (this.props.disabled) return;
+
+ if (typeof this.props.onInputKeyDown === 'function') {
+ this.props.onInputKeyDown(event);
+ if (event.defaultPrevented) {
+ return;
+ }
+ }
+
+ switch (event.keyCode) {
+ case 8:
+ // backspace
+ if (!this.state.inputValue && this.props.backspaceRemoves) {
+ event.preventDefault();
+ this.popValue();
+ }
+ return;
+ case 9:
+ // tab
+ if (event.shiftKey || !this.state.isOpen || !this.props.tabSelectsValue) {
+ return;
+ }
+ this.selectFocusedOption();
+ return;
+ case 13:
+ // enter
+ if (!this.state.isOpen) return;
+ event.stopPropagation();
+ this.selectFocusedOption();
+ break;
+ case 27:
+ // escape
+ if (this.state.isOpen) {
+ this.closeMenu();
+ event.stopPropagation();
+ } else if (this.props.clearable && this.props.escapeClearsValue) {
+ this.clearValue(event);
+ event.stopPropagation();
+ }
+ break;
+ case 38:
+ // up
+ this.focusPreviousOption();
+ break;
+ case 40:
+ // down
+ this.focusNextOption();
+ break;
+ case 33:
+ // page up
+ this.focusPageUpOption();
+ break;
+ case 34:
+ // page down
+ this.focusPageDownOption();
+ break;
+ case 35:
+ // end key
+ if (event.shiftKey) {
+ return;
+ }
+ this.focusEndOption();
+ break;
+ case 36:
+ // home key
+ if (event.shiftKey) {
+ return;
+ }
+ this.focusStartOption();
+ break;
+ case 46:
+ // backspace
+ if (!this.state.inputValue && this.props.deleteRemoves) {
+ event.preventDefault();
+ this.popValue();
+ }
+ return;
+ default:
+ return;
+ }
+ event.preventDefault();
+ }
+ }, {
+ key: 'handleValueClick',
+ value: function handleValueClick(option, event) {
+ if (!this.props.onValueClick) return;
+ this.props.onValueClick(option, event);
+ }
+ }, {
+ key: 'handleMenuScroll',
+ value: function handleMenuScroll(event) {
+ if (!this.props.onMenuScrollToBottom) return;
+ var target = event.target;
+
+ if (target.scrollHeight > target.offsetHeight && target.scrollHeight - target.offsetHeight - target.scrollTop <= 0) {
+ 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
+ */
+
+ }, {
+ key: 'getValueArray',
+ value: function getValueArray(value, nextProps) {
+ var _this2 = this;
+
+ /** 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;
+ if (props.multi) {
+ if (typeof value === 'string') value = value.split(props.delimiter);
+ if (!Array.isArray(value)) {
+ if (value === null || value === undefined) return [];
+ value = [value];
+ }
+ return value.map(function (value) {
+ return _this2.expandValue(value, props);
+ }).filter(function (i) {
+ return i;
+ });
+ }
+ var expandedValue = this.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 _props = this.props,
+ labelKey = _props.labelKey,
+ valueKey = _props.valueKey,
+ renderInvalidValues = _props.renderInvalidValues;
+
+ var options = this._flatOptions;
+ if (!options || value === '') return;
+ for (var i = 0; i < options.length; i++) {
+ if (options[i][valueKey] === value) return options[i];
+ }
+
+ // no matching option, return an invalid option if renderInvalidValues is enabled
+ if (renderInvalidValues) {
+ var _ref;
+
+ this._invalidOptions = this._invalidOptions || {};
+ this._invalidOptions[value] = this._invalidOptions[value] || (_ref = {
+ invalid: true
+ }, defineProperty(_ref, labelKey, value), defineProperty(_ref, valueKey, value), _ref);
+ return this._invalidOptions[value];
+ }
+ }
+ }, {
+ key: 'setValue',
+ value: function setValue(value) {
+ var _this3 = this;
+
+ if (this.props.autoBlur) {
+ this.blurInput();
+ }
+ if (this.props.required) {
+ var required = this.handleRequired(value, this.props.multi);
+ this.setState({ required: required });
+ }
+ 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;
+
+ // NOTE: we actually add/set the value in a callback to make sure the
+ // input value is empty to avoid styling issues in Chrome
+ if (this.props.closeOnSelect) {
+ this.hasScrolledToOption = false;
+ }
+ if (this.props.multi) {
+ var updatedValue = this.props.onSelectResetsInput ? '' : this.state.inputValue;
+ this.setState({
+ focusedIndex: null,
+ inputValue: this.handleInputValueChange(updatedValue),
+ isOpen: !this.props.closeOnSelect
+ }, function () {
+ _this4.addValue(value);
+ });
+ } else {
+ this.setState({
+ inputValue: this.handleInputValueChange(''),
+ isOpen: !this.props.closeOnSelect,
+ isPseudoFocused: this.state.isFocused
+ }, function () {
+ _this4.setValue(value);
+ });
+ }
+ }
+ }, {
+ key: 'addValue',
+ value: function addValue(value) {
+ var valueArray = this.getValueArray(this.props.value);
+ var visibleOptions = this._visibleOptions.filter(function (val) {
+ return !val.disabled;
+ });
+ var lastValueIndex = visibleOptions.indexOf(value);
+ this.setValue(valueArray.concat(value));
+ if (visibleOptions.length - 1 === lastValueIndex) {
+ // the last option was selected; focus the second-last one
+ this.focusOption(visibleOptions[lastValueIndex - 1]);
+ } else if (visibleOptions.length > lastValueIndex) {
+ // focus the option below the selected one
+ this.focusOption(visibleOptions[lastValueIndex + 1]);
+ }
+ }
+ }, {
+ key: 'popValue',
+ value: function popValue() {
+ var valueArray = this.getValueArray(this.props.value);
+ if (!valueArray.length) return;
+ if (valueArray[valueArray.length - 1].clearableValue === false) return;
+ this.setValue(this.props.multi ? valueArray.slice(0, valueArray.length - 1) : null);
+ }
+ }, {
+ key: 'removeValue',
+ value: function removeValue(value) {
+ var valueArray = this.getValueArray(this.props.value);
+ this.setValue(valueArray.filter(function (i) {
+ return i !== value;
+ }));
+ this.focus();
+ }
+ }, {
+ key: 'clearValue',
+ value: function clearValue(event) {
+ // if the event was triggered by a mousedown and not the primary
+ // button, ignore it.
+ if (event && event.type === 'mousedown' && event.button !== 0) {
+ return;
+ }
+ event.stopPropagation();
+ event.preventDefault();
+ this.setValue(this.getResetValue());
+ this.setState({
+ isOpen: false,
+ inputValue: this.handleInputValueChange('')
+ }, this.focus);
+ }
+ }, {
+ key: 'getResetValue',
+ value: function getResetValue() {
+ if (this.props.resetValue !== undefined) {
+ return this.props.resetValue;
+ } else if (this.props.multi) {
+ return [];
+ } else {
+ return null;
+ }
+ }
+ }, {
+ key: 'focusOption',
+ value: function focusOption(option) {
+ this.setState({
+ focusedOption: option
+ });
+ }
+ }, {
+ key: 'focusNextOption',
+ value: function focusNextOption() {
+ this.focusAdjacentOption('next');
+ }
+ }, {
+ key: 'focusPreviousOption',
+ value: function focusPreviousOption() {
+ this.focusAdjacentOption('previous');
+ }
+ }, {
+ key: 'focusPageUpOption',
+ value: function focusPageUpOption() {
+ this.focusAdjacentOption('page_up');
+ }
+ }, {
+ key: 'focusPageDownOption',
+ value: function focusPageDownOption() {
+ this.focusAdjacentOption('page_down');
+ }
+ }, {
+ key: 'focusStartOption',
+ value: function focusStartOption() {
+ this.focusAdjacentOption('start');
+ }
+ }, {
+ key: 'focusEndOption',
+ value: function focusEndOption() {
+ this.focusAdjacentOption('end');
+ }
+ }, {
+ key: 'focusAdjacentOption',
+ value: function focusAdjacentOption(dir) {
+ var options = this._visibleOptions.map(function (option, index) {
+ return { option: option, index: index };
+ }).filter(function (option) {
+ return !option.option.disabled;
+ });
+ 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)
+ });
+ return;
+ }
+ if (!options.length) return;
+ var focusedIndex = -1;
+ for (var i = 0; i < options.length; i++) {
+ if (this._focusedOption === options[i].option) {
+ focusedIndex = i;
+ break;
+ }
+ }
+ if (dir === 'next' && focusedIndex !== -1) {
+ focusedIndex = (focusedIndex + 1) % options.length;
+ } else if (dir === 'previous') {
+ if (focusedIndex > 0) {
+ focusedIndex = focusedIndex - 1;
+ } else {
+ focusedIndex = options.length - 1;
+ }
+ } else if (dir === 'start') {
+ focusedIndex = 0;
+ } else if (dir === 'end') {
+ focusedIndex = options.length - 1;
+ } else if (dir === 'page_up') {
+ var potentialIndex = focusedIndex - this.props.pageSize;
+ if (potentialIndex < 0) {
+ focusedIndex = 0;
+ } else {
+ focusedIndex = potentialIndex;
+ }
+ } else if (dir === 'page_down') {
+ var potentialIndex = focusedIndex + this.props.pageSize;
+ if (potentialIndex > options.length - 1) {
+ focusedIndex = options.length - 1;
+ } else {
+ focusedIndex = potentialIndex;
+ }
+ }
+
+ if (focusedIndex === -1) {
+ focusedIndex = 0;
+ }
+
+ this.setState({
+ focusedIndex: options[focusedIndex].index,
+ focusedOption: options[focusedIndex].option
+ });
+ }
+ }, {
+ key: 'getFocusedOption',
+ value: function getFocusedOption() {
+ return this._focusedOption;
+ }
+ }, {
+ key: 'getInputValue',
+ value: function getInputValue() {
+ return this.state.inputValue;
+ }
+ }, {
+ key: 'selectFocusedOption',
+ value: function selectFocusedOption() {
+ if (this._focusedOption) {
+ return this.selectValue(this._focusedOption);
+ }
+ }
+ }, {
+ key: 'renderLoading',
+ value: function renderLoading() {
+ if (!this.props.isLoading) return;
+ return React__default.createElement(
+ 'span',
+ { className: 'Select-loading-zone', 'aria-hidden': 'true' },
+ React__default.createElement('span', { className: 'Select-loading' })
+ );
+ }
+ }, {
+ key: 'renderValue',
+ value: function renderValue(valueArray, isOpen) {
+ var _this5 = this;
+
+ var renderLabel = this.props.valueRenderer || this.getOptionLabel;
+ var ValueComponent = this.props.valueComponent;
+ if (!valueArray.length) {
+ return !this.state.inputValue ? React__default.createElement(
+ 'div',
+ { className: 'Select-placeholder' },
+ this.props.placeholder
+ ) : null;
+ }
+ var onClick = this.props.onValueClick ? this.handleValueClick : null;
+ if (this.props.multi) {
+ return valueArray.map(function (value, i) {
+ return React__default.createElement(
+ ValueComponent,
+ {
+ id: _this5._instancePrefix + '-value-' + i,
+ instancePrefix: _this5._instancePrefix,
+ disabled: _this5.props.disabled || value.clearableValue === false,
+ key: 'value-' + i + '-' + value[_this5.props.valueKey],
+ onClick: onClick,
+ onRemove: _this5.removeValue,
+ value: value
+ },
+ renderLabel(value, i),
+ React__default.createElement(
+ 'span',
+ { className: 'Select-aria-only' },
+ '\xA0'
+ )
+ );
+ });
+ } else if (!this.state.inputValue) {
+ if (isOpen) onClick = null;
+ return React__default.createElement(
+ ValueComponent,
+ {
+ id: this._instancePrefix + '-value-item',
+ disabled: this.props.disabled,
+ instancePrefix: this._instancePrefix,
+ onClick: onClick,
+ value: valueArray[0]
+ },
+ renderLabel(valueArray[0])
+ );
+ }
+ }
+ }, {
+ key: 'renderInput',
+ value: function renderInput(valueArray, focusedOptionIndex) {
+ var _classNames,
+ _this6 = this;
+
+ var className = classNames('Select-input', this.props.inputProps.className);
+ 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));
+
+ 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-label': this.props['aria-label'],
+ className: className,
+ tabIndex: this.props.tabIndex,
+ onBlur: this.handleInputBlur,
+ onChange: this.handleInputChange,
+ onFocus: this.handleInputFocus,
+ ref: function ref(_ref2) {
+ return _this6.input = _ref2;
+ },
+ required: this.state.required,
+ value: this.state.inputValue
+ });
+
+ if (this.props.inputRenderer) {
+ return this.props.inputRenderer(inputProps);
+ }
+
+ if (this.props.disabled || !this.props.searchable) {
+ var _props$inputProps = this.props.inputProps,
+ inputClassName = _props$inputProps.inputClassName,
+ divProps = objectWithoutProperties(_props$inputProps, ['inputClassName']);
+
+
+ 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',
+ className: className,
+ tabIndex: this.props.tabIndex || 0,
+ onBlur: this.handleInputBlur,
+ onFocus: this.handleInputFocus,
+ ref: function ref(_ref3) {
+ return _this6.input = _ref3;
+ },
+ 'aria-readonly': '' + !!this.props.disabled,
+ style: { border: 0, width: 1, display: 'inline-block' } }));
+ }
+
+ if (this.props.autosize) {
+ return React__default.createElement(AutosizeInput, _extends({}, inputProps, { minWidth: '5' }));
+ }
+ return React__default.createElement(
+ 'div',
+ { className: className },
+ React__default.createElement('input', inputProps)
+ );
+ }
+ }, {
+ key: 'renderClear',
+ value: function renderClear() {
+ if (!this.props.clearable || this.props.value === undefined || this.props.value === null || this.props.multi && !this.props.value.length || this.props.disabled || this.props.isLoading) return;
+ 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,
+ onMouseDown: this.clearValue,
+ onTouchStart: this.handleTouchStart,
+ onTouchMove: this.handleTouchMove,
+ onTouchEnd: this.handleTouchEndClearValue
+ },
+ clear
+ );
+ }
+ }, {
+ key: 'renderArrow',
+ value: function renderArrow() {
+ var onMouseDown = this.handleMouseDownOnArrow;
+ var isOpen = this.state.isOpen;
+ var arrow = this.props.arrowRenderer({ onMouseDown: onMouseDown, isOpen: isOpen });
+
+ return React__default.createElement(
+ 'span',
+ {
+ className: 'Select-arrow-zone',
+ onMouseDown: onMouseDown
+ },
+ arrow
+ );
+ }
+ }, {
+ key: 'filterFlatOptions',
+ value: function filterFlatOptions(excludeOptions) {
+ var filterValue = this.state.inputValue;
+ var flatOptions = this._flatOptions;
+ if (this.props.filterOptions) {
+ // Maintain backwards compatibility with boolean attribute
+ var filterOptions$$1 = typeof this.props.filterOptions === 'function' ? this.props.filterOptions : filterOptions;
+
+ return filterOptions$$1(flatOptions, filterValue, excludeOptions, {
+ 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
+ });
+ } else {
+ return flatOptions;
+ }
+ }
+ }, {
+ key: 'flattenOptions',
+ value: function flattenOptions(options, group) {
+ if (!options) return [];
+ var flatOptions = [];
+ for (var i = 0; i < options.length; i++) {
+ // We clone each option with a pointer to its parent group for efficient unflattening
+ var optionCopy = clone(options[i]);
+ optionCopy.isInTree = false;
+ if (group) {
+ optionCopy.group = group;
+ }
+ if (isGroup(optionCopy)) {
+ flatOptions = flatOptions.concat(this.flattenOptions(optionCopy.options, optionCopy));
+ optionCopy.options = [];
+ } else {
+ flatOptions.push(optionCopy);
+ }
+ }
+ return flatOptions;
+ }
+ }, {
+ key: 'unflattenOptions',
+ value: function unflattenOptions(flatOptions) {
+ var groupedOptions = [];
+ var parent = void 0,
+ child = void 0;
+
+ // Remove all ancestor groups from the tree
+ flatOptions.forEach(function (option) {
+ option.isInTree = false;
+ parent = option.group;
+ while (parent) {
+ if (parent.isInTree) {
+ parent.options = [];
+ parent.isInTree = false;
+ }
+ parent = parent.group;
+ }
+ });
+
+ // Now reconstruct the options tree
+ flatOptions.forEach(function (option) {
+ child = option;
+ parent = child.group;
+ while (parent) {
+ if (!child.isInTree) {
+ parent.options.push(child);
+ child.isInTree = true;
+ }
+
+ child = parent;
+ parent = child.group;
+ }
+ if (!child.isInTree) {
+ groupedOptions.push(child);
+ child.isInTree = true;
+ }
+ });
+ return groupedOptions;
+ }
+ }, {
+ key: 'onOptionRef',
+ value: function onOptionRef(ref, isFocused) {
+ if (isFocused) {
+ this.focused = ref;
+ }
+ }
+ }, {
+ key: 'renderMenu',
+ value: function renderMenu(options, valueArray, focusedOption) {
+ if (options && options.length) {
+ return this.props.menuRenderer({
+ focusedOption: focusedOption,
+ focusOption: this.focusOption,
+ instancePrefix: this._instancePrefix,
+ labelKey: this.props.labelKey,
+ onFocus: this.focusOption,
+ onOptionRef: this.onOptionRef,
+ onSelect: this.selectValue,
+ optionClassName: this.props.optionClassName,
+ optionComponent: this.props.optionComponent,
+ optionGroupComponent: this.props.optionGroupComponent,
+ optionRenderer: this.props.optionRenderer || this.getOptionLabel,
+ options: options,
+ selectValue: this.selectValue,
+ valueArray: valueArray,
+ valueKey: this.props.valueKey
+ });
+ } else if (this.props.noResultsText) {
+ return React__default.createElement(
+ 'div',
+ { className: 'Select-noresults' },
+ this.props.noResultsText
+ );
+ } else {
+ return null;
+ }
+ }
+ }, {
+ key: 'renderHiddenField',
+ value: function renderHiddenField(valueArray) {
+ var _this7 = this;
+
+ if (!this.props.name) return;
+ if (this.props.joinValues) {
+ var value = valueArray.map(function (i) {
+ return stringifyValue(i[_this7.props.valueKey]);
+ }).join(this.props.delimiter);
+ return React__default.createElement('input', {
+ type: 'hidden',
+ ref: function ref(_ref4) {
+ return _this7.value = _ref4;
+ },
+ name: this.props.name,
+ value: value,
+ disabled: this.props.disabled });
+ }
+ return valueArray.map(function (item, index) {
+ return React__default.createElement('input', { key: 'hidden.' + index,
+ type: 'hidden',
+ ref: 'value' + index,
+ name: _this7.props.name,
+ value: stringifyValue(item[_this7.props.valueKey]),
+ disabled: _this7.props.disabled });
+ });
+ }
+ }, {
+ key: 'getFocusableOptionIndex',
+ value: function getFocusableOptionIndex(selectedOption) {
+ var options = this._visibleOptions;
+ if (!options.length) return null;
+
+ var valueKey = this.props.valueKey;
+ var focusedOption = this.state.focusedOption || selectedOption;
+ if (focusedOption && !focusedOption.disabled) {
+ var focusedOptionIndex = -1;
+ options.some(function (option, index) {
+ var isOptionEqual = option[valueKey] === focusedOption[valueKey];
+ if (isOptionEqual) {
+ focusedOptionIndex = index;
+ }
+ return isOptionEqual;
+ });
+ if (focusedOptionIndex !== -1) {
+ return focusedOptionIndex;
+ }
+ }
+
+ for (var i = 0; i < options.length; i++) {
+ if (!options[i].disabled) return i;
+ }
+ return null;
+ }
+ }, {
+ key: 'renderOuter',
+ value: function renderOuter(options, valueArray, focusedOption) {
+ var _this8 = this;
+
+ var Dropdown$$1 = this.props.dropdownComponent;
+ var menu = this.renderMenu(options, valueArray, focusedOption);
+ if (!menu) {
+ return null;
+ }
+
+ return React__default.createElement(
+ Dropdown$$1,
+ null,
+ React__default.createElement(
+ 'div',
+ { ref: function ref(_ref6) {
+ return _this8.menuContainer = _ref6;
+ }, className: 'Select-menu-outer', style: this.props.menuContainerStyle },
+ React__default.createElement(
+ 'div',
+ { ref: function ref(_ref5) {
+ return _this8.menu = _ref5;
+ }, role: 'listbox', tabIndex: -1, className: 'Select-menu', id: this._instancePrefix + '-list',
+ style: this.props.menuStyle,
+ onScroll: this.handleMenuScroll,
+ onMouseDown: this.handleMouseDownOnMenu },
+ menu
+ )
+ )
+ );
+ }
+ }, {
+ key: 'render',
+ value: function render() {
+ var _this9 = this;
+
+ var valueArray = this.getValueArray(this.props.value);
+ this._visibleOptions = this.filterFlatOptions(this.props.multi ? valueArray : null);
+ var options = this.unflattenOptions(this._visibleOptions);
+ var isOpen = typeof this.props.isOpen === 'boolean' ? this.props.isOpen : this.state.isOpen;
+ if (this.props.multi && !options.length && valueArray.length && !this.state.inputValue) isOpen = false;
+ var focusedOptionIndex = this.getFocusableOptionIndex(valueArray[0]);
+
+ var focusedOption = null;
+ if (focusedOptionIndex !== null) {
+ focusedOption = this._focusedOption = this._visibleOptions[focusedOptionIndex];
+ } else {
+ focusedOption = this._focusedOption = null;
+ }
+ var className = classNames('Select', this.props.className, {
+ 'Select--multi': this.props.multi,
+ 'Select--single': !this.props.multi,
+ 'is-clearable': this.props.clearable,
+ 'is-disabled': this.props.disabled,
+ 'is-focused': this.state.isFocused,
+ 'is-loading': this.props.isLoading,
+ 'is-open': isOpen,
+ 'is-pseudo-focused': this.state.isPseudoFocused,
+ 'is-searchable': this.props.searchable,
+ 'has-value': valueArray.length
+ });
+
+ var removeMessage = null;
+ if (this.props.multi && !this.props.disabled && valueArray.length && !this.state.inputValue && this.state.isFocused && this.props.backspaceRemoves) {
+ removeMessage = React__default.createElement(
+ 'span',
+ { id: this._instancePrefix + '-backspace-remove-message', className: 'Select-aria-only', 'aria-live': 'assertive' },
+ this.props.backspaceToRemoveMessage.replace('{label}', valueArray[valueArray.length - 1][this.props.labelKey])
+ );
+ }
+
+ return React__default.createElement(
+ 'div',
+ { ref: function ref(_ref8) {
+ return _this9.wrapper = _ref8;
+ },
+ className: className,
+ style: this.props.wrapperStyle },
+ this.renderHiddenField(valueArray),
+ React__default.createElement(
+ 'div',
+ { ref: function ref(_ref7) {
+ return _this9.control = _ref7;
+ },
+ className: 'Select-control',
+ style: this.props.style,
+ onKeyDown: this.handleKeyDown,
+ onMouseDown: this.handleMouseDown,
+ onTouchEnd: this.handleTouchEnd,
+ onTouchStart: this.handleTouchStart,
+ onTouchMove: this.handleTouchMove
+ },
+ React__default.createElement(
+ 'span',
+ { className: 'Select-multi-value-wrapper', id: this._instancePrefix + '-value' },
+ this.renderValue(valueArray, isOpen),
+ this.renderInput(valueArray, focusedOptionIndex)
+ ),
+ removeMessage,
+ this.renderLoading(),
+ this.renderClear(),
+ this.renderArrow()
+ ),
+ isOpen ? this.renderOuter(options, !this.props.multi ? valueArray : null, focusedOption) : null
+ );
+ }
+ }]);
+ 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)
+ 'aria-labelledby': PropTypes.string, // HTML ID of an element that should be used as the label (for assistive tech)
+ addLabelText: PropTypes.string, // placeholder displayed when you want to add a label on a multi-value input
+ arrowRenderer: PropTypes.func, // Create drop-down caret element
+ autoBlur: PropTypes.bool, // automatically blur the component when an option is selected
+ autofocus: PropTypes.bool, // autofocus the component on mount
+ autosize: PropTypes.bool, // whether to enable autosizing or not
+ backspaceRemoves: PropTypes.bool, // whether backspace removes an item if there is no text input
+ backspaceToRemoveMessage: PropTypes.string, // Message to use for screenreaders to press backspace to remove the current item - {label} is replaced with the item label
+ className: PropTypes.string, // className for the outer element
+ clearAllText: stringOrNode, // title for the "clear" control when multi: true
+ clearRenderer: PropTypes.func, // create clearable x element
+ clearValueText: stringOrNode, // title for the "clear" control
+ clearable: PropTypes.bool, // should it be possible to reset value
+ closeOnSelect: PropTypes.bool, // whether to close the menu when a value is selected
+ deleteRemoves: PropTypes.bool, // whether backspace removes an item if there is no text input
+ delimiter: PropTypes.string, // delimiter to use to join multiple values for the hidden field value
+ disabled: PropTypes.bool, // whether the Select is disabled or not
+ dropdownComponent: PropTypes.func, // dropdown component to render the menu in
+ escapeClearsValue: PropTypes.bool, // whether escape clears the value when the menu is closed
+ filterOption: PropTypes.func, // method to filter a single option (option, filterString)
+ filterOptions: PropTypes.any, // boolean to enable default filtering or function to filter the options array ([options], filterString, [values])
+ ignoreAccents: PropTypes.bool, // whether to strip diacritics when filtering
+ ignoreCase: PropTypes.bool, // whether to perform case-insensitive filtering
+ inputProps: PropTypes.object, // custom attributes for the Input
+ inputRenderer: PropTypes.func, // returns a custom input component
+ instanceId: PropTypes.string, // set the components instanceId
+ isLoading: PropTypes.bool, // whether the Select is loading externally or not (such as options being loaded)
+ isOpen: PropTypes.bool, // whether the Select dropdown menu is open or not
+ joinValues: PropTypes.bool, // joins multiple values into a single form field with the delimiter (legacy mode)
+ labelKey: PropTypes.string, // path of the label value in option objects
+ matchPos: PropTypes.string, // (any|start) match the start or entire string when filtering
+ matchProp: PropTypes.string, // (any|label|value) which option property to filter on
+ menuBuffer: PropTypes.number, // optional buffer (in px) between the bottom of the viewport and the bottom of the menu
+ menuContainerStyle: PropTypes.object, // optional style to apply to the menu container
+ menuRenderer: PropTypes.func, // renders a custom menu with options
+ menuStyle: PropTypes.object, // optional style to apply to the menu
+ multi: PropTypes.bool, // multi-value input
+ name: PropTypes.string, // generates a hidden tag with this field name for html forms
+ noResultsText: stringOrNode, // placeholder displayed when there are no matching search results
+ onBlur: PropTypes.func, // onBlur handler: function (event) {}
+ onBlurResetsInput: PropTypes.bool, // whether input is cleared on blur
+ onChange: PropTypes.func, // onChange handler: function (newValue) {}
+ onClose: PropTypes.func, // fires when the menu is closed
+ onCloseResetsInput: PropTypes.bool, // whether input is cleared when menu is closed through the arrow
+ onFocus: PropTypes.func, // onFocus handler: function (event) {}
+ onInputChange: PropTypes.func, // onInputChange handler: function (inputValue) {}
+ onInputKeyDown: PropTypes.func, // input keyDown handler: function (event) {}
+ onMenuScrollToBottom: PropTypes.func, // fires when the menu is scrolled to the bottom; can be used to paginate options
+ onOpen: PropTypes.func, // fires when the menu is opened
+ onSelectResetsInput: PropTypes.bool, // whether input is cleared on select (works only for multiselect)
+ onValueClick: PropTypes.func, // onClick handler for value labels: function (value, event) {}
+ openOnClick: PropTypes.bool, // boolean to control opening the menu when the control is clicked
+ openOnFocus: PropTypes.bool, // always open options menu on focus
+ optionClassName: PropTypes.string, // additional class(es) to apply to the elements
+ optionComponent: PropTypes.func, // option component to render in dropdown
+ optionGroupComponent: PropTypes.func, // option group component to render in dropdown
+ optionRenderer: PropTypes.func, // optionRenderer: function (option) {}
+ options: PropTypes.array, // array of options
+ pageSize: PropTypes.number, // number of entries to page when using page up/down keys
+ placeholder: stringOrNode, // field placeholder, displayed when there's no value
+ renderInvalidValues: PropTypes.bool, // boolean to enable rendering values that do not match any options
+ required: PropTypes.bool, // applies HTML5 required attribute when needed
+ resetValue: PropTypes.any, // value to use when you clear the control
+ scrollMenuIntoView: PropTypes.bool, // boolean to enable the viewport to shift so that the full menu fully visible when engaged
+ searchable: PropTypes.bool, // whether to enable searching feature or not
+ simpleValue: PropTypes.bool, // pass the value to onChange as a simple value (legacy pre 1.0 mode), defaults to false
+ style: PropTypes.object, // optional style to apply to the control
+ tabIndex: PropTypes.string, // optional tab index of the control
+ tabSelectsValue: PropTypes.bool, // whether to treat tabbing out while focused to be value selection
+ value: PropTypes.any, // initial field value
+ valueComponent: PropTypes.func, // value component to render
+ valueKey: PropTypes.string, // path of the label value in option objects
+ valueRenderer: PropTypes.func, // valueRenderer: function (option) {}
+ wrapperStyle: PropTypes.object // optional style to apply to the component wrapper
+};
+
+Select$1.defaultProps = {
+ addLabelText: 'Add "{label}"?',
+ arrowRenderer: arrowRenderer,
+ autosize: true,
+ backspaceRemoves: true,
+ backspaceToRemoveMessage: 'Press backspace to remove {label}',
+ clearable: true,
+ clearAllText: 'Clear all',
+ clearRenderer: clearRenderer,
+ clearValueText: 'Clear value',
+ closeOnSelect: true,
+ deleteRemoves: true,
+ delimiter: ',',
+ disabled: false,
+ dropdownComponent: Dropdown,
+ escapeClearsValue: true,
+ filterOptions: filterOptions,
+ ignoreAccents: true,
+ ignoreCase: true,
+ inputProps: {},
+ isLoading: false,
+ joinValues: false,
+ labelKey: 'label',
+ matchPos: 'any',
+ matchProp: 'any',
+ menuBuffer: 0,
+ menuRenderer: menuRenderer,
+ multi: false,
+ noResultsText: 'No results found',
+ onBlurResetsInput: true,
+ onSelectResetsInput: true,
+ onCloseResetsInput: true,
+ openOnClick: true,
+ optionComponent: Option,
+ optionGroupComponent: OptionGroup,
+ pageSize: 5,
+ placeholder: 'Select...',
+ required: false,
+ scrollMenuIntoView: true,
+ searchable: true,
+ simpleValue: false,
+ tabSelectsValue: true,
+ valueComponent: Value,
+ valueKey: 'value'
+};
+
+var propTypes = {
+ autoload: PropTypes.bool.isRequired, // automatically call the `loadOptions` prop on-mount; defaults to true
+ cache: PropTypes.any, // object to use to cache results; set to null/false to disable caching
+ children: PropTypes.func.isRequired, // Child function responsible for creating the inner Select component; (props: Object): PropTypes.element
+ ignoreAccents: PropTypes.bool, // strip diacritics when filtering; defaults to true
+ ignoreCase: PropTypes.bool, // perform case-insensitive filtering; defaults to true
+ loadOptions: PropTypes.func.isRequired, // callback to load options asynchronously; (inputValue: string, callback: Function): ?Promise
+ loadingPlaceholder: PropTypes.oneOfType([// replaces the placeholder while options are loading
+ PropTypes.string, PropTypes.node]),
+ multi: PropTypes.bool, // multi-value input
+ noResultsText: PropTypes.oneOfType([// field noResultsText, displayed when no options come back from the server
+ PropTypes.string, PropTypes.node]),
+ onChange: PropTypes.func, // onChange handler: function (newValue) {}
+ onInputChange: PropTypes.func, // optional for keeping track of what is being typed
+ options: PropTypes.array.isRequired, // array of options
+ placeholder: PropTypes.oneOfType([// field placeholder, displayed when there's no value (shared with Select)
+ PropTypes.string, PropTypes.node]),
+ searchPromptText: PropTypes.oneOfType([// label to prompt for search input
+ PropTypes.string, PropTypes.node]),
+ value: PropTypes.any // initial field value
+};
+
+var defaultCache = {};
+
+var defaultProps = {
+ autoload: true,
+ cache: defaultCache,
+ children: defaultChildren,
+ ignoreAccents: true,
+ ignoreCase: true,
+ loadingPlaceholder: 'Loading...',
+ options: [],
+ searchPromptText: 'Type to search'
+};
+
+var Async = function (_Component) {
+ inherits(Async, _Component);
+
+ function Async(props, context) {
+ classCallCheck(this, Async);
+
+ var _this = possibleConstructorReturn(this, (Async.__proto__ || Object.getPrototypeOf(Async)).call(this, props, context));
+
+ _this._cache = props.cache === defaultCache ? {} : props.cache;
+
+ _this.state = {
+ inputValue: '',
+ isLoading: false,
+ options: props.options
+ };
+
+ _this.onInputChange = _this.onInputChange.bind(_this);
+ return _this;
+ }
+
+ createClass(Async, [{
+ key: 'componentDidMount',
+ value: function componentDidMount() {
+ var autoload = this.props.autoload;
+
+
+ if (autoload) {
+ this.loadOptions('');
+ }
+ }
+ }, {
+ key: 'componentWillReceiveProps',
+ value: function componentWillReceiveProps(nextProps) {
+ if (nextProps.options !== this.props.options) {
+ this.setState({
+ options: nextProps.options
+ });
+ }
+ }
+ }, {
+ key: 'componentWillUnmount',
+ value: function componentWillUnmount() {
+ this._callback = null;
+ }
+ }, {
+ key: 'loadOptions',
+ value: function loadOptions(inputValue) {
+ var _this2 = this;
+
+ var loadOptions = this.props.loadOptions;
+
+ var cache = this._cache;
+
+ if (cache && Object.prototype.hasOwnProperty.call(cache, inputValue)) {
+ this.setState({
+ options: cache[inputValue]
+ });
+
+ return;
+ }
+
+ var callback = function callback(error, data) {
+ if (callback === _this2._callback) {
+ _this2._callback = null;
+
+ var options = data && data.options || [];
+
+ if (cache) {
+ cache[inputValue] = options;
+ }
+
+ _this2.setState({
+ isLoading: false,
+ options: options
+ });
+ }
+ };
+
+ // Ignore all but the most recent request
+ this._callback = callback;
+
+ var promise = loadOptions(inputValue, callback);
+ if (promise) {
+ promise.then(function (data) {
+ return callback(null, data);
+ }, function (error) {
+ return callback(error);
+ });
+ }
+
+ if (this._callback && !this.state.isLoading) {
+ this.setState({
+ isLoading: true
+ });
+ }
+ }
+ }, {
+ key: 'onInputChange',
+ value: function onInputChange(inputValue) {
+ var _props = this.props,
+ ignoreAccents = _props.ignoreAccents,
+ ignoreCase = _props.ignoreCase,
+ onInputChange = _props.onInputChange;
+
+ var transformedInputValue = inputValue;
+
+ if (ignoreAccents) {
+ transformedInputValue = stripDiacritics(transformedInputValue);
+ }
+
+ if (ignoreCase) {
+ transformedInputValue = transformedInputValue.toLowerCase();
+ }
+
+ if (onInputChange) {
+ onInputChange(transformedInputValue);
+ }
+
+ this.setState({ inputValue: inputValue });
+ this.loadOptions(transformedInputValue);
+
+ // Return the original input value to avoid modifying the user's view of the input while typing.
+ return inputValue;
+ }
+ }, {
+ key: 'noResultsText',
+ value: function noResultsText() {
+ var _props2 = this.props,
+ loadingPlaceholder = _props2.loadingPlaceholder,
+ noResultsText = _props2.noResultsText,
+ searchPromptText = _props2.searchPromptText;
+ var _state = this.state,
+ inputValue = _state.inputValue,
+ isLoading = _state.isLoading;
+
+
+ if (isLoading) {
+ return loadingPlaceholder;
+ }
+ if (inputValue && noResultsText) {
+ return noResultsText;
+ }
+ return searchPromptText;
+ }
+ }, {
+ key: 'focus',
+ value: function focus() {
+ this.select.focus();
+ }
+ }, {
+ key: 'render',
+ value: function render() {
+ var _this3 = this;
+
+ 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,
+ options = _state2.options;
+
+
+ var props = {
+ noResultsText: this.noResultsText(),
+ placeholder: isLoading ? loadingPlaceholder : placeholder,
+ options: isLoading && loadingPlaceholder ? [] : options,
+ ref: function ref(_ref) {
+ return _this3.select = _ref;
+ }
+ };
+
+ return children(_extends({}, this.props, props, {
+ isLoading: isLoading,
+ onInputChange: this.onInputChange
+ }));
+ }
+ }]);
+ return Async;
+}(React.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);
+
+ function CreatableSelect(props, context) {
+ classCallCheck(this, CreatableSelect);
+
+ var _this = possibleConstructorReturn(this, (CreatableSelect.__proto__ || Object.getPrototypeOf(CreatableSelect)).call(this, props, context));
+
+ _this.filterOptions = _this.filterOptions.bind(_this);
+ _this.menuRenderer = _this.menuRenderer.bind(_this);
+ _this.onInputKeyDown = _this.onInputKeyDown.bind(_this);
+ _this.onInputChange = _this.onInputChange.bind(_this);
+ _this.onOptionSelect = _this.onOptionSelect.bind(_this);
+ return _this;
+ }
+
+ createClass(CreatableSelect, [{
+ key: 'createNewOption',
+ value: function createNewOption() {
+ var _props = this.props,
+ isValidNewOption = _props.isValidNewOption,
+ newOptionCreator = _props.newOptionCreator,
+ onNewOptionClick = _props.onNewOptionClick,
+ _props$options = _props.options,
+ options = _props$options === undefined ? [] : _props$options;
+
+
+ if (isValidNewOption({ label: this.inputValue })) {
+ var option = newOptionCreator({ label: this.inputValue, labelKey: this.labelKey, valueKey: this.valueKey });
+ var _isOptionUnique = this.isOptionUnique({ option: option });
+
+ // Don't add the same option twice.
+ if (_isOptionUnique) {
+ if (onNewOptionClick) {
+ onNewOptionClick(option);
+ } else {
+ options.unshift(option);
+
+ this.select.selectValue(option);
+ }
+ }
+ }
+ }
+ }, {
+ key: 'filterOptions',
+ value: function filterOptions$$1() {
+ var _props2 = this.props,
+ filterOptions$$1 = _props2.filterOptions,
+ isValidNewOption = _props2.isValidNewOption,
+ options = _props2.options,
+ promptTextCreator = _props2.promptTextCreator;
+
+ // TRICKY Check currently selected options as well.
+ // Don't display a create-prompt for a value that's selected.
+ // This covers async edge-cases where a newly-created Option isn't yet in the async-loaded array.
+
+ var excludeOptions = (arguments.length <= 2 ? undefined : arguments[2]) || [];
+
+ var filteredOptions = filterOptions$$1.apply(undefined, arguments) || [];
+
+ if (isValidNewOption({ label: this.inputValue })) {
+ var _newOptionCreator = this.props.newOptionCreator;
+
+
+ var option = _newOptionCreator({
+ label: this.inputValue,
+ labelKey: this.labelKey,
+ valueKey: this.valueKey
+ });
+
+ // TRICKY Compare to all options (not just filtered options) in case option has already been selected).
+ // For multi-selects, this would remove it from the filtered list.
+ var _isOptionUnique2 = this.isOptionUnique({
+ option: option,
+ options: excludeOptions.concat(filteredOptions)
+ });
+
+ if (_isOptionUnique2) {
+ var prompt = promptTextCreator(this.inputValue);
+
+ this._createPlaceholderOption = _newOptionCreator({
+ label: prompt,
+ labelKey: this.labelKey,
+ valueKey: this.valueKey
+ });
+
+ filteredOptions.unshift(this._createPlaceholderOption);
+ }
+ }
+
+ return filteredOptions;
+ }
+ }, {
+ key: 'isOptionUnique',
+ value: function isOptionUnique(_ref) {
+ var option = _ref.option,
+ options = _ref.options;
+ var isOptionUnique = this.props.isOptionUnique;
+
+
+ options = options || this.select.filterFlatOptions();
+
+ return isOptionUnique({
+ labelKey: this.labelKey,
+ option: option,
+ options: options,
+ valueKey: this.valueKey
+ });
+ }
+ }, {
+ key: 'menuRenderer',
+ value: function menuRenderer$$1(params) {
+ var menuRenderer$$1 = this.props.menuRenderer;
+
+
+ return menuRenderer$$1(_extends({}, params, {
+ onSelect: this.onOptionSelect,
+ selectValue: this.onOptionSelect
+ }));
+ }
+ }, {
+ key: 'onInputChange',
+ value: function onInputChange(input) {
+ var onInputChange = this.props.onInputChange;
+
+
+ if (onInputChange) {
+ onInputChange(input);
+ }
+
+ // This value may be needed in between Select mounts (when this.select is null)
+ this.inputValue = input;
+ }
+ }, {
+ key: 'onInputKeyDown',
+ value: function onInputKeyDown(event) {
+ var _props3 = this.props,
+ shouldKeyDownEventCreateNewOption = _props3.shouldKeyDownEventCreateNewOption,
+ onInputKeyDown = _props3.onInputKeyDown;
+
+ var focusedOption = this.select.getFocusedOption();
+
+ if (focusedOption && focusedOption === this._createPlaceholderOption && shouldKeyDownEventCreateNewOption({ keyCode: event.keyCode })) {
+ this.createNewOption();
+
+ // Prevent decorated Select from doing anything additional with this keyDown event
+ event.preventDefault();
+ } else if (onInputKeyDown) {
+ onInputKeyDown(event);
+ }
+ }
+ }, {
+ key: 'onOptionSelect',
+ value: function onOptionSelect(option, event) {
+ if (option === this._createPlaceholderOption) {
+ this.createNewOption();
+ } else {
+ this.select.selectValue(option);
+ }
+ }
+ }, {
+ key: 'focus',
+ value: function focus() {
+ this.select.focus();
+ }
+ }, {
+ key: 'render',
+ value: function render() {
+ var _this2 = this;
+
+ var _props4 = this.props,
+ newOptionCreator = _props4.newOptionCreator,
+ shouldKeyDownEventCreateNewOption = _props4.shouldKeyDownEventCreateNewOption,
+ restProps = objectWithoutProperties(_props4, ['newOptionCreator', 'shouldKeyDownEventCreateNewOption']);
+ var children = this.props.children;
+
+ // We can't use destructuring default values to set the children,
+ // because it won't apply work if `children` is null. A falsy check is
+ // more reliable in real world use-cases.
+
+ if (!children) {
+ children = defaultChildren$1;
+ }
+
+ var props = _extends({}, restProps, {
+ allowCreate: true,
+ filterOptions: this.filterOptions,
+ menuRenderer: this.menuRenderer,
+ onInputChange: this.onInputChange,
+ onInputKeyDown: this.onInputKeyDown,
+ ref: function ref(_ref2) {
+ _this2.select = _ref2;
+
+ // These values may be needed in between Select mounts (when this.select is null)
+ if (_ref2) {
+ _this2.labelKey = _ref2.props.labelKey;
+ _this2.valueKey = _ref2.props.valueKey;
+ }
+ }
+ });
+
+ return children(props);
+ }
+ }]);
+ return CreatableSelect;
+}(React__default.Component);
+
+
+
+function defaultChildren$1(props) {
+ return React__default.createElement(Select$1, props);
+}
+
+function isOptionUnique(_ref3) {
+ var option = _ref3.option,
+ options = _ref3.options,
+ labelKey = _ref3.labelKey,
+ valueKey = _ref3.valueKey;
+
+ return options.filter(function (existingOption) {
+ return existingOption[labelKey] === option[labelKey] || existingOption[valueKey] === option[valueKey];
+ }).length === 0;
+}
+
+function isValidNewOption(_ref4) {
+ var label = _ref4.label;
+
+ return !!label;
+}
+
+function newOptionCreator(_ref5) {
+ var label = _ref5.label,
+ labelKey = _ref5.labelKey,
+ valueKey = _ref5.valueKey;
+
+ var option = {};
+ option[valueKey] = label;
+ option[labelKey] = label;
+ option.className = 'Select-create-option-placeholder';
+ return option;
+}
+
+function promptTextCreator(label) {
+ return 'Create option "' + label + '"';
+}
+
+function shouldKeyDownEventCreateNewOption(_ref6) {
+ var keyCode = _ref6.keyCode;
+
+ switch (keyCode) {
+ case 9: // TAB
+ case 13: // ENTER
+ case 188:
+ // COMMA
+ return true;
+ }
+
+ return false;
+}
+
+// Default prop methods
+CreatableSelect.isOptionUnique = isOptionUnique;
+CreatableSelect.isValidNewOption = isValidNewOption;
+CreatableSelect.newOptionCreator = newOptionCreator;
+CreatableSelect.promptTextCreator = promptTextCreator;
+CreatableSelect.shouldKeyDownEventCreateNewOption = shouldKeyDownEventCreateNewOption;
+
+CreatableSelect.defaultProps = {
+ filterOptions: filterOptions,
+ isOptionUnique: isOptionUnique,
+ isValidNewOption: isValidNewOption,
+ menuRenderer: menuRenderer,
+ newOptionCreator: newOptionCreator,
+ promptTextCreator: promptTextCreator,
+ shouldKeyDownEventCreateNewOption: shouldKeyDownEventCreateNewOption
+};
+
+CreatableSelect.propTypes = {
+ // Child function responsible for creating the inner Select component
+ // This component can be used to compose HOCs (eg Creatable and Async)
+ // (props: Object): PropTypes.element
+ children: PropTypes.func,
+
+ // See Select.propTypes.filterOptions
+ filterOptions: PropTypes.any,
+
+ // Searches for any matching option within the set of options.
+ // This function prevents duplicate options from being created.
+ // ({ option: Object, options: Array, labelKey: string, valueKey: string }): boolean
+ isOptionUnique: PropTypes.func,
+
+ // Determines if the current input text represents a valid option.
+ // ({ label: string }): boolean
+ isValidNewOption: PropTypes.func,
+
+ // See Select.propTypes.menuRenderer
+ menuRenderer: PropTypes.any,
+
+ // Factory to create new option.
+ // ({ label: string, labelKey: string, valueKey: string }): Object
+ newOptionCreator: PropTypes.func,
+
+ // input change handler: function (inputValue) {}
+ onInputChange: PropTypes.func,
+
+ // input keyDown handler: function (event) {}
+ onInputKeyDown: PropTypes.func,
+
+ // new option click handler: function (option) {}
+ onNewOptionClick: PropTypes.func,
+
+ // See Select.propTypes.options
+ options: PropTypes.array,
+
+ // Creates prompt/placeholder option text.
+ // (filterText: string): string
+ promptTextCreator: PropTypes.func,
+
+ // Decides if a keyDown event (eg its `keyCode`) should result in the creation of a new option.
+ shouldKeyDownEventCreateNewOption: PropTypes.func
+};
+
+function reduce(obj) {
+ var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ return Object.keys(obj).reduce(function (props, key) {
+ var value = obj[key];
+ if (value !== undefined) props[key] = value;
+ return props;
+ }, props);
+}
+
+var AsyncCreatableSelect = function (_React$Component) {
+ inherits(AsyncCreatableSelect, _React$Component);
+
+ function AsyncCreatableSelect() {
+ classCallCheck(this, AsyncCreatableSelect);
+ return possibleConstructorReturn(this, (AsyncCreatableSelect.__proto__ || Object.getPrototypeOf(AsyncCreatableSelect)).apply(this, arguments));
+ }
+
+ createClass(AsyncCreatableSelect, [{
+ key: 'focus',
+ value: function focus() {
+ this.select.focus();
+ }
+ }, {
+ key: 'render',
+ value: function render() {
+ var _this2 = this;
+
+ return React__default.createElement(
+ Async,
+ this.props,
+ function (asyncProps) {
+ return React__default.createElement(
+ CreatableSelect,
+ _this2.props,
+ function (creatableProps) {
+ return React__default.createElement(Select$1, _extends({}, reduce(asyncProps, reduce(creatableProps, {})), {
+ onInputChange: function onInputChange(input) {
+ creatableProps.onInputChange(input);
+ return asyncProps.onInputChange(input);
+ },
+ ref: function ref(_ref) {
+ _this2.select = _ref;
+ creatableProps.ref(_ref);
+ asyncProps.ref(_ref);
+ }
+ }));
+ }
+ );
+ }
+ );
+ }
+ }]);
+ return AsyncCreatableSelect;
+}(React__default.Component);
+
+// This file exists as an entry point for bundling our umd builds.
+// Both in rollup and in webpack, umd builds built from es6 modules are not
+// compatible with mixed imports (which exist in index.js)
+// This file does away with named imports in favor of a single export default.
+
+Select$1.Async = Async;
+Select$1.AsyncCreatable = AsyncCreatableSelect;
+Select$1.Creatable = CreatableSelect;
+Select$1.Value = Value;
+
+return Select$1;
+
+})));
diff --git a/dist/react-select.min.js b/dist/react-select.min.js
new file mode 100644
index 00000000..6de6938c
--- /dev/null
+++ b/dist/react-select.min.js
@@ -0,0 +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,n,u,o){"use strict";function s(e){var t=e.onMouseDown;return y.createElement("span",{className:"Select-arrow",onMouseDown:t})}function i(e){for(var t=0;t-1)return!1;if(u.filterOption)return u.filterOption.call(o,e,t);if(!t)return!0;var s=String(e[u.valueKey]),a=String(e[u.labelKey]);return u.ignoreAccents&&("label"!==u.matchProp&&(s=i(s)),"value"!==u.matchProp&&(a=i(a))),u.ignoreCase&&("label"!==u.matchProp&&(s=s.toLowerCase()),"value"!==u.matchProp&&(a=a.toLowerCase())),"start"===u.matchPos?"label"!==u.matchProp&&s.substr(0,t.length)===t||"value"!==u.matchProp&&a.substr(0,t.length)===t:"label"!==u.matchProp&&s.indexOf(t)>=0||"value"!==u.matchProp&&a.indexOf(t)>=0})}function r(e){return e&&Array.isArray(e.options)}function l(e){var t=e.focusedOption,n=e.instancePrefix,u=(e.labelKey,e.onFocus),s=e.onOptionRef,i=e.onSelect,a=e.optionClassName,l=e.optionComponent,p=e.optionGroupComponent,c=e.optionRenderer,h=e.options,d=e.valueArray,f=e.valueKey,v=p,E=l,b=c||this.getOptionLabel;return function e(l){return l.map(function(l,p){if(r(l)){var c=o({"Select-option-group":!0});return y.createElement(v,{className:c,key:"option-group-"+p,label:b(l),option:l,optionIndex:p},e(l.options))}var h=d&&d.indexOf(l)>-1,g=l===t,m=o(a,{"Select-option":!0,"is-selected":h,"is-focused":g,"is-disabled":l.disabled});return y.createElement(E,{className:m,instancePrefix:n,isDisabled:l.disabled,isFocused:g,isSelected:h,key:"option-"+p+"-"+l[f],onFocus:u,onSelect:i,option:l,optionIndex:p,ref:function(e){s(e,g)}},b(l,p))})}(h)}function p(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}function c(e){return e&&Array.isArray(e.options)}function h(e){return y.createElement(R,e)}function d(e){var t=e.option,n=e.options,u=e.labelKey,o=e.valueKey;return 0===n.filter(function(e){return e[u]===t[u]||e[o]===t[o]}).length}function f(e){return!!e.label}function v(e){var t=e.label,n=e.labelKey,u={};return u[e.valueKey]=t,u[n]=t,u.className="Select-create-option-placeholder",u}function E(e){return'Create option "'+e+'"'}function b(e){switch(e.keyCode){case 9:case 13:case 188:return!0}return!1}function g(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(e).reduce(function(t,n){var u=e[n];return void 0!==u&&(t[n]=u),t},t)}var y="default"in e?e.default:e;t=t&&t.hasOwnProperty("default")?t.default:t,n=n&&n.hasOwnProperty("default")?n.default:n,u=u&&u.hasOwnProperty("default")?u.default:u,o=o&&o.hasOwnProperty("default")?o.default:o,s.propTypes={onMouseDown:t.func};var m=[{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}],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},O=(function(){function e(e){this.value=e}function t(t){function n(o,s){try{var i=t[o](s),a=i.value;a instanceof e?Promise.resolve(a.value).then(function(e){n("next",e)},function(e){n("throw",e)}):u(i.done?"return":"normal",i.value)}catch(e){u("throw",e)}}function u(e,t){switch(e){case"return":o.resolve({value:t,done:!0});break;case"throw":o.reject(t);break;default:o.resolve({value:t,done:!1})}(o=o.next)?n(o.key,o.arg):s=null}var o,s;this._invoke=function(e,t){return new Promise(function(u,i){var a={key:e,arg:t,resolve:u,reject:i,next:null};s?s=s.next=a:(o=s=a,n(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 n=0;n=0||Object.prototype.hasOwnProperty.call(e,u)&&(n[u]=e[u]);return n},T=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},S=function(e){function t(){return O(this,t),T(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return k(t,e),F(t,[{key:"render",value:function(){return this.props.children}}]),t}(y.Component);S.propTypes={children:t.node};var V=function(e){function t(e){O(this,t);var n=T(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.handleMouseDown=n.handleMouseDown.bind(n),n.handleMouseEnter=n.handleMouseEnter.bind(n),n.handleMouseMove=n.handleMouseMove.bind(n),n.handleTouchStart=n.handleTouchStart.bind(n),n.handleTouchEnd=n.handleTouchEnd.bind(n),n.handleTouchMove=n.handleTouchMove.bind(n),n.onFocus=n.onFocus.bind(n),n}return k(t,e),F(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,n=e.instancePrefix,u=e.optionIndex,s=o(this.props.className,t.className);return t.disabled?y.createElement("div",{className:s,onMouseDown:this.blockEvent,onClick:this.blockEvent},this.props.children):y.createElement("div",{className:s,style:t.style,role:"option",onMouseDown:this.handleMouseDown,onMouseEnter:this.handleMouseEnter,onMouseMove:this.handleMouseMove,onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove,onTouchEnd:this.handleTouchEnd,id:n+"-option-"+u,title:t.title},this.props.children)}}]),t}(y.Component);V.propTypes={children:t.node,className:t.string,instancePrefix:t.string.isRequired,isDisabled:t.bool,isFocused:t.bool,isSelected:t.bool,onFocus:t.func,onSelect:t.func,onUnfocus:t.func,option:t.object.isRequired,optionIndex:t.number};var P=function(e){function t(){return O(this,t),T(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return k(t,e),F(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()}},{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:"render",value:function(){var e=this.props.option,t=o(this.props.className,e.className);return e.disabled?y.createElement("div",{className:t,onMouseDown:this.blockEvent,onClick:this.blockEvent},this.props.children):y.createElement("div",{className:t,style:e.style,onMouseDown:this.handleMouseDown,onMouseEnter:this.handleMouseEnter,onMouseMove:this.handleMouseMove,onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove,onTouchEnd:this.handleTouchEnd,title:e.title},y.createElement("div",{className:"Select-option-group-label"},this.props.label),this.props.children)}}]),t}(y.Component);P.propTypes={children:t.any,className:t.string,label:t.node,option:t.object.isRequired};var M=function(e){function t(e){O(this,t);var n=T(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.handleMouseDown=n.handleMouseDown.bind(n),n.onRemove=n.onRemove.bind(n),n.handleTouchEndRemove=n.handleTouchEndRemove.bind(n),n.handleTouchMove=n.handleTouchMove.bind(n),n.handleTouchStart=n.handleTouchStart.bind(n),n}return k(t,e),F(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 y.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?y.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):y.createElement("span",{className:"Select-value-label",role:"option","aria-selected":"true",id:this.props.id},this.props.children)}},{key:"render",value:function(){return y.createElement("div",{className:o("Select-value",this.props.value.className),style:this.props.value.style,title:this.props.value.title},this.renderRemoveIcon(),this.renderLabel())}}]),t}(y.Component);M.propTypes={children:t.node,disabled:t.bool,id:t.string,onClick:t.func,onRemove:t.func,value:t.object.isRequired};var B=function(e){return"string"==typeof e?e:null!==e&&JSON.stringify(e)||""},I=t.oneOfType([t.string,t.node]),_=1,R=function(e){function t(e){O(this,t);var n=T(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 n[e]=n[e].bind(n)}),n.state={inputValue:"",isFocused:!1,isOpen:!1,isPseudoFocused:!1,required:!1},n}return k(t,e),F(t,[{key:"componentWillMount",value:function(){this._flatOptions=this.flattenOptions(this.props.options),this._instancePrefix="react-select-"+(this.props.instanceId||++_)+"-";var e=this.getValueArray(this.props.value);this.props.required&&this.setState({required:this.handleRequired(e[0],this.props.multi)})}},{key:"componentDidMount",value:function(){this.props.autofocus&&this.focus()}},{key:"componentWillReceiveProps",value:function(e){e.options!==this.props.options&&(this._flatOptions=this.flattenOptions(e.options));var t=this.getValueArray(e.value,e);!e.isOpen&&this.props.isOpen&&this.closeMenu(),e.required?this.setState({required:this.handleRequired(t[0],e.multi)}):this.props.required&&this.setState({required:!1})}},{key:"componentWillUpdate",value:function(e,t){if(t.isOpen!==this.state.isOpen){this.toggleTouchOutsideEvent(t.isOpen);var n=t.isOpen?e.onOpen:e.onClose;n&&n()}}},{key:"componentDidUpdate",value:function(e,t){if(this.menu&&this.focused&&this.state.isOpen&&!this.hasScrolledToOption){var u=n.findDOMNode(this.focused),o=u.previousSibling,s=u.parentElement,i=n.findDOMNode(this.menu);i.scrollTop=o?o.offsetTop:s&&"Select-menu"===s?s.offsetTop:u.offsetTop,this.hasScrolledToOption=!0}else this.state.isOpen||(this.hasScrolledToOption=!1);if(this._scrollToFocusedOptionOnUpdate&&this.focused&&this.menu){this._scrollToFocusedOptionOnUpdate=!1;var a=n.findDOMNode(this.focused),r=n.findDOMNode(this.menu),l=a.getBoundingClientRect(),p=r.getBoundingClientRect();l.bottom>p.bottom?r.scrollTop=a.offsetTop+a.clientHeight-r.offsetHeight:l.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 n=this,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 n.expandValue(e,u)}).filter(function(e){return e})}var o=this.expandValue(e,u);return o?[o]:[]}},{key:"expandValue",value:function(e,t){var n=void 0===e?"undefined":C(e);if("string"!==n&&"number"!==n&&"boolean"!==n)return e;var u=this.props,o=u.labelKey,s=u.valueKey,i=u.renderInvalidValues,a=this._flatOptions;if(a&&""!==e){for(var r=0;ru&&this.focusOption(n[u+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.getValueArray(this.props.value);this.setValue(t.filter(function(t){return t!==e})),this.focus()}},{key:"clearValue",value:function(e){e&&"mousedown"===e.type&&0!==e.button||(e.stopPropagation(),e.preventDefault(),this.setValue(this.getResetValue()),this.setState({isOpen:!1,inputValue:this.handleInputValueChange("")},this.focus))}},{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 n=-1,u=0;u0?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)n=(o=n-this.props.pageSize)<0?0:o;else if("page_down"===e){var o=n+this.props.pageSize;n=o>t.length-1?t.length-1:o}-1===n&&(n=0),this.setState({focusedIndex:t[n].index,focusedOption:t[n].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:"getInputValue",value:function(){return this.state.inputValue}},{key:"selectFocusedOption",value:function(){if(this._focusedOption)return this.selectValue(this._focusedOption)}},{key:"renderLoading",value:function(){if(this.props.isLoading)return y.createElement("span",{className:"Select-loading-zone","aria-hidden":"true"},y.createElement("span",{className:"Select-loading"}))}},{key:"renderValue",value:function(e,t){var n=this,u=this.props.valueRenderer||this.getOptionLabel,o=this.props.valueComponent;if(!e.length)return this.state.inputValue?null:y.createElement("div",{className:"Select-placeholder"},this.props.placeholder);var s=this.props.onValueClick?this.handleValueClick:null;return this.props.multi?e.map(function(e,t){return y.createElement(o,{id:n._instancePrefix+"-value-"+t,instancePrefix:n._instancePrefix,disabled:n.props.disabled||!1===e.clearableValue,key:"value-"+t+"-"+e[n.props.valueKey],onClick:s,onRemove:n.removeValue,value:e},u(e,t),y.createElement("span",{className:"Select-aria-only"}," "))}):this.state.inputValue?void 0:(t&&(s=null),y.createElement(o,{id:this._instancePrefix+"-value-item",disabled:this.props.disabled,instancePrefix:this._instancePrefix,onClick:s,value:e[0]},u(e[0])))}},{key:"renderInput",value:function(e,t){var n,s=this,i=o("Select-input",this.props.inputProps.className),a=!!this.state.isOpen,r=o((n={},A(n,this._instancePrefix+"-list",a),A(n,this._instancePrefix+"-backspace-remove-message",this.props.multi&&!this.props.disabled&&this.state.isFocused&&!this.state.inputValue),n)),l=D({},this.props.inputProps,{role:"combobox","aria-expanded":""+a,"aria-owns":r,"aria-haspopup":""+a,"aria-activedescendant":a?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:i,tabIndex:this.props.tabIndex,onBlur:this.handleInputBlur,onChange:this.handleInputChange,onFocus:this.handleInputFocus,ref:function(e){return s.input=e},required:this.state.required,value:this.state.inputValue});if(this.props.inputRenderer)return this.props.inputRenderer(l);if(this.props.disabled||!this.props.searchable){var p=this.props.inputProps,c=(p.inputClassName,w(p,["inputClassName"])),h=o(A({},this._instancePrefix+"-list",a));return y.createElement("div",D({},c,{role:"combobox","aria-expanded":a,"aria-owns":h,"aria-activedescendant":a?this._instancePrefix+"-option-"+t:this._instancePrefix+"-value",className:i,tabIndex:this.props.tabIndex||0,onBlur:this.handleInputBlur,onFocus:this.handleInputFocus,ref:function(e){return s.input=e},"aria-readonly":""+!!this.props.disabled,style:{border:0,width:1,display:"inline-block"}}))}return this.props.autosize?y.createElement(u,D({},l,{minWidth:"5"})):y.createElement("div",{className:i},y.createElement("input",l))}},{key:"renderClear",value:function(){if(!(!this.props.clearable||void 0===this.props.value||null===this.props.value||this.props.multi&&!this.props.value.length||this.props.disabled||this.props.isLoading)){var e=this.props.clearRenderer();return y.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},e)}}},{key:"renderArrow",value:function(){var e=this.handleMouseDownOnArrow,t=this.state.isOpen,n=this.props.arrowRenderer({onMouseDown:e,isOpen:t});return y.createElement("span",{className:"Select-arrow-zone",onMouseDown:e},n)}},{key:"filterFlatOptions",value:function(e){var t=this.state.inputValue,n=this._flatOptions;return this.props.filterOptions?("function"==typeof this.props.filterOptions?this.props.filterOptions:a)(n,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}):n}},{key:"flattenOptions",value:function(e,t){if(!e)return[];for(var n=[],u=0;u .Select-control {
+ background-color: #f9f9f9;
+}
+.Select.is-disabled > .Select-control:hover {
+ box-shadow: none;
+}
+.Select.is-disabled .Select-arrow-zone {
+ cursor: default;
+ pointer-events: none;
+ opacity: 0.35;
+}
+.Select-control {
+ background-color: #fff;
+ border-color: #d9d9d9 #ccc #b3b3b3;
+ border-radius: 4px;
+ border: 1px solid #ccc;
+ color: #333;
+ cursor: default;
+ display: table;
+ border-spacing: 0;
+ border-collapse: separate;
+ height: 36px;
+ outline: none;
+ overflow: hidden;
+ position: relative;
+ width: 100%;
+}
+.Select-control:hover {
+ box-shadow: 0 1px 0 rgba(0, 0, 0, 0.06);
+}
+.Select-control .Select-input:focus {
+ outline: none;
+}
+.is-searchable.is-open > .Select-control {
+ cursor: text;
+}
+.is-open > .Select-control {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+ background: #fff;
+ border-color: #b3b3b3 #ccc #d9d9d9;
+}
+.is-open > .Select-control .Select-arrow {
+ top: -2px;
+ border-color: transparent transparent #999;
+ border-width: 0 5px 5px;
+}
+.is-searchable.is-focused:not(.is-open) > .Select-control {
+ cursor: text;
+}
+.is-focused:not(.is-open) > .Select-control {
+ border-color: #007eff;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 0 3px rgba(0, 126, 255, 0.1);
+}
+.Select-placeholder,
+.Select--single > .Select-control .Select-value {
+ bottom: 0;
+ color: #aaa;
+ left: 0;
+ line-height: 34px;
+ padding-left: 10px;
+ padding-right: 10px;
+ position: absolute;
+ right: 0;
+ top: 0;
+ max-width: 100%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+.has-value.Select--single > .Select-control .Select-value .Select-value-label,
+.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value .Select-value-label {
+ color: #333;
+}
+.has-value.Select--single > .Select-control .Select-value a.Select-value-label,
+.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value a.Select-value-label {
+ cursor: pointer;
+ text-decoration: none;
+}
+.has-value.Select--single > .Select-control .Select-value a.Select-value-label:hover,
+.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value a.Select-value-label:hover,
+.has-value.Select--single > .Select-control .Select-value a.Select-value-label:focus,
+.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value a.Select-value-label:focus {
+ color: #007eff;
+ outline: none;
+ text-decoration: underline;
+}
+.Select-input {
+ height: 34px;
+ padding-left: 10px;
+ padding-right: 10px;
+ vertical-align: middle;
+}
+.Select-input > input {
+ width: 100%;
+ background: none transparent;
+ border: 0 none;
+ box-shadow: none;
+ cursor: default;
+ display: inline-block;
+ font-family: inherit;
+ font-size: inherit;
+ margin: 0;
+ outline: none;
+ line-height: 14px;
+ /* For IE 8 compatibility */
+ padding: 8px 0 12px;
+ /* For IE 8 compatibility */
+ -webkit-appearance: none;
+}
+.is-focused .Select-input > input {
+ cursor: text;
+}
+.has-value.is-pseudo-focused .Select-input {
+ opacity: 0;
+}
+.Select-control:not(.is-searchable) > .Select-input {
+ outline: none;
+}
+.Select-loading-zone {
+ cursor: pointer;
+ display: table-cell;
+ position: relative;
+ text-align: center;
+ vertical-align: middle;
+ width: 16px;
+}
+.Select-loading {
+ -webkit-animation: Select-animation-spin 400ms infinite linear;
+ -o-animation: Select-animation-spin 400ms infinite linear;
+ animation: Select-animation-spin 400ms infinite linear;
+ width: 16px;
+ height: 16px;
+ box-sizing: border-box;
+ border-radius: 50%;
+ border: 2px solid #ccc;
+ border-right-color: #333;
+ display: inline-block;
+ position: relative;
+ vertical-align: middle;
+}
+.Select-clear-zone {
+ -webkit-animation: Select-animation-fadeIn 200ms;
+ -o-animation: Select-animation-fadeIn 200ms;
+ animation: Select-animation-fadeIn 200ms;
+ color: #999;
+ cursor: pointer;
+ display: table-cell;
+ position: relative;
+ text-align: center;
+ vertical-align: middle;
+ width: 17px;
+}
+.Select-clear-zone:hover {
+ color: #D0021B;
+}
+.Select-clear {
+ display: inline-block;
+ font-size: 18px;
+ line-height: 1;
+}
+.Select--multi .Select-clear-zone {
+ width: 17px;
+}
+.Select-arrow-zone {
+ cursor: pointer;
+ display: table-cell;
+ position: relative;
+ text-align: center;
+ vertical-align: middle;
+ width: 25px;
+ padding-right: 5px;
+}
+.Select-arrow {
+ border-color: #999 transparent transparent;
+ border-style: solid;
+ border-width: 5px 5px 2.5px;
+ display: inline-block;
+ height: 0;
+ width: 0;
+ position: relative;
+}
+.is-open .Select-arrow,
+.Select-arrow-zone:hover > .Select-arrow {
+ border-top-color: #666;
+}
+.Select--multi .Select-multi-value-wrapper {
+ display: inline-block;
+}
+.Select .Select-aria-only {
+ display: inline-block;
+ height: 1px;
+ width: 1px;
+ margin: -1px;
+ clip: rect(0, 0, 0, 0);
+ overflow: hidden;
+ float: left;
+}
+@-webkit-keyframes Select-animation-fadeIn {
+ from {
+ opacity: 0;
+ }
+ to {
+ opacity: 1;
+ }
+}
+@keyframes Select-animation-fadeIn {
+ from {
+ opacity: 0;
+ }
+ to {
+ opacity: 1;
+ }
+}
+.Select-menu-outer {
+ border-bottom-right-radius: 4px;
+ border-bottom-left-radius: 4px;
+ background-color: #fff;
+ border: 1px solid #ccc;
+ border-top-color: #e6e6e6;
+ box-shadow: 0 1px 0 rgba(0, 0, 0, 0.06);
+ box-sizing: border-box;
+ margin-top: -1px;
+ max-height: 200px;
+ position: absolute;
+ top: 100%;
+ width: 100%;
+ z-index: 1;
+ -webkit-overflow-scrolling: touch;
+}
+.Select-menu {
+ max-height: 198px;
+ overflow-y: auto;
+}
+.Select-option {
+ box-sizing: border-box;
+ background-color: #fff;
+ color: #666666;
+ cursor: pointer;
+ display: block;
+ padding: 8px 10px;
+}
+.Select-option:last-child {
+ border-bottom-right-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+.Select-option.is-selected {
+ background-color: #f5faff;
+ /* Fallback color for IE 8 */
+ background-color: rgba(0, 126, 255, 0.04);
+ color: #333;
+}
+.Select-option.is-focused {
+ background-color: #ebf5ff;
+ /* Fallback color for IE 8 */
+ background-color: rgba(0, 126, 255, 0.08);
+ color: #333;
+}
+.Select-option.is-disabled {
+ color: #cccccc;
+ cursor: default;
+}
+.Select-noresults {
+ box-sizing: border-box;
+ color: #999999;
+ cursor: default;
+ display: block;
+ padding: 8px 10px;
+}
+.Select--multi .Select-input {
+ vertical-align: middle;
+ margin-left: 10px;
+ padding: 0;
+}
+.Select--multi.has-value .Select-input {
+ margin-left: 5px;
+}
+.Select--multi .Select-value {
+ background-color: #ebf5ff;
+ /* Fallback color for IE 8 */
+ background-color: rgba(0, 126, 255, 0.08);
+ border-radius: 2px;
+ border: 1px solid #c2e0ff;
+ /* Fallback color for IE 8 */
+ border: 1px solid rgba(0, 126, 255, 0.24);
+ color: #007eff;
+ display: inline-block;
+ font-size: 0.9em;
+ line-height: 1.4;
+ margin-left: 5px;
+ margin-top: 5px;
+ vertical-align: top;
+}
+.Select--multi .Select-value-icon,
+.Select--multi .Select-value-label {
+ display: inline-block;
+ vertical-align: middle;
+}
+.Select--multi .Select-value-label {
+ border-bottom-right-radius: 2px;
+ border-top-right-radius: 2px;
+ cursor: default;
+ padding: 2px 5px;
+}
+.Select--multi a.Select-value-label {
+ color: #007eff;
+ cursor: pointer;
+ text-decoration: none;
+}
+.Select--multi a.Select-value-label:hover {
+ text-decoration: underline;
+}
+.Select--multi .Select-value-icon {
+ cursor: pointer;
+ border-bottom-left-radius: 2px;
+ border-top-left-radius: 2px;
+ border-right: 1px solid #c2e0ff;
+ /* Fallback color for IE 8 */
+ border-right: 1px solid rgba(0, 126, 255, 0.24);
+ padding: 1px 5px 3px;
+}
+.Select--multi .Select-value-icon:hover,
+.Select--multi .Select-value-icon:focus {
+ background-color: #d8eafd;
+ /* Fallback color for IE 8 */
+ background-color: rgba(0, 113, 230, 0.08);
+ color: #0071e6;
+}
+.Select--multi .Select-value-icon:active {
+ background-color: #c2e0ff;
+ /* Fallback color for IE 8 */
+ background-color: rgba(0, 126, 255, 0.24);
+}
+.Select--multi.is-disabled .Select-value {
+ background-color: #fcfcfc;
+ border: 1px solid #e3e3e3;
+ color: #333;
+}
+.Select--multi.is-disabled .Select-value-icon {
+ cursor: not-allowed;
+ border-right: 1px solid #e3e3e3;
+}
+.Select--multi.is-disabled .Select-value-icon:hover,
+.Select--multi.is-disabled .Select-value-icon:focus,
+.Select--multi.is-disabled .Select-value-icon:active {
+ background-color: #fcfcfc;
+}
+@keyframes Select-animation-spin {
+ to {
+ transform: rotate(1turn);
+ }
+}
+@-webkit-keyframes Select-animation-spin {
+ to {
+ -webkit-transform: rotate(1turn);
+ }
+}
+body {
+ color: #333;
+ font-family: Helvetica Neue, Helvetica, Arial, sans-serif;
+ font-size: 14px;
+ line-height: 1.4;
+ margin: 0;
+ padding: 0;
+}
+a {
+ color: #007eff;
+ text-decoration: none;
+}
+a:hover {
+ text-decoration: underline;
+}
+.container {
+ margin-left: auto;
+ margin-right: auto;
+ max-width: 400px;
+ padding: 0 30px;
+}
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+.h1,
+.h2,
+.h3,
+.h4,
+.h5,
+.h6 {
+ color: black;
+ font-weight: 500;
+ line-height: 1;
+ margin-bottom: .66em;
+ margin-top: 0;
+}
+h1,
+.h1 {
+ font-size: 3em;
+}
+h2,
+.h2 {
+ font-size: 2em;
+ font-weight: 300;
+}
+h3,
+.h3 {
+ font-size: 1.25em;
+}
+h4,
+.h4 {
+ font-size: 1em;
+}
+h5,
+.h5 {
+ font-size: .85em;
+}
+h6,
+.h6 {
+ font-size: .75em;
+}
+.page-body,
+.page-footer,
+.page-header {
+ padding: 30px 0;
+}
+.page-header {
+ background-color: #007eff;
+ color: #bfdfff;
+}
+.page-header h1,
+.page-header h2,
+.page-header h3 {
+ color: white;
+}
+.page-header p {
+ font-size: 1.2em;
+ margin: 0;
+}
+.page-header a {
+ border-bottom: 1px solid rgba(255, 255, 255, 0.3);
+ color: white;
+ text-decoration: none;
+}
+.page-header a:hover,
+.page-header a:focus {
+ border-bottom-color: white;
+ outline: none;
+ text-decoration: none;
+}
+.page-subheader {
+ background-color: #e6f2ff;
+ line-height: 20px;
+ padding: 30px 0;
+}
+.page-subheader__button {
+ float: right;
+}
+.page-subheader__link {
+ border-bottom: 1px solid rgba(0, 126, 255, 0.3);
+ outline: none;
+ text-decoration: none;
+}
+.page-subheader__link:hover,
+.page-subheader__link:focus {
+ border-bottom-color: #007eff;
+ outline: none;
+ text-decoration: none;
+}
+.page-footer {
+ background-color: #fafafa;
+ color: #999;
+ padding: 30px 0;
+ text-align: center;
+}
+.page-footer a {
+ color: black;
+}
+@media (min-width: 480px) {
+ .page-body,
+ .page-header {
+ padding: 60px 0;
+ }
+ .page-header {
+ font-size: 1.4em;
+ }
+ .page-subheader {
+ font-size: 1.125em;
+ line-height: 28px;
+ }
+}
+.checkbox-list {
+ margin-top: .5em;
+ overflow: hidden;
+}
+.checkbox-list > .checkbox {
+ clear: left;
+ float: left;
+ margin-top: .5em;
+}
+.checkbox-control {
+ margin-right: .5em;
+ position: relative;
+ top: -1px;
+}
+.switcher {
+ color: #999;
+ cursor: default;
+ font-size: 12px;
+ margin: 10px 0;
+ text-transform: uppercase;
+}
+.switcher .link {
+ color: #007eff;
+ cursor: pointer;
+ font-weight: bold;
+ margin-left: 10px;
+}
+.switcher .link:hover {
+ text-decoration: underline;
+}
+.switcher .active {
+ color: #666;
+ font-weight: bold;
+ margin-left: 10px;
+}
+.section {
+ margin-bottom: 40px;
+}
+.hint {
+ font-size: .85em;
+ margin: 15px 0;
+ color: #666;
+}
+.virtual-scroll {
+ z-index: 1;
+}
diff --git a/examples/dist/standalone.html b/examples/dist/standalone.html
index fccd81cc..36f09a11 100644
--- a/examples/dist/standalone.html
+++ b/examples/dist/standalone.html
@@ -10,15 +10,15 @@ Standalone bulid
For usage without babel / browserify / webpack
-
+
-
+
-
React Select
-
Standalone bulid
-
For usage without babel / browserify / webpack
+
Standalone (UMD) Bulid
+
For usage without browserify / rollup / webpack
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/gulpfile.js b/gulpfile.js
deleted file mode 100644
index 2fc2bed5..00000000
--- a/gulpfile.js
+++ /dev/null
@@ -1,41 +0,0 @@
-var gulp = require('gulp');
-var initGulpTasks = require('react-component-gulp-tasks');
-
-var taskConfig = {
-
- component: {
- name: 'Select',
- dependencies: [
- 'classnames',
- 'react-input-autosize',
- 'react',
- 'react-dom',
- 'create-react-class',
- 'prop-types'
- ],
- less: {
- path: 'less',
- entry: 'default.less'
- }
- },
-
- example: {
- src: 'examples/src',
- dist: 'examples/dist',
- standalone: true,
- files: [
- 'index.html',
- 'standalone.html',
- '.gitignore'
- ],
- scripts: [
- 'app.js'
- ],
- less: [
- 'example.less'
- ]
- }
-
-};
-
-initGulpTasks(gulp, taskConfig);
diff --git a/less/control.less b/less/control.less
index 33a8dc01..f9acf527 100644
--- a/less/control.less
+++ b/less/control.less
@@ -118,6 +118,10 @@
white-space: nowrap;
}
+.has-value.is-clearable.Select--single > .Select-control .Select-value {
+ padding-right: (@select-clear-width + @select-arrow-width * 5);
+}
+
.has-value.Select--single > .Select-control .Select-value,
.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value {
.Select-value-label {
diff --git a/lib/Async.js b/lib/Async.js
index fa1e208c..97d86aad 100644
--- a/lib/Async.js
+++ b/lib/Async.js
@@ -1,22 +1,12 @@
'use strict';
-Object.defineProperty(exports, '__esModule', {
+Object.defineProperty(exports, "__esModule", {
value: true
});
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 _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 _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
-
-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 _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');
@@ -30,32 +20,40 @@ var _Select = require('./Select');
var _Select2 = _interopRequireDefault(_Select);
-var _utilsStripDiacritics = require('./utils/stripDiacritics');
+var _stripDiacritics = require('./utils/stripDiacritics');
+
+var _stripDiacritics2 = _interopRequireDefault(_stripDiacritics);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-var _utilsStripDiacritics2 = _interopRequireDefault(_utilsStripDiacritics);
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+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; }
var propTypes = {
- autoload: _propTypes2['default'].bool.isRequired, // automatically call the `loadOptions` prop on-mount; defaults to true
- cache: _propTypes2['default'].any, // object to use to cache results; set to null/false to disable caching
- children: _propTypes2['default'].func.isRequired, // Child function responsible for creating the inner Select component; (props: Object): PropTypes.element
- ignoreAccents: _propTypes2['default'].bool, // strip diacritics when filtering; defaults to true
- ignoreCase: _propTypes2['default'].bool, // perform case-insensitive filtering; defaults to true
- loadingPlaceholder: _propTypes2['default'].oneOfType([// replaces the placeholder while options are loading
- _propTypes2['default'].string, _propTypes2['default'].node]),
- loadOptions: _propTypes2['default'].func.isRequired, // callback to load options asynchronously; (inputValue: string, callback: Function): ?Promise
- multi: _propTypes2['default'].bool, // multi-value input
- options: _propTypes2['default'].array.isRequired, // array of options
- placeholder: _propTypes2['default'].oneOfType([// field placeholder, displayed when there's no value (shared with Select)
- _propTypes2['default'].string, _propTypes2['default'].node]),
- noResultsText: _propTypes2['default'].oneOfType([// field noResultsText, displayed when no options come back from the server
- _propTypes2['default'].string, _propTypes2['default'].node]),
- onChange: _propTypes2['default'].func, // onChange handler: function (newValue) {}
- searchPromptText: _propTypes2['default'].oneOfType([// label to prompt for search input
- _propTypes2['default'].string, _propTypes2['default'].node]),
- onInputChange: _propTypes2['default'].func, // optional for keeping track of what is being typed
- value: _propTypes2['default'].any };
-
-// initial field value
+ autoload: _propTypes2.default.bool.isRequired, // automatically call the `loadOptions` prop on-mount; defaults to true
+ cache: _propTypes2.default.any, // object to use to cache results; set to null/false to disable caching
+ children: _propTypes2.default.func.isRequired, // Child function responsible for creating the inner Select component; (props: Object): PropTypes.element
+ ignoreAccents: _propTypes2.default.bool, // strip diacritics when filtering; defaults to true
+ ignoreCase: _propTypes2.default.bool, // perform case-insensitive filtering; defaults to true
+ loadOptions: _propTypes2.default.func.isRequired, // callback to load options asynchronously; (inputValue: string, callback: Function): ?Promise
+ loadingPlaceholder: _propTypes2.default.oneOfType([// replaces the placeholder while options are loading
+ _propTypes2.default.string, _propTypes2.default.node]),
+ multi: _propTypes2.default.bool, // multi-value input
+ noResultsText: _propTypes2.default.oneOfType([// field noResultsText, displayed when no options come back from the server
+ _propTypes2.default.string, _propTypes2.default.node]),
+ onChange: _propTypes2.default.func, // onChange handler: function (newValue) {}
+ onInputChange: _propTypes2.default.func, // optional for keeping track of what is being typed
+ options: _propTypes2.default.array.isRequired, // array of options
+ placeholder: _propTypes2.default.oneOfType([// field placeholder, displayed when there's no value (shared with Select)
+ _propTypes2.default.string, _propTypes2.default.node]),
+ searchPromptText: _propTypes2.default.oneOfType([// label to prompt for search input
+ _propTypes2.default.string, _propTypes2.default.node]),
+ value: _propTypes2.default.any // initial field value
+};
+
var defaultCache = {};
var defaultProps = {
@@ -69,22 +67,24 @@ var defaultProps = {
searchPromptText: 'Type to search'
};
-var Async = (function (_Component) {
+var Async = function (_Component) {
_inherits(Async, _Component);
function Async(props, context) {
_classCallCheck(this, Async);
- _get(Object.getPrototypeOf(Async.prototype), 'constructor', this).call(this, props, context);
+ var _this = _possibleConstructorReturn(this, (Async.__proto__ || Object.getPrototypeOf(Async)).call(this, props, context));
- this._cache = props.cache === defaultCache ? {} : props.cache;
+ _this._cache = props.cache === defaultCache ? {} : props.cache;
- this.state = {
+ _this.state = {
+ inputValue: '',
isLoading: false,
options: props.options
};
- this._onInputChange = this._onInputChange.bind(this);
+ _this.onInputChange = _this.onInputChange.bind(_this);
+ return _this;
}
_createClass(Async, [{
@@ -92,26 +92,24 @@ var Async = (function (_Component) {
value: function componentDidMount() {
var autoload = this.props.autoload;
+
if (autoload) {
this.loadOptions('');
}
}
}, {
- key: 'componentWillUpdate',
- value: function componentWillUpdate(nextProps, nextState) {
- var _this = this;
-
- var propertiesToSync = ['options'];
- propertiesToSync.forEach(function (prop) {
- if (_this.props[prop] !== nextProps[prop]) {
- _this.setState(_defineProperty({}, prop, nextProps[prop]));
- }
- });
+ key: 'componentWillReceiveProps',
+ value: function componentWillReceiveProps(nextProps) {
+ if (nextProps.options !== this.props.options) {
+ this.setState({
+ options: nextProps.options
+ });
+ }
}
}, {
- key: 'clearOptions',
- value: function clearOptions() {
- this.setState({ options: [] });
+ key: 'componentWillUnmount',
+ value: function componentWillUnmount() {
+ this._callback = null;
}
}, {
key: 'loadOptions',
@@ -122,7 +120,7 @@ var Async = (function (_Component) {
var cache = this._cache;
- if (cache && cache.hasOwnProperty(inputValue)) {
+ if (cache && Object.prototype.hasOwnProperty.call(cache, inputValue)) {
this.setState({
options: cache[inputValue]
});
@@ -164,49 +162,46 @@ var Async = (function (_Component) {
isLoading: true
});
}
-
- return inputValue;
}
}, {
- key: '_onInputChange',
- value: function _onInputChange(inputValue) {
- var _props = this.props;
- var ignoreAccents = _props.ignoreAccents;
- var ignoreCase = _props.ignoreCase;
- var onInputChange = _props.onInputChange;
+ key: 'onInputChange',
+ value: function onInputChange(inputValue) {
+ var _props = this.props,
+ ignoreAccents = _props.ignoreAccents,
+ ignoreCase = _props.ignoreCase,
+ onInputChange = _props.onInputChange;
+
+ var transformedInputValue = inputValue;
if (ignoreAccents) {
- inputValue = (0, _utilsStripDiacritics2['default'])(inputValue);
+ transformedInputValue = (0, _stripDiacritics2.default)(transformedInputValue);
}
if (ignoreCase) {
- inputValue = inputValue.toLowerCase();
+ transformedInputValue = transformedInputValue.toLowerCase();
}
if (onInputChange) {
- onInputChange(inputValue);
+ onInputChange(transformedInputValue);
}
- return this.loadOptions(inputValue);
- }
- }, {
- key: 'inputValue',
- value: function inputValue() {
- if (this.select) {
- return this.select.state.inputValue;
- }
- return '';
+ this.setState({ inputValue: inputValue });
+ this.loadOptions(transformedInputValue);
+
+ // Return the original input value to avoid modifying the user's view of the input while typing.
+ return inputValue;
}
}, {
key: 'noResultsText',
value: function noResultsText() {
- var _props2 = this.props;
- var loadingPlaceholder = _props2.loadingPlaceholder;
- var noResultsText = _props2.noResultsText;
- var searchPromptText = _props2.searchPromptText;
- var isLoading = this.state.isLoading;
+ var _props2 = this.props,
+ loadingPlaceholder = _props2.loadingPlaceholder,
+ noResultsText = _props2.noResultsText,
+ searchPromptText = _props2.searchPromptText;
+ var _state = this.state,
+ inputValue = _state.inputValue,
+ isLoading = _state.isLoading;
- var inputValue = this.inputValue();
if (isLoading) {
return loadingPlaceholder;
@@ -226,13 +221,17 @@ var Async = (function (_Component) {
value: function render() {
var _this3 = this;
- var _props3 = this.props;
- var children = _props3.children;
- var loadingPlaceholder = _props3.loadingPlaceholder;
- var placeholder = _props3.placeholder;
- var _state = this.state;
- var isLoading = _state.isLoading;
- var options = _state.options;
+ var _props3 = this.props,
+ children = _props3.children,
+ loadingPlaceholder = _props3.loadingPlaceholder,
+ multi = _props3.multi,
+ onChange = _props3.onChange,
+ placeholder = _props3.placeholder,
+ value = _props3.value;
+ var _state2 = this.state,
+ isLoading = _state2.isLoading,
+ options = _state2.options;
+
var props = {
noResultsText: this.noResultsText(),
@@ -240,31 +239,25 @@ var Async = (function (_Component) {
options: isLoading && loadingPlaceholder ? [] : options,
ref: function ref(_ref) {
return _this3.select = _ref;
- },
- onChange: function onChange(newValues) {
- if (_this3.props.multi && _this3.props.value && newValues.length > _this3.props.value.length) {
- _this3.clearOptions();
- }
- _this3.props.onChange(newValues);
}
};
return children(_extends({}, this.props, props, {
isLoading: isLoading,
- onInputChange: this._onInputChange
+ onInputChange: this.onInputChange
}));
}
}]);
return Async;
-})(_react.Component);
+}(_react.Component);
+
+exports.default = Async;
-exports['default'] = Async;
Async.propTypes = propTypes;
Async.defaultProps = defaultProps;
function defaultChildren(props) {
- return _react2['default'].createElement(_Select2['default'], props);
-}
-module.exports = exports['default'];
\ No newline at end of file
+ return _react2.default.createElement(_Select2.default, props);
+}
\ No newline at end of file
diff --git a/lib/AsyncCreatable.js b/lib/AsyncCreatable.js
index ca31aa7a..0367e758 100644
--- a/lib/AsyncCreatable.js
+++ b/lib/AsyncCreatable.js
@@ -1,23 +1,39 @@
'use strict';
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
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; };
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': 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 _createReactClass = require('create-react-class');
-
-var _createReactClass2 = _interopRequireDefault(_createReactClass);
-
var _Select = require('./Select');
var _Select2 = _interopRequireDefault(_Select);
+var _Async = require('./Async');
+
+var _Async2 = _interopRequireDefault(_Async);
+
+var _Creatable = require('./Creatable');
+
+var _Creatable2 = _interopRequireDefault(_Creatable);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+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; }
+
function reduce(obj) {
- var props = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+ var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
return Object.keys(obj).reduce(function (props, key) {
var value = obj[key];
@@ -26,40 +42,54 @@ function reduce(obj) {
}, props);
}
-var AsyncCreatable = (0, _createReactClass2['default'])({
- displayName: 'AsyncCreatableSelect',
-
- focus: function focus() {
- this.select.focus();
- },
-
- render: function render() {
- var _this = this;
-
- return _react2['default'].createElement(
- _Select2['default'].Async,
- this.props,
- function (asyncProps) {
- return _react2['default'].createElement(
- _Select2['default'].Creatable,
- _this.props,
- function (creatableProps) {
- return _react2['default'].createElement(_Select2['default'], _extends({}, reduce(asyncProps, reduce(creatableProps, {})), {
- onInputChange: function (input) {
- creatableProps.onInputChange(input);
- return asyncProps.onInputChange(input);
- },
- ref: function (ref) {
- _this.select = ref;
- creatableProps.ref(ref);
- asyncProps.ref(ref);
- }
- }));
- }
- );
- }
- );
+var AsyncCreatableSelect = function (_React$Component) {
+ _inherits(AsyncCreatableSelect, _React$Component);
+
+ function AsyncCreatableSelect() {
+ _classCallCheck(this, AsyncCreatableSelect);
+
+ return _possibleConstructorReturn(this, (AsyncCreatableSelect.__proto__ || Object.getPrototypeOf(AsyncCreatableSelect)).apply(this, arguments));
}
-});
-module.exports = AsyncCreatable;
\ No newline at end of file
+ _createClass(AsyncCreatableSelect, [{
+ key: 'focus',
+ value: function focus() {
+ this.select.focus();
+ }
+ }, {
+ key: 'render',
+ value: function render() {
+ var _this2 = this;
+
+ return _react2.default.createElement(
+ _Async2.default,
+ this.props,
+ function (asyncProps) {
+ return _react2.default.createElement(
+ _Creatable2.default,
+ _this2.props,
+ function (creatableProps) {
+ return _react2.default.createElement(_Select2.default, _extends({}, reduce(asyncProps, reduce(creatableProps, {})), {
+ onInputChange: function onInputChange(input) {
+ creatableProps.onInputChange(input);
+ return asyncProps.onInputChange(input);
+ },
+ ref: function ref(_ref) {
+ _this2.select = _ref;
+ creatableProps.ref(_ref);
+ asyncProps.ref(_ref);
+ }
+ }));
+ }
+ );
+ }
+ );
+ }
+ }]);
+
+ return AsyncCreatableSelect;
+}(_react2.default.Component);
+
+;
+
+exports.default = AsyncCreatableSelect;
\ No newline at end of file
diff --git a/lib/Creatable.js b/lib/Creatable.js
index 6277dd8f..4322d5a2 100644
--- a/lib/Creatable.js
+++ b/lib/Creatable.js
@@ -1,19 +1,17 @@
'use strict';
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
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; };
-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; }
+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 _createReactClass = require('create-react-class');
-
-var _createReactClass2 = _interopRequireDefault(_createReactClass);
-
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
@@ -22,267 +20,245 @@ var _Select = require('./Select');
var _Select2 = _interopRequireDefault(_Select);
-var _utilsDefaultFilterOptions = require('./utils/defaultFilterOptions');
-
-var _utilsDefaultFilterOptions2 = _interopRequireDefault(_utilsDefaultFilterOptions);
-
-var _utilsDefaultMenuRenderer = require('./utils/defaultMenuRenderer');
-
-var _utilsDefaultMenuRenderer2 = _interopRequireDefault(_utilsDefaultMenuRenderer);
-
-var Creatable = (0, _createReactClass2['default'])({
- displayName: 'CreatableSelect',
-
- propTypes: {
- // Child function responsible for creating the inner Select component
- // This component can be used to compose HOCs (eg Creatable and Async)
- // (props: Object): PropTypes.element
- children: _propTypes2['default'].func,
-
- // See Select.propTypes.filterOptions
- filterOptions: _propTypes2['default'].any,
-
- // Searches for any matching option within the set of options.
- // This function prevents duplicate options from being created.
- // ({ option: Object, options: Array, labelKey: string, valueKey: string }): boolean
- isOptionUnique: _propTypes2['default'].func,
-
- // Determines if the current input text represents a valid option.
- // ({ label: string }): boolean
- isValidNewOption: _propTypes2['default'].func,
-
- // See Select.propTypes.menuRenderer
- menuRenderer: _propTypes2['default'].any,
-
- // Factory to create new option.
- // ({ label: string, labelKey: string, valueKey: string }): Object
- newOptionCreator: _propTypes2['default'].func,
-
- // input change handler: function (inputValue) {}
- onInputChange: _propTypes2['default'].func,
-
- // input keyDown handler: function (event) {}
- onInputKeyDown: _propTypes2['default'].func,
-
- // new option click handler: function (option) {}
- onNewOptionClick: _propTypes2['default'].func,
-
- // See Select.propTypes.options
- options: _propTypes2['default'].array,
-
- // Creates prompt/placeholder option text.
- // (filterText: string): string
- promptTextCreator: _propTypes2['default'].func,
-
- // Decides if a keyDown event (eg its `keyCode`) should result in the creation of a new option.
- shouldKeyDownEventCreateNewOption: _propTypes2['default'].func
- },
-
- // Default prop methods
- statics: {
- isOptionUnique: isOptionUnique,
- isValidNewOption: isValidNewOption,
- newOptionCreator: newOptionCreator,
- promptTextCreator: promptTextCreator,
- shouldKeyDownEventCreateNewOption: shouldKeyDownEventCreateNewOption
- },
-
- getDefaultProps: function getDefaultProps() {
- return {
- filterOptions: _utilsDefaultFilterOptions2['default'],
- isOptionUnique: isOptionUnique,
- isValidNewOption: isValidNewOption,
- menuRenderer: _utilsDefaultMenuRenderer2['default'],
- newOptionCreator: newOptionCreator,
- promptTextCreator: promptTextCreator,
- shouldKeyDownEventCreateNewOption: shouldKeyDownEventCreateNewOption
- };
- },
-
- createNewOption: function createNewOption() {
- var _props = this.props;
- var isValidNewOption = _props.isValidNewOption;
- var newOptionCreator = _props.newOptionCreator;
- var onNewOptionClick = _props.onNewOptionClick;
- var _props$options = _props.options;
- var options = _props$options === undefined ? [] : _props$options;
- var shouldKeyDownEventCreateNewOption = _props.shouldKeyDownEventCreateNewOption;
-
- if (isValidNewOption({ label: this.inputValue })) {
- var option = newOptionCreator({ label: this.inputValue, labelKey: this.labelKey, valueKey: this.valueKey });
- var _isOptionUnique = this.isOptionUnique({ option: option });
-
- // Don't add the same option twice.
- if (_isOptionUnique) {
- if (onNewOptionClick) {
- onNewOptionClick(option);
- } else {
- options.unshift(option);
-
- this.select.selectValue(option);
- }
- }
- }
- },
+var _defaultFilterOptions = require('./utils/defaultFilterOptions');
- filterOptions: function filterOptions() {
- var _props2 = this.props;
- var filterOptions = _props2.filterOptions;
- var isValidNewOption = _props2.isValidNewOption;
- var options = _props2.options;
- var promptTextCreator = _props2.promptTextCreator;
+var _defaultFilterOptions2 = _interopRequireDefault(_defaultFilterOptions);
- // TRICKY Check currently selected options as well.
- // Don't display a create-prompt for a value that's selected.
- // This covers async edge-cases where a newly-created Option isn't yet in the async-loaded array.
- var excludeOptions = arguments[2] || [];
+var _defaultMenuRenderer = require('./utils/defaultMenuRenderer');
- var filteredOptions = filterOptions.apply(undefined, arguments) || [];
+var _defaultMenuRenderer2 = _interopRequireDefault(_defaultMenuRenderer);
- if (isValidNewOption({ label: this.inputValue })) {
- var _newOptionCreator = this.props.newOptionCreator;
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var option = _newOptionCreator({
- label: this.inputValue,
- labelKey: this.labelKey,
- valueKey: this.valueKey
- });
+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; }
- // TRICKY Compare to all options (not just filtered options) in case option has already been selected).
- // For multi-selects, this would remove it from the filtered list.
- var _isOptionUnique2 = this.isOptionUnique({
- option: option,
- options: excludeOptions.concat(filteredOptions)
- });
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- if (_isOptionUnique2) {
- var _prompt = promptTextCreator(this.inputValue);
+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; }
- this._createPlaceholderOption = _newOptionCreator({
- label: _prompt,
- labelKey: this.labelKey,
- valueKey: this.valueKey
- });
+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 CreatableSelect = function (_React$Component) {
+ _inherits(CreatableSelect, _React$Component);
+
+ function CreatableSelect(props, context) {
+ _classCallCheck(this, CreatableSelect);
- filteredOptions.unshift(this._createPlaceholderOption);
+ var _this = _possibleConstructorReturn(this, (CreatableSelect.__proto__ || Object.getPrototypeOf(CreatableSelect)).call(this, props, context));
+
+ _this.filterOptions = _this.filterOptions.bind(_this);
+ _this.menuRenderer = _this.menuRenderer.bind(_this);
+ _this.onInputKeyDown = _this.onInputKeyDown.bind(_this);
+ _this.onInputChange = _this.onInputChange.bind(_this);
+ _this.onOptionSelect = _this.onOptionSelect.bind(_this);
+ return _this;
+ }
+
+ _createClass(CreatableSelect, [{
+ key: 'createNewOption',
+ value: function createNewOption() {
+ var _props = this.props,
+ isValidNewOption = _props.isValidNewOption,
+ newOptionCreator = _props.newOptionCreator,
+ onNewOptionClick = _props.onNewOptionClick,
+ _props$options = _props.options,
+ options = _props$options === undefined ? [] : _props$options,
+ shouldKeyDownEventCreateNewOption = _props.shouldKeyDownEventCreateNewOption;
+
+
+ if (isValidNewOption({ label: this.inputValue })) {
+ var option = newOptionCreator({ label: this.inputValue, labelKey: this.labelKey, valueKey: this.valueKey });
+ var _isOptionUnique = this.isOptionUnique({ option: option });
+
+ // Don't add the same option twice.
+ if (_isOptionUnique) {
+ if (onNewOptionClick) {
+ onNewOptionClick(option);
+ } else {
+ options.unshift(option);
+
+ this.select.selectValue(option);
+ }
+ }
}
}
+ }, {
+ key: 'filterOptions',
+ value: function filterOptions() {
+ var _props2 = this.props,
+ filterOptions = _props2.filterOptions,
+ isValidNewOption = _props2.isValidNewOption,
+ options = _props2.options,
+ promptTextCreator = _props2.promptTextCreator;
- return filteredOptions;
- },
+ // TRICKY Check currently selected options as well.
+ // Don't display a create-prompt for a value that's selected.
+ // This covers async edge-cases where a newly-created Option isn't yet in the async-loaded array.
- isOptionUnique: function isOptionUnique(_ref2) {
- var option = _ref2.option;
- var options = _ref2.options;
- var isOptionUnique = this.props.isOptionUnique;
+ var excludeOptions = (arguments.length <= 2 ? undefined : arguments[2]) || [];
- options = options || this.select.filterFlatOptions();
+ var filteredOptions = filterOptions.apply(undefined, arguments) || [];
- return isOptionUnique({
- labelKey: this.labelKey,
- option: option,
- options: options,
- valueKey: this.valueKey
- });
- },
+ if (isValidNewOption({ label: this.inputValue })) {
+ var _newOptionCreator = this.props.newOptionCreator;
- menuRenderer: function menuRenderer(params) {
- var menuRenderer = this.props.menuRenderer;
- return menuRenderer(_extends({}, params, {
- onSelect: this.onOptionSelect,
- selectValue: this.onOptionSelect
- }));
- },
+ var option = _newOptionCreator({
+ label: this.inputValue,
+ labelKey: this.labelKey,
+ valueKey: this.valueKey
+ });
+
+ // TRICKY Compare to all options (not just filtered options) in case option has already been selected).
+ // For multi-selects, this would remove it from the filtered list.
+ var _isOptionUnique2 = this.isOptionUnique({
+ option: option,
+ options: excludeOptions.concat(filteredOptions)
+ });
+
+ if (_isOptionUnique2) {
+ var prompt = promptTextCreator(this.inputValue);
- onInputChange: function onInputChange(input) {
- var onInputChange = this.props.onInputChange;
+ this._createPlaceholderOption = _newOptionCreator({
+ label: prompt,
+ labelKey: this.labelKey,
+ valueKey: this.valueKey
+ });
- if (onInputChange) {
- onInputChange(input);
+ filteredOptions.unshift(this._createPlaceholderOption);
+ }
+ }
+
+ return filteredOptions;
}
+ }, {
+ key: 'isOptionUnique',
+ value: function isOptionUnique(_ref) {
+ var option = _ref.option,
+ options = _ref.options;
+ var isOptionUnique = this.props.isOptionUnique;
- // This value may be needed in between Select mounts (when this.select is null)
- this.inputValue = input;
- },
- onInputKeyDown: function onInputKeyDown(event) {
- var _props3 = this.props;
- var shouldKeyDownEventCreateNewOption = _props3.shouldKeyDownEventCreateNewOption;
- var onInputKeyDown = _props3.onInputKeyDown;
+ options = options || this.select.filterFlatOptions();
- var focusedOption = this.select.getFocusedOption();
+ return isOptionUnique({
+ labelKey: this.labelKey,
+ option: option,
+ options: options,
+ valueKey: this.valueKey
+ });
+ }
+ }, {
+ key: 'menuRenderer',
+ value: function menuRenderer(params) {
+ var menuRenderer = this.props.menuRenderer;
- if (focusedOption && focusedOption === this._createPlaceholderOption && shouldKeyDownEventCreateNewOption({ keyCode: event.keyCode })) {
- this.createNewOption();
- // Prevent decorated Select from doing anything additional with this keyDown event
- event.preventDefault();
- } else if (onInputKeyDown) {
- onInputKeyDown(event);
+ return menuRenderer(_extends({}, params, {
+ onSelect: this.onOptionSelect,
+ selectValue: this.onOptionSelect
+ }));
}
- },
+ }, {
+ key: 'onInputChange',
+ value: function onInputChange(input) {
+ var onInputChange = this.props.onInputChange;
+
- onOptionSelect: function onOptionSelect(option, event) {
- if (option === this._createPlaceholderOption) {
- this.createNewOption();
- } else {
- this.select.selectValue(option);
+ if (onInputChange) {
+ onInputChange(input);
+ }
+
+ // This value may be needed in between Select mounts (when this.select is null)
+ this.inputValue = input;
+ }
+ }, {
+ key: 'onInputKeyDown',
+ value: function onInputKeyDown(event) {
+ var _props3 = this.props,
+ shouldKeyDownEventCreateNewOption = _props3.shouldKeyDownEventCreateNewOption,
+ onInputKeyDown = _props3.onInputKeyDown;
+
+ var focusedOption = this.select.getFocusedOption();
+
+ if (focusedOption && focusedOption === this._createPlaceholderOption && shouldKeyDownEventCreateNewOption({ keyCode: event.keyCode })) {
+ this.createNewOption();
+
+ // Prevent decorated Select from doing anything additional with this keyDown event
+ event.preventDefault();
+ } else if (onInputKeyDown) {
+ onInputKeyDown(event);
+ }
}
- },
+ }, {
+ key: 'onOptionSelect',
+ value: function onOptionSelect(option, event) {
+ if (option === this._createPlaceholderOption) {
+ this.createNewOption();
+ } else {
+ this.select.selectValue(option);
+ }
+ }
+ }, {
+ key: 'focus',
+ value: function focus() {
+ this.select.focus();
+ }
+ }, {
+ key: 'render',
+ value: function render() {
+ var _this2 = this;
- focus: function focus() {
- this.select.focus();
- },
+ var _props4 = this.props,
+ newOptionCreator = _props4.newOptionCreator,
+ shouldKeyDownEventCreateNewOption = _props4.shouldKeyDownEventCreateNewOption,
+ restProps = _objectWithoutProperties(_props4, ['newOptionCreator', 'shouldKeyDownEventCreateNewOption']);
- render: function render() {
- var _this = this;
+ var children = this.props.children;
- var _props4 = this.props;
- var newOptionCreator = _props4.newOptionCreator;
- var shouldKeyDownEventCreateNewOption = _props4.shouldKeyDownEventCreateNewOption;
+ // We can't use destructuring default values to set the children,
+ // because it won't apply work if `children` is null. A falsy check is
+ // more reliable in real world use-cases.
- var restProps = _objectWithoutProperties(_props4, ['newOptionCreator', 'shouldKeyDownEventCreateNewOption']);
+ if (!children) {
+ children = defaultChildren;
+ }
- var children = this.props.children;
+ var props = _extends({}, restProps, {
+ allowCreate: true,
+ filterOptions: this.filterOptions,
+ menuRenderer: this.menuRenderer,
+ onInputChange: this.onInputChange,
+ onInputKeyDown: this.onInputKeyDown,
+ ref: function ref(_ref2) {
+ _this2.select = _ref2;
+
+ // These values may be needed in between Select mounts (when this.select is null)
+ if (_ref2) {
+ _this2.labelKey = _ref2.props.labelKey;
+ _this2.valueKey = _ref2.props.valueKey;
+ }
+ }
+ });
- // We can't use destructuring default values to set the children,
- // because it won't apply work if `children` is null. A falsy check is
- // more reliable in real world use-cases.
- if (!children) {
- children = defaultChildren;
+ return children(props);
}
+ }]);
- var props = _extends({}, restProps, {
- allowCreate: true,
- filterOptions: this.filterOptions,
- menuRenderer: this.menuRenderer,
- onInputChange: this.onInputChange,
- onInputKeyDown: this.onInputKeyDown,
- ref: function ref(_ref) {
- _this.select = _ref;
-
- // These values may be needed in between Select mounts (when this.select is null)
- if (_ref) {
- _this.labelKey = _ref.props.labelKey;
- _this.valueKey = _ref.props.valueKey;
- }
- }
- });
+ return CreatableSelect;
+}(_react2.default.Component);
- return children(props);
- }
-});
+;
function defaultChildren(props) {
- return _react2['default'].createElement(_Select2['default'], props);
+ return _react2.default.createElement(_Select2.default, props);
};
function isOptionUnique(_ref3) {
- var option = _ref3.option;
- var options = _ref3.options;
- var labelKey = _ref3.labelKey;
- var valueKey = _ref3.valueKey;
+ var option = _ref3.option,
+ options = _ref3.options,
+ labelKey = _ref3.labelKey,
+ valueKey = _ref3.valueKey;
return options.filter(function (existingOption) {
return existingOption[labelKey] === option[labelKey] || existingOption[valueKey] === option[valueKey];
@@ -296,9 +272,9 @@ function isValidNewOption(_ref4) {
};
function newOptionCreator(_ref5) {
- var label = _ref5.label;
- var labelKey = _ref5.labelKey;
- var valueKey = _ref5.valueKey;
+ var label = _ref5.label,
+ labelKey = _ref5.labelKey,
+ valueKey = _ref5.valueKey;
var option = {};
option[valueKey] = label;
@@ -325,4 +301,66 @@ function shouldKeyDownEventCreateNewOption(_ref6) {
return false;
};
-module.exports = Creatable;
\ No newline at end of file
+// Default prop methods
+CreatableSelect.isOptionUnique = isOptionUnique;
+CreatableSelect.isValidNewOption = isValidNewOption;
+CreatableSelect.newOptionCreator = newOptionCreator;
+CreatableSelect.promptTextCreator = promptTextCreator;
+CreatableSelect.shouldKeyDownEventCreateNewOption = shouldKeyDownEventCreateNewOption;
+
+CreatableSelect.defaultProps = {
+ filterOptions: _defaultFilterOptions2.default,
+ isOptionUnique: isOptionUnique,
+ isValidNewOption: isValidNewOption,
+ menuRenderer: _defaultMenuRenderer2.default,
+ newOptionCreator: newOptionCreator,
+ promptTextCreator: promptTextCreator,
+ shouldKeyDownEventCreateNewOption: shouldKeyDownEventCreateNewOption
+};
+
+CreatableSelect.propTypes = {
+ // Child function responsible for creating the inner Select component
+ // This component can be used to compose HOCs (eg Creatable and Async)
+ // (props: Object): PropTypes.element
+ children: _propTypes2.default.func,
+
+ // See Select.propTypes.filterOptions
+ filterOptions: _propTypes2.default.any,
+
+ // Searches for any matching option within the set of options.
+ // This function prevents duplicate options from being created.
+ // ({ option: Object, options: Array, labelKey: string, valueKey: string }): boolean
+ isOptionUnique: _propTypes2.default.func,
+
+ // Determines if the current input text represents a valid option.
+ // ({ label: string }): boolean
+ isValidNewOption: _propTypes2.default.func,
+
+ // See Select.propTypes.menuRenderer
+ menuRenderer: _propTypes2.default.any,
+
+ // Factory to create new option.
+ // ({ label: string, labelKey: string, valueKey: string }): Object
+ newOptionCreator: _propTypes2.default.func,
+
+ // input change handler: function (inputValue) {}
+ onInputChange: _propTypes2.default.func,
+
+ // input keyDown handler: function (event) {}
+ onInputKeyDown: _propTypes2.default.func,
+
+ // new option click handler: function (option) {}
+ onNewOptionClick: _propTypes2.default.func,
+
+ // See Select.propTypes.options
+ options: _propTypes2.default.array,
+
+ // Creates prompt/placeholder option text.
+ // (filterText: string): string
+ promptTextCreator: _propTypes2.default.func,
+
+ // Decides if a keyDown event (eg its `keyCode`) should result in the creation of a new option.
+ shouldKeyDownEventCreateNewOption: _propTypes2.default.func
+};
+
+exports.default = CreatableSelect;
\ No newline at end of file
diff --git a/lib/Dropdown.js b/lib/Dropdown.js
index bd1e2a38..7d632fd8 100644
--- a/lib/Dropdown.js
+++ b/lib/Dropdown.js
@@ -1,27 +1,51 @@
'use strict';
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+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 _createReactClass = require('create-react-class');
-
-var _createReactClass2 = _interopRequireDefault(_createReactClass);
-
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
-var Dropdown = (0, _createReactClass2['default'])({
- propTypes: {
- children: _propTypes2['default'].node
- },
- render: function render() {
- // This component adds no markup
- return this.props.children;
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+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; }
+
+var Dropdown = function (_React$Component) {
+ _inherits(Dropdown, _React$Component);
+
+ function Dropdown() {
+ _classCallCheck(this, Dropdown);
+
+ return _possibleConstructorReturn(this, (Dropdown.__proto__ || Object.getPrototypeOf(Dropdown)).apply(this, arguments));
}
-});
-module.exports = Dropdown;
\ No newline at end of file
+ _createClass(Dropdown, [{
+ key: 'render',
+ value: function render() {
+ // This component adds no markup
+ return this.props.children;
+ }
+ }]);
+
+ return Dropdown;
+}(_react2.default.Component);
+
+;
+
+Dropdown.propTypes = {
+ children: _propTypes2.default.node
+};
+
+exports.default = Dropdown;
\ No newline at end of file
diff --git a/lib/Option.js b/lib/Option.js
index 7fa96950..71784feb 100644
--- a/lib/Option.js
+++ b/lib/Option.js
@@ -1,15 +1,15 @@
'use strict';
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+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 _createReactClass = require('create-react-class');
-
-var _createReactClass2 = _interopRequireDefault(_createReactClass);
-
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
@@ -18,100 +18,142 @@ var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
-var Option = (0, _createReactClass2['default'])({
- propTypes: {
- children: _propTypes2['default'].node,
- className: _propTypes2['default'].string, // className (based on mouse position)
- instancePrefix: _propTypes2['default'].string.isRequired, // unique prefix for the ids (used for aria)
- isDisabled: _propTypes2['default'].bool, // the option is disabled
- isFocused: _propTypes2['default'].bool, // the option is focused
- isSelected: _propTypes2['default'].bool, // the option is selected
- onFocus: _propTypes2['default'].func, // method to handle mouseEnter on option element
- onSelect: _propTypes2['default'].func, // method to handle click on option element
- onUnfocus: _propTypes2['default'].func, // method to handle mouseLeave on option element
- option: _propTypes2['default'].object.isRequired, // object that is base for that option
- optionIndex: _propTypes2['default'].number },
- // index of the option, used to generate unique ids for aria
- blockEvent: function blockEvent(event) {
- event.preventDefault();
- event.stopPropagation();
- if (event.target.tagName !== 'A' || !('href' in event.target)) {
- return;
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+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; }
+
+var Option = function (_React$Component) {
+ _inherits(Option, _React$Component);
+
+ function Option(props) {
+ _classCallCheck(this, Option);
+
+ var _this = _possibleConstructorReturn(this, (Option.__proto__ || Object.getPrototypeOf(Option)).call(this, props));
+
+ _this.handleMouseDown = _this.handleMouseDown.bind(_this);
+ _this.handleMouseEnter = _this.handleMouseEnter.bind(_this);
+ _this.handleMouseMove = _this.handleMouseMove.bind(_this);
+ _this.handleTouchStart = _this.handleTouchStart.bind(_this);
+ _this.handleTouchEnd = _this.handleTouchEnd.bind(_this);
+ _this.handleTouchMove = _this.handleTouchMove.bind(_this);
+ _this.onFocus = _this.onFocus.bind(_this);
+ return _this;
+ }
+
+ _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;
+ }
}
- 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();
+ event.stopPropagation();
+ this.props.onSelect(this.props.option, event);
}
- },
-
- handleMouseDown: function handleMouseDown(event) {
- event.preventDefault();
- event.stopPropagation();
- this.props.onSelect(this.props.option, event);
- },
-
- handleMouseEnter: function handleMouseEnter(event) {
- this.onFocus(event);
- },
-
- handleMouseMove: function handleMouseMove(event) {
- this.onFocus(event);
- },
-
- handleTouchEnd: function handleTouchEnd(event) {
- // Check if the view is being dragged, In this case
- // we don't want to fire the click event (because the user only wants to scroll)
- if (this.dragging) return;
-
- this.handleMouseDown(event);
- },
-
- handleTouchMove: function handleTouchMove(event) {
- // Set a flag that the view is being dragged
- this.dragging = true;
- },
-
- handleTouchStart: function handleTouchStart(event) {
- // Set a flag that the view is not being dragged
- this.dragging = false;
- },
-
- onFocus: function onFocus(event) {
- if (!this.props.isFocused) {
- this.props.onFocus(this.props.option, event);
+ }, {
+ key: 'handleMouseEnter',
+ value: function handleMouseEnter(event) {
+ this.onFocus(event);
}
- },
- render: function render() {
- var _props = this.props;
- var option = _props.option;
- var instancePrefix = _props.instancePrefix;
- var optionIndex = _props.optionIndex;
-
- var className = (0, _classnames2['default'])(this.props.className, option.className);
-
- return option.disabled ? _react2['default'].createElement(
- 'div',
- { className: className,
- onMouseDown: this.blockEvent,
- onClick: this.blockEvent },
- this.props.children
- ) : _react2['default'].createElement(
- 'div',
- { className: className,
- style: option.style,
- role: 'option',
- onMouseDown: this.handleMouseDown,
- onMouseEnter: this.handleMouseEnter,
- onMouseMove: this.handleMouseMove,
- onTouchStart: this.handleTouchStart,
- onTouchMove: this.handleTouchMove,
- onTouchEnd: this.handleTouchEnd,
- id: instancePrefix + '-option-' + optionIndex,
- title: option.title },
- this.props.children
- );
- }
-});
-
-module.exports = Option;
\ No newline at end of file
+ }, {
+ key: 'handleMouseMove',
+ value: function handleMouseMove(event) {
+ this.onFocus(event);
+ }
+ }, {
+ key: 'handleTouchEnd',
+ value: function handleTouchEnd(event) {
+ // Check if the view is being dragged, In this case
+ // we don't want to fire the click event (because the user only wants to scroll)
+ if (this.dragging) return;
+
+ this.handleMouseDown(event);
+ }
+ }, {
+ key: 'handleTouchMove',
+ value: function handleTouchMove(event) {
+ // Set a flag that the view is being dragged
+ this.dragging = true;
+ }
+ }, {
+ key: 'handleTouchStart',
+ value: function handleTouchStart(event) {
+ // Set a flag that the view is not being dragged
+ this.dragging = false;
+ }
+ }, {
+ key: 'onFocus',
+ value: function onFocus(event) {
+ if (!this.props.isFocused) {
+ this.props.onFocus(this.props.option, event);
+ }
+ }
+ }, {
+ key: 'render',
+ value: function render() {
+ var _props = this.props,
+ option = _props.option,
+ instancePrefix = _props.instancePrefix,
+ optionIndex = _props.optionIndex;
+
+ var className = (0, _classnames2.default)(this.props.className, option.className);
+
+ return option.disabled ? _react2.default.createElement(
+ 'div',
+ { className: className,
+ onMouseDown: this.blockEvent,
+ onClick: this.blockEvent },
+ this.props.children
+ ) : _react2.default.createElement(
+ 'div',
+ { className: className,
+ style: option.style,
+ role: 'option',
+ onMouseDown: this.handleMouseDown,
+ onMouseEnter: this.handleMouseEnter,
+ onMouseMove: this.handleMouseMove,
+ onTouchStart: this.handleTouchStart,
+ onTouchMove: this.handleTouchMove,
+ onTouchEnd: this.handleTouchEnd,
+ id: instancePrefix + '-option-' + optionIndex,
+ title: option.title },
+ this.props.children
+ );
+ }
+ }]);
+
+ return Option;
+}(_react2.default.Component);
+
+;
+
+Option.propTypes = {
+ children: _propTypes2.default.node,
+ className: _propTypes2.default.string, // className (based on mouse position)
+ instancePrefix: _propTypes2.default.string.isRequired, // unique prefix for the ids (used for aria)
+ isDisabled: _propTypes2.default.bool, // the option is disabled
+ isFocused: _propTypes2.default.bool, // the option is focused
+ isSelected: _propTypes2.default.bool, // the option is selected
+ onFocus: _propTypes2.default.func, // method to handle mouseEnter on option element
+ onSelect: _propTypes2.default.func, // method to handle click on option element
+ onUnfocus: _propTypes2.default.func, // method to handle mouseLeave on option element
+ option: _propTypes2.default.object.isRequired, // object that is base for that option
+ optionIndex: _propTypes2.default.number // index of the option, used to generate unique ids for aria
+};
+
+exports.default = Option;
\ No newline at end of file
diff --git a/lib/OptionGroup.js b/lib/OptionGroup.js
index b80aff0c..6de94623 100644
--- a/lib/OptionGroup.js
+++ b/lib/OptionGroup.js
@@ -1,15 +1,15 @@
'use strict';
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+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 _createReactClass = require('create-react-class');
-
-var _createReactClass2 = _interopRequireDefault(_createReactClass);
-
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
@@ -18,80 +18,108 @@ var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
-var OptionGroup = (0, _createReactClass2['default'])({
- propTypes: {
- children: _propTypes2['default'].any,
- className: _propTypes2['default'].string, // className (based on mouse position)
- label: _propTypes2['default'].node, // the heading to show above the child options
- option: _propTypes2['default'].object.isRequired },
-
- // object that is base for that option group
- blockEvent: function blockEvent(event) {
- event.preventDefault();
- event.stopPropagation();
- if (event.target.tagName !== 'A' || !('href' in event.target)) {
- return;
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+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; }
+
+var OptionGroup = function (_React$Component) {
+ _inherits(OptionGroup, _React$Component);
+
+ function OptionGroup() {
+ _classCallCheck(this, OptionGroup);
+
+ return _possibleConstructorReturn(this, (OptionGroup.__proto__ || Object.getPrototypeOf(OptionGroup)).apply(this, arguments));
+ }
+
+ _createClass(OptionGroup, [{
+ 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;
+ }
}
- 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();
+ event.stopPropagation();
}
- },
-
- handleMouseDown: function handleMouseDown(event) {
- event.preventDefault();
- event.stopPropagation();
- },
-
- handleTouchEnd: function handleTouchEnd(event) {
- // Check if the view is being dragged, In this case
- // we don't want to fire the click event (because the user only wants to scroll)
- if (this.dragging) return;
-
- this.handleMouseDown(event);
- },
-
- handleTouchMove: function handleTouchMove(event) {
- // Set a flag that the view is being dragged
- this.dragging = true;
- },
-
- handleTouchStart: function handleTouchStart(event) {
- // Set a flag that the view is not being dragged
- this.dragging = false;
- },
-
- render: function render() {
- var option = this.props.option;
-
- var className = (0, _classnames2['default'])(this.props.className, option.className);
-
- return option.disabled ? _react2['default'].createElement(
- 'div',
- { className: className,
- onMouseDown: this.blockEvent,
- onClick: this.blockEvent },
- this.props.children
- ) : _react2['default'].createElement(
- 'div',
- { className: className,
- style: option.style,
- onMouseDown: this.handleMouseDown,
- onMouseEnter: this.handleMouseEnter,
- onMouseMove: this.handleMouseMove,
- onTouchStart: this.handleTouchStart,
- onTouchMove: this.handleTouchMove,
- onTouchEnd: this.handleTouchEnd,
- title: option.title },
- _react2['default'].createElement(
+ }, {
+ key: 'handleTouchEnd',
+ value: function handleTouchEnd(event) {
+ // Check if the view is being dragged, In this case
+ // we don't want to fire the click event (because the user only wants to scroll)
+ if (this.dragging) return;
+
+ this.handleMouseDown(event);
+ }
+ }, {
+ key: 'handleTouchMove',
+ value: function handleTouchMove(event) {
+ // Set a flag that the view is being dragged
+ this.dragging = true;
+ }
+ }, {
+ key: 'handleTouchStart',
+ value: function handleTouchStart(event) {
+ // Set a flag that the view is not being dragged
+ this.dragging = false;
+ }
+ }, {
+ key: 'render',
+ value: function render() {
+ var option = this.props.option;
+
+ var className = (0, _classnames2.default)(this.props.className, option.className);
+
+ return option.disabled ? _react2.default.createElement(
'div',
- { className: 'Select-option-group-label' },
- this.props.label
- ),
- this.props.children
- );
- }
-});
+ { className: className,
+ onMouseDown: this.blockEvent,
+ onClick: this.blockEvent },
+ this.props.children
+ ) : _react2.default.createElement(
+ 'div',
+ { className: className,
+ style: option.style,
+ onMouseDown: this.handleMouseDown,
+ onMouseEnter: this.handleMouseEnter,
+ onMouseMove: this.handleMouseMove,
+ onTouchStart: this.handleTouchStart,
+ onTouchMove: this.handleTouchMove,
+ onTouchEnd: this.handleTouchEnd,
+ title: option.title },
+ _react2.default.createElement(
+ 'div',
+ { className: 'Select-option-group-label' },
+ this.props.label
+ ),
+ this.props.children
+ );
+ }
+ }]);
+
+ return OptionGroup;
+}(_react2.default.Component);
+
+;
+
+OptionGroup.propTypes = {
+ children: _propTypes2.default.any,
+ className: _propTypes2.default.string, // className (based on mouse position)
+ label: _propTypes2.default.node, // the heading to show above the child options
+ option: _propTypes2.default.object.isRequired // object that is base for that option group
+};
-module.exports = OptionGroup;
\ No newline at end of file
+exports.default = OptionGroup;
\ No newline at end of file
diff --git a/lib/Select.js b/lib/Select.js
index fb28a298..75256a51 100644
--- a/lib/Select.js
+++ b/lib/Select.js
@@ -1,31 +1,19 @@
-/*!
- Copyright (c) 2016 Jed Watson.
- Licensed under the MIT License (MIT), see
- http://jedwatson.github.io/react-select
-*/
-
'use strict';
-Object.defineProperty(exports, '__esModule', {
- value: true
+Object.defineProperty(exports, "__esModule", {
+ value: true
});
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; };
-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; }
+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; };
-function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return 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 _createReactClass = require('create-react-class');
-
-var _createReactClass2 = _interopRequireDefault(_createReactClass);
-
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
@@ -42,33 +30,21 @@ var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
-var _utilsDefaultArrowRenderer = require('./utils/defaultArrowRenderer');
-
-var _utilsDefaultArrowRenderer2 = _interopRequireDefault(_utilsDefaultArrowRenderer);
+var _defaultArrowRenderer = require('./utils/defaultArrowRenderer');
-var _utilsDefaultFilterOptions = require('./utils/defaultFilterOptions');
+var _defaultArrowRenderer2 = _interopRequireDefault(_defaultArrowRenderer);
-var _utilsDefaultFilterOptions2 = _interopRequireDefault(_utilsDefaultFilterOptions);
+var _defaultFilterOptions = require('./utils/defaultFilterOptions');
-var _utilsDefaultMenuRenderer = require('./utils/defaultMenuRenderer');
+var _defaultFilterOptions2 = _interopRequireDefault(_defaultFilterOptions);
-var _utilsDefaultMenuRenderer2 = _interopRequireDefault(_utilsDefaultMenuRenderer);
+var _defaultMenuRenderer = require('./utils/defaultMenuRenderer');
-var _utilsDefaultClearRenderer = require('./utils/defaultClearRenderer');
+var _defaultMenuRenderer2 = _interopRequireDefault(_defaultMenuRenderer);
-var _utilsDefaultClearRenderer2 = _interopRequireDefault(_utilsDefaultClearRenderer);
+var _defaultClearRenderer = require('./utils/defaultClearRenderer');
-var _Async = require('./Async');
-
-var _Async2 = _interopRequireDefault(_Async);
-
-var _AsyncCreatable = require('./AsyncCreatable');
-
-var _AsyncCreatable2 = _interopRequireDefault(_AsyncCreatable);
-
-var _Creatable = require('./Creatable');
-
-var _Creatable2 = _interopRequireDefault(_Creatable);
+var _defaultClearRenderer2 = _interopRequireDefault(_defaultClearRenderer);
var _Dropdown = require('./Dropdown');
@@ -86,1283 +62,1383 @@ var _Value = require('./Value');
var _Value2 = _interopRequireDefault(_Value);
+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; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+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 clone(obj) {
- var copy = {};
- for (var attr in obj) {
- if (obj.hasOwnProperty(attr)) {
- copy[attr] = obj[attr];
- };
- }
- return copy;
+ var copy = {};
+ for (var attr in obj) {
+ if (obj.hasOwnProperty(attr)) {
+ copy[attr] = obj[attr];
+ };
+ }
+ return copy;
}
function isGroup(option) {
- return option && Array.isArray(option.options);
+ return option && Array.isArray(option.options);
}
-function stringifyValue(value) {
- var valueType = typeof value;
- if (valueType === 'string') {
- return value;
- } else if (valueType === 'object') {
- return JSON.stringify(value);
- } else if (valueType === 'number' || valueType === 'boolean') {
- return String(value);
- } else {
- return '';
- }
-}
+var stringifyValue = function stringifyValue(value) {
+ return typeof value === 'string' ? value : value !== null && JSON.stringify(value) || '';
+};
-var stringOrNode = _propTypes2['default'].oneOfType([_propTypes2['default'].string, _propTypes2['default'].node]);
+var stringOrNode = _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.node]);
var instanceId = 1;
-var invalidOptions = {};
-
-var Select = (0, _createReactClass2['default'])({
-
- displayName: 'Select',
-
- propTypes: {
- addLabelText: _propTypes2['default'].string, // placeholder displayed when you want to add a label on a multi-value input
- '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)
- 'aria-labelledby': _propTypes2['default'].string, // HTML ID of an element that should be used as the label (for assistive tech)
- arrowRenderer: _propTypes2['default'].func, // Create drop-down caret element
- autoBlur: _propTypes2['default'].bool, // automatically blur the component when an option is selected
- autofocus: _propTypes2['default'].bool, // autofocus the component on mount
- autosize: _propTypes2['default'].bool, // whether to enable autosizing or not
- backspaceRemoves: _propTypes2['default'].bool, // whether backspace removes an item if there is no text input
- backspaceToRemoveMessage: _propTypes2['default'].string, // Message to use for screenreaders to press backspace to remove the current item - {label} is replaced with the item label
- className: _propTypes2['default'].string, // className for the outer element
- clearAllText: stringOrNode, // title for the "clear" control when multi: true
- clearRenderer: _propTypes2['default'].func, // create clearable x element
- clearValueText: stringOrNode, // title for the "clear" control
- clearable: _propTypes2['default'].bool, // should it be possible to reset value
- deleteRemoves: _propTypes2['default'].bool, // whether backspace removes an item if there is no text input
- delimiter: _propTypes2['default'].string, // delimiter to use to join multiple values for the hidden field value
- disabled: _propTypes2['default'].bool, // whether the Select is disabled or not
- dropdownComponent: _propTypes2['default'].func, // dropdown component to render the menu in
- escapeClearsValue: _propTypes2['default'].bool, // whether escape clears the value when the menu is closed
- filterOption: _propTypes2['default'].func, // method to filter a single option (option, filterString)
- filterOptions: _propTypes2['default'].any, // boolean to enable default filtering or function to filter the options array ([options], filterString, [values])
- ignoreAccents: _propTypes2['default'].bool, // whether to strip diacritics when filtering
- ignoreCase: _propTypes2['default'].bool, // whether to perform case-insensitive filtering
- inputProps: _propTypes2['default'].object, // custom attributes for the Input
- inputRenderer: _propTypes2['default'].func, // returns a custom input component
- instanceId: _propTypes2['default'].string, // set the components instanceId
- isLoading: _propTypes2['default'].bool, // whether the Select is loading externally or not (such as options being loaded)
- isOpen: _propTypes2['default'].bool, // whether the Select dropdown menu is open or not
- joinValues: _propTypes2['default'].bool, // joins multiple values into a single form field with the delimiter (legacy mode)
- labelKey: _propTypes2['default'].string, // path of the label value in option objects
- matchPos: _propTypes2['default'].string, // (any|start) match the start or entire string when filtering
- matchProp: _propTypes2['default'].string, // (any|label|value) which option property to filter on
- menuBuffer: _propTypes2['default'].number, // optional buffer (in px) between the bottom of the viewport and the bottom of the menu
- menuContainerStyle: _propTypes2['default'].object, // optional style to apply to the menu container
- menuRenderer: _propTypes2['default'].func, // renders a custom menu with options
- menuStyle: _propTypes2['default'].object, // optional style to apply to the menu
- multi: _propTypes2['default'].bool, // multi-value input
- name: _propTypes2['default'].string, // generates a hidden tag with this field name for html forms
- noResultsText: stringOrNode, // placeholder displayed when there are no matching search results
- onBlur: _propTypes2['default'].func, // onBlur handler: function (event) {}
- onBlurResetsInput: _propTypes2['default'].bool, // whether input is cleared on blur
- onChange: _propTypes2['default'].func, // onChange handler: function (newValue) {}
- onClose: _propTypes2['default'].func, // fires when the menu is closed
- onCloseResetsInput: _propTypes2['default'].bool, // whether input is cleared when menu is closed through the arrow
- onFocus: _propTypes2['default'].func, // onFocus handler: function (event) {}
- onInputChange: _propTypes2['default'].func, // onInputChange handler: function (inputValue) {}
- onInputKeyDown: _propTypes2['default'].func, // input keyDown handler: function (event) {}
- onMenuScrollToBottom: _propTypes2['default'].func, // fires when the menu is scrolled to the bottom; can be used to paginate options
- onOpen: _propTypes2['default'].func, // fires when the menu is opened
- onValueClick: _propTypes2['default'].func, // onClick handler for value labels: function (value, event) {}
- openAfterFocus: _propTypes2['default'].bool, // boolean to enable opening dropdown when focused
- openOnFocus: _propTypes2['default'].bool, // always open options menu on focus
- optionClassName: _propTypes2['default'].string, // additional class(es) to apply to the elements
- optionComponent: _propTypes2['default'].func, // option component to render in dropdown
- optionGroupComponent: _propTypes2['default'].func, // option group component to render in dropdown
- optionRenderer: _propTypes2['default'].func, // optionRenderer: function (option) {}
- options: _propTypes2['default'].array, // array of options
- pageSize: _propTypes2['default'].number, // number of entries to page when using page up/down keys
- placeholder: stringOrNode, // field placeholder, displayed when there's no value
- renderInvalidValues: _propTypes2['default'].bool, // boolean to enable rendering values that do not match any options
- required: _propTypes2['default'].bool, // applies HTML5 required attribute when needed
- resetValue: _propTypes2['default'].any, // value to use when you clear the control
- scrollMenuIntoView: _propTypes2['default'].bool, // boolean to enable the viewport to shift so that the full menu fully visible when engaged
- searchable: _propTypes2['default'].bool, // whether to enable searching feature or not
- simpleValue: _propTypes2['default'].bool, // pass the value to onChange as a simple value (legacy pre 1.0 mode), defaults to false
- style: _propTypes2['default'].object, // optional style to apply to the control
- tabIndex: _propTypes2['default'].string, // optional tab index of the control
- tabSelectsValue: _propTypes2['default'].bool, // whether to treat tabbing out while focused to be value selection
- value: _propTypes2['default'].any, // initial field value
- valueComponent: _propTypes2['default'].func, // value component to render
- valueKey: _propTypes2['default'].string, // path of the label value in option objects
- valueRenderer: _propTypes2['default'].func, // valueRenderer: function (option) {}
- wrapperStyle: _propTypes2['default'].object },
-
- // optional style to apply to the component wrapper
- statics: { Async: _Async2['default'], AsyncCreatable: _AsyncCreatable2['default'], Creatable: _Creatable2['default'] },
-
- getDefaultProps: function getDefaultProps() {
- return {
- addLabelText: 'Add "{label}"?',
- arrowRenderer: _utilsDefaultArrowRenderer2['default'],
- autosize: true,
- backspaceRemoves: true,
- backspaceToRemoveMessage: 'Press backspace to remove {label}',
- clearable: true,
- clearAllText: 'Clear all',
- clearRenderer: _utilsDefaultClearRenderer2['default'],
- clearValueText: 'Clear value',
- deleteRemoves: true,
- delimiter: ',',
- disabled: false,
- dropdownComponent: _Dropdown2['default'],
- escapeClearsValue: true,
- filterOptions: _utilsDefaultFilterOptions2['default'],
- ignoreAccents: true,
- ignoreCase: true,
- inputProps: {},
- isLoading: false,
- joinValues: false,
- labelKey: 'label',
- matchPos: 'any',
- matchProp: 'any',
- menuBuffer: 0,
- menuRenderer: _utilsDefaultMenuRenderer2['default'],
- multi: false,
- noResultsText: 'No results found',
- onBlurResetsInput: true,
- onCloseResetsInput: true,
- optionComponent: _Option2['default'],
- optionGroupComponent: _OptionGroup2['default'],
- pageSize: 5,
- placeholder: 'Select...',
- renderInvalidValues: false,
- required: false,
- scrollMenuIntoView: true,
- searchable: true,
- simpleValue: false,
- tabSelectsValue: true,
- valueComponent: _Value2['default'],
- valueKey: 'value'
- };
- },
-
- getInitialState: function getInitialState() {
- return {
- inputValue: '',
- isFocused: false,
- isOpen: false,
- isPseudoFocused: false,
- required: false
- };
- },
-
- componentWillMount: function componentWillMount() {
- this._flatOptions = this.flattenOptions(this.props.options);
- this._instancePrefix = 'react-select-' + (this.props.instanceId || ++instanceId) + '-';
- var valueArray = this.getValueArray(this.props.value);
-
- if (this.props.required) {
- this.setState({
- required: this.handleRequired(valueArray[0], this.props.multi)
- });
- }
- },
-
- componentDidMount: function componentDidMount() {
- if (this.props.autofocus) {
- this.focus();
- }
- },
-
- componentWillReceiveProps: function componentWillReceiveProps(nextProps) {
- if (nextProps.options !== this.props.options) {
- this._flatOptions = this.flattenOptions(nextProps.options);
- }
-
- var valueArray = this.getValueArray(nextProps.value, nextProps);
-
- if (!nextProps.isOpen && this.props.isOpen) {
- this.closeMenu();
- }
-
- if (nextProps.required) {
- this.setState({
- required: this.handleRequired(valueArray[0], nextProps.multi)
- });
- }
- },
-
- componentWillUpdate: function componentWillUpdate(nextProps, nextState) {
- if (nextState.isOpen !== this.state.isOpen) {
- this.toggleTouchOutsideEvent(nextState.isOpen);
- var handler = nextState.isOpen ? nextProps.onOpen : nextProps.onClose;
- handler && handler();
- }
- },
-
- componentDidUpdate: function componentDidUpdate(prevProps, prevState) {
- // focus to the selected option
- if (this.menu && this.focused && this.state.isOpen && !this.hasScrolledToOption) {
- var focusedOptionNode = _reactDom2['default'].findDOMNode(this.focused);
- var focusedOptionPreviousSibling = focusedOptionNode.previousSibling;
- var focusedOptionParent = focusedOptionNode.parentElement;
- var menuNode = _reactDom2['default'].findDOMNode(this.menu);
- if (focusedOptionPreviousSibling) {
- menuNode.scrollTop = focusedOptionPreviousSibling.offsetTop;
- } else if (focusedOptionParent && focusedOptionParent === 'Select-menu') {
- menuNode.scrollTop = focusedOptionParent.offsetTop;
- } else {
- menuNode.scrollTop = focusedOptionNode.offsetTop;
- }
- this.hasScrolledToOption = true;
- } else if (!this.state.isOpen) {
- this.hasScrolledToOption = false;
- }
-
- if (this._scrollToFocusedOptionOnUpdate && this.focused && this.menu) {
- this._scrollToFocusedOptionOnUpdate = false;
- var focusedDOM = _reactDom2['default'].findDOMNode(this.focused);
- var menuDOM = _reactDom2['default'].findDOMNode(this.menu);
- var focusedRect = focusedDOM.getBoundingClientRect();
- var menuRect = menuDOM.getBoundingClientRect();
- if (focusedRect.bottom > menuRect.bottom || focusedRect.top < menuRect.top) {
- menuDOM.scrollTop = focusedDOM.offsetTop + focusedDOM.clientHeight - menuDOM.offsetHeight;
- }
- }
- if (this.props.scrollMenuIntoView && this.menuContainer) {
- var menuContainerRect = this.menuContainer.getBoundingClientRect();
- if (window.innerHeight < menuContainerRect.bottom + this.props.menuBuffer) {
- window.scrollBy(0, menuContainerRect.bottom + this.props.menuBuffer - window.innerHeight);
- }
- }
- if (prevProps.disabled !== this.props.disabled) {
- this.setState({ isFocused: false }); // eslint-disable-line react/no-did-update-set-state
- this.closeMenu();
- }
- },
-
- componentWillUnmount: function componentWillUnmount() {
- if (!document.removeEventListener && document.detachEvent) {
- document.detachEvent('ontouchstart', this.handleTouchOutside);
- } else {
- document.removeEventListener('touchstart', this.handleTouchOutside);
- }
- },
-
- toggleTouchOutsideEvent: function toggleTouchOutsideEvent(enabled) {
- if (enabled) {
- if (!document.addEventListener && document.attachEvent) {
- document.attachEvent('ontouchstart', this.handleTouchOutside);
- } else {
- document.addEventListener('touchstart', this.handleTouchOutside);
- }
- } else {
- if (!document.removeEventListener && document.detachEvent) {
- document.detachEvent('ontouchstart', this.handleTouchOutside);
- } else {
- document.removeEventListener('touchstart', this.handleTouchOutside);
- }
- }
- },
-
- handleTouchOutside: function handleTouchOutside(event) {
- // handle touch outside on ios to dismiss menu
- if (this.wrapper && !this.wrapper.contains(event.target) && this.menuContainer && !this.menuContainer.contains(event.target)) {
- this.closeMenu();
- }
- },
-
- focus: function focus() {
- if (!this.input) return;
- this.input.focus();
- },
-
- blurInput: function blurInput() {
- if (!this.input) return;
- this.input.blur();
- },
-
- handleTouchMove: function handleTouchMove(event) {
- // Set a flag that the view is being dragged
- this.dragging = true;
- },
-
- handleTouchStart: function handleTouchStart(event) {
- // Set a flag that the view is not being dragged
- this.dragging = false;
- },
-
- handleTouchEnd: function handleTouchEnd(event) {
- // Check if the view is being dragged, In this case
- // we don't want to fire the click event (because the user only wants to scroll)
- if (this.dragging) return;
-
- // Fire the mouse events
- this.handleMouseDown(event);
- },
-
- handleTouchEndClearValue: function handleTouchEndClearValue(event) {
- // Check if the view is being dragged, In this case
- // we don't want to fire the click event (because the user only wants to scroll)
- if (this.dragging) return;
-
- // Clear the value
- this.clearValue(event);
- },
-
- handleMouseDown: function handleMouseDown(event) {
- // if the event was triggered by a mousedown and not the primary
- // button, or if the component is disabled, ignore it.
- if (this.props.disabled || event.type === 'mousedown' && event.button !== 0) {
- return;
- }
-
- if (event.target.tagName === 'INPUT') {
- return;
- }
-
- // prevent default event handlers
- event.stopPropagation();
- event.preventDefault();
-
- // for the non-searchable select, toggle the menu
- if (!this.props.searchable) {
- this.focus();
- return this.setState({
- isOpen: !this.state.isOpen
- });
- }
-
- if (this.state.isFocused) {
- // On iOS, we can get into a state where we think the input is focused but it isn't really,
- // since iOS ignores programmatic calls to input.focus() that weren't triggered by a click event.
- // Call focus() again here to be safe.
- this.focus();
-
- var input = this.input;
- if (typeof input.getInput === 'function') {
- // Get the actual DOM input if the ref is an component
- input = input.getInput();
- }
-
- // clears the value so that the cursor will be at the end of input when the component re-renders
- input.value = '';
-
- // if the input is focused, ensure the menu is open
- this.setState({
- isOpen: true,
- isPseudoFocused: false
- });
- } else {
- // otherwise, focus the input and open the menu
- this._openAfterFocus = true;
- this.focus();
- }
- },
-
- handleMouseDownOnArrow: function handleMouseDownOnArrow(event) {
- // if the event was triggered by a mousedown and not the primary
- // button, or if the component is disabled, ignore it.
- if (this.props.disabled || event.type === 'mousedown' && event.button !== 0) {
- return;
- }
- // If the menu isn't open, let the event bubble to the main handleMouseDown
- if (!this.state.isOpen) {
- return;
- }
- // prevent default event handlers
- event.stopPropagation();
- event.preventDefault();
- // close the menu
- this.closeMenu();
- },
-
- handleMouseDownOnMenu: function handleMouseDownOnMenu(event) {
- // if the event was triggered by a mousedown and not the primary
- // button, or if the component is disabled, ignore it.
- if (this.props.disabled || event.type === 'mousedown' && event.button !== 0) {
- return;
- }
- event.stopPropagation();
- event.preventDefault();
-
- this._openAfterFocus = true;
- this.focus();
- },
-
- closeMenu: function closeMenu() {
- if (this.props.onCloseResetsInput) {
- this.setState({
- isOpen: false,
- isPseudoFocused: this.state.isFocused && !this.props.multi,
- inputValue: ''
- });
- } else {
- this.setState({
- isOpen: false,
- isPseudoFocused: this.state.isFocused && !this.props.multi,
- inputValue: this.state.inputValue
- });
- }
- this.hasScrolledToOption = false;
- },
-
- handleInputFocus: function handleInputFocus(event) {
- if (this.props.disabled) return;
- var isOpen = this.state.isOpen || this._openAfterFocus || this.props.openOnFocus;
- if (this.props.onFocus) {
- this.props.onFocus(event);
- }
- this.setState({
- isFocused: true,
- isOpen: isOpen
- });
- this._openAfterFocus = false;
- },
-
- handleInputBlur: function handleInputBlur(event) {
- // The check for menu.contains(activeElement) is necessary to prevent IE11's scrollbar from closing the menu in certain contexts.
- if (this.menu && (this.menu === document.activeElement || this.menu.contains(document.activeElement))) {
- this.focus();
- return;
- }
-
- if (this.props.onBlur) {
- this.props.onBlur(event);
- }
- var onBlurredState = {
- isFocused: false,
- isOpen: false,
- isPseudoFocused: false
- };
- if (this.props.onBlurResetsInput) {
- onBlurredState.inputValue = '';
- }
- this.setState(onBlurredState);
- },
-
- handleInputChange: function handleInputChange(event) {
- var newInputValue = event.target.value;
-
- if (this.state.inputValue !== event.target.value && this.props.onInputChange) {
- var nextState = this.props.onInputChange(newInputValue);
- // Note: != used deliberately here to catch undefined and null
- if (nextState != null && typeof nextState !== 'object') {
- newInputValue = '' + nextState;
- }
- }
-
- this.setState({
- isOpen: true,
- isPseudoFocused: false,
- inputValue: newInputValue
- });
- },
-
- handleKeyDown: function handleKeyDown(event) {
- if (this.props.disabled) return;
-
- if (typeof this.props.onInputKeyDown === 'function') {
- this.props.onInputKeyDown(event);
- if (event.defaultPrevented) {
- return;
- }
- }
-
- switch (event.keyCode) {
- case 8:
- // backspace
- if (!this.state.inputValue && this.props.backspaceRemoves) {
- event.preventDefault();
- this.popValue();
- }
- return;
- case 9:
- // tab
- if (event.shiftKey || !this.state.isOpen || !this.props.tabSelectsValue) {
- return;
- }
- this.selectFocusedOption();
- return;
- case 13:
- // enter
- if (!this.state.isOpen) return;
- event.stopPropagation();
- this.selectFocusedOption();
- break;
- case 27:
- // escape
- if (this.state.isOpen) {
- this.closeMenu();
- event.stopPropagation();
- } else if (this.props.clearable && this.props.escapeClearsValue) {
- this.clearValue(event);
- event.stopPropagation();
- }
- break;
- case 38:
- // up
- this.focusPreviousOption();
- break;
- case 40:
- // down
- this.focusNextOption();
- break;
- case 33:
- // page up
- this.focusPageUpOption();
- break;
- case 34:
- // page down
- this.focusPageDownOption();
- break;
- case 35:
- // end key
- if (event.shiftKey) {
- return;
- }
- this.focusEndOption();
- break;
- case 36:
- // home key
- if (event.shiftKey) {
- return;
- }
- this.focusStartOption();
- break;
- case 46:
- // backspace
- if (!this.state.inputValue && this.props.deleteRemoves) {
- event.preventDefault();
- this.popValue();
- }
- return;
- default:
- return;
- }
- event.preventDefault();
- },
-
- handleValueClick: function handleValueClick(option, event) {
- if (!this.props.onValueClick) return;
- this.props.onValueClick(option, event);
- },
-
- handleMenuScroll: function handleMenuScroll(event) {
- if (!this.props.onMenuScrollToBottom) return;
- var target = event.target;
-
- if (target.scrollHeight > target.offsetHeight && !(target.scrollHeight - target.offsetHeight - target.scrollTop)) {
- this.props.onMenuScrollToBottom();
- }
- },
-
- handleRequired: function handleRequired(value, multi) {
- if (!value) return true;
- return multi ? value.length === 0 : Object.keys(value).length === 0;
- },
-
- getOptionLabel: 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
- */
- getValueArray: function getValueArray(value, nextProps) {
- var _this = this;
-
- /** support optionally passing in the `nextProps` so `componentWillReceiveProps` updates will function as expected */
- var props = typeof nextProps === 'object' ? nextProps : this.props;
- if (props.multi) {
- if (typeof value === 'string') value = value.split(props.delimiter);
- if (!Array.isArray(value)) {
- if (value === null || value === undefined) return [];
- value = [value];
- }
- return value.map(function (value) {
- return _this.expandValue(value, props);
- }).filter(function (i) {
- return i;
- });
- }
- var expandedValue = this.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)
- */
- expandValue: function expandValue(value, props) {
- var valueType = typeof value;
- if (valueType !== 'string' && valueType !== 'number' && valueType !== 'boolean') return value;
- var _props = this.props;
- var labelKey = _props.labelKey;
- var valueKey = _props.valueKey;
- var renderInvalidValues = _props.renderInvalidValues;
-
- var options = this._flatOptions;
- if (!options || value === '') return;
- for (var i = 0; i < options.length; i++) {
- if (options[i][valueKey] === value) return options[i];
- }
-
- // no matching option, return an invalid option if renderInvalidValues is enabled
- if (renderInvalidValues) {
- var _ref;
-
- invalidOptions[value] = invalidOptions[value] || (_ref = {
- invalid: true
- }, _defineProperty(_ref, labelKey, value), _defineProperty(_ref, valueKey, value), _ref);
- return invalidOptions[value];
- }
- },
-
- setValue: function setValue(value) {
- var _this2 = this;
-
- if (this.props.autoBlur) {
- this.blurInput();
- }
- if (!this.props.onChange) return;
- if (this.props.required) {
- var required = this.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];
- }
- this.props.onChange(value);
- },
-
- selectValue: function selectValue(value) {
- var _this3 = this;
-
- //NOTE: update value in the callback to make sure the input value is empty so that there are no styling issues (Chrome had issue otherwise)
- this.hasScrolledToOption = false;
- if (this.props.multi) {
- this.setState({
- inputValue: '',
- focusedIndex: null
- }, function () {
- _this3.addValue(value);
- });
- } else {
- this.setState({
- isOpen: false,
- inputValue: '',
- isPseudoFocused: this.state.isFocused
- }, function () {
- _this3.setValue(value);
- });
- }
- },
-
- addValue: function addValue(value) {
- var valueArray = this.getValueArray(this.props.value);
- var visibleOptions = this._visibleOptions.filter(function (val) {
- return !val.disabled;
- });
- var lastValueIndex = visibleOptions.indexOf(value);
- this.setValue(valueArray.concat(value));
- if (visibleOptions.length - 1 === lastValueIndex) {
- // the last option was selected; focus the second-last one
- this.focusOption(visibleOptions[lastValueIndex - 1]);
- } else if (visibleOptions.length > lastValueIndex) {
- // focus the option below the selected one
- this.focusOption(visibleOptions[lastValueIndex + 1]);
- }
- },
-
- popValue: function popValue() {
- var valueArray = this.getValueArray(this.props.value);
- if (!valueArray.length) return;
- if (valueArray[valueArray.length - 1].clearableValue === false) return;
- this.setValue(valueArray.slice(0, valueArray.length - 1));
- },
-
- removeValue: function removeValue(value) {
- var valueArray = this.getValueArray(this.props.value);
- this.setValue(valueArray.filter(function (i) {
- return i !== value;
- }));
- },
-
- clearValue: function clearValue(event) {
- // if the event was triggered by a mousedown and not the primary
- // button, ignore it.
- if (event && event.type === 'mousedown' && event.button !== 0) {
- return;
- }
- event.stopPropagation();
- event.preventDefault();
- this.setValue(this.getResetValue());
- this.setState({
- isOpen: false,
- inputValue: ''
- }, this.focus);
- },
-
- getResetValue: function getResetValue() {
- if (this.props.resetValue !== undefined) {
- return this.props.resetValue;
- } else if (this.props.multi) {
- return [];
- } else {
- return null;
- }
- },
-
- focusOption: function focusOption(option) {
- this.setState({
- focusedOption: option
- });
- },
-
- focusNextOption: function focusNextOption() {
- this.focusAdjacentOption('next');
- },
-
- focusPreviousOption: function focusPreviousOption() {
- this.focusAdjacentOption('previous');
- },
-
- focusPageUpOption: function focusPageUpOption() {
- this.focusAdjacentOption('page_up');
- },
-
- focusPageDownOption: function focusPageDownOption() {
- this.focusAdjacentOption('page_down');
- },
-
- focusStartOption: function focusStartOption() {
- this.focusAdjacentOption('start');
- },
-
- focusEndOption: function focusEndOption() {
- this.focusAdjacentOption('end');
- },
-
- focusAdjacentOption: function focusAdjacentOption(dir) {
- var options = this._visibleOptions.map(function (option, index) {
- return { option: option, index: index };
- }).filter(function (option) {
- return !option.option.disabled;
- });
- 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)
- });
- return;
- }
- if (!options.length) return;
- var focusedIndex = -1;
- for (var i = 0; i < options.length; i++) {
- if (this._focusedOption === options[i].option) {
- focusedIndex = i;
- break;
- }
- }
- if (dir === 'next' && focusedIndex !== -1) {
- focusedIndex = (focusedIndex + 1) % options.length;
- } else if (dir === 'previous') {
- if (focusedIndex > 0) {
- focusedIndex = focusedIndex - 1;
- } else {
- focusedIndex = options.length - 1;
- }
- } else if (dir === 'start') {
- focusedIndex = 0;
- } else if (dir === 'end') {
- focusedIndex = options.length - 1;
- } else if (dir === 'page_up') {
- var potentialIndex = focusedIndex - this.props.pageSize;
- if (potentialIndex < 0) {
- focusedIndex = 0;
- } else {
- focusedIndex = potentialIndex;
- }
- } else if (dir === 'page_down') {
- var potentialIndex = focusedIndex + this.props.pageSize;
- if (potentialIndex > options.length - 1) {
- focusedIndex = options.length - 1;
- } else {
- focusedIndex = potentialIndex;
- }
- }
-
- if (focusedIndex === -1) {
- focusedIndex = 0;
- }
-
- this.setState({
- focusedIndex: options[focusedIndex].index,
- focusedOption: options[focusedIndex].option
- });
- },
-
- getFocusedOption: function getFocusedOption() {
- return this._focusedOption;
- },
-
- getInputValue: function getInputValue() {
- return this.state.inputValue;
- },
-
- selectFocusedOption: function selectFocusedOption() {
- if (this._focusedOption) {
- return this.selectValue(this._focusedOption);
- }
- },
-
- renderLoading: function renderLoading() {
- if (!this.props.isLoading) return;
- return _react2['default'].createElement(
- 'span',
- { className: 'Select-loading-zone', 'aria-hidden': 'true' },
- _react2['default'].createElement('span', { className: 'Select-loading' })
- );
- },
-
- renderValue: function renderValue(valueArray, isOpen) {
- var _this4 = this;
-
- var renderLabel = this.props.valueRenderer || this.getOptionLabel;
- var ValueComponent = this.props.valueComponent;
- if (!valueArray.length) {
- return !this.state.inputValue ? _react2['default'].createElement(
- 'div',
- { className: 'Select-placeholder' },
- this.props.placeholder
- ) : null;
- }
- var onClick = this.props.onValueClick ? this.handleValueClick : null;
- if (this.props.multi) {
- return valueArray.map(function (value, i) {
- return _react2['default'].createElement(
- ValueComponent,
- {
- id: _this4._instancePrefix + '-value-' + i,
- instancePrefix: _this4._instancePrefix,
- disabled: _this4.props.disabled || value.clearableValue === false,
- key: 'value-' + i + '-' + value[_this4.props.valueKey],
- onClick: onClick,
- onRemove: _this4.removeValue,
- value: value
- },
- renderLabel(value, i),
- _react2['default'].createElement(
- 'span',
- { className: 'Select-aria-only' },
- ' '
- )
- );
- });
- } else if (!this.state.inputValue) {
- if (isOpen) onClick = null;
- return _react2['default'].createElement(
- ValueComponent,
- {
- id: this._instancePrefix + '-value-item',
- disabled: this.props.disabled,
- instancePrefix: this._instancePrefix,
- onClick: onClick,
- value: valueArray[0]
- },
- renderLabel(valueArray[0])
- );
- }
- },
-
- renderInput: function renderInput(valueArray, focusedOptionIndex) {
- var _classNames,
- _this5 = this;
-
- var className = (0, _classnames2['default'])('Select-input', this.props.inputProps.className);
- var isOpen = !!this.state.isOpen;
-
- var ariaOwns = (0, _classnames2['default'])((_classNames = {}, _defineProperty(_classNames, this._instancePrefix + '-list', isOpen), _defineProperty(_classNames, this._instancePrefix + '-backspace-remove-message', this.props.multi && !this.props.disabled && this.state.isFocused && !this.state.inputValue), _classNames));
-
- // TODO: Check how this project includes Object.assign()
- var inputProps = _extends({}, this.props.inputProps, {
- role: 'combobox',
- 'aria-expanded': '' + isOpen,
- 'aria-owns': ariaOwns,
- 'aria-haspopup': '' + isOpen,
- 'aria-activedescendant': isOpen ? this._instancePrefix + '-option-' + focusedOptionIndex : this._instancePrefix + '-value',
- 'aria-describedby': this.props['aria-describedby'],
- 'aria-labelledby': this.props['aria-labelledby'],
- 'aria-label': this.props['aria-label'],
- className: className,
- tabIndex: this.props.tabIndex,
- onBlur: this.handleInputBlur,
- onChange: this.handleInputChange,
- onFocus: this.handleInputFocus,
- ref: function ref(_ref2) {
- return _this5.input = _ref2;
- },
- required: this.state.required,
- value: this.state.inputValue
- });
-
- if (this.props.inputRenderer) {
- return this.props.inputRenderer(inputProps);
- }
-
- if (this.props.disabled || !this.props.searchable) {
- var _props$inputProps = this.props.inputProps;
- var inputClassName = _props$inputProps.inputClassName;
-
- var divProps = _objectWithoutProperties(_props$inputProps, ['inputClassName']);
-
- 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',
- className: className,
- tabIndex: this.props.tabIndex || 0,
- onBlur: this.handleInputBlur,
- onFocus: this.handleInputFocus,
- ref: function (ref) {
- return _this5.input = ref;
- },
- 'aria-readonly': '' + !!this.props.disabled,
- style: { border: 0, width: 1, display: 'inline-block' } }));
- }
-
- if (this.props.autosize) {
- return _react2['default'].createElement(_reactInputAutosize2['default'], _extends({}, inputProps, { minWidth: '5' }));
- }
- return _react2['default'].createElement(
- 'div',
- { className: className },
- _react2['default'].createElement('input', inputProps)
- );
- },
-
- renderClear: function renderClear() {
-
- if (!this.props.clearable || this.props.value === undefined || this.props.value === null || this.props.multi && !this.props.value.length || this.props.disabled || this.props.isLoading) return;
- 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,
- onMouseDown: this.clearValue,
- onTouchStart: this.handleTouchStart,
- onTouchMove: this.handleTouchMove,
- onTouchEnd: this.handleTouchEndClearValue
- },
- clear
- );
- },
-
- renderArrow: function renderArrow() {
- var onMouseDown = this.handleMouseDownOnArrow;
- var isOpen = this.state.isOpen;
- var arrow = this.props.arrowRenderer({ onMouseDown: onMouseDown, isOpen: isOpen });
-
- return _react2['default'].createElement(
- 'span',
- {
- className: 'Select-arrow-zone',
- onMouseDown: onMouseDown
- },
- arrow
- );
- },
-
- filterFlatOptions: function filterFlatOptions(excludeOptions) {
- var filterValue = this.state.inputValue;
- var flatOptions = this._flatOptions;
- if (this.props.filterOptions) {
- // Maintain backwards compatibility with boolean attribute
- var filterOptions = typeof this.props.filterOptions === 'function' ? this.props.filterOptions : _utilsDefaultFilterOptions2['default'];
-
- return filterOptions(flatOptions, filterValue, excludeOptions, {
- 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
- });
- } else {
- return flatOptions;
- }
- },
-
- flattenOptions: function flattenOptions(options, group) {
- if (!options) return [];
- var flatOptions = [];
- for (var i = 0; i < options.length; i++) {
- // We clone each option with a pointer to its parent group for efficient unflattening
- var optionCopy = clone(options[i]);
- optionCopy.isInTree = false;
- if (group) {
- optionCopy.group = group;
- }
- if (isGroup(optionCopy)) {
- flatOptions = flatOptions.concat(this.flattenOptions(optionCopy.options, optionCopy));
- optionCopy.options = [];
- } else {
- flatOptions.push(optionCopy);
- }
- }
- return flatOptions;
- },
-
- unflattenOptions: function unflattenOptions(flatOptions) {
- var groupedOptions = [];
- var parent = undefined,
- child = undefined;
-
- // Remove all ancestor groups from the tree
- flatOptions.forEach(function (option) {
- option.isInTree = false;
- parent = option.group;
- while (parent) {
- if (parent.isInTree) {
- parent.options = [];
- parent.isInTree = false;
- }
- parent = parent.group;
- }
- });
-
- // Now reconstruct the options tree
- flatOptions.forEach(function (option) {
- child = option;
- parent = child.group;
- while (parent) {
- if (!child.isInTree) {
- parent.options.push(child);
- child.isInTree = true;
- }
-
- child = parent;
- parent = child.group;
- }
- if (!child.isInTree) {
- groupedOptions.push(child);
- child.isInTree = true;
- }
- });
- return groupedOptions;
- },
-
- onOptionRef: function onOptionRef(ref, isFocused) {
- if (isFocused) {
- this.focused = ref;
- }
- },
-
- renderMenu: function renderMenu(options, valueArray, focusedOption) {
- if (options && options.length) {
- return this.props.menuRenderer({
- focusedOption: focusedOption,
- focusOption: this.focusOption,
- instancePrefix: this._instancePrefix,
- labelKey: this.props.labelKey,
- onFocus: this.focusOption,
- onOptionRef: this.onOptionRef,
- onSelect: this.selectValue,
- optionClassName: this.props.optionClassName,
- optionComponent: this.props.optionComponent,
- optionGroupComponent: this.props.optionGroupComponent,
- optionRenderer: this.props.optionRenderer || this.getOptionLabel,
- options: options,
- selectValue: this.selectValue,
- valueArray: valueArray,
- valueKey: this.props.valueKey
- });
- } else if (this.props.noResultsText) {
- return _react2['default'].createElement(
- 'div',
- { className: 'Select-noresults' },
- this.props.noResultsText
- );
- } else {
- return null;
- }
- },
-
- renderHiddenField: function renderHiddenField(valueArray) {
- var _this6 = this;
-
- if (!this.props.name) return;
- if (this.props.joinValues) {
- var value = valueArray.map(function (i) {
- return stringifyValue(i[_this6.props.valueKey]);
- }).join(this.props.delimiter);
- return _react2['default'].createElement('input', {
- type: 'hidden',
- ref: function (ref) {
- return _this6.value = ref;
- },
- name: this.props.name,
- value: value,
- disabled: this.props.disabled });
- }
- return valueArray.map(function (item, index) {
- return _react2['default'].createElement('input', { key: 'hidden.' + index,
- type: 'hidden',
- ref: 'value' + index,
- name: _this6.props.name,
- value: stringifyValue(item[_this6.props.valueKey]),
- disabled: _this6.props.disabled });
- });
- },
-
- getFocusableOptionIndex: function getFocusableOptionIndex(selectedOption) {
- var options = this._visibleOptions;
- if (!options.length) return null;
-
- var valueKey = this.props.valueKey;
- var focusedOption = this.state.focusedOption || selectedOption;
- if (focusedOption && !focusedOption.disabled) {
- var focusedOptionIndex = -1;
- options.some(function (option, index) {
- var isOptionEqual = option[valueKey] === focusedOption[valueKey];
- if (isOptionEqual) {
- focusedOptionIndex = index;
- }
- return isOptionEqual;
- });
- if (focusedOptionIndex !== -1) {
- return focusedOptionIndex;
- }
- }
-
- for (var i = 0; i < options.length; i++) {
- if (!options[i].disabled) return i;
- }
- return null;
- },
-
- renderOuter: function renderOuter(options, valueArray, focusedOption) {
- var _this7 = this;
-
- var Dropdown = this.props.dropdownComponent;
- var menu = this.renderMenu(options, valueArray, focusedOption);
- if (!menu) {
- return null;
- }
-
- return _react2['default'].createElement(
- Dropdown,
- null,
- _react2['default'].createElement(
- 'div',
- { ref: function (ref) {
- return _this7.menuContainer = ref;
- }, className: 'Select-menu-outer', style: this.props.menuContainerStyle },
- _react2['default'].createElement(
- 'div',
- { ref: function (ref) {
- return _this7.menu = ref;
- }, role: 'listbox', className: 'Select-menu', id: this._instancePrefix + '-list',
- style: this.props.menuStyle,
- onScroll: this.handleMenuScroll,
- onMouseDown: this.handleMouseDownOnMenu },
- menu
- )
- )
- );
- },
-
- render: function render() {
- var _this8 = this;
-
- var valueArray = this.getValueArray(this.props.value);
- this._visibleOptions = this.filterFlatOptions(this.props.multi ? valueArray : null);
- var options = this.unflattenOptions(this._visibleOptions);
- var isOpen = typeof this.props.isOpen === 'boolean' ? this.props.isOpen : this.state.isOpen;
- if (this.props.multi && !options.length && valueArray.length && !this.state.inputValue) isOpen = false;
- var focusedOptionIndex = this.getFocusableOptionIndex(valueArray[0]);
-
- var focusedOption = null;
- if (focusedOptionIndex !== null) {
- focusedOption = this._focusedOption = this._visibleOptions[focusedOptionIndex];
- } else {
- focusedOption = this._focusedOption = null;
- }
- var className = (0, _classnames2['default'])('Select', this.props.className, {
- 'Select--multi': this.props.multi,
- 'Select--single': !this.props.multi,
- 'is-clearable': this.props.clearable,
- 'is-disabled': this.props.disabled,
- 'is-focused': this.state.isFocused,
- 'is-loading': this.props.isLoading,
- 'is-open': isOpen,
- 'is-pseudo-focused': this.state.isPseudoFocused,
- 'is-searchable': this.props.searchable,
- 'has-value': valueArray.length
- });
-
- var removeMessage = null;
- if (this.props.multi && !this.props.disabled && valueArray.length && !this.state.inputValue && this.state.isFocused && this.props.backspaceRemoves) {
- removeMessage = _react2['default'].createElement(
- 'span',
- { id: this._instancePrefix + '-backspace-remove-message', className: 'Select-aria-only', 'aria-live': 'assertive' },
- this.props.backspaceToRemoveMessage.replace('{label}', valueArray[valueArray.length - 1][this.props.labelKey])
- );
- }
-
- return _react2['default'].createElement(
- 'div',
- { ref: function (ref) {
- return _this8.wrapper = ref;
- },
- className: className,
- style: this.props.wrapperStyle },
- this.renderHiddenField(valueArray),
- _react2['default'].createElement(
- 'div',
- { ref: function (ref) {
- return _this8.control = ref;
- },
- className: 'Select-control',
- style: this.props.style,
- onKeyDown: this.handleKeyDown,
- onMouseDown: this.handleMouseDown,
- onTouchEnd: this.handleTouchEnd,
- onTouchStart: this.handleTouchStart,
- onTouchMove: this.handleTouchMove
- },
- _react2['default'].createElement(
- 'span',
- { className: 'Select-multi-value-wrapper', id: this._instancePrefix + '-value' },
- this.renderValue(valueArray, isOpen),
- this.renderInput(valueArray, focusedOptionIndex)
- ),
- removeMessage,
- this.renderLoading(),
- this.renderClear(),
- this.renderArrow()
- ),
- isOpen ? this.renderOuter(options, !this.props.multi ? valueArray : null, focusedOption) : null
- );
- }
-
-});
-
-exports['default'] = Select;
-module.exports = exports['default'];
\ No newline at end of file
+var Select = function (_React$Component) {
+ _inherits(Select, _React$Component);
+
+ function Select(props) {
+ _classCallCheck(this, Select);
+
+ 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) {
+ return _this[fn] = _this[fn].bind(_this);
+ });
+
+ _this.state = {
+ inputValue: '',
+ isFocused: false,
+ isOpen: false,
+ isPseudoFocused: false,
+ required: false
+ };
+ return _this;
+ }
+
+ _createClass(Select, [{
+ key: 'componentWillMount',
+ value: function componentWillMount() {
+ this._flatOptions = this.flattenOptions(this.props.options);
+ this._instancePrefix = 'react-select-' + (this.props.instanceId || ++instanceId) + '-';
+ var valueArray = this.getValueArray(this.props.value);
+
+ if (this.props.required) {
+ this.setState({
+ required: this.handleRequired(valueArray[0], this.props.multi)
+ });
+ }
+ }
+ }, {
+ key: 'componentDidMount',
+ value: function componentDidMount() {
+ if (this.props.autofocus) {
+ this.focus();
+ }
+ }
+ }, {
+ key: 'componentWillReceiveProps',
+ value: function componentWillReceiveProps(nextProps) {
+ if (nextProps.options !== this.props.options) {
+ this._flatOptions = this.flattenOptions(nextProps.options);
+ }
+
+ var valueArray = this.getValueArray(nextProps.value, nextProps);
+
+ if (!nextProps.isOpen && this.props.isOpen) {
+ this.closeMenu();
+ }
+
+ if (nextProps.required) {
+ this.setState({
+ required: this.handleRequired(valueArray[0], nextProps.multi)
+ });
+ } else if (this.props.required) {
+ // Used to be required but it's not any more
+ this.setState({ required: false });
+ }
+ }
+ }, {
+ key: 'componentWillUpdate',
+ value: function componentWillUpdate(nextProps, nextState) {
+ if (nextState.isOpen !== this.state.isOpen) {
+ this.toggleTouchOutsideEvent(nextState.isOpen);
+ var handler = nextState.isOpen ? nextProps.onOpen : nextProps.onClose;
+ handler && handler();
+ }
+ }
+ }, {
+ key: 'componentDidUpdate',
+ value: function componentDidUpdate(prevProps, prevState) {
+ // focus to the selected option
+ if (this.menu && this.focused && this.state.isOpen && !this.hasScrolledToOption) {
+ var focusedOptionNode = _reactDom2.default.findDOMNode(this.focused);
+ var focusedOptionPreviousSibling = focusedOptionNode.previousSibling;
+ var focusedOptionParent = focusedOptionNode.parentElement;
+ var menuNode = _reactDom2.default.findDOMNode(this.menu);
+ if (focusedOptionPreviousSibling) {
+ menuNode.scrollTop = focusedOptionPreviousSibling.offsetTop;
+ } else if (focusedOptionParent && focusedOptionParent === 'Select-menu') {
+ menuNode.scrollTop = focusedOptionParent.offsetTop;
+ } else {
+ menuNode.scrollTop = focusedOptionNode.offsetTop;
+ }
+ this.hasScrolledToOption = true;
+ } else if (!this.state.isOpen) {
+ this.hasScrolledToOption = false;
+ }
+
+ if (this._scrollToFocusedOptionOnUpdate && this.focused && this.menu) {
+ this._scrollToFocusedOptionOnUpdate = false;
+ var focusedDOM = _reactDom2.default.findDOMNode(this.focused);
+ var menuDOM = _reactDom2.default.findDOMNode(this.menu);
+ var focusedRect = focusedDOM.getBoundingClientRect();
+ var menuRect = menuDOM.getBoundingClientRect();
+ if (focusedRect.bottom > menuRect.bottom) {
+ menuDOM.scrollTop = focusedDOM.offsetTop + focusedDOM.clientHeight - menuDOM.offsetHeight;
+ } else if (focusedRect.top < menuRect.top) {
+ menuDOM.scrollTop = focusedDOM.offsetTop;
+ }
+ }
+ if (this.props.scrollMenuIntoView && this.menuContainer) {
+ var menuContainerRect = this.menuContainer.getBoundingClientRect();
+ if (window.innerHeight < menuContainerRect.bottom + this.props.menuBuffer) {
+ window.scrollBy(0, menuContainerRect.bottom + this.props.menuBuffer - window.innerHeight);
+ }
+ }
+ if (prevProps.disabled !== this.props.disabled) {
+ this.setState({ isFocused: false }); // eslint-disable-line react/no-did-update-set-state
+ this.closeMenu();
+ }
+ }
+ }, {
+ key: 'componentWillUnmount',
+ value: function componentWillUnmount() {
+ if (!document.removeEventListener && document.detachEvent) {
+ document.detachEvent('ontouchstart', this.handleTouchOutside);
+ } else {
+ document.removeEventListener('touchstart', this.handleTouchOutside);
+ }
+ }
+ }, {
+ key: 'toggleTouchOutsideEvent',
+ value: function toggleTouchOutsideEvent(enabled) {
+ if (enabled) {
+ if (!document.addEventListener && document.attachEvent) {
+ document.attachEvent('ontouchstart', this.handleTouchOutside);
+ } else {
+ document.addEventListener('touchstart', this.handleTouchOutside);
+ }
+ } else {
+ if (!document.removeEventListener && document.detachEvent) {
+ document.detachEvent('ontouchstart', this.handleTouchOutside);
+ } else {
+ document.removeEventListener('touchstart', this.handleTouchOutside);
+ }
+ }
+ }
+ }, {
+ key: 'handleTouchOutside',
+ value: function handleTouchOutside(event) {
+ // handle touch outside on ios to dismiss menu
+ if (this.wrapper && !this.wrapper.contains(event.target) && this.menuContainer && !this.menuContainer.contains(event.target)) {
+ this.closeMenu();
+ }
+ }
+ }, {
+ key: 'focus',
+ value: function focus() {
+ if (!this.input) return;
+ this.input.focus();
+ }
+ }, {
+ key: 'blurInput',
+ value: function blurInput() {
+ if (!this.input) return;
+ this.input.blur();
+ }
+ }, {
+ key: 'handleTouchMove',
+ value: function handleTouchMove(event) {
+ // Set a flag that the view is being dragged
+ this.dragging = true;
+ }
+ }, {
+ key: 'handleTouchStart',
+ value: function handleTouchStart(event) {
+ // Set a flag that the view is not being dragged
+ this.dragging = false;
+ }
+ }, {
+ key: 'handleTouchEnd',
+ value: function handleTouchEnd(event) {
+ // Check if the view is being dragged, In this case
+ // we don't want to fire the click event (because the user only wants to scroll)
+ if (this.dragging) return;
+
+ // Fire the mouse events
+ this.handleMouseDown(event);
+ }
+ }, {
+ key: 'handleTouchEndClearValue',
+ value: function handleTouchEndClearValue(event) {
+ // Check if the view is being dragged, In this case
+ // we don't want to fire the click event (because the user only wants to scroll)
+ if (this.dragging) return;
+
+ // Clear the value
+ this.clearValue(event);
+ }
+ }, {
+ key: 'handleMouseDown',
+ value: function handleMouseDown(event) {
+ // if the event was triggered by a mousedown and not the primary
+ // button, or if the component is disabled, ignore it.
+ if (this.props.disabled || event.type === 'mousedown' && event.button !== 0) {
+ return;
+ }
+
+ if (event.target.tagName === 'INPUT') {
+ return;
+ }
+
+ // prevent default event handlers
+ event.stopPropagation();
+ event.preventDefault();
+
+ // 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.focus();
+ return this.setState({
+ isOpen: !this.state.isOpen
+ });
+ }
+
+ if (this.state.isFocused) {
+ // On iOS, we can get into a state where we think the input is focused but it isn't really,
+ // since iOS ignores programmatic calls to input.focus() that weren't triggered by a click event.
+ // Call focus() again here to be safe.
+ this.focus();
+
+ var input = this.input;
+ if (typeof input.getInput === 'function') {
+ // Get the actual DOM input if the ref is an component
+ input = input.getInput();
+ }
+
+ // clears the value so that the cursor will be at the end of input when the component re-renders
+ input.value = '';
+
+ // if the input is focused, ensure the menu is open
+ this.setState({
+ isOpen: true,
+ isPseudoFocused: false
+ });
+ } else {
+ // otherwise, focus the input and open the menu
+ this._openAfterFocus = this.props.openOnClick;
+ this.focus();
+ }
+ }
+ }, {
+ key: 'handleMouseDownOnArrow',
+ value: function handleMouseDownOnArrow(event) {
+ // if the event was triggered by a mousedown and not the primary
+ // button, or if the component is disabled, ignore it.
+ if (this.props.disabled || event.type === 'mousedown' && event.button !== 0) {
+ return;
+ }
+ // If the menu isn't open, let the event bubble to the main handleMouseDown
+ if (!this.state.isOpen) {
+ return;
+ }
+ // prevent default event handlers
+ event.stopPropagation();
+ event.preventDefault();
+ // close the menu
+ this.closeMenu();
+ }
+ }, {
+ key: 'handleMouseDownOnMenu',
+ value: function handleMouseDownOnMenu(event) {
+ // if the event was triggered by a mousedown and not the primary
+ // button, or if the component is disabled, ignore it.
+ if (this.props.disabled || event.type === 'mousedown' && event.button !== 0) {
+ return;
+ }
+ event.stopPropagation();
+ event.preventDefault();
+
+ this._openAfterFocus = true;
+ this.focus();
+ }
+ }, {
+ key: 'closeMenu',
+ value: function closeMenu() {
+ if (this.props.onCloseResetsInput) {
+ this.setState({
+ isOpen: false,
+ isPseudoFocused: this.state.isFocused && !this.props.multi,
+ inputValue: this.handleInputValueChange('')
+ });
+ } else {
+ this.setState({
+ isOpen: false,
+ isPseudoFocused: this.state.isFocused && !this.props.multi
+ });
+ }
+ this.hasScrolledToOption = false;
+ }
+ }, {
+ key: 'handleInputFocus',
+ value: function handleInputFocus(event) {
+ if (this.props.disabled) return;
+ var isOpen = this.state.isOpen || this._openAfterFocus || this.props.openOnFocus;
+ if (this.props.onFocus) {
+ this.props.onFocus(event);
+ }
+ this.setState({
+ isFocused: true,
+ isOpen: isOpen
+ });
+ this._openAfterFocus = false;
+ }
+ }, {
+ key: 'handleInputBlur',
+ value: function handleInputBlur(event) {
+ // The check for menu.contains(activeElement) is necessary to prevent IE11's scrollbar from closing the menu in certain contexts.
+ if (this.menu && (this.menu === document.activeElement || this.menu.contains(document.activeElement))) {
+ this.focus();
+ return;
+ }
+
+ if (this.props.onBlur) {
+ this.props.onBlur(event);
+ }
+ var onBlurredState = {
+ isFocused: false,
+ isOpen: false,
+ isPseudoFocused: false
+ };
+ if (this.props.onBlurResetsInput) {
+ onBlurredState.inputValue = this.handleInputValueChange('');
+ }
+ this.setState(onBlurredState);
+ }
+ }, {
+ key: 'handleInputChange',
+ value: function handleInputChange(event) {
+ var newInputValue = event.target.value;
+
+ if (this.state.inputValue !== event.target.value) {
+ newInputValue = this.handleInputValueChange(newInputValue);
+ }
+
+ this.setState({
+ isOpen: true,
+ isPseudoFocused: false,
+ inputValue: newInputValue
+ });
+ }
+ }, {
+ key: 'handleInputValueChange',
+ value: function handleInputValueChange(newValue) {
+ if (this.props.onInputChange) {
+ var nextState = this.props.onInputChange(newValue);
+ // Note: != used deliberately here to catch undefined and null
+ if (nextState != null && (typeof nextState === 'undefined' ? 'undefined' : _typeof(nextState)) !== 'object') {
+ newValue = '' + nextState;
+ }
+ }
+ return newValue;
+ }
+ }, {
+ key: 'handleKeyDown',
+ value: function handleKeyDown(event) {
+ if (this.props.disabled) return;
+
+ if (typeof this.props.onInputKeyDown === 'function') {
+ this.props.onInputKeyDown(event);
+ if (event.defaultPrevented) {
+ return;
+ }
+ }
+
+ switch (event.keyCode) {
+ case 8:
+ // backspace
+ if (!this.state.inputValue && this.props.backspaceRemoves) {
+ event.preventDefault();
+ this.popValue();
+ }
+ return;
+ case 9:
+ // tab
+ if (event.shiftKey || !this.state.isOpen || !this.props.tabSelectsValue) {
+ return;
+ }
+ this.selectFocusedOption();
+ return;
+ case 13:
+ // enter
+ if (!this.state.isOpen) return;
+ event.stopPropagation();
+ this.selectFocusedOption();
+ break;
+ case 27:
+ // escape
+ if (this.state.isOpen) {
+ this.closeMenu();
+ event.stopPropagation();
+ } else if (this.props.clearable && this.props.escapeClearsValue) {
+ this.clearValue(event);
+ event.stopPropagation();
+ }
+ break;
+ case 38:
+ // up
+ this.focusPreviousOption();
+ break;
+ case 40:
+ // down
+ this.focusNextOption();
+ break;
+ case 33:
+ // page up
+ this.focusPageUpOption();
+ break;
+ case 34:
+ // page down
+ this.focusPageDownOption();
+ break;
+ case 35:
+ // end key
+ if (event.shiftKey) {
+ return;
+ }
+ this.focusEndOption();
+ break;
+ case 36:
+ // home key
+ if (event.shiftKey) {
+ return;
+ }
+ this.focusStartOption();
+ break;
+ case 46:
+ // backspace
+ if (!this.state.inputValue && this.props.deleteRemoves) {
+ event.preventDefault();
+ this.popValue();
+ }
+ return;
+ default:
+ return;
+ }
+ event.preventDefault();
+ }
+ }, {
+ key: 'handleValueClick',
+ value: function handleValueClick(option, event) {
+ if (!this.props.onValueClick) return;
+ this.props.onValueClick(option, event);
+ }
+ }, {
+ key: 'handleMenuScroll',
+ value: function handleMenuScroll(event) {
+ if (!this.props.onMenuScrollToBottom) return;
+ var target = event.target;
+
+ if (target.scrollHeight > target.offsetHeight && target.scrollHeight - target.offsetHeight - target.scrollTop <= 0) {
+ 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
+ */
+
+ }, {
+ key: 'getValueArray',
+ value: function getValueArray(value, nextProps) {
+ var _this2 = this;
+
+ /** 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;
+ if (props.multi) {
+ if (typeof value === 'string') value = value.split(props.delimiter);
+ if (!Array.isArray(value)) {
+ if (value === null || value === undefined) return [];
+ value = [value];
+ }
+ return value.map(function (value) {
+ return _this2.expandValue(value, props);
+ }).filter(function (i) {
+ return i;
+ });
+ }
+ var expandedValue = this.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 _props = this.props,
+ labelKey = _props.labelKey,
+ valueKey = _props.valueKey,
+ renderInvalidValues = _props.renderInvalidValues;
+
+ var options = this._flatOptions;
+ if (!options || value === '') return;
+ for (var i = 0; i < options.length; i++) {
+ if (options[i][valueKey] === value) return options[i];
+ }
+
+ // no matching option, return an invalid option if renderInvalidValues is enabled
+ if (renderInvalidValues) {
+ var _ref;
+
+ this._invalidOptions = this._invalidOptions || {};
+ this._invalidOptions[value] = this._invalidOptions[value] || (_ref = {
+ invalid: true
+ }, _defineProperty(_ref, labelKey, value), _defineProperty(_ref, valueKey, value), _ref);
+ return this._invalidOptions[value];
+ }
+ }
+ }, {
+ key: 'setValue',
+ value: function setValue(value) {
+ var _this3 = this;
+
+ if (this.props.autoBlur) {
+ this.blurInput();
+ }
+ if (this.props.required) {
+ var required = this.handleRequired(value, this.props.multi);
+ this.setState({ required: required });
+ }
+ 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;
+
+ // NOTE: we actually add/set the value in a callback to make sure the
+ // input value is empty to avoid styling issues in Chrome
+ if (this.props.closeOnSelect) {
+ this.hasScrolledToOption = false;
+ }
+ if (this.props.multi) {
+ var updatedValue = this.props.onSelectResetsInput ? '' : this.state.inputValue;
+ this.setState({
+ focusedIndex: null,
+ inputValue: this.handleInputValueChange(updatedValue),
+ isOpen: !this.props.closeOnSelect
+ }, function () {
+ _this4.addValue(value);
+ });
+ } else {
+ this.setState({
+ inputValue: this.handleInputValueChange(''),
+ isOpen: !this.props.closeOnSelect,
+ isPseudoFocused: this.state.isFocused
+ }, function () {
+ _this4.setValue(value);
+ });
+ }
+ }
+ }, {
+ key: 'addValue',
+ value: function addValue(value) {
+ var valueArray = this.getValueArray(this.props.value);
+ var visibleOptions = this._visibleOptions.filter(function (val) {
+ return !val.disabled;
+ });
+ var lastValueIndex = visibleOptions.indexOf(value);
+ this.setValue(valueArray.concat(value));
+ if (visibleOptions.length - 1 === lastValueIndex) {
+ // the last option was selected; focus the second-last one
+ this.focusOption(visibleOptions[lastValueIndex - 1]);
+ } else if (visibleOptions.length > lastValueIndex) {
+ // focus the option below the selected one
+ this.focusOption(visibleOptions[lastValueIndex + 1]);
+ }
+ }
+ }, {
+ key: 'popValue',
+ value: function popValue() {
+ var valueArray = this.getValueArray(this.props.value);
+ if (!valueArray.length) return;
+ if (valueArray[valueArray.length - 1].clearableValue === false) return;
+ this.setValue(this.props.multi ? valueArray.slice(0, valueArray.length - 1) : null);
+ }
+ }, {
+ key: 'removeValue',
+ value: function removeValue(value) {
+ var valueArray = this.getValueArray(this.props.value);
+ this.setValue(valueArray.filter(function (i) {
+ return i !== value;
+ }));
+ this.focus();
+ }
+ }, {
+ key: 'clearValue',
+ value: function clearValue(event) {
+ // if the event was triggered by a mousedown and not the primary
+ // button, ignore it.
+ if (event && event.type === 'mousedown' && event.button !== 0) {
+ return;
+ }
+ event.stopPropagation();
+ event.preventDefault();
+ this.setValue(this.getResetValue());
+ this.setState({
+ isOpen: false,
+ inputValue: this.handleInputValueChange('')
+ }, this.focus);
+ }
+ }, {
+ key: 'getResetValue',
+ value: function getResetValue() {
+ if (this.props.resetValue !== undefined) {
+ return this.props.resetValue;
+ } else if (this.props.multi) {
+ return [];
+ } else {
+ return null;
+ }
+ }
+ }, {
+ key: 'focusOption',
+ value: function focusOption(option) {
+ this.setState({
+ focusedOption: option
+ });
+ }
+ }, {
+ key: 'focusNextOption',
+ value: function focusNextOption() {
+ this.focusAdjacentOption('next');
+ }
+ }, {
+ key: 'focusPreviousOption',
+ value: function focusPreviousOption() {
+ this.focusAdjacentOption('previous');
+ }
+ }, {
+ key: 'focusPageUpOption',
+ value: function focusPageUpOption() {
+ this.focusAdjacentOption('page_up');
+ }
+ }, {
+ key: 'focusPageDownOption',
+ value: function focusPageDownOption() {
+ this.focusAdjacentOption('page_down');
+ }
+ }, {
+ key: 'focusStartOption',
+ value: function focusStartOption() {
+ this.focusAdjacentOption('start');
+ }
+ }, {
+ key: 'focusEndOption',
+ value: function focusEndOption() {
+ this.focusAdjacentOption('end');
+ }
+ }, {
+ key: 'focusAdjacentOption',
+ value: function focusAdjacentOption(dir) {
+ var options = this._visibleOptions.map(function (option, index) {
+ return { option: option, index: index };
+ }).filter(function (option) {
+ return !option.option.disabled;
+ });
+ 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)
+ });
+ return;
+ }
+ if (!options.length) return;
+ var focusedIndex = -1;
+ for (var i = 0; i < options.length; i++) {
+ if (this._focusedOption === options[i].option) {
+ focusedIndex = i;
+ break;
+ }
+ }
+ if (dir === 'next' && focusedIndex !== -1) {
+ focusedIndex = (focusedIndex + 1) % options.length;
+ } else if (dir === 'previous') {
+ if (focusedIndex > 0) {
+ focusedIndex = focusedIndex - 1;
+ } else {
+ focusedIndex = options.length - 1;
+ }
+ } else if (dir === 'start') {
+ focusedIndex = 0;
+ } else if (dir === 'end') {
+ focusedIndex = options.length - 1;
+ } else if (dir === 'page_up') {
+ var potentialIndex = focusedIndex - this.props.pageSize;
+ if (potentialIndex < 0) {
+ focusedIndex = 0;
+ } else {
+ focusedIndex = potentialIndex;
+ }
+ } else if (dir === 'page_down') {
+ var potentialIndex = focusedIndex + this.props.pageSize;
+ if (potentialIndex > options.length - 1) {
+ focusedIndex = options.length - 1;
+ } else {
+ focusedIndex = potentialIndex;
+ }
+ }
+
+ if (focusedIndex === -1) {
+ focusedIndex = 0;
+ }
+
+ this.setState({
+ focusedIndex: options[focusedIndex].index,
+ focusedOption: options[focusedIndex].option
+ });
+ }
+ }, {
+ key: 'getFocusedOption',
+ value: function getFocusedOption() {
+ return this._focusedOption;
+ }
+ }, {
+ key: 'getInputValue',
+ value: function getInputValue() {
+ return this.state.inputValue;
+ }
+ }, {
+ key: 'selectFocusedOption',
+ value: function selectFocusedOption() {
+ if (this._focusedOption) {
+ return this.selectValue(this._focusedOption);
+ }
+ }
+ }, {
+ key: 'renderLoading',
+ value: function renderLoading() {
+ if (!this.props.isLoading) return;
+ return _react2.default.createElement(
+ 'span',
+ { className: 'Select-loading-zone', 'aria-hidden': 'true' },
+ _react2.default.createElement('span', { className: 'Select-loading' })
+ );
+ }
+ }, {
+ key: 'renderValue',
+ value: function renderValue(valueArray, isOpen) {
+ var _this5 = this;
+
+ var renderLabel = this.props.valueRenderer || this.getOptionLabel;
+ var ValueComponent = this.props.valueComponent;
+ if (!valueArray.length) {
+ return !this.state.inputValue ? _react2.default.createElement(
+ 'div',
+ { className: 'Select-placeholder' },
+ this.props.placeholder
+ ) : null;
+ }
+ var onClick = this.props.onValueClick ? this.handleValueClick : null;
+ if (this.props.multi) {
+ return valueArray.map(function (value, i) {
+ return _react2.default.createElement(
+ ValueComponent,
+ {
+ id: _this5._instancePrefix + '-value-' + i,
+ instancePrefix: _this5._instancePrefix,
+ disabled: _this5.props.disabled || value.clearableValue === false,
+ key: 'value-' + i + '-' + value[_this5.props.valueKey],
+ onClick: onClick,
+ onRemove: _this5.removeValue,
+ value: value
+ },
+ renderLabel(value, i),
+ _react2.default.createElement(
+ 'span',
+ { className: 'Select-aria-only' },
+ '\xA0'
+ )
+ );
+ });
+ } else if (!this.state.inputValue) {
+ if (isOpen) onClick = null;
+ return _react2.default.createElement(
+ ValueComponent,
+ {
+ id: this._instancePrefix + '-value-item',
+ disabled: this.props.disabled,
+ instancePrefix: this._instancePrefix,
+ onClick: onClick,
+ value: valueArray[0]
+ },
+ renderLabel(valueArray[0])
+ );
+ }
+ }
+ }, {
+ key: 'renderInput',
+ value: function renderInput(valueArray, focusedOptionIndex) {
+ var _classNames,
+ _this6 = this;
+
+ var className = (0, _classnames2.default)('Select-input', this.props.inputProps.className);
+ var isOpen = !!this.state.isOpen;
+
+ var ariaOwns = (0, _classnames2.default)((_classNames = {}, _defineProperty(_classNames, this._instancePrefix + '-list', isOpen), _defineProperty(_classNames, this._instancePrefix + '-backspace-remove-message', this.props.multi && !this.props.disabled && this.state.isFocused && !this.state.inputValue), _classNames));
+
+ 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-label': this.props['aria-label'],
+ className: className,
+ tabIndex: this.props.tabIndex,
+ onBlur: this.handleInputBlur,
+ onChange: this.handleInputChange,
+ onFocus: this.handleInputFocus,
+ ref: function ref(_ref2) {
+ return _this6.input = _ref2;
+ },
+ required: this.state.required,
+ value: this.state.inputValue
+ });
+
+ if (this.props.inputRenderer) {
+ return this.props.inputRenderer(inputProps);
+ }
+
+ if (this.props.disabled || !this.props.searchable) {
+ var _props$inputProps = this.props.inputProps,
+ inputClassName = _props$inputProps.inputClassName,
+ divProps = _objectWithoutProperties(_props$inputProps, ['inputClassName']);
+
+ 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',
+ className: className,
+ tabIndex: this.props.tabIndex || 0,
+ onBlur: this.handleInputBlur,
+ onFocus: this.handleInputFocus,
+ ref: function ref(_ref3) {
+ return _this6.input = _ref3;
+ },
+ 'aria-readonly': '' + !!this.props.disabled,
+ style: { border: 0, width: 1, display: 'inline-block' } }));
+ }
+
+ if (this.props.autosize) {
+ return _react2.default.createElement(_reactInputAutosize2.default, _extends({}, inputProps, { minWidth: '5' }));
+ }
+ return _react2.default.createElement(
+ 'div',
+ { className: className },
+ _react2.default.createElement('input', inputProps)
+ );
+ }
+ }, {
+ key: 'renderClear',
+ value: function renderClear() {
+ if (!this.props.clearable || this.props.value === undefined || this.props.value === null || this.props.multi && !this.props.value.length || this.props.disabled || this.props.isLoading) return;
+ 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,
+ onMouseDown: this.clearValue,
+ onTouchStart: this.handleTouchStart,
+ onTouchMove: this.handleTouchMove,
+ onTouchEnd: this.handleTouchEndClearValue
+ },
+ clear
+ );
+ }
+ }, {
+ key: 'renderArrow',
+ value: function renderArrow() {
+ var onMouseDown = this.handleMouseDownOnArrow;
+ var isOpen = this.state.isOpen;
+ var arrow = this.props.arrowRenderer({ onMouseDown: onMouseDown, isOpen: isOpen });
+
+ return _react2.default.createElement(
+ 'span',
+ {
+ className: 'Select-arrow-zone',
+ onMouseDown: onMouseDown
+ },
+ arrow
+ );
+ }
+ }, {
+ key: 'filterFlatOptions',
+ value: function filterFlatOptions(excludeOptions) {
+ var filterValue = this.state.inputValue;
+ var flatOptions = this._flatOptions;
+ if (this.props.filterOptions) {
+ // Maintain backwards compatibility with boolean attribute
+ var filterOptions = typeof this.props.filterOptions === 'function' ? this.props.filterOptions : _defaultFilterOptions2.default;
+
+ return filterOptions(flatOptions, filterValue, excludeOptions, {
+ 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
+ });
+ } else {
+ return flatOptions;
+ }
+ }
+ }, {
+ key: 'flattenOptions',
+ value: function flattenOptions(options, group) {
+ if (!options) return [];
+ var flatOptions = [];
+ for (var i = 0; i < options.length; i++) {
+ // We clone each option with a pointer to its parent group for efficient unflattening
+ var optionCopy = clone(options[i]);
+ optionCopy.isInTree = false;
+ if (group) {
+ optionCopy.group = group;
+ }
+ if (isGroup(optionCopy)) {
+ flatOptions = flatOptions.concat(this.flattenOptions(optionCopy.options, optionCopy));
+ optionCopy.options = [];
+ } else {
+ flatOptions.push(optionCopy);
+ }
+ }
+ return flatOptions;
+ }
+ }, {
+ key: 'unflattenOptions',
+ value: function unflattenOptions(flatOptions) {
+ var groupedOptions = [];
+ var parent = void 0,
+ child = void 0;
+
+ // Remove all ancestor groups from the tree
+ flatOptions.forEach(function (option) {
+ option.isInTree = false;
+ parent = option.group;
+ while (parent) {
+ if (parent.isInTree) {
+ parent.options = [];
+ parent.isInTree = false;
+ }
+ parent = parent.group;
+ }
+ });
+
+ // Now reconstruct the options tree
+ flatOptions.forEach(function (option) {
+ child = option;
+ parent = child.group;
+ while (parent) {
+ if (!child.isInTree) {
+ parent.options.push(child);
+ child.isInTree = true;
+ }
+
+ child = parent;
+ parent = child.group;
+ }
+ if (!child.isInTree) {
+ groupedOptions.push(child);
+ child.isInTree = true;
+ }
+ });
+ return groupedOptions;
+ }
+ }, {
+ key: 'onOptionRef',
+ value: function onOptionRef(ref, isFocused) {
+ if (isFocused) {
+ this.focused = ref;
+ }
+ }
+ }, {
+ key: 'renderMenu',
+ value: function renderMenu(options, valueArray, focusedOption) {
+ if (options && options.length) {
+ return this.props.menuRenderer({
+ focusedOption: focusedOption,
+ focusOption: this.focusOption,
+ instancePrefix: this._instancePrefix,
+ labelKey: this.props.labelKey,
+ onFocus: this.focusOption,
+ onOptionRef: this.onOptionRef,
+ onSelect: this.selectValue,
+ optionClassName: this.props.optionClassName,
+ optionComponent: this.props.optionComponent,
+ optionGroupComponent: this.props.optionGroupComponent,
+ optionRenderer: this.props.optionRenderer || this.getOptionLabel,
+ options: options,
+ selectValue: this.selectValue,
+ valueArray: valueArray,
+ valueKey: this.props.valueKey
+ });
+ } else if (this.props.noResultsText) {
+ return _react2.default.createElement(
+ 'div',
+ { className: 'Select-noresults' },
+ this.props.noResultsText
+ );
+ } else {
+ return null;
+ }
+ }
+ }, {
+ key: 'renderHiddenField',
+ value: function renderHiddenField(valueArray) {
+ var _this7 = this;
+
+ if (!this.props.name) return;
+ if (this.props.joinValues) {
+ var value = valueArray.map(function (i) {
+ return stringifyValue(i[_this7.props.valueKey]);
+ }).join(this.props.delimiter);
+ return _react2.default.createElement('input', {
+ type: 'hidden',
+ ref: function ref(_ref4) {
+ return _this7.value = _ref4;
+ },
+ name: this.props.name,
+ value: value,
+ disabled: this.props.disabled });
+ }
+ return valueArray.map(function (item, index) {
+ return _react2.default.createElement('input', { key: 'hidden.' + index,
+ type: 'hidden',
+ ref: 'value' + index,
+ name: _this7.props.name,
+ value: stringifyValue(item[_this7.props.valueKey]),
+ disabled: _this7.props.disabled });
+ });
+ }
+ }, {
+ key: 'getFocusableOptionIndex',
+ value: function getFocusableOptionIndex(selectedOption) {
+ var options = this._visibleOptions;
+ if (!options.length) return null;
+
+ var valueKey = this.props.valueKey;
+ var focusedOption = this.state.focusedOption || selectedOption;
+ if (focusedOption && !focusedOption.disabled) {
+ var focusedOptionIndex = -1;
+ options.some(function (option, index) {
+ var isOptionEqual = option[valueKey] === focusedOption[valueKey];
+ if (isOptionEqual) {
+ focusedOptionIndex = index;
+ }
+ return isOptionEqual;
+ });
+ if (focusedOptionIndex !== -1) {
+ return focusedOptionIndex;
+ }
+ }
+
+ for (var i = 0; i < options.length; i++) {
+ if (!options[i].disabled) return i;
+ }
+ return null;
+ }
+ }, {
+ key: 'renderOuter',
+ value: function renderOuter(options, valueArray, focusedOption) {
+ var _this8 = this;
+
+ var Dropdown = this.props.dropdownComponent;
+ var menu = this.renderMenu(options, valueArray, focusedOption);
+ if (!menu) {
+ return null;
+ }
+
+ return _react2.default.createElement(
+ Dropdown,
+ null,
+ _react2.default.createElement(
+ 'div',
+ { ref: function ref(_ref6) {
+ return _this8.menuContainer = _ref6;
+ }, className: 'Select-menu-outer', style: this.props.menuContainerStyle },
+ _react2.default.createElement(
+ 'div',
+ { ref: function ref(_ref5) {
+ return _this8.menu = _ref5;
+ }, role: 'listbox', tabIndex: -1, className: 'Select-menu', id: this._instancePrefix + '-list',
+ style: this.props.menuStyle,
+ onScroll: this.handleMenuScroll,
+ onMouseDown: this.handleMouseDownOnMenu },
+ menu
+ )
+ )
+ );
+ }
+ }, {
+ key: 'render',
+ value: function render() {
+ var _this9 = this;
+
+ var valueArray = this.getValueArray(this.props.value);
+ this._visibleOptions = this.filterFlatOptions(this.props.multi ? valueArray : null);
+ var options = this.unflattenOptions(this._visibleOptions);
+ var isOpen = typeof this.props.isOpen === 'boolean' ? this.props.isOpen : this.state.isOpen;
+ if (this.props.multi && !options.length && valueArray.length && !this.state.inputValue) isOpen = false;
+ var focusedOptionIndex = this.getFocusableOptionIndex(valueArray[0]);
+
+ var focusedOption = null;
+ if (focusedOptionIndex !== null) {
+ focusedOption = this._focusedOption = this._visibleOptions[focusedOptionIndex];
+ } else {
+ focusedOption = this._focusedOption = null;
+ }
+ var className = (0, _classnames2.default)('Select', this.props.className, {
+ 'Select--multi': this.props.multi,
+ 'Select--single': !this.props.multi,
+ 'is-clearable': this.props.clearable,
+ 'is-disabled': this.props.disabled,
+ 'is-focused': this.state.isFocused,
+ 'is-loading': this.props.isLoading,
+ 'is-open': isOpen,
+ 'is-pseudo-focused': this.state.isPseudoFocused,
+ 'is-searchable': this.props.searchable,
+ 'has-value': valueArray.length
+ });
+
+ var removeMessage = null;
+ if (this.props.multi && !this.props.disabled && valueArray.length && !this.state.inputValue && this.state.isFocused && this.props.backspaceRemoves) {
+ removeMessage = _react2.default.createElement(
+ 'span',
+ { id: this._instancePrefix + '-backspace-remove-message', className: 'Select-aria-only', 'aria-live': 'assertive' },
+ this.props.backspaceToRemoveMessage.replace('{label}', valueArray[valueArray.length - 1][this.props.labelKey])
+ );
+ }
+
+ return _react2.default.createElement(
+ 'div',
+ { ref: function ref(_ref8) {
+ return _this9.wrapper = _ref8;
+ },
+ className: className,
+ style: this.props.wrapperStyle },
+ this.renderHiddenField(valueArray),
+ _react2.default.createElement(
+ 'div',
+ { ref: function ref(_ref7) {
+ return _this9.control = _ref7;
+ },
+ className: 'Select-control',
+ style: this.props.style,
+ onKeyDown: this.handleKeyDown,
+ onMouseDown: this.handleMouseDown,
+ onTouchEnd: this.handleTouchEnd,
+ onTouchStart: this.handleTouchStart,
+ onTouchMove: this.handleTouchMove
+ },
+ _react2.default.createElement(
+ 'span',
+ { className: 'Select-multi-value-wrapper', id: this._instancePrefix + '-value' },
+ this.renderValue(valueArray, isOpen),
+ this.renderInput(valueArray, focusedOptionIndex)
+ ),
+ removeMessage,
+ this.renderLoading(),
+ this.renderClear(),
+ this.renderArrow()
+ ),
+ isOpen ? this.renderOuter(options, !this.props.multi ? valueArray : null, focusedOption) : null
+ );
+ }
+ }]);
+
+ 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)
+ 'aria-labelledby': _propTypes2.default.string, // HTML ID of an element that should be used as the label (for assistive tech)
+ addLabelText: _propTypes2.default.string, // placeholder displayed when you want to add a label on a multi-value input
+ arrowRenderer: _propTypes2.default.func, // Create drop-down caret element
+ autoBlur: _propTypes2.default.bool, // automatically blur the component when an option is selected
+ autofocus: _propTypes2.default.bool, // autofocus the component on mount
+ autosize: _propTypes2.default.bool, // whether to enable autosizing or not
+ backspaceRemoves: _propTypes2.default.bool, // whether backspace removes an item if there is no text input
+ backspaceToRemoveMessage: _propTypes2.default.string, // Message to use for screenreaders to press backspace to remove the current item - {label} is replaced with the item label
+ className: _propTypes2.default.string, // className for the outer element
+ clearAllText: stringOrNode, // title for the "clear" control when multi: true
+ clearRenderer: _propTypes2.default.func, // create clearable x element
+ clearValueText: stringOrNode, // title for the "clear" control
+ clearable: _propTypes2.default.bool, // should it be possible to reset value
+ closeOnSelect: _propTypes2.default.bool, // whether to close the menu when a value is selected
+ deleteRemoves: _propTypes2.default.bool, // whether backspace removes an item if there is no text input
+ delimiter: _propTypes2.default.string, // delimiter to use to join multiple values for the hidden field value
+ disabled: _propTypes2.default.bool, // whether the Select is disabled or not
+ dropdownComponent: _propTypes2.default.func, // dropdown component to render the menu in
+ escapeClearsValue: _propTypes2.default.bool, // whether escape clears the value when the menu is closed
+ filterOption: _propTypes2.default.func, // method to filter a single option (option, filterString)
+ filterOptions: _propTypes2.default.any, // boolean to enable default filtering or function to filter the options array ([options], filterString, [values])
+ ignoreAccents: _propTypes2.default.bool, // whether to strip diacritics when filtering
+ ignoreCase: _propTypes2.default.bool, // whether to perform case-insensitive filtering
+ inputProps: _propTypes2.default.object, // custom attributes for the Input
+ inputRenderer: _propTypes2.default.func, // returns a custom input component
+ instanceId: _propTypes2.default.string, // set the components instanceId
+ isLoading: _propTypes2.default.bool, // whether the Select is loading externally or not (such as options being loaded)
+ isOpen: _propTypes2.default.bool, // whether the Select dropdown menu is open or not
+ joinValues: _propTypes2.default.bool, // joins multiple values into a single form field with the delimiter (legacy mode)
+ labelKey: _propTypes2.default.string, // path of the label value in option objects
+ matchPos: _propTypes2.default.string, // (any|start) match the start or entire string when filtering
+ matchProp: _propTypes2.default.string, // (any|label|value) which option property to filter on
+ menuBuffer: _propTypes2.default.number, // optional buffer (in px) between the bottom of the viewport and the bottom of the menu
+ menuContainerStyle: _propTypes2.default.object, // optional style to apply to the menu container
+ menuRenderer: _propTypes2.default.func, // renders a custom menu with options
+ menuStyle: _propTypes2.default.object, // optional style to apply to the menu
+ multi: _propTypes2.default.bool, // multi-value input
+ name: _propTypes2.default.string, // generates a hidden tag with this field name for html forms
+ noResultsText: stringOrNode, // placeholder displayed when there are no matching search results
+ onBlur: _propTypes2.default.func, // onBlur handler: function (event) {}
+ onBlurResetsInput: _propTypes2.default.bool, // whether input is cleared on blur
+ onChange: _propTypes2.default.func, // onChange handler: function (newValue) {}
+ onClose: _propTypes2.default.func, // fires when the menu is closed
+ onCloseResetsInput: _propTypes2.default.bool, // whether input is cleared when menu is closed through the arrow
+ onFocus: _propTypes2.default.func, // onFocus handler: function (event) {}
+ onInputChange: _propTypes2.default.func, // onInputChange handler: function (inputValue) {}
+ onInputKeyDown: _propTypes2.default.func, // input keyDown handler: function (event) {}
+ onMenuScrollToBottom: _propTypes2.default.func, // fires when the menu is scrolled to the bottom; can be used to paginate options
+ onOpen: _propTypes2.default.func, // fires when the menu is opened
+ onSelectResetsInput: _propTypes2.default.bool, // whether input is cleared on select (works only for multiselect)
+ onValueClick: _propTypes2.default.func, // onClick handler for value labels: function (value, event) {}
+ openOnClick: _propTypes2.default.bool, // boolean to control opening the menu when the control is clicked
+ openOnFocus: _propTypes2.default.bool, // always open options menu on focus
+ optionClassName: _propTypes2.default.string, // additional class(es) to apply to the elements
+ optionComponent: _propTypes2.default.func, // option component to render in dropdown
+ optionGroupComponent: _propTypes2.default.func, // option group component to render in dropdown
+ optionRenderer: _propTypes2.default.func, // optionRenderer: function (option) {}
+ options: _propTypes2.default.array, // array of options
+ pageSize: _propTypes2.default.number, // number of entries to page when using page up/down keys
+ placeholder: stringOrNode, // field placeholder, displayed when there's no value
+ renderInvalidValues: _propTypes2.default.bool, // boolean to enable rendering values that do not match any options
+ required: _propTypes2.default.bool, // applies HTML5 required attribute when needed
+ resetValue: _propTypes2.default.any, // value to use when you clear the control
+ scrollMenuIntoView: _propTypes2.default.bool, // boolean to enable the viewport to shift so that the full menu fully visible when engaged
+ searchable: _propTypes2.default.bool, // whether to enable searching feature or not
+ simpleValue: _propTypes2.default.bool, // pass the value to onChange as a simple value (legacy pre 1.0 mode), defaults to false
+ style: _propTypes2.default.object, // optional style to apply to the control
+ tabIndex: _propTypes2.default.string, // optional tab index of the control
+ tabSelectsValue: _propTypes2.default.bool, // whether to treat tabbing out while focused to be value selection
+ value: _propTypes2.default.any, // initial field value
+ valueComponent: _propTypes2.default.func, // value component to render
+ valueKey: _propTypes2.default.string, // path of the label value in option objects
+ valueRenderer: _propTypes2.default.func, // valueRenderer: function (option) {}
+ wrapperStyle: _propTypes2.default.object // optional style to apply to the component wrapper
+};
+
+Select.defaultProps = {
+ addLabelText: 'Add "{label}"?',
+ arrowRenderer: _defaultArrowRenderer2.default,
+ autosize: true,
+ backspaceRemoves: true,
+ backspaceToRemoveMessage: 'Press backspace to remove {label}',
+ clearable: true,
+ clearAllText: 'Clear all',
+ clearRenderer: _defaultClearRenderer2.default,
+ clearValueText: 'Clear value',
+ closeOnSelect: true,
+ deleteRemoves: true,
+ delimiter: ',',
+ disabled: false,
+ dropdownComponent: _Dropdown2.default,
+ escapeClearsValue: true,
+ filterOptions: _defaultFilterOptions2.default,
+ ignoreAccents: true,
+ ignoreCase: true,
+ inputProps: {},
+ isLoading: false,
+ joinValues: false,
+ labelKey: 'label',
+ matchPos: 'any',
+ matchProp: 'any',
+ menuBuffer: 0,
+ menuRenderer: _defaultMenuRenderer2.default,
+ multi: false,
+ noResultsText: 'No results found',
+ onBlurResetsInput: true,
+ onSelectResetsInput: true,
+ onCloseResetsInput: true,
+ openOnClick: true,
+ optionComponent: _Option2.default,
+ optionGroupComponent: _OptionGroup2.default,
+ pageSize: 5,
+ placeholder: 'Select...',
+ required: false,
+ scrollMenuIntoView: true,
+ searchable: true,
+ simpleValue: false,
+ tabSelectsValue: true,
+ valueComponent: _Value2.default,
+ valueKey: 'value'
+};
+
+exports.default = Select;
\ No newline at end of file
diff --git a/lib/Value.js b/lib/Value.js
index af5c7c42..29de51a7 100644
--- a/lib/Value.js
+++ b/lib/Value.js
@@ -1,15 +1,15 @@
'use strict';
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+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 _createReactClass = require('create-react-class');
-
-var _createReactClass2 = _interopRequireDefault(_createReactClass);
-
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
@@ -18,97 +18,130 @@ var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
-var Value = (0, _createReactClass2['default'])({
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- displayName: 'Value',
+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; }
- propTypes: {
- children: _propTypes2['default'].node,
- disabled: _propTypes2['default'].bool, // disabled prop passed to ReactSelect
- id: _propTypes2['default'].string, // Unique id for the value - used for aria
- onClick: _propTypes2['default'].func, // method to handle click on value label
- onRemove: _propTypes2['default'].func, // method to handle removal of the value
- value: _propTypes2['default'].object.isRequired },
+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 Value = function (_React$Component) {
+ _inherits(Value, _React$Component);
+
+ function Value(props) {
+ _classCallCheck(this, Value);
+
+ var _this = _possibleConstructorReturn(this, (Value.__proto__ || Object.getPrototypeOf(Value)).call(this, props));
+
+ _this.handleMouseDown = _this.handleMouseDown.bind(_this);
+ _this.onRemove = _this.onRemove.bind(_this);
+ _this.handleTouchEndRemove = _this.handleTouchEndRemove.bind(_this);
+ _this.handleTouchMove = _this.handleTouchMove.bind(_this);
+ _this.handleTouchStart = _this.handleTouchStart.bind(_this);
+ return _this;
+ }
- // the option object for this value
- handleMouseDown: function handleMouseDown(event) {
- if (event.type === 'mousedown' && event.button !== 0) {
- return;
+ _createClass(Value, [{
+ key: 'handleMouseDown',
+ value: function handleMouseDown(event) {
+ if (event.type === 'mousedown' && event.button !== 0) {
+ return;
+ }
+ if (this.props.onClick) {
+ event.stopPropagation();
+ this.props.onClick(this.props.value, event);
+ return;
+ }
+ if (this.props.value.href) {
+ event.stopPropagation();
+ }
}
- if (this.props.onClick) {
+ }, {
+ key: 'onRemove',
+ value: function onRemove(event) {
+ event.preventDefault();
event.stopPropagation();
- this.props.onClick(this.props.value, event);
- return;
+ this.props.onRemove(this.props.value);
}
- if (this.props.value.href) {
- event.stopPropagation();
+ }, {
+ key: 'handleTouchEndRemove',
+ value: function handleTouchEndRemove(event) {
+ // Check if the view is being dragged, In this case
+ // we don't want to fire the click event (because the user only wants to scroll)
+ if (this.dragging) return;
+
+ // Fire the mouse events
+ this.onRemove(event);
}
- },
-
- onRemove: function onRemove(event) {
- event.preventDefault();
- event.stopPropagation();
- this.props.onRemove(this.props.value);
- },
-
- handleTouchEndRemove: function handleTouchEndRemove(event) {
- // Check if the view is being dragged, In this case
- // we don't want to fire the click event (because the user only wants to scroll)
- if (this.dragging) return;
-
- // Fire the mouse events
- this.onRemove(event);
- },
-
- handleTouchMove: function handleTouchMove(event) {
- // Set a flag that the view is being dragged
- this.dragging = true;
- },
-
- handleTouchStart: function handleTouchStart(event) {
- // Set a flag that the view is not being dragged
- this.dragging = false;
- },
-
- renderRemoveIcon: function renderRemoveIcon() {
- if (this.props.disabled || !this.props.onRemove) return;
- return _react2['default'].createElement(
- 'span',
- { className: 'Select-value-icon',
- 'aria-hidden': 'true',
- onMouseDown: this.onRemove,
- onTouchEnd: this.handleTouchEndRemove,
- onTouchStart: this.handleTouchStart,
- onTouchMove: this.handleTouchMove },
- '×'
- );
- },
-
- renderLabel: function renderLabel() {
- var className = 'Select-value-label';
- return this.props.onClick || this.props.value.href ? _react2['default'].createElement(
- 'a',
- { className: className, href: this.props.value.href, target: this.props.value.target, onMouseDown: this.handleMouseDown, onTouchEnd: this.handleMouseDown },
- this.props.children
- ) : _react2['default'].createElement(
- 'span',
- { className: className, role: 'option', 'aria-selected': 'true', id: this.props.id },
- this.props.children
- );
- },
-
- render: function render() {
- return _react2['default'].createElement(
- 'div',
- { className: (0, _classnames2['default'])('Select-value', this.props.value.className),
- style: this.props.value.style,
- title: this.props.value.title
- },
- this.renderRemoveIcon(),
- this.renderLabel()
- );
- }
+ }, {
+ key: 'handleTouchMove',
+ value: function handleTouchMove(event) {
+ // Set a flag that the view is being dragged
+ this.dragging = true;
+ }
+ }, {
+ key: 'handleTouchStart',
+ value: function handleTouchStart(event) {
+ // Set a flag that the view is not being dragged
+ this.dragging = false;
+ }
+ }, {
+ key: 'renderRemoveIcon',
+ value: function renderRemoveIcon() {
+ if (this.props.disabled || !this.props.onRemove) return;
+ return _react2.default.createElement(
+ 'span',
+ { className: 'Select-value-icon',
+ 'aria-hidden': 'true',
+ onMouseDown: this.onRemove,
+ onTouchEnd: this.handleTouchEndRemove,
+ onTouchStart: this.handleTouchStart,
+ onTouchMove: this.handleTouchMove },
+ '\xD7'
+ );
+ }
+ }, {
+ key: 'renderLabel',
+ value: function renderLabel() {
+ var className = 'Select-value-label';
+ return this.props.onClick || this.props.value.href ? _react2.default.createElement(
+ 'a',
+ { className: className, href: this.props.value.href, target: this.props.value.target, onMouseDown: this.handleMouseDown, onTouchEnd: this.handleMouseDown },
+ this.props.children
+ ) : _react2.default.createElement(
+ 'span',
+ { className: className, role: 'option', 'aria-selected': 'true', id: this.props.id },
+ this.props.children
+ );
+ }
+ }, {
+ key: 'render',
+ value: function render() {
+ return _react2.default.createElement(
+ 'div',
+ { className: (0, _classnames2.default)('Select-value', this.props.value.className),
+ style: this.props.value.style,
+ title: this.props.value.title
+ },
+ this.renderRemoveIcon(),
+ this.renderLabel()
+ );
+ }
+ }]);
-});
+ return Value;
+}(_react2.default.Component);
+
+;
+
+Value.propTypes = {
+ children: _propTypes2.default.node,
+ disabled: _propTypes2.default.bool, // disabled prop passed to ReactSelect
+ id: _propTypes2.default.string, // Unique id for the value - used for aria
+ onClick: _propTypes2.default.func, // method to handle click on value label
+ onRemove: _propTypes2.default.func, // method to handle removal of the value
+ value: _propTypes2.default.object.isRequired // the option object for this value
+};
-module.exports = Value;
\ No newline at end of file
+exports.default = Value;
\ No newline at end of file
diff --git a/lib/index.js b/lib/index.js
new file mode 100644
index 00000000..6764a652
--- /dev/null
+++ b/lib/index.js
@@ -0,0 +1,39 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.Value = exports.Creatable = exports.AsyncCreatable = exports.Async = undefined;
+
+var _Select = require('./Select');
+
+var _Select2 = _interopRequireDefault(_Select);
+
+var _Async = require('./Async');
+
+var _Async2 = _interopRequireDefault(_Async);
+
+var _AsyncCreatable = require('./AsyncCreatable');
+
+var _AsyncCreatable2 = _interopRequireDefault(_AsyncCreatable);
+
+var _Creatable = require('./Creatable');
+
+var _Creatable2 = _interopRequireDefault(_Creatable);
+
+var _Value = require('./Value');
+
+var _Value2 = _interopRequireDefault(_Value);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+_Select2.default.Async = _Async2.default;
+_Select2.default.AsyncCreatable = _AsyncCreatable2.default;
+_Select2.default.Creatable = _Creatable2.default;
+_Select2.default.Value = _Value2.default;
+
+exports.default = _Select2.default;
+exports.Async = _Async2.default;
+exports.AsyncCreatable = _AsyncCreatable2.default;
+exports.Creatable = _Creatable2.default;
+exports.Value = _Value2.default;
\ No newline at end of file
diff --git a/lib/utils/defaultArrowRenderer.js b/lib/utils/defaultArrowRenderer.js
index 99115a3d..3a8cda8c 100644
--- a/lib/utils/defaultArrowRenderer.js
+++ b/lib/utils/defaultArrowRenderer.js
@@ -1,24 +1,29 @@
-"use strict";
+'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
-exports["default"] = arrowRenderer;
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+exports.default = arrowRenderer;
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
+var _propTypes = require('prop-types');
+
+var _propTypes2 = _interopRequireDefault(_propTypes);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
function arrowRenderer(_ref) {
var onMouseDown = _ref.onMouseDown;
- return _react2["default"].createElement("span", {
- className: "Select-arrow",
+ return _react2.default.createElement('span', {
+ className: 'Select-arrow',
onMouseDown: onMouseDown
});
-}
+};
-;
-module.exports = exports["default"];
\ No newline at end of file
+arrowRenderer.propTypes = {
+ onMouseDown: _propTypes2.default.func
+};
\ No newline at end of file
diff --git a/lib/utils/defaultClearRenderer.js b/lib/utils/defaultClearRenderer.js
index a529ecc2..b220d79a 100644
--- a/lib/utils/defaultClearRenderer.js
+++ b/lib/utils/defaultClearRenderer.js
@@ -1,22 +1,19 @@
'use strict';
-Object.defineProperty(exports, '__esModule', {
+Object.defineProperty(exports, "__esModule", {
value: true
});
-exports['default'] = clearRenderer;
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+exports.default = clearRenderer;
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
function clearRenderer() {
- return _react2['default'].createElement('span', {
+ return _react2.default.createElement('span', {
className: 'Select-clear',
dangerouslySetInnerHTML: { __html: '×' }
});
-}
-
-;
-module.exports = exports['default'];
\ No newline at end of file
+};
\ No newline at end of file
diff --git a/lib/utils/defaultFilterOptions.js b/lib/utils/defaultFilterOptions.js
index 19f054a7..4b89a223 100644
--- a/lib/utils/defaultFilterOptions.js
+++ b/lib/utils/defaultFilterOptions.js
@@ -1,16 +1,20 @@
'use strict';
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
var _stripDiacritics = require('./stripDiacritics');
var _stripDiacritics2 = _interopRequireDefault(_stripDiacritics);
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
function filterOptions(options, filterValue, excludeOptions, props) {
var _this = this;
if (props.ignoreAccents) {
- filterValue = (0, _stripDiacritics2['default'])(filterValue);
+ filterValue = (0, _stripDiacritics2.default)(filterValue);
}
if (props.ignoreCase) {
@@ -28,8 +32,8 @@ function filterOptions(options, filterValue, excludeOptions, props) {
var valueTest = String(option[props.valueKey]);
var labelTest = String(option[props.labelKey]);
if (props.ignoreAccents) {
- if (props.matchProp !== 'label') valueTest = (0, _stripDiacritics2['default'])(valueTest);
- if (props.matchProp !== 'value') labelTest = (0, _stripDiacritics2['default'])(labelTest);
+ if (props.matchProp !== 'label') valueTest = (0, _stripDiacritics2.default)(valueTest);
+ if (props.matchProp !== 'value') labelTest = (0, _stripDiacritics2.default)(labelTest);
}
if (props.ignoreCase) {
if (props.matchProp !== 'label') valueTest = valueTest.toLowerCase();
@@ -39,4 +43,4 @@ function filterOptions(options, filterValue, excludeOptions, props) {
});
}
-module.exports = filterOptions;
\ No newline at end of file
+exports.default = filterOptions;
\ No newline at end of file
diff --git a/lib/utils/defaultMenuRenderer.js b/lib/utils/defaultMenuRenderer.js
index 236f9801..e165d081 100644
--- a/lib/utils/defaultMenuRenderer.js
+++ b/lib/utils/defaultMenuRenderer.js
@@ -1,6 +1,8 @@
'use strict';
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
var _classnames = require('classnames');
@@ -10,24 +12,26 @@ var _react = require('react');
var _react2 = _interopRequireDefault(_react);
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
function isGroup(option) {
return option && Array.isArray(option.options);
}
function menuRenderer(_ref) {
- var focusedOption = _ref.focusedOption;
- var instancePrefix = _ref.instancePrefix;
- var labelKey = _ref.labelKey;
- var onFocus = _ref.onFocus;
- var onOptionRef = _ref.onOptionRef;
- var onSelect = _ref.onSelect;
- var optionClassName = _ref.optionClassName;
- var optionComponent = _ref.optionComponent;
- var optionGroupComponent = _ref.optionGroupComponent;
- var optionRenderer = _ref.optionRenderer;
- var options = _ref.options;
- var valueArray = _ref.valueArray;
- var valueKey = _ref.valueKey;
+ var focusedOption = _ref.focusedOption,
+ instancePrefix = _ref.instancePrefix,
+ labelKey = _ref.labelKey,
+ onFocus = _ref.onFocus,
+ onOptionRef = _ref.onOptionRef,
+ onSelect = _ref.onSelect,
+ optionClassName = _ref.optionClassName,
+ optionComponent = _ref.optionComponent,
+ optionGroupComponent = _ref.optionGroupComponent,
+ optionRenderer = _ref.optionRenderer,
+ options = _ref.options,
+ valueArray = _ref.valueArray,
+ valueKey = _ref.valueKey;
var OptionGroup = optionGroupComponent;
var Option = optionComponent;
@@ -36,11 +40,11 @@ function menuRenderer(_ref) {
var renderOptions = function renderOptions(optionsSubset) {
return optionsSubset.map(function (option, i) {
if (isGroup(option)) {
- var optionGroupClass = (0, _classnames2['default'])({
+ var optionGroupClass = (0, _classnames2.default)({
'Select-option-group': true
});
- return _react2['default'].createElement(
+ return _react2.default.createElement(
OptionGroup,
{
className: optionGroupClass,
@@ -52,41 +56,35 @@ function menuRenderer(_ref) {
renderOptions(option.options)
);
} else {
- var _ret = (function () {
- var isSelected = valueArray && valueArray.indexOf(option) > -1;
- var isFocused = option === focusedOption;
- var optionRef = isFocused ? 'focused' : null;
- var optionClass = (0, _classnames2['default'])(optionClassName, {
- 'Select-option': true,
- 'is-selected': isSelected,
- 'is-focused': isFocused,
- 'is-disabled': option.disabled
- });
-
- return {
- v: _react2['default'].createElement(
- Option,
- {
- className: optionClass,
- instancePrefix: instancePrefix,
- isDisabled: option.disabled,
- isFocused: isFocused,
- isSelected: isSelected,
- key: 'option-' + i + '-' + option[valueKey],
- onFocus: onFocus,
- onSelect: onSelect,
- option: option,
- optionIndex: i,
- ref: function (ref) {
- onOptionRef(ref, isFocused);
- }
- },
- renderLabel(option, i)
- )
- };
- })();
+ var isSelected = valueArray && valueArray.indexOf(option) > -1;
+ var isFocused = option === focusedOption;
+ var optionRef = isFocused ? 'focused' : null;
+ var optionClass = (0, _classnames2.default)(optionClassName, {
+ 'Select-option': true,
+ 'is-selected': isSelected,
+ 'is-focused': isFocused,
+ 'is-disabled': option.disabled
+ });
- if (typeof _ret === 'object') return _ret.v;
+ return _react2.default.createElement(
+ Option,
+ {
+ className: optionClass,
+ instancePrefix: instancePrefix,
+ isDisabled: option.disabled,
+ isFocused: isFocused,
+ isSelected: isSelected,
+ key: 'option-' + i + '-' + option[valueKey],
+ onFocus: onFocus,
+ onSelect: onSelect,
+ option: option,
+ optionIndex: i,
+ ref: function ref(_ref2) {
+ onOptionRef(_ref2, isFocused);
+ }
+ },
+ renderLabel(option, i)
+ );
}
});
};
@@ -94,4 +92,4 @@ function menuRenderer(_ref) {
return renderOptions(options);
}
-module.exports = menuRenderer;
\ No newline at end of file
+exports.default = menuRenderer;
\ No newline at end of file
diff --git a/lib/utils/stripDiacritics.js b/lib/utils/stripDiacritics.js
index 2b462347..93641f17 100644
--- a/lib/utils/stripDiacritics.js
+++ b/lib/utils/stripDiacritics.js
@@ -1,8 +1,12 @@
'use strict';
+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 }];
-module.exports = function stripDiacritics(str) {
+function stripDiacritics(str) {
for (var i = 0; i < map.length; i++) {
str = str.replace(map[i].letters, map[i].base);
}
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 00000000..fb968f3b
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,12499 @@
+{
+ "name": "react-select-plus",
+ "version": "1.0.0-rc.10",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "abab": {
+ "version": "1.0.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/abab/-/abab-1.0.4.tgz",
+ "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=",
+ "dev": true
+ },
+ "abbrev": {
+ "version": "1.0.9",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/abbrev/-/abbrev-1.0.9.tgz",
+ "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=",
+ "dev": true
+ },
+ "accepts": {
+ "version": "1.3.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/accepts/-/accepts-1.3.4.tgz",
+ "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=",
+ "dev": true,
+ "requires": {
+ "mime-types": "2.1.17",
+ "negotiator": "0.6.1"
+ }
+ },
+ "acorn": {
+ "version": "5.1.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/acorn/-/acorn-5.1.2.tgz",
+ "integrity": "sha512-o96FZLJBPY1lvTuJylGA9Bk3t/GKPPJG8H0ydQQl01crzwJgspa4AEIq/pVTXigmK0PHVQhiAtn8WMBLL9D2WA==",
+ "dev": true
+ },
+ "acorn-dynamic-import": {
+ "version": "2.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz",
+ "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=",
+ "dev": true,
+ "requires": {
+ "acorn": "4.0.13"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "4.0.13",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/acorn/-/acorn-4.0.13.tgz",
+ "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
+ "dev": true
+ }
+ }
+ },
+ "acorn-globals": {
+ "version": "3.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/acorn-globals/-/acorn-globals-3.1.0.tgz",
+ "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=",
+ "dev": true,
+ "requires": {
+ "acorn": "4.0.13"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "4.0.13",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/acorn/-/acorn-4.0.13.tgz",
+ "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
+ "dev": true
+ }
+ }
+ },
+ "acorn-jsx": {
+ "version": "3.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+ "dev": true,
+ "requires": {
+ "acorn": "3.3.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "3.3.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/acorn/-/acorn-3.3.0.tgz",
+ "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+ "dev": true
+ }
+ }
+ },
+ "ajv": {
+ "version": "5.2.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ajv/-/ajv-5.2.3.tgz",
+ "integrity": "sha1-wG9Zh3jETGsWGrr+NGa4GtGBTtI=",
+ "dev": true,
+ "requires": {
+ "co": "4.6.0",
+ "fast-deep-equal": "1.0.0",
+ "json-schema-traverse": "0.3.1",
+ "json-stable-stringify": "1.0.1"
+ }
+ },
+ "ajv-keywords": {
+ "version": "2.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ajv-keywords/-/ajv-keywords-2.1.0.tgz",
+ "integrity": "sha1-opbhf3v658HOT34N5T0pyzIWLfA=",
+ "dev": true
+ },
+ "align-text": {
+ "version": "0.1.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/align-text/-/align-text-0.1.4.tgz",
+ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2",
+ "longest": "1.0.1",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "alphanum-sort": {
+ "version": "1.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
+ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
+ "dev": true
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+ "dev": true
+ },
+ "ansi-escapes": {
+ "version": "3.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ansi-escapes/-/ansi-escapes-3.0.0.tgz",
+ "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==",
+ "dev": true
+ },
+ "ansi-html": {
+ "version": "0.0.7",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ansi-html/-/ansi-html-0.0.7.tgz",
+ "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "any-shell-escape": {
+ "version": "0.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/any-shell-escape/-/any-shell-escape-0.1.1.tgz",
+ "integrity": "sha1-1Vq5ciRMcaml4asIefML8RCAaVk=",
+ "dev": true
+ },
+ "anymatch": {
+ "version": "1.3.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/anymatch/-/anymatch-1.3.2.tgz",
+ "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==",
+ "dev": true,
+ "requires": {
+ "micromatch": "2.3.11",
+ "normalize-path": "2.1.1"
+ }
+ },
+ "argparse": {
+ "version": "1.0.9",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/argparse/-/argparse-1.0.9.tgz",
+ "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "1.0.3"
+ }
+ },
+ "arr-diff": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/arr-diff/-/arr-diff-2.0.0.tgz",
+ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0"
+ }
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "array-changes": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/array-changes/-/array-changes-2.0.0.tgz",
+ "integrity": "sha1-RXuqMwPC3hb7vuNIyizLLOcAeKk=",
+ "dev": true,
+ "requires": {
+ "arraydiff-papandreou": "0.1.1-patch1"
+ }
+ },
+ "array-changes-async": {
+ "version": "3.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/array-changes-async/-/array-changes-async-3.0.0.tgz",
+ "integrity": "sha1-ebbuDOWpJ3+a4/Qq773n73vDQ5M=",
+ "dev": true,
+ "requires": {
+ "arraydiff-async": "0.2.0"
+ }
+ },
+ "array-equal": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/array-equal/-/array-equal-1.0.0.tgz",
+ "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
+ "dev": true
+ },
+ "array-find-index": {
+ "version": "1.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/array-find-index/-/array-find-index-1.0.2.tgz",
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+ "dev": true
+ },
+ "array-flatten": {
+ "version": "2.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/array-flatten/-/array-flatten-2.1.1.tgz",
+ "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=",
+ "dev": true
+ },
+ "array-includes": {
+ "version": "3.0.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/array-includes/-/array-includes-3.0.3.tgz",
+ "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=",
+ "dev": true,
+ "requires": {
+ "define-properties": "1.1.2",
+ "es-abstract": "1.9.0"
+ }
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "requires": {
+ "array-uniq": "1.0.3"
+ }
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.2.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/array-unique/-/array-unique-0.2.1.tgz",
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+ "dev": true
+ },
+ "arraydiff-async": {
+ "version": "0.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/arraydiff-async/-/arraydiff-async-0.2.0.tgz",
+ "integrity": "sha1-uwUouY6BS3AvAfSWvHO+w+V/QIY=",
+ "dev": true
+ },
+ "arraydiff-papandreou": {
+ "version": "0.1.1-patch1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/arraydiff-papandreou/-/arraydiff-papandreou-0.1.1-patch1.tgz",
+ "integrity": "sha1-ApAnC/27Sy762LdIJjitWnIQkhA=",
+ "dev": true
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
+ },
+ "asn1": {
+ "version": "0.2.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/asn1/-/asn1-0.2.3.tgz",
+ "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
+ "dev": true
+ },
+ "asn1.js": {
+ "version": "4.9.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/asn1.js/-/asn1.js-4.9.1.tgz",
+ "integrity": "sha1-SLokC0WpKA6UdImQull9IWYX/UA=",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0"
+ }
+ },
+ "assert": {
+ "version": "1.4.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/assert/-/assert-1.4.1.tgz",
+ "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+ "dev": true,
+ "requires": {
+ "util": "0.10.3"
+ }
+ },
+ "assert-plus": {
+ "version": "0.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/assert-plus/-/assert-plus-0.2.0.tgz",
+ "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=",
+ "dev": true
+ },
+ "assertion-error": {
+ "version": "1.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/assertion-error/-/assertion-error-1.0.2.tgz",
+ "integrity": "sha1-E8pRXYYgbaC6xm6DTdOX2HWBCUw=",
+ "dev": true
+ },
+ "ast-types": {
+ "version": "0.9.6",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ast-types/-/ast-types-0.9.6.tgz",
+ "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=",
+ "dev": true
+ },
+ "async": {
+ "version": "2.5.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/async/-/async-2.5.0.tgz",
+ "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==",
+ "dev": true,
+ "requires": {
+ "lodash": "4.17.4"
+ }
+ },
+ "async-each": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/async-each/-/async-each-1.0.1.tgz",
+ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "autoprefixer": {
+ "version": "6.7.7",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/autoprefixer/-/autoprefixer-6.7.7.tgz",
+ "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=",
+ "dev": true,
+ "requires": {
+ "browserslist": "1.7.7",
+ "caniuse-db": "1.0.30000748",
+ "normalize-range": "0.1.2",
+ "num2fraction": "1.2.2",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
+ },
+ "aws-sign2": {
+ "version": "0.6.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/aws-sign2/-/aws-sign2-0.6.0.tgz",
+ "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.6.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/aws4/-/aws4-1.6.0.tgz",
+ "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=",
+ "dev": true
+ },
+ "babel-cli": {
+ "version": "6.26.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-cli/-/babel-cli-6.26.0.tgz",
+ "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=",
+ "dev": true,
+ "requires": {
+ "babel-core": "6.26.0",
+ "babel-polyfill": "6.26.0",
+ "babel-register": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "chokidar": "1.7.0",
+ "commander": "2.11.0",
+ "convert-source-map": "1.5.0",
+ "fs-readdir-recursive": "1.0.0",
+ "glob": "7.1.2",
+ "lodash": "4.17.4",
+ "output-file-sync": "1.1.2",
+ "path-is-absolute": "1.0.1",
+ "slash": "1.0.0",
+ "source-map": "0.5.7",
+ "v8flags": "2.1.1"
+ }
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-core": {
+ "version": "6.26.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-core/-/babel-core-6.26.0.tgz",
+ "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-generator": "6.26.0",
+ "babel-helpers": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-register": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "convert-source-map": "1.5.0",
+ "debug": "2.6.9",
+ "json5": "0.5.1",
+ "lodash": "4.17.4",
+ "minimatch": "3.0.4",
+ "path-is-absolute": "1.0.1",
+ "private": "0.1.8",
+ "slash": "1.0.0",
+ "source-map": "0.5.7"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-generator/-/babel-generator-6.26.0.tgz",
+ "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.4",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ }
+ },
+ "babel-helper-bindify-decorators": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz",
+ "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-builder-binary-assignment-operator-visitor": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz",
+ "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=",
+ "dev": true,
+ "requires": {
+ "babel-helper-explode-assignable-expression": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-builder-react-jsx": {
+ "version": "6.26.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz",
+ "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "esutils": "2.0.2"
+ }
+ },
+ "babel-helper-call-delegate": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz",
+ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",
+ "dev": true,
+ "requires": {
+ "babel-helper-hoist-variables": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-define-map": {
+ "version": "6.26.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
+ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-helper-explode-assignable-expression": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz",
+ "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-explode-class": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz",
+ "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=",
+ "dev": true,
+ "requires": {
+ "babel-helper-bindify-decorators": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
+ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz",
+ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-hoist-variables": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz",
+ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-optimise-call-expression": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz",
+ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-regex": {
+ "version": "6.26.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
+ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-helper-remap-async-to-generator": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz",
+ "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-replace-supers": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz",
+ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",
+ "dev": true,
+ "requires": {
+ "babel-helper-optimise-call-expression": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helpers": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-helpers/-/babel-helpers-6.24.1.tgz",
+ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-loader": {
+ "version": "7.1.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-loader/-/babel-loader-7.1.2.tgz",
+ "integrity": "sha512-jRwlFbINAeyDStqK6Dd5YuY0k5YuzQUvlz2ZamuXrXmxav3pNqe9vfJ402+2G+OmlJSXxCOpB6Uz0INM7RQe2A==",
+ "dev": true,
+ "requires": {
+ "find-cache-dir": "1.0.0",
+ "loader-utils": "1.1.0",
+ "mkdirp": "0.5.1"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-check-es2015-constants": {
+ "version": "6.22.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz",
+ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-external-helpers": {
+ "version": "6.22.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-external-helpers/-/babel-plugin-external-helpers-6.22.0.tgz",
+ "integrity": "sha1-IoX0iwK9Xe3oUXXK+MYuhq3M76E=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-istanbul": {
+ "version": "4.1.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz",
+ "integrity": "sha1-Z2DN2Xf0EdPhdbsGTyvDJ9mbK24=",
+ "dev": true,
+ "requires": {
+ "find-up": "2.1.0",
+ "istanbul-lib-instrument": "1.8.0",
+ "test-exclude": "4.1.1"
+ }
+ },
+ "babel-plugin-syntax-async-functions": {
+ "version": "6.13.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz",
+ "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=",
+ "dev": true
+ },
+ "babel-plugin-syntax-async-generators": {
+ "version": "6.13.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz",
+ "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=",
+ "dev": true
+ },
+ "babel-plugin-syntax-class-constructor-call": {
+ "version": "6.18.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz",
+ "integrity": "sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY=",
+ "dev": true
+ },
+ "babel-plugin-syntax-class-properties": {
+ "version": "6.13.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz",
+ "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=",
+ "dev": true
+ },
+ "babel-plugin-syntax-decorators": {
+ "version": "6.13.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz",
+ "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=",
+ "dev": true
+ },
+ "babel-plugin-syntax-do-expressions": {
+ "version": "6.13.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz",
+ "integrity": "sha1-V0d1YTmqJtOQ0JQQsDdEugfkeW0=",
+ "dev": true
+ },
+ "babel-plugin-syntax-dynamic-import": {
+ "version": "6.18.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz",
+ "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=",
+ "dev": true
+ },
+ "babel-plugin-syntax-exponentiation-operator": {
+ "version": "6.13.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz",
+ "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=",
+ "dev": true
+ },
+ "babel-plugin-syntax-export-extensions": {
+ "version": "6.13.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz",
+ "integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE=",
+ "dev": true
+ },
+ "babel-plugin-syntax-flow": {
+ "version": "6.18.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz",
+ "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=",
+ "dev": true
+ },
+ "babel-plugin-syntax-function-bind": {
+ "version": "6.13.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz",
+ "integrity": "sha1-SMSV8Xe98xqYHnMvVa3AvdJgH0Y=",
+ "dev": true
+ },
+ "babel-plugin-syntax-jsx": {
+ "version": "6.18.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
+ "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=",
+ "dev": true
+ },
+ "babel-plugin-syntax-object-rest-spread": {
+ "version": "6.13.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
+ "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=",
+ "dev": true
+ },
+ "babel-plugin-syntax-trailing-function-commas": {
+ "version": "6.22.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz",
+ "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=",
+ "dev": true
+ },
+ "babel-plugin-transform-async-generator-functions": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz",
+ "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=",
+ "dev": true,
+ "requires": {
+ "babel-helper-remap-async-to-generator": "6.24.1",
+ "babel-plugin-syntax-async-generators": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-async-to-generator": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz",
+ "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=",
+ "dev": true,
+ "requires": {
+ "babel-helper-remap-async-to-generator": "6.24.1",
+ "babel-plugin-syntax-async-functions": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-class-constructor-call": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz",
+ "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-class-constructor-call": "6.18.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-class-properties": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz",
+ "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-plugin-syntax-class-properties": "6.13.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-decorators": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz",
+ "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=",
+ "dev": true,
+ "requires": {
+ "babel-helper-explode-class": "6.24.1",
+ "babel-plugin-syntax-decorators": "6.13.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-do-expressions": {
+ "version": "6.22.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz",
+ "integrity": "sha1-KMyvkoEtlJws0SgfaQyP3EaK6bs=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-do-expressions": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-arrow-functions": {
+ "version": "6.22.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
+ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoped-functions": {
+ "version": "6.22.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",
+ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoping": {
+ "version": "6.26.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
+ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-plugin-transform-es2015-classes": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz",
+ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
+ "dev": true,
+ "requires": {
+ "babel-helper-define-map": "6.26.0",
+ "babel-helper-function-name": "6.24.1",
+ "babel-helper-optimise-call-expression": "6.24.1",
+ "babel-helper-replace-supers": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-computed-properties": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz",
+ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-destructuring": {
+ "version": "6.23.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",
+ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-duplicate-keys": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz",
+ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-for-of": {
+ "version": "6.23.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz",
+ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz",
+ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-literals": {
+ "version": "6.22.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz",
+ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-amd": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz",
+ "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-commonjs": {
+ "version": "6.26.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz",
+ "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-strict-mode": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-systemjs": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz",
+ "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=",
+ "dev": true,
+ "requires": {
+ "babel-helper-hoist-variables": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-umd": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz",
+ "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-object-super": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz",
+ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",
+ "dev": true,
+ "requires": {
+ "babel-helper-replace-supers": "6.24.1",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-parameters": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz",
+ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",
+ "dev": true,
+ "requires": {
+ "babel-helper-call-delegate": "6.24.1",
+ "babel-helper-get-function-arity": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-shorthand-properties": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz",
+ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-spread": {
+ "version": "6.22.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz",
+ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-sticky-regex": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz",
+ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
+ "dev": true,
+ "requires": {
+ "babel-helper-regex": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-template-literals": {
+ "version": "6.22.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",
+ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-typeof-symbol": {
+ "version": "6.23.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz",
+ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-unicode-regex": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz",
+ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
+ "dev": true,
+ "requires": {
+ "babel-helper-regex": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "regexpu-core": "2.0.0"
+ }
+ },
+ "babel-plugin-transform-exponentiation-operator": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz",
+ "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=",
+ "dev": true,
+ "requires": {
+ "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1",
+ "babel-plugin-syntax-exponentiation-operator": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-export-extensions": {
+ "version": "6.22.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz",
+ "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-export-extensions": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-flow-strip-types": {
+ "version": "6.22.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz",
+ "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-flow": "6.18.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-function-bind": {
+ "version": "6.22.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz",
+ "integrity": "sha1-xvuOlqwpajELjPjqQBRiQH3fapc=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-function-bind": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-object-rest-spread": {
+ "version": "6.26.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz",
+ "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-object-rest-spread": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-react-display-name": {
+ "version": "6.25.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz",
+ "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-react-jsx": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz",
+ "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=",
+ "dev": true,
+ "requires": {
+ "babel-helper-builder-react-jsx": "6.26.0",
+ "babel-plugin-syntax-jsx": "6.18.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-react-jsx-self": {
+ "version": "6.22.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz",
+ "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-jsx": "6.18.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-react-jsx-source": {
+ "version": "6.22.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz",
+ "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-jsx": "6.18.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-regenerator": {
+ "version": "6.26.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
+ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
+ "dev": true,
+ "requires": {
+ "regenerator-transform": "0.10.1"
+ }
+ },
+ "babel-plugin-transform-strict-mode": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz",
+ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-polyfill": {
+ "version": "6.26.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
+ "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "core-js": "2.5.1",
+ "regenerator-runtime": "0.10.5"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "2.5.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/core-js/-/core-js-2.5.1.tgz",
+ "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.10.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
+ "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=",
+ "dev": true
+ }
+ }
+ },
+ "babel-preset-es2015": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz",
+ "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-check-es2015-constants": "6.22.0",
+ "babel-plugin-transform-es2015-arrow-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoping": "6.26.0",
+ "babel-plugin-transform-es2015-classes": "6.24.1",
+ "babel-plugin-transform-es2015-computed-properties": "6.24.1",
+ "babel-plugin-transform-es2015-destructuring": "6.23.0",
+ "babel-plugin-transform-es2015-duplicate-keys": "6.24.1",
+ "babel-plugin-transform-es2015-for-of": "6.23.0",
+ "babel-plugin-transform-es2015-function-name": "6.24.1",
+ "babel-plugin-transform-es2015-literals": "6.22.0",
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
+ "babel-plugin-transform-es2015-modules-systemjs": "6.24.1",
+ "babel-plugin-transform-es2015-modules-umd": "6.24.1",
+ "babel-plugin-transform-es2015-object-super": "6.24.1",
+ "babel-plugin-transform-es2015-parameters": "6.24.1",
+ "babel-plugin-transform-es2015-shorthand-properties": "6.24.1",
+ "babel-plugin-transform-es2015-spread": "6.22.0",
+ "babel-plugin-transform-es2015-sticky-regex": "6.24.1",
+ "babel-plugin-transform-es2015-template-literals": "6.22.0",
+ "babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
+ "babel-plugin-transform-es2015-unicode-regex": "6.24.1",
+ "babel-plugin-transform-regenerator": "6.26.0"
+ }
+ },
+ "babel-preset-flow": {
+ "version": "6.23.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz",
+ "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-flow-strip-types": "6.22.0"
+ }
+ },
+ "babel-preset-react": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-preset-react/-/babel-preset-react-6.24.1.tgz",
+ "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-jsx": "6.18.0",
+ "babel-plugin-transform-react-display-name": "6.25.0",
+ "babel-plugin-transform-react-jsx": "6.24.1",
+ "babel-plugin-transform-react-jsx-self": "6.22.0",
+ "babel-plugin-transform-react-jsx-source": "6.22.0",
+ "babel-preset-flow": "6.23.0"
+ }
+ },
+ "babel-preset-stage-0": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz",
+ "integrity": "sha1-VkLRUEL5E4TX5a+LyIsduVsDnmo=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-do-expressions": "6.22.0",
+ "babel-plugin-transform-function-bind": "6.22.0",
+ "babel-preset-stage-1": "6.24.1"
+ }
+ },
+ "babel-preset-stage-1": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz",
+ "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-class-constructor-call": "6.24.1",
+ "babel-plugin-transform-export-extensions": "6.22.0",
+ "babel-preset-stage-2": "6.24.1"
+ }
+ },
+ "babel-preset-stage-2": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz",
+ "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-dynamic-import": "6.18.0",
+ "babel-plugin-transform-class-properties": "6.24.1",
+ "babel-plugin-transform-decorators": "6.24.1",
+ "babel-preset-stage-3": "6.24.1"
+ }
+ },
+ "babel-preset-stage-3": {
+ "version": "6.24.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz",
+ "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-trailing-function-commas": "6.22.0",
+ "babel-plugin-transform-async-generator-functions": "6.24.1",
+ "babel-plugin-transform-async-to-generator": "6.24.1",
+ "babel-plugin-transform-exponentiation-operator": "6.24.1",
+ "babel-plugin-transform-object-rest-spread": "6.26.0"
+ }
+ },
+ "babel-register": {
+ "version": "6.26.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-register/-/babel-register-6.26.0.tgz",
+ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
+ "dev": true,
+ "requires": {
+ "babel-core": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "core-js": "2.5.1",
+ "home-or-tmp": "2.0.0",
+ "lodash": "4.17.4",
+ "mkdirp": "0.5.1",
+ "source-map-support": "0.4.18"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "2.5.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/core-js/-/core-js-2.5.1.tgz",
+ "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=",
+ "dev": true
+ }
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.1",
+ "regenerator-runtime": "0.11.0"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "2.5.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/core-js/-/core-js-2.5.1.tgz",
+ "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=",
+ "dev": true
+ }
+ }
+ },
+ "babel-template": {
+ "version": "6.26.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.4",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base64-js": {
+ "version": "1.2.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/base64-js/-/base64-js-1.2.1.tgz",
+ "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==",
+ "dev": true
+ },
+ "batch": {
+ "version": "0.6.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/batch/-/batch-0.6.1.tgz",
+ "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
+ "dev": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
+ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tweetnacl": "0.14.5"
+ }
+ },
+ "big.js": {
+ "version": "3.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/big.js/-/big.js-3.2.0.tgz",
+ "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
+ "dev": true
+ },
+ "binary-extensions": {
+ "version": "1.10.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/binary-extensions/-/binary-extensions-1.10.0.tgz",
+ "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=",
+ "dev": true
+ },
+ "bluebird": {
+ "version": "3.5.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/bluebird/-/bluebird-3.5.1.tgz",
+ "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==",
+ "dev": true
+ },
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "dev": true
+ },
+ "body-parser": {
+ "version": "1.18.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/body-parser/-/body-parser-1.18.2.tgz",
+ "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
+ "dev": true,
+ "requires": {
+ "bytes": "3.0.0",
+ "content-type": "1.0.4",
+ "debug": "2.6.9",
+ "depd": "1.1.1",
+ "http-errors": "1.6.2",
+ "iconv-lite": "0.4.19",
+ "on-finished": "2.3.0",
+ "qs": "6.5.1",
+ "raw-body": "2.3.2",
+ "type-is": "1.6.15"
+ },
+ "dependencies": {
+ "qs": {
+ "version": "6.5.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/qs/-/qs-6.5.1.tgz",
+ "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==",
+ "dev": true
+ }
+ }
+ },
+ "bonjour": {
+ "version": "3.5.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/bonjour/-/bonjour-3.5.0.tgz",
+ "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
+ "dev": true,
+ "requires": {
+ "array-flatten": "2.1.1",
+ "deep-equal": "1.0.1",
+ "dns-equal": "1.0.0",
+ "dns-txt": "2.0.2",
+ "multicast-dns": "6.1.1",
+ "multicast-dns-service-types": "1.1.0"
+ }
+ },
+ "boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+ "dev": true
+ },
+ "boom": {
+ "version": "2.10.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/boom/-/boom-2.10.1.tgz",
+ "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
+ "dev": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "1.8.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/braces/-/braces-1.8.5.tgz",
+ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "dev": true,
+ "requires": {
+ "expand-range": "1.8.2",
+ "preserve": "0.2.0",
+ "repeat-element": "1.1.2"
+ }
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+ "dev": true
+ },
+ "browser-resolve": {
+ "version": "1.11.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/browser-resolve/-/browser-resolve-1.11.2.tgz",
+ "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=",
+ "dev": true,
+ "requires": {
+ "resolve": "1.1.7"
+ }
+ },
+ "browser-stdout": {
+ "version": "1.3.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/browser-stdout/-/browser-stdout-1.3.0.tgz",
+ "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=",
+ "dev": true
+ },
+ "browserify-aes": {
+ "version": "1.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/browserify-aes/-/browserify-aes-1.1.1.tgz",
+ "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==",
+ "dev": true,
+ "requires": {
+ "buffer-xor": "1.0.3",
+ "cipher-base": "1.0.4",
+ "create-hash": "1.1.3",
+ "evp_bytestokey": "1.0.3",
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/browserify-cipher/-/browserify-cipher-1.0.0.tgz",
+ "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=",
+ "dev": true,
+ "requires": {
+ "browserify-aes": "1.1.1",
+ "browserify-des": "1.0.0",
+ "evp_bytestokey": "1.0.3"
+ }
+ },
+ "browserify-des": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/browserify-des/-/browserify-des-1.0.0.tgz",
+ "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=",
+ "dev": true,
+ "requires": {
+ "cipher-base": "1.0.4",
+ "des.js": "1.0.0",
+ "inherits": "2.0.3"
+ }
+ },
+ "browserify-rsa": {
+ "version": "4.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "randombytes": "2.0.5"
+ }
+ },
+ "browserify-sign": {
+ "version": "4.0.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/browserify-sign/-/browserify-sign-4.0.4.tgz",
+ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "browserify-rsa": "4.0.1",
+ "create-hash": "1.1.3",
+ "create-hmac": "1.1.6",
+ "elliptic": "6.4.0",
+ "inherits": "2.0.3",
+ "parse-asn1": "5.1.0"
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.1.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
+ "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=",
+ "dev": true,
+ "requires": {
+ "pako": "0.2.9"
+ }
+ },
+ "browserslist": {
+ "version": "1.7.7",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/browserslist/-/browserslist-1.7.7.tgz",
+ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
+ "dev": true,
+ "requires": {
+ "caniuse-db": "1.0.30000748",
+ "electron-to-chromium": "1.3.27"
+ }
+ },
+ "buffer": {
+ "version": "4.9.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/buffer/-/buffer-4.9.1.tgz",
+ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
+ "dev": true,
+ "requires": {
+ "base64-js": "1.2.1",
+ "ieee754": "1.1.8",
+ "isarray": "1.0.0"
+ }
+ },
+ "buffer-indexof": {
+ "version": "1.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/buffer-indexof/-/buffer-indexof-1.1.1.tgz",
+ "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==",
+ "dev": true
+ },
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+ "dev": true
+ },
+ "build": {
+ "version": "0.1.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/build/-/build-0.1.4.tgz",
+ "integrity": "sha1-cH/gJv/O3crL/c3zVur9pk8VEEY=",
+ "dev": true,
+ "requires": {
+ "cssmin": "0.3.2",
+ "jsmin": "1.0.1",
+ "jxLoader": "0.1.1",
+ "moo-server": "1.3.0",
+ "promised-io": "0.3.5",
+ "timespan": "2.3.0",
+ "uglify-js": "1.3.5",
+ "walker": "1.0.7",
+ "winston": "2.4.0",
+ "wrench": "1.3.9"
+ },
+ "dependencies": {
+ "uglify-js": {
+ "version": "1.3.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/uglify-js/-/uglify-js-1.3.5.tgz",
+ "integrity": "sha1-S1v/+Rhu/7qoiOTJ6UvZ/EyUkp0=",
+ "dev": true
+ }
+ }
+ },
+ "builtin-modules": {
+ "version": "1.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+ "dev": true
+ },
+ "builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
+ "dev": true
+ },
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+ "dev": true
+ },
+ "caller-path": {
+ "version": "0.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/caller-path/-/caller-path-0.1.0.tgz",
+ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+ "dev": true,
+ "requires": {
+ "callsites": "0.2.0"
+ }
+ },
+ "callsites": {
+ "version": "0.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/callsites/-/callsites-0.2.0.tgz",
+ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
+ "dev": true
+ },
+ "camel-case": {
+ "version": "3.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/camel-case/-/camel-case-3.0.0.tgz",
+ "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
+ "dev": true,
+ "requires": {
+ "no-case": "2.3.2",
+ "upper-case": "1.1.3"
+ }
+ },
+ "camelcase": {
+ "version": "1.2.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/camelcase/-/camelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+ "dev": true
+ },
+ "camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "dev": true,
+ "requires": {
+ "camelcase": "2.1.1",
+ "map-obj": "1.0.1"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ }
+ }
+ },
+ "caniuse-api": {
+ "version": "1.6.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/caniuse-api/-/caniuse-api-1.6.1.tgz",
+ "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=",
+ "dev": true,
+ "requires": {
+ "browserslist": "1.7.7",
+ "caniuse-db": "1.0.30000748",
+ "lodash.memoize": "4.1.2",
+ "lodash.uniq": "4.5.0"
+ }
+ },
+ "caniuse-db": {
+ "version": "1.0.30000748",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/caniuse-db/-/caniuse-db-1.0.30000748.tgz",
+ "integrity": "sha1-eF2e381kW/eVxv887TPEXVgMSKA=",
+ "dev": true
+ },
+ "caseless": {
+ "version": "0.11.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/caseless/-/caseless-0.11.0.tgz",
+ "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=",
+ "dev": true
+ },
+ "center-align": {
+ "version": "0.1.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/center-align/-/center-align-0.1.3.tgz",
+ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+ "dev": true,
+ "requires": {
+ "align-text": "0.1.4",
+ "lazy-cache": "1.0.4"
+ }
+ },
+ "chai": {
+ "version": "4.1.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=",
+ "dev": true,
+ "requires": {
+ "assertion-error": "1.0.2",
+ "check-error": "1.0.2",
+ "deep-eql": "3.0.1",
+ "get-func-name": "2.0.0",
+ "pathval": "1.1.0",
+ "type-detect": "4.0.3"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "charenc": {
+ "version": "0.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/charenc/-/charenc-0.0.2.tgz",
+ "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=",
+ "dev": true
+ },
+ "check-error": {
+ "version": "1.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/check-error/-/check-error-1.0.2.tgz",
+ "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
+ "dev": true
+ },
+ "chokidar": {
+ "version": "1.7.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/chokidar/-/chokidar-1.7.0.tgz",
+ "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
+ "dev": true,
+ "requires": {
+ "anymatch": "1.3.2",
+ "async-each": "1.0.1",
+ "fsevents": "1.1.2",
+ "glob-parent": "2.0.0",
+ "inherits": "2.0.3",
+ "is-binary-path": "1.0.1",
+ "is-glob": "2.0.1",
+ "path-is-absolute": "1.0.1",
+ "readdirp": "2.1.0"
+ }
+ },
+ "cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "circular-json": {
+ "version": "0.3.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/circular-json/-/circular-json-0.3.3.tgz",
+ "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
+ "dev": true
+ },
+ "clap": {
+ "version": "1.2.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/clap/-/clap-1.2.3.tgz",
+ "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3"
+ }
+ },
+ "classnames": {
+ "version": "2.2.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/classnames/-/classnames-2.2.5.tgz",
+ "integrity": "sha1-+zgB1FNGdknvNgPH1hoCvRKb3m0="
+ },
+ "clean-css": {
+ "version": "4.1.9",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/clean-css/-/clean-css-4.1.9.tgz",
+ "integrity": "sha1-Nc7ornaHpJuYA09w3gDE7dOCYwE=",
+ "dev": true,
+ "requires": {
+ "source-map": "0.5.7"
+ }
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "2.0.0"
+ }
+ },
+ "cli-width": {
+ "version": "2.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+ "dev": true
+ },
+ "clipboard": {
+ "version": "1.7.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/clipboard/-/clipboard-1.7.1.tgz",
+ "integrity": "sha1-Ng1taUbpmnof7zleQrqStem1oWs=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "good-listener": "1.2.2",
+ "select": "1.1.2",
+ "tiny-emitter": "2.0.2"
+ }
+ },
+ "cliui": {
+ "version": "2.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/cliui/-/cliui-2.1.0.tgz",
+ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+ "dev": true,
+ "requires": {
+ "center-align": "0.1.3",
+ "right-align": "0.1.3",
+ "wordwrap": "0.0.2"
+ },
+ "dependencies": {
+ "wordwrap": {
+ "version": "0.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/wordwrap/-/wordwrap-0.0.2.tgz",
+ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
+ "dev": true
+ }
+ }
+ },
+ "clone": {
+ "version": "1.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/clone/-/clone-1.0.2.tgz",
+ "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=",
+ "dev": true
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "dev": true
+ },
+ "coa": {
+ "version": "1.0.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/coa/-/coa-1.0.4.tgz",
+ "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=",
+ "dev": true,
+ "requires": {
+ "q": "1.5.1"
+ }
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "color": {
+ "version": "0.11.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/color/-/color-0.11.4.tgz",
+ "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=",
+ "dev": true,
+ "requires": {
+ "clone": "1.0.2",
+ "color-convert": "1.9.0",
+ "color-string": "0.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/color-convert/-/color-convert-1.9.0.tgz",
+ "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-diff": {
+ "version": "0.1.7",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/color-diff/-/color-diff-0.1.7.tgz",
+ "integrity": "sha1-bbeM2UgqjkWdQIIer0tQMoPcuOI=",
+ "dev": true
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "color-string": {
+ "version": "0.3.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/color-string/-/color-string-0.3.0.tgz",
+ "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "colormin": {
+ "version": "1.1.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/colormin/-/colormin-1.1.2.tgz",
+ "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=",
+ "dev": true,
+ "requires": {
+ "color": "0.11.4",
+ "css-color-names": "0.0.4",
+ "has": "1.0.1"
+ }
+ },
+ "colors": {
+ "version": "1.1.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/colors/-/colors-1.1.2.tgz",
+ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.0.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/combined-stream/-/combined-stream-1.0.5.tgz",
+ "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "1.0.0"
+ }
+ },
+ "commander": {
+ "version": "2.11.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/commander/-/commander-2.11.0.tgz",
+ "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",
+ "dev": true
+ },
+ "common-tags": {
+ "version": "1.4.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/common-tags/-/common-tags-1.4.0.tgz",
+ "integrity": "sha1-EYe+Tz1M8MBCfUP3Tu8fc1AWFMA=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+ "dev": true
+ },
+ "compressible": {
+ "version": "2.0.11",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/compressible/-/compressible-2.0.11.tgz",
+ "integrity": "sha1-FnGKdd4oPtjmBAQWJaIGRYZ5fYo=",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.30.0"
+ }
+ },
+ "compression": {
+ "version": "1.7.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/compression/-/compression-1.7.1.tgz",
+ "integrity": "sha1-7/JgPvwuIs+G810uuTWJ+YdTc9s=",
+ "dev": true,
+ "requires": {
+ "accepts": "1.3.4",
+ "bytes": "3.0.0",
+ "compressible": "2.0.11",
+ "debug": "2.6.9",
+ "on-headers": "1.0.1",
+ "safe-buffer": "5.1.1",
+ "vary": "1.1.2"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "concat-stream": {
+ "version": "1.6.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/concat-stream/-/concat-stream-1.6.0.tgz",
+ "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3",
+ "typedarray": "0.0.6"
+ }
+ },
+ "concurrently": {
+ "version": "3.5.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/concurrently/-/concurrently-3.5.0.tgz",
+ "integrity": "sha1-jPG3cHppFqeKT/W3e7BN7FSzebI=",
+ "dev": true,
+ "requires": {
+ "chalk": "0.5.1",
+ "commander": "2.6.0",
+ "date-fns": "1.29.0",
+ "lodash": "4.17.4",
+ "rx": "2.3.24",
+ "spawn-command": "0.0.2-1",
+ "supports-color": "3.2.3",
+ "tree-kill": "1.2.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "0.2.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ansi-regex/-/ansi-regex-0.2.1.tgz",
+ "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "1.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ansi-styles/-/ansi-styles-1.1.0.tgz",
+ "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "0.5.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/chalk/-/chalk-0.5.1.tgz",
+ "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "1.1.0",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "0.1.0",
+ "strip-ansi": "0.3.0",
+ "supports-color": "0.2.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "0.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/supports-color/-/supports-color-0.2.0.tgz",
+ "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=",
+ "dev": true
+ }
+ }
+ },
+ "commander": {
+ "version": "2.6.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/commander/-/commander-2.6.0.tgz",
+ "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "0.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/has-ansi/-/has-ansi-0.1.0.tgz",
+ "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "0.2.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "0.3.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/strip-ansi/-/strip-ansi-0.3.0.tgz",
+ "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "0.2.1"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "connect-history-api-fallback": {
+ "version": "1.4.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/connect-history-api-fallback/-/connect-history-api-fallback-1.4.0.tgz",
+ "integrity": "sha1-PbJPlz9LkjsOgvYZzg3wJBHKYj0=",
+ "dev": true
+ },
+ "console-browserify": {
+ "version": "1.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/console-browserify/-/console-browserify-1.1.0.tgz",
+ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+ "dev": true,
+ "requires": {
+ "date-now": "0.1.4"
+ }
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
+ "dev": true
+ },
+ "content-disposition": {
+ "version": "0.5.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/content-disposition/-/content-disposition-0.5.2.tgz",
+ "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=",
+ "dev": true
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+ "dev": true
+ },
+ "content-type-parser": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/content-type-parser/-/content-type-parser-1.0.1.tgz",
+ "integrity": "sha1-w+VpiMU8ZRJ/tG1AMqOpACRv3JQ=",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.5.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/convert-source-map/-/convert-source-map-1.5.0.tgz",
+ "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=",
+ "dev": true
+ },
+ "cookie": {
+ "version": "0.3.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/cookie/-/cookie-0.3.1.tgz",
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
+ "dev": true
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "1.2.7",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/core-js/-/core-js-1.2.7.tgz",
+ "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY="
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "coveralls": {
+ "version": "2.13.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/coveralls/-/coveralls-2.13.3.tgz",
+ "integrity": "sha512-iiAmn+l1XqRwNLXhW8Rs5qHZRFMYp9ZIPjEOVRpC/c4so6Y/f4/lFi0FfR5B9cCqgyhkJ5cZmbvcVRfP8MHchw==",
+ "dev": true,
+ "requires": {
+ "js-yaml": "3.6.1",
+ "lcov-parse": "0.0.10",
+ "log-driver": "1.2.5",
+ "minimist": "1.2.0",
+ "request": "2.79.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "cp-file": {
+ "version": "3.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/cp-file/-/cp-file-3.2.0.tgz",
+ "integrity": "sha1-b4NhYlRiTwrViqSqjQdvAmvn4Yg=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "mkdirp": "0.5.1",
+ "nested-error-stacks": "1.0.2",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "cpy": {
+ "version": "4.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/cpy/-/cpy-4.0.1.tgz",
+ "integrity": "sha1-tnJn66LzlgugalphrJQDNCKDNCQ=",
+ "dev": true,
+ "requires": {
+ "cp-file": "3.2.0",
+ "globby": "4.1.0",
+ "meow": "3.7.0",
+ "nested-error-stacks": "1.0.2",
+ "object-assign": "4.1.1",
+ "pinkie-promise": "2.0.1"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "6.0.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/glob/-/glob-6.0.4.tgz",
+ "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
+ "dev": true,
+ "requires": {
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "globby": {
+ "version": "4.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/globby/-/globby-4.1.0.tgz",
+ "integrity": "sha1-CA9UVJ7BuCpsYOYx/ILhIR2+lfg=",
+ "dev": true,
+ "requires": {
+ "array-union": "1.0.2",
+ "arrify": "1.0.1",
+ "glob": "6.0.4",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ }
+ }
+ }
+ },
+ "cpy-cli": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/cpy-cli/-/cpy-cli-1.0.1.tgz",
+ "integrity": "sha1-Z/taSi3sKMqKv/N13kuecfanVhw=",
+ "dev": true,
+ "requires": {
+ "cpy": "4.0.1",
+ "meow": "3.7.0"
+ }
+ },
+ "create-ecdh": {
+ "version": "4.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/create-ecdh/-/create-ecdh-4.0.0.tgz",
+ "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "elliptic": "6.4.0"
+ }
+ },
+ "create-hash": {
+ "version": "1.1.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/create-hash/-/create-hash-1.1.3.tgz",
+ "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=",
+ "dev": true,
+ "requires": {
+ "cipher-base": "1.0.4",
+ "inherits": "2.0.3",
+ "ripemd160": "2.0.1",
+ "sha.js": "2.4.9"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.6",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/create-hmac/-/create-hmac-1.1.6.tgz",
+ "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=",
+ "dev": true,
+ "requires": {
+ "cipher-base": "1.0.4",
+ "create-hash": "1.1.3",
+ "inherits": "2.0.3",
+ "ripemd160": "2.0.1",
+ "safe-buffer": "5.1.1",
+ "sha.js": "2.4.9"
+ }
+ },
+ "create-react-class": {
+ "version": "15.6.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/create-react-class/-/create-react-class-15.6.2.tgz",
+ "integrity": "sha1-zx7RXxKq1/FO9fLf4F5sQvke8Co=",
+ "requires": {
+ "fbjs": "0.8.16",
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1"
+ }
+ },
+ "cross-env": {
+ "version": "5.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/cross-env/-/cross-env-5.1.0.tgz",
+ "integrity": "sha512-R+0paw9UZQc7odHjIxElqyYotgyMlhcUMTfRxiv4I22grgvS5WOSSfCpyfAZUDhP/c9ShSRv+Hzfxs6fY4JA7g==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "5.1.0",
+ "is-windows": "1.0.1"
+ }
+ },
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "4.1.1",
+ "shebang-command": "1.2.0",
+ "which": "1.3.0"
+ }
+ },
+ "crypt": {
+ "version": "0.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/crypt/-/crypt-0.0.2.tgz",
+ "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=",
+ "dev": true
+ },
+ "cryptiles": {
+ "version": "2.0.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/cryptiles/-/cryptiles-2.0.5.tgz",
+ "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
+ "dev": true,
+ "requires": {
+ "boom": "2.10.1"
+ }
+ },
+ "crypto-browserify": {
+ "version": "3.11.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/crypto-browserify/-/crypto-browserify-3.11.1.tgz",
+ "integrity": "sha512-Na7ZlwCOqoaW5RwUK1WpXws2kv8mNhWdTlzob0UXulk6G9BDbyiJaGTYBIX61Ozn9l1EPPJpICZb4DaOpT9NlQ==",
+ "dev": true,
+ "requires": {
+ "browserify-cipher": "1.0.0",
+ "browserify-sign": "4.0.4",
+ "create-ecdh": "4.0.0",
+ "create-hash": "1.1.3",
+ "create-hmac": "1.1.6",
+ "diffie-hellman": "5.0.2",
+ "inherits": "2.0.3",
+ "pbkdf2": "3.0.14",
+ "public-encrypt": "4.0.0",
+ "randombytes": "2.0.5"
+ }
+ },
+ "css-color-names": {
+ "version": "0.0.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/css-color-names/-/css-color-names-0.0.4.tgz",
+ "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=",
+ "dev": true
+ },
+ "css-loader": {
+ "version": "0.28.7",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/css-loader/-/css-loader-0.28.7.tgz",
+ "integrity": "sha512-GxMpax8a/VgcfRrVy0gXD6yLd5ePYbXX/5zGgTVYp4wXtJklS8Z2VaUArJgc//f6/Dzil7BaJObdSv8eKKCPgg==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "css-selector-tokenizer": "0.7.0",
+ "cssnano": "3.10.0",
+ "icss-utils": "2.1.0",
+ "loader-utils": "1.1.0",
+ "lodash.camelcase": "4.3.0",
+ "object-assign": "4.1.1",
+ "postcss": "5.2.18",
+ "postcss-modules-extract-imports": "1.1.0",
+ "postcss-modules-local-by-default": "1.2.0",
+ "postcss-modules-scope": "1.1.0",
+ "postcss-modules-values": "1.3.0",
+ "postcss-value-parser": "3.3.0",
+ "source-list-map": "2.0.0"
+ }
+ },
+ "css-select": {
+ "version": "1.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/css-select/-/css-select-1.2.0.tgz",
+ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
+ "dev": true,
+ "requires": {
+ "boolbase": "1.0.0",
+ "css-what": "2.1.0",
+ "domutils": "1.5.1",
+ "nth-check": "1.0.1"
+ }
+ },
+ "css-selector-tokenizer": {
+ "version": "0.7.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz",
+ "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=",
+ "dev": true,
+ "requires": {
+ "cssesc": "0.1.0",
+ "fastparse": "1.1.1",
+ "regexpu-core": "1.0.0"
+ },
+ "dependencies": {
+ "regexpu-core": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/regexpu-core/-/regexpu-core-1.0.0.tgz",
+ "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=",
+ "dev": true,
+ "requires": {
+ "regenerate": "1.3.3",
+ "regjsgen": "0.2.0",
+ "regjsparser": "0.1.5"
+ }
+ }
+ }
+ },
+ "css-what": {
+ "version": "2.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/css-what/-/css-what-2.1.0.tgz",
+ "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=",
+ "dev": true
+ },
+ "cssesc": {
+ "version": "0.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/cssesc/-/cssesc-0.1.0.tgz",
+ "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=",
+ "dev": true
+ },
+ "cssmin": {
+ "version": "0.3.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/cssmin/-/cssmin-0.3.2.tgz",
+ "integrity": "sha1-3c5MVHtRCuDVlKjx+/iq+OLFwA0=",
+ "dev": true
+ },
+ "cssnano": {
+ "version": "3.10.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/cssnano/-/cssnano-3.10.0.tgz",
+ "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=",
+ "dev": true,
+ "requires": {
+ "autoprefixer": "6.7.7",
+ "decamelize": "1.2.0",
+ "defined": "1.0.0",
+ "has": "1.0.1",
+ "object-assign": "4.1.1",
+ "postcss": "5.2.18",
+ "postcss-calc": "5.3.1",
+ "postcss-colormin": "2.2.2",
+ "postcss-convert-values": "2.6.1",
+ "postcss-discard-comments": "2.0.4",
+ "postcss-discard-duplicates": "2.1.0",
+ "postcss-discard-empty": "2.1.0",
+ "postcss-discard-overridden": "0.1.1",
+ "postcss-discard-unused": "2.2.3",
+ "postcss-filter-plugins": "2.0.2",
+ "postcss-merge-idents": "2.1.7",
+ "postcss-merge-longhand": "2.0.2",
+ "postcss-merge-rules": "2.1.2",
+ "postcss-minify-font-values": "1.0.5",
+ "postcss-minify-gradients": "1.0.5",
+ "postcss-minify-params": "1.2.2",
+ "postcss-minify-selectors": "2.1.1",
+ "postcss-normalize-charset": "1.1.1",
+ "postcss-normalize-url": "3.0.8",
+ "postcss-ordered-values": "2.2.3",
+ "postcss-reduce-idents": "2.4.0",
+ "postcss-reduce-initial": "1.0.1",
+ "postcss-reduce-transforms": "1.0.4",
+ "postcss-svgo": "2.1.6",
+ "postcss-unique-selectors": "2.0.2",
+ "postcss-value-parser": "3.3.0",
+ "postcss-zindex": "2.2.0"
+ }
+ },
+ "csso": {
+ "version": "2.3.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/csso/-/csso-2.3.2.tgz",
+ "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=",
+ "dev": true,
+ "requires": {
+ "clap": "1.2.3",
+ "source-map": "0.5.7"
+ }
+ },
+ "cssom": {
+ "version": "0.3.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/cssom/-/cssom-0.3.2.tgz",
+ "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=",
+ "dev": true
+ },
+ "cssstyle": {
+ "version": "0.2.37",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/cssstyle/-/cssstyle-0.2.37.tgz",
+ "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=",
+ "dev": true,
+ "requires": {
+ "cssom": "0.3.2"
+ }
+ },
+ "currently-unhandled": {
+ "version": "0.4.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "dev": true,
+ "requires": {
+ "array-find-index": "1.0.2"
+ }
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "d": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/d/-/d-1.0.0.tgz",
+ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
+ "dev": true,
+ "requires": {
+ "es5-ext": "0.10.35"
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "date-fns": {
+ "version": "1.29.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/date-fns/-/date-fns-1.29.0.tgz",
+ "integrity": "sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==",
+ "dev": true
+ },
+ "date-now": {
+ "version": "0.1.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/date-now/-/date-now-0.1.4.tgz",
+ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "deep-eql": {
+ "version": "3.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/deep-eql/-/deep-eql-3.0.1.tgz",
+ "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
+ "dev": true,
+ "requires": {
+ "type-detect": "4.0.3"
+ }
+ },
+ "deep-equal": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/deep-equal/-/deep-equal-1.0.1.tgz",
+ "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "define-properties": {
+ "version": "1.1.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/define-properties/-/define-properties-1.1.2.tgz",
+ "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=",
+ "dev": true,
+ "requires": {
+ "foreach": "2.0.5",
+ "object-keys": "1.0.11"
+ }
+ },
+ "defined": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/defined/-/defined-1.0.0.tgz",
+ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
+ "dev": true
+ },
+ "del": {
+ "version": "2.2.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/del/-/del-2.2.2.tgz",
+ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
+ "dev": true,
+ "requires": {
+ "globby": "5.0.0",
+ "is-path-cwd": "1.0.0",
+ "is-path-in-cwd": "1.0.0",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1",
+ "rimraf": "2.6.2"
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "delegate": {
+ "version": "3.1.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/delegate/-/delegate-3.1.3.tgz",
+ "integrity": "sha1-moJRp3fXAl+qVXN7w7BxdCEnqf0=",
+ "dev": true,
+ "optional": true
+ },
+ "depd": {
+ "version": "1.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/depd/-/depd-1.1.1.tgz",
+ "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=",
+ "dev": true
+ },
+ "des.js": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/des.js/-/des.js-1.0.0.tgz",
+ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0"
+ }
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "detect-node": {
+ "version": "2.0.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/detect-node/-/detect-node-2.0.3.tgz",
+ "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=",
+ "dev": true
+ },
+ "diff": {
+ "version": "3.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/diff/-/diff-3.2.0.tgz",
+ "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=",
+ "dev": true
+ },
+ "diffie-hellman": {
+ "version": "5.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/diffie-hellman/-/diffie-hellman-5.0.2.tgz",
+ "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "miller-rabin": "4.0.1",
+ "randombytes": "2.0.5"
+ }
+ },
+ "dns-equal": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/dns-equal/-/dns-equal-1.0.0.tgz",
+ "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=",
+ "dev": true
+ },
+ "dns-packet": {
+ "version": "1.2.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/dns-packet/-/dns-packet-1.2.2.tgz",
+ "integrity": "sha512-kN+DjfGF7dJGUL7nWRktL9Z18t1rWP3aQlyZdY8XlpvU3Nc6GeFTQApftcjtWKxAZfiggZSGrCEoszNgvnpwDg==",
+ "dev": true,
+ "requires": {
+ "ip": "1.1.5",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "dns-txt": {
+ "version": "2.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/dns-txt/-/dns-txt-2.0.2.tgz",
+ "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
+ "dev": true,
+ "requires": {
+ "buffer-indexof": "1.1.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/doctrine/-/doctrine-2.0.0.tgz",
+ "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "isarray": "1.0.0"
+ }
+ },
+ "dom-converter": {
+ "version": "0.1.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/dom-converter/-/dom-converter-0.1.4.tgz",
+ "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=",
+ "dev": true,
+ "requires": {
+ "utila": "0.3.3"
+ },
+ "dependencies": {
+ "utila": {
+ "version": "0.3.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/utila/-/utila-0.3.3.tgz",
+ "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=",
+ "dev": true
+ }
+ }
+ },
+ "dom-helpers": {
+ "version": "3.2.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/dom-helpers/-/dom-helpers-3.2.1.tgz",
+ "integrity": "sha1-MgPgf+0he9H0JLAZc1WC/Deyglo=",
+ "dev": true
+ },
+ "dom-serializer": {
+ "version": "0.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/dom-serializer/-/dom-serializer-0.1.0.tgz",
+ "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.1.3",
+ "entities": "1.1.1"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "1.1.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/domelementtype/-/domelementtype-1.1.3.tgz",
+ "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=",
+ "dev": true
+ }
+ }
+ },
+ "domain-browser": {
+ "version": "1.1.7",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/domain-browser/-/domain-browser-1.1.7.tgz",
+ "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=",
+ "dev": true
+ },
+ "domelementtype": {
+ "version": "1.3.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/domelementtype/-/domelementtype-1.3.0.tgz",
+ "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=",
+ "dev": true
+ },
+ "domhandler": {
+ "version": "2.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/domhandler/-/domhandler-2.1.0.tgz",
+ "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.3.0"
+ }
+ },
+ "domutils": {
+ "version": "1.5.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/domutils/-/domutils-1.5.1.tgz",
+ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "0.1.0",
+ "domelementtype": "1.3.0"
+ }
+ },
+ "duplexer": {
+ "version": "0.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/duplexer/-/duplexer-0.1.1.tgz",
+ "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
+ "dev": true
+ },
+ "ecc-jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
+ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.1"
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+ "dev": true
+ },
+ "electron-to-chromium": {
+ "version": "1.3.27",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz",
+ "integrity": "sha1-eOy4o5kGYYe7N07t412ccFZagD0=",
+ "dev": true
+ },
+ "elliptic": {
+ "version": "6.4.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/elliptic/-/elliptic-6.4.0.tgz",
+ "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "brorand": "1.1.0",
+ "hash.js": "1.1.3",
+ "hmac-drbg": "1.0.1",
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0",
+ "minimalistic-crypto-utils": "1.0.1"
+ }
+ },
+ "emojis-list": {
+ "version": "2.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/emojis-list/-/emojis-list-2.1.0.tgz",
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
+ "dev": true
+ },
+ "encodeurl": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/encodeurl/-/encodeurl-1.0.1.tgz",
+ "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=",
+ "dev": true
+ },
+ "encoding": {
+ "version": "0.1.12",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/encoding/-/encoding-0.1.12.tgz",
+ "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
+ "requires": {
+ "iconv-lite": "0.4.19"
+ }
+ },
+ "enhanced-resolve": {
+ "version": "3.4.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz",
+ "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "memory-fs": "0.4.1",
+ "object-assign": "4.1.1",
+ "tapable": "0.2.8"
+ }
+ },
+ "entities": {
+ "version": "1.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/entities/-/entities-1.1.1.tgz",
+ "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=",
+ "dev": true
+ },
+ "errno": {
+ "version": "0.1.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/errno/-/errno-0.1.4.tgz",
+ "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=",
+ "dev": true,
+ "requires": {
+ "prr": "0.0.0"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/error-ex/-/error-ex-1.3.1.tgz",
+ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "0.2.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.9.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/es-abstract/-/es-abstract-1.9.0.tgz",
+ "integrity": "sha512-kk3IJoKo7A3pWJc0OV8yZ/VEX2oSUytfekrJiqoxBlKJMFAJVJVpGdHClCCTdv+Fn2zHfpDHHIelMFhZVfef3Q==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "1.1.1",
+ "function-bind": "1.1.1",
+ "has": "1.0.1",
+ "is-callable": "1.1.3",
+ "is-regex": "1.0.4"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/es-to-primitive/-/es-to-primitive-1.1.1.tgz",
+ "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=",
+ "dev": true,
+ "requires": {
+ "is-callable": "1.1.3",
+ "is-date-object": "1.0.1",
+ "is-symbol": "1.0.1"
+ }
+ },
+ "es5-ext": {
+ "version": "0.10.35",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/es5-ext/-/es5-ext-0.10.35.tgz",
+ "integrity": "sha1-GO6FjOajxFx9eekcFfzKnsVoSU8=",
+ "dev": true,
+ "requires": {
+ "es6-iterator": "2.0.3",
+ "es6-symbol": "3.1.1"
+ }
+ },
+ "es6-iterator": {
+ "version": "2.0.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/es6-iterator/-/es6-iterator-2.0.3.tgz",
+ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
+ "dev": true,
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.35",
+ "es6-symbol": "3.1.1"
+ }
+ },
+ "es6-map": {
+ "version": "0.1.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/es6-map/-/es6-map-0.1.5.tgz",
+ "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=",
+ "dev": true,
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.35",
+ "es6-iterator": "2.0.3",
+ "es6-set": "0.1.5",
+ "es6-symbol": "3.1.1",
+ "event-emitter": "0.3.5"
+ }
+ },
+ "es6-set": {
+ "version": "0.1.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/es6-set/-/es6-set-0.1.5.tgz",
+ "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=",
+ "dev": true,
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.35",
+ "es6-iterator": "2.0.3",
+ "es6-symbol": "3.1.1",
+ "event-emitter": "0.3.5"
+ }
+ },
+ "es6-symbol": {
+ "version": "3.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/es6-symbol/-/es6-symbol-3.1.1.tgz",
+ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
+ "dev": true,
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.35"
+ }
+ },
+ "es6-templates": {
+ "version": "0.2.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/es6-templates/-/es6-templates-0.2.3.tgz",
+ "integrity": "sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ=",
+ "dev": true,
+ "requires": {
+ "recast": "0.11.23",
+ "through": "2.3.8"
+ }
+ },
+ "es6-weak-map": {
+ "version": "2.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/es6-weak-map/-/es6-weak-map-2.0.2.tgz",
+ "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=",
+ "dev": true,
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.35",
+ "es6-iterator": "2.0.3",
+ "es6-symbol": "3.1.1"
+ }
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.8.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/escodegen/-/escodegen-1.8.1.tgz",
+ "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=",
+ "dev": true,
+ "requires": {
+ "esprima": "2.7.3",
+ "estraverse": "1.9.3",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.2.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "1.9.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/estraverse/-/estraverse-1.9.3.tgz",
+ "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/source-map/-/source-map-0.2.0.tgz",
+ "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
+ }
+ }
+ },
+ "escope": {
+ "version": "3.6.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/escope/-/escope-3.6.0.tgz",
+ "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=",
+ "dev": true,
+ "requires": {
+ "es6-map": "0.1.5",
+ "es6-weak-map": "2.0.2",
+ "esrecurse": "4.2.0",
+ "estraverse": "4.2.0"
+ }
+ },
+ "eslint": {
+ "version": "4.9.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/eslint/-/eslint-4.9.0.tgz",
+ "integrity": "sha1-doedJ0BoJhsZH+Dy9Wx0wvQgjos=",
+ "dev": true,
+ "requires": {
+ "ajv": "5.2.3",
+ "babel-code-frame": "6.26.0",
+ "chalk": "2.2.0",
+ "concat-stream": "1.6.0",
+ "cross-spawn": "5.1.0",
+ "debug": "3.1.0",
+ "doctrine": "2.0.0",
+ "eslint-scope": "3.7.1",
+ "espree": "3.5.1",
+ "esquery": "1.0.0",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "file-entry-cache": "2.0.0",
+ "functional-red-black-tree": "1.0.1",
+ "glob": "7.1.2",
+ "globals": "9.18.0",
+ "ignore": "3.3.5",
+ "imurmurhash": "0.1.4",
+ "inquirer": "3.3.0",
+ "is-resolvable": "1.0.0",
+ "js-yaml": "3.10.0",
+ "json-stable-stringify": "1.0.1",
+ "levn": "0.3.0",
+ "lodash": "4.17.4",
+ "minimatch": "3.0.4",
+ "mkdirp": "0.5.1",
+ "natural-compare": "1.4.0",
+ "optionator": "0.8.2",
+ "path-is-inside": "1.0.2",
+ "pluralize": "7.0.0",
+ "progress": "2.0.0",
+ "require-uncached": "1.0.3",
+ "semver": "5.4.1",
+ "strip-ansi": "4.0.0",
+ "strip-json-comments": "2.0.1",
+ "table": "4.0.2",
+ "text-table": "0.2.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/chalk/-/chalk-2.2.0.tgz",
+ "integrity": "sha512-0BMM/2hG3ZaoPfR6F+h/oWpZtsh3b/s62TjSM6MGCJWEbJDN1acqCXvyhhZsDSVFklpebUoQ5O1kKC7lOzrn9g==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "esprima": {
+ "version": "4.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/esprima/-/esprima-4.0.0.tgz",
+ "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.10.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/js-yaml/-/js-yaml-3.10.0.tgz",
+ "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==",
+ "dev": true,
+ "requires": {
+ "argparse": "1.0.9",
+ "esprima": "4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "3.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "eslint-plugin-react": {
+ "version": "7.4.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/eslint-plugin-react/-/eslint-plugin-react-7.4.0.tgz",
+ "integrity": "sha512-tvjU9u3VqmW2vVuYnE8Qptq+6ji4JltjOjJ9u7VAOxVYkUkyBZWRvNYKbDv5fN+L6wiA+4we9+qQahZ0m63XEA==",
+ "dev": true,
+ "requires": {
+ "doctrine": "2.0.0",
+ "has": "1.0.1",
+ "jsx-ast-utils": "2.0.1",
+ "prop-types": "15.6.0"
+ }
+ },
+ "eslint-scope": {
+ "version": "3.7.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/eslint-scope/-/eslint-scope-3.7.1.tgz",
+ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
+ "dev": true,
+ "requires": {
+ "esrecurse": "4.2.0",
+ "estraverse": "4.2.0"
+ }
+ },
+ "espree": {
+ "version": "3.5.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/espree/-/espree-3.5.1.tgz",
+ "integrity": "sha1-DJiLirRttTEAoZVK5LqZXd0n2H4=",
+ "dev": true,
+ "requires": {
+ "acorn": "5.1.2",
+ "acorn-jsx": "3.0.1"
+ }
+ },
+ "esprima": {
+ "version": "2.7.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/esprima/-/esprima-2.7.3.tgz",
+ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
+ "dev": true
+ },
+ "esquery": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/esquery/-/esquery-1.0.0.tgz",
+ "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=",
+ "dev": true,
+ "requires": {
+ "estraverse": "4.2.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/esrecurse/-/esrecurse-4.2.0.tgz",
+ "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=",
+ "dev": true,
+ "requires": {
+ "estraverse": "4.2.0",
+ "object-assign": "4.1.1"
+ }
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "estree-walker": {
+ "version": "0.2.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/estree-walker/-/estree-walker-0.2.1.tgz",
+ "integrity": "sha1-va/oCVOD2EFNXcLs9MkXO225QS4=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+ "dev": true
+ },
+ "event-emitter": {
+ "version": "0.3.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/event-emitter/-/event-emitter-0.3.5.tgz",
+ "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
+ "dev": true,
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.35"
+ }
+ },
+ "event-stream": {
+ "version": "3.3.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/event-stream/-/event-stream-3.3.4.tgz",
+ "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=",
+ "dev": true,
+ "requires": {
+ "duplexer": "0.1.1",
+ "from": "0.1.7",
+ "map-stream": "0.1.0",
+ "pause-stream": "0.0.11",
+ "split": "0.3.3",
+ "stream-combiner": "0.0.4",
+ "through": "2.3.8"
+ }
+ },
+ "eventemitter3": {
+ "version": "1.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/eventemitter3/-/eventemitter3-1.2.0.tgz",
+ "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=",
+ "dev": true
+ },
+ "events": {
+ "version": "1.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/events/-/events-1.1.1.tgz",
+ "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=",
+ "dev": true
+ },
+ "eventsource": {
+ "version": "0.1.6",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/eventsource/-/eventsource-0.1.6.tgz",
+ "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=",
+ "dev": true,
+ "requires": {
+ "original": "1.0.0"
+ }
+ },
+ "evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "dev": true,
+ "requires": {
+ "md5.js": "1.3.4",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "execa": {
+ "version": "0.7.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/execa/-/execa-0.7.0.tgz",
+ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "5.1.0",
+ "get-stream": "3.0.0",
+ "is-stream": "1.1.0",
+ "npm-run-path": "2.0.2",
+ "p-finally": "1.0.0",
+ "signal-exit": "3.0.2",
+ "strip-eof": "1.0.0"
+ }
+ },
+ "expand-brackets": {
+ "version": "0.1.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/expand-brackets/-/expand-brackets-0.1.5.tgz",
+ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+ "dev": true,
+ "requires": {
+ "is-posix-bracket": "0.1.1"
+ }
+ },
+ "expand-range": {
+ "version": "1.8.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/expand-range/-/expand-range-1.8.2.tgz",
+ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+ "dev": true,
+ "requires": {
+ "fill-range": "2.2.3"
+ }
+ },
+ "express": {
+ "version": "4.16.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/express/-/express-4.16.2.tgz",
+ "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=",
+ "dev": true,
+ "requires": {
+ "accepts": "1.3.4",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.18.2",
+ "content-disposition": "0.5.2",
+ "content-type": "1.0.4",
+ "cookie": "0.3.1",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "1.1.1",
+ "encodeurl": "1.0.1",
+ "escape-html": "1.0.3",
+ "etag": "1.8.1",
+ "finalhandler": "1.1.0",
+ "fresh": "0.5.2",
+ "merge-descriptors": "1.0.1",
+ "methods": "1.1.2",
+ "on-finished": "2.3.0",
+ "parseurl": "1.3.2",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "2.0.2",
+ "qs": "6.5.1",
+ "range-parser": "1.2.0",
+ "safe-buffer": "5.1.1",
+ "send": "0.16.1",
+ "serve-static": "1.13.1",
+ "setprototypeof": "1.1.0",
+ "statuses": "1.3.1",
+ "type-is": "1.6.15",
+ "utils-merge": "1.0.1",
+ "vary": "1.1.2"
+ },
+ "dependencies": {
+ "array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
+ "dev": true
+ },
+ "path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.5.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/qs/-/qs-6.5.1.tgz",
+ "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==",
+ "dev": true
+ }
+ }
+ },
+ "extend": {
+ "version": "3.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/extend/-/extend-3.0.1.tgz",
+ "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
+ "dev": true
+ },
+ "external-editor": {
+ "version": "2.0.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/external-editor/-/external-editor-2.0.5.tgz",
+ "integrity": "sha512-Msjo64WT5W+NhOpQXh0nOHm+n0RfU1QUwDnKYvJ8dEJ8zlwLrqXNTv5mSUTJpepf41PDJGyhueTw2vNZW+Fr/w==",
+ "dev": true,
+ "requires": {
+ "iconv-lite": "0.4.19",
+ "jschardet": "1.5.1",
+ "tmp": "0.0.33"
+ }
+ },
+ "extglob": {
+ "version": "0.3.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/extglob/-/extglob-0.3.2.tgz",
+ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ },
+ "extract-text-webpack-plugin": {
+ "version": "3.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.1.tgz",
+ "integrity": "sha512-zv0/Cg2mU8uMzeQQ3oyfJvZU4Iv/GbQYUIr/HU+8pZetT/0W3xj6XAbxoG4gsp8SbnYcFd4BOsCAZPl9NvplPw==",
+ "dev": true,
+ "requires": {
+ "async": "2.5.0",
+ "loader-utils": "1.1.0",
+ "schema-utils": "0.3.0",
+ "webpack-sources": "1.0.1"
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz",
+ "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fastparse": {
+ "version": "1.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/fastparse/-/fastparse-1.1.1.tgz",
+ "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=",
+ "dev": true
+ },
+ "faye-websocket": {
+ "version": "0.10.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/faye-websocket/-/faye-websocket-0.10.0.tgz",
+ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
+ "dev": true,
+ "requires": {
+ "websocket-driver": "0.7.0"
+ }
+ },
+ "fbjs": {
+ "version": "0.8.16",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/fbjs/-/fbjs-0.8.16.tgz",
+ "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=",
+ "requires": {
+ "core-js": "1.2.7",
+ "isomorphic-fetch": "2.2.1",
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1",
+ "promise": "7.3.1",
+ "setimmediate": "1.0.5",
+ "ua-parser-js": "0.7.17"
+ }
+ },
+ "figures": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
+ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+ "dev": true,
+ "requires": {
+ "flat-cache": "1.3.0",
+ "object-assign": "4.1.1"
+ }
+ },
+ "file-type": {
+ "version": "3.9.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/file-type/-/file-type-3.9.0.tgz",
+ "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=",
+ "dev": true
+ },
+ "filename-regex": {
+ "version": "2.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/filename-regex/-/filename-regex-2.0.1.tgz",
+ "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "2.2.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/fill-range/-/fill-range-2.2.3.tgz",
+ "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=",
+ "dev": true,
+ "requires": {
+ "is-number": "2.1.0",
+ "isobject": "2.1.0",
+ "randomatic": "1.1.7",
+ "repeat-element": "1.1.2",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/finalhandler/-/finalhandler-1.1.0.tgz",
+ "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "1.0.1",
+ "escape-html": "1.0.3",
+ "on-finished": "2.3.0",
+ "parseurl": "1.3.2",
+ "statuses": "1.3.1",
+ "unpipe": "1.0.0"
+ }
+ },
+ "find-cache-dir": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/find-cache-dir/-/find-cache-dir-1.0.0.tgz",
+ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
+ "dev": true,
+ "requires": {
+ "commondir": "1.0.1",
+ "make-dir": "1.0.0",
+ "pkg-dir": "2.0.0"
+ }
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "2.0.0"
+ }
+ },
+ "flat-cache": {
+ "version": "1.3.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/flat-cache/-/flat-cache-1.3.0.tgz",
+ "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
+ "dev": true,
+ "requires": {
+ "circular-json": "0.3.3",
+ "del": "2.2.2",
+ "graceful-fs": "4.1.11",
+ "write": "0.2.1"
+ }
+ },
+ "flatten": {
+ "version": "1.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/flatten/-/flatten-1.0.2.tgz",
+ "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=",
+ "dev": true
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "for-own": {
+ "version": "0.1.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/for-own/-/for-own-0.1.5.tgz",
+ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2"
+ }
+ },
+ "foreach": {
+ "version": "2.0.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/foreach/-/foreach-2.0.5.tgz",
+ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",
+ "dev": true
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true
+ },
+ "form-data": {
+ "version": "2.1.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/form-data/-/form-data-2.1.4.tgz",
+ "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
+ "dev": true,
+ "requires": {
+ "asynckit": "0.4.0",
+ "combined-stream": "1.0.5",
+ "mime-types": "2.1.17"
+ }
+ },
+ "formatio": {
+ "version": "1.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/formatio/-/formatio-1.2.0.tgz",
+ "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=",
+ "dev": true,
+ "requires": {
+ "samsam": "1.3.0"
+ }
+ },
+ "forwarded": {
+ "version": "0.1.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/forwarded/-/forwarded-0.1.2.tgz",
+ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
+ "dev": true
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+ "dev": true
+ },
+ "from": {
+ "version": "0.1.7",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/from/-/from-0.1.7.tgz",
+ "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=",
+ "dev": true
+ },
+ "fs-readdir-recursive": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz",
+ "integrity": "sha1-jNF0XItPiinIyuw5JHaSG6GV9WA=",
+ "dev": true
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "1.1.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/fsevents/-/fsevents-1.1.2.tgz",
+ "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "nan": "2.7.0",
+ "node-pre-gyp": "0.6.36"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "ajv": {
+ "version": "4.11.8",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "co": "4.6.0",
+ "json-stable-stringify": "1.0.1"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "aproba": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "delegates": "1.0.0",
+ "readable-stream": "2.2.9"
+ }
+ },
+ "asn1": {
+ "version": "0.2.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "assert-plus": {
+ "version": "0.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "aws-sign2": {
+ "version": "0.6.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "aws4": {
+ "version": "1.6.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "balanced-match": {
+ "version": "0.4.2",
+ "bundled": true,
+ "dev": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tweetnacl": "0.14.5"
+ }
+ },
+ "block-stream": {
+ "version": "0.0.9",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "boom": {
+ "version": "2.10.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.7",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "balanced-match": "0.4.2",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-shims": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "co": {
+ "version": "4.6.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.0.5",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "delayed-stream": "1.0.0"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "cryptiles": {
+ "version": "2.0.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "boom": "2.10.1"
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "debug": {
+ "version": "2.6.8",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.4.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "ecc-jsbn": {
+ "version": "0.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.1"
+ }
+ },
+ "extend": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "extsprintf": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "form-data": {
+ "version": "2.1.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "asynckit": "0.4.0",
+ "combined-stream": "1.0.5",
+ "mime-types": "2.1.15"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "fstream": {
+ "version": "1.0.11",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "inherits": "2.0.3",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.1"
+ }
+ },
+ "fstream-ignore": {
+ "version": "1.0.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "fstream": "1.0.11",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4"
+ }
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "aproba": "1.1.1",
+ "console-control-strings": "1.1.0",
+ "has-unicode": "2.0.1",
+ "object-assign": "4.1.1",
+ "signal-exit": "3.0.2",
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wide-align": "1.1.2"
+ }
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "bundled": true,
+ "dev": true
+ },
+ "har-schema": {
+ "version": "1.0.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "har-validator": {
+ "version": "4.2.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ajv": "4.11.8",
+ "har-schema": "1.0.5"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "hawk": {
+ "version": "3.1.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "boom": "2.10.1",
+ "cryptiles": "2.0.5",
+ "hoek": "2.16.3",
+ "sntp": "1.0.9"
+ }
+ },
+ "hoek": {
+ "version": "2.16.3",
+ "bundled": true,
+ "dev": true
+ },
+ "http-signature": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "0.2.0",
+ "jsprim": "1.4.0",
+ "sshpk": "1.13.0"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "bundled": true,
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "jodid25519": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.1"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "json-stable-stringify": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsonify": "0.0.0"
+ }
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "jsonify": {
+ "version": "0.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "jsprim": {
+ "version": "1.4.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.0.2",
+ "json-schema": "0.2.3",
+ "verror": "1.3.6"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "mime-db": {
+ "version": "1.27.0",
+ "bundled": true,
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.15",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "mime-db": "1.27.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true,
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "node-pre-gyp": {
+ "version": "0.6.36",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "mkdirp": "0.5.1",
+ "nopt": "4.0.1",
+ "npmlog": "4.1.0",
+ "rc": "1.2.1",
+ "request": "2.81.0",
+ "rimraf": "2.6.1",
+ "semver": "5.3.0",
+ "tar": "2.2.1",
+ "tar-pack": "3.4.0"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "abbrev": "1.1.0",
+ "osenv": "0.1.4"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "are-we-there-yet": "1.1.4",
+ "console-control-strings": "1.1.0",
+ "gauge": "2.7.4",
+ "set-blocking": "2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "oauth-sign": {
+ "version": "0.8.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "osenv": {
+ "version": "0.1.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "performance-now": {
+ "version": "0.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "bundled": true,
+ "dev": true
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "qs": {
+ "version": "6.4.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "rc": {
+ "version": "1.2.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "deep-extend": "0.4.2",
+ "ini": "1.3.4",
+ "minimist": "1.2.0",
+ "strip-json-comments": "2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.2.9",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "buffer-shims": "1.0.0",
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "string_decoder": "1.0.1",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "request": {
+ "version": "2.81.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "aws-sign2": "0.6.0",
+ "aws4": "1.6.0",
+ "caseless": "0.12.0",
+ "combined-stream": "1.0.5",
+ "extend": "3.0.1",
+ "forever-agent": "0.6.1",
+ "form-data": "2.1.4",
+ "har-validator": "4.2.1",
+ "hawk": "3.1.3",
+ "http-signature": "1.1.1",
+ "is-typedarray": "1.0.0",
+ "isstream": "0.1.2",
+ "json-stringify-safe": "5.0.1",
+ "mime-types": "2.1.15",
+ "oauth-sign": "0.8.2",
+ "performance-now": "0.2.0",
+ "qs": "6.4.0",
+ "safe-buffer": "5.0.1",
+ "stringstream": "0.0.5",
+ "tough-cookie": "2.3.2",
+ "tunnel-agent": "0.6.0",
+ "uuid": "3.0.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "semver": {
+ "version": "5.3.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "sntp": {
+ "version": "1.0.9",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "sshpk": {
+ "version": "1.13.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "asn1": "0.2.3",
+ "assert-plus": "1.0.0",
+ "bcrypt-pbkdf": "1.0.1",
+ "dashdash": "1.14.1",
+ "ecc-jsbn": "0.1.1",
+ "getpass": "0.1.7",
+ "jodid25519": "1.0.2",
+ "jsbn": "0.1.1",
+ "tweetnacl": "0.14.5"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.0.1"
+ }
+ },
+ "stringstream": {
+ "version": "0.0.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "tar": {
+ "version": "2.2.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "block-stream": "0.0.9",
+ "fstream": "1.0.11",
+ "inherits": "2.0.3"
+ }
+ },
+ "tar-pack": {
+ "version": "3.4.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "debug": "2.6.8",
+ "fstream": "1.0.11",
+ "fstream-ignore": "1.0.5",
+ "once": "1.4.0",
+ "readable-stream": "2.2.9",
+ "rimraf": "2.6.1",
+ "tar": "2.2.1",
+ "uid-number": "0.0.6"
+ }
+ },
+ "tough-cookie": {
+ "version": "2.3.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "punycode": "1.4.1"
+ }
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "uid-number": {
+ "version": "0.0.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "uuid": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "verror": {
+ "version": "1.3.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "extsprintf": "1.0.2"
+ }
+ },
+ "wide-align": {
+ "version": "1.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "string-width": "1.0.2"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "generate-function": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/generate-function/-/generate-function-2.0.0.tgz",
+ "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=",
+ "dev": true
+ },
+ "generate-object-property": {
+ "version": "1.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/generate-object-property/-/generate-object-property-1.2.0.tgz",
+ "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
+ "dev": true,
+ "requires": {
+ "is-property": "1.0.2"
+ }
+ },
+ "get-caller-file": {
+ "version": "1.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/get-caller-file/-/get-caller-file-1.0.2.tgz",
+ "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=",
+ "dev": true
+ },
+ "get-func-name": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/get-func-name/-/get-func-name-2.0.0.tgz",
+ "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
+ "dev": true
+ },
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-base": {
+ "version": "0.3.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/glob-base/-/glob-base-0.3.0.tgz",
+ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+ "dev": true,
+ "requires": {
+ "glob-parent": "2.0.0",
+ "is-glob": "2.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/glob-parent/-/glob-parent-2.0.0.tgz",
+ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+ "dev": true,
+ "requires": {
+ "is-glob": "2.0.1"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "globby": {
+ "version": "5.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/globby/-/globby-5.0.0.tgz",
+ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
+ "dev": true,
+ "requires": {
+ "array-union": "1.0.2",
+ "arrify": "1.0.1",
+ "glob": "7.1.2",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "good-listener": {
+ "version": "1.2.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/good-listener/-/good-listener-1.2.2.tgz",
+ "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "delegate": "3.1.3"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "graceful-readlink": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
+ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
+ "dev": true
+ },
+ "greedy-interval-packer": {
+ "version": "1.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/greedy-interval-packer/-/greedy-interval-packer-1.2.0.tgz",
+ "integrity": "sha1-1toR82Ybt5eBLaeKHqUQZ4oqhzk=",
+ "dev": true
+ },
+ "growl": {
+ "version": "1.9.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/growl/-/growl-1.9.2.tgz",
+ "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=",
+ "dev": true
+ },
+ "handle-thing": {
+ "version": "1.2.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/handle-thing/-/handle-thing-1.2.5.tgz",
+ "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=",
+ "dev": true
+ },
+ "handlebars": {
+ "version": "4.0.11",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/handlebars/-/handlebars-4.0.11.tgz",
+ "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "optimist": "0.6.1",
+ "source-map": "0.4.4",
+ "uglify-js": "2.8.29"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.4.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/source-map/-/source-map-0.4.4.tgz",
+ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "dev": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
+ },
+ "uglify-js": {
+ "version": "2.8.29",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/uglify-js/-/uglify-js-2.8.29.tgz",
+ "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "source-map": "0.5.7",
+ "uglify-to-browserify": "1.0.2",
+ "yargs": "3.10.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ }
+ }
+ },
+ "har-validator": {
+ "version": "2.0.6",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/har-validator/-/har-validator-2.0.6.tgz",
+ "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "commander": "2.11.0",
+ "is-my-json-valid": "2.16.1",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "has": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/has/-/has-1.0.1.tgz",
+ "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=",
+ "dev": true,
+ "requires": {
+ "function-bind": "1.1.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "hash-base": {
+ "version": "2.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/hash-base/-/hash-base-2.0.2.tgz",
+ "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "hash.js": {
+ "version": "1.1.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/hash.js/-/hash.js-1.1.3.tgz",
+ "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0"
+ }
+ },
+ "hawk": {
+ "version": "3.1.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/hawk/-/hawk-3.1.3.tgz",
+ "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
+ "dev": true,
+ "requires": {
+ "boom": "2.10.1",
+ "cryptiles": "2.0.5",
+ "hoek": "2.16.3",
+ "sntp": "1.0.9"
+ }
+ },
+ "he": {
+ "version": "1.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/he/-/he-1.1.1.tgz",
+ "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
+ "dev": true
+ },
+ "highlight-words-core": {
+ "version": "1.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/highlight-words-core/-/highlight-words-core-1.1.0.tgz",
+ "integrity": "sha512-/GR0sXzYEruxAgsOWQ146T1zEzCd1tiuoH+HuoQX7bonujTkz9/9stWu9yxgu93AiNPWuukE2rb/iLEkLSYROw==",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "dev": true,
+ "requires": {
+ "hash.js": "1.1.3",
+ "minimalistic-assert": "1.0.0",
+ "minimalistic-crypto-utils": "1.0.1"
+ }
+ },
+ "hoek": {
+ "version": "2.16.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/hoek/-/hoek-2.16.3.tgz",
+ "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
+ "dev": true
+ },
+ "home-or-tmp": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
+ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "hosted-git-info": {
+ "version": "2.5.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/hosted-git-info/-/hosted-git-info-2.5.0.tgz",
+ "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==",
+ "dev": true
+ },
+ "hpack.js": {
+ "version": "2.1.6",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/hpack.js/-/hpack.js-2.1.6.tgz",
+ "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "obuf": "1.1.1",
+ "readable-stream": "2.3.3",
+ "wbuf": "1.7.2"
+ }
+ },
+ "html-comment-regex": {
+ "version": "1.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/html-comment-regex/-/html-comment-regex-1.1.1.tgz",
+ "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=",
+ "dev": true
+ },
+ "html-encoding-sniffer": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz",
+ "integrity": "sha1-eb96eF6klf5mFl5zQVPzY/9UN9o=",
+ "dev": true,
+ "requires": {
+ "whatwg-encoding": "1.0.1"
+ }
+ },
+ "html-entities": {
+ "version": "1.2.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/html-entities/-/html-entities-1.2.1.tgz",
+ "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=",
+ "dev": true
+ },
+ "html-loader": {
+ "version": "0.5.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/html-loader/-/html-loader-0.5.1.tgz",
+ "integrity": "sha512-RxokXoxcsRSWcN553Ew+K0TUo68gQfmddTuUIZ4xRD8Ax1xXzX2UYQ3FC3D5MoRPGAdL1erWKeEFihDrrdxHiA==",
+ "dev": true,
+ "requires": {
+ "es6-templates": "0.2.3",
+ "fastparse": "1.1.1",
+ "html-minifier": "3.5.6",
+ "loader-utils": "1.1.0",
+ "object-assign": "4.1.1"
+ }
+ },
+ "html-minifier": {
+ "version": "3.5.6",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/html-minifier/-/html-minifier-3.5.6.tgz",
+ "integrity": "sha512-88FjtKrlak2XjczhxrBomgzV4jmGzM3UnHRBScRkJcmcRum0kb+IwhVAETJ8AVp7j0p3xugjSaw9L+RmI5/QOA==",
+ "dev": true,
+ "requires": {
+ "camel-case": "3.0.0",
+ "clean-css": "4.1.9",
+ "commander": "2.11.0",
+ "he": "1.1.1",
+ "ncname": "1.0.0",
+ "param-case": "2.1.1",
+ "relateurl": "0.2.7",
+ "uglify-js": "3.1.4"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "3.1.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/uglify-js/-/uglify-js-3.1.4.tgz",
+ "integrity": "sha512-DcbkPg11Lw2lAWpwCmQDX+qoR4JiII6ypsQmF6tscZtlxGPFAmSRUGuMoVT3/0EHqypVik/TpkH4ITiMJeQqQA==",
+ "dev": true,
+ "requires": {
+ "commander": "2.11.0",
+ "source-map": "0.6.1"
+ }
+ }
+ }
+ },
+ "html-webpack-plugin": {
+ "version": "2.30.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz",
+ "integrity": "sha1-f5xCG36pHsRg9WUn1430hO51N9U=",
+ "dev": true,
+ "requires": {
+ "bluebird": "3.5.1",
+ "html-minifier": "3.5.6",
+ "loader-utils": "0.2.17",
+ "lodash": "4.17.4",
+ "pretty-error": "2.1.1",
+ "toposort": "1.0.6"
+ },
+ "dependencies": {
+ "loader-utils": {
+ "version": "0.2.17",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/loader-utils/-/loader-utils-0.2.17.tgz",
+ "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
+ "dev": true,
+ "requires": {
+ "big.js": "3.2.0",
+ "emojis-list": "2.1.0",
+ "json5": "0.5.1",
+ "object-assign": "4.1.1"
+ }
+ }
+ }
+ },
+ "htmlparser2": {
+ "version": "3.3.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/htmlparser2/-/htmlparser2-3.3.0.tgz",
+ "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.3.0",
+ "domhandler": "2.1.0",
+ "domutils": "1.1.6",
+ "readable-stream": "1.0.34"
+ },
+ "dependencies": {
+ "domutils": {
+ "version": "1.1.6",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/domutils/-/domutils-1.1.6.tgz",
+ "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.3.0"
+ }
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
+ }
+ },
+ "http-deceiver": {
+ "version": "1.2.7",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/http-deceiver/-/http-deceiver-1.2.7.tgz",
+ "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.6.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/http-errors/-/http-errors-1.6.2.tgz",
+ "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
+ "dev": true,
+ "requires": {
+ "depd": "1.1.1",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.0.3",
+ "statuses": "1.3.1"
+ },
+ "dependencies": {
+ "setprototypeof": {
+ "version": "1.0.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/setprototypeof/-/setprototypeof-1.0.3.tgz",
+ "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=",
+ "dev": true
+ }
+ }
+ },
+ "http-parser-js": {
+ "version": "0.4.9",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/http-parser-js/-/http-parser-js-0.4.9.tgz",
+ "integrity": "sha1-6hoE+2St/wJC6ZdPKX3Uw8rSceE=",
+ "dev": true
+ },
+ "http-proxy": {
+ "version": "1.16.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/http-proxy/-/http-proxy-1.16.2.tgz",
+ "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=",
+ "dev": true,
+ "requires": {
+ "eventemitter3": "1.2.0",
+ "requires-port": "1.0.0"
+ }
+ },
+ "http-proxy-middleware": {
+ "version": "0.17.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz",
+ "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=",
+ "dev": true,
+ "requires": {
+ "http-proxy": "1.16.2",
+ "is-glob": "3.1.0",
+ "lodash": "4.17.4",
+ "micromatch": "2.3.11"
+ },
+ "dependencies": {
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ }
+ }
+ },
+ "http-signature": {
+ "version": "1.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/http-signature/-/http-signature-1.1.1.tgz",
+ "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "0.2.0",
+ "jsprim": "1.4.1",
+ "sshpk": "1.13.1"
+ }
+ },
+ "https-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/https-browserify/-/https-browserify-0.0.1.tgz",
+ "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=",
+ "dev": true
+ },
+ "iconv-lite": {
+ "version": "0.4.19",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/iconv-lite/-/iconv-lite-0.4.19.tgz",
+ "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="
+ },
+ "icss-replace-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz",
+ "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=",
+ "dev": true
+ },
+ "icss-utils": {
+ "version": "2.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/icss-utils/-/icss-utils-2.1.0.tgz",
+ "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=",
+ "dev": true,
+ "requires": {
+ "postcss": "6.0.13"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/chalk/-/chalk-2.2.0.tgz",
+ "integrity": "sha512-0BMM/2hG3ZaoPfR6F+h/oWpZtsh3b/s62TjSM6MGCJWEbJDN1acqCXvyhhZsDSVFklpebUoQ5O1kKC7lOzrn9g==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "6.0.13",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss/-/postcss-6.0.13.tgz",
+ "integrity": "sha512-nHsrD1PPTMSJDfU+osVsLtPkSP9YGeoOz4FDLN4r1DW4N5vqL1J+gACzTQHsfwIiWG/0/nV4yCzjTMo1zD8U1g==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.2.0",
+ "source-map": "0.6.1",
+ "supports-color": "4.5.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "ieee754": {
+ "version": "1.1.8",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ieee754/-/ieee754-1.1.8.tgz",
+ "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=",
+ "dev": true
+ },
+ "ignore": {
+ "version": "3.3.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ignore/-/ignore-3.3.5.tgz",
+ "integrity": "sha512-JLH93mL8amZQhh/p6mfQgVBH3M6epNq3DfsXsTSuSrInVjwyYlFE1nv2AgfRCC8PoOhM0jwQ5v8s9LgbK7yGDw==",
+ "dev": true
+ },
+ "image-size": {
+ "version": "0.5.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/image-size/-/image-size-0.5.5.tgz",
+ "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
+ "dev": true,
+ "optional": true
+ },
+ "import-local": {
+ "version": "0.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/import-local/-/import-local-0.1.1.tgz",
+ "integrity": "sha1-sReVcqrNwRxqkQCftDDbyrX2aKg=",
+ "dev": true,
+ "requires": {
+ "pkg-dir": "2.0.0",
+ "resolve-cwd": "2.0.0"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "2.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "indexes-of": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/indexes-of/-/indexes-of-1.0.1.tgz",
+ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
+ "dev": true
+ },
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "inquirer": {
+ "version": "3.3.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/inquirer/-/inquirer-3.3.0.tgz",
+ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "3.0.0",
+ "chalk": "2.2.0",
+ "cli-cursor": "2.1.0",
+ "cli-width": "2.2.0",
+ "external-editor": "2.0.5",
+ "figures": "2.0.0",
+ "lodash": "4.17.4",
+ "mute-stream": "0.0.7",
+ "run-async": "2.3.0",
+ "rx-lite": "4.0.8",
+ "rx-lite-aggregates": "4.0.8",
+ "string-width": "2.1.1",
+ "strip-ansi": "4.0.0",
+ "through": "2.3.8"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/chalk/-/chalk-2.2.0.tgz",
+ "integrity": "sha512-0BMM/2hG3ZaoPfR6F+h/oWpZtsh3b/s62TjSM6MGCJWEbJDN1acqCXvyhhZsDSVFklpebUoQ5O1kKC7lOzrn9g==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "3.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "internal-ip": {
+ "version": "1.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/internal-ip/-/internal-ip-1.2.0.tgz",
+ "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=",
+ "dev": true,
+ "requires": {
+ "meow": "3.7.0"
+ }
+ },
+ "interpret": {
+ "version": "1.0.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/interpret/-/interpret-1.0.4.tgz",
+ "integrity": "sha1-ggzdWIuGj/sZGoCVBtbJyPISsbA=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/invariant/-/invariant-2.2.2.tgz",
+ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "invert-kv": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/invert-kv/-/invert-kv-1.0.0.tgz",
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
+ "dev": true
+ },
+ "ip": {
+ "version": "1.1.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ip/-/ip-1.1.5.tgz",
+ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+ "dev": true
+ },
+ "ipaddr.js": {
+ "version": "1.5.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ipaddr.js/-/ipaddr.js-1.5.2.tgz",
+ "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=",
+ "dev": true
+ },
+ "is-absolute-url": {
+ "version": "2.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-absolute-url/-/is-absolute-url-2.1.0.tgz",
+ "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=",
+ "dev": true
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "1.10.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-buffer/-/is-buffer-1.1.5.tgz",
+ "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=",
+ "dev": true
+ },
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "1.1.1"
+ }
+ },
+ "is-callable": {
+ "version": "1.1.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-callable/-/is-callable-1.1.3.tgz",
+ "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=",
+ "dev": true
+ },
+ "is-date-object": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-date-object/-/is-date-object-1.0.1.tgz",
+ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
+ "dev": true
+ },
+ "is-dotfile": {
+ "version": "1.0.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-dotfile/-/is-dotfile-1.0.3.tgz",
+ "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
+ "dev": true
+ },
+ "is-equal-shallow": {
+ "version": "0.1.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+ "dev": true,
+ "requires": {
+ "is-primitive": "2.0.0"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ },
+ "is-module": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-module/-/is-module-1.0.0.tgz",
+ "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=",
+ "dev": true
+ },
+ "is-my-json-valid": {
+ "version": "2.16.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz",
+ "integrity": "sha512-ochPsqWS1WXj8ZnMIV0vnNXooaMhp7cyL4FMSIPKTtnV0Ha/T19G2b9kkhcNsabV9bxYkze7/aLZJb/bYuFduQ==",
+ "dev": true,
+ "requires": {
+ "generate-function": "2.0.0",
+ "generate-object-property": "1.2.0",
+ "jsonpointer": "4.0.1",
+ "xtend": "4.0.1"
+ }
+ },
+ "is-number": {
+ "version": "2.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-number/-/is-number-2.1.0.tgz",
+ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ },
+ "is-object": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-object/-/is-object-1.0.1.tgz",
+ "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=",
+ "dev": true
+ },
+ "is-path-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
+ "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
+ "dev": true
+ },
+ "is-path-in-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz",
+ "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=",
+ "dev": true,
+ "requires": {
+ "is-path-inside": "1.0.0"
+ }
+ },
+ "is-path-inside": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-path-inside/-/is-path-inside-1.0.0.tgz",
+ "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=",
+ "dev": true,
+ "requires": {
+ "path-is-inside": "1.0.2"
+ }
+ },
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+ "dev": true
+ },
+ "is-posix-bracket": {
+ "version": "0.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
+ "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
+ "dev": true
+ },
+ "is-primitive": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-primitive/-/is-primitive-2.0.0.tgz",
+ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
+ "dev": true
+ },
+ "is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+ "dev": true
+ },
+ "is-property": {
+ "version": "1.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-property/-/is-property-1.0.2.tgz",
+ "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.0.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-regex/-/is-regex-1.0.4.tgz",
+ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+ "dev": true,
+ "requires": {
+ "has": "1.0.1"
+ }
+ },
+ "is-resolvable": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-resolvable/-/is-resolvable-1.0.0.tgz",
+ "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=",
+ "dev": true,
+ "requires": {
+ "tryit": "1.0.3"
+ }
+ },
+ "is-retina": {
+ "version": "1.0.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-retina/-/is-retina-1.0.3.tgz",
+ "integrity": "sha1-10AbKGvqKuN/Ykd1iN5QTQuGR+M=",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
+ },
+ "is-svg": {
+ "version": "2.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-svg/-/is-svg-2.1.0.tgz",
+ "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=",
+ "dev": true,
+ "requires": {
+ "html-comment-regex": "1.1.1"
+ }
+ },
+ "is-symbol": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-symbol/-/is-symbol-1.0.1.tgz",
+ "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=",
+ "dev": true
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "dev": true
+ },
+ "is-windows": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-windows/-/is-windows-1.0.1.tgz",
+ "integrity": "sha1-MQ23D3QtJZoWo2kgK1GvhCMzENk=",
+ "dev": true
+ },
+ "is-wsl": {
+ "version": "1.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-wsl/-/is-wsl-1.1.0.tgz",
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ },
+ "isomorphic-fetch": {
+ "version": "2.2.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
+ "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=",
+ "requires": {
+ "node-fetch": "1.7.3",
+ "whatwg-fetch": "2.0.3"
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "istanbul": {
+ "version": "0.4.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/istanbul/-/istanbul-0.4.5.tgz",
+ "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1.0.9",
+ "async": "1.5.2",
+ "escodegen": "1.8.1",
+ "esprima": "2.7.3",
+ "glob": "5.0.15",
+ "handlebars": "4.0.11",
+ "js-yaml": "3.6.1",
+ "mkdirp": "0.5.1",
+ "nopt": "3.0.6",
+ "once": "1.4.0",
+ "resolve": "1.1.7",
+ "supports-color": "3.2.3",
+ "which": "1.3.0",
+ "wordwrap": "1.0.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ },
+ "glob": {
+ "version": "5.0.15",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/glob/-/glob-5.0.15.tgz",
+ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
+ "dev": true,
+ "requires": {
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "istanbul-lib-coverage": {
+ "version": "1.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz",
+ "integrity": "sha512-0+1vDkmzxqJIn5rcoEqapSB4DmPxE31EtI2dF2aCkV5esN9EWHxZ0dwgDClivMXJqE7zaYQxq30hj5L0nlTN5Q==",
+ "dev": true
+ },
+ "istanbul-lib-instrument": {
+ "version": "1.8.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/istanbul-lib-instrument/-/istanbul-lib-instrument-1.8.0.tgz",
+ "integrity": "sha1-ZvbJQhzJ7EcE928tsIS6kHiitTI=",
+ "dev": true,
+ "requires": {
+ "babel-generator": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "istanbul-lib-coverage": "1.1.1",
+ "semver": "5.4.1"
+ }
+ },
+ "js-base64": {
+ "version": "2.3.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/js-base64/-/js-base64-2.3.2.tgz",
+ "integrity": "sha512-Y2/+DnfJJXT1/FCwUebUhLWb3QihxiSC42+ctHLGogmW2jPY6LCapMdFZXRvVP2z6qyKW7s6qncE/9gSqZiArw==",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
+ },
+ "js-writer": {
+ "version": "1.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/js-writer/-/js-writer-1.2.0.tgz",
+ "integrity": "sha1-nhlolyjYCITQb/s9Dw4aIIRq0sw=",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.6.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/js-yaml/-/js-yaml-3.6.1.tgz",
+ "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=",
+ "dev": true,
+ "requires": {
+ "argparse": "1.0.9",
+ "esprima": "2.7.3"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true,
+ "optional": true
+ },
+ "jschardet": {
+ "version": "1.5.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/jschardet/-/jschardet-1.5.1.tgz",
+ "integrity": "sha512-vE2hT1D0HLZCLLclfBSfkfTTedhVj0fubHpJBHKwwUWX0nSbhPAfk+SG9rTX95BYNmau8rGFfCeaT6T5OW1C2A==",
+ "dev": true
+ },
+ "jsdom": {
+ "version": "9.12.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/jsdom/-/jsdom-9.12.0.tgz",
+ "integrity": "sha1-6MVG//ywbADUgzyoRBD+1/igl9Q=",
+ "dev": true,
+ "requires": {
+ "abab": "1.0.4",
+ "acorn": "4.0.13",
+ "acorn-globals": "3.1.0",
+ "array-equal": "1.0.0",
+ "content-type-parser": "1.0.1",
+ "cssom": "0.3.2",
+ "cssstyle": "0.2.37",
+ "escodegen": "1.8.1",
+ "html-encoding-sniffer": "1.0.1",
+ "nwmatcher": "1.4.3",
+ "parse5": "1.5.1",
+ "request": "2.79.0",
+ "sax": "1.2.4",
+ "symbol-tree": "3.2.2",
+ "tough-cookie": "2.3.3",
+ "webidl-conversions": "4.0.2",
+ "whatwg-encoding": "1.0.1",
+ "whatwg-url": "4.8.0",
+ "xml-name-validator": "2.0.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "4.0.13",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/acorn/-/acorn-4.0.13.tgz",
+ "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
+ "dev": true
+ }
+ }
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsmin": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/jsmin/-/jsmin-1.0.1.tgz",
+ "integrity": "sha1-570NzWSWw79IYyNb9GGj2YqjuYw=",
+ "dev": true
+ },
+ "json-loader": {
+ "version": "0.5.7",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/json-loader/-/json-loader-0.5.7.tgz",
+ "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==",
+ "dev": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.3.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
+ "dev": true
+ },
+ "json-stable-stringify": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
+ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
+ "dev": true,
+ "requires": {
+ "jsonify": "0.0.0"
+ }
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "json3": {
+ "version": "3.3.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/json3/-/json3-3.3.2.tgz",
+ "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=",
+ "dev": true
+ },
+ "json5": {
+ "version": "0.5.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+ "dev": true
+ },
+ "jsonify": {
+ "version": "0.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/jsonify/-/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+ "dev": true
+ },
+ "jsonpointer": {
+ "version": "4.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/jsonpointer/-/jsonpointer-4.0.1.tgz",
+ "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=",
+ "dev": true
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "jsx-ast-utils": {
+ "version": "2.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz",
+ "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=",
+ "dev": true,
+ "requires": {
+ "array-includes": "3.0.3"
+ }
+ },
+ "just-extend": {
+ "version": "1.1.22",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/just-extend/-/just-extend-1.1.22.tgz",
+ "integrity": "sha1-MzCvdWyralQnAMZLLk5KoGLVL/8=",
+ "dev": true
+ },
+ "jxLoader": {
+ "version": "0.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/jxLoader/-/jxLoader-0.1.1.tgz",
+ "integrity": "sha1-ATTqUUTlM7WU/B/yX/GU4jXFPs0=",
+ "dev": true,
+ "requires": {
+ "js-yaml": "0.3.7",
+ "moo-server": "1.3.0",
+ "promised-io": "0.3.5",
+ "walker": "1.0.7"
+ },
+ "dependencies": {
+ "js-yaml": {
+ "version": "0.3.7",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/js-yaml/-/js-yaml-0.3.7.tgz",
+ "integrity": "sha1-1znY7oZGHlSzVNan19HyrZoWf2I=",
+ "dev": true
+ }
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.5"
+ }
+ },
+ "lazy-cache": {
+ "version": "1.0.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/lazy-cache/-/lazy-cache-1.0.4.tgz",
+ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
+ "dev": true
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "dev": true,
+ "requires": {
+ "invert-kv": "1.0.0"
+ }
+ },
+ "lcov-parse": {
+ "version": "0.0.10",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/lcov-parse/-/lcov-parse-0.0.10.tgz",
+ "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=",
+ "dev": true
+ },
+ "less": {
+ "version": "2.7.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/less/-/less-2.7.2.tgz",
+ "integrity": "sha1-No1sxz4fsDmBGDKAkYdDxdz5s98=",
+ "dev": true,
+ "requires": {
+ "errno": "0.1.4",
+ "graceful-fs": "4.1.11",
+ "image-size": "0.5.5",
+ "mime": "1.4.1",
+ "mkdirp": "0.5.1",
+ "promise": "7.3.1",
+ "request": "2.79.0",
+ "source-map": "0.5.7"
+ }
+ },
+ "less-loader": {
+ "version": "4.0.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/less-loader/-/less-loader-4.0.5.tgz",
+ "integrity": "sha1-rhVadAbKxqzSk9eFWH/P8PR4xN0=",
+ "dev": true,
+ "requires": {
+ "clone": "2.1.1",
+ "loader-utils": "1.1.0",
+ "pify": "2.3.0"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "dev": true
+ }
+ }
+ },
+ "less-plugin-clean-css": {
+ "version": "1.5.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/less-plugin-clean-css/-/less-plugin-clean-css-1.5.1.tgz",
+ "integrity": "sha1-zFeveqM5iVflbezr5jy2DCNClwM=",
+ "dev": true,
+ "requires": {
+ "clean-css": "3.4.28"
+ },
+ "dependencies": {
+ "clean-css": {
+ "version": "3.4.28",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/clean-css/-/clean-css-3.4.28.tgz",
+ "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=",
+ "dev": true,
+ "requires": {
+ "commander": "2.8.1",
+ "source-map": "0.4.4"
+ }
+ },
+ "commander": {
+ "version": "2.8.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/commander/-/commander-2.8.1.tgz",
+ "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
+ "dev": true,
+ "requires": {
+ "graceful-readlink": "1.0.1"
+ }
+ },
+ "source-map": {
+ "version": "0.4.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/source-map/-/source-map-0.4.4.tgz",
+ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "dev": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
+ }
+ }
+ },
+ "leven": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/leven/-/leven-2.0.0.tgz",
+ "integrity": "sha1-dMRXREOVUNoYWAGRKCn2HSIHG8E=",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "parse-json": "2.2.0",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1",
+ "strip-bom": "2.0.0"
+ }
+ },
+ "loader-runner": {
+ "version": "2.3.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/loader-runner/-/loader-runner-2.3.0.tgz",
+ "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=",
+ "dev": true
+ },
+ "loader-utils": {
+ "version": "1.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/loader-utils/-/loader-utils-1.1.0.tgz",
+ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
+ "dev": true,
+ "requires": {
+ "big.js": "3.2.0",
+ "emojis-list": "2.1.0",
+ "json5": "0.5.1"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "2.0.0",
+ "path-exists": "3.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ "dev": true
+ },
+ "lodash._baseassign": {
+ "version": "3.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz",
+ "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=",
+ "dev": true,
+ "requires": {
+ "lodash._basecopy": "3.0.1",
+ "lodash.keys": "3.1.2"
+ }
+ },
+ "lodash._basecopy": {
+ "version": "3.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
+ "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
+ "dev": true
+ },
+ "lodash._basecreate": {
+ "version": "3.0.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz",
+ "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=",
+ "dev": true
+ },
+ "lodash._getnative": {
+ "version": "3.9.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
+ "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
+ "dev": true
+ },
+ "lodash._isiterateecall": {
+ "version": "3.0.9",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
+ "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.create": {
+ "version": "3.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/lodash.create/-/lodash.create-3.1.1.tgz",
+ "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=",
+ "dev": true,
+ "requires": {
+ "lodash._baseassign": "3.2.0",
+ "lodash._basecreate": "3.0.3",
+ "lodash._isiterateecall": "3.0.9"
+ }
+ },
+ "lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
+ "dev": true
+ },
+ "lodash.isarguments": {
+ "version": "3.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
+ "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
+ "dev": true
+ },
+ "lodash.isarray": {
+ "version": "3.0.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
+ "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
+ "dev": true
+ },
+ "lodash.keys": {
+ "version": "3.1.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/lodash.keys/-/lodash.keys-3.1.2.tgz",
+ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
+ "dev": true,
+ "requires": {
+ "lodash._getnative": "3.9.1",
+ "lodash.isarguments": "3.1.0",
+ "lodash.isarray": "3.0.4"
+ }
+ },
+ "lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
+ "dev": true
+ },
+ "lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
+ "dev": true
+ },
+ "log-driver": {
+ "version": "1.2.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/log-driver/-/log-driver-1.2.5.tgz",
+ "integrity": "sha1-euTsJXMC/XkNVXyxDJcQDYV7AFY=",
+ "dev": true
+ },
+ "loglevel": {
+ "version": "1.5.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/loglevel/-/loglevel-1.5.1.tgz",
+ "integrity": "sha1-GJB4yUq5BT7iFaCs2/JCROoPZQI=",
+ "dev": true
+ },
+ "lolex": {
+ "version": "2.1.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/lolex/-/lolex-2.1.3.tgz",
+ "integrity": "sha512-BdHq78SeI+6PAUtl4atDuCt7L6E4fab3mSRtqxm4ywaXe4uP7jZ0TTcFNuU20syUjxZc2l7jFqKVMJ+AX0LnpQ==",
+ "dev": true
+ },
+ "longest": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/longest/-/longest-1.0.1.tgz",
+ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "loud-rejection": {
+ "version": "1.6.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/loud-rejection/-/loud-rejection-1.6.0.tgz",
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "dev": true,
+ "requires": {
+ "currently-unhandled": "0.4.1",
+ "signal-exit": "3.0.2"
+ }
+ },
+ "lower-case": {
+ "version": "1.1.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/lower-case/-/lower-case-1.1.4.tgz",
+ "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "4.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/lru-cache/-/lru-cache-4.1.1.tgz",
+ "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "1.0.2",
+ "yallist": "2.1.2"
+ }
+ },
+ "macaddress": {
+ "version": "0.2.8",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/macaddress/-/macaddress-0.2.8.tgz",
+ "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=",
+ "dev": true
+ },
+ "magic-string": {
+ "version": "0.22.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/magic-string/-/magic-string-0.22.4.tgz",
+ "integrity": "sha512-kxBL06p6iO2qPBHsqGK2b3cRwiRGpnmSuVWNhwHcMX7qJOUr1HvricYP1LZOCdkQBUp0jiWg2d6WJwR3vYgByw==",
+ "dev": true,
+ "requires": {
+ "vlq": "0.2.3"
+ }
+ },
+ "magicpen": {
+ "version": "5.12.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/magicpen/-/magicpen-5.12.0.tgz",
+ "integrity": "sha1-u+nunUI2R2rs+EE27KGDPrRwqWs=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.0.0",
+ "color-diff": "0.1.7",
+ "supports-color": "1.2.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ansi-styles/-/ansi-styles-2.0.0.tgz",
+ "integrity": "sha1-QysmFi/qG2PIeIlqvIzFVI8lBj4=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "1.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/supports-color/-/supports-color-1.2.0.tgz",
+ "integrity": "sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4=",
+ "dev": true
+ }
+ }
+ },
+ "magicpen-prism": {
+ "version": "2.3.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/magicpen-prism/-/magicpen-prism-2.3.0.tgz",
+ "integrity": "sha1-mzQIB8787cL+TsepGwTuyY6S5CU=",
+ "dev": true,
+ "requires": {
+ "prismjs": "1.6.0"
+ }
+ },
+ "make-dir": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/make-dir/-/make-dir-1.0.0.tgz",
+ "integrity": "sha1-l6ARdR6R3YfPre9Ygy67BJNt6Xg=",
+ "dev": true,
+ "requires": {
+ "pify": "2.3.0"
+ }
+ },
+ "makeerror": {
+ "version": "1.0.11",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/makeerror/-/makeerror-1.0.11.tgz",
+ "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
+ "dev": true,
+ "requires": {
+ "tmpl": "1.0.4"
+ }
+ },
+ "manage-path": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/manage-path/-/manage-path-2.0.0.tgz",
+ "integrity": "sha1-9M+EV7km7u4qg7FzUBQUvHbrlZc=",
+ "dev": true
+ },
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ },
+ "map-stream": {
+ "version": "0.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/map-stream/-/map-stream-0.1.0.tgz",
+ "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=",
+ "dev": true
+ },
+ "math-expression-evaluator": {
+ "version": "1.2.17",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz",
+ "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=",
+ "dev": true
+ },
+ "md5": {
+ "version": "2.2.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/md5/-/md5-2.2.1.tgz",
+ "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=",
+ "dev": true,
+ "requires": {
+ "charenc": "0.0.2",
+ "crypt": "0.0.2",
+ "is-buffer": "1.1.5"
+ }
+ },
+ "md5.js": {
+ "version": "1.3.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/md5.js/-/md5.js-1.3.4.tgz",
+ "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=",
+ "dev": true,
+ "requires": {
+ "hash-base": "3.0.4",
+ "inherits": "2.0.3"
+ },
+ "dependencies": {
+ "hash-base": {
+ "version": "3.0.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+ "dev": true
+ },
+ "mem": {
+ "version": "1.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/mem/-/mem-1.1.0.tgz",
+ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "1.1.0"
+ }
+ },
+ "memory-fs": {
+ "version": "0.4.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/memory-fs/-/memory-fs-0.4.1.tgz",
+ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
+ "dev": true,
+ "requires": {
+ "errno": "0.1.4",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "meow": {
+ "version": "3.7.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "2.1.0",
+ "decamelize": "1.2.0",
+ "loud-rejection": "1.6.0",
+ "map-obj": "1.0.1",
+ "minimist": "1.2.0",
+ "normalize-package-data": "2.4.0",
+ "object-assign": "4.1.1",
+ "read-pkg-up": "1.0.1",
+ "redent": "1.0.0",
+ "trim-newlines": "1.0.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
+ "dev": true
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "2.3.11",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/micromatch/-/micromatch-2.3.11.tgz",
+ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "dev": true,
+ "requires": {
+ "arr-diff": "2.0.0",
+ "array-unique": "0.2.1",
+ "braces": "1.8.5",
+ "expand-brackets": "0.1.5",
+ "extglob": "0.3.2",
+ "filename-regex": "2.0.1",
+ "is-extglob": "1.0.0",
+ "is-glob": "2.0.1",
+ "kind-of": "3.2.2",
+ "normalize-path": "2.1.1",
+ "object.omit": "2.0.1",
+ "parse-glob": "3.0.4",
+ "regex-cache": "0.4.4"
+ }
+ },
+ "miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "brorand": "1.1.0"
+ }
+ },
+ "mime": {
+ "version": "1.4.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/mime/-/mime-1.4.1.tgz",
+ "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
+ "dev": true
+ },
+ "mime-db": {
+ "version": "1.30.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/mime-db/-/mime-db-1.30.0.tgz",
+ "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.17",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/mime-types/-/mime-types-2.1.17.tgz",
+ "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.30.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/mimic-fn/-/mimic-fn-1.1.0.tgz",
+ "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=",
+ "dev": true
+ },
+ "minimalistic-assert": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz",
+ "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=",
+ "dev": true
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "mocha": {
+ "version": "3.5.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/mocha/-/mocha-3.5.3.tgz",
+ "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==",
+ "dev": true,
+ "requires": {
+ "browser-stdout": "1.3.0",
+ "commander": "2.9.0",
+ "debug": "2.6.8",
+ "diff": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "glob": "7.1.1",
+ "growl": "1.9.2",
+ "he": "1.1.1",
+ "json3": "3.3.2",
+ "lodash.create": "3.1.1",
+ "mkdirp": "0.5.1",
+ "supports-color": "3.1.2"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.9.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/commander/-/commander-2.9.0.tgz",
+ "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
+ "dev": true,
+ "requires": {
+ "graceful-readlink": "1.0.1"
+ }
+ },
+ "debug": {
+ "version": "2.6.8",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/debug/-/debug-2.6.8.tgz",
+ "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/glob/-/glob-7.1.1.tgz",
+ "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "supports-color": {
+ "version": "3.1.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/supports-color/-/supports-color-3.1.2.tgz",
+ "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=",
+ "dev": true,
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "moo-server": {
+ "version": "1.3.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/moo-server/-/moo-server-1.3.0.tgz",
+ "integrity": "sha1-XceVaVZaENbv7VQ5SR5p0jkuWPE=",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "multicast-dns": {
+ "version": "6.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/multicast-dns/-/multicast-dns-6.1.1.tgz",
+ "integrity": "sha1-bn3oalcIcqsXBYrepxYLvsqBTd4=",
+ "dev": true,
+ "requires": {
+ "dns-packet": "1.2.2",
+ "thunky": "0.1.0"
+ }
+ },
+ "multicast-dns-service-types": {
+ "version": "1.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
+ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
+ "dev": true
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+ "dev": true
+ },
+ "nan": {
+ "version": "2.7.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/nan/-/nan-2.7.0.tgz",
+ "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=",
+ "dev": true,
+ "optional": true
+ },
+ "native-promise-only": {
+ "version": "0.8.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/native-promise-only/-/native-promise-only-0.8.1.tgz",
+ "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE=",
+ "dev": true
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "ncname": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ncname/-/ncname-1.0.0.tgz",
+ "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=",
+ "dev": true,
+ "requires": {
+ "xml-char-classes": "1.0.0"
+ }
+ },
+ "ncp": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ncp/-/ncp-2.0.0.tgz",
+ "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=",
+ "dev": true
+ },
+ "negotiator": {
+ "version": "0.6.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/negotiator/-/negotiator-0.6.1.tgz",
+ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=",
+ "dev": true
+ },
+ "nested-error-stacks": {
+ "version": "1.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/nested-error-stacks/-/nested-error-stacks-1.0.2.tgz",
+ "integrity": "sha1-GfYZWRUZ8JZ2mlupqG5u7sgjw88=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "nise": {
+ "version": "1.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/nise/-/nise-1.1.1.tgz",
+ "integrity": "sha512-f5DMJB0MqBaSuP2NAwPx7HyVKPdaozds0KsNe9XIP3npKWt/QUg73l5TTLRTSwfG/Y3AB0ktacuxX4QNcg6vVw==",
+ "dev": true,
+ "requires": {
+ "formatio": "1.2.0",
+ "just-extend": "1.1.22",
+ "lolex": "1.6.0",
+ "path-to-regexp": "1.7.0",
+ "text-encoding": "0.6.4"
+ },
+ "dependencies": {
+ "lolex": {
+ "version": "1.6.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/lolex/-/lolex-1.6.0.tgz",
+ "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=",
+ "dev": true
+ }
+ }
+ },
+ "no-case": {
+ "version": "2.3.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/no-case/-/no-case-2.3.2.tgz",
+ "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
+ "dev": true,
+ "requires": {
+ "lower-case": "1.1.4"
+ }
+ },
+ "node-fetch": {
+ "version": "1.7.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/node-fetch/-/node-fetch-1.7.3.tgz",
+ "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
+ "requires": {
+ "encoding": "0.1.12",
+ "is-stream": "1.1.0"
+ }
+ },
+ "node-forge": {
+ "version": "0.6.33",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/node-forge/-/node-forge-0.6.33.tgz",
+ "integrity": "sha1-RjgRh59XPUUVWtap9D3ClujoXrw=",
+ "dev": true
+ },
+ "node-libs-browser": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/node-libs-browser/-/node-libs-browser-2.0.0.tgz",
+ "integrity": "sha1-o6WeyXAkmFtG6Vg3lkb5bEthZkY=",
+ "dev": true,
+ "requires": {
+ "assert": "1.4.1",
+ "browserify-zlib": "0.1.4",
+ "buffer": "4.9.1",
+ "console-browserify": "1.1.0",
+ "constants-browserify": "1.0.0",
+ "crypto-browserify": "3.11.1",
+ "domain-browser": "1.1.7",
+ "events": "1.1.1",
+ "https-browserify": "0.0.1",
+ "os-browserify": "0.2.1",
+ "path-browserify": "0.0.0",
+ "process": "0.11.10",
+ "punycode": "1.4.1",
+ "querystring-es3": "0.2.1",
+ "readable-stream": "2.3.3",
+ "stream-browserify": "2.0.1",
+ "stream-http": "2.7.2",
+ "string_decoder": "0.10.31",
+ "timers-browserify": "2.0.4",
+ "tty-browserify": "0.0.0",
+ "url": "0.11.0",
+ "util": "0.10.3",
+ "vm-browserify": "0.0.4"
+ },
+ "dependencies": {
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
+ }
+ },
+ "nopt": {
+ "version": "3.0.6",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/nopt/-/nopt-3.0.6.tgz",
+ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1.0.9"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.4.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "2.5.0",
+ "is-builtin-module": "1.0.0",
+ "semver": "5.4.1",
+ "validate-npm-package-license": "3.0.1"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "1.1.0"
+ }
+ },
+ "normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
+ "dev": true
+ },
+ "normalize-url": {
+ "version": "1.9.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/normalize-url/-/normalize-url-1.9.1.tgz",
+ "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
+ "dev": true,
+ "requires": {
+ "object-assign": "4.1.1",
+ "prepend-http": "1.0.4",
+ "query-string": "4.3.4",
+ "sort-keys": "1.1.2"
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "dev": true,
+ "requires": {
+ "path-key": "2.0.1"
+ }
+ },
+ "nps": {
+ "version": "5.7.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/nps/-/nps-5.7.1.tgz",
+ "integrity": "sha512-pWfkK+mydy/MrXDp8MtVJ9GV7NQYTA+Yb6BGXqE66b57WhCI2eROq3IfKzUTDapgXJNjfAPxqiTTGlnXu36cww==",
+ "dev": true,
+ "requires": {
+ "arrify": "1.0.1",
+ "chalk": "2.2.0",
+ "common-tags": "1.4.0",
+ "find-up": "2.1.0",
+ "js-yaml": "3.10.0",
+ "lodash": "4.17.4",
+ "manage-path": "2.0.0",
+ "prefix-matches": "1.0.1",
+ "readline-sync": "1.4.7",
+ "spawn-command-with-kill": "1.0.0",
+ "type-detect": "4.0.3",
+ "yargs": "8.0.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.0"
+ }
+ },
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/chalk/-/chalk-2.2.0.tgz",
+ "integrity": "sha512-0BMM/2hG3ZaoPfR6F+h/oWpZtsh3b/s62TjSM6MGCJWEbJDN1acqCXvyhhZsDSVFklpebUoQ5O1kKC7lOzrn9g==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "dev": true,
+ "requires": {
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wrap-ansi": "2.1.0"
+ },
+ "dependencies": {
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ }
+ }
+ },
+ "esprima": {
+ "version": "4.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/esprima/-/esprima-4.0.0.tgz",
+ "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "js-yaml": {
+ "version": "3.10.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/js-yaml/-/js-yaml-3.10.0.tgz",
+ "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==",
+ "dev": true,
+ "requires": {
+ "argparse": "1.0.9",
+ "esprima": "4.0.0"
+ }
+ },
+ "load-json-file": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/load-json-file/-/load-json-file-2.0.0.tgz",
+ "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "parse-json": "2.2.0",
+ "pify": "2.3.0",
+ "strip-bom": "3.0.0"
+ }
+ },
+ "path-type": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/path-type/-/path-type-2.0.0.tgz",
+ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
+ "dev": true,
+ "requires": {
+ "pify": "2.3.0"
+ }
+ },
+ "read-pkg": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/read-pkg/-/read-pkg-2.0.0.tgz",
+ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "2.0.0",
+ "normalize-package-data": "2.4.0",
+ "path-type": "2.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+ "dev": true,
+ "requires": {
+ "find-up": "2.1.0",
+ "read-pkg": "2.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ },
+ "yargs": {
+ "version": "8.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/yargs/-/yargs-8.0.2.tgz",
+ "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=",
+ "dev": true,
+ "requires": {
+ "camelcase": "4.1.0",
+ "cliui": "3.2.0",
+ "decamelize": "1.2.0",
+ "get-caller-file": "1.0.2",
+ "os-locale": "2.1.0",
+ "read-pkg-up": "2.0.0",
+ "require-directory": "2.1.1",
+ "require-main-filename": "1.0.1",
+ "set-blocking": "2.0.0",
+ "string-width": "2.1.1",
+ "which-module": "2.0.0",
+ "y18n": "3.2.1",
+ "yargs-parser": "7.0.0"
+ }
+ }
+ }
+ },
+ "nps-utils": {
+ "version": "1.4.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/nps-utils/-/nps-utils-1.4.0.tgz",
+ "integrity": "sha1-1drQ+x0rA+1lDYHZ2nGgfYNq9co=",
+ "dev": true,
+ "requires": {
+ "any-shell-escape": "0.1.1",
+ "common-tags": "1.4.0",
+ "concurrently": "3.5.0",
+ "cpy-cli": "1.0.1",
+ "cross-env": "3.2.4",
+ "is-windows": "1.0.1",
+ "mkdirp": "0.5.1",
+ "ncp": "2.0.0",
+ "opn-cli": "3.1.0",
+ "rimraf": "2.6.2"
+ },
+ "dependencies": {
+ "cross-env": {
+ "version": "3.2.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/cross-env/-/cross-env-3.2.4.tgz",
+ "integrity": "sha1-ngWF8neGTtQhznVvgamA/w1piro=",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "5.1.0",
+ "is-windows": "1.0.1"
+ }
+ }
+ }
+ },
+ "nth-check": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/nth-check/-/nth-check-1.0.1.tgz",
+ "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=",
+ "dev": true,
+ "requires": {
+ "boolbase": "1.0.0"
+ }
+ },
+ "num2fraction": {
+ "version": "1.2.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/num2fraction/-/num2fraction-1.2.2.tgz",
+ "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "nwmatcher": {
+ "version": "1.4.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/nwmatcher/-/nwmatcher-1.4.3.tgz",
+ "integrity": "sha512-IKdSTiDWCarf2JTS5e9e2+5tPZGdkRJ79XjYV0pzK8Q9BpsFyBq1RGKxzs7Q8UBushGw7m6TzVKz6fcY99iSWw==",
+ "dev": true
+ },
+ "nyc": {
+ "version": "11.2.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/nyc/-/nyc-11.2.1.tgz",
+ "integrity": "sha1-rYUK/p261/SXByi0suR/7Rw4chw=",
+ "dev": true,
+ "requires": {
+ "archy": "1.0.0",
+ "arrify": "1.0.1",
+ "caching-transform": "1.0.1",
+ "convert-source-map": "1.5.0",
+ "debug-log": "1.0.1",
+ "default-require-extensions": "1.0.0",
+ "find-cache-dir": "0.1.1",
+ "find-up": "2.1.0",
+ "foreground-child": "1.5.6",
+ "glob": "7.1.2",
+ "istanbul-lib-coverage": "1.1.1",
+ "istanbul-lib-hook": "1.0.7",
+ "istanbul-lib-instrument": "1.8.0",
+ "istanbul-lib-report": "1.1.1",
+ "istanbul-lib-source-maps": "1.2.1",
+ "istanbul-reports": "1.1.2",
+ "md5-hex": "1.3.0",
+ "merge-source-map": "1.0.4",
+ "micromatch": "2.3.11",
+ "mkdirp": "0.5.1",
+ "resolve-from": "2.0.0",
+ "rimraf": "2.6.1",
+ "signal-exit": "3.0.2",
+ "spawn-wrap": "1.3.8",
+ "test-exclude": "4.1.1",
+ "yargs": "8.0.2",
+ "yargs-parser": "5.0.0"
+ },
+ "dependencies": {
+ "align-text": {
+ "version": "0.1.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2",
+ "longest": "1.0.1",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "bundled": true,
+ "dev": true
+ },
+ "append-transform": {
+ "version": "0.4.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "default-require-extensions": "1.0.0"
+ }
+ },
+ "archy": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "arr-diff": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0"
+ }
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.2.1",
+ "bundled": true,
+ "dev": true
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "async": {
+ "version": "1.5.2",
+ "bundled": true,
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.4",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.1",
+ "regenerator-runtime": "0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "6.26.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.8",
+ "globals": "9.18.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.4",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "bundled": true,
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "1.8.5",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "expand-range": "1.8.2",
+ "preserve": "0.2.0",
+ "repeat-element": "1.1.2"
+ }
+ },
+ "builtin-modules": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "caching-transform": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "md5-hex": "1.3.0",
+ "mkdirp": "0.5.1",
+ "write-file-atomic": "1.3.4"
+ }
+ },
+ "camelcase": {
+ "version": "1.2.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "center-align": {
+ "version": "0.1.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "align-text": "0.1.4",
+ "lazy-cache": "1.0.4"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "cliui": {
+ "version": "2.1.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "center-align": "0.1.3",
+ "right-align": "0.1.3",
+ "wordwrap": "0.0.2"
+ },
+ "dependencies": {
+ "wordwrap": {
+ "version": "0.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.5.0",
+ "bundled": true,
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.1",
+ "bundled": true,
+ "dev": true
+ },
+ "cross-spawn": {
+ "version": "4.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "lru-cache": "4.1.1",
+ "which": "1.3.0"
+ }
+ },
+ "debug": {
+ "version": "2.6.8",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "debug-log": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true
+ },
+ "default-require-extensions": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "strip-bom": "2.0.0"
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-arrayish": "0.2.1"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "bundled": true,
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "execa": {
+ "version": "0.7.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "cross-spawn": "5.1.0",
+ "get-stream": "3.0.0",
+ "is-stream": "1.1.0",
+ "npm-run-path": "2.0.2",
+ "p-finally": "1.0.0",
+ "signal-exit": "3.0.2",
+ "strip-eof": "1.0.0"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "5.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "lru-cache": "4.1.1",
+ "shebang-command": "1.2.0",
+ "which": "1.3.0"
+ }
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "0.1.5",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-posix-bracket": "0.1.1"
+ }
+ },
+ "expand-range": {
+ "version": "1.8.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "fill-range": "2.2.3"
+ }
+ },
+ "extglob": {
+ "version": "0.3.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ },
+ "filename-regex": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "fill-range": {
+ "version": "2.2.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-number": "2.1.0",
+ "isobject": "2.1.0",
+ "randomatic": "1.1.7",
+ "repeat-element": "1.1.2",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "find-cache-dir": {
+ "version": "0.1.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "commondir": "1.0.1",
+ "mkdirp": "0.5.1",
+ "pkg-dir": "1.0.0"
+ }
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "locate-path": "2.0.0"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "for-own": {
+ "version": "0.1.5",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2"
+ }
+ },
+ "foreground-child": {
+ "version": "1.5.6",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "cross-spawn": "4.0.2",
+ "signal-exit": "3.0.2"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-base": {
+ "version": "0.3.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "glob-parent": "2.0.0",
+ "is-glob": "2.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-glob": "2.0.1"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "bundled": true,
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "bundled": true,
+ "dev": true
+ },
+ "handlebars": {
+ "version": "4.0.10",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "optimist": "0.6.1",
+ "source-map": "0.4.4",
+ "uglify-js": "2.8.29"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.4.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
+ }
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "hosted-git-info": {
+ "version": "2.5.0",
+ "bundled": true,
+ "dev": true
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "bundled": true,
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "bundled": true,
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "invert-kv": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "bundled": true,
+ "dev": true
+ },
+ "is-buffer": {
+ "version": "1.1.5",
+ "bundled": true,
+ "dev": true
+ },
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "builtin-modules": "1.1.1"
+ }
+ },
+ "is-dotfile": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true
+ },
+ "is-equal-shallow": {
+ "version": "0.1.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-primitive": "2.0.0"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ },
+ "is-number": {
+ "version": "2.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ },
+ "is-posix-bracket": {
+ "version": "0.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "is-primitive": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "bundled": true,
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "isobject": {
+ "version": "2.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ },
+ "istanbul-lib-coverage": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "istanbul-lib-hook": {
+ "version": "1.0.7",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "append-transform": "0.4.0"
+ }
+ },
+ "istanbul-lib-instrument": {
+ "version": "1.8.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "babel-generator": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "istanbul-lib-coverage": "1.1.1",
+ "semver": "5.4.1"
+ }
+ },
+ "istanbul-lib-report": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "istanbul-lib-coverage": "1.1.1",
+ "mkdirp": "0.5.1",
+ "path-parse": "1.0.5",
+ "supports-color": "3.2.3"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "3.2.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "istanbul-lib-source-maps": {
+ "version": "1.2.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "debug": "2.6.8",
+ "istanbul-lib-coverage": "1.1.1",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.1",
+ "source-map": "0.5.7"
+ }
+ },
+ "istanbul-reports": {
+ "version": "1.1.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "handlebars": "4.0.10"
+ }
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "bundled": true,
+ "dev": true
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.5"
+ }
+ },
+ "lazy-cache": {
+ "version": "1.0.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "invert-kv": "1.0.0"
+ }
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "parse-json": "2.2.0",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1",
+ "strip-bom": "2.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "p-locate": "2.0.0",
+ "path-exists": "3.0.0"
+ },
+ "dependencies": {
+ "path-exists": {
+ "version": "3.0.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "lodash": {
+ "version": "4.17.4",
+ "bundled": true,
+ "dev": true
+ },
+ "longest": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "lru-cache": {
+ "version": "4.1.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "pseudomap": "1.0.2",
+ "yallist": "2.1.2"
+ }
+ },
+ "md5-hex": {
+ "version": "1.3.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "md5-o-matic": "0.1.1"
+ }
+ },
+ "md5-o-matic": {
+ "version": "0.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "mem": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "mimic-fn": "1.1.0"
+ }
+ },
+ "merge-source-map": {
+ "version": "1.0.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "source-map": "0.5.7"
+ }
+ },
+ "micromatch": {
+ "version": "2.3.11",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "arr-diff": "2.0.0",
+ "array-unique": "0.2.1",
+ "braces": "1.8.5",
+ "expand-brackets": "0.1.5",
+ "extglob": "0.3.2",
+ "filename-regex": "2.0.1",
+ "is-extglob": "1.0.0",
+ "is-glob": "2.0.1",
+ "kind-of": "3.2.2",
+ "normalize-path": "2.1.1",
+ "object.omit": "2.0.1",
+ "parse-glob": "3.0.4",
+ "regex-cache": "0.4.4"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true,
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "normalize-package-data": {
+ "version": "2.4.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "2.5.0",
+ "is-builtin-module": "1.0.0",
+ "semver": "5.4.1",
+ "validate-npm-package-license": "3.0.1"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "1.1.0"
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "path-key": "2.0.1"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "object.omit": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "for-own": "0.1.5",
+ "is-extendable": "0.1.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optimist": {
+ "version": "0.6.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8",
+ "wordwrap": "0.0.3"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "os-locale": {
+ "version": "2.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "execa": "0.7.0",
+ "lcid": "1.0.0",
+ "mem": "1.1.0"
+ }
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "p-limit": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "p-limit": "1.1.0"
+ }
+ },
+ "parse-glob": {
+ "version": "3.0.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "glob-base": "0.3.0",
+ "is-dotfile": "1.0.3",
+ "is-extglob": "1.0.0",
+ "is-glob": "2.0.1"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "error-ex": "1.3.1"
+ }
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "bundled": true,
+ "dev": true
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "bundled": true,
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "bundled": true,
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "pinkie": "2.0.4"
+ }
+ },
+ "pkg-dir": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "find-up": "1.1.2"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "1.1.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "path-exists": "2.1.0",
+ "pinkie-promise": "2.0.1"
+ }
+ }
+ }
+ },
+ "preserve": {
+ "version": "0.2.0",
+ "bundled": true,
+ "dev": true
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "randomatic": {
+ "version": "1.1.7",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "3.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.5"
+ }
+ }
+ }
+ },
+ "kind-of": {
+ "version": "4.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.5"
+ }
+ }
+ }
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "load-json-file": "1.1.0",
+ "normalize-package-data": "2.4.0",
+ "path-type": "1.1.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "find-up": "1.1.2",
+ "read-pkg": "1.1.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "1.1.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "path-exists": "2.1.0",
+ "pinkie-promise": "2.0.1"
+ }
+ }
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.11.0",
+ "bundled": true,
+ "dev": true
+ },
+ "regex-cache": {
+ "version": "0.4.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-equal-shallow": "0.1.3"
+ }
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "bundled": true,
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "bundled": true,
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "resolve-from": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "right-align": {
+ "version": "0.1.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "align-text": "0.1.4"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2"
+ }
+ },
+ "semver": {
+ "version": "5.4.1",
+ "bundled": true,
+ "dev": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "shebang-regex": "1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "slide": {
+ "version": "1.1.6",
+ "bundled": true,
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "bundled": true,
+ "dev": true
+ },
+ "spawn-wrap": {
+ "version": "1.3.8",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "foreground-child": "1.5.6",
+ "mkdirp": "0.5.1",
+ "os-homedir": "1.0.2",
+ "rimraf": "2.6.1",
+ "signal-exit": "3.0.2",
+ "which": "1.3.0"
+ }
+ },
+ "spdx-correct": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "spdx-license-ids": "1.2.2"
+ }
+ },
+ "spdx-expression-parse": {
+ "version": "1.0.4",
+ "bundled": true,
+ "dev": true
+ },
+ "spdx-license-ids": {
+ "version": "1.2.2",
+ "bundled": true,
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0",
+ "strip-ansi": "4.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-regex": "3.0.0"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-utf8": "0.2.1"
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "test-exclude": {
+ "version": "4.1.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "arrify": "1.0.1",
+ "micromatch": "2.3.11",
+ "object-assign": "4.1.1",
+ "read-pkg-up": "1.0.1",
+ "require-main-filename": "1.0.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "2.8.29",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "source-map": "0.5.7",
+ "uglify-to-browserify": "1.0.2",
+ "yargs": "3.10.0"
+ },
+ "dependencies": {
+ "yargs": {
+ "version": "3.10.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "camelcase": "1.2.1",
+ "cliui": "2.1.0",
+ "decamelize": "1.2.0",
+ "window-size": "0.1.0"
+ }
+ }
+ }
+ },
+ "uglify-to-browserify": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "spdx-correct": "1.0.2",
+ "spdx-expression-parse": "1.0.4"
+ }
+ },
+ "which": {
+ "version": "1.3.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "isexe": "2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "window-size": {
+ "version": "0.1.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "wordwrap": {
+ "version": "0.0.3",
+ "bundled": true,
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1"
+ },
+ "dependencies": {
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "write-file-atomic": {
+ "version": "1.3.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "imurmurhash": "0.1.4",
+ "slide": "1.1.6"
+ }
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "bundled": true,
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "bundled": true,
+ "dev": true
+ },
+ "yargs": {
+ "version": "8.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "camelcase": "4.1.0",
+ "cliui": "3.2.0",
+ "decamelize": "1.2.0",
+ "get-caller-file": "1.0.2",
+ "os-locale": "2.1.0",
+ "read-pkg-up": "2.0.0",
+ "require-directory": "2.1.1",
+ "require-main-filename": "1.0.1",
+ "set-blocking": "2.0.0",
+ "string-width": "2.1.1",
+ "which-module": "2.0.0",
+ "y18n": "3.2.1",
+ "yargs-parser": "7.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "cliui": {
+ "version": "3.2.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wrap-ansi": "2.1.0"
+ },
+ "dependencies": {
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ }
+ }
+ },
+ "load-json-file": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "parse-json": "2.2.0",
+ "pify": "2.3.0",
+ "strip-bom": "3.0.0"
+ }
+ },
+ "path-type": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "pify": "2.3.0"
+ }
+ },
+ "read-pkg": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "load-json-file": "2.0.0",
+ "normalize-package-data": "2.4.0",
+ "path-type": "2.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "find-up": "2.1.0",
+ "read-pkg": "2.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "yargs-parser": {
+ "version": "7.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "camelcase": "4.1.0"
+ }
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "5.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "camelcase": "3.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "3.0.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "oauth-sign": {
+ "version": "0.8.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/oauth-sign/-/oauth-sign-0.8.2.tgz",
+ "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
+ "object-keys": {
+ "version": "1.0.11",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/object-keys/-/object-keys-1.0.11.tgz",
+ "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=",
+ "dev": true
+ },
+ "object.omit": {
+ "version": "2.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/object.omit/-/object.omit-2.0.1.tgz",
+ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "dev": true,
+ "requires": {
+ "for-own": "0.1.5",
+ "is-extendable": "0.1.1"
+ }
+ },
+ "obuf": {
+ "version": "1.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/obuf/-/obuf-1.1.1.tgz",
+ "integrity": "sha1-EEEktsYCxnlogaBCVB0220OlJk4=",
+ "dev": true
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "on-headers": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/on-headers/-/on-headers-1.0.1.tgz",
+ "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "1.1.0"
+ }
+ },
+ "opn": {
+ "version": "4.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/opn/-/opn-4.0.2.tgz",
+ "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=",
+ "dev": true,
+ "requires": {
+ "object-assign": "4.1.1",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "opn-cli": {
+ "version": "3.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/opn-cli/-/opn-cli-3.1.0.tgz",
+ "integrity": "sha1-+BmubK4LQRvQFJuFYP5siK2tIPg=",
+ "dev": true,
+ "requires": {
+ "file-type": "3.9.0",
+ "get-stdin": "5.0.1",
+ "meow": "3.7.0",
+ "opn": "4.0.2",
+ "temp-write": "2.1.0"
+ },
+ "dependencies": {
+ "get-stdin": {
+ "version": "5.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/get-stdin/-/get-stdin-5.0.1.tgz",
+ "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=",
+ "dev": true
+ }
+ }
+ },
+ "optimist": {
+ "version": "0.6.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/optimist/-/optimist-0.6.1.tgz",
+ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8",
+ "wordwrap": "0.0.3"
+ },
+ "dependencies": {
+ "wordwrap": {
+ "version": "0.0.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/wordwrap/-/wordwrap-0.0.3.tgz",
+ "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
+ "dev": true
+ }
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "original": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/original/-/original-1.0.0.tgz",
+ "integrity": "sha1-kUf5P6FpbQS+YeAb1QuurKZWvTs=",
+ "dev": true,
+ "requires": {
+ "url-parse": "1.0.5"
+ },
+ "dependencies": {
+ "url-parse": {
+ "version": "1.0.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/url-parse/-/url-parse-1.0.5.tgz",
+ "integrity": "sha1-CFSGBCKv3P7+tsllxmLUgAFpkns=",
+ "dev": true,
+ "requires": {
+ "querystringify": "0.0.4",
+ "requires-port": "1.0.0"
+ }
+ }
+ }
+ },
+ "os-browserify": {
+ "version": "0.2.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/os-browserify/-/os-browserify-0.2.1.tgz",
+ "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=",
+ "dev": true
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true
+ },
+ "os-locale": {
+ "version": "2.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/os-locale/-/os-locale-2.1.0.tgz",
+ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
+ "dev": true,
+ "requires": {
+ "execa": "0.7.0",
+ "lcid": "1.0.0",
+ "mem": "1.1.0"
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "output-file-sync": {
+ "version": "1.1.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/output-file-sync/-/output-file-sync-1.1.2.tgz",
+ "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "mkdirp": "0.5.1",
+ "object-assign": "4.1.1"
+ }
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "dev": true
+ },
+ "p-limit": {
+ "version": "1.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/p-limit/-/p-limit-1.1.0.tgz",
+ "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=",
+ "dev": true
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "requires": {
+ "p-limit": "1.1.0"
+ }
+ },
+ "p-map": {
+ "version": "1.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/p-map/-/p-map-1.2.0.tgz",
+ "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==",
+ "dev": true
+ },
+ "pako": {
+ "version": "0.2.9",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/pako/-/pako-0.2.9.tgz",
+ "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=",
+ "dev": true
+ },
+ "param-case": {
+ "version": "2.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/param-case/-/param-case-2.1.1.tgz",
+ "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
+ "dev": true,
+ "requires": {
+ "no-case": "2.3.2"
+ }
+ },
+ "parse-asn1": {
+ "version": "5.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/parse-asn1/-/parse-asn1-5.1.0.tgz",
+ "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=",
+ "dev": true,
+ "requires": {
+ "asn1.js": "4.9.1",
+ "browserify-aes": "1.1.1",
+ "create-hash": "1.1.3",
+ "evp_bytestokey": "1.0.3",
+ "pbkdf2": "3.0.14"
+ }
+ },
+ "parse-glob": {
+ "version": "3.0.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/parse-glob/-/parse-glob-3.0.4.tgz",
+ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+ "dev": true,
+ "requires": {
+ "glob-base": "0.3.0",
+ "is-dotfile": "1.0.3",
+ "is-extglob": "1.0.0",
+ "is-glob": "2.0.1"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "1.3.1"
+ }
+ },
+ "parse5": {
+ "version": "1.5.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/parse5/-/parse5-1.5.1.tgz",
+ "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=",
+ "dev": true
+ },
+ "parseurl": {
+ "version": "1.3.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/parseurl/-/parseurl-1.3.2.tgz",
+ "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=",
+ "dev": true
+ },
+ "path-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/path-browserify/-/path-browserify-0.0.0.tgz",
+ "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "path-to-regexp": {
+ "version": "1.7.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/path-to-regexp/-/path-to-regexp-1.7.0.tgz",
+ "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=",
+ "dev": true,
+ "requires": {
+ "isarray": "0.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ }
+ }
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "pathval": {
+ "version": "1.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/pathval/-/pathval-1.1.0.tgz",
+ "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=",
+ "dev": true
+ },
+ "pause-stream": {
+ "version": "0.0.11",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/pause-stream/-/pause-stream-0.0.11.tgz",
+ "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=",
+ "dev": true,
+ "requires": {
+ "through": "2.3.8"
+ }
+ },
+ "pbkdf2": {
+ "version": "3.0.14",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/pbkdf2/-/pbkdf2-3.0.14.tgz",
+ "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==",
+ "dev": true,
+ "requires": {
+ "create-hash": "1.1.3",
+ "create-hmac": "1.1.6",
+ "ripemd160": "2.0.1",
+ "safe-buffer": "5.1.1",
+ "sha.js": "2.4.9"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "2.0.4"
+ }
+ },
+ "pkg-dir": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/pkg-dir/-/pkg-dir-2.0.0.tgz",
+ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+ "dev": true,
+ "requires": {
+ "find-up": "2.1.0"
+ }
+ },
+ "pluralize": {
+ "version": "7.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/pluralize/-/pluralize-7.0.0.tgz",
+ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
+ "dev": true
+ },
+ "portfinder": {
+ "version": "1.0.13",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/portfinder/-/portfinder-1.0.13.tgz",
+ "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "debug": "2.6.9",
+ "mkdirp": "0.5.1"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ }
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.3.2",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-calc": {
+ "version": "5.3.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-calc/-/postcss-calc-5.3.1.tgz",
+ "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=",
+ "dev": true,
+ "requires": {
+ "postcss": "5.2.18",
+ "postcss-message-helpers": "2.0.0",
+ "reduce-css-calc": "1.3.0"
+ }
+ },
+ "postcss-colormin": {
+ "version": "2.2.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-colormin/-/postcss-colormin-2.2.2.tgz",
+ "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=",
+ "dev": true,
+ "requires": {
+ "colormin": "1.1.2",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
+ },
+ "postcss-convert-values": {
+ "version": "2.6.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz",
+ "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=",
+ "dev": true,
+ "requires": {
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
+ },
+ "postcss-discard-comments": {
+ "version": "2.0.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz",
+ "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=",
+ "dev": true,
+ "requires": {
+ "postcss": "5.2.18"
+ }
+ },
+ "postcss-discard-duplicates": {
+ "version": "2.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz",
+ "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=",
+ "dev": true,
+ "requires": {
+ "postcss": "5.2.18"
+ }
+ },
+ "postcss-discard-empty": {
+ "version": "2.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz",
+ "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=",
+ "dev": true,
+ "requires": {
+ "postcss": "5.2.18"
+ }
+ },
+ "postcss-discard-overridden": {
+ "version": "0.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz",
+ "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=",
+ "dev": true,
+ "requires": {
+ "postcss": "5.2.18"
+ }
+ },
+ "postcss-discard-unused": {
+ "version": "2.2.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz",
+ "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=",
+ "dev": true,
+ "requires": {
+ "postcss": "5.2.18",
+ "uniqs": "2.0.0"
+ }
+ },
+ "postcss-filter-plugins": {
+ "version": "2.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz",
+ "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=",
+ "dev": true,
+ "requires": {
+ "postcss": "5.2.18",
+ "uniqid": "4.1.1"
+ }
+ },
+ "postcss-merge-idents": {
+ "version": "2.1.7",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz",
+ "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=",
+ "dev": true,
+ "requires": {
+ "has": "1.0.1",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
+ },
+ "postcss-merge-longhand": {
+ "version": "2.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz",
+ "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=",
+ "dev": true,
+ "requires": {
+ "postcss": "5.2.18"
+ }
+ },
+ "postcss-merge-rules": {
+ "version": "2.1.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz",
+ "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=",
+ "dev": true,
+ "requires": {
+ "browserslist": "1.7.7",
+ "caniuse-api": "1.6.1",
+ "postcss": "5.2.18",
+ "postcss-selector-parser": "2.2.3",
+ "vendors": "1.0.1"
+ }
+ },
+ "postcss-message-helpers": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz",
+ "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=",
+ "dev": true
+ },
+ "postcss-minify-font-values": {
+ "version": "1.0.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz",
+ "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=",
+ "dev": true,
+ "requires": {
+ "object-assign": "4.1.1",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
+ },
+ "postcss-minify-gradients": {
+ "version": "1.0.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz",
+ "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=",
+ "dev": true,
+ "requires": {
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
+ },
+ "postcss-minify-params": {
+ "version": "1.2.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz",
+ "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "1.0.2",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0",
+ "uniqs": "2.0.0"
+ }
+ },
+ "postcss-minify-selectors": {
+ "version": "2.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz",
+ "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "1.0.2",
+ "has": "1.0.1",
+ "postcss": "5.2.18",
+ "postcss-selector-parser": "2.2.3"
+ }
+ },
+ "postcss-modules-extract-imports": {
+ "version": "1.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz",
+ "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=",
+ "dev": true,
+ "requires": {
+ "postcss": "6.0.13"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/chalk/-/chalk-2.2.0.tgz",
+ "integrity": "sha512-0BMM/2hG3ZaoPfR6F+h/oWpZtsh3b/s62TjSM6MGCJWEbJDN1acqCXvyhhZsDSVFklpebUoQ5O1kKC7lOzrn9g==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "6.0.13",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss/-/postcss-6.0.13.tgz",
+ "integrity": "sha512-nHsrD1PPTMSJDfU+osVsLtPkSP9YGeoOz4FDLN4r1DW4N5vqL1J+gACzTQHsfwIiWG/0/nV4yCzjTMo1zD8U1g==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.2.0",
+ "source-map": "0.6.1",
+ "supports-color": "4.5.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "postcss-modules-local-by-default": {
+ "version": "1.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz",
+ "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=",
+ "dev": true,
+ "requires": {
+ "css-selector-tokenizer": "0.7.0",
+ "postcss": "6.0.13"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/chalk/-/chalk-2.2.0.tgz",
+ "integrity": "sha512-0BMM/2hG3ZaoPfR6F+h/oWpZtsh3b/s62TjSM6MGCJWEbJDN1acqCXvyhhZsDSVFklpebUoQ5O1kKC7lOzrn9g==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "6.0.13",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss/-/postcss-6.0.13.tgz",
+ "integrity": "sha512-nHsrD1PPTMSJDfU+osVsLtPkSP9YGeoOz4FDLN4r1DW4N5vqL1J+gACzTQHsfwIiWG/0/nV4yCzjTMo1zD8U1g==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.2.0",
+ "source-map": "0.6.1",
+ "supports-color": "4.5.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "postcss-modules-scope": {
+ "version": "1.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz",
+ "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=",
+ "dev": true,
+ "requires": {
+ "css-selector-tokenizer": "0.7.0",
+ "postcss": "6.0.13"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/chalk/-/chalk-2.2.0.tgz",
+ "integrity": "sha512-0BMM/2hG3ZaoPfR6F+h/oWpZtsh3b/s62TjSM6MGCJWEbJDN1acqCXvyhhZsDSVFklpebUoQ5O1kKC7lOzrn9g==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "6.0.13",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss/-/postcss-6.0.13.tgz",
+ "integrity": "sha512-nHsrD1PPTMSJDfU+osVsLtPkSP9YGeoOz4FDLN4r1DW4N5vqL1J+gACzTQHsfwIiWG/0/nV4yCzjTMo1zD8U1g==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.2.0",
+ "source-map": "0.6.1",
+ "supports-color": "4.5.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "postcss-modules-values": {
+ "version": "1.3.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz",
+ "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=",
+ "dev": true,
+ "requires": {
+ "icss-replace-symbols": "1.1.0",
+ "postcss": "6.0.13"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/chalk/-/chalk-2.2.0.tgz",
+ "integrity": "sha512-0BMM/2hG3ZaoPfR6F+h/oWpZtsh3b/s62TjSM6MGCJWEbJDN1acqCXvyhhZsDSVFklpebUoQ5O1kKC7lOzrn9g==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "6.0.13",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss/-/postcss-6.0.13.tgz",
+ "integrity": "sha512-nHsrD1PPTMSJDfU+osVsLtPkSP9YGeoOz4FDLN4r1DW4N5vqL1J+gACzTQHsfwIiWG/0/nV4yCzjTMo1zD8U1g==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.2.0",
+ "source-map": "0.6.1",
+ "supports-color": "4.5.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "postcss-normalize-charset": {
+ "version": "1.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz",
+ "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=",
+ "dev": true,
+ "requires": {
+ "postcss": "5.2.18"
+ }
+ },
+ "postcss-normalize-url": {
+ "version": "3.0.8",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz",
+ "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=",
+ "dev": true,
+ "requires": {
+ "is-absolute-url": "2.1.0",
+ "normalize-url": "1.9.1",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
+ },
+ "postcss-ordered-values": {
+ "version": "2.2.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz",
+ "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=",
+ "dev": true,
+ "requires": {
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
+ },
+ "postcss-reduce-idents": {
+ "version": "2.4.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz",
+ "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=",
+ "dev": true,
+ "requires": {
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
+ },
+ "postcss-reduce-initial": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz",
+ "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=",
+ "dev": true,
+ "requires": {
+ "postcss": "5.2.18"
+ }
+ },
+ "postcss-reduce-transforms": {
+ "version": "1.0.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz",
+ "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=",
+ "dev": true,
+ "requires": {
+ "has": "1.0.1",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "2.2.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz",
+ "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=",
+ "dev": true,
+ "requires": {
+ "flatten": "1.0.2",
+ "indexes-of": "1.0.1",
+ "uniq": "1.0.1"
+ }
+ },
+ "postcss-svgo": {
+ "version": "2.1.6",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-svgo/-/postcss-svgo-2.1.6.tgz",
+ "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=",
+ "dev": true,
+ "requires": {
+ "is-svg": "2.1.0",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0",
+ "svgo": "0.7.2"
+ }
+ },
+ "postcss-unique-selectors": {
+ "version": "2.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz",
+ "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "1.0.2",
+ "postcss": "5.2.18",
+ "uniqs": "2.0.0"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz",
+ "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=",
+ "dev": true
+ },
+ "postcss-zindex": {
+ "version": "2.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/postcss-zindex/-/postcss-zindex-2.2.0.tgz",
+ "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=",
+ "dev": true,
+ "requires": {
+ "has": "1.0.1",
+ "postcss": "5.2.18",
+ "uniqs": "2.0.0"
+ }
+ },
+ "prefix-matches": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/prefix-matches/-/prefix-matches-1.0.1.tgz",
+ "integrity": "sha1-AuNM4n8zr0jmi7/OKqwqAEvCt2w=",
+ "dev": true,
+ "requires": {
+ "is-object": "1.0.1",
+ "starts-with": "1.0.2"
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "prepend-http": {
+ "version": "1.0.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/prepend-http/-/prepend-http-1.0.4.tgz",
+ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
+ "dev": true
+ },
+ "preserve": {
+ "version": "0.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/preserve/-/preserve-0.2.0.tgz",
+ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
+ "dev": true
+ },
+ "pretty-error": {
+ "version": "2.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/pretty-error/-/pretty-error-2.1.1.tgz",
+ "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=",
+ "dev": true,
+ "requires": {
+ "renderkid": "2.0.1",
+ "utila": "0.4.0"
+ }
+ },
+ "prismjs": {
+ "version": "1.6.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/prismjs/-/prismjs-1.6.0.tgz",
+ "integrity": "sha1-EY2V+3pm26InLjQ7NF9SNmWds2U=",
+ "dev": true,
+ "requires": {
+ "clipboard": "1.7.1"
+ }
+ },
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "dev": true
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "progress": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/progress/-/progress-2.0.0.tgz",
+ "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=",
+ "dev": true
+ },
+ "promise": {
+ "version": "7.3.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/promise/-/promise-7.3.1.tgz",
+ "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
+ "requires": {
+ "asap": "2.0.6"
+ }
+ },
+ "promised-io": {
+ "version": "0.3.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/promised-io/-/promised-io-0.3.5.tgz",
+ "integrity": "sha1-StIXuzZYvKrplGsXqGaOzYUeE1Y=",
+ "dev": true
+ },
+ "prop-types": {
+ "version": "15.6.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/prop-types/-/prop-types-15.6.0.tgz",
+ "integrity": "sha1-zq8IMCL8RrSjX2nhPvda7Q1jmFY=",
+ "requires": {
+ "fbjs": "0.8.16",
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1"
+ }
+ },
+ "proxy-addr": {
+ "version": "2.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/proxy-addr/-/proxy-addr-2.0.2.tgz",
+ "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=",
+ "dev": true,
+ "requires": {
+ "forwarded": "0.1.2",
+ "ipaddr.js": "1.5.2"
+ }
+ },
+ "prr": {
+ "version": "0.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/prr/-/prr-0.0.0.tgz",
+ "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=",
+ "dev": true
+ },
+ "ps-tree": {
+ "version": "1.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ps-tree/-/ps-tree-1.1.0.tgz",
+ "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=",
+ "dev": true,
+ "requires": {
+ "event-stream": "3.3.4"
+ }
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "public-encrypt": {
+ "version": "4.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/public-encrypt/-/public-encrypt-4.0.0.tgz",
+ "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "browserify-rsa": "4.0.1",
+ "create-hash": "1.1.3",
+ "parse-asn1": "5.1.0",
+ "randombytes": "2.0.5"
+ }
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/q/-/q-1.5.1.tgz",
+ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.3.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/qs/-/qs-6.3.2.tgz",
+ "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=",
+ "dev": true
+ },
+ "query-string": {
+ "version": "4.3.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/query-string/-/query-string-4.3.4.tgz",
+ "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
+ "dev": true,
+ "requires": {
+ "object-assign": "4.1.1",
+ "strict-uri-encode": "1.1.0"
+ }
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+ "dev": true
+ },
+ "querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
+ "dev": true
+ },
+ "querystringify": {
+ "version": "0.0.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/querystringify/-/querystringify-0.0.4.tgz",
+ "integrity": "sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw=",
+ "dev": true
+ },
+ "randomatic": {
+ "version": "1.1.7",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/randomatic/-/randomatic-1.1.7.tgz",
+ "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.5"
+ }
+ }
+ }
+ },
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.5"
+ }
+ }
+ }
+ },
+ "randombytes": {
+ "version": "2.0.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/randombytes/-/randombytes-2.0.5.tgz",
+ "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "range-parser": {
+ "version": "1.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/range-parser/-/range-parser-1.2.0.tgz",
+ "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=",
+ "dev": true
+ },
+ "raw-body": {
+ "version": "2.3.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/raw-body/-/raw-body-2.3.2.tgz",
+ "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=",
+ "dev": true,
+ "requires": {
+ "bytes": "3.0.0",
+ "http-errors": "1.6.2",
+ "iconv-lite": "0.4.19",
+ "unpipe": "1.0.0"
+ }
+ },
+ "react": {
+ "version": "15.6.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/react/-/react-15.6.2.tgz",
+ "integrity": "sha1-26BDSrQ5z+gvEI8PURZjkIF5qnI=",
+ "dev": true,
+ "requires": {
+ "create-react-class": "15.6.2",
+ "fbjs": "0.8.16",
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1",
+ "prop-types": "15.6.0"
+ }
+ },
+ "react-addons-shallow-compare": {
+ "version": "15.6.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/react-addons-shallow-compare/-/react-addons-shallow-compare-15.6.2.tgz",
+ "integrity": "sha1-GYoAuR/DdiPbZKKP0XtZa6NicC8=",
+ "dev": true,
+ "requires": {
+ "fbjs": "0.8.16",
+ "object-assign": "4.1.1"
+ }
+ },
+ "react-dom": {
+ "version": "15.6.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/react-dom/-/react-dom-15.6.2.tgz",
+ "integrity": "sha1-Qc+t9pO3V/rycIRDodH9WgK+9zA=",
+ "dev": true,
+ "requires": {
+ "fbjs": "0.8.16",
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1",
+ "prop-types": "15.6.0"
+ }
+ },
+ "react-gravatar": {
+ "version": "2.6.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/react-gravatar/-/react-gravatar-2.6.3.tgz",
+ "integrity": "sha1-VAfrash+gw4qNN63YNKkxATrHaw=",
+ "dev": true,
+ "requires": {
+ "is-retina": "1.0.3",
+ "md5": "2.2.1",
+ "query-string": "4.3.4"
+ }
+ },
+ "react-highlight-words": {
+ "version": "0.8.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/react-highlight-words/-/react-highlight-words-0.8.1.tgz",
+ "integrity": "sha512-HINIgtYtAImnNJ103K6dWJGfgiq9qiwyoii3VoT8Oar9pK7D+F9BRQ8SBdzP/mAo2sxOULK2RVm7EUmGKPlagA==",
+ "dev": true,
+ "requires": {
+ "highlight-words-core": "1.1.0",
+ "prop-types": "15.6.0"
+ }
+ },
+ "react-input-autosize": {
+ "version": "2.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/react-input-autosize/-/react-input-autosize-2.0.1.tgz",
+ "integrity": "sha1-6SGQSXtAJsJ4CtDy/XA8g1ugPjM=",
+ "requires": {
+ "create-react-class": "15.6.2",
+ "prop-types": "15.6.0"
+ }
+ },
+ "react-render-hook": {
+ "version": "0.1.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/react-render-hook/-/react-render-hook-0.1.4.tgz",
+ "integrity": "sha1-SB6/aAkZwD5xFC3c5An04QH5vsQ=",
+ "dev": true
+ },
+ "react-select": {
+ "version": "1.0.0-rc.10",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/react-select/-/react-select-1.0.0-rc.10.tgz",
+ "integrity": "sha1-8Tc0YlD5JVyXn7+iGGCJmSh3I1A=",
+ "dev": true,
+ "requires": {
+ "classnames": "2.2.5",
+ "prop-types": "15.6.0",
+ "react-input-autosize": "2.0.1"
+ }
+ },
+ "react-test-renderer": {
+ "version": "15.6.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/react-test-renderer/-/react-test-renderer-15.6.2.tgz",
+ "integrity": "sha1-0DM0NPwsQ4CSaWyncNpe1IA376g=",
+ "dev": true,
+ "requires": {
+ "fbjs": "0.8.16",
+ "object-assign": "4.1.1"
+ }
+ },
+ "react-virtualized": {
+ "version": "9.11.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/react-virtualized/-/react-virtualized-9.11.1.tgz",
+ "integrity": "sha512-pEmjCzazhVY84aNOfqLg+t5a9yvwzAE4OpLe3jby+Aakn0UHqxmxvPwFbmm0lhcPmoHbJ/Ihvd58QcIoWIziuQ==",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "classnames": "2.2.5",
+ "dom-helpers": "3.2.1",
+ "loose-envify": "1.3.1",
+ "prop-types": "15.6.0"
+ }
+ },
+ "react-virtualized-select": {
+ "version": "3.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/react-virtualized-select/-/react-virtualized-select-3.1.0.tgz",
+ "integrity": "sha512-OXW+8Me+bNNiQ79IYt3isGFxIbKKft2pFNv04SHp1tK8TTUuZb+KgBhxQf3YNZwlkQQnTcKfwYVAr7g9rGhIRg==",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "prop-types": "15.6.0",
+ "react-select": "1.0.0-rc.10",
+ "react-virtualized": "9.11.1"
+ }
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "1.1.0",
+ "normalize-package-data": "2.4.0",
+ "path-type": "1.1.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "dev": true,
+ "requires": {
+ "find-up": "1.1.2",
+ "read-pkg": "1.1.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "2.1.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "2.0.1"
+ }
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "readdirp": {
+ "version": "2.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/readdirp/-/readdirp-2.1.0.tgz",
+ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "minimatch": "3.0.4",
+ "readable-stream": "2.3.3",
+ "set-immediate-shim": "1.0.1"
+ }
+ },
+ "readline-sync": {
+ "version": "1.4.7",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/readline-sync/-/readline-sync-1.4.7.tgz",
+ "integrity": "sha1-ABv91MBhEMPAhMY798alYCIhPzA=",
+ "dev": true
+ },
+ "recast": {
+ "version": "0.11.23",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/recast/-/recast-0.11.23.tgz",
+ "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=",
+ "dev": true,
+ "requires": {
+ "ast-types": "0.9.6",
+ "esprima": "3.1.3",
+ "private": "0.1.8",
+ "source-map": "0.5.7"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ }
+ }
+ },
+ "redent": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "dev": true,
+ "requires": {
+ "indent-string": "2.1.0",
+ "strip-indent": "1.0.1"
+ }
+ },
+ "reduce-css-calc": {
+ "version": "1.3.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz",
+ "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "0.4.2",
+ "math-expression-evaluator": "1.2.17",
+ "reduce-function-call": "1.0.2"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.4.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
+ "dev": true
+ }
+ }
+ },
+ "reduce-function-call": {
+ "version": "1.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/reduce-function-call/-/reduce-function-call-1.0.2.tgz",
+ "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "0.4.2"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.4.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
+ "dev": true
+ }
+ }
+ },
+ "regenerate": {
+ "version": "1.3.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/regenerate/-/regenerate-1.3.3.tgz",
+ "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz",
+ "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==",
+ "dev": true
+ },
+ "regenerator-transform": {
+ "version": "0.10.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
+ "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "private": "0.1.8"
+ }
+ },
+ "regex-cache": {
+ "version": "0.4.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/regex-cache/-/regex-cache-0.4.4.tgz",
+ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
+ "dev": true,
+ "requires": {
+ "is-equal-shallow": "0.1.3"
+ }
+ },
+ "regexpu-core": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/regexpu-core/-/regexpu-core-2.0.0.tgz",
+ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
+ "dev": true,
+ "requires": {
+ "regenerate": "1.3.3",
+ "regjsgen": "0.2.0",
+ "regjsparser": "0.1.5"
+ }
+ },
+ "regjsgen": {
+ "version": "0.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/regjsgen/-/regjsgen-0.2.0.tgz",
+ "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=",
+ "dev": true
+ },
+ "regjsparser": {
+ "version": "0.1.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/regjsparser/-/regjsparser-0.1.5.tgz",
+ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
+ "dev": true,
+ "requires": {
+ "jsesc": "0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+ "dev": true
+ }
+ }
+ },
+ "relateurl": {
+ "version": "0.2.7",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/relateurl/-/relateurl-0.2.7.tgz",
+ "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=",
+ "dev": true
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
+ },
+ "renderkid": {
+ "version": "2.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/renderkid/-/renderkid-2.0.1.tgz",
+ "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=",
+ "dev": true,
+ "requires": {
+ "css-select": "1.2.0",
+ "dom-converter": "0.1.4",
+ "htmlparser2": "3.3.0",
+ "strip-ansi": "3.0.1",
+ "utila": "0.3.3"
+ },
+ "dependencies": {
+ "utila": {
+ "version": "0.3.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/utila/-/utila-0.3.3.tgz",
+ "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=",
+ "dev": true
+ }
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "request": {
+ "version": "2.79.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/request/-/request-2.79.0.tgz",
+ "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "0.6.0",
+ "aws4": "1.6.0",
+ "caseless": "0.11.0",
+ "combined-stream": "1.0.5",
+ "extend": "3.0.1",
+ "forever-agent": "0.6.1",
+ "form-data": "2.1.4",
+ "har-validator": "2.0.6",
+ "hawk": "3.1.3",
+ "http-signature": "1.1.1",
+ "is-typedarray": "1.0.0",
+ "isstream": "0.1.2",
+ "json-stringify-safe": "5.0.1",
+ "mime-types": "2.1.17",
+ "oauth-sign": "0.8.2",
+ "qs": "6.3.2",
+ "stringstream": "0.0.5",
+ "tough-cookie": "2.3.3",
+ "tunnel-agent": "0.4.3",
+ "uuid": "3.1.0"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+ "dev": true
+ },
+ "require-uncached": {
+ "version": "1.0.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/require-uncached/-/require-uncached-1.0.3.tgz",
+ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+ "dev": true,
+ "requires": {
+ "caller-path": "0.1.0",
+ "resolve-from": "1.0.1"
+ }
+ },
+ "requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.1.7",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/resolve/-/resolve-1.1.7.tgz",
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
+ "dev": true
+ },
+ "resolve-cwd": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
+ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
+ "dev": true,
+ "requires": {
+ "resolve-from": "3.0.0"
+ },
+ "dependencies": {
+ "resolve-from": {
+ "version": "3.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+ "dev": true
+ }
+ }
+ },
+ "resolve-from": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/resolve-from/-/resolve-from-1.0.1.tgz",
+ "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "2.0.1",
+ "signal-exit": "3.0.2"
+ }
+ },
+ "right-align": {
+ "version": "0.1.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/right-align/-/right-align-0.1.3.tgz",
+ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+ "dev": true,
+ "requires": {
+ "align-text": "0.1.4"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2"
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ripemd160/-/ripemd160-2.0.1.tgz",
+ "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=",
+ "dev": true,
+ "requires": {
+ "hash-base": "2.0.2",
+ "inherits": "2.0.3"
+ }
+ },
+ "rollup": {
+ "version": "0.49.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/rollup/-/rollup-0.49.3.tgz",
+ "integrity": "sha512-n/vHRX4GhMIyGZEQRANcSFVtvz99bSRbNMuoC33ar9f4CViqffyF9WklLb2mxIQ6I/uFf7wDEpc66bXBFE7FvA==",
+ "dev": true
+ },
+ "rollup-plugin-babel": {
+ "version": "3.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/rollup-plugin-babel/-/rollup-plugin-babel-3.0.2.tgz",
+ "integrity": "sha512-ALGPBFtwJZcYHsNPM6RGJlEncTzAARPvZOGjNPZgDe5hS5t6sJGjiOWibEFVEz5LQN7S7spvCBILaS4N1Cql2w==",
+ "dev": true,
+ "requires": {
+ "rollup-pluginutils": "1.5.2"
+ }
+ },
+ "rollup-plugin-commonjs": {
+ "version": "8.2.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/rollup-plugin-commonjs/-/rollup-plugin-commonjs-8.2.4.tgz",
+ "integrity": "sha512-M1sSKg465w41VJvF0jzuc00svaG1BKSgUzrp0OQSPo/8h2l+m2vP5gqSFPr5nRbFFGhWZxnIWL7ZxQlL7AWIgQ==",
+ "dev": true,
+ "requires": {
+ "acorn": "5.1.2",
+ "estree-walker": "0.5.0",
+ "magic-string": "0.22.4",
+ "resolve": "1.4.0",
+ "rollup-pluginutils": "2.0.1"
+ },
+ "dependencies": {
+ "estree-walker": {
+ "version": "0.5.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/estree-walker/-/estree-walker-0.5.0.tgz",
+ "integrity": "sha512-/bEAy+yKAZQrEWUhGmS3H9XpGqSDBtRzX0I2PgMw9kA2n1jN22uV5B5p7MFdZdvWdXCRJztXAfx6ZeRfgkEETg==",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.4.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/resolve/-/resolve-1.4.0.tgz",
+ "integrity": "sha512-aW7sVKPufyHqOmyyLzg/J+8606v5nevBgaliIlV7nUpVMsDnoBGV/cbSLNjZAg9q0Cfd/+easKVKQ8vOu8fn1Q==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "rollup-pluginutils": {
+ "version": "2.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/rollup-pluginutils/-/rollup-pluginutils-2.0.1.tgz",
+ "integrity": "sha1-fslbNXP2VDpGpkYb2afFRFJdD8A=",
+ "dev": true,
+ "requires": {
+ "estree-walker": "0.3.1",
+ "micromatch": "2.3.11"
+ },
+ "dependencies": {
+ "estree-walker": {
+ "version": "0.3.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/estree-walker/-/estree-walker-0.3.1.tgz",
+ "integrity": "sha1-5rGlHPcpJSTnI3wxLl/mZgwc4ao=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "rollup-plugin-node-resolve": {
+ "version": "3.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.0.0.tgz",
+ "integrity": "sha1-i4l8TDAw1QASd7BRSyXSygloPuA=",
+ "dev": true,
+ "requires": {
+ "browser-resolve": "1.11.2",
+ "builtin-modules": "1.1.1",
+ "is-module": "1.0.0",
+ "resolve": "1.1.7"
+ }
+ },
+ "rollup-plugin-uglify": {
+ "version": "2.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/rollup-plugin-uglify/-/rollup-plugin-uglify-2.0.1.tgz",
+ "integrity": "sha1-Z7N60e/a+9g69MNrQMGJ7khmyWk=",
+ "dev": true,
+ "requires": {
+ "uglify-js": "3.1.4"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "3.1.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/uglify-js/-/uglify-js-3.1.4.tgz",
+ "integrity": "sha512-DcbkPg11Lw2lAWpwCmQDX+qoR4JiII6ypsQmF6tscZtlxGPFAmSRUGuMoVT3/0EHqypVik/TpkH4ITiMJeQqQA==",
+ "dev": true,
+ "requires": {
+ "commander": "2.11.0",
+ "source-map": "0.6.1"
+ }
+ }
+ }
+ },
+ "rollup-pluginutils": {
+ "version": "1.5.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz",
+ "integrity": "sha1-HhVud4+UtyVb+hs9AXi+j1xVJAg=",
+ "dev": true,
+ "requires": {
+ "estree-walker": "0.2.1",
+ "minimatch": "3.0.4"
+ }
+ },
+ "run-async": {
+ "version": "2.3.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/run-async/-/run-async-2.3.0.tgz",
+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+ "dev": true,
+ "requires": {
+ "is-promise": "2.1.0"
+ }
+ },
+ "rx": {
+ "version": "2.3.24",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/rx/-/rx-2.3.24.tgz",
+ "integrity": "sha1-FPlQpCF9fjXapxu8vljv9o6ksrc=",
+ "dev": true
+ },
+ "rx-lite": {
+ "version": "4.0.8",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/rx-lite/-/rx-lite-4.0.8.tgz",
+ "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
+ "dev": true
+ },
+ "rx-lite-aggregates": {
+ "version": "4.0.8",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
+ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
+ "dev": true,
+ "requires": {
+ "rx-lite": "4.0.8"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
+ "dev": true
+ },
+ "samsam": {
+ "version": "1.3.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/samsam/-/samsam-1.3.0.tgz",
+ "integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg==",
+ "dev": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+ "dev": true
+ },
+ "schema-utils": {
+ "version": "0.3.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/schema-utils/-/schema-utils-0.3.0.tgz",
+ "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=",
+ "dev": true,
+ "requires": {
+ "ajv": "5.2.3"
+ }
+ },
+ "select": {
+ "version": "1.1.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/select/-/select-1.1.2.tgz",
+ "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=",
+ "dev": true,
+ "optional": true
+ },
+ "select-hose": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/select-hose/-/select-hose-2.0.0.tgz",
+ "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
+ "dev": true
+ },
+ "selfsigned": {
+ "version": "1.10.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/selfsigned/-/selfsigned-1.10.1.tgz",
+ "integrity": "sha1-v4y3uDJWxFUeMTR8YxF3jbme7FI=",
+ "dev": true,
+ "requires": {
+ "node-forge": "0.6.33"
+ }
+ },
+ "semver": {
+ "version": "5.4.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/semver/-/semver-5.4.1.tgz",
+ "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==",
+ "dev": true
+ },
+ "send": {
+ "version": "0.16.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/send/-/send-0.16.1.tgz",
+ "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "1.1.1",
+ "destroy": "1.0.4",
+ "encodeurl": "1.0.1",
+ "escape-html": "1.0.3",
+ "etag": "1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "1.6.2",
+ "mime": "1.4.1",
+ "ms": "2.0.0",
+ "on-finished": "2.3.0",
+ "range-parser": "1.2.0",
+ "statuses": "1.3.1"
+ }
+ },
+ "serve-index": {
+ "version": "1.9.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/serve-index/-/serve-index-1.9.1.tgz",
+ "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
+ "dev": true,
+ "requires": {
+ "accepts": "1.3.4",
+ "batch": "0.6.1",
+ "debug": "2.6.9",
+ "escape-html": "1.0.3",
+ "http-errors": "1.6.2",
+ "mime-types": "2.1.17",
+ "parseurl": "1.3.2"
+ }
+ },
+ "serve-static": {
+ "version": "1.13.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/serve-static/-/serve-static-1.13.1.tgz",
+ "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==",
+ "dev": true,
+ "requires": {
+ "encodeurl": "1.0.1",
+ "escape-html": "1.0.3",
+ "parseurl": "1.3.2",
+ "send": "0.16.1"
+ }
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
+ },
+ "set-immediate-shim": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
+ "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
+ "dev": true
+ },
+ "setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
+ },
+ "setprototypeof": {
+ "version": "1.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/setprototypeof/-/setprototypeof-1.1.0.tgz",
+ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
+ "dev": true
+ },
+ "sha.js": {
+ "version": "2.4.9",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/sha.js/-/sha.js-2.4.9.tgz",
+ "integrity": "sha512-G8zektVqbiPHrylgew9Zg1VRB1L/DtXNUVAM6q4QLy8NE3qtHlFXTf8VLL4k1Yl6c7NMjtZUTdXV+X44nFaT6A==",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ },
+ "sinon": {
+ "version": "3.3.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/sinon/-/sinon-3.3.0.tgz",
+ "integrity": "sha512-/flfGfIxIRXSvZBHJzIf3iAyGYkmMQq6SQjA0cx9SOuVuq+4ZPPO4LJtH1Ce0Lznax1KSG1U6Dad85wIcSW19w==",
+ "dev": true,
+ "requires": {
+ "build": "0.1.4",
+ "diff": "3.2.0",
+ "formatio": "1.2.0",
+ "lodash.get": "4.4.2",
+ "lolex": "2.1.3",
+ "native-promise-only": "0.8.1",
+ "nise": "1.1.1",
+ "path-to-regexp": "1.7.0",
+ "samsam": "1.3.0",
+ "text-encoding": "0.6.4",
+ "type-detect": "4.0.3"
+ }
+ },
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/slice-ansi/-/slice-ansi-1.0.0.tgz",
+ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0"
+ }
+ },
+ "sntp": {
+ "version": "1.0.9",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/sntp/-/sntp-1.0.9.tgz",
+ "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
+ "dev": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "sockjs": {
+ "version": "0.3.18",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/sockjs/-/sockjs-0.3.18.tgz",
+ "integrity": "sha1-2bKJMWyn33dZXvKZ4HXw+TfrQgc=",
+ "dev": true,
+ "requires": {
+ "faye-websocket": "0.10.0",
+ "uuid": "2.0.3"
+ },
+ "dependencies": {
+ "uuid": {
+ "version": "2.0.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/uuid/-/uuid-2.0.3.tgz",
+ "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
+ "dev": true
+ }
+ }
+ },
+ "sockjs-client": {
+ "version": "1.1.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/sockjs-client/-/sockjs-client-1.1.4.tgz",
+ "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "eventsource": "0.1.6",
+ "faye-websocket": "0.11.1",
+ "inherits": "2.0.3",
+ "json3": "3.3.2",
+ "url-parse": "1.1.9"
+ },
+ "dependencies": {
+ "faye-websocket": {
+ "version": "0.11.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/faye-websocket/-/faye-websocket-0.11.1.tgz",
+ "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=",
+ "dev": true,
+ "requires": {
+ "websocket-driver": "0.7.0"
+ }
+ }
+ }
+ },
+ "sort-keys": {
+ "version": "1.1.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/sort-keys/-/sort-keys-1.1.2.tgz",
+ "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
+ "dev": true,
+ "requires": {
+ "is-plain-obj": "1.1.0"
+ }
+ },
+ "source-list-map": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/source-list-map/-/source-list-map-2.0.0.tgz",
+ "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "source-map-support": {
+ "version": "0.4.18",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/source-map-support/-/source-map-support-0.4.18.tgz",
+ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
+ "dev": true,
+ "requires": {
+ "source-map": "0.5.7"
+ }
+ },
+ "spawn-command": {
+ "version": "0.0.2-1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/spawn-command/-/spawn-command-0.0.2-1.tgz",
+ "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=",
+ "dev": true
+ },
+ "spawn-command-with-kill": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/spawn-command-with-kill/-/spawn-command-with-kill-1.0.0.tgz",
+ "integrity": "sha1-gDrXny9W5E3ZJhg3aKrC+ux9DOY=",
+ "dev": true,
+ "requires": {
+ "ps-tree": "1.1.0",
+ "spawn-command": "0.0.2-1"
+ }
+ },
+ "spdx-correct": {
+ "version": "1.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/spdx-correct/-/spdx-correct-1.0.2.tgz",
+ "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=",
+ "dev": true,
+ "requires": {
+ "spdx-license-ids": "1.2.2"
+ }
+ },
+ "spdx-expression-parse": {
+ "version": "1.0.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz",
+ "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=",
+ "dev": true
+ },
+ "spdx-license-ids": {
+ "version": "1.2.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz",
+ "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=",
+ "dev": true
+ },
+ "spdy": {
+ "version": "3.4.7",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/spdy/-/spdy-3.4.7.tgz",
+ "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "handle-thing": "1.2.5",
+ "http-deceiver": "1.2.7",
+ "safe-buffer": "5.1.1",
+ "select-hose": "2.0.0",
+ "spdy-transport": "2.0.20"
+ }
+ },
+ "spdy-transport": {
+ "version": "2.0.20",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/spdy-transport/-/spdy-transport-2.0.20.tgz",
+ "integrity": "sha1-c15yBUxIayNU/onnAiVgBKOazk0=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "detect-node": "2.0.3",
+ "hpack.js": "2.1.6",
+ "obuf": "1.1.1",
+ "readable-stream": "2.3.3",
+ "safe-buffer": "5.1.1",
+ "wbuf": "1.7.2"
+ }
+ },
+ "split": {
+ "version": "0.3.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/split/-/split-0.3.3.tgz",
+ "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=",
+ "dev": true,
+ "requires": {
+ "through": "2.3.8"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "sshpk": {
+ "version": "1.13.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/sshpk/-/sshpk-1.13.1.tgz",
+ "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=",
+ "dev": true,
+ "requires": {
+ "asn1": "0.2.3",
+ "assert-plus": "1.0.0",
+ "bcrypt-pbkdf": "1.0.1",
+ "dashdash": "1.14.1",
+ "ecc-jsbn": "0.1.1",
+ "getpass": "0.1.7",
+ "jsbn": "0.1.1",
+ "tweetnacl": "0.14.5"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "starts-with": {
+ "version": "1.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/starts-with/-/starts-with-1.0.2.tgz",
+ "integrity": "sha1-Fnk6cp2J1M89T7LtovkIrjV/GW8=",
+ "dev": true
+ },
+ "statuses": {
+ "version": "1.3.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/statuses/-/statuses-1.3.1.tgz",
+ "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
+ "dev": true
+ },
+ "stream-browserify": {
+ "version": "2.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/stream-browserify/-/stream-browserify-2.0.1.tgz",
+ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "stream-combiner": {
+ "version": "0.0.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/stream-combiner/-/stream-combiner-0.0.4.tgz",
+ "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=",
+ "dev": true,
+ "requires": {
+ "duplexer": "0.1.1"
+ }
+ },
+ "stream-http": {
+ "version": "2.7.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/stream-http/-/stream-http-2.7.2.tgz",
+ "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==",
+ "dev": true,
+ "requires": {
+ "builtin-status-codes": "3.0.0",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3",
+ "to-arraybuffer": "1.0.1",
+ "xtend": "4.0.1"
+ }
+ },
+ "strict-uri-encode": {
+ "version": "1.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
+ "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0",
+ "strip-ansi": "4.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "3.0.0"
+ }
+ }
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "stringstream": {
+ "version": "0.0.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/stringstream/-/stringstream-0.0.5.tgz",
+ "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "0.2.1"
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "dev": true
+ },
+ "strip-indent": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "4.0.1"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true
+ },
+ "style-loader": {
+ "version": "0.18.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/style-loader/-/style-loader-0.18.2.tgz",
+ "integrity": "sha512-WPpJPZGUxWYHWIUMNNOYqql7zh85zGmr84FdTVWq52WTIkqlW9xSxD3QYWi/T31cqn9UNSsietVEgGn2aaSCzw==",
+ "dev": true,
+ "requires": {
+ "loader-utils": "1.1.0",
+ "schema-utils": "0.3.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "svgo": {
+ "version": "0.7.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/svgo/-/svgo-0.7.2.tgz",
+ "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=",
+ "dev": true,
+ "requires": {
+ "coa": "1.0.4",
+ "colors": "1.1.2",
+ "csso": "2.3.2",
+ "js-yaml": "3.7.0",
+ "mkdirp": "0.5.1",
+ "sax": "1.2.4",
+ "whet.extend": "0.9.9"
+ },
+ "dependencies": {
+ "js-yaml": {
+ "version": "3.7.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/js-yaml/-/js-yaml-3.7.0.tgz",
+ "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=",
+ "dev": true,
+ "requires": {
+ "argparse": "1.0.9",
+ "esprima": "2.7.3"
+ }
+ }
+ }
+ },
+ "symbol-tree": {
+ "version": "3.2.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/symbol-tree/-/symbol-tree-3.2.2.tgz",
+ "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=",
+ "dev": true
+ },
+ "table": {
+ "version": "4.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/table/-/table-4.0.2.tgz",
+ "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
+ "dev": true,
+ "requires": {
+ "ajv": "5.2.3",
+ "ajv-keywords": "2.1.0",
+ "chalk": "2.2.0",
+ "lodash": "4.17.4",
+ "slice-ansi": "1.0.0",
+ "string-width": "2.1.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/chalk/-/chalk-2.2.0.tgz",
+ "integrity": "sha512-0BMM/2hG3ZaoPfR6F+h/oWpZtsh3b/s62TjSM6MGCJWEbJDN1acqCXvyhhZsDSVFklpebUoQ5O1kKC7lOzrn9g==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "tapable": {
+ "version": "0.2.8",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/tapable/-/tapable-0.2.8.tgz",
+ "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=",
+ "dev": true
+ },
+ "temp-write": {
+ "version": "2.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/temp-write/-/temp-write-2.1.0.tgz",
+ "integrity": "sha1-WYkJGODvCdVIqqNC9L00CdhATpY=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "mkdirp": "0.5.1",
+ "os-tmpdir": "1.0.2",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1",
+ "uuid": "2.0.3"
+ },
+ "dependencies": {
+ "uuid": {
+ "version": "2.0.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/uuid/-/uuid-2.0.3.tgz",
+ "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
+ "dev": true
+ }
+ }
+ },
+ "test-exclude": {
+ "version": "4.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/test-exclude/-/test-exclude-4.1.1.tgz",
+ "integrity": "sha512-35+Asrsk3XHJDBgf/VRFexPgh3UyETv8IAn/LRTiZjVy6rjPVqdEk8dJcJYBzl1w0XCJM48lvTy8SfEsCWS4nA==",
+ "dev": true,
+ "requires": {
+ "arrify": "1.0.1",
+ "micromatch": "2.3.11",
+ "object-assign": "4.1.1",
+ "read-pkg-up": "1.0.1",
+ "require-main-filename": "1.0.1"
+ }
+ },
+ "text-encoding": {
+ "version": "0.6.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/text-encoding/-/text-encoding-0.6.4.tgz",
+ "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=",
+ "dev": true
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "thunky": {
+ "version": "0.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/thunky/-/thunky-0.1.0.tgz",
+ "integrity": "sha1-vzAUaCTituZ7Dy16Ssi+smkIaE4=",
+ "dev": true
+ },
+ "time-stamp": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/time-stamp/-/time-stamp-2.0.0.tgz",
+ "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=",
+ "dev": true
+ },
+ "timers-browserify": {
+ "version": "2.0.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/timers-browserify/-/timers-browserify-2.0.4.tgz",
+ "integrity": "sha512-uZYhyU3EX8O7HQP+J9fTVYwsq90Vr68xPEFo7yrVImIxYvHgukBEgOB/SgGoorWVTzGM/3Z+wUNnboA4M8jWrg==",
+ "dev": true,
+ "requires": {
+ "setimmediate": "1.0.5"
+ }
+ },
+ "timespan": {
+ "version": "2.3.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/timespan/-/timespan-2.3.0.tgz",
+ "integrity": "sha1-SQLOBAvRPYRcj1myfp1ZutbzmSk=",
+ "dev": true
+ },
+ "tiny-emitter": {
+ "version": "2.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/tiny-emitter/-/tiny-emitter-2.0.2.tgz",
+ "integrity": "sha512-2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow==",
+ "dev": true,
+ "optional": true
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "tmpl": {
+ "version": "1.0.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/tmpl/-/tmpl-1.0.4.tgz",
+ "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=",
+ "dev": true
+ },
+ "to-arraybuffer": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
+ "dev": true
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "toposort": {
+ "version": "1.0.6",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/toposort/-/toposort-1.0.6.tgz",
+ "integrity": "sha1-wxdI5V0hDv/AD9zcfW5o19e7nOw=",
+ "dev": true
+ },
+ "tough-cookie": {
+ "version": "2.3.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/tough-cookie/-/tough-cookie-2.3.3.tgz",
+ "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=",
+ "dev": true,
+ "requires": {
+ "punycode": "1.4.1"
+ }
+ },
+ "tr46": {
+ "version": "0.0.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=",
+ "dev": true
+ },
+ "tree-kill": {
+ "version": "1.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/tree-kill/-/tree-kill-1.2.0.tgz",
+ "integrity": "sha512-DlX6dR0lOIRDFxI0mjL9IYg6OTncLm/Zt+JiBhE5OlFcAR8yc9S7FFXU9so0oda47frdM/JFsk7UjNt9vscKcg==",
+ "dev": true
+ },
+ "trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "tryit": {
+ "version": "1.0.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/tryit/-/tryit-1.0.3.tgz",
+ "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=",
+ "dev": true
+ },
+ "tty-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/tty-browserify/-/tty-browserify-0.0.0.tgz",
+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
+ "dev": true
+ },
+ "tunnel-agent": {
+ "version": "0.4.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
+ "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=",
+ "dev": true
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true,
+ "optional": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "type-detect": {
+ "version": "4.0.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/type-detect/-/type-detect-4.0.3.tgz",
+ "integrity": "sha1-Dj8mcLRAmbC0bChNE2p+9Jx0wuo=",
+ "dev": true
+ },
+ "type-is": {
+ "version": "1.6.15",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/type-is/-/type-is-1.6.15.tgz",
+ "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=",
+ "dev": true,
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "2.1.17"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "ua-parser-js": {
+ "version": "0.7.17",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/ua-parser-js/-/ua-parser-js-0.7.17.tgz",
+ "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g=="
+ },
+ "uglify-es": {
+ "version": "3.1.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/uglify-es/-/uglify-es-3.1.3.tgz",
+ "integrity": "sha512-Nuo5gkv/Q6PmLa+Ui2LvK+87YdMAcuXfRIWF0uVfkHVSfpT3Ue0euCSu4t0b8xv4Bt05lmXUT8bLI9OmnyPj8A==",
+ "dev": true,
+ "requires": {
+ "commander": "2.11.0",
+ "source-map": "0.5.7"
+ }
+ },
+ "uglify-to-browserify": {
+ "version": "1.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+ "dev": true,
+ "optional": true
+ },
+ "uglifyjs-webpack-plugin": {
+ "version": "0.4.6",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz",
+ "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=",
+ "dev": true,
+ "requires": {
+ "source-map": "0.5.7",
+ "uglify-js": "2.8.29",
+ "webpack-sources": "1.0.1"
+ },
+ "dependencies": {
+ "uglify-js": {
+ "version": "2.8.29",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/uglify-js/-/uglify-js-2.8.29.tgz",
+ "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
+ "dev": true,
+ "requires": {
+ "source-map": "0.5.7",
+ "uglify-to-browserify": "1.0.2",
+ "yargs": "3.10.0"
+ }
+ }
+ }
+ },
+ "unexpected": {
+ "version": "10.36.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/unexpected/-/unexpected-10.36.0.tgz",
+ "integrity": "sha512-pAesvas+GIs3UBJLwohOF5/67Zx4nMFZj3vpiYrrPLbTCNdhPqIGRRKfSM9Pp5d9OmEyJxQep5nwHBjqeSOaUA==",
+ "dev": true,
+ "requires": {
+ "array-changes": "2.0.0",
+ "array-changes-async": "3.0.0",
+ "babel-runtime": "6.26.0",
+ "detect-indent": "3.0.1",
+ "diff": "1.1.0",
+ "greedy-interval-packer": "1.2.0",
+ "leven": "2.0.0",
+ "magicpen": "5.12.0",
+ "unexpected-bluebird": "2.9.34-longstack2"
+ },
+ "dependencies": {
+ "detect-indent": {
+ "version": "3.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/detect-indent/-/detect-indent-3.0.1.tgz",
+ "integrity": "sha1-ncXl3bzu+DJXZLlFGwK8bVQIT3U=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "4.0.1",
+ "minimist": "1.2.0",
+ "repeating": "1.1.3"
+ }
+ },
+ "diff": {
+ "version": "1.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/diff/-/diff-1.1.0.tgz",
+ "integrity": "sha1-eYpJOBqkZBUem08Ob/Kwmooa0j8=",
+ "dev": true
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "1.1.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/repeating/-/repeating-1.1.3.tgz",
+ "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ }
+ }
+ },
+ "unexpected-bluebird": {
+ "version": "2.9.34-longstack2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/unexpected-bluebird/-/unexpected-bluebird-2.9.34-longstack2.tgz",
+ "integrity": "sha1-SaysdTsFVt7WAlIQ7pYYIwfSssk=",
+ "dev": true
+ },
+ "unexpected-dom": {
+ "version": "4.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/unexpected-dom/-/unexpected-dom-4.0.0.tgz",
+ "integrity": "sha1-s8BX6WIjiiyQuy02Jk8FvOsSLTk=",
+ "dev": true,
+ "requires": {
+ "extend": "3.0.1",
+ "magicpen-prism": "2.3.0"
+ }
+ },
+ "unexpected-htmllike": {
+ "version": "2.1.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/unexpected-htmllike/-/unexpected-htmllike-2.1.3.tgz",
+ "integrity": "sha1-qXYHBPDz0RpWVdMeJZtCn7/orH0=",
+ "dev": true,
+ "requires": {
+ "array-changes": "1.3.1",
+ "array-changes-async": "2.2.1",
+ "object-assign": "4.1.1"
+ },
+ "dependencies": {
+ "array-changes": {
+ "version": "1.3.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/array-changes/-/array-changes-1.3.1.tgz",
+ "integrity": "sha1-1AxRkXlA0eTwTiofDWK6/DeVVck=",
+ "dev": true,
+ "requires": {
+ "arraydiff-papandreou": "0.1.1-patch1"
+ }
+ },
+ "array-changes-async": {
+ "version": "2.2.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/array-changes-async/-/array-changes-async-2.2.1.tgz",
+ "integrity": "sha1-Kn7LccdUotGrUEDRe9o4YOW9WjQ=",
+ "dev": true,
+ "requires": {
+ "arraydiff-async": "0.2.0"
+ }
+ }
+ }
+ },
+ "unexpected-htmllike-jsx-adapter": {
+ "version": "1.0.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/unexpected-htmllike-jsx-adapter/-/unexpected-htmllike-jsx-adapter-1.0.3.tgz",
+ "integrity": "sha1-KYrmOG4/U9xMG3X1Taf2h0UM4ak=",
+ "dev": true,
+ "requires": {
+ "object-assign": "4.1.1"
+ }
+ },
+ "unexpected-htmllike-raw-adapter": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/unexpected-htmllike-raw-adapter/-/unexpected-htmllike-raw-adapter-1.0.1.tgz",
+ "integrity": "sha1-2fx7jzJM4BEC2zIpI7DPlxu2dCA=",
+ "dev": true,
+ "requires": {
+ "object-assign": "4.1.1"
+ }
+ },
+ "unexpected-htmllike-reactrendered-adapter": {
+ "version": "2.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/unexpected-htmllike-reactrendered-adapter/-/unexpected-htmllike-reactrendered-adapter-2.0.1.tgz",
+ "integrity": "sha1-ybPll9nLvf6rFxA1g2xqfy2KSOU=",
+ "dev": true,
+ "requires": {
+ "object-assign": "4.1.1",
+ "react-render-hook": "0.1.4"
+ }
+ },
+ "unexpected-htmllike-testrenderer-adapter": {
+ "version": "1.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/unexpected-htmllike-testrenderer-adapter/-/unexpected-htmllike-testrenderer-adapter-1.0.2.tgz",
+ "integrity": "sha1-Aifu9uMKh2Mo2iCoYS982kg2eRk=",
+ "dev": true,
+ "requires": {
+ "object-assign": "4.1.1"
+ }
+ },
+ "unexpected-react": {
+ "version": "4.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/unexpected-react/-/unexpected-react-4.1.0.tgz",
+ "integrity": "sha1-NU3ZayLkYUnU7dzrTa6HoVXKlXQ=",
+ "dev": true,
+ "requires": {
+ "js-writer": "1.2.0",
+ "magicpen-prism": "2.3.0",
+ "react-render-hook": "0.1.4",
+ "unexpected-htmllike": "2.1.3",
+ "unexpected-htmllike-jsx-adapter": "1.0.3",
+ "unexpected-htmllike-raw-adapter": "1.0.1",
+ "unexpected-htmllike-reactrendered-adapter": "2.0.1",
+ "unexpected-htmllike-testrenderer-adapter": "1.0.2"
+ }
+ },
+ "unexpected-sinon": {
+ "version": "10.8.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/unexpected-sinon/-/unexpected-sinon-10.8.2.tgz",
+ "integrity": "sha1-R7od9MBTKOu0wpBwMwbEjiHxrFw=",
+ "dev": true
+ },
+ "uniq": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/uniq/-/uniq-1.0.1.tgz",
+ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
+ "dev": true
+ },
+ "uniqid": {
+ "version": "4.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/uniqid/-/uniqid-4.1.1.tgz",
+ "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=",
+ "dev": true,
+ "requires": {
+ "macaddress": "0.2.8"
+ }
+ },
+ "uniqs": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/uniqs/-/uniqs-2.0.0.tgz",
+ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=",
+ "dev": true
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+ "dev": true
+ },
+ "upper-case": {
+ "version": "1.1.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/upper-case/-/upper-case-1.1.3.tgz",
+ "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=",
+ "dev": true
+ },
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "dev": true,
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+ "dev": true
+ }
+ }
+ },
+ "url-parse": {
+ "version": "1.1.9",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/url-parse/-/url-parse-1.1.9.tgz",
+ "integrity": "sha1-xn8dd11R8KGJEd17P/rSe7nlvRk=",
+ "dev": true,
+ "requires": {
+ "querystringify": "1.0.0",
+ "requires-port": "1.0.0"
+ },
+ "dependencies": {
+ "querystringify": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/querystringify/-/querystringify-1.0.0.tgz",
+ "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs=",
+ "dev": true
+ }
+ }
+ },
+ "user-home": {
+ "version": "1.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/user-home/-/user-home-1.1.1.tgz",
+ "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=",
+ "dev": true
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+ "dev": true
+ }
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "utila": {
+ "version": "0.4.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/utila/-/utila-0.4.0.tgz",
+ "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=",
+ "dev": true
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+ "dev": true
+ },
+ "uuid": {
+ "version": "3.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/uuid/-/uuid-3.1.0.tgz",
+ "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==",
+ "dev": true
+ },
+ "v8flags": {
+ "version": "2.1.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/v8flags/-/v8flags-2.1.1.tgz",
+ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=",
+ "dev": true,
+ "requires": {
+ "user-home": "1.1.1"
+ }
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz",
+ "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "1.0.2",
+ "spdx-expression-parse": "1.0.4"
+ }
+ },
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
+ "dev": true
+ },
+ "vendors": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/vendors/-/vendors-1.0.1.tgz",
+ "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI=",
+ "dev": true
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "1.3.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "vlq": {
+ "version": "0.2.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/vlq/-/vlq-0.2.3.tgz",
+ "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==",
+ "dev": true
+ },
+ "vm-browserify": {
+ "version": "0.0.4",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/vm-browserify/-/vm-browserify-0.0.4.tgz",
+ "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
+ "dev": true,
+ "requires": {
+ "indexof": "0.0.1"
+ }
+ },
+ "walker": {
+ "version": "1.0.7",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/walker/-/walker-1.0.7.tgz",
+ "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
+ "dev": true,
+ "requires": {
+ "makeerror": "1.0.11"
+ }
+ },
+ "watchpack": {
+ "version": "1.4.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/watchpack/-/watchpack-1.4.0.tgz",
+ "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=",
+ "dev": true,
+ "requires": {
+ "async": "2.5.0",
+ "chokidar": "1.7.0",
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "wbuf": {
+ "version": "1.7.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/wbuf/-/wbuf-1.7.2.tgz",
+ "integrity": "sha1-1pe5nx9ZUS3ydRvkJ2nBWAtYAf4=",
+ "dev": true,
+ "requires": {
+ "minimalistic-assert": "1.0.0"
+ }
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+ "dev": true
+ },
+ "webpack": {
+ "version": "3.8.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/webpack/-/webpack-3.8.1.tgz",
+ "integrity": "sha512-5ZXLWWsMqHKFr5y0N3Eo5IIisxeEeRAajNq4mELb/WELOR7srdbQk2N5XiyNy2A/AgvlR3AmeBCZJW8lHrolbw==",
+ "dev": true,
+ "requires": {
+ "acorn": "5.1.2",
+ "acorn-dynamic-import": "2.0.2",
+ "ajv": "5.2.3",
+ "ajv-keywords": "2.1.0",
+ "async": "2.5.0",
+ "enhanced-resolve": "3.4.1",
+ "escope": "3.6.0",
+ "interpret": "1.0.4",
+ "json-loader": "0.5.7",
+ "json5": "0.5.1",
+ "loader-runner": "2.3.0",
+ "loader-utils": "1.1.0",
+ "memory-fs": "0.4.1",
+ "mkdirp": "0.5.1",
+ "node-libs-browser": "2.0.0",
+ "source-map": "0.5.7",
+ "supports-color": "4.5.0",
+ "tapable": "0.2.8",
+ "uglifyjs-webpack-plugin": "0.4.6",
+ "watchpack": "1.4.0",
+ "webpack-sources": "1.0.1",
+ "yargs": "8.0.2"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "dev": true,
+ "requires": {
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wrap-ansi": "2.1.0"
+ },
+ "dependencies": {
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ }
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "load-json-file": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/load-json-file/-/load-json-file-2.0.0.tgz",
+ "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "parse-json": "2.2.0",
+ "pify": "2.3.0",
+ "strip-bom": "3.0.0"
+ }
+ },
+ "path-type": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/path-type/-/path-type-2.0.0.tgz",
+ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
+ "dev": true,
+ "requires": {
+ "pify": "2.3.0"
+ }
+ },
+ "read-pkg": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/read-pkg/-/read-pkg-2.0.0.tgz",
+ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "2.0.0",
+ "normalize-package-data": "2.4.0",
+ "path-type": "2.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+ "dev": true,
+ "requires": {
+ "find-up": "2.1.0",
+ "read-pkg": "2.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ },
+ "yargs": {
+ "version": "8.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/yargs/-/yargs-8.0.2.tgz",
+ "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=",
+ "dev": true,
+ "requires": {
+ "camelcase": "4.1.0",
+ "cliui": "3.2.0",
+ "decamelize": "1.2.0",
+ "get-caller-file": "1.0.2",
+ "os-locale": "2.1.0",
+ "read-pkg-up": "2.0.0",
+ "require-directory": "2.1.1",
+ "require-main-filename": "1.0.1",
+ "set-blocking": "2.0.0",
+ "string-width": "2.1.1",
+ "which-module": "2.0.0",
+ "y18n": "3.2.1",
+ "yargs-parser": "7.0.0"
+ }
+ }
+ }
+ },
+ "webpack-dev-middleware": {
+ "version": "1.12.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/webpack-dev-middleware/-/webpack-dev-middleware-1.12.0.tgz",
+ "integrity": "sha1-007++y7dp+HTtdvgcolRMhllFwk=",
+ "dev": true,
+ "requires": {
+ "memory-fs": "0.4.1",
+ "mime": "1.4.1",
+ "path-is-absolute": "1.0.1",
+ "range-parser": "1.2.0",
+ "time-stamp": "2.0.0"
+ }
+ },
+ "webpack-dev-server": {
+ "version": "2.9.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/webpack-dev-server/-/webpack-dev-server-2.9.3.tgz",
+ "integrity": "sha512-bwq7sj452FRH+oVfgOA8xXKkLYPTNsYB4dQ0Jhz3ydjNJ9MvhpGJtehFW8Z0cEcwNkRRiF4aYbReiSGQ4pbS1w==",
+ "dev": true,
+ "requires": {
+ "ansi-html": "0.0.7",
+ "array-includes": "3.0.3",
+ "bonjour": "3.5.0",
+ "chokidar": "1.7.0",
+ "compression": "1.7.1",
+ "connect-history-api-fallback": "1.4.0",
+ "debug": "3.1.0",
+ "del": "3.0.0",
+ "express": "4.16.2",
+ "html-entities": "1.2.1",
+ "http-proxy-middleware": "0.17.4",
+ "import-local": "0.1.1",
+ "internal-ip": "1.2.0",
+ "ip": "1.1.5",
+ "loglevel": "1.5.1",
+ "opn": "5.1.0",
+ "portfinder": "1.0.13",
+ "selfsigned": "1.10.1",
+ "serve-index": "1.9.1",
+ "sockjs": "0.3.18",
+ "sockjs-client": "1.1.4",
+ "spdy": "3.4.7",
+ "strip-ansi": "3.0.1",
+ "supports-color": "4.5.0",
+ "webpack-dev-middleware": "1.12.0",
+ "yargs": "6.6.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "dev": true,
+ "requires": {
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wrap-ansi": "2.1.0"
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "del": {
+ "version": "3.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/del/-/del-3.0.0.tgz",
+ "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=",
+ "dev": true,
+ "requires": {
+ "globby": "6.1.0",
+ "is-path-cwd": "1.0.0",
+ "is-path-in-cwd": "1.0.0",
+ "p-map": "1.2.0",
+ "pify": "3.0.0",
+ "rimraf": "2.6.2"
+ }
+ },
+ "globby": {
+ "version": "6.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/globby/-/globby-6.1.0.tgz",
+ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+ "dev": true,
+ "requires": {
+ "array-union": "1.0.2",
+ "glob": "7.1.2",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "opn": {
+ "version": "5.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/opn/-/opn-5.1.0.tgz",
+ "integrity": "sha512-iPNl7SyM8L30Rm1sjGdLLheyHVw5YXVfi3SKWJzBI7efxRwHojfRFjwE/OLM6qp9xJYMgab8WicTU1cPoY+Hpg==",
+ "dev": true,
+ "requires": {
+ "is-wsl": "1.1.0"
+ }
+ },
+ "os-locale": {
+ "version": "1.4.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/os-locale/-/os-locale-1.4.0.tgz",
+ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+ "dev": true,
+ "requires": {
+ "lcid": "1.0.0"
+ }
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/which-module/-/which-module-1.0.0.tgz",
+ "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "6.6.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/yargs/-/yargs-6.6.0.tgz",
+ "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=",
+ "dev": true,
+ "requires": {
+ "camelcase": "3.0.0",
+ "cliui": "3.2.0",
+ "decamelize": "1.2.0",
+ "get-caller-file": "1.0.2",
+ "os-locale": "1.4.0",
+ "read-pkg-up": "1.0.1",
+ "require-directory": "2.1.1",
+ "require-main-filename": "1.0.1",
+ "set-blocking": "2.0.0",
+ "string-width": "1.0.2",
+ "which-module": "1.0.0",
+ "y18n": "3.2.1",
+ "yargs-parser": "4.2.1"
+ }
+ },
+ "yargs-parser": {
+ "version": "4.2.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/yargs-parser/-/yargs-parser-4.2.1.tgz",
+ "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=",
+ "dev": true,
+ "requires": {
+ "camelcase": "3.0.0"
+ }
+ }
+ }
+ },
+ "webpack-sources": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/webpack-sources/-/webpack-sources-1.0.1.tgz",
+ "integrity": "sha512-05tMxipUCwHqYaVS8xc7sYPTly8PzXayRCB4dTxLhWTqlKUiwH6ezmEe0OSreL1c30LAuA3Zqmc+uEBUGFJDjw==",
+ "dev": true,
+ "requires": {
+ "source-list-map": "2.0.0",
+ "source-map": "0.5.7"
+ }
+ },
+ "websocket-driver": {
+ "version": "0.7.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/websocket-driver/-/websocket-driver-0.7.0.tgz",
+ "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=",
+ "dev": true,
+ "requires": {
+ "http-parser-js": "0.4.9",
+ "websocket-extensions": "0.1.2"
+ }
+ },
+ "websocket-extensions": {
+ "version": "0.1.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/websocket-extensions/-/websocket-extensions-0.1.2.tgz",
+ "integrity": "sha1-Dhh4HeYpoYMIzhSBZQ9n/6JpOl0=",
+ "dev": true
+ },
+ "whatwg-encoding": {
+ "version": "1.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz",
+ "integrity": "sha1-PGxFGhmO567FWx7GHQkgxngBpfQ=",
+ "dev": true,
+ "requires": {
+ "iconv-lite": "0.4.13"
+ },
+ "dependencies": {
+ "iconv-lite": {
+ "version": "0.4.13",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/iconv-lite/-/iconv-lite-0.4.13.tgz",
+ "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=",
+ "dev": true
+ }
+ }
+ },
+ "whatwg-fetch": {
+ "version": "2.0.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz",
+ "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ="
+ },
+ "whatwg-url": {
+ "version": "4.8.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/whatwg-url/-/whatwg-url-4.8.0.tgz",
+ "integrity": "sha1-0pgaqRSMHgCkHFphMRZqtGg7vMA=",
+ "dev": true,
+ "requires": {
+ "tr46": "0.0.3",
+ "webidl-conversions": "3.0.1"
+ },
+ "dependencies": {
+ "webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=",
+ "dev": true
+ }
+ }
+ },
+ "whet.extend": {
+ "version": "0.9.9",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/whet.extend/-/whet.extend-0.9.9.tgz",
+ "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=",
+ "dev": true
+ },
+ "which": {
+ "version": "1.3.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/which/-/which-1.3.0.tgz",
+ "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
+ "dev": true,
+ "requires": {
+ "isexe": "2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+ "dev": true
+ },
+ "window-size": {
+ "version": "0.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/window-size/-/window-size-0.1.0.tgz",
+ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
+ "dev": true
+ },
+ "winston": {
+ "version": "2.4.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/winston/-/winston-2.4.0.tgz",
+ "integrity": "sha1-gIBQuT1SZh7Z+2wms/DIJnCLCu4=",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ }
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "dev": true,
+ "requires": {
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "wrench": {
+ "version": "1.3.9",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/wrench/-/wrench-1.3.9.tgz",
+ "integrity": "sha1-bxPsNRRTF+spLKX2UxORskQRFBE=",
+ "dev": true
+ },
+ "write": {
+ "version": "0.2.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/write/-/write-0.2.1.tgz",
+ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+ "dev": true,
+ "requires": {
+ "mkdirp": "0.5.1"
+ }
+ },
+ "xml-char-classes": {
+ "version": "1.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/xml-char-classes/-/xml-char-classes-1.0.0.tgz",
+ "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0=",
+ "dev": true
+ },
+ "xml-name-validator": {
+ "version": "2.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/xml-name-validator/-/xml-name-validator-2.0.1.tgz",
+ "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "3.10.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/yargs/-/yargs-3.10.0.tgz",
+ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+ "dev": true,
+ "requires": {
+ "camelcase": "1.2.1",
+ "cliui": "2.1.0",
+ "decamelize": "1.2.0",
+ "window-size": "0.1.0"
+ }
+ },
+ "yargs-parser": {
+ "version": "7.0.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/yargs-parser/-/yargs-parser-7.0.0.tgz",
+ "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=",
+ "dev": true,
+ "requires": {
+ "camelcase": "4.1.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://npm.hubteam.com/npm-nexus/repository/npm-all/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ }
+ }
+ }
+ }
+}
diff --git a/package-scripts.js b/package-scripts.js
new file mode 100644
index 00000000..8cc0a5ed
--- /dev/null
+++ b/package-scripts.js
@@ -0,0 +1,35 @@
+const npsUtils = require('nps-utils');
+const path = require('path');
+const series = npsUtils.series;
+const rimraf = npsUtils.rimraf;
+const concurrent = npsUtils.concurrent;
+
+module.exports = {
+ scripts: {
+ build: {
+ description: 'clean dist directory and run all builds',
+ default: series(
+ rimraf('dist'),
+ rimraf('lib'),
+ concurrent.nps('build.css', 'build.cssmin'),
+ concurrent.nps('build.rollup', 'build.babel')
+ ),
+ rollup: 'rollup --config',
+ babel: 'babel src -d lib',
+ css: 'lessc less/default.less dist/react-select-plus.css',
+ cssmin: 'lessc --clean-css less/default.less dist/react-select-plus.min.css',
+ standalone: series(
+ 'cp examples/src/standalone.html examples/dist/standalone.html',
+ 'lessc examples/src/example.less examples/dist/example.css'
+ ),
+ },
+ publish: {
+ default: series(
+ rimraf('examples/dist'),
+ 'webpack --progress -p',
+ 'cp examples/src/.gitignore examples/dist/.gitignore',
+ 'git subtree push --prefix examples/dist origin gh-pages'
+ ),
+ },
+ },
+};
diff --git a/package.json b/package.json
index a575a7ef..cf777c7a 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,9 @@
{
"name": "react-select-plus",
- "version": "1.0.0-rc.5",
+ "version": "1.0.0-rc.10",
"description": "A fork of react-select with support for option groups",
- "main": "lib/Select.js",
+ "main": "lib/index.js",
+ "jsnext:main": "dist/react-select-plus.es.js",
"style": "dist/react-select-plus.min.css",
"author": "HubSpot",
"license": "MIT",
@@ -11,62 +12,75 @@
"url": "https://github.com/HubSpot/react-select-plus.git"
},
"dependencies": {
- "create-react-class": "^15.5.2",
"classnames": "^2.2.4",
- "react-input-autosize": "^1.1.3",
- "prop-types": "^15.5.8"
+ "prop-types": "^15.5.8",
+ "react-input-autosize": "^2.0.1"
},
"devDependencies": {
- "babel": "^5.8.23",
- "babel-eslint": "^4.1.3",
- "chai": "^3.5.0",
+ "babel-cli": "^6.26.0",
+ "babel-core": "^6.26.0",
+ "babel-loader": "^7.1.1",
+ "babel-plugin-external-helpers": "^6.22.0",
+ "babel-plugin-istanbul": "^4.1.4",
+ "babel-preset-es2015": "^6.24.1",
+ "babel-preset-react": "^6.24.1",
+ "babel-preset-stage-0": "^6.24.1",
+ "babel-register": "^6.26.0",
+ "chai": "^4.1.2",
"coveralls": "^2.11.12",
- "eslint": "^1.10.3",
- "eslint-plugin-react": "^3.15.0",
- "gulp": "^3.9.1",
+ "create-react-class": "^15.5.2",
+ "cross-env": "^5.0.5",
+ "css-loader": "^0.28.7",
+ "eslint": "^4.6.1",
+ "eslint-plugin-react": "^7.3.0",
+ "extract-text-webpack-plugin": "^3.0.0",
+ "html-loader": "^0.5.1",
+ "html-webpack-plugin": "^2.30.1",
"isomorphic-fetch": "^2.2.1",
"istanbul": "^0.4.5",
- "jsdom": "^9.5.0",
+ "jsdom": "^9.12.0",
+ "less": "^2.7.2",
+ "less-loader": "^4.0.5",
+ "less-plugin-clean-css": "^1.5.1",
"mocha": "^3.0.2",
- "react": "^15.0",
- "react-addons-shallow-compare": "^15.0",
- "react-component-gulp-tasks": "^0.7.7",
- "react-dom": "^15.0",
+ "nps": "^5.7.1",
+ "nps-utils": "^1.3.0",
+ "nyc": "^11.1.0",
+ "react": "^15.5.0",
+ "react-addons-shallow-compare": "^15.5.0",
+ "react-dom": "^15.5.0",
"react-gravatar": "^2.4.5",
- "react-highlight-words": "^0.3.0",
- "react-test-renderer": "^15.5.4",
- "react-virtualized": "^7.23.0",
- "react-virtualized-select": "^1.4.0",
- "sinon": "^1.17.5",
- "unexpected": "^10.17.0",
- "unexpected-dom": "^3.1.0",
- "unexpected-react": "^4.0.1",
- "unexpected-sinon": "^10.4.0"
+ "react-highlight-words": "^0.8.1",
+ "react-test-renderer": "^15.6.1",
+ "react-virtualized": "^9.9.0",
+ "react-virtualized-select": "^3.1.0",
+ "rollup": "^0.49.2",
+ "rollup-plugin-babel": "^3.0.2",
+ "rollup-plugin-commonjs": "^8.2.0",
+ "rollup-plugin-node-resolve": "^3.0.0",
+ "rollup-plugin-uglify": "^2.0.1",
+ "sinon": "^3.2.1",
+ "style-loader": "^0.18.2",
+ "uglify-es": "^3.0.28",
+ "unexpected": "^10.35.0",
+ "unexpected-dom": "^4.0.0",
+ "unexpected-react": "^4.1.0",
+ "unexpected-sinon": "^10.4.0",
+ "webpack": "^3.5.5",
+ "webpack-dev-server": "^2.7.1"
},
"peerDependencies": {
- "react": "^0.14 || ^15.0.0-rc || ^15.0",
- "react-dom": "^0.14 || ^15.0.0-rc || ^15.0"
- },
- "browserify-shim": {
- "classnames": "global:classNames",
- "react": "global:React",
- "react-dom": "global:ReactDOM",
- "react-input-autosize": "global:AutosizeInput"
+ "react": "^0.14.9 || ^15.3.0 || ^16.0.0-rc || ^16.0",
+ "react-dom": "^0.14.9 || ^15.3.0 || ^16.0.0-rc || ^16.0"
},
"scripts": {
- "build": "gulp clean && NODE_ENV=production gulp build",
- "bump": "gulp bump",
- "bump:major": "gulp bump:major",
- "bump:minor": "gulp bump:minor",
- "cover": "istanbul cover _mocha -- -u exports --compilers js:babel/register -R spec",
- "coveralls": "NODE_ENV=test istanbul cover _mocha --report lcovonly -- -u exports --compilers js:babel/register -R spec && cat coverage/lcov.info | coveralls",
- "examples": "gulp dev:server",
+ "build": "nps build",
+ "cover": "cross-env NODE_ENV=test nyc --reporter=lcov --reporter=text mocha",
+ "coveralls": "cross-env NODE_ENV=test nyc --reporter=lcov --reporter=text mocha && cat coverage/lcov.info | coveralls",
"lint": "eslint .",
- "publish:examples": "NODE_ENV=production gulp publish:examples",
- "release": "NODE_ENV=production gulp release",
- "start": "gulp dev",
- "test": "npm run lint && mocha --compilers js:babel/register",
- "watch": "gulp watch:lib"
+ "publish:examples": "NODE_ENV=production nps publish",
+ "start": "webpack-dev-server --progress",
+ "test": "NODE_ENV=test mocha --compilers js:babel-core/register"
},
"keywords": [
"combobox",
diff --git a/rollup.config.js b/rollup.config.js
new file mode 100644
index 00000000..d12d1cbe
--- /dev/null
+++ b/rollup.config.js
@@ -0,0 +1,54 @@
+import babel from 'rollup-plugin-babel';
+import resolve from 'rollup-plugin-node-resolve';
+import uglify from 'rollup-plugin-uglify';
+import { minify } from 'uglify-es';
+
+const name = 'Select';
+const path = 'dist/react-select';
+const globals = {
+ classnames: 'classNames',
+ 'prop-types': 'PropTypes',
+ 'react-dom': 'ReactDOM',
+ 'react-input-autosize': 'AutosizeInput',
+ react: 'React',
+};
+const external = Object.keys(globals);
+const babelOptions = {
+ babelrc: false,
+ presets: [['es2015', { modules: false }], 'stage-0', 'react'],
+ plugins: ['external-helpers'],
+};
+
+export default [
+ {
+ input: 'src/index.js',
+ output: {
+ file: path + '.es.js',
+ format: 'es',
+ },
+ external: external,
+ plugins: [babel(babelOptions)],
+ },
+ {
+ input: 'src/index.umd.js',
+ output: {
+ name: name,
+ file: path + '.js',
+ format: 'umd',
+ },
+ globals: globals,
+ external: external,
+ plugins: [babel(babelOptions), resolve()],
+ },
+ {
+ input: 'src/index.umd.js',
+ output: {
+ name: name,
+ file: path + '.min.js',
+ format: 'umd',
+ },
+ globals: globals,
+ external: external,
+ plugins: [babel(babelOptions), resolve(), uglify({}, minify)],
+ },
+];
diff --git a/scss/control.scss b/scss/control.scss
index e1b48d61..8d3b80de 100644
--- a/scss/control.scss
+++ b/scss/control.scss
@@ -106,6 +106,10 @@
white-space: nowrap;
}
+.has-value.is-clearable.Select--single > .Select-control .Select-value {
+ padding-right: ($select-clear-width + $select-arrow-width * 5);
+}
+
.has-value.Select--single > .Select-control .Select-value,
.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value {
.Select-value-label {
@@ -217,6 +221,7 @@
margin: -1px;
clip: rect(0,0,0,0);
overflow: hidden;
+ float: left;
}
diff --git a/src/Async.js b/src/Async.js
index de2c8ad9..b19df77f 100644
--- a/src/Async.js
+++ b/src/Async.js
@@ -2,34 +2,33 @@ import React, { Component } from 'react';
import PropTypes from 'prop-types';
import Select from './Select';
import stripDiacritics from './utils/stripDiacritics';
-
const propTypes = {
autoload: PropTypes.bool.isRequired, // automatically call the `loadOptions` prop on-mount; defaults to true
cache: PropTypes.any, // object to use to cache results; set to null/false to disable caching
children: PropTypes.func.isRequired, // Child function responsible for creating the inner Select component; (props: Object): PropTypes.element
ignoreAccents: PropTypes.bool, // strip diacritics when filtering; defaults to true
ignoreCase: PropTypes.bool, // perform case-insensitive filtering; defaults to true
+ loadOptions: PropTypes.func.isRequired, // callback to load options asynchronously; (inputValue: string, callback: Function): ?Promise
loadingPlaceholder: PropTypes.oneOfType([ // replaces the placeholder while options are loading
PropTypes.string,
PropTypes.node
]),
- loadOptions: PropTypes.func.isRequired, // callback to load options asynchronously; (inputValue: string, callback: Function): ?Promise
multi: PropTypes.bool, // multi-value input
- options: PropTypes.array.isRequired, // array of options
- placeholder: PropTypes.oneOfType([ // field placeholder, displayed when there's no value (shared with Select)
+ noResultsText: PropTypes.oneOfType([ // field noResultsText, displayed when no options come back from the server
PropTypes.string,
PropTypes.node
]),
- noResultsText: PropTypes.oneOfType([ // field noResultsText, displayed when no options come back from the server
+ onChange: PropTypes.func, // onChange handler: function (newValue) {}
+ onInputChange: PropTypes.func, // optional for keeping track of what is being typed
+ options: PropTypes.array.isRequired, // array of options
+ placeholder: PropTypes.oneOfType([ // field placeholder, displayed when there's no value (shared with Select)
PropTypes.string,
PropTypes.node
]),
- onChange: PropTypes.func, // onChange handler: function (newValue) {}
searchPromptText: PropTypes.oneOfType([ // label to prompt for search input
PropTypes.string,
PropTypes.node
]),
- onInputChange: PropTypes.func, // optional for keeping track of what is being typed
value: PropTypes.any, // initial field value
};
@@ -53,11 +52,12 @@ export default class Async extends Component {
this._cache = props.cache === defaultCache ? {} : props.cache;
this.state = {
+ inputValue: '',
isLoading: false,
options: props.options,
};
- this._onInputChange = this._onInputChange.bind(this);
+ this.onInputChange = this.onInputChange.bind(this);
}
componentDidMount () {
@@ -68,19 +68,16 @@ export default class Async extends Component {
}
}
- componentWillUpdate (nextProps, nextState) {
- const propertiesToSync = ['options'];
- propertiesToSync.forEach((prop) => {
- if (this.props[prop] !== nextProps[prop]) {
- this.setState({
- [prop]: nextProps[prop]
- });
- }
- });
+ componentWillReceiveProps(nextProps) {
+ if (nextProps.options !== this.props.options) {
+ this.setState({
+ options: nextProps.options,
+ });
+ }
}
- clearOptions() {
- this.setState({ options: [] });
+ componentWillUnmount () {
+ this._callback = null;
}
loadOptions (inputValue) {
@@ -89,7 +86,7 @@ export default class Async extends Component {
if (
cache &&
- cache.hasOwnProperty(inputValue)
+ Object.prototype.hasOwnProperty.call(cache, inputValue)
) {
this.setState({
options: cache[inputValue]
@@ -134,40 +131,34 @@ export default class Async extends Component {
isLoading: true
});
}
-
- return inputValue;
}
- _onInputChange (inputValue) {
+ onInputChange (inputValue) {
const { ignoreAccents, ignoreCase, onInputChange } = this.props;
+ let transformedInputValue = inputValue;
if (ignoreAccents) {
- inputValue = stripDiacritics(inputValue);
+ transformedInputValue = stripDiacritics(transformedInputValue);
}
if (ignoreCase) {
- inputValue = inputValue.toLowerCase();
+ transformedInputValue = transformedInputValue.toLowerCase();
}
if (onInputChange) {
- onInputChange(inputValue);
+ onInputChange(transformedInputValue);
}
- return this.loadOptions(inputValue);
- }
+ this.setState({ inputValue });
+ this.loadOptions(transformedInputValue);
- inputValue() {
- if (this.select) {
- return this.select.state.inputValue;
- }
- return '';
+ // Return the original input value to avoid modifying the user's view of the input while typing.
+ return inputValue;
}
noResultsText() {
const { loadingPlaceholder, noResultsText, searchPromptText } = this.props;
- const { isLoading } = this.state;
-
- const inputValue = this.inputValue();
+ const { inputValue, isLoading } = this.state;
if (isLoading) {
return loadingPlaceholder;
@@ -183,7 +174,7 @@ export default class Async extends Component {
}
render () {
- const { children, loadingPlaceholder, placeholder } = this.props;
+ const { children, loadingPlaceholder, multi, onChange, placeholder, value } = this.props;
const { isLoading, options } = this.state;
const props = {
@@ -191,19 +182,13 @@ export default class Async extends Component {
placeholder: isLoading ? loadingPlaceholder : placeholder,
options: (isLoading && loadingPlaceholder) ? [] : options,
ref: (ref) => (this.select = ref),
- onChange: (newValues) => {
- if (this.props.multi && this.props.value && (newValues.length > this.props.value.length)) {
- this.clearOptions();
- }
- this.props.onChange(newValues);
- }
};
return children({
...this.props,
...props,
isLoading,
- onInputChange: this._onInputChange
+ onInputChange: this.onInputChange
});
}
}
diff --git a/src/AsyncCreatable.js b/src/AsyncCreatable.js
index 40c5ed45..dddb99af 100644
--- a/src/AsyncCreatable.js
+++ b/src/AsyncCreatable.js
@@ -1,6 +1,7 @@
import React from 'react';
-import createClass from 'create-react-class';
import Select from './Select';
+import Async from './Async';
+import Creatable from './Creatable';
function reduce(obj, props = {}){
return Object.keys(obj)
@@ -11,18 +12,17 @@ function reduce(obj, props = {}){
}, props);
}
-const AsyncCreatable = createClass({
- displayName: 'AsyncCreatableSelect',
+class AsyncCreatableSelect extends React.Component {
focus () {
this.select.focus();
- },
+ }
render () {
return (
-
+
{(asyncProps) => (
-
+
{(creatableProps) => (
)}
-
+
)}
-
+
);
}
-});
+};
-module.exports = AsyncCreatable;
+export default AsyncCreatableSelect;
diff --git a/src/Creatable.js b/src/Creatable.js
index 44b49554..4517f53e 100644
--- a/src/Creatable.js
+++ b/src/Creatable.js
@@ -1,78 +1,19 @@
import React from 'react';
-import createClass from 'create-react-class';
import PropTypes from 'prop-types';
import Select from './Select';
import defaultFilterOptions from './utils/defaultFilterOptions';
import defaultMenuRenderer from './utils/defaultMenuRenderer';
-const Creatable = createClass({
- displayName: 'CreatableSelect',
+class CreatableSelect extends React.Component {
+ constructor (props, context) {
+ super(props, context);
- propTypes: {
- // Child function responsible for creating the inner Select component
- // This component can be used to compose HOCs (eg Creatable and Async)
- // (props: Object): PropTypes.element
- children: PropTypes.func,
-
- // See Select.propTypes.filterOptions
- filterOptions: PropTypes.any,
-
- // Searches for any matching option within the set of options.
- // This function prevents duplicate options from being created.
- // ({ option: Object, options: Array, labelKey: string, valueKey: string }): boolean
- isOptionUnique: PropTypes.func,
-
- // Determines if the current input text represents a valid option.
- // ({ label: string }): boolean
- isValidNewOption: PropTypes.func,
-
- // See Select.propTypes.menuRenderer
- menuRenderer: PropTypes.any,
-
- // Factory to create new option.
- // ({ label: string, labelKey: string, valueKey: string }): Object
- newOptionCreator: PropTypes.func,
-
- // input change handler: function (inputValue) {}
- onInputChange: PropTypes.func,
-
- // input keyDown handler: function (event) {}
- onInputKeyDown: PropTypes.func,
-
- // new option click handler: function (option) {}
- onNewOptionClick: PropTypes.func,
-
- // See Select.propTypes.options
- options: PropTypes.array,
-
- // Creates prompt/placeholder option text.
- // (filterText: string): string
- promptTextCreator: PropTypes.func,
-
- // Decides if a keyDown event (eg its `keyCode`) should result in the creation of a new option.
- shouldKeyDownEventCreateNewOption: PropTypes.func,
- },
-
- // Default prop methods
- statics: {
- isOptionUnique,
- isValidNewOption,
- newOptionCreator,
- promptTextCreator,
- shouldKeyDownEventCreateNewOption
- },
-
- getDefaultProps () {
- return {
- filterOptions: defaultFilterOptions,
- isOptionUnique,
- isValidNewOption,
- menuRenderer: defaultMenuRenderer,
- newOptionCreator,
- promptTextCreator,
- shouldKeyDownEventCreateNewOption,
- };
- },
+ this.filterOptions = this.filterOptions.bind(this);
+ this.menuRenderer = this.menuRenderer.bind(this);
+ this.onInputKeyDown = this.onInputKeyDown.bind(this);
+ this.onInputChange = this.onInputChange.bind(this);
+ this.onOptionSelect = this.onOptionSelect .bind(this);
+ }
createNewOption () {
const {
@@ -98,7 +39,7 @@ const Creatable = createClass({
}
}
}
- },
+ }
filterOptions (...params) {
const { filterOptions, isValidNewOption, options, promptTextCreator } = this.props;
@@ -140,7 +81,7 @@ const Creatable = createClass({
}
return filteredOptions;
- },
+ }
isOptionUnique ({
option,
@@ -156,7 +97,7 @@ const Creatable = createClass({
options,
valueKey: this.valueKey
});
- },
+ }
menuRenderer (params) {
const { menuRenderer } = this.props;
@@ -166,7 +107,7 @@ const Creatable = createClass({
onSelect: this.onOptionSelect,
selectValue: this.onOptionSelect
});
- },
+ }
onInputChange (input) {
const { onInputChange } = this.props;
@@ -177,7 +118,7 @@ const Creatable = createClass({
// This value may be needed in between Select mounts (when this.select is null)
this.inputValue = input;
- },
+ }
onInputKeyDown (event) {
const { shouldKeyDownEventCreateNewOption, onInputKeyDown } = this.props;
@@ -195,7 +136,7 @@ const Creatable = createClass({
} else if (onInputKeyDown) {
onInputKeyDown(event);
}
- },
+ }
onOptionSelect (option, event) {
if (option === this._createPlaceholderOption) {
@@ -203,11 +144,11 @@ const Creatable = createClass({
} else {
this.select.selectValue(option);
}
- },
+ }
focus () {
this.select.focus();
- },
+ }
render () {
const {
@@ -245,7 +186,7 @@ const Creatable = createClass({
return children(props);
}
-});
+};
function defaultChildren (props) {
return (
@@ -269,9 +210,9 @@ function isValidNewOption ({ label }) {
function newOptionCreator ({ label, labelKey, valueKey }) {
const option = {};
option[valueKey] = label;
- option[labelKey] = label;
- option.className = 'Select-create-option-placeholder';
- return option;
+ option[labelKey] = label;
+ option.className = 'Select-create-option-placeholder';
+ return option;
};
function promptTextCreator (label) {
@@ -289,4 +230,68 @@ function shouldKeyDownEventCreateNewOption ({ keyCode }) {
return false;
};
-module.exports = Creatable;
+ // Default prop methods
+CreatableSelect.isOptionUnique = isOptionUnique;
+CreatableSelect.isValidNewOption = isValidNewOption;
+CreatableSelect.newOptionCreator = newOptionCreator;
+CreatableSelect.promptTextCreator = promptTextCreator;
+CreatableSelect.shouldKeyDownEventCreateNewOption = shouldKeyDownEventCreateNewOption;
+
+
+CreatableSelect.defaultProps = {
+ filterOptions: defaultFilterOptions,
+ isOptionUnique,
+ isValidNewOption,
+ menuRenderer: defaultMenuRenderer,
+ newOptionCreator,
+ promptTextCreator,
+ shouldKeyDownEventCreateNewOption
+};
+
+CreatableSelect.propTypes = {
+ // Child function responsible for creating the inner Select component
+ // This component can be used to compose HOCs (eg Creatable and Async)
+ // (props: Object): PropTypes.element
+ children: PropTypes.func,
+
+ // See Select.propTypes.filterOptions
+ filterOptions: PropTypes.any,
+
+ // Searches for any matching option within the set of options.
+ // This function prevents duplicate options from being created.
+ // ({ option: Object, options: Array, labelKey: string, valueKey: string }): boolean
+ isOptionUnique: PropTypes.func,
+
+ // Determines if the current input text represents a valid option.
+ // ({ label: string }): boolean
+ isValidNewOption: PropTypes.func,
+
+ // See Select.propTypes.menuRenderer
+ menuRenderer: PropTypes.any,
+
+ // Factory to create new option.
+ // ({ label: string, labelKey: string, valueKey: string }): Object
+ newOptionCreator: PropTypes.func,
+
+ // input change handler: function (inputValue) {}
+ onInputChange: PropTypes.func,
+
+ // input keyDown handler: function (event) {}
+ onInputKeyDown: PropTypes.func,
+
+ // new option click handler: function (option) {}
+ onNewOptionClick: PropTypes.func,
+
+ // See Select.propTypes.options
+ options: PropTypes.array,
+
+ // Creates prompt/placeholder option text.
+ // (filterText: string): string
+ promptTextCreator: PropTypes.func,
+
+ // Decides if a keyDown event (eg its `keyCode`) should result in the creation of a new option.
+ shouldKeyDownEventCreateNewOption: PropTypes.func,
+};
+
+
+export default CreatableSelect;
diff --git a/src/Dropdown.js b/src/Dropdown.js
index 509939aa..13cb9c97 100644
--- a/src/Dropdown.js
+++ b/src/Dropdown.js
@@ -1,15 +1,15 @@
import React from 'react';
-import createClass from 'create-react-class';
import PropTypes from 'prop-types';
-const Dropdown = createClass({
- propTypes: {
- children: PropTypes.node,
- },
+class Dropdown extends React.Component {
render () {
// This component adds no markup
return this.props.children;
}
-});
+};
-module.exports = Dropdown;
+Dropdown.propTypes = {
+ children: PropTypes.node,
+};
+
+export default Dropdown;
diff --git a/src/Option.js b/src/Option.js
index ca38e895..8d3fe11e 100644
--- a/src/Option.js
+++ b/src/Option.js
@@ -1,22 +1,22 @@
import React from 'react';
-import createClass from 'create-react-class';
import PropTypes from 'prop-types';
import classNames from 'classnames';
-const Option = createClass({
- propTypes: {
- children: PropTypes.node,
- className: PropTypes.string, // className (based on mouse position)
- instancePrefix: PropTypes.string.isRequired, // unique prefix for the ids (used for aria)
- isDisabled: PropTypes.bool, // the option is disabled
- isFocused: PropTypes.bool, // the option is focused
- isSelected: PropTypes.bool, // the option is selected
- onFocus: PropTypes.func, // method to handle mouseEnter on option element
- onSelect: PropTypes.func, // method to handle click on option element
- onUnfocus: PropTypes.func, // method to handle mouseLeave on option element
- option: PropTypes.object.isRequired, // object that is base for that option
- optionIndex: PropTypes.number, // index of the option, used to generate unique ids for aria
- },
+class Option extends React.Component {
+
+ constructor(props) {
+ super(props);
+
+ this.handleMouseDown = this.handleMouseDown.bind(this);
+ this.handleMouseEnter = this.handleMouseEnter.bind(this);
+ this.handleMouseMove = this.handleMouseMove.bind(this);
+ this.handleTouchStart = this.handleTouchStart.bind(this);
+ this.handleTouchEnd = this.handleTouchEnd.bind(this);
+ this.handleTouchMove = this.handleTouchMove.bind(this);
+ this.onFocus = this.onFocus.bind(this);
+ }
+
+
blockEvent (event) {
event.preventDefault();
event.stopPropagation();
@@ -28,21 +28,21 @@ const Option = createClass({
} else {
window.location.href = event.target.href;
}
- },
+ }
handleMouseDown (event) {
event.preventDefault();
event.stopPropagation();
this.props.onSelect(this.props.option, event);
- },
+ }
handleMouseEnter (event) {
this.onFocus(event);
- },
+ }
handleMouseMove (event) {
this.onFocus(event);
- },
+ }
handleTouchEnd(event){
// Check if the view is being dragged, In this case
@@ -50,23 +50,24 @@ const Option = createClass({
if(this.dragging) return;
this.handleMouseDown(event);
- },
+ }
handleTouchMove (event) {
// Set a flag that the view is being dragged
this.dragging = true;
- },
+ }
handleTouchStart (event) {
// Set a flag that the view is not being dragged
this.dragging = false;
- },
+ }
onFocus (event) {
if (!this.props.isFocused) {
this.props.onFocus(this.props.option, event);
}
- },
+ }
+
render () {
var { option, instancePrefix, optionIndex } = this.props;
var className = classNames(this.props.className, option.className);
@@ -93,6 +94,20 @@ const Option = createClass({
);
}
-});
+};
+
+Option.propTypes = {
+ children: PropTypes.node,
+ className: PropTypes.string, // className (based on mouse position)
+ instancePrefix: PropTypes.string.isRequired, // unique prefix for the ids (used for aria)
+ isDisabled: PropTypes.bool, // the option is disabled
+ isFocused: PropTypes.bool, // the option is focused
+ isSelected: PropTypes.bool, // the option is selected
+ onFocus: PropTypes.func, // method to handle mouseEnter on option element
+ onSelect: PropTypes.func, // method to handle click on option element
+ onUnfocus: PropTypes.func, // method to handle mouseLeave on option element
+ option: PropTypes.object.isRequired, // object that is base for that option
+ optionIndex: PropTypes.number, // index of the option, used to generate unique ids for aria
+};
-module.exports = Option;
+export default Option;
diff --git a/src/OptionGroup.js b/src/OptionGroup.js
index 3e8a591b..721b8a29 100644
--- a/src/OptionGroup.js
+++ b/src/OptionGroup.js
@@ -1,15 +1,8 @@
import React from 'react';
-import createClass from 'create-react-class';
import PropTypes from 'prop-types';
import classNames from 'classnames';
-const OptionGroup = createClass({
- propTypes: {
- children: PropTypes.any,
- className: PropTypes.string, // className (based on mouse position)
- label: PropTypes.node, // the heading to show above the child options
- option: PropTypes.object.isRequired, // object that is base for that option group
- },
+class OptionGroup extends React.Component {
blockEvent (event) {
event.preventDefault();
@@ -22,12 +15,12 @@ const OptionGroup = createClass({
} else {
window.location.href = event.target.href;
}
- },
+ }
handleMouseDown (event) {
event.preventDefault();
event.stopPropagation();
- },
+ }
handleTouchEnd(event){
// Check if the view is being dragged, In this case
@@ -35,17 +28,17 @@ const OptionGroup = createClass({
if(this.dragging) return;
this.handleMouseDown(event);
- },
+ }
handleTouchMove (event) {
// Set a flag that the view is being dragged
this.dragging = true;
- },
+ }
handleTouchStart (event) {
// Set a flag that the view is not being dragged
this.dragging = false;
- },
+ }
render () {
var { option } = this.props;
@@ -74,6 +67,13 @@ const OptionGroup = createClass({
);
}
-});
+};
+
+OptionGroup.propTypes = {
+ children: PropTypes.any,
+ className: PropTypes.string, // className (based on mouse position)
+ label: PropTypes.node, // the heading to show above the child options
+ option: PropTypes.object.isRequired, // object that is base for that option group
+};
-module.exports = OptionGroup;
+export default OptionGroup;
diff --git a/src/Select.js b/src/Select.js
index a844483a..e1706909 100644
--- a/src/Select.js
+++ b/src/Select.js
@@ -1,11 +1,9 @@
/*!
- Copyright (c) 2016 Jed Watson.
+ Copyright (c) 2017 Jed Watson.
Licensed under the MIT License (MIT), see
http://jedwatson.github.io/react-select
*/
-
import React from 'react';
-import createClass from 'create-react-class';
import PropTypes from 'prop-types';
import ReactDOM from 'react-dom';
import AutosizeInput from 'react-input-autosize';
@@ -16,9 +14,6 @@ import defaultFilterOptions from './utils/defaultFilterOptions';
import defaultMenuRenderer from './utils/defaultMenuRenderer';
import defaultClearRenderer from './utils/defaultClearRenderer';
-import Async from './Async';
-import AsyncCreatable from './AsyncCreatable';
-import Creatable from './Creatable';
import Dropdown from './Dropdown';
import Option from './Option';
import OptionGroup from './OptionGroup';
@@ -28,225 +23,116 @@ function clone(obj) {
const copy = {};
for (let attr in obj) {
if (obj.hasOwnProperty(attr)) {
- copy[attr] = obj[attr];
+ copy[attr] = obj[attr];
};
}
return copy;
}
function isGroup (option) {
- return option && Array.isArray(option.options);
+ return option && Array.isArray(option.options);
}
-function stringifyValue (value) {
- const valueType = typeof value;
- if (valueType === 'string') {
- return value;
- } else if (valueType === 'object') {
- return JSON.stringify(value);
- } else if (valueType === 'number' || valueType === 'boolean') {
- return String(value);
- } else {
- return '';
- }
-}
+const stringifyValue = value =>
+ typeof value === 'string'
+ ? value
+ : (value !== null && JSON.stringify(value)) || '';
const stringOrNode = PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.node
+ PropTypes.string,
+ PropTypes.node,
]);
let instanceId = 1;
-const invalidOptions = {};
-
-const Select = createClass({
-
- displayName: 'Select',
-
- propTypes: {
- addLabelText: PropTypes.string, // placeholder displayed when you want to add a label on a multi-value input
- '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)
- 'aria-labelledby': PropTypes.string, // HTML ID of an element that should be used as the label (for assistive tech)
- arrowRenderer: PropTypes.func, // Create drop-down caret element
- autoBlur: PropTypes.bool, // automatically blur the component when an option is selected
- autofocus: PropTypes.bool, // autofocus the component on mount
- autosize: PropTypes.bool, // whether to enable autosizing or not
- backspaceRemoves: PropTypes.bool, // whether backspace removes an item if there is no text input
- backspaceToRemoveMessage: PropTypes.string, // Message to use for screenreaders to press backspace to remove the current item - {label} is replaced with the item label
- className: PropTypes.string, // className for the outer element
- clearAllText: stringOrNode, // title for the "clear" control when multi: true
- clearRenderer: PropTypes.func, // create clearable x element
- clearValueText: stringOrNode, // title for the "clear" control
- clearable: PropTypes.bool, // should it be possible to reset value
- deleteRemoves: PropTypes.bool, // whether backspace removes an item if there is no text input
- delimiter: PropTypes.string, // delimiter to use to join multiple values for the hidden field value
- disabled: PropTypes.bool, // whether the Select is disabled or not
- dropdownComponent: PropTypes.func, // dropdown component to render the menu in
- escapeClearsValue: PropTypes.bool, // whether escape clears the value when the menu is closed
- filterOption: PropTypes.func, // method to filter a single option (option, filterString)
- filterOptions: PropTypes.any, // boolean to enable default filtering or function to filter the options array ([options], filterString, [values])
- ignoreAccents: PropTypes.bool, // whether to strip diacritics when filtering
- ignoreCase: PropTypes.bool, // whether to perform case-insensitive filtering
- inputProps: PropTypes.object, // custom attributes for the Input
- inputRenderer: PropTypes.func, // returns a custom input component
- instanceId: PropTypes.string, // set the components instanceId
- isLoading: PropTypes.bool, // whether the Select is loading externally or not (such as options being loaded)
- isOpen: PropTypes.bool, // whether the Select dropdown menu is open or not
- joinValues: PropTypes.bool, // joins multiple values into a single form field with the delimiter (legacy mode)
- labelKey: PropTypes.string, // path of the label value in option objects
- matchPos: PropTypes.string, // (any|start) match the start or entire string when filtering
- matchProp: PropTypes.string, // (any|label|value) which option property to filter on
- menuBuffer: PropTypes.number, // optional buffer (in px) between the bottom of the viewport and the bottom of the menu
- menuContainerStyle: PropTypes.object, // optional style to apply to the menu container
- menuRenderer: PropTypes.func, // renders a custom menu with options
- menuStyle: PropTypes.object, // optional style to apply to the menu
- multi: PropTypes.bool, // multi-value input
- name: PropTypes.string, // generates a hidden tag with this field name for html forms
- noResultsText: stringOrNode, // placeholder displayed when there are no matching search results
- onBlur: PropTypes.func, // onBlur handler: function (event) {}
- onBlurResetsInput: PropTypes.bool, // whether input is cleared on blur
- onChange: PropTypes.func, // onChange handler: function (newValue) {}
- onClose: PropTypes.func, // fires when the menu is closed
- onCloseResetsInput: PropTypes.bool, // whether input is cleared when menu is closed through the arrow
- onFocus: PropTypes.func, // onFocus handler: function (event) {}
- onInputChange: PropTypes.func, // onInputChange handler: function (inputValue) {}
- onInputKeyDown: PropTypes.func, // input keyDown handler: function (event) {}
- onMenuScrollToBottom: PropTypes.func, // fires when the menu is scrolled to the bottom; can be used to paginate options
- onOpen: PropTypes.func, // fires when the menu is opened
- onValueClick: PropTypes.func, // onClick handler for value labels: function (value, event) {}
- openAfterFocus: PropTypes.bool, // boolean to enable opening dropdown when focused
- openOnFocus: PropTypes.bool, // always open options menu on focus
- optionClassName: PropTypes.string, // additional class(es) to apply to the elements
- optionComponent: PropTypes.func, // option component to render in dropdown
- optionGroupComponent: PropTypes.func, // option group component to render in dropdown
- optionRenderer: PropTypes.func, // optionRenderer: function (option) {}
- options: PropTypes.array, // array of options
- pageSize: PropTypes.number, // number of entries to page when using page up/down keys
- placeholder: stringOrNode, // field placeholder, displayed when there's no value
- renderInvalidValues: PropTypes.bool, // boolean to enable rendering values that do not match any options
- required: PropTypes.bool, // applies HTML5 required attribute when needed
- resetValue: PropTypes.any, // value to use when you clear the control
- scrollMenuIntoView: PropTypes.bool, // boolean to enable the viewport to shift so that the full menu fully visible when engaged
- searchable: PropTypes.bool, // whether to enable searching feature or not
- simpleValue: PropTypes.bool, // pass the value to onChange as a simple value (legacy pre 1.0 mode), defaults to false
- style: PropTypes.object, // optional style to apply to the control
- tabIndex: PropTypes.string, // optional tab index of the control
- tabSelectsValue: PropTypes.bool, // whether to treat tabbing out while focused to be value selection
- value: PropTypes.any, // initial field value
- valueComponent: PropTypes.func, // value component to render
- valueKey: PropTypes.string, // path of the label value in option objects
- valueRenderer: PropTypes.func, // valueRenderer: function (option) {}
- wrapperStyle: PropTypes.object, // optional style to apply to the component wrapper
- },
-
- statics: { Async, AsyncCreatable, Creatable },
-
- getDefaultProps () {
- return {
- addLabelText: 'Add "{label}"?',
- arrowRenderer: defaultArrowRenderer,
- autosize: true,
- backspaceRemoves: true,
- backspaceToRemoveMessage: 'Press backspace to remove {label}',
- clearable: true,
- clearAllText: 'Clear all',
- clearRenderer: defaultClearRenderer,
- clearValueText: 'Clear value',
- deleteRemoves: true,
- delimiter: ',',
- disabled: false,
- dropdownComponent: Dropdown,
- escapeClearsValue: true,
- filterOptions: defaultFilterOptions,
- ignoreAccents: true,
- ignoreCase: true,
- inputProps: {},
- isLoading: false,
- joinValues: false,
- labelKey: 'label',
- matchPos: 'any',
- matchProp: 'any',
- menuBuffer: 0,
- menuRenderer: defaultMenuRenderer,
- multi: false,
- noResultsText: 'No results found',
- onBlurResetsInput: true,
- onCloseResetsInput: true,
- optionComponent: Option,
- optionGroupComponent: OptionGroup,
- pageSize: 5,
- placeholder: 'Select...',
- renderInvalidValues: false,
- required: false,
- scrollMenuIntoView: true,
- searchable: true,
- simpleValue: false,
- tabSelectsValue: true,
- valueComponent: Value,
- valueKey: 'value',
- };
- },
-
- getInitialState () {
- return {
- inputValue: '',
- isFocused: false,
- isOpen: false,
- isPseudoFocused: false,
- required: false,
- };
- },
-
- componentWillMount () {
- this._flatOptions = this.flattenOptions(this.props.options);
- this._instancePrefix = 'react-select-' + (this.props.instanceId || ++instanceId) + '-';
- const valueArray = this.getValueArray(this.props.value);
-
- if (this.props.required) {
- this.setState({
- required: this.handleRequired(valueArray[0], this.props.multi),
- });
- }
- },
-
- componentDidMount () {
- if (this.props.autofocus) {
- this.focus();
- }
- },
-
- componentWillReceiveProps (nextProps) {
- if (nextProps.options !== this.props.options) {
- this._flatOptions = this.flattenOptions(nextProps.options);
- }
-
- const valueArray = this.getValueArray(nextProps.value, nextProps);
+class Select extends React.Component {
+ constructor (props) {
+ super(props);
+ [
+ 'clearValue',
+ 'focusOption',
+ 'handleInputBlur',
+ 'handleInputChange',
+ 'handleInputFocus',
+ 'handleInputValueChange',
+ 'handleKeyDown',
+ 'handleMenuScroll',
+ 'handleMouseDown',
+ 'handleMouseDownOnArrow',
+ 'handleMouseDownOnMenu',
+ 'handleRequired',
+ 'handleTouchOutside',
+ 'handleTouchMove',
+ 'handleTouchStart',
+ 'handleTouchEnd',
+ 'handleTouchEndClearValue',
+ 'handleValueClick',
+ 'getOptionLabel',
+ 'onOptionRef',
+ 'removeValue',
+ 'selectValue',
+ ].forEach((fn) => this[fn] = this[fn].bind(this));
+
+ this.state = {
+ inputValue: '',
+ isFocused: false,
+ isOpen: false,
+ isPseudoFocused: false,
+ required: false,
+ };
+ }
+
+ componentWillMount () {
+ this._flatOptions = this.flattenOptions(this.props.options);
+ this._instancePrefix = 'react-select-' + (this.props.instanceId || ++instanceId) + '-';
+ const valueArray = this.getValueArray(this.props.value);
+
+ if (this.props.required) {
+ this.setState({
+ required: this.handleRequired(valueArray[0], this.props.multi),
+ });
+ }
+ }
+
+ componentDidMount () {
+ if (this.props.autofocus) {
+ this.focus();
+ }
+ }
+
+ componentWillReceiveProps (nextProps) {
+ if (nextProps.options !== this.props.options) {
+ this._flatOptions = this.flattenOptions(nextProps.options);
+ }
+
+ const valueArray = this.getValueArray(nextProps.value, nextProps);
if (!nextProps.isOpen && this.props.isOpen) {
this.closeMenu();
}
- if (nextProps.required) {
- this.setState({
- required: this.handleRequired(valueArray[0], nextProps.multi),
- });
- }
- },
-
- componentWillUpdate (nextProps, nextState) {
- if (nextState.isOpen !== this.state.isOpen) {
- this.toggleTouchOutsideEvent(nextState.isOpen);
- const handler = nextState.isOpen ? nextProps.onOpen : nextProps.onClose;
- handler && handler();
- }
- },
-
- componentDidUpdate (prevProps, prevState) {
- // focus to the selected option
- if (this.menu && this.focused && this.state.isOpen && !this.hasScrolledToOption) {
- let focusedOptionNode = ReactDOM.findDOMNode(this.focused);
+ if (nextProps.required) {
+ this.setState({
+ required: this.handleRequired(valueArray[0], nextProps.multi),
+ });
+ } else if (this.props.required) {
+ // Used to be required but it's not any more
+ this.setState({ required: false });
+ }
+ }
+
+ componentWillUpdate (nextProps, nextState) {
+ if (nextState.isOpen !== this.state.isOpen) {
+ this.toggleTouchOutsideEvent(nextState.isOpen);
+ const handler = nextState.isOpen ? nextProps.onOpen : nextProps.onClose;
+ handler && handler();
+ }
+ }
+
+ componentDidUpdate (prevProps, prevState) {
+ // focus to the selected option
+ if (this.menu && this.focused && this.state.isOpen && !this.hasScrolledToOption) {
+ let focusedOptionNode = ReactDOM.findDOMNode(this.focused);
let focusedOptionPreviousSibling = focusedOptionNode.previousSibling;
let focusedOptionParent = focusedOptionNode.parentElement;
let menuNode = ReactDOM.findDOMNode(this.menu);
@@ -257,739 +143,755 @@ const Select = createClass({
} else {
menuNode.scrollTop = focusedOptionNode.offsetTop;
}
- this.hasScrolledToOption = true;
- } else if (!this.state.isOpen) {
- this.hasScrolledToOption = false;
- }
-
- if (this._scrollToFocusedOptionOnUpdate && this.focused && this.menu) {
- this._scrollToFocusedOptionOnUpdate = false;
- var focusedDOM = ReactDOM.findDOMNode(this.focused);
- var menuDOM = ReactDOM.findDOMNode(this.menu);
- var focusedRect = focusedDOM.getBoundingClientRect();
- var menuRect = menuDOM.getBoundingClientRect();
- if (focusedRect.bottom > menuRect.bottom || focusedRect.top < menuRect.top) {
- menuDOM.scrollTop = (focusedDOM.offsetTop + focusedDOM.clientHeight - menuDOM.offsetHeight);
- }
- }
- if (this.props.scrollMenuIntoView && this.menuContainer) {
- var menuContainerRect = this.menuContainer.getBoundingClientRect();
- if (window.innerHeight < menuContainerRect.bottom + this.props.menuBuffer) {
- window.scrollBy(0, menuContainerRect.bottom + this.props.menuBuffer - window.innerHeight);
- }
- }
- if (prevProps.disabled !== this.props.disabled) {
- this.setState({ isFocused: false }); // eslint-disable-line react/no-did-update-set-state
- this.closeMenu();
- }
- },
-
- componentWillUnmount () {
- if (!document.removeEventListener && document.detachEvent) {
- document.detachEvent('ontouchstart', this.handleTouchOutside);
- } else {
- document.removeEventListener('touchstart', this.handleTouchOutside);
- }
- },
-
- toggleTouchOutsideEvent (enabled) {
- if (enabled) {
- if (!document.addEventListener && document.attachEvent) {
- document.attachEvent('ontouchstart', this.handleTouchOutside);
- } else {
- document.addEventListener('touchstart', this.handleTouchOutside);
- }
- } else {
- if (!document.removeEventListener && document.detachEvent) {
- document.detachEvent('ontouchstart', this.handleTouchOutside);
- } else {
- document.removeEventListener('touchstart', this.handleTouchOutside);
- }
- }
- },
-
- handleTouchOutside (event) {
- // handle touch outside on ios to dismiss menu
- if (this.wrapper && !this.wrapper.contains(event.target) &&
+ this.hasScrolledToOption = true;
+ } else if (!this.state.isOpen) {
+ this.hasScrolledToOption = false;
+ }
+
+ if (this._scrollToFocusedOptionOnUpdate && this.focused && this.menu) {
+ this._scrollToFocusedOptionOnUpdate = false;
+ var focusedDOM = ReactDOM.findDOMNode(this.focused);
+ var menuDOM = ReactDOM.findDOMNode(this.menu);
+ var focusedRect = focusedDOM.getBoundingClientRect();
+ var menuRect = menuDOM.getBoundingClientRect();
+ if (focusedRect.bottom > menuRect.bottom) {
+ menuDOM.scrollTop = (focusedDOM.offsetTop + focusedDOM.clientHeight - menuDOM.offsetHeight);
+ } else if (focusedRect.top < menuRect.top) {
+ menuDOM.scrollTop = focusedDOM.offsetTop;
+ }
+ }
+ if (this.props.scrollMenuIntoView && this.menuContainer) {
+ var menuContainerRect = this.menuContainer.getBoundingClientRect();
+ if (window.innerHeight < menuContainerRect.bottom + this.props.menuBuffer) {
+ window.scrollBy(0, menuContainerRect.bottom + this.props.menuBuffer - window.innerHeight);
+ }
+ }
+ if (prevProps.disabled !== this.props.disabled) {
+ this.setState({ isFocused: false }); // eslint-disable-line react/no-did-update-set-state
+ this.closeMenu();
+ }
+ }
+
+ componentWillUnmount () {
+ if (!document.removeEventListener && document.detachEvent) {
+ document.detachEvent('ontouchstart', this.handleTouchOutside);
+ } else {
+ document.removeEventListener('touchstart', this.handleTouchOutside);
+ }
+ }
+
+ toggleTouchOutsideEvent (enabled) {
+ if (enabled) {
+ if (!document.addEventListener && document.attachEvent) {
+ document.attachEvent('ontouchstart', this.handleTouchOutside);
+ } else {
+ document.addEventListener('touchstart', this.handleTouchOutside);
+ }
+ } else {
+ if (!document.removeEventListener && document.detachEvent) {
+ document.detachEvent('ontouchstart', this.handleTouchOutside);
+ } else {
+ document.removeEventListener('touchstart', this.handleTouchOutside);
+ }
+ }
+ }
+
+ handleTouchOutside (event) {
+ // handle touch outside on ios to dismiss menu
+ if (this.wrapper && !this.wrapper.contains(event.target) &&
this.menuContainer && !this.menuContainer.contains(event.target)) {
- this.closeMenu();
- }
- },
-
- focus () {
- if (!this.input) return;
- this.input.focus();
- },
-
- blurInput () {
- if (!this.input) return;
- this.input.blur();
- },
-
- handleTouchMove (event) {
- // Set a flag that the view is being dragged
- this.dragging = true;
- },
-
- handleTouchStart (event) {
- // Set a flag that the view is not being dragged
- this.dragging = false;
- },
-
- handleTouchEnd (event) {
- // Check if the view is being dragged, In this case
- // we don't want to fire the click event (because the user only wants to scroll)
- if (this.dragging) return;
-
- // Fire the mouse events
- this.handleMouseDown(event);
- },
-
- handleTouchEndClearValue (event) {
- // Check if the view is being dragged, In this case
- // we don't want to fire the click event (because the user only wants to scroll)
- if (this.dragging) return;
-
- // Clear the value
- this.clearValue(event);
- },
-
- handleMouseDown (event) {
- // if the event was triggered by a mousedown and not the primary
- // button, or if the component is disabled, ignore it.
- if (this.props.disabled || (event.type === 'mousedown' && event.button !== 0)) {
- return;
- }
-
- if (event.target.tagName === 'INPUT') {
- return;
- }
-
- // prevent default event handlers
- event.stopPropagation();
- event.preventDefault();
-
- // for the non-searchable select, toggle the menu
- if (!this.props.searchable) {
- this.focus();
- return this.setState({
- isOpen: !this.state.isOpen,
- });
- }
-
- if (this.state.isFocused) {
- // On iOS, we can get into a state where we think the input is focused but it isn't really,
- // since iOS ignores programmatic calls to input.focus() that weren't triggered by a click event.
- // Call focus() again here to be safe.
- this.focus();
-
- let input = this.input;
- if (typeof input.getInput === 'function') {
- // Get the actual DOM input if the ref is an component
- input = input.getInput();
- }
-
- // clears the value so that the cursor will be at the end of input when the component re-renders
- input.value = '';
-
- // if the input is focused, ensure the menu is open
- this.setState({
- isOpen: true,
- isPseudoFocused: false,
- });
- } else {
- // otherwise, focus the input and open the menu
- this._openAfterFocus = true;
- this.focus();
- }
- },
-
- handleMouseDownOnArrow (event) {
- // if the event was triggered by a mousedown and not the primary
- // button, or if the component is disabled, ignore it.
- if (this.props.disabled || (event.type === 'mousedown' && event.button !== 0)) {
- return;
- }
- // If the menu isn't open, let the event bubble to the main handleMouseDown
- if (!this.state.isOpen) {
- return;
- }
- // prevent default event handlers
- event.stopPropagation();
- event.preventDefault();
- // close the menu
- this.closeMenu();
- },
-
- handleMouseDownOnMenu (event) {
- // if the event was triggered by a mousedown and not the primary
- // button, or if the component is disabled, ignore it.
- if (this.props.disabled || (event.type === 'mousedown' && event.button !== 0)) {
- return;
- }
- event.stopPropagation();
- event.preventDefault();
-
- this._openAfterFocus = true;
- this.focus();
- },
-
- closeMenu () {
- if(this.props.onCloseResetsInput) {
- this.setState({
- isOpen: false,
- isPseudoFocused: this.state.isFocused && !this.props.multi,
- inputValue: ''
- });
- } else {
- this.setState({
- isOpen: false,
- isPseudoFocused: this.state.isFocused && !this.props.multi,
- inputValue: this.state.inputValue
- });
- }
- this.hasScrolledToOption = false;
- },
-
- handleInputFocus (event) {
- if (this.props.disabled) return;
- var isOpen = this.state.isOpen || this._openAfterFocus || this.props.openOnFocus;
- if (this.props.onFocus) {
- this.props.onFocus(event);
- }
- this.setState({
- isFocused: true,
- isOpen: isOpen
- });
- this._openAfterFocus = false;
- },
-
- handleInputBlur (event) {
- // The check for menu.contains(activeElement) is necessary to prevent IE11's scrollbar from closing the menu in certain contexts.
- if (this.menu && (this.menu === document.activeElement || this.menu.contains(document.activeElement))) {
- this.focus();
- return;
- }
-
- if (this.props.onBlur) {
- this.props.onBlur(event);
- }
- var onBlurredState = {
- isFocused: false,
- isOpen: false,
- isPseudoFocused: false,
- };
- if (this.props.onBlurResetsInput) {
- onBlurredState.inputValue = '';
- }
- this.setState(onBlurredState);
- },
-
- handleInputChange (event) {
- let newInputValue = event.target.value;
-
- if (this.state.inputValue !== event.target.value && this.props.onInputChange) {
- let nextState = this.props.onInputChange(newInputValue);
- // Note: != used deliberately here to catch undefined and null
- if (nextState != null && typeof nextState !== 'object') {
- newInputValue = '' + nextState;
- }
- }
-
- this.setState({
- isOpen: true,
- isPseudoFocused: false,
- inputValue: newInputValue,
- });
- },
-
- handleKeyDown (event) {
- if (this.props.disabled) return;
-
- if (typeof this.props.onInputKeyDown === 'function') {
- this.props.onInputKeyDown(event);
- if (event.defaultPrevented) {
- return;
- }
- }
-
- switch (event.keyCode) {
- case 8: // backspace
- if (!this.state.inputValue && this.props.backspaceRemoves) {
- event.preventDefault();
- this.popValue();
- }
- return;
- case 9: // tab
- if (event.shiftKey || !this.state.isOpen || !this.props.tabSelectsValue) {
- return;
- }
- this.selectFocusedOption();
- return;
- case 13: // enter
- if (!this.state.isOpen) return;
- event.stopPropagation();
- this.selectFocusedOption();
- break;
- case 27: // escape
- if (this.state.isOpen) {
- this.closeMenu();
- event.stopPropagation();
- } else if (this.props.clearable && this.props.escapeClearsValue) {
- this.clearValue(event);
- event.stopPropagation();
- }
- break;
- case 38: // up
- this.focusPreviousOption();
- break;
- case 40: // down
- this.focusNextOption();
- break;
- case 33: // page up
- this.focusPageUpOption();
- break;
- case 34: // page down
- this.focusPageDownOption();
- break;
- case 35: // end key
- if (event.shiftKey) {
- return;
- }
- this.focusEndOption();
- break;
- case 36: // home key
- if (event.shiftKey) {
- return;
- }
- this.focusStartOption();
- break;
- case 46: // backspace
- if (!this.state.inputValue && this.props.deleteRemoves) {
- event.preventDefault();
- this.popValue();
- }
- return;
- default: return;
- }
- event.preventDefault();
- },
-
- handleValueClick (option, event) {
- if (!this.props.onValueClick) return;
- this.props.onValueClick(option, event);
- },
-
- handleMenuScroll (event) {
- if (!this.props.onMenuScrollToBottom) return;
- let { target } = event;
- if (target.scrollHeight > target.offsetHeight && !(target.scrollHeight - target.offsetHeight - target.scrollTop)) {
- this.props.onMenuScrollToBottom();
- }
- },
-
- handleRequired (value, multi) {
- if (!value) return true;
- return (multi ? value.length === 0 : Object.keys(value).length === 0);
- },
-
- 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
- */
- getValueArray (value, nextProps) {
- /** support optionally passing in the `nextProps` so `componentWillReceiveProps` updates will function as expected */
- const props = typeof nextProps === 'object' ? nextProps : this.props;
- if (props.multi) {
- if (typeof value === 'string') value = value.split(props.delimiter);
- if (!Array.isArray(value)) {
- if (value === null || value === undefined) return [];
- value = [value];
- }
- return value.map(value => this.expandValue(value, props)).filter(i => i);
- }
- var expandedValue = this.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)
- */
- expandValue (value, props) {
+ this.closeMenu();
+ }
+ }
+
+ focus () {
+ if (!this.input) return;
+ this.input.focus();
+ }
+
+ blurInput () {
+ if (!this.input) return;
+ this.input.blur();
+ }
+
+ handleTouchMove (event) {
+ // Set a flag that the view is being dragged
+ this.dragging = true;
+ }
+
+ handleTouchStart (event) {
+ // Set a flag that the view is not being dragged
+ this.dragging = false;
+ }
+
+ handleTouchEnd (event) {
+ // Check if the view is being dragged, In this case
+ // we don't want to fire the click event (because the user only wants to scroll)
+ if (this.dragging) return;
+
+ // Fire the mouse events
+ this.handleMouseDown(event);
+ }
+
+ handleTouchEndClearValue (event) {
+ // Check if the view is being dragged, In this case
+ // we don't want to fire the click event (because the user only wants to scroll)
+ if (this.dragging) return;
+
+ // Clear the value
+ this.clearValue(event);
+ }
+
+ handleMouseDown (event) {
+ // if the event was triggered by a mousedown and not the primary
+ // button, or if the component is disabled, ignore it.
+ if (this.props.disabled || (event.type === 'mousedown' && event.button !== 0)) {
+ return;
+ }
+
+ if (event.target.tagName === 'INPUT') {
+ return;
+ }
+
+ // prevent default event handlers
+ event.stopPropagation();
+ event.preventDefault();
+
+ // 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.focus();
+ return this.setState({
+ isOpen: !this.state.isOpen,
+ });
+ }
+
+ if (this.state.isFocused) {
+ // On iOS, we can get into a state where we think the input is focused but it isn't really,
+ // since iOS ignores programmatic calls to input.focus() that weren't triggered by a click event.
+ // Call focus() again here to be safe.
+ this.focus();
+
+ let input = this.input;
+ if (typeof input.getInput === 'function') {
+ // Get the actual DOM input if the ref is an component
+ input = input.getInput();
+ }
+
+ // clears the value so that the cursor will be at the end of input when the component re-renders
+ input.value = '';
+
+ // if the input is focused, ensure the menu is open
+ this.setState({
+ isOpen: true,
+ isPseudoFocused: false,
+ });
+ } else {
+ // otherwise, focus the input and open the menu
+ this._openAfterFocus = this.props.openOnClick;
+ this.focus();
+ }
+ }
+
+ handleMouseDownOnArrow (event) {
+ // if the event was triggered by a mousedown and not the primary
+ // button, or if the component is disabled, ignore it.
+ if (this.props.disabled || (event.type === 'mousedown' && event.button !== 0)) {
+ return;
+ }
+ // If the menu isn't open, let the event bubble to the main handleMouseDown
+ if (!this.state.isOpen) {
+ return;
+ }
+ // prevent default event handlers
+ event.stopPropagation();
+ event.preventDefault();
+ // close the menu
+ this.closeMenu();
+ }
+
+ handleMouseDownOnMenu (event) {
+ // if the event was triggered by a mousedown and not the primary
+ // button, or if the component is disabled, ignore it.
+ if (this.props.disabled || (event.type === 'mousedown' && event.button !== 0)) {
+ return;
+ }
+ event.stopPropagation();
+ event.preventDefault();
+
+ this._openAfterFocus = true;
+ this.focus();
+ }
+
+ closeMenu () {
+ if(this.props.onCloseResetsInput) {
+ this.setState({
+ isOpen: false,
+ isPseudoFocused: this.state.isFocused && !this.props.multi,
+ inputValue: this.handleInputValueChange('')
+ });
+ } else {
+ this.setState({
+ isOpen: false,
+ isPseudoFocused: this.state.isFocused && !this.props.multi
+ });
+ }
+ this.hasScrolledToOption = false;
+ }
+
+ handleInputFocus (event) {
+ if (this.props.disabled) return;
+ var isOpen = this.state.isOpen || this._openAfterFocus || this.props.openOnFocus;
+ if (this.props.onFocus) {
+ this.props.onFocus(event);
+ }
+ this.setState({
+ isFocused: true,
+ isOpen: isOpen,
+ });
+ this._openAfterFocus = false;
+ }
+
+ handleInputBlur (event) {
+ // The check for menu.contains(activeElement) is necessary to prevent IE11's scrollbar from closing the menu in certain contexts.
+ if (this.menu && (this.menu === document.activeElement || this.menu.contains(document.activeElement))) {
+ this.focus();
+ return;
+ }
+
+ if (this.props.onBlur) {
+ this.props.onBlur(event);
+ }
+ var onBlurredState = {
+ isFocused: false,
+ isOpen: false,
+ isPseudoFocused: false,
+ };
+ if (this.props.onBlurResetsInput) {
+ onBlurredState.inputValue = this.handleInputValueChange('');
+ }
+ this.setState(onBlurredState);
+ }
+
+ handleInputChange (event) {
+ let newInputValue = event.target.value;
+
+ if (this.state.inputValue !== event.target.value) {
+ newInputValue = this.handleInputValueChange(newInputValue);
+ }
+
+ this.setState({
+ isOpen: true,
+ isPseudoFocused: false,
+ inputValue: newInputValue,
+ });
+ }
+
+ handleInputValueChange(newValue) {
+ if (this.props.onInputChange) {
+ let nextState = this.props.onInputChange(newValue);
+ // Note: != used deliberately here to catch undefined and null
+ if (nextState != null && typeof nextState !== 'object') {
+ newValue = '' + nextState;
+ }
+ }
+ return newValue;
+ }
+
+ handleKeyDown (event) {
+ if (this.props.disabled) return;
+
+ if (typeof this.props.onInputKeyDown === 'function') {
+ this.props.onInputKeyDown(event);
+ if (event.defaultPrevented) {
+ return;
+ }
+ }
+
+ switch (event.keyCode) {
+ case 8: // backspace
+ if (!this.state.inputValue && this.props.backspaceRemoves) {
+ event.preventDefault();
+ this.popValue();
+ }
+ return;
+ case 9: // tab
+ if (event.shiftKey || !this.state.isOpen || !this.props.tabSelectsValue) {
+ return;
+ }
+ this.selectFocusedOption();
+ return;
+ case 13: // enter
+ if (!this.state.isOpen) return;
+ event.stopPropagation();
+ this.selectFocusedOption();
+ break;
+ case 27: // escape
+ if (this.state.isOpen) {
+ this.closeMenu();
+ event.stopPropagation();
+ } else if (this.props.clearable && this.props.escapeClearsValue) {
+ this.clearValue(event);
+ event.stopPropagation();
+ }
+ break;
+ case 38: // up
+ this.focusPreviousOption();
+ break;
+ case 40: // down
+ this.focusNextOption();
+ break;
+ case 33: // page up
+ this.focusPageUpOption();
+ break;
+ case 34: // page down
+ this.focusPageDownOption();
+ break;
+ case 35: // end key
+ if (event.shiftKey) {
+ return;
+ }
+ this.focusEndOption();
+ break;
+ case 36: // home key
+ if (event.shiftKey) {
+ return;
+ }
+ this.focusStartOption();
+ break;
+ case 46: // backspace
+ if (!this.state.inputValue && this.props.deleteRemoves) {
+ event.preventDefault();
+ this.popValue();
+ }
+ return;
+ default: return;
+ }
+ event.preventDefault();
+ }
+
+ handleValueClick (option, event) {
+ if (!this.props.onValueClick) return;
+ this.props.onValueClick(option, event);
+ }
+
+ handleMenuScroll (event) {
+ if (!this.props.onMenuScrollToBottom) return;
+ let { target } = event;
+ if (target.scrollHeight > target.offsetHeight && (target.scrollHeight - target.offsetHeight - target.scrollTop) <= 0) {
+ this.props.onMenuScrollToBottom();
+ }
+ }
+
+ handleRequired (value, multi) {
+ if (!value) return true;
+ return (multi ? value.length === 0 : Object.keys(value).length === 0);
+ }
+
+ 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
+ */
+ getValueArray (value, nextProps) {
+ /** support optionally passing in the `nextProps` so `componentWillReceiveProps` updates will function as expected */
+ const props = typeof nextProps === 'object' ? nextProps : this.props;
+ if (props.multi) {
+ if (typeof value === 'string') value = value.split(props.delimiter);
+ if (!Array.isArray(value)) {
+ if (value === null || value === undefined) return [];
+ value = [value];
+ }
+ return value.map(value => this.expandValue(value, props)).filter(i => i);
+ }
+ var expandedValue = this.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)
+ */
+ expandValue (value, props) {
const valueType = typeof value;
if (valueType !== 'string' && valueType !== 'number' && valueType !== 'boolean') return value;
- let { labelKey, valueKey, renderInvalidValues } = this.props;
- let options = this._flatOptions;
- if (!options || value === '') return;
- for (var i = 0; i < options.length; i++) {
- if (options[i][valueKey] === value) return options[i];
- }
-
- // no matching option, return an invalid option if renderInvalidValues is enabled
- if (renderInvalidValues) {
- invalidOptions[value] = invalidOptions[value] || {
- invalid: true,
- [labelKey]: value,
- [valueKey]: value
- };
- return invalidOptions[value];
- }
- },
-
- setValue (value) {
- if (this.props.autoBlur){
- this.blurInput();
- }
- if (!this.props.onChange) return;
- if (this.props.required) {
- const required = this.handleRequired(value, this.props.multi);
- this.setState({ required });
- }
- if (this.props.simpleValue && value) {
- value = this.props.multi ? value.map(i => i[this.props.valueKey]).join(this.props.delimiter) : value[this.props.valueKey];
- }
- this.props.onChange(value);
- },
-
- selectValue (value) {
- //NOTE: update value in the callback to make sure the input value is empty so that there are no styling issues (Chrome had issue otherwise)
- this.hasScrolledToOption = false;
- if (this.props.multi) {
- this.setState({
- inputValue: '',
- focusedIndex: null
- }, () => {
- this.addValue(value);
- });
- } else {
- this.setState({
- isOpen: false,
- inputValue: '',
- isPseudoFocused: this.state.isFocused,
- }, () => {
- this.setValue(value);
- });
- }
- },
-
- addValue (value) {
- var valueArray = this.getValueArray(this.props.value);
- const visibleOptions = this._visibleOptions.filter(val => !val.disabled);
- const lastValueIndex = visibleOptions.indexOf(value);
- this.setValue(valueArray.concat(value));
- if (visibleOptions.length - 1 === lastValueIndex) {
- // the last option was selected; focus the second-last one
- this.focusOption(visibleOptions[lastValueIndex - 1]);
- } else if (visibleOptions.length > lastValueIndex) {
- // focus the option below the selected one
- this.focusOption(visibleOptions[lastValueIndex + 1]);
- }
- },
-
- popValue () {
- var valueArray = this.getValueArray(this.props.value);
- if (!valueArray.length) return;
- if (valueArray[valueArray.length-1].clearableValue === false) return;
- this.setValue(valueArray.slice(0, valueArray.length - 1));
- },
-
- removeValue (value) {
- var valueArray = this.getValueArray(this.props.value);
- this.setValue(valueArray.filter(i => i !== value));
- },
-
- clearValue (event) {
- // if the event was triggered by a mousedown and not the primary
- // button, ignore it.
- if (event && event.type === 'mousedown' && event.button !== 0) {
- return;
- }
- event.stopPropagation();
- event.preventDefault();
- this.setValue(this.getResetValue());
- this.setState({
- isOpen: false,
- inputValue: '',
- }, this.focus);
- },
-
- getResetValue () {
- if (this.props.resetValue !== undefined) {
- return this.props.resetValue;
- } else if (this.props.multi) {
- return [];
- } else {
- return null;
- }
- },
-
- focusOption (option) {
- this.setState({
- focusedOption: option
- });
- },
-
- focusNextOption () {
- this.focusAdjacentOption('next');
- },
-
- focusPreviousOption () {
- this.focusAdjacentOption('previous');
- },
-
- focusPageUpOption () {
- this.focusAdjacentOption('page_up');
- },
-
- focusPageDownOption () {
- this.focusAdjacentOption('page_down');
- },
-
- focusStartOption () {
- this.focusAdjacentOption('start');
- },
-
- focusEndOption () {
- this.focusAdjacentOption('end');
- },
-
- focusAdjacentOption (dir) {
- var options = this._visibleOptions
- .map((option, index) => ({ option, index }))
- .filter(option => !option.option.disabled);
- 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)
- });
- return;
- }
- if (!options.length) return;
- var focusedIndex = -1;
- for (var i = 0; i < options.length; i++) {
- if (this._focusedOption === options[i].option) {
- focusedIndex = i;
- break;
- }
- }
- if (dir === 'next' && focusedIndex !== -1 ) {
- focusedIndex = (focusedIndex + 1) % options.length;
- } else if (dir === 'previous') {
- if (focusedIndex > 0) {
- focusedIndex = focusedIndex - 1;
- } else {
- focusedIndex = options.length - 1;
- }
- } else if (dir === 'start') {
- focusedIndex = 0;
- } else if (dir === 'end') {
- focusedIndex = options.length - 1;
- } else if (dir === 'page_up') {
- var potentialIndex = focusedIndex - this.props.pageSize;
- if (potentialIndex < 0) {
- focusedIndex = 0;
- } else {
- focusedIndex = potentialIndex;
- }
- } else if (dir === 'page_down') {
- var potentialIndex = focusedIndex + this.props.pageSize;
- if (potentialIndex > options.length - 1) {
- focusedIndex = options.length - 1;
- } else {
- focusedIndex = potentialIndex;
- }
- }
-
- if (focusedIndex === -1) {
- focusedIndex = 0;
- }
-
- this.setState({
- focusedIndex: options[focusedIndex].index,
- focusedOption: options[focusedIndex].option
- });
- },
-
- getFocusedOption () {
- return this._focusedOption;
- },
-
- getInputValue () {
- return this.state.inputValue;
- },
-
- selectFocusedOption () {
- if (this._focusedOption) {
- return this.selectValue(this._focusedOption);
- }
- },
-
- renderLoading () {
- if (!this.props.isLoading) return;
- return (
-
-
-
- );
- },
-
- renderValue (valueArray, isOpen) {
- let renderLabel = this.props.valueRenderer || this.getOptionLabel;
- let ValueComponent = this.props.valueComponent;
- if (!valueArray.length) {
- return !this.state.inputValue ? {this.props.placeholder}
: null;
- }
- let onClick = this.props.onValueClick ? this.handleValueClick : null;
- if (this.props.multi) {
- return valueArray.map((value, i) => {
- return (
-
- {renderLabel(value, i)}
-
-
- );
- });
- } else if (!this.state.inputValue) {
- if (isOpen) onClick = null;
- return (
-
- {renderLabel(valueArray[0])}
-
- );
- }
- },
-
- renderInput (valueArray, focusedOptionIndex) {
- var className = classNames('Select-input', this.props.inputProps.className);
- const isOpen = !!this.state.isOpen;
-
- const ariaOwns = classNames({
- [this._instancePrefix + '-list']: isOpen,
- [this._instancePrefix + '-backspace-remove-message']: this.props.multi
- && !this.props.disabled
- && this.state.isFocused
- && !this.state.inputValue
- });
-
- // TODO: Check how this project includes Object.assign()
- const inputProps = Object.assign({}, this.props.inputProps, {
- role: 'combobox',
- 'aria-expanded': '' + isOpen,
- 'aria-owns': ariaOwns,
- 'aria-haspopup': '' + isOpen,
- 'aria-activedescendant': isOpen ? this._instancePrefix + '-option-' + focusedOptionIndex : this._instancePrefix + '-value',
- 'aria-describedby': this.props['aria-describedby'],
- 'aria-labelledby': this.props['aria-labelledby'],
- 'aria-label': this.props['aria-label'],
- className: className,
- tabIndex: this.props.tabIndex,
- onBlur: this.handleInputBlur,
- onChange: this.handleInputChange,
- onFocus: this.handleInputFocus,
- ref: ref => this.input = ref,
- required: this.state.required,
- value: this.state.inputValue
- });
-
- if (this.props.inputRenderer) {
- return this.props.inputRenderer(inputProps);
- }
-
- if (this.props.disabled || !this.props.searchable) {
- const { inputClassName, ...divProps } = this.props.inputProps;
-
- const ariaOwns = classNames({
- [this._instancePrefix + '-list']: isOpen,
- });
-
- return (
- this.input = ref}
- aria-readonly={'' + !!this.props.disabled}
- style={{ border: 0, width: 1, display:'inline-block' }}/>
- );
- }
-
- if (this.props.autosize) {
- return (
-
- );
- }
- return (
-
-
-
- );
- },
-
- renderClear () {
-
- if (!this.props.clearable || this.props.value === undefined || this.props.value === null || this.props.multi && !this.props.value.length || this.props.disabled || this.props.isLoading) return;
- const clear = this.props.clearRenderer();
-
- return (
-
- {clear}
-
- );
- },
-
- renderArrow () {
- const onMouseDown = this.handleMouseDownOnArrow;
- const isOpen = this.state.isOpen;
- const arrow = this.props.arrowRenderer({ onMouseDown, isOpen });
-
- return (
-
- {arrow}
-
- );
- },
-
- filterFlatOptions (excludeOptions) {
- const filterValue = this.state.inputValue;
+ let { labelKey, valueKey, renderInvalidValues } = this.props;
+ let options = this._flatOptions;
+ if (!options || value === '') return;
+ for (var i = 0; i < options.length; i++) {
+ if (options[i][valueKey] === value) return options[i];
+ }
+
+ // no matching option, return an invalid option if renderInvalidValues is enabled
+ if (renderInvalidValues) {
+ this._invalidOptions = this._invalidOptions || {};
+ this._invalidOptions[value] = this._invalidOptions[value] || {
+ invalid: true,
+ [labelKey]: value,
+ [valueKey]: value
+ };
+ return this._invalidOptions[value];
+ }
+ }
+
+ setValue (value) {
+ if (this.props.autoBlur) {
+ this.blurInput();
+ }
+ if (this.props.required) {
+ const required = this.handleRequired(value, this.props.multi);
+ this.setState({ required });
+ }
+ if (this.props.onChange) {
+ if (this.props.simpleValue && value) {
+ value = this.props.multi ? value.map(i => i[this.props.valueKey]).join(this.props.delimiter) : value[this.props.valueKey];
+ }
+ this.props.onChange(value);
+ }
+ }
+
+ selectValue (value) {
+ // NOTE: we actually add/set the value in a callback to make sure the
+ // input value is empty to avoid styling issues in Chrome
+ if (this.props.closeOnSelect) {
+ this.hasScrolledToOption = false;
+ }
+ if (this.props.multi) {
+ const updatedValue = this.props.onSelectResetsInput ? '' : this.state.inputValue;
+ this.setState({
+ focusedIndex: null,
+ inputValue: this.handleInputValueChange(updatedValue),
+ isOpen: !this.props.closeOnSelect,
+ }, () => {
+ this.addValue(value);
+ });
+ } else {
+ this.setState({
+ inputValue: this.handleInputValueChange(''),
+ isOpen: !this.props.closeOnSelect,
+ isPseudoFocused: this.state.isFocused,
+ }, () => {
+ this.setValue(value);
+ });
+ }
+ }
+
+ addValue (value) {
+ var valueArray = this.getValueArray(this.props.value);
+ const visibleOptions = this._visibleOptions.filter(val => !val.disabled);
+ const lastValueIndex = visibleOptions.indexOf(value);
+ this.setValue(valueArray.concat(value));
+ if (visibleOptions.length - 1 === lastValueIndex) {
+ // the last option was selected; focus the second-last one
+ this.focusOption(visibleOptions[lastValueIndex - 1]);
+ } else if (visibleOptions.length > lastValueIndex) {
+ // focus the option below the selected one
+ this.focusOption(visibleOptions[lastValueIndex + 1]);
+ }
+ }
+
+ popValue () {
+ var valueArray = this.getValueArray(this.props.value);
+ if (!valueArray.length) return;
+ if (valueArray[valueArray.length-1].clearableValue === false) return;
+ this.setValue(this.props.multi ? valueArray.slice(0, valueArray.length - 1) : null);
+ }
+
+ removeValue (value) {
+ var valueArray = this.getValueArray(this.props.value);
+ this.setValue(valueArray.filter(i => i !== value));
+ this.focus();
+ }
+
+ clearValue (event) {
+ // if the event was triggered by a mousedown and not the primary
+ // button, ignore it.
+ if (event && event.type === 'mousedown' && event.button !== 0) {
+ return;
+ }
+ event.stopPropagation();
+ event.preventDefault();
+ this.setValue(this.getResetValue());
+ this.setState({
+ isOpen: false,
+ inputValue: this.handleInputValueChange(''),
+ }, this.focus);
+ }
+
+ getResetValue () {
+ if (this.props.resetValue !== undefined) {
+ return this.props.resetValue;
+ } else if (this.props.multi) {
+ return [];
+ } else {
+ return null;
+ }
+ }
+
+ focusOption (option) {
+ this.setState({
+ focusedOption: option
+ });
+ }
+
+ focusNextOption () {
+ this.focusAdjacentOption('next');
+ }
+
+ focusPreviousOption () {
+ this.focusAdjacentOption('previous');
+ }
+
+ focusPageUpOption () {
+ this.focusAdjacentOption('page_up');
+ }
+
+ focusPageDownOption () {
+ this.focusAdjacentOption('page_down');
+ }
+
+ focusStartOption () {
+ this.focusAdjacentOption('start');
+ }
+
+ focusEndOption () {
+ this.focusAdjacentOption('end');
+ }
+
+ focusAdjacentOption (dir) {
+ var options = this._visibleOptions
+ .map((option, index) => ({ option, index }))
+ .filter(option => !option.option.disabled);
+ 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)
+ });
+ return;
+ }
+ if (!options.length) return;
+ var focusedIndex = -1;
+ for (var i = 0; i < options.length; i++) {
+ if (this._focusedOption === options[i].option) {
+ focusedIndex = i;
+ break;
+ }
+ }
+ if (dir === 'next' && focusedIndex !== -1 ) {
+ focusedIndex = (focusedIndex + 1) % options.length;
+ } else if (dir === 'previous') {
+ if (focusedIndex > 0) {
+ focusedIndex = focusedIndex - 1;
+ } else {
+ focusedIndex = options.length - 1;
+ }
+ } else if (dir === 'start') {
+ focusedIndex = 0;
+ } else if (dir === 'end') {
+ focusedIndex = options.length - 1;
+ } else if (dir === 'page_up') {
+ var potentialIndex = focusedIndex - this.props.pageSize;
+ if (potentialIndex < 0) {
+ focusedIndex = 0;
+ } else {
+ focusedIndex = potentialIndex;
+ }
+ } else if (dir === 'page_down') {
+ var potentialIndex = focusedIndex + this.props.pageSize;
+ if (potentialIndex > options.length - 1) {
+ focusedIndex = options.length - 1;
+ } else {
+ focusedIndex = potentialIndex;
+ }
+ }
+
+ if (focusedIndex === -1) {
+ focusedIndex = 0;
+ }
+
+ this.setState({
+ focusedIndex: options[focusedIndex].index,
+ focusedOption: options[focusedIndex].option
+ });
+ }
+
+ getFocusedOption () {
+ return this._focusedOption;
+ }
+
+ getInputValue () {
+ return this.state.inputValue;
+ }
+
+ selectFocusedOption () {
+ if (this._focusedOption) {
+ return this.selectValue(this._focusedOption);
+ }
+ }
+
+ renderLoading () {
+ if (!this.props.isLoading) return;
+ return (
+
+
+
+ );
+ }
+
+ renderValue (valueArray, isOpen) {
+ let renderLabel = this.props.valueRenderer || this.getOptionLabel;
+ let ValueComponent = this.props.valueComponent;
+ if (!valueArray.length) {
+ return !this.state.inputValue ?
{this.props.placeholder}
: null;
+ }
+ let onClick = this.props.onValueClick ? this.handleValueClick : null;
+ if (this.props.multi) {
+ return valueArray.map((value, i) => {
+ return (
+
+ {renderLabel(value, i)}
+
+
+ );
+ });
+ } else if (!this.state.inputValue) {
+ if (isOpen) onClick = null;
+ return (
+
+ {renderLabel(valueArray[0])}
+
+ );
+ }
+ }
+
+ renderInput (valueArray, focusedOptionIndex) {
+ var className = classNames('Select-input', this.props.inputProps.className);
+ const isOpen = !!this.state.isOpen;
+
+ const ariaOwns = classNames({
+ [this._instancePrefix + '-list']: isOpen,
+ [this._instancePrefix + '-backspace-remove-message']: this.props.multi
+ && !this.props.disabled
+ && this.state.isFocused
+ && !this.state.inputValue
+ });
+
+ const inputProps = {
+ ...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-label': this.props['aria-label'],
+ className: className,
+ tabIndex: this.props.tabIndex,
+ onBlur: this.handleInputBlur,
+ onChange: this.handleInputChange,
+ onFocus: this.handleInputFocus,
+ ref: ref => this.input = ref,
+ required: this.state.required,
+ value: this.state.inputValue,
+ };
+
+ if (this.props.inputRenderer) {
+ return this.props.inputRenderer(inputProps);
+ }
+
+ if (this.props.disabled || !this.props.searchable) {
+ const { inputClassName, ...divProps } = this.props.inputProps;
+
+ const ariaOwns = classNames({
+ [this._instancePrefix + '-list']: isOpen,
+ });
+
+ return (
+
this.input = ref}
+ aria-readonly={'' + !!this.props.disabled}
+ style={{ border: 0, width: 1, display:'inline-block' }}/>
+ );
+ }
+
+ if (this.props.autosize) {
+ return (
+
+ );
+ }
+ return (
+
+
+
+ );
+ }
+
+ renderClear () {
+ if (!this.props.clearable || this.props.value === undefined || this.props.value === null || this.props.multi && !this.props.value.length || this.props.disabled || this.props.isLoading) return;
+ const clear = this.props.clearRenderer();
+
+ return (
+
+ {clear}
+
+ );
+ }
+
+ renderArrow () {
+ const onMouseDown = this.handleMouseDownOnArrow;
+ const isOpen = this.state.isOpen;
+ const arrow = this.props.arrowRenderer({ onMouseDown, isOpen });
+
+ return (
+
+ {arrow}
+
+ );
+ }
+
+ filterFlatOptions (excludeOptions) {
+ const filterValue = this.state.inputValue;
const flatOptions = this._flatOptions;
if (this.props.filterOptions) {
// Maintain backwards compatibility with boolean attribute
@@ -1011,30 +913,30 @@ const Select = createClass({
valueKey: this.props.valueKey,
}
);
- } else {
- return flatOptions;
- }
- },
-
- flattenOptions (options, group) {
- if (!options) return [];
- let flatOptions = [];
- for (let i = 0; i < options.length; i ++) {
+ } else {
+ return flatOptions;
+ }
+ }
+
+ flattenOptions (options, group) {
+ if (!options) return [];
+ let flatOptions = [];
+ for (let i = 0; i < options.length; i ++) {
// We clone each option with a pointer to its parent group for efficient unflattening
const optionCopy = clone(options[i]);
optionCopy.isInTree = false;
if (group) {
optionCopy.group = group;
}
- if (isGroup(optionCopy)) {
- flatOptions = flatOptions.concat(this.flattenOptions(optionCopy.options, optionCopy));
+ if (isGroup(optionCopy)) {
+ flatOptions = flatOptions.concat(this.flattenOptions(optionCopy.options, optionCopy));
optionCopy.options = [];
- } else {
- flatOptions.push(optionCopy);
- }
- }
- return flatOptions;
- },
+ } else {
+ flatOptions.push(optionCopy);
+ }
+ }
+ return flatOptions;
+ }
unflattenOptions (flatOptions) {
const groupedOptions = [];
@@ -1072,183 +974,307 @@ const Select = createClass({
}
});
return groupedOptions;
- },
-
- onOptionRef(ref, isFocused) {
- if (isFocused) {
- this.focused = ref;
- }
- },
-
- renderMenu (options, valueArray, focusedOption) {
- if (options && options.length) {
- return this.props.menuRenderer({
- focusedOption,
+ }
+
+ onOptionRef(ref, isFocused) {
+ if (isFocused) {
+ this.focused = ref;
+ }
+ }
+
+ renderMenu (options, valueArray, focusedOption) {
+ if (options && options.length) {
+ return this.props.menuRenderer({
+ focusedOption,
focusOption: this.focusOption,
- instancePrefix: this._instancePrefix,
- labelKey: this.props.labelKey,
- onFocus: this.focusOption,
+ instancePrefix: this._instancePrefix,
+ labelKey: this.props.labelKey,
+ onFocus: this.focusOption,
onOptionRef: this.onOptionRef,
- onSelect: this.selectValue,
- optionClassName: this.props.optionClassName,
- optionComponent: this.props.optionComponent,
+ onSelect: this.selectValue,
+ optionClassName: this.props.optionClassName,
+ optionComponent: this.props.optionComponent,
optionGroupComponent: this.props.optionGroupComponent,
- optionRenderer: this.props.optionRenderer || this.getOptionLabel,
- options,
+ optionRenderer: this.props.optionRenderer || this.getOptionLabel,
+ options,
selectValue: this.selectValue,
- valueArray,
- valueKey: this.props.valueKey,
- });
- } else if (this.props.noResultsText) {
- return (
-
- {this.props.noResultsText}
-
- );
- } else {
- return null;
- }
- },
-
- renderHiddenField (valueArray) {
- if (!this.props.name) return;
- if (this.props.joinValues) {
- let value = valueArray.map(i => stringifyValue(i[this.props.valueKey])).join(this.props.delimiter);
- return (
-
this.value = ref}
- name={this.props.name}
- value={value}
- disabled={this.props.disabled} />
- );
- }
- return valueArray.map((item, index) => (
-
- ));
- },
-
- getFocusableOptionIndex (selectedOption) {
- var options = this._visibleOptions;
- if (!options.length) return null;
-
- const valueKey = this.props.valueKey;
- let focusedOption = this.state.focusedOption || selectedOption;
- if (focusedOption && !focusedOption.disabled) {
- let focusedOptionIndex = -1;
- options.some((option, index) => {
- const isOptionEqual = option[valueKey] === focusedOption[valueKey];
- if (isOptionEqual) {
- focusedOptionIndex = index;
- }
- return isOptionEqual;
- });
- if (focusedOptionIndex !== -1) {
- return focusedOptionIndex;
- }
- }
-
- for (var i = 0; i < options.length; i++) {
- if (!options[i].disabled) return i;
- }
- return null;
- },
-
- renderOuter (options, valueArray, focusedOption) {
+ valueArray,
+ valueKey: this.props.valueKey,
+ });
+ } else if (this.props.noResultsText) {
+ return (
+
+ {this.props.noResultsText}
+
+ );
+ } else {
+ return null;
+ }
+ }
+
+ renderHiddenField (valueArray) {
+ if (!this.props.name) return;
+ if (this.props.joinValues) {
+ let value = valueArray.map(i => stringifyValue(i[this.props.valueKey])).join(this.props.delimiter);
+ return (
+
this.value = ref}
+ name={this.props.name}
+ value={value}
+ disabled={this.props.disabled} />
+ );
+ }
+ return valueArray.map((item, index) => (
+
+ ));
+ }
+
+ getFocusableOptionIndex (selectedOption) {
+ var options = this._visibleOptions;
+ if (!options.length) return null;
+
+ const valueKey = this.props.valueKey;
+ let focusedOption = this.state.focusedOption || selectedOption;
+ if (focusedOption && !focusedOption.disabled) {
+ let focusedOptionIndex = -1;
+ options.some((option, index) => {
+ const isOptionEqual = option[valueKey] === focusedOption[valueKey];
+ if (isOptionEqual) {
+ focusedOptionIndex = index;
+ }
+ return isOptionEqual;
+ });
+ if (focusedOptionIndex !== -1) {
+ return focusedOptionIndex;
+ }
+ }
+
+ for (var i = 0; i < options.length; i++) {
+ if (!options[i].disabled) return i;
+ }
+ return null;
+ }
+
+ renderOuter (options, valueArray, focusedOption) {
let Dropdown = this.props.dropdownComponent;
- let menu = this.renderMenu(options, valueArray, focusedOption);
- if (!menu) {
- return null;
- }
+ let menu = this.renderMenu(options, valueArray, focusedOption);
+ if (!menu) {
+ return null;
+ }
- return (
+ return (
this.menuContainer = ref} className="Select-menu-outer" style={this.props.menuContainerStyle}>
-
this.menu = ref} role="listbox" className="Select-menu" id={this._instancePrefix + '-list'}
- style={this.props.menuStyle}
- onScroll={this.handleMenuScroll}
- onMouseDown={this.handleMouseDownOnMenu}>
+
this.menu = ref} role="listbox" tabIndex={-1} className="Select-menu" id={this._instancePrefix + '-list'}
+ style={this.props.menuStyle}
+ onScroll={this.handleMenuScroll}
+ onMouseDown={this.handleMouseDownOnMenu}>
{menu}
- );
- },
+ );
+ }
- render () {
+ render () {
let valueArray = this.getValueArray(this.props.value);
- this._visibleOptions = this.filterFlatOptions(this.props.multi ? valueArray : null);
- let options = this.unflattenOptions(this._visibleOptions);
- let isOpen = typeof this.props.isOpen === 'boolean' ? this.props.isOpen : this.state.isOpen;
- if (this.props.multi && !options.length && valueArray.length && !this.state.inputValue) isOpen = false;
- const focusedOptionIndex = this.getFocusableOptionIndex(valueArray[0]);
-
- let focusedOption = null;
- if (focusedOptionIndex !== null) {
- focusedOption = this._focusedOption = this._visibleOptions[focusedOptionIndex];
- } else {
- focusedOption = this._focusedOption = null;
- }
- let className = classNames('Select', this.props.className, {
- 'Select--multi': this.props.multi,
- 'Select--single': !this.props.multi,
- 'is-clearable': this.props.clearable,
- 'is-disabled': this.props.disabled,
- 'is-focused': this.state.isFocused,
- 'is-loading': this.props.isLoading,
- 'is-open': isOpen,
- 'is-pseudo-focused': this.state.isPseudoFocused,
- 'is-searchable': this.props.searchable,
- 'has-value': valueArray.length,
- });
-
- let removeMessage = null;
- if (this.props.multi &&
- !this.props.disabled &&
- valueArray.length &&
- !this.state.inputValue &&
- this.state.isFocused &&
- this.props.backspaceRemoves) {
- removeMessage = (
-
- {this.props.backspaceToRemoveMessage.replace('{label}', valueArray[valueArray.length - 1][this.props.labelKey])}
-
- );
- }
-
- return (
-
this.wrapper = ref}
- className={className}
- style={this.props.wrapperStyle}>
- {this.renderHiddenField(valueArray)}
-
this.control = ref}
- className="Select-control"
- style={this.props.style}
- onKeyDown={this.handleKeyDown}
- onMouseDown={this.handleMouseDown}
- onTouchEnd={this.handleTouchEnd}
- onTouchStart={this.handleTouchStart}
- onTouchMove={this.handleTouchMove}
- >
-
- {this.renderValue(valueArray, isOpen)}
- {this.renderInput(valueArray, focusedOptionIndex)}
-
- {removeMessage}
- {this.renderLoading()}
- {this.renderClear()}
- {this.renderArrow()}
-
- {isOpen ? this.renderOuter(options, !this.props.multi ? valueArray : null, focusedOption) : null}
-
- );
- }
-
-});
+ this._visibleOptions = this.filterFlatOptions(this.props.multi ? valueArray : null);
+ let options = this.unflattenOptions(this._visibleOptions);
+ let isOpen = typeof this.props.isOpen === 'boolean' ? this.props.isOpen : this.state.isOpen;
+ if (this.props.multi && !options.length && valueArray.length && !this.state.inputValue) isOpen = false;
+ const focusedOptionIndex = this.getFocusableOptionIndex(valueArray[0]);
+
+ let focusedOption = null;
+ if (focusedOptionIndex !== null) {
+ focusedOption = this._focusedOption = this._visibleOptions[focusedOptionIndex];
+ } else {
+ focusedOption = this._focusedOption = null;
+ }
+ let className = classNames('Select', this.props.className, {
+ 'Select--multi': this.props.multi,
+ 'Select--single': !this.props.multi,
+ 'is-clearable': this.props.clearable,
+ 'is-disabled': this.props.disabled,
+ 'is-focused': this.state.isFocused,
+ 'is-loading': this.props.isLoading,
+ 'is-open': isOpen,
+ 'is-pseudo-focused': this.state.isPseudoFocused,
+ 'is-searchable': this.props.searchable,
+ 'has-value': valueArray.length,
+ });
+
+ let removeMessage = null;
+ if (this.props.multi &&
+ !this.props.disabled &&
+ valueArray.length &&
+ !this.state.inputValue &&
+ this.state.isFocused &&
+ this.props.backspaceRemoves) {
+ removeMessage = (
+
+ {this.props.backspaceToRemoveMessage.replace('{label}', valueArray[valueArray.length - 1][this.props.labelKey])}
+
+ );
+ }
+
+ return (
+
this.wrapper = ref}
+ className={className}
+ style={this.props.wrapperStyle}>
+ {this.renderHiddenField(valueArray)}
+
this.control = ref}
+ className="Select-control"
+ style={this.props.style}
+ onKeyDown={this.handleKeyDown}
+ onMouseDown={this.handleMouseDown}
+ onTouchEnd={this.handleTouchEnd}
+ onTouchStart={this.handleTouchStart}
+ onTouchMove={this.handleTouchMove}
+ >
+
+ {this.renderValue(valueArray, isOpen)}
+ {this.renderInput(valueArray, focusedOptionIndex)}
+
+ {removeMessage}
+ {this.renderLoading()}
+ {this.renderClear()}
+ {this.renderArrow()}
+
+ {isOpen ? this.renderOuter(options, !this.props.multi ? valueArray : null, focusedOption) : null}
+
+ );
+ }
+};
+
+Select.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)
+ 'aria-labelledby': PropTypes.string, // HTML ID of an element that should be used as the label (for assistive tech)
+ addLabelText: PropTypes.string, // placeholder displayed when you want to add a label on a multi-value input
+ arrowRenderer: PropTypes.func, // Create drop-down caret element
+ autoBlur: PropTypes.bool, // automatically blur the component when an option is selected
+ autofocus: PropTypes.bool, // autofocus the component on mount
+ autosize: PropTypes.bool, // whether to enable autosizing or not
+ backspaceRemoves: PropTypes.bool, // whether backspace removes an item if there is no text input
+ backspaceToRemoveMessage: PropTypes.string, // Message to use for screenreaders to press backspace to remove the current item - {label} is replaced with the item label
+ className: PropTypes.string, // className for the outer element
+ clearAllText: stringOrNode, // title for the "clear" control when multi: true
+ clearRenderer: PropTypes.func, // create clearable x element
+ clearValueText: stringOrNode, // title for the "clear" control
+ clearable: PropTypes.bool, // should it be possible to reset value
+ closeOnSelect: PropTypes.bool, // whether to close the menu when a value is selected
+ deleteRemoves: PropTypes.bool, // whether backspace removes an item if there is no text input
+ delimiter: PropTypes.string, // delimiter to use to join multiple values for the hidden field value
+ disabled: PropTypes.bool, // whether the Select is disabled or not
+ dropdownComponent: PropTypes.func, // dropdown component to render the menu in
+ escapeClearsValue: PropTypes.bool, // whether escape clears the value when the menu is closed
+ filterOption: PropTypes.func, // method to filter a single option (option, filterString)
+ filterOptions: PropTypes.any, // boolean to enable default filtering or function to filter the options array ([options], filterString, [values])
+ ignoreAccents: PropTypes.bool, // whether to strip diacritics when filtering
+ ignoreCase: PropTypes.bool, // whether to perform case-insensitive filtering
+ inputProps: PropTypes.object, // custom attributes for the Input
+ inputRenderer: PropTypes.func, // returns a custom input component
+ instanceId: PropTypes.string, // set the components instanceId
+ isLoading: PropTypes.bool, // whether the Select is loading externally or not (such as options being loaded)
+ isOpen: PropTypes.bool, // whether the Select dropdown menu is open or not
+ joinValues: PropTypes.bool, // joins multiple values into a single form field with the delimiter (legacy mode)
+ labelKey: PropTypes.string, // path of the label value in option objects
+ matchPos: PropTypes.string, // (any|start) match the start or entire string when filtering
+ matchProp: PropTypes.string, // (any|label|value) which option property to filter on
+ menuBuffer: PropTypes.number, // optional buffer (in px) between the bottom of the viewport and the bottom of the menu
+ menuContainerStyle: PropTypes.object, // optional style to apply to the menu container
+ menuRenderer: PropTypes.func, // renders a custom menu with options
+ menuStyle: PropTypes.object, // optional style to apply to the menu
+ multi: PropTypes.bool, // multi-value input
+ name: PropTypes.string, // generates a hidden
tag with this field name for html forms
+ noResultsText: stringOrNode, // placeholder displayed when there are no matching search results
+ onBlur: PropTypes.func, // onBlur handler: function (event) {}
+ onBlurResetsInput: PropTypes.bool, // whether input is cleared on blur
+ onChange: PropTypes.func, // onChange handler: function (newValue) {}
+ onClose: PropTypes.func, // fires when the menu is closed
+ onCloseResetsInput: PropTypes.bool, // whether input is cleared when menu is closed through the arrow
+ onFocus: PropTypes.func, // onFocus handler: function (event) {}
+ onInputChange: PropTypes.func, // onInputChange handler: function (inputValue) {}
+ onInputKeyDown: PropTypes.func, // input keyDown handler: function (event) {}
+ onMenuScrollToBottom: PropTypes.func, // fires when the menu is scrolled to the bottom; can be used to paginate options
+ onOpen: PropTypes.func, // fires when the menu is opened
+ onSelectResetsInput: PropTypes.bool, // whether input is cleared on select (works only for multiselect)
+ onValueClick: PropTypes.func, // onClick handler for value labels: function (value, event) {}
+ openOnClick: PropTypes.bool, // boolean to control opening the menu when the control is clicked
+ openOnFocus: PropTypes.bool, // always open options menu on focus
+ optionClassName: PropTypes.string, // additional class(es) to apply to the
elements
+ optionComponent: PropTypes.func, // option component to render in dropdown
+ optionGroupComponent: PropTypes.func, // option group component to render in dropdown
+ optionRenderer: PropTypes.func, // optionRenderer: function (option) {}
+ options: PropTypes.array, // array of options
+ pageSize: PropTypes.number, // number of entries to page when using page up/down keys
+ placeholder: stringOrNode, // field placeholder, displayed when there's no value
+ renderInvalidValues: PropTypes.bool, // boolean to enable rendering values that do not match any options
+ required: PropTypes.bool, // applies HTML5 required attribute when needed
+ resetValue: PropTypes.any, // value to use when you clear the control
+ scrollMenuIntoView: PropTypes.bool, // boolean to enable the viewport to shift so that the full menu fully visible when engaged
+ searchable: PropTypes.bool, // whether to enable searching feature or not
+ simpleValue: PropTypes.bool, // pass the value to onChange as a simple value (legacy pre 1.0 mode), defaults to false
+ style: PropTypes.object, // optional style to apply to the control
+ tabIndex: PropTypes.string, // optional tab index of the control
+ tabSelectsValue: PropTypes.bool, // whether to treat tabbing out while focused to be value selection
+ value: PropTypes.any, // initial field value
+ valueComponent: PropTypes.func, // value component to render
+ valueKey: PropTypes.string, // path of the label value in option objects
+ valueRenderer: PropTypes.func, // valueRenderer: function (option) {}
+ wrapperStyle: PropTypes.object, // optional style to apply to the component wrapper
+};
+
+Select.defaultProps = {
+ addLabelText: 'Add "{label}"?',
+ arrowRenderer: defaultArrowRenderer,
+ autosize: true,
+ backspaceRemoves: true,
+ backspaceToRemoveMessage: 'Press backspace to remove {label}',
+ clearable: true,
+ clearAllText: 'Clear all',
+ clearRenderer: defaultClearRenderer,
+ clearValueText: 'Clear value',
+ closeOnSelect: true,
+ deleteRemoves: true,
+ delimiter: ',',
+ disabled: false,
+ dropdownComponent: Dropdown,
+ escapeClearsValue: true,
+ filterOptions: defaultFilterOptions,
+ ignoreAccents: true,
+ ignoreCase: true,
+ inputProps: {},
+ isLoading: false,
+ joinValues: false,
+ labelKey: 'label',
+ matchPos: 'any',
+ matchProp: 'any',
+ menuBuffer: 0,
+ menuRenderer: defaultMenuRenderer,
+ multi: false,
+ noResultsText: 'No results found',
+ onBlurResetsInput: true,
+ onSelectResetsInput: true,
+ onCloseResetsInput: true,
+ openOnClick: true,
+ optionComponent: Option,
+ optionGroupComponent: OptionGroup,
+ pageSize: 5,
+ placeholder: 'Select...',
+ required: false,
+ scrollMenuIntoView: true,
+ searchable: true,
+ simpleValue: false,
+ tabSelectsValue: true,
+ valueComponent: Value,
+ valueKey: 'value',
+};
export default Select;
diff --git a/src/Value.js b/src/Value.js
index d9925654..e282fd18 100644
--- a/src/Value.js
+++ b/src/Value.js
@@ -1,20 +1,18 @@
import React from 'react';
-import createClass from 'create-react-class';
import PropTypes from 'prop-types';
import classNames from 'classnames';
-const Value = createClass({
+class Value extends React.Component {
- displayName: 'Value',
+ constructor(props) {
+ super(props);
- propTypes: {
- children: PropTypes.node,
- disabled: PropTypes.bool, // disabled prop passed to ReactSelect
- id: PropTypes.string, // Unique id for the value - used for aria
- onClick: PropTypes.func, // method to handle click on value label
- onRemove: PropTypes.func, // method to handle removal of the value
- value: PropTypes.object.isRequired, // the option object for this value
- },
+ this.handleMouseDown = this.handleMouseDown.bind(this);
+ this.onRemove = this.onRemove.bind(this);
+ this.handleTouchEndRemove = this.handleTouchEndRemove.bind(this);
+ this.handleTouchMove = this.handleTouchMove.bind(this);
+ this.handleTouchStart = this.handleTouchStart.bind(this);
+ }
handleMouseDown (event) {
if (event.type === 'mousedown' && event.button !== 0) {
@@ -28,13 +26,13 @@ const Value = createClass({
if (this.props.value.href) {
event.stopPropagation();
}
- },
+ }
onRemove (event) {
event.preventDefault();
event.stopPropagation();
this.props.onRemove(this.props.value);
- },
+ }
handleTouchEndRemove (event){
// Check if the view is being dragged, In this case
@@ -43,17 +41,17 @@ const Value = createClass({
// Fire the mouse events
this.onRemove(event);
- },
+ }
handleTouchMove (event) {
// Set a flag that the view is being dragged
this.dragging = true;
- },
+ }
handleTouchStart (event) {
// Set a flag that the view is not being dragged
this.dragging = false;
- },
+ }
renderRemoveIcon () {
if (this.props.disabled || !this.props.onRemove) return;
@@ -67,7 +65,7 @@ const Value = createClass({
×
);
- },
+ }
renderLabel () {
let className = 'Select-value-label';
@@ -80,7 +78,7 @@ const Value = createClass({
{this.props.children}
);
- },
+ }
render () {
return (
@@ -93,7 +91,16 @@ const Value = createClass({
);
}
+};
+
-});
+Value.propTypes = {
+ children: PropTypes.node,
+ disabled: PropTypes.bool, // disabled prop passed to ReactSelect
+ id: PropTypes.string, // Unique id for the value - used for aria
+ onClick: PropTypes.func, // method to handle click on value label
+ onRemove: PropTypes.func, // method to handle removal of the value
+ value: PropTypes.object.isRequired, // the option object for this value
+};
-module.exports = Value;
+export default Value;
diff --git a/src/index.js b/src/index.js
new file mode 100644
index 00000000..a4bdbe21
--- /dev/null
+++ b/src/index.js
@@ -0,0 +1,18 @@
+import Select from './Select';
+import Async from './Async';
+import AsyncCreatable from './AsyncCreatable';
+import Creatable from './Creatable';
+import Value from './Value';
+
+Select.Async = Async;
+Select.AsyncCreatable = AsyncCreatable;
+Select.Creatable = Creatable;
+Select.Value = Value;
+
+export default Select;
+export {
+ Async,
+ AsyncCreatable,
+ Creatable,
+ Value
+};
diff --git a/src/index.umd.js b/src/index.umd.js
new file mode 100644
index 00000000..980c7222
--- /dev/null
+++ b/src/index.umd.js
@@ -0,0 +1,17 @@
+// This file exists as an entry point for bundling our umd builds.
+// Both in rollup and in webpack, umd builds built from es6 modules are not
+// compatible with mixed imports (which exist in index.js)
+// This file does away with named imports in favor of a single export default.
+
+import Select from './Select';
+import Async from './Async';
+import AsyncCreatable from './AsyncCreatable';
+import Creatable from './Creatable';
+import Value from './Value';
+
+Select.Async = Async;
+Select.AsyncCreatable = AsyncCreatable;
+Select.Creatable = Creatable;
+Select.Value = Value;
+
+export default Select;
diff --git a/src/utils/defaultArrowRenderer.js b/src/utils/defaultArrowRenderer.js
index 0654e310..3fee9f0e 100644
--- a/src/utils/defaultArrowRenderer.js
+++ b/src/utils/defaultArrowRenderer.js
@@ -1,4 +1,5 @@
import React from 'react';
+import PropTypes from 'prop-types';
export default function arrowRenderer ({ onMouseDown }) {
return (
@@ -8,3 +9,7 @@ export default function arrowRenderer ({ onMouseDown }) {
/>
);
};
+
+arrowRenderer.propTypes = {
+ onMouseDown: PropTypes.func,
+};
diff --git a/src/utils/defaultFilterOptions.js b/src/utils/defaultFilterOptions.js
index 8a5a783a..bdbd363c 100644
--- a/src/utils/defaultFilterOptions.js
+++ b/src/utils/defaultFilterOptions.js
@@ -35,4 +35,4 @@ function filterOptions (options, filterValue, excludeOptions, props) {
});
}
-module.exports = filterOptions;
+export default filterOptions;
diff --git a/src/utils/defaultMenuRenderer.js b/src/utils/defaultMenuRenderer.js
index c5a3833b..58e356ba 100644
--- a/src/utils/defaultMenuRenderer.js
+++ b/src/utils/defaultMenuRenderer.js
@@ -77,4 +77,4 @@ function menuRenderer ({
return renderOptions(options);
}
-module.exports = menuRenderer;
+export default menuRenderer;
diff --git a/src/utils/stripDiacritics.js b/src/utils/stripDiacritics.js
index 9f91f83a..478d26e6 100644
--- a/src/utils/stripDiacritics.js
+++ b/src/utils/stripDiacritics.js
@@ -85,7 +85,7 @@ var map = [
{ 'base':'z', 'letters':/[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763]/g },
];
-module.exports = function stripDiacritics (str) {
+export default function stripDiacritics (str) {
for (var i = 0; i < map.length; i++) {
str = str.replace(map[i].letters, map[i].base);
}
diff --git a/test/Async-test.js b/test/Async-test.js
index 41f794b4..3e76e9fc 100644
--- a/test/Async-test.js
+++ b/test/Async-test.js
@@ -20,7 +20,7 @@ var ReactDOM = require('react-dom');
var TestUtils = require('react-dom/test-utils');
var sinon = require('sinon');
-var Select = require('../src/Select');
+var Select = require('../src');
describe('Async', () => {
let asyncInstance, asyncNode, filterInputNode, loadOptions;
@@ -31,8 +31,8 @@ describe('Async', () => {
);
asyncNode = ReactDOM.findDOMNode(asyncInstance);
@@ -319,6 +319,15 @@ describe('Async', () => {
typeSearchText('WÄRE');
expect(loadOptions, 'was called with', 'WÄRE');
});
+
+ it('does not mutate the user input', () => {
+ createControl({
+ ignoreAccents: false,
+ ignoreCase: true
+ });
+ typeSearchText('A');
+ expect(asyncNode.textContent.substr(asyncNode.textContent.indexOf('}') + 1), 'to begin with', 'A');
+ });
});
describe('with ignore case and ignore accents', () => {
@@ -377,26 +386,30 @@ describe('Async', () => {
});
describe('if noResultsText has been provided', () => {
- it('returns the noResultsText', () => {
- asyncInstance.select = { state: { inputValue: 'asdf' } };
- expect(asyncInstance.noResultsText(), 'to equal', 'noResultsText');
+ it('returns the noResultsText', (cb) => {
+ asyncInstance.setState({
+ inputValue: 'asfd',
+ }, () => {
+ expect(asyncInstance.noResultsText(), 'to equal', 'noResultsText');
+ cb();
+ });
});
});
describe('if noResultsText is empty', () => {
- beforeEach((cb) => {
+ beforeEach(() => {
createControl({
searchPromptText: 'searchPromptText',
loadingPlaceholder: 'loadingPlaceholder'
});
- asyncInstance.setState({
- isLoading: false,
- inputValue: 'asdfkljhadsf'
- }, cb);
});
- it('falls back to searchPromptText', () => {
- asyncInstance.select = { state: { inputValue: 'asdf' } };
- expect(asyncInstance.noResultsText(), 'to equal', 'searchPromptText');
+ it('falls back to searchPromptText', (cb) => {
+ asyncInstance.setState({
+ inputValue: 'asfd',
+ }, () => {
+ expect(asyncInstance.noResultsText(), 'to equal', 'searchPromptText');
+ cb();
+ });
});
});
});
@@ -438,13 +451,29 @@ describe('Async', () => {
describe('.focus()', () => {
beforeEach(() => {
createControl({});
+ TestUtils.Simulate.blur(filterInputNode);
});
it('focuses the search input', () => {
- var input = asyncNode.querySelector('input');
- expect(input, 'not to equal', document.activeElement);
+ expect(filterInputNode, 'not to equal', document.activeElement);
asyncInstance.focus();
- expect(input, 'to equal', document.activeElement);
+ expect(filterInputNode, 'to equal', document.activeElement);
+ });
+ });
+
+
+ describe('props sync test', () => {
+ it('should update options on componentWillReceiveProps', () => {
+ createControl({
+ });
+ asyncInstance.componentWillReceiveProps({
+ options: [{
+ label: 'bar',
+ value: 'foo',
+ }]
+ });
+ expect(asyncNode.querySelectorAll('[role=option]').length, 'to equal', 1);
+ expect(asyncNode.querySelector('[role=option]').textContent, 'to equal', 'bar');
});
});
});
diff --git a/test/AsyncCreatable-test.js b/test/AsyncCreatable-test.js
index 00b80a9b..514a40bd 100644
--- a/test/AsyncCreatable-test.js
+++ b/test/AsyncCreatable-test.js
@@ -16,7 +16,7 @@ var React = require('react');
var ReactDOM = require('react-dom');
var TestUtils = require('react-dom/test-utils');
var sinon = require('sinon');
-var Select = require('../src/Select');
+var Select = require('../src');
describe('AsyncCreatable', () => {
let creatableInstance, creatableNode, filterInputNode, loadOptions, renderer;
diff --git a/test/Creatable-test.js b/test/Creatable-test.js
index cd49307c..0c317aab 100644
--- a/test/Creatable-test.js
+++ b/test/Creatable-test.js
@@ -16,10 +16,10 @@ var expect = unexpected
var React = require('react');
var ReactDOM = require('react-dom');
var TestUtils = require('react-dom/test-utils');
-var Select = require('../src/Select');
+var Select = require('../src');
describe('Creatable', () => {
- let creatableInstance, creatableNode, filterInputNode, innserSelectInstance, renderer;
+ let creatableInstance, creatableNode, filterInputNode, innerSelectInstance, renderer;
beforeEach(() => renderer = TestUtils.createRenderer());
@@ -36,7 +36,7 @@ describe('Creatable', () => {
);
creatableNode = ReactDOM.findDOMNode(creatableInstance);
- innserSelectInstance = creatableInstance.select;
+ innerSelectInstance = creatableInstance.select;
findAndFocusInputControl();
};
@@ -106,7 +106,7 @@ describe('Creatable', () => {
createControl({
filterOptions: () => null
});
- typeSearchText('test');;
+ typeSearchText('test');
});
it('should not show a "create..." prompt if current filter text is not a valid option (as determined by :isValidNewOption prop)', () => {
@@ -150,7 +150,6 @@ describe('Creatable', () => {
const options = [{ label: 'One', value: 1 }];
createControl({
options,
- shouldKeyDownEventCreateNewOption: ({ keyCode }) => keyCode === 13
});
typeSearchText('on'); // ['Create option "on"', 'One']
TestUtils.Simulate.keyDown(filterInputNode, { keyCode: 40, key: 'ArrowDown' }); // Select 'One'
@@ -158,6 +157,28 @@ describe('Creatable', () => {
expect(options, 'to have length', 1);
});
+ it('should remove the new option after closing on selecting option', () => {
+ createControl();
+ typeSearchText('9');
+ TestUtils.Simulate.keyDown(filterInputNode, { keyCode: 40, key: 'ArrowDown' });
+ TestUtils.Simulate.keyDown(filterInputNode, { keyCode: 13 });
+ expect(creatableInstance.inputValue, 'to equal', '');
+ });
+
+ it('should remove the new option after closing on escape', () => {
+ createControl();
+ typeSearchText('9');
+ TestUtils.Simulate.keyDown(filterInputNode, { keyCode: 27 });
+ expect(creatableInstance.inputValue, 'to equal', '');
+ });
+
+ it('should remove the new option after closing on blur', () => {
+ createControl();
+ typeSearchText('9');
+ TestUtils.Simulate.blur(filterInputNode);
+ expect(creatableInstance.inputValue, 'to equal', '');
+ });
+
it('should allow a custom select type to be rendered via the :children property', () => {
let childProps;
createControl({
diff --git a/test/Select-test.js b/test/Select-test.js
index 47b76237..630fec3b 100644
--- a/test/Select-test.js
+++ b/test/Select-test.js
@@ -22,8 +22,7 @@ var React = require('react');
var ReactDOM = require('react-dom');
var TestUtils = require('react-dom/test-utils');
-var Select = require('../src/Select');
-var Value = require('../src/Value');
+var Select = require('../src').default;
// The displayed text of the currently selected item, when items collapsed
var DISPLAYED_SELECTION_SELECTOR = '.Select-value';
@@ -2004,6 +2003,19 @@ describe('Select', () => {
]);
});
+ it('removes the last item with backspace', () => {
+
+ wrapper.setPropsForChild({
+ multi: false,
+ value: 'one'
+ });
+ onChange.reset(); // Ignore previous onChange calls
+
+ pressBackspace();
+
+ expect(onChange, 'was called with', null);
+ });
+
it('doesn\'t show the X if clearableValue=false', () => {
setValueProp(['two']);
@@ -2133,7 +2145,8 @@ describe('Select', () => {
value: '',
options: options,
searchable: false,
- multi: true
+ multi: true,
+ closeOnSelect: false,
}, {
wireUpOnChangeToValue: true
});
@@ -2153,8 +2166,8 @@ describe('Select', () => {
clickArrowToOpen();
expect(instance,
- 'with event mouseDown', 'on', Two
,
- 'with event mouseDown', 'on', One
,
+ 'with event', 'mouseDown', 'on', Two
,
+ 'with event', 'mouseDown', 'on', One
,
'to contain',
Two
@@ -2234,6 +2247,7 @@ describe('Select', () => {
// Render an instance of the component
wrapper = createControlWithWrapper({
value: '',
+ closeOnSelect: false,
options: options,
searchable: false,
multi: true
@@ -2257,6 +2271,8 @@ describe('Select', () => {
var items = ReactDOM.findDOMNode(instance).querySelectorAll('.Select-option');
var groups = ReactDOM.findDOMNode(instance).querySelectorAll('.Select-option-group-label');
+ expect(items, 'to have length', 4);
+ expect(groups, 'to have length', 2);
// Click the option "-1" to select it
expect(items[1], 'to have text', '-1');
@@ -2266,13 +2282,13 @@ describe('Select', () => {
// Now get the list again
items = ReactDOM.findDOMNode(instance).querySelectorAll('.Select-option');
groups = ReactDOM.findDOMNode(instance).querySelectorAll('.Select-option-group-label');
+ expect(items, 'to have length', 3);
+ expect(groups, 'to have length', 2);
expect(items[0], 'to have text', '-2');
expect(items[1], 'to have text', '+1');
expect(items[2], 'to have text', '+2');
- expect(items, 'to have length', 3);
expect(groups[0], 'to have text', 'Negative Numbers');
expect(groups[1], 'to have text', 'Positive Numbers');
- expect(groups, 'to have length', 2);
// Click the option "-2" to select it
TestUtils.Simulate.mouseDown(items[0]);
@@ -2726,7 +2742,7 @@ describe('Select', () => {
expect(spyFilterOption, 'was called with', defaultOptions[1], '');
expect(spyFilterOption, 'was called with', defaultOptions[2], '');
expect(spyFilterOption, 'was called with', defaultOptions[3], '');
- });
+ }).timeout(5000);
describe('when entering text', () => {
@@ -2744,7 +2760,7 @@ describe('Select', () => {
expect(spyFilterOption, 'was called with', defaultOptions[1], 'xyz');
expect(spyFilterOption, 'was called with', defaultOptions[2], 'xyz');
expect(spyFilterOption, 'was called with', defaultOptions[3], 'xyz');
- });
+ }).timeout(5000);
it('only shows the filtered option', () => {
@@ -3209,7 +3225,7 @@ describe('Select', () => {
instance = createControl({
options: defaultOptions,
- onFocus: onFocus
+ onFocus: onFocus,
});
});
@@ -3219,27 +3235,51 @@ describe('Select', () => {
});
});
- describe('openAfterFocus', () => {
-
- var openAfterFocus;
-
- beforeEach(() => {
- openAfterFocus = sinon.spy();
-
+ describe('openOnClick', () => {
+ it('should open the menu on click when true', () => {
instance = createControl({
options: defaultOptions,
- openAfterFocus: true
+ openOnClick: true,
+ }, {
+ initialFocus: false,
});
+ TestUtils.Simulate.mouseDown(ReactDOM.findDOMNode(instance).querySelector('.Select-control'), { button: 0 });
+ // need to simulate the focus on the input, it does not happen in jsdom
+ findAndFocusInputControl();
+ expect(instance.state.isOpen, 'to be true');
});
- it('should show the options when focused', () => {
- instance.focus();
+ it('should not open the menu on click when false', () => {
+ instance = createControl({
+ options: defaultOptions,
+ openOnClick: false,
+ }, {
+ initialFocus: false,
+ });
+ TestUtils.Simulate.mouseDown(ReactDOM.findDOMNode(instance).querySelector('.Select-control'), { button: 0 });
+ // need to simulate the focus on the input, it does not happen in jsdom
+ findAndFocusInputControl();
+ expect(instance.state.isOpen, 'to be falsy');
+ });
+ });
- if (instance.state.isFocused && instance.state.openAfterFocus) {
- expect(instance.state.isOpen, 'to equal', true);
- }
+ describe('openOnFocus', () => {
+ // Note: createControl automatically focuses the control
+ it('should open the menu on focus when true', () => {
+ instance = createControl({
+ options: defaultOptions,
+ openOnFocus: true,
+ });
+ expect(instance.state.isOpen, 'to be true');
});
+ it('should open the menu on focus when false', () => {
+ instance = createControl({
+ options: defaultOptions,
+ openOnFocus: false,
+ });
+ expect(instance.state.isOpen, 'to be falsy');
+ });
});
describe('onValueClick', () => {
@@ -4045,7 +4085,7 @@ describe('Select', () => {
it('sets the haspopup and expanded to true when menu is shown', () => {
expect(instance,
- 'with event keyDown', ARROW_DOWN, 'on',
,
+ 'with event', 'keyDown', ARROW_DOWN, 'on',
,
'to contain', );
});
@@ -4112,7 +4152,8 @@ describe('Select', () => {
{ value: 'five', label: 'label five' }
],
value: [ 'three', 'two' ],
- multi: true
+ multi: true,
+ closeOnSelect: false,
}, {
wireUpOnChangeToValue: true
});
@@ -4128,7 +4169,7 @@ describe('Select', () => {
it('hides the `press backspace to remove` message on blur', () => {
expect(instance,
- 'with event blur', 'on', ,
+ 'with event', 'blur', 'on', ,
'not to contain',
Press backspace to remove label two
@@ -4148,8 +4189,8 @@ describe('Select', () => {
it('updates the active descendant after a selection', () => {
return expect(wrapper,
- 'with event keyDown', ARROW_DOWN, 'on',
,
- 'with event keyDown', KEY_ENTER, 'on',
,
+ 'with event', 'keyDown', ARROW_DOWN, 'on',
,
+ 'with event', 'keyDown', KEY_ENTER, 'on',
,
'queried for', )
.then(input => {
diff --git a/test/Value-test.js b/test/Value-test.js
index 8f324a20..5ef1b224 100644
--- a/test/Value-test.js
+++ b/test/Value-test.js
@@ -20,7 +20,7 @@ var TestUtils = require('react-dom/test-utils');
var OPTION = { label: 'TEST-LABEL', value: 'TEST-VALUE' };
-var Value = require('../src/Value');
+var Value = require('../src/Value').default;
describe('Value component', function() {
diff --git a/webpack.config.js b/webpack.config.js
new file mode 100644
index 00000000..60129fc2
--- /dev/null
+++ b/webpack.config.js
@@ -0,0 +1,65 @@
+const webpack = require('webpack');
+const path = require('path');
+const HtmlWebpackPlugin = require('html-webpack-plugin');
+const ExtractTextPlugin = require('extract-text-webpack-plugin');
+
+module.exports = {
+ context: path.resolve(__dirname, 'examples/src'),
+ entry: {
+ app: './app.js',
+ },
+ output: {
+ path: path.resolve(__dirname, 'examples/dist'),
+ filename: '[name].js',
+ publicPath: '/',
+ },
+ devServer: {
+ contentBase: path.resolve(__dirname, 'examples/src'),
+ port: 8000,
+ },
+ module: {
+ rules: [
+ {
+ test: /\.js$/,
+ exclude: [/node_modules/],
+ use: [{
+ loader: 'babel-loader',
+ options: { presets: ['es2015'] },
+ }],
+ },
+ {
+ test: /\.less$/,
+ use: ExtractTextPlugin.extract({
+ fallback: 'style-loader',
+ use: ['css-loader', 'less-loader'],
+ })
+ },
+ {
+ test: /\.html$/,
+ use: [
+ {
+ loader: 'html-loader',
+ }
+ ]
+ },
+ ],
+ },
+ resolve: {
+ alias: {
+ 'react-select-plus': path.resolve(__dirname, 'src/index'),
+ }
+ },
+ plugins: [
+ new webpack.optimize.CommonsChunkPlugin({
+ name: 'common',
+ filename: 'common.js',
+ minChunk: 2,
+ }),
+ new HtmlWebpackPlugin({
+ filename: 'index.html',
+ inject: false,
+ template: path.resolve(__dirname, 'examples/src/index.html')
+ }),
+ new ExtractTextPlugin('example.css'),
+ ]
+};
diff --git a/examples/src/standalone.html b/examples/src/standalone.html
index fccd81cc..fb058b96 100644
--- a/examples/src/standalone.html
+++ b/examples/src/standalone.html
@@ -1,47 +1,43 @@