2019-11-18 10:55:07 +01:00
/*! choices.js v9.0.1 | © 2019 Josh Johnson | https://github.com/jshjohnson/Choices#readme */
2016-10-18 15:15:00 +02:00
( function webpackUniversalModuleDefinition ( root , factory ) {
if ( typeof exports === 'object' && typeof module === 'object' )
module . exports = factory ( ) ;
else if ( typeof define === 'function' && define . amd )
2016-10-28 22:59:43 +02:00
define ( [ ] , factory ) ;
2016-10-18 15:15:00 +02:00
else if ( typeof exports === 'object' )
exports [ "Choices" ] = factory ( ) ;
else
root [ "Choices" ] = factory ( ) ;
2019-02-09 19:13:25 +01:00
} ) ( window , function ( ) {
2016-10-18 15:15:00 +02:00
return /******/ ( function ( modules ) { // webpackBootstrap
2016-08-23 08:24:45 +02:00
/******/ // The module cache
/******/ var installedModules = { } ;
2017-11-07 12:59:49 +01:00
/******/
2016-08-23 08:24:45 +02:00
/******/ // The require function
/******/ function _ _webpack _require _ _ ( moduleId ) {
2017-11-07 12:59:49 +01:00
/******/
2016-08-23 08:24:45 +02:00
/******/ // Check if module is in cache
2017-11-07 12:59:49 +01:00
/******/ if ( installedModules [ moduleId ] ) {
2016-08-23 08:24:45 +02:00
/******/ return installedModules [ moduleId ] . exports ;
2017-11-07 12:59:49 +01:00
/******/ }
2016-08-23 08:24:45 +02:00
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules [ moduleId ] = {
2017-11-07 12:59:49 +01:00
/******/ i : moduleId ,
/******/ l : false ,
/******/ exports : { }
2016-08-23 08:24:45 +02:00
/******/ } ;
2017-11-07 12:59:49 +01:00
/******/
2016-08-23 08:24:45 +02:00
/******/ // Execute the module function
/******/ modules [ moduleId ] . call ( module . exports , module , module . exports , _ _webpack _require _ _ ) ;
2017-11-07 12:59:49 +01:00
/******/
2016-08-23 08:24:45 +02:00
/******/ // Flag the module as loaded
2017-11-07 12:59:49 +01:00
/******/ module . l = true ;
/******/
2016-08-23 08:24:45 +02:00
/******/ // Return the exports of the module
/******/ return module . exports ;
/******/ }
2017-11-07 12:59:49 +01:00
/******/
/******/
2016-08-23 08:24:45 +02:00
/******/ // expose the modules object (__webpack_modules__)
/******/ _ _webpack _require _ _ . m = modules ;
2017-11-07 12:59:49 +01:00
/******/
2016-08-23 08:24:45 +02:00
/******/ // expose the module cache
/******/ _ _webpack _require _ _ . c = installedModules ;
2017-11-07 12:59:49 +01:00
/******/
/******/ // define getter function for harmony exports
/******/ _ _webpack _require _ _ . d = function ( exports , name , getter ) {
/******/ if ( ! _ _webpack _require _ _ . o ( exports , name ) ) {
2019-02-09 19:13:25 +01:00
/******/ Object . defineProperty ( exports , name , { enumerable : true , get : getter } ) ;
2017-11-07 12:59:49 +01:00
/******/ }
/******/ } ;
/******/
2019-02-09 19:13:25 +01:00
/******/ // define __esModule on exports
/******/ _ _webpack _require _ _ . r = function ( exports ) {
/******/ if ( typeof Symbol !== 'undefined' && Symbol . toStringTag ) {
/******/ Object . defineProperty ( exports , Symbol . toStringTag , { value : 'Module' } ) ;
/******/ }
/******/ Object . defineProperty ( exports , '__esModule' , { value : true } ) ;
/******/ } ;
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ _ _webpack _require _ _ . t = function ( value , mode ) {
/******/ if ( mode & 1 ) value = _ _webpack _require _ _ ( value ) ;
/******/ if ( mode & 8 ) return value ;
/******/ if ( ( mode & 4 ) && typeof value === 'object' && value && value . _ _esModule ) return value ;
/******/ var ns = Object . create ( null ) ;
/******/ _ _webpack _require _ _ . r ( ns ) ;
/******/ Object . defineProperty ( ns , 'default' , { enumerable : true , value : value } ) ;
/******/ if ( mode & 2 && typeof value != 'string' ) for ( var key in value ) _ _webpack _require _ _ . d ( ns , key , function ( key ) { return value [ key ] ; } . bind ( null , key ) ) ;
/******/ return ns ;
/******/ } ;
/******/
2017-11-07 12:59:49 +01:00
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ _ _webpack _require _ _ . n = function ( module ) {
/******/ var getter = module && module . _ _esModule ?
/******/ function getDefault ( ) { return module [ 'default' ] ; } :
/******/ function getModuleExports ( ) { return module ; } ;
/******/ _ _webpack _require _ _ . d ( getter , 'a' , getter ) ;
/******/ return getter ;
/******/ } ;
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ _ _webpack _require _ _ . o = function ( object , property ) { return Object . prototype . hasOwnProperty . call ( object , property ) ; } ;
/******/
2016-08-23 08:24:45 +02:00
/******/ // __webpack_public_path__
2018-05-25 15:00:27 +02:00
/******/ _ _webpack _require _ _ . p = "/public/assets/scripts/" ;
2017-11-07 12:59:49 +01:00
/******/
2019-02-09 19:13:25 +01:00
/******/
2016-08-23 08:24:45 +02:00
/******/ // Load entry module and return exports
2019-12-23 19:22:54 +01:00
/******/ return _ _webpack _require _ _ ( _ _webpack _require _ _ . s = 7 ) ;
2016-08-23 08:24:45 +02:00
/******/ } )
/************************************************************************/
/******/ ( [
/* 0 */
2017-11-13 20:13:37 +01:00
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
2019-10-22 23:20:40 +02:00
"use strict" ;
2017-11-13 20:13:37 +01:00
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
var utils _1 = _ _webpack _require _ _ ( 1 ) ;
exports . DEFAULT _CLASSNAMES = {
containerOuter : 'choices' ,
containerInner : 'choices__inner' ,
input : 'choices__input' ,
inputCloned : 'choices__input--cloned' ,
list : 'choices__list' ,
listItems : 'choices__list--multiple' ,
listSingle : 'choices__list--single' ,
listDropdown : 'choices__list--dropdown' ,
item : 'choices__item' ,
itemSelectable : 'choices__item--selectable' ,
itemDisabled : 'choices__item--disabled' ,
itemChoice : 'choices__item--choice' ,
placeholder : 'choices__placeholder' ,
group : 'choices__group' ,
groupHeading : 'choices__heading' ,
button : 'choices__button' ,
activeState : 'is-active' ,
focusState : 'is-focused' ,
openState : 'is-open' ,
disabledState : 'is-disabled' ,
highlightedState : 'is-highlighted' ,
selectedState : 'is-selected' ,
flippedState : 'is-flipped' ,
loadingState : 'is-loading' ,
noResults : 'has-no-results' ,
noChoices : 'has-no-choices'
2017-11-15 07:51:53 +01:00
} ;
2019-12-23 19:22:54 +01:00
exports . DEFAULT _CONFIG = {
items : [ ] ,
choices : [ ] ,
silent : false ,
renderChoiceLimit : - 1 ,
maxItemCount : - 1 ,
addItems : true ,
addItemFilter : null ,
removeItems : true ,
removeItemButton : false ,
editItems : false ,
duplicateItemsAllowed : true ,
delimiter : ',' ,
paste : true ,
searchEnabled : true ,
searchChoices : true ,
searchFloor : 1 ,
searchResultLimit : 4 ,
searchFields : [ 'label' , 'value' ] ,
position : 'auto' ,
resetScrollPosition : true ,
shouldSort : true ,
shouldSortItems : false ,
sorter : utils _1 . sortByAlpha ,
placeholder : true ,
placeholderValue : null ,
searchPlaceholderValue : null ,
prependValue : null ,
appendValue : null ,
renderSelectedChoices : 'auto' ,
loadingText : 'Loading...' ,
noResultsText : 'No results found' ,
noChoicesText : 'No choices to choose from' ,
itemSelectText : 'Press to select' ,
uniqueItemText : 'Only unique values can be added' ,
customAddItemText : 'Only values matching specific conditions can be added' ,
addItemText : function addItemText ( value ) {
return "Press Enter to add <b>\"" + utils _1 . sanitise ( value ) + "\"</b>" ;
} ,
maxItemText : function maxItemText ( maxItemCount ) {
return "Only " + maxItemCount + " values can be added" ;
} ,
valueComparer : function valueComparer ( value1 , value2 ) {
return value1 === value2 ;
} ,
fuseOptions : {
includeScore : true
} ,
callbackOnInit : null ,
callbackOnCreateTemplates : null ,
classNames : exports . DEFAULT _CLASSNAMES
} ;
exports . EVENTS = {
showDropdown : 'showDropdown' ,
hideDropdown : 'hideDropdown' ,
change : 'change' ,
choice : 'choice' ,
search : 'search' ,
addItem : 'addItem' ,
removeItem : 'removeItem' ,
highlightItem : 'highlightItem' ,
highlightChoice : 'highlightChoice' ,
unhighlightItem : 'unhighlightItem'
} ;
exports . ACTION _TYPES = {
ADD _CHOICE : 'ADD_CHOICE' ,
FILTER _CHOICES : 'FILTER_CHOICES' ,
ACTIVATE _CHOICES : 'ACTIVATE_CHOICES' ,
CLEAR _CHOICES : 'CLEAR_CHOICES' ,
ADD _GROUP : 'ADD_GROUP' ,
ADD _ITEM : 'ADD_ITEM' ,
REMOVE _ITEM : 'REMOVE_ITEM' ,
HIGHLIGHT _ITEM : 'HIGHLIGHT_ITEM' ,
CLEAR _ALL : 'CLEAR_ALL' ,
RESET _TO : 'RESET_TO' ,
SET _IS _LOADING : 'SET_IS_LOADING'
} ;
exports . KEY _CODES = {
BACK _KEY : 46 ,
DELETE _KEY : 8 ,
ENTER _KEY : 13 ,
A _KEY : 65 ,
ESC _KEY : 27 ,
UP _KEY : 38 ,
DOWN _KEY : 40 ,
PAGE _UP _KEY : 33 ,
PAGE _DOWN _KEY : 34
} ;
exports . TEXT _TYPE = 'text' ;
exports . SELECT _ONE _TYPE = 'select-one' ;
exports . SELECT _MULTIPLE _TYPE = 'select-multiple' ;
exports . SCROLLING _SPEED = 4 ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
/***/ } ) ,
/* 1 */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
"use strict" ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
/* eslint-disable @typescript-eslint/no-explicit-any */
2017-11-13 20:13:37 +01:00
2019-12-23 19:22:54 +01:00
exports . getRandomNumber = function ( min , max ) {
return Math . floor ( Math . random ( ) * ( max - min ) + min ) ;
} ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
exports . generateChars = function ( length ) {
return Array . from ( {
length : length
} , function ( ) {
return exports . getRandomNumber ( 0 , 36 ) . toString ( 36 ) ;
} ) . join ( '' ) ;
} ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
exports . generateId = function ( element , prefix ) {
var id = element . id || element . name && element . name + "-" + exports . generateChars ( 2 ) || exports . generateChars ( 4 ) ;
id = id . replace ( /(:|\.|\[|\]|,)/g , '' ) ;
id = prefix + "-" + id ;
return id ;
} ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
exports . getType = function ( obj ) {
return Object . prototype . toString . call ( obj ) . slice ( 8 , - 1 ) ;
} ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
exports . isType = function ( type , obj ) {
return obj !== undefined && obj !== null && exports . getType ( obj ) === type ;
} ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
exports . wrap = function ( element , wrapper ) {
if ( wrapper === void 0 ) {
wrapper = document . createElement ( 'div' ) ;
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
if ( element . nextSibling ) {
element . parentNode && element . parentNode . insertBefore ( wrapper , element . nextSibling ) ;
} else {
element . parentNode && element . parentNode . appendChild ( wrapper ) ;
}
2019-02-22 23:06:59 +01:00
2019-12-23 19:22:54 +01:00
return wrapper . appendChild ( element ) ;
} ;
2019-02-22 23:06:59 +01:00
2019-12-23 19:22:54 +01:00
exports . getAdjacentEl = function ( startEl , selector , direction ) {
if ( direction === void 0 ) {
direction = 1 ;
}
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
var prop = ( direction > 0 ? 'next' : 'previous' ) + "ElementSibling" ;
var sibling = startEl [ prop ] ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
while ( sibling ) {
if ( sibling . matches ( selector ) ) {
return sibling ;
}
2019-02-22 23:06:59 +01:00
2019-12-23 19:22:54 +01:00
sibling = sibling [ prop ] ;
}
2019-02-22 23:06:59 +01:00
2019-12-23 19:22:54 +01:00
return sibling ;
} ;
exports . isScrolledIntoView = function ( element , parent , direction ) {
if ( direction === void 0 ) {
direction = 1 ;
}
if ( ! element ) {
return false ;
}
var isVisible ;
if ( direction > 0 ) {
// In view from bottom
isVisible = parent . scrollTop + parent . offsetHeight >= element . offsetTop + element . offsetHeight ;
} else {
// In view from top
isVisible = element . offsetTop >= parent . scrollTop ;
}
return isVisible ;
} ;
exports . sanitise = function ( value ) {
if ( typeof value !== 'string' ) {
return value ;
}
return value . replace ( /&/g , '&' ) . replace ( />/g , '&rt;' ) . replace ( /</g , '<' ) . replace ( /"/g , '"' ) ;
} ;
exports . strToEl = function ( ) {
var tmpEl = document . createElement ( 'div' ) ;
return function ( str ) {
var cleanedInput = str . trim ( ) ;
tmpEl . innerHTML = cleanedInput ;
var firldChild = tmpEl . children [ 0 ] ;
while ( tmpEl . firstChild ) {
tmpEl . removeChild ( tmpEl . firstChild ) ;
}
return firldChild ;
} ;
} ( ) ;
exports . sortByAlpha = function ( _a , _b ) {
var value = _a . value ,
_c = _a . label ,
label = _c === void 0 ? value : _c ;
var value2 = _b . value ,
_d = _b . label ,
label2 = _d === void 0 ? value2 : _d ;
return label . localeCompare ( label2 , [ ] , {
sensitivity : 'base' ,
ignorePunctuation : true ,
numeric : true
} ) ;
} ;
exports . sortByScore = function ( a , b ) {
var _a = a . score ,
scoreA = _a === void 0 ? 0 : _a ;
var _b = b . score ,
scoreB = _b === void 0 ? 0 : _b ;
return scoreA - scoreB ;
} ;
exports . dispatchEvent = function ( element , type , customArgs ) {
if ( customArgs === void 0 ) {
customArgs = null ;
}
var event = new CustomEvent ( type , {
detail : customArgs ,
bubbles : true ,
cancelable : true
} ) ;
return element . dispatchEvent ( event ) ;
} ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
exports . existsInArray = function ( array , value , key ) {
if ( key === void 0 ) {
key = 'value' ;
}
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
return array . some ( function ( item ) {
if ( typeof value === 'string' ) {
return item [ key ] === value . trim ( ) ;
}
return item [ key ] === value ;
} ) ;
2017-11-15 07:51:53 +01:00
} ;
2019-12-23 19:22:54 +01:00
exports . cloneObject = function ( obj ) {
return JSON . parse ( JSON . stringify ( obj ) ) ;
} ;
/ * *
* Returns an array of keys present on the first but missing on the second object
* /
2017-11-15 07:51:53 +01:00
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
exports . diff = function ( a , b ) {
var aKeys = Object . keys ( a ) . sort ( ) ;
var bKeys = Object . keys ( b ) . sort ( ) ;
return aKeys . filter ( function ( i ) {
return bKeys . indexOf ( i ) < 0 ;
} ) ;
} ;
2017-11-15 07:51:53 +01:00
2019-10-22 23:20:40 +02:00
/***/ } ) ,
2019-12-23 19:22:54 +01:00
/* 2 */
2019-10-22 23:20:40 +02:00
/***/ ( function ( module , _ _webpack _exports _ _ , _ _webpack _require _ _ ) {
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
"use strict" ;
2019-12-23 19:22:54 +01:00
/* WEBPACK VAR INJECTION */ ( function ( global , module ) { /* harmony import */ var _ponyfill _js _ _WEBPACK _IMPORTED _MODULE _0 _ _ = _ _webpack _require _ _ ( 6 ) ;
2019-10-22 23:20:40 +02:00
/* global window */
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
var root ;
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
if ( typeof self !== 'undefined' ) {
root = self ;
} else if ( typeof window !== 'undefined' ) {
root = window ;
} else if ( typeof global !== 'undefined' ) {
root = global ;
} else if ( true ) {
root = module ;
} else { }
2017-11-15 07:51:53 +01:00
2019-10-22 23:20:40 +02:00
var result = Object ( _ponyfill _js _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ /* default */ "a" ] ) ( root ) ;
/* harmony default export */ _ _webpack _exports _ _ [ "a" ] = ( result ) ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
/* WEBPACK VAR INJECTION */ } . call ( this , _ _webpack _require _ _ ( 12 ) , _ _webpack _require _ _ ( 13 ) ( module ) ) )
2019-10-22 23:20:40 +02:00
/***/ } ) ,
2019-10-28 20:53:24 +01:00
/* 3 */
2019-02-09 19:13:25 +01:00
/***/ ( function ( module , _ _webpack _exports _ _ , _ _webpack _require _ _ ) {
2019-01-26 13:36:47 +01:00
2019-10-22 23:20:40 +02:00
"use strict" ;
_ _webpack _require _ _ . r ( _ _webpack _exports _ _ ) ;
2019-12-23 19:22:54 +01:00
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "__DO_NOT_USE__ActionTypes" , function ( ) { return ActionTypes ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "applyMiddleware" , function ( ) { return applyMiddleware ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "bindActionCreators" , function ( ) { return bindActionCreators ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "combineReducers" , function ( ) { return combineReducers ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "compose" , function ( ) { return compose ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "createStore" , function ( ) { return createStore ; } ) ;
/* harmony import */ var symbol _observable _ _WEBPACK _IMPORTED _MODULE _0 _ _ = _ _webpack _require _ _ ( 2 ) ;
2018-02-02 12:08:03 +01:00
2017-11-07 12:59:49 +01:00
2017-11-13 20:13:37 +01:00
/ * *
2019-10-22 23:20:40 +02:00
* These are private action types reserved by Redux .
* For any unknown actions , you must return the current state .
* If the current state is undefined , you must return the initial state .
* Do not reference these action types directly in your code .
2017-11-13 20:13:37 +01:00
* /
2019-10-22 23:20:40 +02:00
var randomString = function randomString ( ) {
return Math . random ( ) . toString ( 36 ) . substring ( 7 ) . split ( '' ) . join ( '.' ) ;
} ;
2017-11-15 07:51:53 +01:00
2019-10-22 23:20:40 +02:00
var ActionTypes = {
INIT : "@@redux/INIT" + randomString ( ) ,
REPLACE : "@@redux/REPLACE" + randomString ( ) ,
PROBE _UNKNOWN _ACTION : function PROBE _UNKNOWN _ACTION ( ) {
return "@@redux/PROBE_UNKNOWN_ACTION" + randomString ( ) ;
}
} ;
2017-11-15 07:51:53 +01:00
2019-10-22 23:20:40 +02:00
/ * *
* @ param { any } obj The object to inspect .
* @ returns { boolean } True if the argument appears to be a plain object .
* /
function isPlainObject ( obj ) {
if ( typeof obj !== 'object' || obj === null ) return false ;
var proto = obj ;
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
while ( Object . getPrototypeOf ( proto ) !== null ) {
proto = Object . getPrototypeOf ( proto ) ;
}
2017-11-15 07:51:53 +01:00
2019-10-22 23:20:40 +02:00
return Object . getPrototypeOf ( obj ) === proto ;
}
2018-10-13 12:19:24 +02:00
2019-10-22 23:20:40 +02:00
/ * *
* Creates a Redux store that holds the state tree .
* The only way to change the data in the store is to call ` dispatch() ` on it .
*
* There should only be a single store in your app . To specify how different
* parts of the state tree respond to actions , you may combine several reducers
* into a single reducer function by using ` combineReducers ` .
*
* @ param { Function } reducer A function that returns the next state tree , given
* the current state tree and the action to handle .
*
* @ param { any } [ preloadedState ] The initial state . You may optionally specify it
* to hydrate the state from the server in universal apps , or to restore a
* previously serialized user session .
* If you use ` combineReducers ` to produce the root reducer function , this must be
* an object with the same shape as ` combineReducers ` keys .
*
* @ param { Function } [ enhancer ] The store enhancer . You may optionally specify it
* to enhance the store with third - party capabilities such as middleware ,
* time travel , persistence , etc . The only store enhancer that ships with Redux
* is ` applyMiddleware() ` .
*
* @ returns { Store } A Redux store that lets you read the state , dispatch actions
* and subscribe to changes .
* /
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
function createStore ( reducer , preloadedState , enhancer ) {
var _ref2 ;
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
if ( typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments [ 3 ] === 'function' ) {
throw new Error ( 'It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function.' ) ;
}
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
if ( typeof preloadedState === 'function' && typeof enhancer === 'undefined' ) {
enhancer = preloadedState ;
preloadedState = undefined ;
}
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
if ( typeof enhancer !== 'undefined' ) {
if ( typeof enhancer !== 'function' ) {
throw new Error ( 'Expected the enhancer to be a function.' ) ;
2018-10-13 12:19:24 +02:00
}
2019-10-22 23:20:40 +02:00
return enhancer ( createStore ) ( reducer , preloadedState ) ;
}
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
if ( typeof reducer !== 'function' ) {
throw new Error ( 'Expected the reducer to be a function.' ) ;
}
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
var currentReducer = reducer ;
var currentState = preloadedState ;
var currentListeners = [ ] ;
var nextListeners = currentListeners ;
var isDispatching = false ;
/ * *
* This makes a shallow copy of currentListeners so we can use
* nextListeners as a temporary list while dispatching .
*
* This prevents any bugs around consumers calling
* subscribe / unsubscribe in the middle of a dispatch .
* /
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
function ensureCanMutateNextListeners ( ) {
if ( nextListeners === currentListeners ) {
nextListeners = currentListeners . slice ( ) ;
2017-11-15 07:51:53 +01:00
}
2019-10-22 23:20:40 +02:00
}
/ * *
* Reads the state tree managed by the store .
*
* @ returns { any } The current state tree of your application .
* /
2017-11-07 12:59:49 +01:00
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
function getState ( ) {
if ( isDispatching ) {
throw new Error ( 'You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.' ) ;
}
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
return currentState ;
}
/ * *
* Adds a change listener . It will be called any time an action is dispatched ,
* and some part of the state tree may potentially have changed . You may then
* call ` getState() ` to read the current state tree inside the callback .
*
* You may call ` dispatch() ` from a change listener , with the following
* caveats :
*
* 1. The subscriptions are snapshotted just before every ` dispatch() ` call .
* If you subscribe or unsubscribe while the listeners are being invoked , this
* will not have any effect on the ` dispatch() ` that is currently in progress .
* However , the next ` dispatch() ` call , whether nested or not , will use a more
* recent snapshot of the subscription list .
*
* 2. The listener should not expect to see all state changes , as the state
* might have been updated multiple times during a nested ` dispatch() ` before
* the listener is called . It is , however , guaranteed that all subscribers
* registered before the ` dispatch() ` started will be called with the latest
* state by the time it exits .
*
* @ param { Function } listener A callback to be invoked on every dispatch .
* @ returns { Function } A function to remove this change listener .
* /
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
function subscribe ( listener ) {
if ( typeof listener !== 'function' ) {
throw new Error ( 'Expected the listener to be a function.' ) ;
2017-11-15 07:51:53 +01:00
}
2018-10-13 12:19:24 +02:00
2019-10-22 23:20:40 +02:00
if ( isDispatching ) {
throw new Error ( 'You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api-reference/store#subscribe(listener) for more details.' ) ;
}
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
var isSubscribed = true ;
ensureCanMutateNextListeners ( ) ;
nextListeners . push ( listener ) ;
return function unsubscribe ( ) {
if ( ! isSubscribed ) {
return ;
}
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
if ( isDispatching ) {
throw new Error ( 'You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api-reference/store#subscribe(listener) for more details.' ) ;
}
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
isSubscribed = false ;
ensureCanMutateNextListeners ( ) ;
var index = nextListeners . indexOf ( listener ) ;
nextListeners . splice ( index , 1 ) ;
} ;
2017-11-15 07:51:53 +01:00
}
2019-10-22 23:20:40 +02:00
/ * *
* Dispatches an action . It is the only way to trigger a state change .
*
* The ` reducer ` function , used to create the store , will be called with the
* current state tree and the given ` action ` . Its return value will
* be considered the * * next * * state of the tree , and the change listeners
* will be notified .
*
* The base implementation only supports plain object actions . If you want to
* dispatch a Promise , an Observable , a thunk , or something else , you need to
* wrap your store creating function into the corresponding middleware . For
* example , see the documentation for the ` redux-thunk ` package . Even the
* middleware will eventually dispatch plain object actions using this method .
*
* @ param { Object } action A plain object representing “ what changed ” . It is
* a good idea to keep actions serializable so you can record and replay user
* sessions , or use the time travelling ` redux-devtools ` . An action must have
* a ` type ` property which may not be ` undefined ` . It is a good idea to use
* string constants for action types .
*
* @ returns { Object } For convenience , the same action object you dispatched .
*
* Note that , if you use a custom middleware , it may wrap ` dispatch() ` to
* return something else ( for example , a Promise you can await ) .
* /
2019-02-09 19:13:25 +01:00
2017-11-15 07:51:53 +01:00
2019-10-22 23:20:40 +02:00
function dispatch ( action ) {
if ( ! isPlainObject ( action ) ) {
throw new Error ( 'Actions must be plain objects. ' + 'Use custom middleware for async actions.' ) ;
}
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
if ( typeof action . type === 'undefined' ) {
throw new Error ( 'Actions may not have an undefined "type" property. ' + 'Have you misspelled a constant?' ) ;
}
2018-10-30 23:10:21 +01:00
2019-10-22 23:20:40 +02:00
if ( isDispatching ) {
throw new Error ( 'Reducers may not dispatch actions.' ) ;
}
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
try {
isDispatching = true ;
currentState = currentReducer ( currentState , action ) ;
} finally {
isDispatching = false ;
}
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
var listeners = currentListeners = nextListeners ;
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
for ( var i = 0 ; i < listeners . length ; i ++ ) {
var listener = listeners [ i ] ;
listener ( ) ;
}
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
return action ;
}
/ * *
* Replaces the reducer currently used by the store to calculate the state .
*
* You might need this if your app implements code splitting and you want to
* load some of the reducers dynamically . You might also need this if you
* implement a hot reloading mechanism for Redux .
*
* @ param { Function } nextReducer The reducer for the store to use instead .
* @ returns { void }
* /
2019-02-09 19:13:25 +01:00
2018-10-13 12:19:24 +02:00
2019-10-22 23:20:40 +02:00
function replaceReducer ( nextReducer ) {
if ( typeof nextReducer !== 'function' ) {
throw new Error ( 'Expected the nextReducer to be a function.' ) ;
}
2018-10-30 23:10:21 +01:00
2019-10-22 23:20:40 +02:00
currentReducer = nextReducer ; // This action has a similiar effect to ActionTypes.INIT.
// Any reducers that existed in both the new and old rootReducer
// will receive the previous state. This effectively populates
// the new state tree with any relevant data from the old one.
2018-10-30 23:10:21 +01:00
2019-10-22 23:20:40 +02:00
dispatch ( {
type : ActionTypes . REPLACE
} ) ;
}
/ * *
* Interoperability point for observable / reactive libraries .
* @ returns { observable } A minimal observable of state changes .
* For more information , see the observable proposal :
* https : //github.com/tc39/proposal-observable
* /
2018-05-25 15:00:27 +02:00
2017-11-15 07:51:53 +01:00
2019-10-22 23:20:40 +02:00
function observable ( ) {
var _ref ;
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
var outerSubscribe = subscribe ;
return _ref = {
/ * *
* The minimal observable subscription method .
* @ param { Object } observer Any object that can be used as an observer .
* The observer object should have a ` next ` method .
* @ returns { subscription } An object with an ` unsubscribe ` method that can
* be used to unsubscribe the observable from the store , and prevent further
* emission of values from the observable .
* /
subscribe : function subscribe ( observer ) {
if ( typeof observer !== 'object' || observer === null ) {
throw new TypeError ( 'Expected the observer to be an object.' ) ;
}
2018-02-02 12:08:03 +01:00
2019-10-22 23:20:40 +02:00
function observeState ( ) {
if ( observer . next ) {
observer . next ( getState ( ) ) ;
}
}
2017-11-13 20:13:37 +01:00
2019-10-22 23:20:40 +02:00
observeState ( ) ;
var unsubscribe = outerSubscribe ( observeState ) ;
return {
unsubscribe : unsubscribe
} ;
2017-11-15 07:51:53 +01:00
}
2019-12-23 19:22:54 +01:00
} , _ref [ symbol _observable _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ /* default */ "a" ] ] = function ( ) {
2019-10-22 23:20:40 +02:00
return this ;
} , _ref ;
} // When a store is created, an "INIT" action is dispatched so that every
// reducer returns their initial state. This effectively populates
// the initial state tree.
2017-11-07 12:59:49 +01:00
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
dispatch ( {
type : ActionTypes . INIT
} ) ;
return _ref2 = {
dispatch : dispatch ,
subscribe : subscribe ,
getState : getState ,
replaceReducer : replaceReducer
2019-12-23 19:22:54 +01:00
} , _ref2 [ symbol _observable _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ /* default */ "a" ] ] = observable , _ref2 ;
2019-10-22 23:20:40 +02:00
}
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
/ * *
* Prints a warning in the console if it exists .
*
* @ param { String } message The warning message .
* @ returns { void }
* /
function warning ( message ) {
/* eslint-disable no-console */
if ( typeof console !== 'undefined' && typeof console . error === 'function' ) {
console . error ( message ) ;
}
/* eslint-enable no-console */
2017-11-07 12:59:49 +01:00
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
try {
// This error was thrown as a convenience so that if you enable
// "break on all exceptions" in your console,
// it would pause the execution at this line.
throw new Error ( message ) ;
} catch ( e ) { } // eslint-disable-line no-empty
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
}
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
function getUndefinedStateErrorMessage ( key , action ) {
var actionType = action && action . type ;
var actionDescription = actionType && "action \"" + String ( actionType ) + "\"" || 'an action' ;
return "Given " + actionDescription + ", reducer \"" + key + "\" returned undefined. " + "To ignore an action, you must explicitly return the previous state. " + "If you want this reducer to hold no value, you can return null instead of undefined." ;
}
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
function getUnexpectedStateShapeWarningMessage ( inputState , reducers , action , unexpectedKeyCache ) {
var reducerKeys = Object . keys ( reducers ) ;
var argumentName = action && action . type === ActionTypes . INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer' ;
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
if ( reducerKeys . length === 0 ) {
return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.' ;
}
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
if ( ! isPlainObject ( inputState ) ) {
return "The " + argumentName + " has unexpected type of \"" + { } . toString . call ( inputState ) . match ( /\s([a-z|A-Z]+)/ ) [ 1 ] + "\". Expected argument to be an object with the following " + ( "keys: \"" + reducerKeys . join ( '", "' ) + "\"" ) ;
}
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
var unexpectedKeys = Object . keys ( inputState ) . filter ( function ( key ) {
return ! reducers . hasOwnProperty ( key ) && ! unexpectedKeyCache [ key ] ;
} ) ;
unexpectedKeys . forEach ( function ( key ) {
unexpectedKeyCache [ key ] = true ;
} ) ;
if ( action && action . type === ActionTypes . REPLACE ) return ;
2017-11-15 07:51:53 +01:00
2019-10-22 23:20:40 +02:00
if ( unexpectedKeys . length > 0 ) {
return "Unexpected " + ( unexpectedKeys . length > 1 ? 'keys' : 'key' ) + " " + ( "\"" + unexpectedKeys . join ( '", "' ) + "\" found in " + argumentName + ". " ) + "Expected to find one of the known reducer keys instead: " + ( "\"" + reducerKeys . join ( '", "' ) + "\". Unexpected keys will be ignored." ) ;
}
}
2017-11-15 07:51:53 +01:00
2019-10-22 23:20:40 +02:00
function assertReducerShape ( reducers ) {
Object . keys ( reducers ) . forEach ( function ( key ) {
var reducer = reducers [ key ] ;
var initialState = reducer ( undefined , {
type : ActionTypes . INIT
} ) ;
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
if ( typeof initialState === 'undefined' ) {
throw new Error ( "Reducer \"" + key + "\" returned undefined during initialization. " + "If the state passed to the reducer is undefined, you must " + "explicitly return the initial state. The initial state may " + "not be undefined. If you don't want to set a value for this reducer, " + "you can use null instead of undefined." ) ;
2017-11-07 12:59:49 +01:00
}
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
if ( typeof reducer ( undefined , {
type : ActionTypes . PROBE _UNKNOWN _ACTION ( )
} ) === 'undefined' ) {
throw new Error ( "Reducer \"" + key + "\" returned undefined when probed with a random type. " + ( "Don't try to handle " + ActionTypes . INIT + " or other actions in \"redux/*\" " ) + "namespace. They are considered private. Instead, you must return the " + "current state for any unknown actions, unless it is undefined, " + "in which case you must return the initial state, regardless of the " + "action type. The initial state may not be undefined, but can be null." ) ;
2017-11-07 12:59:49 +01:00
}
2019-10-22 23:20:40 +02:00
} ) ;
}
/ * *
* Turns an object whose values are different reducer functions , into a single
* reducer function . It will call every child reducer , and gather their results
* into a single state object , whose keys correspond to the keys of the passed
* reducer functions .
*
* @ param { Object } reducers An object whose values correspond to different
* reducer functions that need to be combined into one . One handy way to obtain
* it is to use ES6 ` import * as reducers ` syntax . The reducers may never return
* undefined for any action . Instead , they should return their initial state
* if the state passed to them was undefined , and the current state for any
* unrecognized action .
*
* @ returns { Function } A reducer function that invokes every reducer inside the
* passed object , and builds a state object with the same shape .
* /
2018-05-25 15:00:27 +02:00
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
function combineReducers ( reducers ) {
var reducerKeys = Object . keys ( reducers ) ;
var finalReducers = { } ;
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
for ( var i = 0 ; i < reducerKeys . length ; i ++ ) {
var key = reducerKeys [ i ] ;
2018-02-02 12:08:03 +01:00
2019-10-22 23:20:40 +02:00
if ( false ) { }
2018-02-02 12:08:03 +01:00
2019-10-22 23:20:40 +02:00
if ( typeof reducers [ key ] === 'function' ) {
finalReducers [ key ] = reducers [ key ] ;
2017-11-15 07:51:53 +01:00
}
2019-10-22 23:20:40 +02:00
}
2018-05-25 15:00:27 +02:00
2019-10-22 23:20:40 +02:00
var finalReducerKeys = Object . keys ( finalReducers ) ; // This is used to make sure we don't warn about the same
// keys multiple times.
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
var unexpectedKeyCache ;
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
if ( false ) { }
2018-02-02 12:08:03 +01:00
2019-10-22 23:20:40 +02:00
var shapeAssertionError ;
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
try {
assertReducerShape ( finalReducers ) ;
} catch ( e ) {
shapeAssertionError = e ;
}
2018-02-02 12:08:03 +01:00
2019-10-22 23:20:40 +02:00
return function combination ( state , action ) {
if ( state === void 0 ) {
state = { } ;
2017-11-15 07:51:53 +01:00
}
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
if ( shapeAssertionError ) {
throw shapeAssertionError ;
2017-11-15 07:51:53 +01:00
}
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
if ( false ) { var warningMessage ; }
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
var hasChanged = false ;
var nextState = { } ;
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
for ( var _i = 0 ; _i < finalReducerKeys . length ; _i ++ ) {
var _key = finalReducerKeys [ _i ] ;
var reducer = finalReducers [ _key ] ;
var previousStateForKey = state [ _key ] ;
var nextStateForKey = reducer ( previousStateForKey , action ) ;
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
if ( typeof nextStateForKey === 'undefined' ) {
var errorMessage = getUndefinedStateErrorMessage ( _key , action ) ;
throw new Error ( errorMessage ) ;
}
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
nextState [ _key ] = nextStateForKey ;
hasChanged = hasChanged || nextStateForKey !== previousStateForKey ;
2017-11-15 07:51:53 +01:00
}
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
return hasChanged ? nextState : state ;
} ;
}
2017-11-15 07:51:53 +01:00
2019-10-22 23:20:40 +02:00
function bindActionCreator ( actionCreator , dispatch ) {
return function ( ) {
return dispatch ( actionCreator . apply ( this , arguments ) ) ;
} ;
}
/ * *
* Turns an object whose values are action creators , into an object with the
* same keys , but with every function wrapped into a ` dispatch ` call so they
* may be invoked directly . This is just a convenience method , as you can call
* ` store.dispatch(MyActionCreators.doSomething()) ` yourself just fine .
*
* For convenience , you can also pass an action creator as the first argument ,
* and get a dispatch wrapped function in return .
*
* @ param { Function | Object } actionCreators An object whose values are action
* creator functions . One handy way to obtain it is to use ES6 ` import * as `
* syntax . You may also pass a single function .
*
* @ param { Function } dispatch The ` dispatch ` function available on your Redux
* store .
*
* @ returns { Function | Object } The object mimicking the original object , but with
* every action creator wrapped into the ` dispatch ` call . If you passed a
* function as ` actionCreators ` , the return value will also be a single
* function .
* /
2019-02-09 19:13:25 +01:00
2017-11-15 07:51:53 +01:00
2019-10-22 23:20:40 +02:00
function bindActionCreators ( actionCreators , dispatch ) {
if ( typeof actionCreators === 'function' ) {
return bindActionCreator ( actionCreators , dispatch ) ;
}
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
if ( typeof actionCreators !== 'object' || actionCreators === null ) {
throw new Error ( "bindActionCreators expected an object or a function, instead received " + ( actionCreators === null ? 'null' : typeof actionCreators ) + ". " + "Did you write \"import ActionCreators from\" instead of \"import * as ActionCreators from\"?" ) ;
}
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
var boundActionCreators = { } ;
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
for ( var key in actionCreators ) {
var actionCreator = actionCreators [ key ] ;
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
if ( typeof actionCreator === 'function' ) {
boundActionCreators [ key ] = bindActionCreator ( actionCreator , dispatch ) ;
}
}
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
return boundActionCreators ;
}
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
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 ;
}
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
return obj ;
}
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
function ownKeys ( object , enumerableOnly ) {
var keys = Object . keys ( object ) ;
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
if ( Object . getOwnPropertySymbols ) {
keys . push . apply ( keys , Object . getOwnPropertySymbols ( object ) ) ;
}
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
if ( enumerableOnly ) keys = keys . filter ( function ( sym ) {
return Object . getOwnPropertyDescriptor ( object , sym ) . enumerable ;
} ) ;
return keys ;
}
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
function _objectSpread2 ( target ) {
for ( var i = 1 ; i < arguments . length ; i ++ ) {
var source = arguments [ i ] != null ? arguments [ i ] : { } ;
2017-11-15 07:51:53 +01:00
2019-10-22 23:20:40 +02:00
if ( i % 2 ) {
ownKeys ( source , true ) . forEach ( function ( key ) {
_defineProperty ( target , key , source [ key ] ) ;
} ) ;
} else if ( Object . getOwnPropertyDescriptors ) {
Object . defineProperties ( target , Object . getOwnPropertyDescriptors ( source ) ) ;
} else {
ownKeys ( source ) . forEach ( function ( key ) {
Object . defineProperty ( target , key , Object . getOwnPropertyDescriptor ( source , key ) ) ;
2017-11-15 07:51:53 +01:00
} ) ;
2017-11-07 12:59:49 +01:00
}
2019-10-22 23:20:40 +02:00
}
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
return target ;
}
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
/ * *
* Composes single - argument functions from right to left . The rightmost
* function can take multiple arguments as it provides the signature for
* the resulting composite function .
*
* @ param { ... Function } funcs The functions to compose .
* @ returns { Function } A function obtained by composing the argument functions
* from right to left . For example , compose ( f , g , h ) is identical to doing
* ( ... args ) => f ( g ( h ( ... args ) ) ) .
* /
function compose ( ) {
for ( var _len = arguments . length , funcs = new Array ( _len ) , _key = 0 ; _key < _len ; _key ++ ) {
funcs [ _key ] = arguments [ _key ] ;
}
2019-01-26 13:36:47 +01:00
2019-10-22 23:20:40 +02:00
if ( funcs . length === 0 ) {
return function ( arg ) {
return arg ;
} ;
}
2018-10-13 12:19:24 +02:00
2019-10-22 23:20:40 +02:00
if ( funcs . length === 1 ) {
return funcs [ 0 ] ;
}
2018-10-13 12:19:24 +02:00
2019-10-22 23:20:40 +02:00
return funcs . reduce ( function ( a , b ) {
return function ( ) {
return a ( b . apply ( void 0 , arguments ) ) ;
} ;
} ) ;
}
2018-10-13 12:19:24 +02:00
2019-10-22 23:20:40 +02:00
/ * *
* Creates a store enhancer that applies middleware to the dispatch method
* of the Redux store . This is handy for a variety of tasks , such as expressing
* asynchronous actions in a concise manner , or logging every action payload .
*
* See ` redux-thunk ` package as an example of the Redux middleware .
*
* Because middleware is potentially asynchronous , this should be the first
* store enhancer in the composition chain .
*
* Note that each middleware will be given the ` dispatch ` and ` getState ` functions
* as named arguments .
*
* @ param { ... Function } middlewares The middleware chain to be applied .
* @ returns { Function } A store enhancer applying the middleware .
* /
2018-10-13 12:19:24 +02:00
2019-10-22 23:20:40 +02:00
function applyMiddleware ( ) {
for ( var _len = arguments . length , middlewares = new Array ( _len ) , _key = 0 ; _key < _len ; _key ++ ) {
middlewares [ _key ] = arguments [ _key ] ;
}
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
return function ( createStore ) {
return function ( ) {
var store = createStore . apply ( void 0 , arguments ) ;
2018-10-13 12:19:24 +02:00
2019-10-22 23:20:40 +02:00
var _dispatch = function dispatch ( ) {
throw new Error ( 'Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.' ) ;
} ;
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
var middlewareAPI = {
getState : store . getState ,
dispatch : function dispatch ( ) {
return _dispatch . apply ( void 0 , arguments ) ;
2018-10-13 12:19:24 +02:00
}
2019-10-22 23:20:40 +02:00
} ;
var chain = middlewares . map ( function ( middleware ) {
return middleware ( middlewareAPI ) ;
} ) ;
_dispatch = compose . apply ( void 0 , chain ) ( store . dispatch ) ;
return _objectSpread2 ( { } , store , {
dispatch : _dispatch
} ) ;
} ;
} ;
}
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
/ *
* This is a dummy function to check if the function name has been altered by minification .
* If the function has been minified and NODE _ENV !== 'production' , warn the user .
* /
2018-10-13 12:19:24 +02:00
2019-10-22 23:20:40 +02:00
function isCrushed ( ) { }
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
if ( false ) { }
2019-02-09 19:13:25 +01:00
2018-10-13 12:19:24 +02:00
2019-12-23 19:22:54 +01:00
/***/ } ) ,
/* 4 */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
2018-10-13 12:19:24 +02:00
2019-12-23 19:22:54 +01:00
"use strict" ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
var _ _importDefault = this && this . _ _importDefault || function ( mod ) {
return mod && mod . _ _esModule ? mod : {
"default" : mod
} ;
} ;
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
var redux _1 = _ _webpack _require _ _ ( 3 ) ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
var items _1 = _ _importDefault ( _ _webpack _require _ _ ( 14 ) ) ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
var groups _1 = _ _importDefault ( _ _webpack _require _ _ ( 15 ) ) ;
var choices _1 = _ _importDefault ( _ _webpack _require _ _ ( 16 ) ) ;
var loading _1 = _ _importDefault ( _ _webpack _require _ _ ( 17 ) ) ;
var utils _1 = _ _webpack _require _ _ ( 1 ) ;
exports . defaultState = {
groups : [ ] ,
items : [ ] ,
choices : [ ] ,
loading : false
} ;
var appReducer = redux _1 . combineReducers ( {
items : items _1 . default ,
groups : groups _1 . default ,
choices : choices _1 . default ,
loading : loading _1 . default
} ) ;
var rootReducer = function rootReducer ( passedState , action ) {
var state = passedState ; // If we are clearing all items, groups and options we reassign
// state and then pass that state to our proper reducer. This isn't
// mutating our actual state
// See: http://stackoverflow.com/a/35641992
if ( action . type === 'CLEAR_ALL' ) {
state = exports . defaultState ;
} else if ( action . type === 'RESET_TO' ) {
return utils _1 . cloneObject ( action . state ) ;
2019-10-22 23:20:40 +02:00
}
2019-12-23 19:22:54 +01:00
return appReducer ( state , action ) ;
} ;
exports . default = rootReducer ;
/***/ } ) ,
/* 5 */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
"use strict" ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
var utils _1 = _ _webpack _require _ _ ( 1 ) ;
var WrappedElement =
/** @class */
function ( ) {
function WrappedElement ( _a ) {
var element = _a . element ,
classNames = _a . classNames ;
this . element = element ;
this . classNames = classNames ;
if ( ! ( element instanceof HTMLInputElement ) && ! ( element instanceof HTMLSelectElement ) ) {
throw new TypeError ( 'Invalid element passed' ) ;
}
this . isDisabled = false ;
2019-10-22 23:20:40 +02:00
}
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
Object . defineProperty ( WrappedElement . prototype , "isActive" , {
get : function get ( ) {
return this . element . dataset . choice === 'active' ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( WrappedElement . prototype , "dir" , {
get : function get ( ) {
return this . element . dir ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( WrappedElement . prototype , "value" , {
get : function get ( ) {
return this . element . value ;
} ,
set : function set ( value ) {
// you must define setter here otherwise it will be readonly property
this . element . value = value ;
} ,
enumerable : true ,
configurable : true
} ) ;
WrappedElement . prototype . conceal = function ( ) {
// Hide passed input
this . element . classList . add ( this . classNames . input ) ;
this . element . hidden = true ; // Remove element from tab index
this . element . tabIndex = - 1 ; // Backup original styles if any
var origStyle = this . element . getAttribute ( 'style' ) ;
if ( origStyle ) {
this . element . setAttribute ( 'data-choice-orig-style' , origStyle ) ;
}
this . element . setAttribute ( 'data-choice' , 'active' ) ;
} ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
WrappedElement . prototype . reveal = function ( ) {
// Reinstate passed element
this . element . classList . remove ( this . classNames . input ) ;
this . element . hidden = false ;
this . element . removeAttribute ( 'tabindex' ) ; // Recover original styles if any
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
var origStyle = this . element . getAttribute ( 'data-choice-orig-style' ) ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( origStyle ) {
this . element . removeAttribute ( 'data-choice-orig-style' ) ;
this . element . setAttribute ( 'style' , origStyle ) ;
} else {
this . element . removeAttribute ( 'style' ) ;
}
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
this . element . removeAttribute ( 'data-choice' ) ; // Re-assign values - this is weird, I know
// @todo Figure out why we need to do this
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
this . element . value = this . element . value ; // eslint-disable-line no-self-assign
} ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
WrappedElement . prototype . enable = function ( ) {
this . element . removeAttribute ( 'disabled' ) ;
this . element . disabled = false ;
this . isDisabled = false ;
} ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
WrappedElement . prototype . disable = function ( ) {
this . element . setAttribute ( 'disabled' , '' ) ;
this . element . disabled = true ;
this . isDisabled = true ;
} ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
WrappedElement . prototype . triggerEvent = function ( eventType , data ) {
utils _1 . dispatchEvent ( this . element , eventType , data ) ;
} ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
return WrappedElement ;
} ( ) ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
exports . default = WrappedElement ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
/***/ } ) ,
/* 6 */
/***/ ( function ( module , _ _webpack _exports _ _ , _ _webpack _require _ _ ) {
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
"use strict" ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "a" , function ( ) { return symbolObservablePonyfill ; } ) ;
function symbolObservablePonyfill ( root ) {
var result ;
var Symbol = root . Symbol ;
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
if ( typeof Symbol === 'function' ) {
if ( Symbol . observable ) {
result = Symbol . observable ;
} else {
result = Symbol ( 'observable' ) ;
Symbol . observable = result ;
}
} else {
result = '@@observable' ;
}
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
return result ;
} ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
/***/ } ) ,
/* 7 */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
module . exports = _ _webpack _require _ _ ( 8 ) ;
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
/***/ } ) ,
/* 8 */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
"use strict" ;
2019-02-09 19:13:25 +01:00
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
var _ _spreadArrays = this && this . _ _spreadArrays || function ( ) {
for ( var s = 0 , i = 0 , il = arguments . length ; i < il ; i ++ ) {
s += arguments [ i ] . length ;
}
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
for ( var r = Array ( s ) , k = 0 , i = 0 ; i < il ; i ++ ) {
for ( var a = arguments [ i ] , j = 0 , jl = a . length ; j < jl ; j ++ , k ++ ) {
r [ k ] = a [ j ] ;
}
2019-10-22 23:20:40 +02:00
}
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
return r ;
2019-10-22 23:20:40 +02:00
} ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
var _ _importDefault = this && this . _ _importDefault || function ( mod ) {
return mod && mod . _ _esModule ? mod : {
"default" : mod
} ;
2019-10-22 23:20:40 +02:00
} ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
/* eslint-disable @typescript-eslint/no-explicit-any */
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
var fuse _js _1 = _ _importDefault ( _ _webpack _require _ _ ( 9 ) ) ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
var deepmerge _1 = _ _importDefault ( _ _webpack _require _ _ ( 10 ) ) ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
var store _1 = _ _importDefault ( _ _webpack _require _ _ ( 11 ) ) ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
var components _1 = _ _webpack _require _ _ ( 18 ) ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
var constants _1 = _ _webpack _require _ _ ( 0 ) ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
var templates _1 = _ _importDefault ( _ _webpack _require _ _ ( 25 ) ) ;
2018-06-07 17:54:11 +02:00
2019-12-23 19:22:54 +01:00
var choices _1 = _ _webpack _require _ _ ( 26 ) ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
var items _1 = _ _webpack _require _ _ ( 27 ) ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
var groups _1 = _ _webpack _require _ _ ( 28 ) ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
var misc _1 = _ _webpack _require _ _ ( 29 ) ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
var utils _1 = _ _webpack _require _ _ ( 1 ) ;
var reducers _1 = _ _webpack _require _ _ ( 4 ) ;
/** @see {@link http://browserhacks.com/#hack-acea075d0ac6954f275a70023906050c} */
var IS _IE11 = '-ms-scroll-limit' in document . documentElement . style && '-ms-ime-align' in document . documentElement . style ;
var USER _DEFAULTS = { } ;
2019-11-03 18:45:16 +01:00
/ * *
2019-12-23 19:22:54 +01:00
* Choices
* @ author Josh Johnson < josh @ joshuajohnson . co . uk >
2019-11-03 18:45:16 +01:00
* /
2019-12-23 19:22:54 +01:00
var Choices =
/** @class */
function ( ) {
function Choices ( element , userConfig ) {
var _this = this ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
if ( element === void 0 ) {
element = '[data-choice]' ;
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
if ( userConfig === void 0 ) {
userConfig = { } ;
}
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
this . config = deepmerge _1 . default . all ( [ constants _1 . DEFAULT _CONFIG , Choices . defaults . options , userConfig ] , // When merging array configs, replace with a copy of the userConfig array,
// instead of concatenating with the default array
{
arrayMerge : function arrayMerge ( _ , sourceArray ) {
return _ _spreadArrays ( sourceArray ) ;
}
} ) ;
var invalidConfigOptions = utils _1 . diff ( this . config , constants _1 . DEFAULT _CONFIG ) ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( invalidConfigOptions . length ) {
console . warn ( 'Unknown config option(s) passed' , invalidConfigOptions . join ( ', ' ) ) ;
}
var passedElement = typeof element === 'string' ? document . querySelector ( element ) : element ;
if ( ! ( passedElement instanceof HTMLInputElement || passedElement instanceof HTMLSelectElement ) ) {
throw TypeError ( 'Expected one of the following types text|select-one|select-multiple' ) ;
}
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
this . _isTextElement = passedElement . type === constants _1 . TEXT _TYPE ;
this . _isSelectOneElement = passedElement . type === constants _1 . SELECT _ONE _TYPE ;
this . _isSelectMultipleElement = passedElement . type === constants _1 . SELECT _MULTIPLE _TYPE ;
this . _isSelectElement = this . _isSelectOneElement || this . _isSelectMultipleElement ;
this . config . searchEnabled = this . _isSelectMultipleElement || this . config . searchEnabled ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( ! [ 'auto' , 'always' ] . includes ( "" + this . config . renderSelectedChoices ) ) {
this . config . renderSelectedChoices = 'auto' ;
}
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
if ( userConfig . addItemFilter && typeof userConfig . addItemFilter !== 'function' ) {
var re = userConfig . addItemFilter instanceof RegExp ? userConfig . addItemFilter : new RegExp ( userConfig . addItemFilter ) ;
this . config . addItemFilter = re . test . bind ( re ) ;
}
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( this . _isTextElement ) {
this . passedElement = new components _1 . WrappedInput ( {
element : passedElement ,
classNames : this . config . classNames ,
delimiter : this . config . delimiter
} ) ;
} else {
this . passedElement = new components _1 . WrappedSelect ( {
element : passedElement ,
classNames : this . config . classNames ,
template : function template ( data ) {
return _this . _templates . option ( data ) ;
}
} ) ;
2019-01-26 13:36:47 +01:00
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
this . initialised = false ;
this . _store = new store _1 . default ( ) ;
this . _initialState = reducers _1 . defaultState ;
this . _currentState = reducers _1 . defaultState ;
this . _prevState = reducers _1 . defaultState ;
this . _currentValue = '' ;
this . _canSearch = ! ! this . config . searchEnabled ;
this . _isScrollingOnIe = false ;
this . _highlightPosition = 0 ;
this . _wasTap = true ;
this . _placeholderValue = this . _generatePlaceholderValue ( ) ;
this . _baseId = utils _1 . generateId ( this . passedElement . element , 'choices-' ) ;
/ * *
* setting direction in cases where it ' s explicitly set on passedElement
* or when calculated direction is different from the document
* /
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
this . _direction = this . passedElement . dir ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
if ( ! this . _direction ) {
var elementDirection = window . getComputedStyle ( this . passedElement . element ) . direction ;
var documentDirection = window . getComputedStyle ( document . documentElement ) . direction ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
if ( elementDirection !== documentDirection ) {
this . _direction = elementDirection ;
}
}
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
this . _idNames = {
itemChoice : 'item-choice'
} ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
if ( this . _isSelectElement ) {
// Assign preset groups from passed element
this . _presetGroups = this . passedElement . optionGroups ; // Assign preset options from passed element
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
this . _presetOptions = this . passedElement . options ;
} // Assign preset choices from passed object
2017-11-15 07:51:53 +01:00
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
this . _presetChoices = this . config . choices ; // Assign preset items from passed object first
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
this . _presetItems = this . config . items ; // Add any values passed from attribute
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
if ( this . passedElement . value && this . _isTextElement ) {
var splitValues = this . passedElement . value . split ( this . config . delimiter ) ;
this . _presetItems = this . _presetItems . concat ( splitValues ) ;
} // Create array of choices from option elements
2017-11-07 12:59:49 +01:00
2018-05-28 17:22:22 +02:00
2019-12-23 19:22:54 +01:00
if ( this . passedElement . options ) {
this . passedElement . options . forEach ( function ( option ) {
_this . _presetChoices . push ( {
value : option . value ,
label : option . innerHTML ,
selected : ! ! option . selected ,
disabled : option . disabled || option . parentNode . disabled ,
placeholder : option . value === '' || option . hasAttribute ( 'placeholder' ) ,
customProperties : option . dataset [ 'custom-properties' ]
} ) ;
} ) ;
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
this . _render = this . _render . bind ( this ) ;
this . _onFocus = this . _onFocus . bind ( this ) ;
this . _onBlur = this . _onBlur . bind ( this ) ;
this . _onKeyUp = this . _onKeyUp . bind ( this ) ;
this . _onKeyDown = this . _onKeyDown . bind ( this ) ;
this . _onClick = this . _onClick . bind ( this ) ;
this . _onTouchMove = this . _onTouchMove . bind ( this ) ;
this . _onTouchEnd = this . _onTouchEnd . bind ( this ) ;
this . _onMouseDown = this . _onMouseDown . bind ( this ) ;
this . _onMouseOver = this . _onMouseOver . bind ( this ) ;
this . _onFormReset = this . _onFormReset . bind ( this ) ;
this . _onSelectKey = this . _onSelectKey . bind ( this ) ;
this . _onEnterKey = this . _onEnterKey . bind ( this ) ;
this . _onEscapeKey = this . _onEscapeKey . bind ( this ) ;
this . _onDirectionKey = this . _onDirectionKey . bind ( this ) ;
this . _onDeleteKey = this . _onDeleteKey . bind ( this ) ; // If element has already been initialised with Choices, fail silently
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
if ( this . passedElement . isActive ) {
if ( ! this . config . silent ) {
console . warn ( 'Trying to initialise Choices on element already initialised' , {
element : element
} ) ;
}
2018-05-28 17:22:22 +02:00
2019-12-23 19:22:54 +01:00
this . initialised = true ;
return ;
} // Let's go
2018-05-28 17:22:22 +02:00
2017-11-13 20:13:37 +01:00
2019-12-23 19:22:54 +01:00
this . init ( ) ;
2019-10-22 23:20:40 +02:00
}
2018-05-27 12:57:21 +02:00
2019-12-23 19:22:54 +01:00
Object . defineProperty ( Choices , "defaults" , {
get : function get ( ) {
return Object . preventExtensions ( {
get options ( ) {
return USER _DEFAULTS ;
} ,
2017-11-13 20:13:37 +01:00
2019-12-23 19:22:54 +01:00
get templates ( ) {
return templates _1 . default ;
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
} ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
2017-11-13 20:13:37 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . init = function ( ) {
if ( this . initialised ) {
return ;
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
this . _createTemplates ( ) ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
this . _createElements ( ) ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
this . _createStructure ( ) ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
this . _store . subscribe ( this . _render ) ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
this . _render ( ) ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
this . _addEventListeners ( ) ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
var shouldDisable = ! this . config . addItems || this . passedElement . element . hasAttribute ( 'disabled' ) ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( shouldDisable ) {
this . disable ( ) ;
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
this . initialised = true ;
var callbackOnInit = this . config . callbackOnInit ; // Run callback if it is a function
2018-10-30 20:21:07 +01:00
2019-12-23 19:22:54 +01:00
if ( callbackOnInit && typeof callbackOnInit === 'function' ) {
callbackOnInit . call ( this ) ;
}
2019-10-22 23:20:40 +02:00
} ;
2018-05-27 12:57:21 +02:00
2019-12-23 19:22:54 +01:00
Choices . prototype . destroy = function ( ) {
if ( ! this . initialised ) {
return ;
2018-10-13 12:19:24 +02:00
}
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
this . _removeEventListeners ( ) ;
this . passedElement . reveal ( ) ;
this . containerOuter . unwrap ( this . passedElement . element ) ;
this . clearStore ( ) ;
if ( this . _isSelectElement ) {
this . passedElement . options = this . _presetOptions ;
2017-11-07 12:59:49 +01:00
}
2017-11-13 20:13:37 +01:00
2019-12-23 19:22:54 +01:00
this . _templates = templates _1 . default ;
this . initialised = false ;
} ;
Choices . prototype . enable = function ( ) {
if ( this . passedElement . isDisabled ) {
this . passedElement . enable ( ) ;
2017-11-15 07:51:53 +01:00
}
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
if ( this . containerOuter . isDisabled ) {
this . _addEventListeners ( ) ;
this . input . enable ( ) ;
this . containerOuter . enable ( ) ;
2017-11-07 12:59:49 +01:00
}
2019-12-23 19:22:54 +01:00
return this ;
} ;
Choices . prototype . disable = function ( ) {
if ( ! this . passedElement . isDisabled ) {
this . passedElement . disable ( ) ;
2017-11-15 07:51:53 +01:00
}
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( ! this . containerOuter . isDisabled ) {
this . _removeEventListeners ( ) ;
this . input . disable ( ) ;
this . containerOuter . disable ( ) ;
2018-05-28 17:22:22 +02:00
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
return this ;
} ;
Choices . prototype . highlightItem = function ( item , runEvent ) {
if ( runEvent === void 0 ) {
runEvent = true ;
2019-10-22 23:20:40 +02:00
}
2018-02-02 12:08:03 +01:00
2019-12-23 19:22:54 +01:00
if ( ! item || ! item . id ) {
return this ;
2017-11-07 12:59:49 +01:00
}
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
var id = item . id ,
_a = item . groupId ,
groupId = _a === void 0 ? - 1 : _a ,
_b = item . value ,
value = _b === void 0 ? '' : _b ,
_c = item . label ,
label = _c === void 0 ? '' : _c ;
var group = groupId >= 0 ? this . _store . getGroupById ( groupId ) : null ;
this . _store . dispatch ( items _1 . highlightItem ( id , true ) ) ;
if ( runEvent ) {
this . passedElement . triggerEvent ( constants _1 . EVENTS . highlightItem , {
id : id ,
value : value ,
label : label ,
groupValue : group && group . value ? group . value : null
2018-11-25 13:48:49 +01:00
} ) ;
2017-11-07 12:59:49 +01:00
}
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
return this ;
} ;
2017-11-13 20:13:37 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . unhighlightItem = function ( item ) {
if ( ! item || ! item . id ) {
return this ;
2017-11-07 12:59:49 +01:00
}
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
var id = item . id ,
_a = item . groupId ,
groupId = _a === void 0 ? - 1 : _a ,
_b = item . value ,
value = _b === void 0 ? '' : _b ,
_c = item . label ,
label = _c === void 0 ? '' : _c ;
var group = groupId >= 0 ? this . _store . getGroupById ( groupId ) : null ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
this . _store . dispatch ( items _1 . highlightItem ( id , false ) ) ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
this . passedElement . triggerEvent ( constants _1 . EVENTS . highlightItem , {
id : id ,
value : value ,
label : label ,
groupValue : group && group . value ? group . value : null
} ) ;
return this ;
} ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . highlightAll = function ( ) {
var _this = this ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
this . _store . items . forEach ( function ( item ) {
return _this . highlightItem ( item ) ;
} ) ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
return this ;
} ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . unhighlightAll = function ( ) {
var _this = this ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
this . _store . items . forEach ( function ( item ) {
return _this . unhighlightItem ( item ) ;
} ) ;
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
return this ;
2019-12-23 19:22:54 +01:00
} ;
Choices . prototype . removeActiveItemsByValue = function ( value ) {
var _this = this ;
this . _store . activeItems . filter ( function ( item ) {
return item . value === value ;
} ) . forEach ( function ( item ) {
return _this . _removeItem ( item ) ;
} ) ;
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
return this ;
2017-11-15 07:51:53 +01:00
} ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . removeActiveItems = function ( excludedId ) {
var _this = this ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
this . _store . activeItems . filter ( function ( _a ) {
var id = _a . id ;
return id !== excludedId ;
} ) . forEach ( function ( item ) {
return _this . _removeItem ( item ) ;
} ) ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
return this ;
} ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . removeHighlightedItems = function ( runEvent ) {
var _this = this ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
if ( runEvent === void 0 ) {
runEvent = false ;
}
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
this . _store . highlightedActiveItems . forEach ( function ( item ) {
_this . _removeItem ( item ) ; // If this action was performed by the user
// trigger the event
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
if ( runEvent ) {
_this . _triggerChange ( item . value ) ;
}
} ) ;
return this ;
} ;
Choices . prototype . showDropdown = function ( preventInputFocus ) {
var _this = this ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
if ( this . dropdown . isActive ) {
return this ;
}
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
requestAnimationFrame ( function ( ) {
_this . dropdown . show ( ) ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
_this . containerOuter . open ( _this . dropdown . distanceFromTopWindow ) ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
if ( ! preventInputFocus && _this . _canSearch ) {
_this . input . focus ( ) ;
}
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
_this . passedElement . triggerEvent ( constants _1 . EVENTS . showDropdown , { } ) ;
} ) ;
return this ;
2019-11-03 18:45:16 +01:00
} ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . hideDropdown = function ( preventInputBlur ) {
var _this = this ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( ! this . dropdown . isActive ) {
return this ;
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
requestAnimationFrame ( function ( ) {
_this . dropdown . hide ( ) ;
2017-11-13 20:13:37 +01:00
2019-12-23 19:22:54 +01:00
_this . containerOuter . close ( ) ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( ! preventInputBlur && _this . _canSearch ) {
_this . input . removeActiveDescendant ( ) ;
_this . input . blur ( ) ;
}
_this . passedElement . triggerEvent ( constants _1 . EVENTS . hideDropdown , { } ) ;
} ) ;
return this ;
} ;
Choices . prototype . getValue = function ( valueOnly ) {
if ( valueOnly === void 0 ) {
valueOnly = false ;
2019-10-22 23:20:40 +02:00
}
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
var values = this . _store . activeItems . reduce ( function ( selectedItems , item ) {
var itemValue = valueOnly ? item . value : item ;
selectedItems . push ( itemValue ) ;
return selectedItems ;
} , [ ] ) ;
2016-08-23 08:24:45 +02:00
2019-12-23 19:22:54 +01:00
return this . _isSelectOneElement ? values [ 0 ] : values ;
2019-11-03 18:45:16 +01:00
} ;
2019-12-23 19:22:54 +01:00
Choices . prototype . setValue = function ( items ) {
var _this = this ;
if ( ! this . initialised ) {
return this ;
}
items . forEach ( function ( value ) {
return _this . _setChoiceOrItem ( value ) ;
} ) ;
return this ;
} ;
Choices . prototype . setChoiceByValue = function ( value ) {
var _this = this ;
if ( ! this . initialised || this . _isTextElement ) {
return this ;
} // If only one value has been passed, convert to array
var choiceValue = Array . isArray ( value ) ? value : [ value ] ; // Loop through each value and
choiceValue . forEach ( function ( val ) {
return _this . _findAndSelectChoiceByValue ( val ) ;
} ) ;
return this ;
} ;
2019-10-22 23:20:40 +02:00
/ * *
2019-12-23 19:22:54 +01:00
* Set choices of select input via an array of objects ( or function that returns array of object or promise of it ) ,
* a value field name and a label field name .
* This behaves the same as passing items via the choices option but can be called after initialising Choices .
* This can also be used to add groups of choices ( see example 2 ) ; Optionally pass a true ` replaceChoices ` value to remove any existing choices .
* Optionally pass a ` customProperties ` object to add additional data to your choices ( useful when searching / filtering etc ) .
*
* * * Input types affected : * * select - one , select - multiple
*
* @ example
* ` ` ` js
* const example = new Choices ( element ) ;
*
* example . setChoices ( [
* { value : 'One' , label : 'Label One' , disabled : true } ,
* { value : 'Two' , label : 'Label Two' , selected : true } ,
* { value : 'Three' , label : 'Label Three' } ,
* ] , 'value' , 'label' , false ) ;
* ` ` `
*
* @ example
* ` ` ` js
* const example = new Choices ( element ) ;
*
* example . setChoices ( async ( ) => {
* try {
* const items = await fetch ( '/items' ) ;
* return items . json ( )
* } catch ( err ) {
* console . error ( err )
* }
* } ) ;
* ` ` `
*
* @ example
* ` ` ` js
* const example = new Choices ( element ) ;
*
* example . setChoices ( [ {
* label : 'Group one' ,
* id : 1 ,
* disabled : false ,
* choices : [
* { value : 'Child One' , label : 'Child One' , selected : true } ,
* { value : 'Child Two' , label : 'Child Two' , disabled : true } ,
* { value : 'Child Three' , label : 'Child Three' } ,
* ]
* } ,
* {
* label : 'Group two' ,
* id : 2 ,
* disabled : false ,
* choices : [
* { value : 'Child Four' , label : 'Child Four' , disabled : true } ,
* { value : 'Child Five' , label : 'Child Five' } ,
* { value : 'Child Six' , label : 'Child Six' , customProperties : {
* description : 'Custom description about child six' ,
* random : 'Another random custom property'
* } } ,
* ]
* } ] , 'value' , 'label' , false ) ;
* ` ` `
2019-10-22 23:20:40 +02:00
* /
2016-08-23 08:24:45 +02:00
2019-02-26 13:20:52 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . setChoices = function ( choicesArrayOrFetcher , value , label , replaceChoices ) {
var _this = this ;
if ( choicesArrayOrFetcher === void 0 ) {
choicesArrayOrFetcher = [ ] ;
2017-11-15 07:51:53 +01:00
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
if ( value === void 0 ) {
value = 'value' ;
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
if ( label === void 0 ) {
label = 'label' ;
2019-10-22 23:20:40 +02:00
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
if ( replaceChoices === void 0 ) {
replaceChoices = false ;
2019-10-22 23:20:40 +02:00
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
if ( ! this . initialised ) {
throw new ReferenceError ( "setChoices was called on a non-initialized instance of Choices" ) ;
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
if ( ! this . _isSelectElement ) {
throw new TypeError ( "setChoices can't be used with INPUT based Choices" ) ;
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
if ( typeof value !== 'string' || ! value ) {
throw new TypeError ( "value parameter must be a name of 'value' field in passed objects" ) ;
} // Clear choices if needed
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
if ( replaceChoices ) {
this . clearChoices ( ) ;
2019-10-22 23:20:40 +02:00
}
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( typeof choicesArrayOrFetcher === 'function' ) {
// it's a choices fetcher function
var fetcher _1 = choicesArrayOrFetcher ( this ) ;
if ( typeof Promise === 'function' && fetcher _1 instanceof Promise ) {
// that's a promise
// eslint-disable-next-line compat/compat
return new Promise ( function ( resolve ) {
return requestAnimationFrame ( resolve ) ;
} ) // eslint-disable-line compat/compat
. then ( function ( ) {
return _this . _handleLoadingState ( true ) ;
} ) . then ( function ( ) {
return fetcher _1 ;
} ) . then ( function ( data ) {
return _this . setChoices ( data , value , label , replaceChoices ) ;
} ) . catch ( function ( err ) {
if ( ! _this . config . silent ) {
console . error ( err ) ;
}
} ) . then ( function ( ) {
return _this . _handleLoadingState ( false ) ;
} ) . then ( function ( ) {
return _this ;
} ) ;
} // function returned something else than promise, let's check if it's an array of choices
if ( ! Array . isArray ( fetcher _1 ) ) {
throw new TypeError ( ".setChoices first argument function must return either array of choices or Promise, got: " + typeof fetcher _1 ) ;
} // recursion with results, it's sync and choices were cleared already
return this . setChoices ( fetcher _1 , value , label , false ) ;
}
if ( ! Array . isArray ( choicesArrayOrFetcher ) ) {
throw new TypeError ( ".setChoices must be called either with array of choices with a function resulting into Promise of array of choices" ) ;
}
this . containerOuter . removeLoadingState ( ) ;
this . _startLoading ( ) ;
choicesArrayOrFetcher . forEach ( function ( groupOrChoice ) {
if ( groupOrChoice . choices ) {
_this . _addGroup ( {
id : groupOrChoice . id ? parseInt ( "" + groupOrChoice . id , 10 ) : null ,
group : groupOrChoice ,
valueKey : value ,
labelKey : label
} ) ;
} else {
var choice = groupOrChoice ;
_this . _addChoice ( {
value : choice [ value ] ,
label : choice [ label ] ,
isSelected : ! ! choice . selected ,
isDisabled : ! ! choice . disabled ,
placeholder : ! ! choice . placeholder ,
customProperties : choice . customProperties
} ) ;
}
} ) ;
this . _stopLoading ( ) ;
return this ;
} ;
Choices . prototype . clearChoices = function ( ) {
this . _store . dispatch ( choices _1 . clearChoices ( ) ) ;
return this ;
} ;
Choices . prototype . clearStore = function ( ) {
this . _store . dispatch ( misc _1 . clearAll ( ) ) ;
return this ;
2019-11-03 18:45:16 +01:00
} ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . clearInput = function ( ) {
var shouldSetInputWidth = ! this . _isSelectOneElement ;
this . input . clear ( shouldSetInputWidth ) ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
if ( ! this . _isTextElement && this . _canSearch ) {
this . _isSearching = false ;
this . _store . dispatch ( choices _1 . activateChoices ( true ) ) ;
2019-10-22 23:20:40 +02:00
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
return this ;
} ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _render = function ( ) {
if ( this . _store . isLoading ( ) ) {
return ;
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
this . _currentState = this . _store . state ;
var stateChanged = this . _currentState . choices !== this . _prevState . choices || this . _currentState . groups !== this . _prevState . groups || this . _currentState . items !== this . _prevState . items ;
var shouldRenderChoices = this . _isSelectElement ;
var shouldRenderItems = this . _currentState . items !== this . _prevState . items ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( ! stateChanged ) {
return ;
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
if ( shouldRenderChoices ) {
this . _renderChoices ( ) ;
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
if ( shouldRenderItems ) {
this . _renderItems ( ) ;
}
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
this . _prevState = this . _currentState ;
2019-11-03 18:45:16 +01:00
} ;
2017-11-13 20:13:37 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _renderChoices = function ( ) {
var _this = this ;
2019-02-26 13:20:52 +01:00
2019-12-23 19:22:54 +01:00
var _a = this . _store ,
activeGroups = _a . activeGroups ,
activeChoices = _a . activeChoices ;
var choiceListFragment = document . createDocumentFragment ( ) ;
this . choiceList . clear ( ) ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
if ( this . config . resetScrollPosition ) {
requestAnimationFrame ( function ( ) {
return _this . choiceList . scrollToTop ( ) ;
} ) ;
} // If we have grouped options
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( activeGroups . length >= 1 && ! this . _isSearching ) {
// If we have a placeholder choice along with groups
var activePlaceholders = activeChoices . filter ( function ( activeChoice ) {
return activeChoice . placeholder === true && activeChoice . groupId === - 1 ;
} ) ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
if ( activePlaceholders . length >= 1 ) {
choiceListFragment = this . _createChoicesFragment ( activePlaceholders , choiceListFragment ) ;
}
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
choiceListFragment = this . _createGroupsFragment ( activeGroups , activeChoices , choiceListFragment ) ;
} else if ( activeChoices . length >= 1 ) {
choiceListFragment = this . _createChoicesFragment ( activeChoices , choiceListFragment ) ;
} // If we have choices to show
2017-11-15 07:51:53 +01:00
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
if ( choiceListFragment . childNodes && choiceListFragment . childNodes . length > 0 ) {
var activeItems = this . _store . activeItems ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
var canAddItem = this . _canAddItem ( activeItems , this . input . value ) ; // ...and we can select them
2019-02-26 13:20:52 +01:00
2019-12-23 19:22:54 +01:00
if ( canAddItem . response ) {
// ...append them and highlight the first choice
this . choiceList . append ( choiceListFragment ) ;
2019-02-26 13:20:52 +01:00
2019-12-23 19:22:54 +01:00
this . _highlightChoice ( ) ;
} else {
var notice = this . _getTemplate ( 'notice' , canAddItem . notice ) ;
2019-02-26 13:20:52 +01:00
2019-12-23 19:22:54 +01:00
this . choiceList . append ( notice ) ;
}
} else {
// Otherwise show a notice
var dropdownItem = void 0 ;
var notice = void 0 ;
2019-02-26 13:20:52 +01:00
2019-12-23 19:22:54 +01:00
if ( this . _isSearching ) {
notice = typeof this . config . noResultsText === 'function' ? this . config . noResultsText ( ) : this . config . noResultsText ;
dropdownItem = this . _getTemplate ( 'notice' , notice , 'no-results' ) ;
} else {
notice = typeof this . config . noChoicesText === 'function' ? this . config . noChoicesText ( ) : this . config . noChoicesText ;
dropdownItem = this . _getTemplate ( 'notice' , notice , 'no-choices' ) ;
}
2019-02-26 13:20:52 +01:00
2019-12-23 19:22:54 +01:00
this . choiceList . append ( dropdownItem ) ;
2019-10-22 23:20:40 +02:00
}
} ;
2017-11-13 20:13:37 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _renderItems = function ( ) {
var activeItems = this . _store . activeItems || [ ] ;
this . itemList . clear ( ) ; // Create a fragment to store our list items
// (so we don't have to update the DOM for each item)
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
var itemListFragment = this . _createItemsFragment ( activeItems ) ; // If we have items to add, append them
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
if ( itemListFragment . childNodes ) {
this . itemList . append ( itemListFragment ) ;
2019-10-22 23:20:40 +02:00
}
} ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _createGroupsFragment = function ( groups , choices , fragment ) {
var _this = this ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
if ( fragment === void 0 ) {
fragment = document . createDocumentFragment ( ) ;
2019-10-22 23:20:40 +02:00
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
var getGroupChoices = function getGroupChoices ( group ) {
return choices . filter ( function ( choice ) {
if ( _this . _isSelectOneElement ) {
return choice . groupId === group . id ;
}
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
return choice . groupId === group . id && ( _this . config . renderSelectedChoices === 'always' || ! choice . selected ) ;
} ) ;
} ; // If sorting is enabled, filter groups
2019-10-22 23:20:40 +02:00
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
if ( this . config . shouldSort ) {
groups . sort ( this . config . sorter ) ;
2017-11-15 07:51:53 +01:00
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
groups . forEach ( function ( group ) {
var groupChoices = getGroupChoices ( group ) ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
if ( groupChoices . length >= 1 ) {
var dropdownGroup = _this . _getTemplate ( 'choiceGroup' , group ) ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
fragment . appendChild ( dropdownGroup ) ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
_this . _createChoicesFragment ( groupChoices , fragment , true ) ;
}
} ) ;
return fragment ;
} ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _createChoicesFragment = function ( choices , fragment , withinGroup ) {
var _this = this ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( fragment === void 0 ) {
fragment = document . createDocumentFragment ( ) ;
}
2019-02-12 19:37:04 +01:00
2019-12-23 19:22:54 +01:00
if ( withinGroup === void 0 ) {
withinGroup = false ;
} // Create a fragment to store our list items (so we don't have to update the DOM for each item)
2019-02-19 10:02:48 +01:00
2019-02-11 18:52:22 +01:00
2019-12-23 19:22:54 +01:00
var _a = this . config ,
renderSelectedChoices = _a . renderSelectedChoices ,
searchResultLimit = _a . searchResultLimit ,
renderChoiceLimit = _a . renderChoiceLimit ;
var filter = this . _isSearching ? utils _1 . sortByScore : this . config . sorter ;
2019-02-12 19:37:04 +01:00
2019-12-23 19:22:54 +01:00
var appendChoice = function appendChoice ( choice ) {
var shouldRender = renderSelectedChoices === 'auto' ? _this . _isSelectOneElement || ! choice . selected : true ;
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
if ( shouldRender ) {
var dropdownItem = _this . _getTemplate ( 'choice' , choice , _this . config . itemSelectText ) ;
2019-02-19 10:02:48 +01:00
2019-12-23 19:22:54 +01:00
fragment . appendChild ( dropdownItem ) ;
}
} ;
2019-02-19 10:02:48 +01:00
2019-12-23 19:22:54 +01:00
var rendererableChoices = choices ;
2019-02-19 10:02:48 +01:00
2019-12-23 19:22:54 +01:00
if ( renderSelectedChoices === 'auto' && ! this . _isSelectOneElement ) {
rendererableChoices = choices . filter ( function ( choice ) {
return ! choice . selected ;
} ) ;
} // Split array into placeholders and "normal" choices
2019-02-26 13:20:52 +01:00
2019-02-19 10:02:48 +01:00
2019-12-23 19:22:54 +01:00
var _b = rendererableChoices . reduce ( function ( acc , choice ) {
if ( choice . placeholder ) {
acc . placeholderChoices . push ( choice ) ;
} else {
acc . normalChoices . push ( choice ) ;
}
2019-02-22 23:06:59 +01:00
2019-12-23 19:22:54 +01:00
return acc ;
} , {
placeholderChoices : [ ] ,
normalChoices : [ ]
} ) ,
placeholderChoices = _b . placeholderChoices ,
normalChoices = _b . normalChoices ; // If sorting is enabled or the user is searching, filter choices
2019-02-26 13:20:52 +01:00
2019-02-22 23:06:59 +01:00
2019-12-23 19:22:54 +01:00
if ( this . config . shouldSort || this . _isSearching ) {
normalChoices . sort ( filter ) ;
}
2019-02-22 23:06:59 +01:00
2019-12-23 19:22:54 +01:00
var choiceLimit = rendererableChoices . length ; // Prepend placeholeder
2019-02-26 13:20:52 +01:00
2019-12-23 19:22:54 +01:00
var sortedChoices = this . _isSelectOneElement ? _ _spreadArrays ( placeholderChoices , normalChoices ) : normalChoices ;
2019-02-26 13:20:52 +01:00
2019-12-23 19:22:54 +01:00
if ( this . _isSearching ) {
choiceLimit = searchResultLimit ;
} else if ( renderChoiceLimit && renderChoiceLimit > 0 && ! withinGroup ) {
choiceLimit = renderChoiceLimit ;
} // Add each choice to dropdown within range
2019-02-26 13:20:52 +01:00
2019-12-23 19:22:54 +01:00
for ( var i = 0 ; i < choiceLimit ; i += 1 ) {
if ( sortedChoices [ i ] ) {
appendChoice ( sortedChoices [ i ] ) ;
2019-02-09 19:13:25 +01:00
}
2019-02-26 13:20:52 +01:00
}
2019-12-23 19:22:54 +01:00
return fragment ;
2019-10-22 23:20:40 +02:00
} ;
2019-02-26 13:20:52 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _createItemsFragment = function ( items , fragment ) {
var _this = this ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( fragment === void 0 ) {
fragment = document . createDocumentFragment ( ) ;
} // Create fragment to add elements to
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
var _a = this . config ,
shouldSortItems = _a . shouldSortItems ,
sorter = _a . sorter ,
removeItemButton = _a . removeItemButton ; // If sorting is enabled, filter items
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( shouldSortItems && ! this . _isSelectOneElement ) {
items . sort ( sorter ) ;
}
2019-02-26 13:20:52 +01:00
2019-12-23 19:22:54 +01:00
if ( this . _isTextElement ) {
// Update the value of the hidden input
this . passedElement . value = items . map ( function ( _a ) {
var value = _a . value ;
return value ;
} ) . join ( this . config . delimiter ) ;
} else {
// Update the options of the hidden input
this . passedElement . options = items ;
2019-10-22 23:20:40 +02:00
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
var addItemToFragment = function addItemToFragment ( item ) {
// Create new list element
var listItem = _this . _getTemplate ( 'item' , item , removeItemButton ) ; // Append it to list
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
fragment . appendChild ( listItem ) ;
} ; // Add each list item to list
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
items . forEach ( addItemToFragment ) ;
return fragment ;
} ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _triggerChange = function ( value ) {
if ( value === undefined || value === null ) {
return ;
2019-02-22 23:06:59 +01:00
}
2019-02-26 13:20:52 +01:00
2019-12-23 19:22:54 +01:00
this . passedElement . triggerEvent ( constants _1 . EVENTS . change , {
value : value
} ) ;
2019-10-22 23:20:40 +02:00
} ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _selectPlaceholderChoice = function ( placeholderChoice ) {
this . _addItem ( {
value : placeholderChoice . value ,
label : placeholderChoice . label ,
choiceId : placeholderChoice . id ,
groupId : placeholderChoice . groupId ,
placeholder : placeholderChoice . placeholder
} ) ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
this . _triggerChange ( placeholderChoice . value ) ;
} ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _handleButtonAction = function ( activeItems , element ) {
if ( ! activeItems || ! element || ! this . config . removeItems || ! this . config . removeItemButton ) {
return ;
2019-10-22 23:20:40 +02:00
}
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
var itemId = element . parentNode && element . parentNode . dataset . id ;
var itemToRemove = itemId && activeItems . find ( function ( item ) {
return item . id === parseInt ( itemId , 10 ) ;
} ) ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
if ( ! itemToRemove ) {
return ;
} // Remove item associated with button
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
this . _removeItem ( itemToRemove ) ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
this . _triggerChange ( itemToRemove . value ) ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
if ( this . _isSelectOneElement && this . _store . placeholderChoice ) {
this . _selectPlaceholderChoice ( this . _store . placeholderChoice ) ;
2019-10-22 23:20:40 +02:00
}
2019-12-23 19:22:54 +01:00
} ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _handleItemAction = function ( activeItems , element , hasShiftKey ) {
var _this = this ;
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
if ( hasShiftKey === void 0 ) {
hasShiftKey = false ;
}
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( ! activeItems || ! element || ! this . config . removeItems || this . _isSelectOneElement ) {
return ;
}
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
var passedId = element . dataset . id ; // We only want to select one item with a click
// so we deselect any items that aren't the target
// unless shift is being pressed
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
activeItems . forEach ( function ( item ) {
if ( item . id === parseInt ( "" + passedId , 10 ) && ! item . highlighted ) {
_this . highlightItem ( item ) ;
} else if ( ! hasShiftKey && item . highlighted ) {
_this . unhighlightItem ( item ) ;
}
} ) ; // Focus input as without focus, a user cannot do anything with a
// highlighted item
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
this . input . focus ( ) ;
} ;
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _handleChoiceAction = function ( activeItems , element ) {
if ( ! activeItems || ! element ) {
return ;
} // If we are clicking on an option
2018-05-25 15:00:27 +02:00
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
var id = element . dataset . id ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
var choice = id && this . _store . getChoiceById ( id ) ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( ! choice ) {
return ;
2019-10-22 23:20:40 +02:00
}
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
var passedKeyCode = activeItems [ 0 ] && activeItems [ 0 ] . keyCode ? activeItems [ 0 ] . keyCode : undefined ;
var hasActiveDropdown = this . dropdown . isActive ; // Update choice keyCode
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
choice . keyCode = passedKeyCode ;
this . passedElement . triggerEvent ( constants _1 . EVENTS . choice , {
choice : choice
} ) ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( ! choice . selected && ! choice . disabled ) {
var canAddItem = this . _canAddItem ( activeItems , choice . value ) ;
2019-02-12 19:37:04 +01:00
2019-12-23 19:22:54 +01:00
if ( canAddItem . response ) {
this . _addItem ( {
value : choice . value ,
label : choice . label ,
choiceId : choice . id ,
groupId : choice . groupId ,
customProperties : choice . customProperties ,
placeholder : choice . placeholder ,
keyCode : choice . keyCode
} ) ;
2019-02-12 19:37:04 +01:00
2019-12-23 19:22:54 +01:00
this . _triggerChange ( choice . value ) ;
}
}
2019-02-22 23:06:59 +01:00
2019-12-23 19:22:54 +01:00
this . clearInput ( ) ; // We want to close the dropdown if we are dealing with a single select box
2019-02-22 23:06:59 +01:00
2019-12-23 19:22:54 +01:00
if ( hasActiveDropdown && this . _isSelectOneElement ) {
this . hideDropdown ( true ) ;
this . containerOuter . focus ( ) ;
}
} ;
2019-02-26 13:20:52 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _handleBackspace = function ( activeItems ) {
if ( ! this . config . removeItems || ! activeItems ) {
return ;
}
2019-02-26 13:20:52 +01:00
2019-12-23 19:22:54 +01:00
var lastItem = activeItems [ activeItems . length - 1 ] ;
var hasHighlightedItems = activeItems . some ( function ( item ) {
return item . highlighted ;
} ) ; // If editing the last item is allowed and there are not other selected items,
// we can edit the item value. Otherwise if we can remove items, remove all selected items
2019-02-26 13:20:52 +01:00
2019-12-23 19:22:54 +01:00
if ( this . config . editItems && ! hasHighlightedItems && lastItem ) {
this . input . value = lastItem . value ;
this . input . setWidth ( ) ;
this . _removeItem ( lastItem ) ;
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
this . _triggerChange ( lastItem . value ) ;
} else {
if ( ! hasHighlightedItems ) {
// Highlight last item if none already highlighted
this . highlightItem ( lastItem , false ) ;
}
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
this . removeHighlightedItems ( true ) ;
}
2019-10-22 23:20:40 +02:00
} ;
2019-12-23 19:22:54 +01:00
Choices . prototype . _startLoading = function ( ) {
this . _store . dispatch ( misc _1 . setIsLoading ( true ) ) ;
} ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _stopLoading = function ( ) {
this . _store . dispatch ( misc _1 . setIsLoading ( false ) ) ;
} ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _handleLoadingState = function ( setLoading ) {
if ( setLoading === void 0 ) {
setLoading = true ;
2019-11-03 18:45:16 +01:00
}
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
var placeholderItem = this . itemList . getChild ( "." + this . config . classNames . placeholder ) ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( setLoading ) {
this . disable ( ) ;
this . containerOuter . addLoadingState ( ) ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( this . _isSelectOneElement ) {
if ( ! placeholderItem ) {
placeholderItem = this . _getTemplate ( 'placeholder' , this . config . loadingText ) ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( placeholderItem ) {
this . itemList . append ( placeholderItem ) ;
}
} else {
placeholderItem . innerHTML = this . config . loadingText ;
}
} else {
this . input . placeholder = this . config . loadingText ;
}
} else {
this . enable ( ) ;
this . containerOuter . removeLoadingState ( ) ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( this . _isSelectOneElement ) {
if ( placeholderItem ) {
placeholderItem . innerHTML = this . _placeholderValue || '' ;
}
} else {
this . input . placeholder = this . _placeholderValue || '' ;
}
2019-10-22 23:20:40 +02:00
}
2019-12-23 19:22:54 +01:00
} ;
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _handleSearch = function ( value ) {
if ( ! value || ! this . input . isFocussed ) {
return ;
}
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
var choices = this . _store . choices ;
var _a = this . config ,
searchFloor = _a . searchFloor ,
searchChoices = _a . searchChoices ;
var hasUnactiveChoices = choices . some ( function ( option ) {
return ! option . active ;
} ) ; // Check that we have a value to search and the input was an alphanumeric character
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
if ( value && value . length >= searchFloor ) {
var resultCount = searchChoices ? this . _searchChoices ( value ) : 0 ; // Trigger search event
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
this . passedElement . triggerEvent ( constants _1 . EVENTS . search , {
value : value ,
resultCount : resultCount
} ) ;
} else if ( hasUnactiveChoices ) {
// Otherwise reset choices to active
this . _isSearching = false ;
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
this . _store . dispatch ( choices _1 . activateChoices ( true ) ) ;
}
} ;
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _canAddItem = function ( activeItems , value ) {
var canAddItem = true ;
var notice = typeof this . config . addItemText === 'function' ? this . config . addItemText ( value ) : this . config . addItemText ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( ! this . _isSelectOneElement ) {
var isDuplicateValue = utils _1 . existsInArray ( activeItems , value ) ;
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
if ( this . config . maxItemCount > 0 && this . config . maxItemCount <= activeItems . length ) {
// If there is a max entry limit and we have reached that limit
// don't update
canAddItem = false ;
notice = typeof this . config . maxItemText === 'function' ? this . config . maxItemText ( this . config . maxItemCount ) : this . config . maxItemText ;
}
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
if ( ! this . config . duplicateItemsAllowed && isDuplicateValue && canAddItem ) {
canAddItem = false ;
notice = typeof this . config . uniqueItemText === 'function' ? this . config . uniqueItemText ( value ) : this . config . uniqueItemText ;
}
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
if ( this . _isTextElement && this . config . addItems && canAddItem && typeof this . config . addItemFilter === 'function' && ! this . config . addItemFilter ( value ) ) {
canAddItem = false ;
notice = typeof this . config . customAddItemText === 'function' ? this . config . customAddItemText ( value ) : this . config . customAddItemText ;
}
2019-10-29 22:19:56 +01:00
}
2019-02-12 19:37:04 +01:00
2019-12-23 19:22:54 +01:00
return {
response : canAddItem ,
notice : notice
} ;
} ;
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _searchChoices = function ( value ) {
var newValue = typeof value === 'string' ? value . trim ( ) : value ;
var currentValue = typeof this . _currentValue === 'string' ? this . _currentValue . trim ( ) : this . _currentValue ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( newValue . length < 1 && newValue === currentValue + " " ) {
return 0 ;
} // If new value matches the desired length and is not the same as the current value with a space
2019-11-13 16:40:47 +01:00
2019-12-23 19:22:54 +01:00
var haystack = this . _store . searchableChoices ;
var needle = newValue ;
2019-11-13 16:40:47 +01:00
2019-12-23 19:22:54 +01:00
var keys = _ _spreadArrays ( this . config . searchFields ) ;
2019-11-13 16:40:47 +01:00
2019-12-23 19:22:54 +01:00
var options = Object . assign ( this . config . fuseOptions , {
keys : keys ,
includeMatches : true
2019-10-28 20:53:24 +01:00
} ) ;
2019-12-23 19:22:54 +01:00
var fuse = new fuse _js _1 . default ( haystack , options ) ;
var results = fuse . search ( needle ) ; // see https://github.com/krisk/Fuse/issues/303
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
this . _currentValue = newValue ;
this . _highlightPosition = 0 ;
this . _isSearching = true ;
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
this . _store . dispatch ( choices _1 . filterChoices ( results ) ) ;
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
return results . length ;
} ;
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _addEventListeners = function ( ) {
var documentElement = document . documentElement ; // capture events - can cancel event processing or propagation
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
documentElement . addEventListener ( 'touchend' , this . _onTouchEnd , true ) ;
this . containerOuter . element . addEventListener ( 'keydown' , this . _onKeyDown , true ) ;
this . containerOuter . element . addEventListener ( 'mousedown' , this . _onMouseDown , true ) ; // passive events - doesn't call `preventDefault` or `stopPropagation`
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
documentElement . addEventListener ( 'click' , this . _onClick , {
passive : true
} ) ;
documentElement . addEventListener ( 'touchmove' , this . _onTouchMove , {
passive : true
} ) ;
this . dropdown . element . addEventListener ( 'mouseover' , this . _onMouseOver , {
passive : true
} ) ;
2019-10-28 20:53:24 +01:00
2019-12-23 19:22:54 +01:00
if ( this . _isSelectOneElement ) {
this . containerOuter . element . addEventListener ( 'focus' , this . _onFocus , {
passive : true
} ) ;
this . containerOuter . element . addEventListener ( 'blur' , this . _onBlur , {
passive : true
2019-10-28 20:53:24 +01:00
} ) ;
2019-02-22 23:06:59 +01:00
}
2019-12-23 19:22:54 +01:00
this . input . element . addEventListener ( 'keyup' , this . _onKeyUp , {
passive : true
} ) ;
this . input . element . addEventListener ( 'focus' , this . _onFocus , {
passive : true
} ) ;
this . input . element . addEventListener ( 'blur' , this . _onBlur , {
passive : true
2019-10-28 20:53:24 +01:00
} ) ;
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
if ( this . input . element . form ) {
this . input . element . form . addEventListener ( 'reset' , this . _onFormReset , {
passive : true
} ) ;
2019-10-29 22:19:56 +01:00
}
2019-12-23 19:22:54 +01:00
this . input . addEventListeners ( ) ;
} ;
2019-11-13 16:40:47 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _removeEventListeners = function ( ) {
var documentElement = document . documentElement ;
documentElement . removeEventListener ( 'touchend' , this . _onTouchEnd , true ) ;
this . containerOuter . element . removeEventListener ( 'keydown' , this . _onKeyDown , true ) ;
this . containerOuter . element . removeEventListener ( 'mousedown' , this . _onMouseDown , true ) ;
documentElement . removeEventListener ( 'click' , this . _onClick ) ;
documentElement . removeEventListener ( 'touchmove' , this . _onTouchMove ) ;
this . dropdown . element . removeEventListener ( 'mouseover' , this . _onMouseOver ) ;
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
if ( this . _isSelectOneElement ) {
this . containerOuter . element . removeEventListener ( 'focus' , this . _onFocus ) ;
this . containerOuter . element . removeEventListener ( 'blur' , this . _onBlur ) ;
2019-10-29 22:19:56 +01:00
}
2019-12-23 19:22:54 +01:00
this . input . element . removeEventListener ( 'keyup' , this . _onKeyUp ) ;
this . input . element . removeEventListener ( 'focus' , this . _onFocus ) ;
this . input . element . removeEventListener ( 'blur' , this . _onBlur ) ;
2019-11-13 16:40:47 +01:00
2019-12-23 19:22:54 +01:00
if ( this . input . element . form ) {
this . input . element . form . removeEventListener ( 'reset' , this . _onFormReset ) ;
2019-11-13 16:40:47 +01:00
}
2019-12-23 19:22:54 +01:00
this . input . removeEventListeners ( ) ;
} ;
2019-11-13 16:40:47 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _onKeyDown = function ( event ) {
var keyCode = event . keyCode ;
var activeItems = this . _store . activeItems ;
var hasFocusedInput = this . input . isFocussed ;
var hasActiveDropdown = this . dropdown . isActive ;
var hasItems = this . itemList . hasChildren ( ) ;
var keyString = String . fromCharCode ( keyCode ) ;
var wasAlphaNumericChar = /[a-zA-Z0-9-_ ]/ . test ( keyString ) ;
var BACK _KEY = constants _1 . KEY _CODES . BACK _KEY ,
DELETE _KEY = constants _1 . KEY _CODES . DELETE _KEY ,
ENTER _KEY = constants _1 . KEY _CODES . ENTER _KEY ,
A _KEY = constants _1 . KEY _CODES . A _KEY ,
ESC _KEY = constants _1 . KEY _CODES . ESC _KEY ,
UP _KEY = constants _1 . KEY _CODES . UP _KEY ,
DOWN _KEY = constants _1 . KEY _CODES . DOWN _KEY ,
PAGE _UP _KEY = constants _1 . KEY _CODES . PAGE _UP _KEY ,
PAGE _DOWN _KEY = constants _1 . KEY _CODES . PAGE _DOWN _KEY ;
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
if ( ! this . _isTextElement && ! hasActiveDropdown && wasAlphaNumericChar ) {
this . showDropdown ( ) ;
if ( ! this . input . isFocussed ) {
/ *
We update the input value with the pressed key as
the input was not focussed at the time of key press
therefore does not have the value of the key .
* /
this . input . value += keyString . toLowerCase ( ) ;
}
2019-10-29 22:19:56 +01:00
}
2019-10-28 20:53:24 +01:00
2019-12-23 19:22:54 +01:00
switch ( keyCode ) {
case A _KEY :
return this . _onSelectKey ( event , hasItems ) ;
2019-11-13 16:40:47 +01:00
2019-12-23 19:22:54 +01:00
case ENTER _KEY :
return this . _onEnterKey ( event , activeItems , hasActiveDropdown ) ;
2019-11-13 16:40:47 +01:00
2019-12-23 19:22:54 +01:00
case ESC _KEY :
return this . _onEscapeKey ( hasActiveDropdown ) ;
2019-11-13 16:40:47 +01:00
2019-12-23 19:22:54 +01:00
case UP _KEY :
case PAGE _UP _KEY :
case DOWN _KEY :
case PAGE _DOWN _KEY :
return this . _onDirectionKey ( event , hasActiveDropdown ) ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
case DELETE _KEY :
case BACK _KEY :
return this . _onDeleteKey ( event , activeItems , hasFocusedInput ) ;
default :
2019-10-22 23:20:40 +02:00
}
2019-12-23 19:22:54 +01:00
} ;
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _onKeyUp = function ( _a ) {
var target = _a . target ,
keyCode = _a . keyCode ;
var value = this . input . value ;
var activeItems = this . _store . activeItems ;
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
var canAddItem = this . _canAddItem ( activeItems , value ) ;
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
var backKey = constants _1 . KEY _CODES . BACK _KEY ,
deleteKey = constants _1 . KEY _CODES . DELETE _KEY ; // We are typing into a text input and have a value, we want to show a dropdown
// notice. Otherwise hide the dropdown
2019-11-13 16:40:47 +01:00
2019-12-23 19:22:54 +01:00
if ( this . _isTextElement ) {
var canShowDropdownNotice = canAddItem . notice && value ;
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
if ( canShowDropdownNotice ) {
var dropdownItem = this . _getTemplate ( 'notice' , canAddItem . notice ) ;
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
this . dropdown . element . innerHTML = dropdownItem . outerHTML ;
this . showDropdown ( true ) ;
} else {
this . hideDropdown ( true ) ;
}
} else {
var wasRemovalKeyCode = keyCode === backKey || keyCode === deleteKey ;
var userHasRemovedValue = wasRemovalKeyCode && target && ! target . value ;
var canReactivateChoices = ! this . _isTextElement && this . _isSearching ;
var canSearch = this . _canSearch && canAddItem . response ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
if ( userHasRemovedValue && canReactivateChoices ) {
this . _isSearching = false ;
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
this . _store . dispatch ( choices _1 . activateChoices ( true ) ) ;
} else if ( canSearch ) {
this . _handleSearch ( this . input . value ) ;
}
}
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
this . _canSearch = this . config . searchEnabled ;
2019-10-22 23:20:40 +02:00
} ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _onSelectKey = function ( event , hasItems ) {
var ctrlKey = event . ctrlKey ,
metaKey = event . metaKey ;
var hasCtrlDownKeyPressed = ctrlKey || metaKey ; // If CTRL + A or CMD + A have been pressed and there are items to select
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
if ( hasCtrlDownKeyPressed && hasItems ) {
this . _canSearch = false ;
var shouldHightlightAll = this . config . removeItems && ! this . input . value && this . input . element === document . activeElement ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
if ( shouldHightlightAll ) {
this . highlightAll ( ) ;
}
}
2019-10-22 23:20:40 +02:00
} ;
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _onEnterKey = function ( event , activeItems , hasActiveDropdown ) {
var target = event . target ;
var enterKey = constants _1 . KEY _CODES . ENTER _KEY ;
var targetWasButton = target && target . hasAttribute ( 'data-button' ) ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
if ( this . _isTextElement && target && target . value ) {
var value = this . input . value ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
var canAddItem = this . _canAddItem ( activeItems , value ) ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
if ( canAddItem . response ) {
this . hideDropdown ( true ) ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
this . _addItem ( {
value : value
} ) ;
2018-10-13 12:19:24 +02:00
2019-12-23 19:22:54 +01:00
this . _triggerChange ( value ) ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
this . clearInput ( ) ;
}
}
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
if ( targetWasButton ) {
this . _handleButtonAction ( activeItems , target ) ;
2019-11-07 09:50:19 +01:00
2019-12-23 19:22:54 +01:00
event . preventDefault ( ) ;
}
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
if ( hasActiveDropdown ) {
var highlightedChoice = this . dropdown . getChild ( "." + this . config . classNames . highlightedState ) ;
if ( highlightedChoice ) {
// add enter keyCode value
if ( activeItems [ 0 ] ) {
activeItems [ 0 ] . keyCode = enterKey ; // eslint-disable-line no-param-reassign
}
this . _handleChoiceAction ( activeItems , highlightedChoice ) ;
}
event . preventDefault ( ) ;
} else if ( this . _isSelectOneElement ) {
this . showDropdown ( ) ;
event . preventDefault ( ) ;
}
2019-10-22 23:20:40 +02:00
} ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _onEscapeKey = function ( hasActiveDropdown ) {
if ( hasActiveDropdown ) {
this . hideDropdown ( true ) ;
this . containerOuter . focus ( ) ;
}
2019-10-22 23:20:40 +02:00
} ;
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _onDirectionKey = function ( event , hasActiveDropdown ) {
var keyCode = event . keyCode ,
metaKey = event . metaKey ;
var downKey = constants _1 . KEY _CODES . DOWN _KEY ,
pageUpKey = constants _1 . KEY _CODES . PAGE _UP _KEY ,
pageDownKey = constants _1 . KEY _CODES . PAGE _DOWN _KEY ; // If up or down key is pressed, traverse through options
if ( hasActiveDropdown || this . _isSelectOneElement ) {
this . showDropdown ( ) ;
this . _canSearch = false ;
var directionInt = keyCode === downKey || keyCode === pageDownKey ? 1 : - 1 ;
var skipKey = metaKey || keyCode === pageDownKey || keyCode === pageUpKey ;
var selectableChoiceIdentifier = '[data-choice-selectable]' ;
var nextEl = void 0 ;
2018-10-13 12:19:24 +02:00
2019-12-23 19:22:54 +01:00
if ( skipKey ) {
if ( directionInt > 0 ) {
nextEl = this . dropdown . element . querySelector ( selectableChoiceIdentifier + ":last-of-type" ) ;
} else {
nextEl = this . dropdown . element . querySelector ( selectableChoiceIdentifier ) ;
}
} else {
var currentEl = this . dropdown . element . querySelector ( "." + this . config . classNames . highlightedState ) ;
2018-10-13 12:19:24 +02:00
2019-12-23 19:22:54 +01:00
if ( currentEl ) {
nextEl = utils _1 . getAdjacentEl ( currentEl , selectableChoiceIdentifier , directionInt ) ;
} else {
nextEl = this . dropdown . element . querySelector ( selectableChoiceIdentifier ) ;
}
}
2018-10-13 12:19:24 +02:00
2019-12-23 19:22:54 +01:00
if ( nextEl ) {
// We prevent default to stop the cursor moving
// when pressing the arrow
if ( ! utils _1 . isScrolledIntoView ( nextEl , this . choiceList . element , directionInt ) ) {
this . choiceList . scrollToChildElement ( nextEl , directionInt ) ;
}
2018-10-13 12:19:24 +02:00
2019-12-23 19:22:54 +01:00
this . _highlightChoice ( nextEl ) ;
} // Prevent default to maintain cursor position whilst
// traversing dropdown options
2018-10-13 12:19:24 +02:00
2019-12-23 19:22:54 +01:00
event . preventDefault ( ) ;
}
} ;
2018-10-13 12:19:24 +02:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _onDeleteKey = function ( event , activeItems , hasFocusedInput ) {
var target = event . target ; // If backspace or delete key is pressed and the input has no value
2018-10-13 12:19:24 +02:00
2019-12-23 19:22:54 +01:00
if ( ! this . _isSelectOneElement && ! target . value && hasFocusedInput ) {
this . _handleBackspace ( activeItems ) ;
2018-10-13 12:19:24 +02:00
2019-12-23 19:22:54 +01:00
event . preventDefault ( ) ;
}
} ;
2018-10-13 12:19:24 +02:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _onTouchMove = function ( ) {
if ( this . _wasTap ) {
this . _wasTap = false ;
}
} ;
2018-10-13 12:19:24 +02:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _onTouchEnd = function ( event ) {
var target = ( event || event . touches [ 0 ] ) . target ;
var touchWasWithinContainer = this . _wasTap && this . containerOuter . element . contains ( target ) ;
2018-10-13 12:19:24 +02:00
2019-12-23 19:22:54 +01:00
if ( touchWasWithinContainer ) {
var containerWasExactTarget = target === this . containerOuter . element || target === this . containerInner . element ;
2019-11-13 16:40:47 +01:00
2019-12-23 19:22:54 +01:00
if ( containerWasExactTarget ) {
if ( this . _isTextElement ) {
this . input . focus ( ) ;
} else if ( this . _isSelectMultipleElement ) {
this . showDropdown ( ) ;
}
} // Prevents focus event firing
2018-10-27 17:45:19 +02:00
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
event . stopPropagation ( ) ;
}
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
this . _wasTap = true ;
} ;
/ * *
* Handles mousedown event in capture mode for containetOuter . element
* /
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _onMouseDown = function ( event ) {
var target = event . target ;
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
if ( ! ( target instanceof HTMLElement ) ) {
return ;
} // If we have our mouse down on the scrollbar and are on IE11...
2019-10-29 22:19:56 +01:00
2018-10-27 17:45:19 +02:00
2019-12-23 19:22:54 +01:00
if ( IS _IE11 && this . choiceList . element . contains ( target ) ) {
// check if click was on a scrollbar area
var firstChoice = this . choiceList . element . firstElementChild ;
var isOnScrollbar = this . _direction === 'ltr' ? event . offsetX >= firstChoice . offsetWidth : event . offsetX < firstChoice . offsetLeft ;
this . _isScrollingOnIe = isOnScrollbar ;
2019-10-22 23:20:40 +02:00
}
2018-10-27 17:45:19 +02:00
2019-12-23 19:22:54 +01:00
if ( target === this . input . element ) {
return ;
2019-10-22 23:20:40 +02:00
}
2018-10-27 17:45:19 +02:00
2019-12-23 19:22:54 +01:00
var item = target . closest ( '[data-button],[data-item],[data-choice]' ) ;
2019-10-15 10:49:38 +02:00
2019-12-23 19:22:54 +01:00
if ( item instanceof HTMLElement ) {
var hasShiftKey = event . shiftKey ;
var activeItems = this . _store . activeItems ;
var dataset = item . dataset ;
if ( 'button' in dataset ) {
this . _handleButtonAction ( activeItems , item ) ;
} else if ( 'item' in dataset ) {
this . _handleItemAction ( activeItems , item , hasShiftKey ) ;
} else if ( 'choice' in dataset ) {
this . _handleChoiceAction ( activeItems , item ) ;
}
2019-10-22 23:20:40 +02:00
}
2019-10-15 10:49:38 +02:00
2019-12-23 19:22:54 +01:00
event . preventDefault ( ) ;
} ;
/ * *
* Handles mouseover event over this . dropdown
* @ param { MouseEvent } event
* /
2019-10-15 10:49:38 +02:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _onMouseOver = function ( _a ) {
var target = _a . target ;
2019-11-07 09:50:19 +01:00
2019-12-23 19:22:54 +01:00
if ( target instanceof HTMLElement && 'choice' in target . dataset ) {
this . _highlightChoice ( target ) ;
2019-11-07 09:50:19 +01:00
}
2019-12-23 19:22:54 +01:00
} ;
2019-11-07 09:50:19 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _onClick = function ( _a ) {
var target = _a . target ;
var clickWasWithinContainer = this . containerOuter . element . contains ( target ) ;
2019-10-15 10:49:38 +02:00
2019-12-23 19:22:54 +01:00
if ( clickWasWithinContainer ) {
if ( ! this . dropdown . isActive && ! this . containerOuter . isDisabled ) {
if ( this . _isTextElement ) {
if ( document . activeElement !== this . input . element ) {
this . input . focus ( ) ;
}
} else {
this . showDropdown ( ) ;
this . containerOuter . focus ( ) ;
2019-10-22 23:20:40 +02:00
}
2019-12-23 19:22:54 +01:00
} else if ( this . _isSelectOneElement && target !== this . input . element && ! this . dropdown . element . contains ( target ) ) {
this . hideDropdown ( ) ;
}
} else {
var hasHighlightedItems = this . _store . highlightedActiveItems . length > 0 ;
2019-10-15 10:49:38 +02:00
2019-12-23 19:22:54 +01:00
if ( hasHighlightedItems ) {
this . unhighlightAll ( ) ;
}
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
this . containerOuter . removeFocusState ( ) ;
this . hideDropdown ( true ) ;
}
} ;
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _onFocus = function ( _a ) {
var _b ;
var _this = this ;
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
var target = _a . target ;
var focusWasWithinContainer = target && this . containerOuter . element . contains ( target ) ;
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
if ( ! focusWasWithinContainer ) {
return ;
2019-10-29 22:19:56 +01:00
}
2019-12-23 19:22:54 +01:00
var focusActions = ( _b = { } , _b [ constants _1 . TEXT _TYPE ] = function ( ) {
if ( target === _this . input . element ) {
_this . containerOuter . addFocusState ( ) ;
}
} , _b [ constants _1 . SELECT _ONE _TYPE ] = function ( ) {
_this . containerOuter . addFocusState ( ) ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
if ( target === _this . input . element ) {
_this . showDropdown ( true ) ;
}
} , _b [ constants _1 . SELECT _MULTIPLE _TYPE ] = function ( ) {
if ( target === _this . input . element ) {
_this . showDropdown ( true ) ; // If element is a select box, the focused element is the container and the dropdown
// isn't already open, focus and show dropdown
2019-11-17 13:38:39 +01:00
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
_this . containerOuter . addFocusState ( ) ;
}
} , _b ) ;
focusActions [ this . passedElement . element . type ] ( ) ;
} ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _onBlur = function ( _a ) {
var _b ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
var _this = this ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
var target = _a . target ;
var blurWasWithinContainer = target && this . containerOuter . element . contains ( target ) ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
if ( blurWasWithinContainer && ! this . _isScrollingOnIe ) {
var activeItems = this . _store . activeItems ;
var hasHighlightedItems _1 = activeItems . some ( function ( item ) {
return item . highlighted ;
2019-11-03 18:45:16 +01:00
} ) ;
2019-12-23 19:22:54 +01:00
var blurActions = ( _b = { } , _b [ constants _1 . TEXT _TYPE ] = function ( ) {
if ( target === _this . input . element ) {
_this . containerOuter . removeFocusState ( ) ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
if ( hasHighlightedItems _1 ) {
_this . unhighlightAll ( ) ;
}
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
_this . hideDropdown ( true ) ;
}
} , _b [ constants _1 . SELECT _ONE _TYPE ] = function ( ) {
_this . containerOuter . removeFocusState ( ) ;
if ( target === _this . input . element || target === _this . containerOuter . element && ! _this . _canSearch ) {
_this . hideDropdown ( true ) ;
}
} , _b [ constants _1 . SELECT _MULTIPLE _TYPE ] = function ( ) {
if ( target === _this . input . element ) {
_this . containerOuter . removeFocusState ( ) ;
_this . hideDropdown ( true ) ;
if ( hasHighlightedItems _1 ) {
_this . unhighlightAll ( ) ;
}
}
} , _b ) ;
blurActions [ this . passedElement . element . type ] ( ) ;
} else {
// On IE11, clicking the scollbar blurs our input and thus
// closes the dropdown. To stop this, we refocus our input
// if we know we are on IE *and* are scrolling.
this . _isScrollingOnIe = false ;
this . input . element . focus ( ) ;
}
} ;
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _onFormReset = function ( ) {
this . _store . dispatch ( misc _1 . resetTo ( this . _initialState ) ) ;
} ;
2017-11-13 20:13:37 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _highlightChoice = function ( el ) {
var _this = this ;
2017-11-13 20:13:37 +01:00
2019-12-23 19:22:54 +01:00
if ( el === void 0 ) {
el = null ;
}
2017-11-13 20:13:37 +01:00
2019-12-23 19:22:54 +01:00
var choices = Array . from ( this . dropdown . element . querySelectorAll ( '[data-choice-selectable]' ) ) ;
2018-04-25 10:20:59 +02:00
2019-12-23 19:22:54 +01:00
if ( ! choices . length ) {
2019-10-22 23:20:40 +02:00
return ;
2019-01-26 13:36:47 +01:00
}
2019-12-23 19:22:54 +01:00
var passedEl = el ;
var highlightedChoices = Array . from ( this . dropdown . element . querySelectorAll ( "." + this . config . classNames . highlightedState ) ) ; // Remove any highlighted choices
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
highlightedChoices . forEach ( function ( choice ) {
choice . classList . remove ( _this . config . classNames . highlightedState ) ;
choice . setAttribute ( 'aria-selected' , 'false' ) ;
} ) ;
2018-04-25 10:20:59 +02:00
2019-12-23 19:22:54 +01:00
if ( passedEl ) {
this . _highlightPosition = choices . indexOf ( passedEl ) ;
} else {
// Highlight choice based on last known highlight location
if ( choices . length > this . _highlightPosition ) {
// If we have an option to highlight
passedEl = choices [ this . _highlightPosition ] ;
} else {
// Otherwise highlight the option before
passedEl = choices [ choices . length - 1 ] ;
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
if ( ! passedEl ) {
passedEl = choices [ 0 ] ;
}
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
passedEl . classList . add ( this . config . classNames . highlightedState ) ;
passedEl . setAttribute ( 'aria-selected' , 'true' ) ;
this . passedElement . triggerEvent ( constants _1 . EVENTS . highlightChoice , {
el : passedEl
} ) ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
if ( this . dropdown . isActive ) {
// IE11 ignores aria-label and blocks virtual keyboard
// if aria-activedescendant is set without a dropdown
this . input . setActiveDescendant ( passedEl . id ) ;
this . containerOuter . setActiveDescendant ( passedEl . id ) ;
}
} ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _addItem = function ( _a ) {
var value = _a . value ,
_b = _a . label ,
label = _b === void 0 ? null : _b ,
_c = _a . choiceId ,
choiceId = _c === void 0 ? - 1 : _c ,
_d = _a . groupId ,
groupId = _d === void 0 ? - 1 : _d ,
_e = _a . customProperties ,
customProperties = _e === void 0 ? { } : _e ,
_f = _a . placeholder ,
placeholder = _f === void 0 ? false : _f ,
_g = _a . keyCode ,
keyCode = _g === void 0 ? - 1 : _g ;
var passedValue = typeof value === 'string' ? value . trim ( ) : value ;
var items = this . _store . items ;
var passedLabel = label || passedValue ;
var passedOptionId = choiceId || - 1 ;
var group = groupId >= 0 ? this . _store . getGroupById ( groupId ) : null ;
var id = items ? items . length + 1 : 1 ; // If a prepended value has been passed, prepend it
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
if ( this . config . prependValue ) {
passedValue = this . config . prependValue + passedValue . toString ( ) ;
} // If an appended value has been passed, append it
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
if ( this . config . appendValue ) {
passedValue += this . config . appendValue . toString ( ) ;
2017-11-15 07:51:53 +01:00
}
2016-08-23 08:24:45 +02:00
2019-12-23 19:22:54 +01:00
this . _store . dispatch ( items _1 . addItem ( {
value : passedValue ,
label : passedLabel ,
id : id ,
choiceId : passedOptionId ,
groupId : groupId ,
customProperties : customProperties ,
placeholder : placeholder ,
keyCode : keyCode
} ) ) ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
if ( this . _isSelectOneElement ) {
this . removeActiveItems ( id ) ;
} // Trigger change event
this . passedElement . triggerEvent ( constants _1 . EVENTS . addItem , {
id : id ,
value : passedValue ,
label : passedLabel ,
customProperties : customProperties ,
groupValue : group && group . value ? group . value : null ,
keyCode : keyCode
} ) ;
2019-10-22 23:20:40 +02:00
} ;
2016-08-23 08:24:45 +02:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _removeItem = function ( item ) {
var id = item . id ,
value = item . value ,
label = item . label ,
customProperties = item . customProperties ,
choiceId = item . choiceId ,
groupId = item . groupId ;
var group = groupId && groupId >= 0 ? this . _store . getGroupById ( groupId ) : null ;
if ( ! id || ! choiceId ) {
2019-10-22 23:20:40 +02:00
return ;
2017-11-15 07:51:53 +01:00
}
2016-08-23 08:24:45 +02:00
2019-12-23 19:22:54 +01:00
this . _store . dispatch ( items _1 . removeItem ( id , choiceId ) ) ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
this . passedElement . triggerEvent ( constants _1 . EVENTS . removeItem , {
id : id ,
value : value ,
label : label ,
customProperties : customProperties ,
groupValue : group && group . value ? group . value : null
} ) ;
} ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _addChoice = function ( _a ) {
var value = _a . value ,
_b = _a . label ,
label = _b === void 0 ? null : _b ,
_c = _a . isSelected ,
isSelected = _c === void 0 ? false : _c ,
_d = _a . isDisabled ,
isDisabled = _d === void 0 ? false : _d ,
_e = _a . groupId ,
groupId = _e === void 0 ? - 1 : _e ,
_f = _a . customProperties ,
customProperties = _f === void 0 ? { } : _f ,
_g = _a . placeholder ,
placeholder = _g === void 0 ? false : _g ,
_h = _a . keyCode ,
keyCode = _h === void 0 ? - 1 : _h ;
2016-10-26 16:43:15 +02:00
2019-12-23 19:22:54 +01:00
if ( typeof value === 'undefined' || value === null ) {
return ;
} // Generate unique id
2019-10-22 23:20:40 +02:00
2016-08-23 08:24:45 +02:00
2019-12-23 19:22:54 +01:00
var choices = this . _store . choices ;
var choiceLabel = label || value ;
var choiceId = choices ? choices . length + 1 : 1 ;
var choiceElementId = this . _baseId + "-" + this . _idNames . itemChoice + "-" + choiceId ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
this . _store . dispatch ( choices _1 . addChoice ( {
id : choiceId ,
groupId : groupId ,
elementId : choiceElementId ,
value : value ,
label : choiceLabel ,
disabled : isDisabled ,
customProperties : customProperties ,
placeholder : placeholder ,
keyCode : keyCode
} ) ) ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
if ( isSelected ) {
this . _addItem ( {
value : value ,
label : choiceLabel ,
choiceId : choiceId ,
customProperties : customProperties ,
placeholder : placeholder ,
keyCode : keyCode
} ) ;
}
2019-10-22 23:20:40 +02:00
} ;
2019-12-23 19:22:54 +01:00
Choices . prototype . _addGroup = function ( _a ) {
var _this = this ;
2016-08-23 08:24:45 +02:00
2019-12-23 19:22:54 +01:00
var group = _a . group ,
id = _a . id ,
_b = _a . valueKey ,
valueKey = _b === void 0 ? 'value' : _b ,
_c = _a . labelKey ,
labelKey = _c === void 0 ? 'label' : _c ;
var groupChoices = utils _1 . isType ( 'Object' , group ) ? group . choices : Array . from ( group . getElementsByTagName ( 'OPTION' ) ) ;
var groupId = id || Math . floor ( new Date ( ) . valueOf ( ) * Math . random ( ) ) ;
var isDisabled = group . disabled ? group . disabled : false ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
if ( groupChoices ) {
this . _store . dispatch ( groups _1 . addGroup ( {
value : group . label ,
id : groupId ,
active : true ,
disabled : isDisabled
} ) ) ;
2016-08-23 08:24:45 +02:00
2019-12-23 19:22:54 +01:00
var addGroupChoices = function addGroupChoices ( choice ) {
var isOptDisabled = choice . disabled || choice . parentNode && choice . parentNode . disabled ;
2016-08-23 08:24:45 +02:00
2019-12-23 19:22:54 +01:00
_this . _addChoice ( {
value : choice [ valueKey ] ,
label : utils _1 . isType ( 'Object' , choice ) ? choice [ labelKey ] : choice . innerHTML ,
isSelected : choice . selected ,
isDisabled : isOptDisabled ,
groupId : groupId ,
customProperties : choice . customProperties ,
placeholder : choice . placeholder
} ) ;
} ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
groupChoices . forEach ( addGroupChoices ) ;
} else {
this . _store . dispatch ( groups _1 . addGroup ( {
value : group . label ,
id : group . id ,
active : false ,
disabled : group . disabled
} ) ) ;
2019-10-22 23:20:40 +02:00
}
2019-12-23 19:22:54 +01:00
} ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _getTemplate = function ( template ) {
var _a ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
var args = [ ] ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
for ( var _i = 1 ; _i < arguments . length ; _i ++ ) {
args [ _i - 1 ] = arguments [ _i ] ;
2019-10-22 23:20:40 +02:00
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
var classNames = this . config . classNames ;
return ( _a = this . _templates [ template ] ) . call . apply ( _a , _ _spreadArrays ( [ this , classNames ] , args ) ) ;
2019-10-22 23:20:40 +02:00
} ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _createTemplates = function ( ) {
var callbackOnCreateTemplates = this . config . callbackOnCreateTemplates ;
var userTemplates = { } ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
if ( callbackOnCreateTemplates && typeof callbackOnCreateTemplates === 'function' ) {
userTemplates = callbackOnCreateTemplates . call ( this , utils _1 . strToEl ) ;
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
this . _templates = deepmerge _1 . default ( templates _1 . default , userTemplates ) ;
} ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _createElements = function ( ) {
this . containerOuter = new components _1 . Container ( {
element : this . _getTemplate ( 'containerOuter' , this . _direction , this . _isSelectElement , this . _isSelectOneElement , this . config . searchEnabled , this . passedElement . element . type ) ,
classNames : this . config . classNames ,
type : this . passedElement . element . type ,
position : this . config . position
} ) ;
this . containerInner = new components _1 . Container ( {
element : this . _getTemplate ( 'containerInner' ) ,
classNames : this . config . classNames ,
type : this . passedElement . element . type ,
position : this . config . position
} ) ;
this . input = new components _1 . Input ( {
element : this . _getTemplate ( 'input' , this . _placeholderValue ) ,
classNames : this . config . classNames ,
type : this . passedElement . element . type ,
preventPaste : ! this . config . paste
} ) ;
this . choiceList = new components _1 . List ( {
element : this . _getTemplate ( 'choiceList' , this . _isSelectOneElement )
} ) ;
this . itemList = new components _1 . List ( {
element : this . _getTemplate ( 'itemList' , this . _isSelectOneElement )
} ) ;
this . dropdown = new components _1 . Dropdown ( {
element : this . _getTemplate ( 'dropdown' ) ,
classNames : this . config . classNames ,
type : this . passedElement . element . type
2019-10-22 23:20:40 +02:00
} ) ;
} ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _createStructure = function ( ) {
// Hide original element
this . passedElement . conceal ( ) ; // Wrap input in container preserving DOM ordering
2019-01-26 13:36:47 +01:00
2019-12-23 19:22:54 +01:00
this . containerInner . wrap ( this . passedElement . element ) ; // Wrapper inner container with outer container
2019-01-26 13:36:47 +01:00
2019-12-23 19:22:54 +01:00
this . containerOuter . wrap ( this . containerInner . element ) ;
2018-05-28 17:22:22 +02:00
2019-12-23 19:22:54 +01:00
if ( this . _isSelectOneElement ) {
this . input . placeholder = this . config . searchPlaceholderValue || '' ;
} else if ( this . _placeholderValue ) {
this . input . placeholder = this . _placeholderValue ;
this . input . setWidth ( ) ;
}
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
this . containerOuter . element . appendChild ( this . containerInner . element ) ;
this . containerOuter . element . appendChild ( this . dropdown . element ) ;
this . containerInner . element . appendChild ( this . itemList . element ) ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
if ( ! this . _isTextElement ) {
this . dropdown . element . appendChild ( this . choiceList . element ) ;
}
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( ! this . _isSelectOneElement ) {
this . containerInner . element . appendChild ( this . input . element ) ;
} else if ( this . config . searchEnabled ) {
this . dropdown . element . insertBefore ( this . input . element , this . dropdown . element . firstChild ) ;
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
if ( this . _isSelectElement ) {
this . _highlightPosition = 0 ;
this . _isSearching = false ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
this . _startLoading ( ) ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
if ( this . _presetGroups . length ) {
this . _addPredefinedGroups ( this . _presetGroups ) ;
} else {
this . _addPredefinedChoices ( this . _presetChoices ) ;
}
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
this . _stopLoading ( ) ;
}
if ( this . _isTextElement ) {
this . _addPredefinedItems ( this . _presetItems ) ;
}
2019-10-22 23:20:40 +02:00
} ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _addPredefinedGroups = function ( groups ) {
var _this = this ; // If we have a placeholder option
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
var placeholderChoice = this . passedElement . placeholderOption ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
if ( placeholderChoice && placeholderChoice . parentNode && placeholderChoice . parentNode . tagName === 'SELECT' ) {
this . _addChoice ( {
value : placeholderChoice . value ,
label : placeholderChoice . innerHTML ,
isSelected : placeholderChoice . selected ,
isDisabled : placeholderChoice . disabled ,
placeholder : true
} ) ;
}
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
groups . forEach ( function ( group ) {
return _this . _addGroup ( {
group : group ,
id : group . id || null
} ) ;
2019-10-22 23:20:40 +02:00
} ) ;
} ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _addPredefinedChoices = function ( choices ) {
var _this = this ; // If sorting is enabled or the user is searching, filter choices
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( this . config . shouldSort ) {
choices . sort ( this . config . sorter ) ;
2019-10-22 23:20:40 +02:00
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
var hasSelectedChoice = choices . some ( function ( choice ) {
return choice . selected ;
} ) ;
var firstEnabledChoiceIndex = choices . findIndex ( function ( choice ) {
return choice . disabled === undefined || ! choice . disabled ;
} ) ;
choices . forEach ( function ( choice , index ) {
var _a = choice . value ,
value = _a === void 0 ? '' : _a ,
label = choice . label ,
customProperties = choice . customProperties ,
placeholder = choice . placeholder ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( _this . _isSelectElement ) {
// If the choice is actually a group
if ( choice . choices ) {
_this . _addGroup ( {
group : choice ,
id : choice . id || null
} ) ;
} else {
/ * *
* If there is a selected choice already or the choice is not the first in
* the array , add each choice normally .
*
* Otherwise we pre - select the first enabled choice in the array ( "select-one" only )
* /
var shouldPreselect = _this . _isSelectOneElement && ! hasSelectedChoice && index === firstEnabledChoiceIndex ;
var isSelected = shouldPreselect ? true : choice . selected ;
var isDisabled = choice . disabled ;
console . log ( isDisabled , choice ) ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
_this . _addChoice ( {
value : value ,
label : label ,
isSelected : ! ! isSelected ,
isDisabled : ! ! isDisabled ,
placeholder : ! ! placeholder ,
customProperties : customProperties
} ) ;
}
} else {
_this . _addChoice ( {
value : value ,
label : label ,
isSelected : ! ! choice . selected ,
isDisabled : ! ! choice . disabled ,
placeholder : ! ! choice . placeholder ,
customProperties : customProperties
} ) ;
2017-11-15 07:51:53 +01:00
}
2019-10-22 23:20:40 +02:00
} ) ;
} ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _addPredefinedItems = function ( items ) {
var _this = this ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
items . forEach ( function ( item ) {
if ( typeof item === 'object' && item . value ) {
_this . _addItem ( {
value : item . value ,
label : item . label ,
choiceId : item . id ,
customProperties : item . customProperties ,
placeholder : item . placeholder
} ) ;
2017-11-15 07:51:53 +01:00
}
2019-12-23 19:22:54 +01:00
if ( typeof item === 'string' ) {
_this . _addItem ( {
value : item
} ) ;
}
2019-10-22 23:20:40 +02:00
} ) ;
} ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _setChoiceOrItem = function ( item ) {
var _this = this ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
var itemType = utils _1 . getType ( item ) . toLowerCase ( ) ;
var handleType = {
object : function object ( ) {
if ( ! item . value ) {
return ;
} // If we are dealing with a select input, we need to create an option first
// that is then selected. For text inputs we can just add items normally.
2017-11-07 12:59:49 +01:00
2016-08-23 08:24:45 +02:00
2019-12-23 19:22:54 +01:00
if ( ! _this . _isTextElement ) {
_this . _addChoice ( {
value : item . value ,
label : item . label ,
isSelected : true ,
isDisabled : false ,
customProperties : item . customProperties ,
placeholder : item . placeholder
} ) ;
} else {
_this . _addItem ( {
value : item . value ,
label : item . label ,
choiceId : item . id ,
customProperties : item . customProperties ,
placeholder : item . placeholder
} ) ;
}
} ,
string : function string ( ) {
if ( ! _this . _isTextElement ) {
_this . _addChoice ( {
value : item ,
label : item ,
isSelected : true ,
isDisabled : false
} ) ;
} else {
_this . _addItem ( {
value : item
} ) ;
}
}
} ;
handleType [ itemType ] ( ) ;
2019-10-22 23:20:40 +02:00
} ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _findAndSelectChoiceByValue = function ( value ) {
var _this = this ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
var choices = this . _store . choices ; // Check 'value' property exists and the choice isn't already selected
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
var foundChoice = choices . find ( function ( choice ) {
return _this . config . valueComparer ( choice . value , value ) ;
2019-10-22 23:20:40 +02:00
} ) ;
2016-08-23 08:24:45 +02:00
2019-12-23 19:22:54 +01:00
if ( foundChoice && ! foundChoice . selected ) {
this . _addItem ( {
value : foundChoice . value ,
label : foundChoice . label ,
choiceId : foundChoice . id ,
groupId : foundChoice . groupId ,
customProperties : foundChoice . customProperties ,
placeholder : foundChoice . placeholder ,
keyCode : foundChoice . keyCode
} ) ;
2019-10-22 23:20:40 +02:00
}
2019-12-23 19:22:54 +01:00
} ;
2016-08-23 08:24:45 +02:00
2019-12-23 19:22:54 +01:00
Choices . prototype . _generatePlaceholderValue = function ( ) {
if ( this . _isSelectElement ) {
var placeholderOption = this . passedElement . placeholderOption ;
return placeholderOption ? placeholderOption . text : null ;
2019-10-22 23:20:40 +02:00
}
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
var _a = this . config ,
placeholder = _a . placeholder ,
placeholderValue = _a . placeholderValue ;
var dataset = this . passedElement . element . dataset ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( placeholder ) {
if ( placeholderValue ) {
return placeholderValue ;
}
2016-08-23 08:24:45 +02:00
2019-12-23 19:22:54 +01:00
if ( dataset . placeholder ) {
return dataset . placeholder ;
}
2019-10-29 22:19:56 +01:00
}
2019-12-23 19:22:54 +01:00
return null ;
} ;
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
return Choices ;
} ( ) ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
exports . default = Choices ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
/***/ } ) ,
/* 9 */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
/ * !
* Fuse . js v3 . 4.6 - Lightweight fuzzy - search ( http : //fusejs.io)
*
* Copyright ( c ) 2012 - 2017 Kirollos Risk ( http : //kiro.me)
* All Rights Reserved . Apache Software License 2.0
*
* http : //www.apache.org/licenses/LICENSE-2.0
* /
! function ( e , t ) { true ? module . exports = t ( ) : undefined } ( this , function ( ) { return function ( e ) { var t = { } ; function n ( r ) { if ( t [ r ] ) return t [ r ] . exports ; var o = t [ r ] = { i : r , l : ! 1 , exports : { } } ; return e [ r ] . call ( o . exports , o , o . exports , n ) , o . l = ! 0 , o . exports } return n . m = e , n . c = t , n . d = function ( e , t , r ) { n . o ( e , t ) || Object . defineProperty ( e , t , { enumerable : ! 0 , get : r } ) } , n . r = function ( e ) { "undefined" != typeof Symbol && Symbol . toStringTag && Object . defineProperty ( e , Symbol . toStringTag , { value : "Module" } ) , Object . defineProperty ( e , "__esModule" , { value : ! 0 } ) } , n . t = function ( e , t ) { if ( 1 & t && ( e = n ( e ) ) , 8 & t ) return e ; if ( 4 & t && "object" == typeof e && e && e . _ _esModule ) return e ; var r = Object . create ( null ) ; if ( n . r ( r ) , Object . defineProperty ( r , "default" , { enumerable : ! 0 , value : e } ) , 2 & t && "string" != typeof e ) for ( var o in e ) n . d ( r , o , function ( t ) { return e [ t ] } . bind ( null , o ) ) ; return r } , n . n = function ( e ) { var t = e && e . _ _esModule ? function ( ) { return e . default } : function ( ) { return e } ; return n . d ( t , "a" , t ) , t } , n . o = function ( e , t ) { return Object . prototype . hasOwnProperty . call ( e , t ) } , n . p = "" , n ( n . s = 1 ) } ( [ function ( e , t ) { e . exports = function ( e ) { return Array . isArray ? Array . isArray ( e ) : "[object Array]" === Object . prototype . toString . call ( e ) } } , function ( e , t , n ) { function r ( e ) { return ( r = "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 } ) ( e ) } function o ( e , t ) { for ( var n = 0 ; n < t . length ; n ++ ) { var r = t [ n ] ; r . enumerable = r . enumerable || ! 1 , r . configurable = ! 0 , "value" in r && ( r . writable = ! 0 ) , Object . defineProperty ( e , r . key , r ) } } var i = n ( 2 ) , a = n ( 8 ) , s = n ( 0 ) , c = function ( ) { function e ( t , n ) { var r = n . location , o = void 0 === r ? 0 : r , i = n . distance , s = void 0 === i ? 100 : i , c = n . threshold , h = void 0 === c ? . 6 : c , l = n . maxPatternLength , u = void 0 === l ? 32 : l , f = n . caseSensitive , d = void 0 !== f && f , v = n . tokenSeparator , p = void 0 === v ? / +/g : v , g = n . findAllMatches , y = void 0 !== g && g , m = n . minMatchCharLength , k = void 0 === m ? 1 : m , S = n . id , x = void 0 === S ? null : S , b = n . keys , M = void 0 === b ? [ ] : b , _ = n . shouldSort , L = void 0 === _ || _ , w = n . getFn , A = void 0 === w ? a : w , C = n . sortFn , I = void 0 === C ? function ( e , t ) { return e . score - t . score } : C , O = n . tokenize , j = void 0 !== O && O , P = n . matchAllTokens , F = void 0 !== P && P , T = n . includeMatches , z = void 0 !== T && T , E = n . includeScore , K = void 0 !== E && E , $ = n . verbose , J = void 0 !== $ && $ ; ! function ( e , t ) { if ( ! ( e instanceof t ) ) throw new TypeError ( "Cannot call a class as a function" ) } ( this , e ) , this . options = { location : o , distance : s , threshold : h , maxPatternLength : u , isCaseSensitive : d , tokenSeparator : p , findAllMatches : y , minMatchCharLength : k , id : x , keys : M , includeMatches : z , includeScore : K , shouldSort : L , getFn : A , sortFn : I , verbose : J , tokenize : j , matchAllTokens : F } , this . setCollection ( t ) } var t , n , c ; return t = e , ( n = [ { key : "setCollection" , value : function ( e ) { return this . list = e , e } } , { key : "search" , value : function ( e ) { var t = arguments . length > 1 && void 0 !== arguments [ 1 ] ? arguments [ 1 ] : { limit : ! 1 } ; this . _log ( '---------\nSearch pattern: "' . concat ( e , '"' ) ) ; var n = this . _prepareSearchers ( e ) , r = n . tokenSearchers , o = n . fullSearcher , i = this . _search ( r , o ) , a = i . weights , s = i . results ; return this . _computeScore ( a , s ) , this . options . shouldSort && this . _sort ( s ) , t . limit && "number" == typeof t . limit && ( s = s . slice ( 0 , t . limit ) ) , this . _format ( s ) } } , { key : "_prepareSearchers" , value : function ( ) { var e = arguments . length > 0 && void 0 !== arguments [ 0 ] ? arguments [ 0 ] : "" , t = [ ] ; if ( this . options . tokenize ) for ( var n = e . split ( this . options . tokenSeparator ) , r = 0 , o = n . length ; r < o ; r += 1 ) t . push ( new i ( n [ r ] , this . options ) ) ; return { tokenSearchers : t , fullSearcher : new i ( e , this . options ) } } } , { key : "_search" , value : function ( ) { var e = arguments . length > 0 && void 0 !== arguments [ 0 ] ? arguments [ 0 ] : [ ] , t = arguments . length > 1 ? arguments [ 1 ] : void 0 , n = this . list , r = { } , o = [ ] ; if ( "string" == typeof n [ 0 ] ) { for ( var i = 0 , a = n . length ; i < a ; i += 1 ) this . _analyze ( { key : "" , value : n [ i ] , record : i , index : i } , { resultMap : r , results : o , tokenSearchers : e , fullSearcher : t } ) ; return { weights : null , results : o } } for ( var s = { } , c = 0 , h = n . length ; c < h ; c += 1 ) for ( var l = n [ c ] , u = 0 , f = this . options . keys . length ; u < f ; u += 1 ) { var d = this . options . keys [ u ] ; if ( "string" != typeof d ) { if ( s [ d . name ] = { weight : 1 - d . weight || 1 } , d . weight <= 0 || d . weight > 1 ) throw new Error ( "Key weight has to be > 0 and <= 1" ) ; d = d . name } else s [ d ] = { weight : 1 } ; this . _analyze ( { key : d , value : this . options . getFn ( l , d ) , record : l , i
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
/***/ } ) ,
/* 10 */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
"use strict" ;
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
var isMergeableObject = function isMergeableObject ( value ) {
return isNonNullObject ( value )
&& ! isSpecial ( value )
} ;
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
function isNonNullObject ( value ) {
return ! ! value && typeof value === 'object'
}
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
function isSpecial ( value ) {
var stringValue = Object . prototype . toString . call ( value ) ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
return stringValue === '[object RegExp]'
|| stringValue === '[object Date]'
|| isReactElement ( value )
}
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25
var canUseSymbol = typeof Symbol === 'function' && Symbol . for ;
var REACT _ELEMENT _TYPE = canUseSymbol ? Symbol . for ( 'react.element' ) : 0xeac7 ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
function isReactElement ( value ) {
return value . $$typeof === REACT _ELEMENT _TYPE
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
function emptyTarget ( val ) {
return Array . isArray ( val ) ? [ ] : { }
}
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
function cloneUnlessOtherwiseSpecified ( value , options ) {
return ( options . clone !== false && options . isMergeableObject ( value ) )
? deepmerge ( emptyTarget ( value ) , value , options )
: value
}
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
function defaultArrayMerge ( target , source , options ) {
return target . concat ( source ) . map ( function ( element ) {
return cloneUnlessOtherwiseSpecified ( element , options )
} )
}
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
function getMergeFunction ( key , options ) {
if ( ! options . customMerge ) {
return deepmerge
}
var customMerge = options . customMerge ( key ) ;
return typeof customMerge === 'function' ? customMerge : deepmerge
}
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
function getEnumerableOwnPropertySymbols ( target ) {
return Object . getOwnPropertySymbols
? Object . getOwnPropertySymbols ( target ) . filter ( function ( symbol ) {
return target . propertyIsEnumerable ( symbol )
} )
: [ ]
}
2019-01-26 13:36:47 +01:00
2019-12-23 19:22:54 +01:00
function getKeys ( target ) {
return Object . keys ( target ) . concat ( getEnumerableOwnPropertySymbols ( target ) )
}
2019-01-26 13:36:47 +01:00
2019-12-23 19:22:54 +01:00
// Protects from prototype poisoning and unexpected merging up the prototype chain.
function propertyIsUnsafe ( target , key ) {
try {
return ( key in target ) // Properties are safe to merge if they don't exist in the target yet,
&& ! ( Object . hasOwnProperty . call ( target , key ) // unsafe if they exist up the prototype chain,
&& Object . propertyIsEnumerable . call ( target , key ) ) // and also unsafe if they're nonenumerable.
} catch ( unused ) {
// Counterintuitively, it's safe to merge any property on a target that causes the `in` operator to throw.
// This happens when trying to copy an object in the source over a plain string in the target.
return false
}
}
2019-01-26 13:36:47 +01:00
2019-12-23 19:22:54 +01:00
function mergeObject ( target , source , options ) {
var destination = { } ;
if ( options . isMergeableObject ( target ) ) {
getKeys ( target ) . forEach ( function ( key ) {
destination [ key ] = cloneUnlessOtherwiseSpecified ( target [ key ] , options ) ;
} ) ;
}
getKeys ( source ) . forEach ( function ( key ) {
if ( propertyIsUnsafe ( target , key ) ) {
return
}
2019-01-26 13:36:47 +01:00
2019-12-23 19:22:54 +01:00
if ( ! options . isMergeableObject ( source [ key ] ) || ! target [ key ] ) {
destination [ key ] = cloneUnlessOtherwiseSpecified ( source [ key ] , options ) ;
} else {
destination [ key ] = getMergeFunction ( key , options ) ( target [ key ] , source [ key ] , options ) ;
}
} ) ;
return destination
}
2019-01-26 13:36:47 +01:00
2019-12-23 19:22:54 +01:00
function deepmerge ( target , source , options ) {
options = options || { } ;
options . arrayMerge = options . arrayMerge || defaultArrayMerge ;
options . isMergeableObject = options . isMergeableObject || isMergeableObject ;
// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()
// implementations can use it. The caller may not replace it.
options . cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified ;
2019-01-26 13:36:47 +01:00
2019-12-23 19:22:54 +01:00
var sourceIsArray = Array . isArray ( source ) ;
var targetIsArray = Array . isArray ( target ) ;
var sourceAndTargetTypesMatch = sourceIsArray === targetIsArray ;
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
if ( ! sourceAndTargetTypesMatch ) {
return cloneUnlessOtherwiseSpecified ( source , options )
} else if ( sourceIsArray ) {
return options . arrayMerge ( target , source , options )
} else {
return mergeObject ( target , source , options )
}
}
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
deepmerge . all = function deepmergeAll ( array , options ) {
if ( ! Array . isArray ( array ) ) {
throw new Error ( 'first argument should be an array' )
}
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
return array . reduce ( function ( prev , next ) {
return deepmerge ( prev , next , options )
} , { } )
} ;
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
var deepmerge _1 = deepmerge ;
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
module . exports = deepmerge _1 ;
2018-05-25 15:00:27 +02:00
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
/***/ } ) ,
/* 11 */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
"use strict" ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
var _ _spreadArrays = this && this . _ _spreadArrays || function ( ) {
for ( var s = 0 , i = 0 , il = arguments . length ; i < il ; i ++ ) {
s += arguments [ i ] . length ;
}
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
for ( var r = Array ( s ) , k = 0 , i = 0 ; i < il ; i ++ ) {
for ( var a = arguments [ i ] , j = 0 , jl = a . length ; j < jl ; j ++ , k ++ ) {
r [ k ] = a [ j ] ;
}
}
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
return r ;
} ;
var _ _importDefault = this && this . _ _importDefault || function ( mod ) {
return mod && mod . _ _esModule ? mod : {
"default" : mod
} ;
} ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
/* eslint-disable @typescript-eslint/no-explicit-any */
var redux _1 = _ _webpack _require _ _ ( 3 ) ;
var index _1 = _ _importDefault ( _ _webpack _require _ _ ( 4 ) ) ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
var Store =
/** @class */
function ( ) {
function Store ( ) {
this . _store = redux _1 . createStore ( index _1 . default , window . _ _REDUX _DEVTOOLS _EXTENSION _ _ && window . _ _REDUX _DEVTOOLS _EXTENSION _ _ ( ) ) ;
}
/ * *
* Subscribe store to function call ( wrapped Redux method )
* /
2018-05-25 15:00:27 +02:00
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
Store . prototype . subscribe = function ( onChange ) {
this . _store . subscribe ( onChange ) ;
} ;
/ * *
* Dispatch event to store ( wrapped Redux method )
* /
2016-08-23 08:24:45 +02:00
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
Store . prototype . dispatch = function ( action ) {
this . _store . dispatch ( action ) ;
} ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
Object . defineProperty ( Store . prototype , "state" , {
/ * *
* Get store object ( wrapping Redux method )
* /
get : function get ( ) {
return this . _store . getState ( ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Store . prototype , "items" , {
/ * *
* Get items from store
* /
get : function get ( ) {
return this . state . items ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Store . prototype , "activeItems" , {
/ * *
* Get active items from store
* /
get : function get ( ) {
return this . items . filter ( function ( item ) {
return item . active === true ;
} ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Store . prototype , "highlightedActiveItems" , {
/ * *
* Get highlighted items from store
* /
get : function get ( ) {
return this . items . filter ( function ( item ) {
return item . active && item . highlighted ;
} ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Store . prototype , "choices" , {
/ * *
* Get choices from store
* /
get : function get ( ) {
return this . state . choices ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Store . prototype , "activeChoices" , {
/ * *
* Get active choices from store
* /
get : function get ( ) {
return this . choices . filter ( function ( choice ) {
return choice . active === true ;
} ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Store . prototype , "selectableChoices" , {
/ * *
* Get selectable choices from store
* /
get : function get ( ) {
return this . choices . filter ( function ( choice ) {
return choice . disabled !== true ;
} ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Store . prototype , "searchableChoices" , {
/ * *
* Get choices that can be searched ( excluding placeholders )
* /
get : function get ( ) {
return this . selectableChoices . filter ( function ( choice ) {
return choice . placeholder !== true ;
} ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Store . prototype , "placeholderChoice" , {
/ * *
* Get placeholder choice from store
* /
get : function get ( ) {
return _ _spreadArrays ( this . choices ) . reverse ( ) . find ( function ( choice ) {
return choice . placeholder === true ;
} ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Store . prototype , "groups" , {
/ * *
* Get groups from store
* /
get : function get ( ) {
return this . state . groups ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Store . prototype , "activeGroups" , {
/ * *
* Get active groups from store
* /
get : function get ( ) {
var _a = this ,
groups = _a . groups ,
choices = _a . choices ;
2017-11-13 20:13:37 +01:00
2019-12-23 19:22:54 +01:00
return groups . filter ( function ( group ) {
var isActive = group . active === true && group . disabled === false ;
var hasActiveOptions = choices . some ( function ( choice ) {
return choice . active === true && choice . disabled === false ;
} ) ;
return isActive && hasActiveOptions ;
} , [ ] ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
/ * *
* Get loading state from store
* /
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
Store . prototype . isLoading = function ( ) {
return this . state . loading ;
2019-10-22 23:20:40 +02:00
} ;
2019-12-23 19:22:54 +01:00
/ * *
* Get single choice by it ' s ID
* /
2017-11-07 12:59:49 +01:00
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
Store . prototype . getChoiceById = function ( id ) {
return this . activeChoices . find ( function ( choice ) {
return choice . id === parseInt ( id , 10 ) ;
} ) ;
} ;
/ * *
* Get group by group id
* /
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
Store . prototype . getGroupById = function ( id ) {
return this . groups . find ( function ( group ) {
return group . id === id ;
} ) ;
2019-10-22 23:20:40 +02:00
} ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
return Store ;
} ( ) ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
exports . default = Store ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
/***/ } ) ,
/* 12 */
/***/ ( function ( module , exports ) {
2018-02-02 12:08:03 +01:00
2019-12-23 19:22:54 +01:00
var g ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
// This works in non-strict mode
g = ( function ( ) {
return this ;
} ) ( ) ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
try {
// This works if eval is allowed (see CSP)
g = g || new Function ( "return this" ) ( ) ;
} catch ( e ) {
// This works if the window reference is available
if ( typeof window === "object" ) g = window ;
}
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
// g can still be undefined, but nothing to do about it...
// We return undefined, instead of nothing here, so it's
// easier to handle this case. if(!global) { ...}
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
module . exports = g ;
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
/***/ } ) ,
/* 13 */
/***/ ( function ( module , exports ) {
module . exports = function ( originalModule ) {
if ( ! originalModule . webpackPolyfill ) {
var module = Object . create ( originalModule ) ;
// module.parent = undefined by default
if ( ! module . children ) module . children = [ ] ;
Object . defineProperty ( module , "loaded" , {
enumerable : true ,
get : function ( ) {
return module . l ;
}
} ) ;
Object . defineProperty ( module , "id" , {
enumerable : true ,
get : function ( ) {
return module . i ;
}
} ) ;
Object . defineProperty ( module , "exports" , {
enumerable : true
} ) ;
module . webpackPolyfill = 1 ;
}
return module ;
} ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
/***/ } ) ,
/* 14 */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
2019-10-28 20:53:24 +01:00
2019-12-23 19:22:54 +01:00
"use strict" ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
var _ _spreadArrays = this && this . _ _spreadArrays || function ( ) {
for ( var s = 0 , i = 0 , il = arguments . length ; i < il ; i ++ ) {
s += arguments [ i ] . length ;
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
for ( var r = Array ( s ) , k = 0 , i = 0 ; i < il ; i ++ ) {
for ( var a = arguments [ i ] , j = 0 , jl = a . length ; j < jl ; j ++ , k ++ ) {
r [ k ] = a [ j ] ;
}
}
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
return r ;
} ;
2018-02-02 12:08:03 +01:00
2019-12-23 19:22:54 +01:00
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
exports . defaultState = [ ] ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
function items ( state , action ) {
if ( state === void 0 ) {
state = exports . defaultState ;
}
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
switch ( action . type ) {
case 'ADD_ITEM' :
{
var addItemAction = action ; // Add object to items array
var newState = _ _spreadArrays ( state , [ {
id : addItemAction . id ,
choiceId : addItemAction . choiceId ,
groupId : addItemAction . groupId ,
value : addItemAction . value ,
label : addItemAction . label ,
active : true ,
highlighted : false ,
customProperties : addItemAction . customProperties ,
placeholder : addItemAction . placeholder || false ,
keyCode : null
} ] ) ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
return newState . map ( function ( obj ) {
var item = obj ;
item . highlighted = false ;
return item ;
} ) ;
2017-11-07 12:59:49 +01:00
}
2017-11-13 20:13:37 +01:00
2019-12-23 19:22:54 +01:00
case 'REMOVE_ITEM' :
{
// Set item to inactive
return state . map ( function ( obj ) {
var item = obj ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
if ( item . id === action . id ) {
item . active = false ;
}
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
return item ;
} ) ;
}
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
case 'HIGHLIGHT_ITEM' :
{
var highlightItemAction _1 = action ;
return state . map ( function ( obj ) {
var item = obj ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
if ( item . id === highlightItemAction _1 . id ) {
item . highlighted = highlightItemAction _1 . highlighted ;
}
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
return item ;
} ) ;
}
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
default :
{
return state ;
2017-11-15 07:51:53 +01:00
}
2019-12-23 19:22:54 +01:00
}
}
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
exports . default = items ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
/***/ } ) ,
/* 15 */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
"use strict" ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
var _ _spreadArrays = this && this . _ _spreadArrays || function ( ) {
for ( var s = 0 , i = 0 , il = arguments . length ; i < il ; i ++ ) {
s += arguments [ i ] . length ;
}
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
for ( var r = Array ( s ) , k = 0 , i = 0 ; i < il ; i ++ ) {
for ( var a = arguments [ i ] , j = 0 , jl = a . length ; j < jl ; j ++ , k ++ ) {
r [ k ] = a [ j ] ;
2017-11-15 07:51:53 +01:00
}
2019-12-23 19:22:54 +01:00
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
return r ;
} ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
exports . defaultState = [ ] ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
function groups ( state , action ) {
if ( state === void 0 ) {
state = exports . defaultState ;
}
2017-11-13 20:13:37 +01:00
2019-12-23 19:22:54 +01:00
switch ( action . type ) {
case 'ADD_GROUP' :
{
var addGroupAction = action ;
return _ _spreadArrays ( state , [ {
id : addGroupAction . id ,
value : addGroupAction . value ,
active : addGroupAction . active ,
disabled : addGroupAction . disabled
} ] ) ;
}
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
case 'CLEAR_CHOICES' :
{
return [ ] ;
}
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
default :
{
return state ;
}
}
}
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
exports . default = groups ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
/***/ } ) ,
/* 16 */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
"use strict" ;
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
var _ _spreadArrays = this && this . _ _spreadArrays || function ( ) {
for ( var s = 0 , i = 0 , il = arguments . length ; i < il ; i ++ ) {
s += arguments [ i ] . length ;
}
for ( var r = Array ( s ) , k = 0 , i = 0 ; i < il ; i ++ ) {
for ( var a = arguments [ i ] , j = 0 , jl = a . length ; j < jl ; j ++ , k ++ ) {
r [ k ] = a [ j ] ;
2018-05-25 15:00:27 +02:00
}
2019-12-23 19:22:54 +01:00
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
return r ;
} ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
exports . defaultState = [ ] ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
function choices ( state , action ) {
if ( state === void 0 ) {
state = exports . defaultState ;
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
switch ( action . type ) {
case 'ADD_CHOICE' :
{
var addChoiceAction = action ;
var choice = {
id : addChoiceAction . id ,
elementId : addChoiceAction . elementId ,
groupId : addChoiceAction . groupId ,
value : addChoiceAction . value ,
label : addChoiceAction . label || addChoiceAction . value ,
disabled : addChoiceAction . disabled || false ,
selected : false ,
active : true ,
score : 9999 ,
customProperties : addChoiceAction . customProperties ,
placeholder : addChoiceAction . placeholder || false
} ;
/ *
A disabled choice appears in the choice dropdown but cannot be selected
A selected choice has been added to the passed input ' s value ( added as an item )
An active choice appears within the choice dropdown
* /
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
return _ _spreadArrays ( state , [ choice ] ) ;
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
case 'ADD_ITEM' :
{
var addItemAction _1 = action ; // When an item is added and it has an associated choice,
// we want to disable it so it can't be chosen again
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
if ( addItemAction _1 . choiceId > - 1 ) {
return state . map ( function ( obj ) {
var choice = obj ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
if ( choice . id === parseInt ( "" + addItemAction _1 . choiceId , 10 ) ) {
choice . selected = true ;
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
return choice ;
} ) ;
}
return state ;
2019-10-22 23:20:40 +02:00
}
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
case 'REMOVE_ITEM' :
{
var removeItemAction _1 = action ; // When an item is removed and it has an associated choice,
// we want to re-enable it so it can be chosen again
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( removeItemAction _1 . choiceId && removeItemAction _1 . choiceId > - 1 ) {
return state . map ( function ( obj ) {
var choice = obj ;
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
if ( choice . id === parseInt ( "" + removeItemAction _1 . choiceId , 10 ) ) {
choice . selected = false ;
}
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
return choice ;
} ) ;
}
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
return state ;
}
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
case 'FILTER_CHOICES' :
{
var filterChoicesAction _1 = action ;
return state . map ( function ( obj ) {
var choice = obj ; // Set active state based on whether choice is
// within filtered results
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
choice . active = filterChoicesAction _1 . results . some ( function ( _a ) {
var item = _a . item ,
score = _a . score ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
if ( item . id === choice . id ) {
choice . score = score ;
return true ;
}
2017-11-13 20:13:37 +01:00
2019-12-23 19:22:54 +01:00
return false ;
} ) ;
return choice ;
} ) ;
}
2018-05-28 17:22:22 +02:00
2019-12-23 19:22:54 +01:00
case 'ACTIVATE_CHOICES' :
{
var activateChoicesAction _1 = action ;
return state . map ( function ( obj ) {
var choice = obj ;
choice . active = activateChoicesAction _1 . active ;
return choice ;
2019-10-22 23:20:40 +02:00
} ) ;
2019-12-23 19:22:54 +01:00
}
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
case 'CLEAR_CHOICES' :
{
return exports . defaultState ;
2018-05-28 17:22:22 +02:00
}
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
default :
{
return state ;
}
}
}
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
exports . default = choices ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
/***/ } ) ,
/* 17 */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
"use strict" ;
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
exports . defaultState = false ;
var general = function general ( state , action ) {
if ( state === void 0 ) {
state = exports . defaultState ;
}
switch ( action . type ) {
case 'SET_IS_LOADING' :
{
return action . isLoading ;
}
default :
{
return state ;
}
}
} ;
exports . default = general ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
/***/ } ) ,
/* 18 */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
"use strict" ;
2017-11-07 12:59:49 +01:00
2019-11-08 10:19:18 +01:00
2019-12-23 19:22:54 +01:00
var _ _importDefault = this && this . _ _importDefault || function ( mod ) {
return mod && mod . _ _esModule ? mod : {
"default" : mod
2019-10-22 23:20:40 +02:00
} ;
2019-12-23 19:22:54 +01:00
} ;
2018-05-28 17:22:22 +02:00
2019-12-23 19:22:54 +01:00
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
var dropdown _1 = _ _importDefault ( _ _webpack _require _ _ ( 19 ) ) ;
2018-06-07 17:54:11 +02:00
2019-12-23 19:22:54 +01:00
exports . Dropdown = dropdown _1 . default ;
2018-06-07 17:54:11 +02:00
2019-12-23 19:22:54 +01:00
var container _1 = _ _importDefault ( _ _webpack _require _ _ ( 20 ) ) ;
2018-05-28 17:22:22 +02:00
2019-12-23 19:22:54 +01:00
exports . Container = container _1 . default ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
var input _1 = _ _importDefault ( _ _webpack _require _ _ ( 21 ) ) ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
exports . Input = input _1 . default ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
var list _1 = _ _importDefault ( _ _webpack _require _ _ ( 22 ) ) ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
exports . List = list _1 . default ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
var wrapped _input _1 = _ _importDefault ( _ _webpack _require _ _ ( 23 ) ) ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
exports . WrappedInput = wrapped _input _1 . default ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
var wrapped _select _1 = _ _importDefault ( _ _webpack _require _ _ ( 24 ) ) ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
exports . WrappedSelect = wrapped _select _1 . default ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
/***/ } ) ,
/* 19 */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
"use strict" ;
2017-11-07 12:59:49 +01:00
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
var Dropdown =
/** @class */
function ( ) {
function Dropdown ( _a ) {
var element = _a . element ,
type = _a . type ,
classNames = _a . classNames ;
this . element = element ;
this . classNames = classNames ;
this . type = type ;
this . isActive = false ;
}
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
Object . defineProperty ( Dropdown . prototype , "distanceFromTopWindow" , {
/ * *
* Bottom position of dropdown in viewport coordinates
* /
get : function get ( ) {
return this . element . getBoundingClientRect ( ) . bottom ;
} ,
enumerable : true ,
configurable : true
} ) ;
2018-05-28 16:13:55 +02:00
2019-12-23 19:22:54 +01:00
Dropdown . prototype . getChild = function ( selector ) {
return this . element . querySelector ( selector ) ;
} ;
/ * *
* Show dropdown to user by adding active state class
* /
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
Dropdown . prototype . show = function ( ) {
this . element . classList . add ( this . classNames . activeState ) ;
this . element . setAttribute ( 'aria-expanded' , 'true' ) ;
this . isActive = true ;
return this ;
2019-10-22 23:20:40 +02:00
} ;
2019-12-23 19:22:54 +01:00
/ * *
* Hide dropdown from user
* /
2019-10-22 23:20:40 +02:00
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
Dropdown . prototype . hide = function ( ) {
this . element . classList . remove ( this . classNames . activeState ) ;
this . element . setAttribute ( 'aria-expanded' , 'false' ) ;
this . isActive = false ;
return this ;
} ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
return Dropdown ;
} ( ) ;
2018-05-28 16:13:55 +02:00
2019-12-23 19:22:54 +01:00
exports . default = Dropdown ;
2018-05-28 16:13:55 +02:00
2019-12-23 19:22:54 +01:00
/***/ } ) ,
/* 20 */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
2018-05-28 16:13:55 +02:00
2019-12-23 19:22:54 +01:00
"use strict" ;
2018-05-28 16:13:55 +02:00
2019-12-23 19:22:54 +01:00
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
var utils _1 = _ _webpack _require _ _ ( 1 ) ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
var constants _1 = _ _webpack _require _ _ ( 0 ) ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
var Container =
/** @class */
function ( ) {
function Container ( _a ) {
var element = _a . element ,
type = _a . type ,
classNames = _a . classNames ,
position = _a . position ;
this . element = element ;
this . classNames = classNames ;
this . type = type ;
this . position = position ;
this . isOpen = false ;
this . isFlipped = false ;
this . isFocussed = false ;
this . isDisabled = false ;
this . isLoading = false ;
this . _onFocus = this . _onFocus . bind ( this ) ;
this . _onBlur = this . _onBlur . bind ( this ) ;
2019-11-13 16:40:47 +01:00
}
2019-12-23 19:22:54 +01:00
Container . prototype . addEventListeners = function ( ) {
this . element . addEventListener ( 'focus' , this . _onFocus ) ;
this . element . addEventListener ( 'blur' , this . _onBlur ) ;
} ;
Container . prototype . removeEventListeners = function ( ) {
this . element . removeEventListener ( 'focus' , this . _onFocus ) ;
this . element . removeEventListener ( 'blur' , this . _onBlur ) ;
} ;
2019-11-13 16:40:47 +01:00
/ * *
2019-12-23 19:22:54 +01:00
* Determine whether container should be flipped based on passed
* dropdown position
2019-11-13 16:40:47 +01:00
* /
2017-11-07 12:59:49 +01:00
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
Container . prototype . shouldFlip = function ( dropdownPos ) {
if ( typeof dropdownPos !== 'number' ) {
return false ;
} // If flip is enabled and the dropdown bottom position is
// greater than the window height flip the dropdown.
2019-10-22 23:20:40 +02:00
2019-11-22 20:13:46 +01:00
2019-12-23 19:22:54 +01:00
var shouldFlip = false ;
if ( this . position === 'auto' ) {
shouldFlip = ! window . matchMedia ( "(min-height: " + ( dropdownPos + 1 ) + "px)" ) . matches ;
} else if ( this . position === 'top' ) {
shouldFlip = true ;
}
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
return shouldFlip ;
} ;
Container . prototype . setActiveDescendant = function ( activeDescendantID ) {
this . element . setAttribute ( 'aria-activedescendant' , activeDescendantID ) ;
} ;
Container . prototype . removeActiveDescendant = function ( ) {
this . element . removeAttribute ( 'aria-activedescendant' ) ;
} ;
Container . prototype . open = function ( dropdownPos ) {
this . element . classList . add ( this . classNames . openState ) ;
this . element . setAttribute ( 'aria-expanded' , 'true' ) ;
this . isOpen = true ;
if ( this . shouldFlip ( dropdownPos ) ) {
this . element . classList . add ( this . classNames . flippedState ) ;
this . isFlipped = true ;
}
} ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
Container . prototype . close = function ( ) {
this . element . classList . remove ( this . classNames . openState ) ;
this . element . setAttribute ( 'aria-expanded' , 'false' ) ;
this . removeActiveDescendant ( ) ;
this . isOpen = false ; // A dropdown flips if it does not have space within the page
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
if ( this . isFlipped ) {
this . element . classList . remove ( this . classNames . flippedState ) ;
this . isFlipped = false ;
2019-10-22 23:20:40 +02:00
}
} ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
Container . prototype . focus = function ( ) {
if ( ! this . isFocussed ) {
this . element . focus ( ) ;
}
} ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
Container . prototype . addFocusState = function ( ) {
this . element . classList . add ( this . classNames . focusState ) ;
} ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
Container . prototype . removeFocusState = function ( ) {
this . element . classList . remove ( this . classNames . focusState ) ;
} ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
Container . prototype . enable = function ( ) {
this . element . classList . remove ( this . classNames . disabledState ) ;
this . element . removeAttribute ( 'aria-disabled' ) ;
2018-02-02 12:08:03 +01:00
2019-12-23 19:22:54 +01:00
if ( this . type === constants _1 . SELECT _ONE _TYPE ) {
this . element . setAttribute ( 'tabindex' , '0' ) ;
}
2017-11-13 20:13:37 +01:00
2019-12-23 19:22:54 +01:00
this . isDisabled = false ;
} ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
Container . prototype . disable = function ( ) {
this . element . classList . add ( this . classNames . disabledState ) ;
this . element . setAttribute ( 'aria-disabled' , 'true' ) ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
if ( this . type === constants _1 . SELECT _ONE _TYPE ) {
this . element . setAttribute ( 'tabindex' , '-1' ) ;
2019-10-22 23:20:40 +02:00
}
2016-08-23 08:24:45 +02:00
2019-12-23 19:22:54 +01:00
this . isDisabled = true ;
2019-10-22 23:20:40 +02:00
} ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
Container . prototype . wrap = function ( element ) {
utils _1 . wrap ( element , this . element ) ;
} ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
Container . prototype . unwrap = function ( element ) {
if ( this . element . parentNode ) {
// Move passed element outside this element
this . element . parentNode . insertBefore ( element , this . element ) ; // Remove this element
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
this . element . parentNode . removeChild ( this . element ) ;
2019-10-22 23:20:40 +02:00
}
} ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
Container . prototype . addLoadingState = function ( ) {
this . element . classList . add ( this . classNames . loadingState ) ;
this . element . setAttribute ( 'aria-busy' , 'true' ) ;
this . isLoading = true ;
} ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
Container . prototype . removeLoadingState = function ( ) {
this . element . classList . remove ( this . classNames . loadingState ) ;
this . element . removeAttribute ( 'aria-busy' ) ;
this . isLoading = false ;
} ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
Container . prototype . _onFocus = function ( ) {
this . isFocussed = true ;
} ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
Container . prototype . _onBlur = function ( ) {
this . isFocussed = false ;
} ;
2018-05-25 15:00:27 +02:00
2019-12-23 19:22:54 +01:00
return Container ;
} ( ) ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
exports . default = Container ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
/***/ } ) ,
/* 21 */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
"use strict" ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
var utils _1 = _ _webpack _require _ _ ( 1 ) ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
var constants _1 = _ _webpack _require _ _ ( 0 ) ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
var Input =
/** @class */
function ( ) {
function Input ( _a ) {
var element = _a . element ,
type = _a . type ,
classNames = _a . classNames ,
preventPaste = _a . preventPaste ;
this . element = element ;
this . type = type ;
this . classNames = classNames ;
this . preventPaste = preventPaste ;
this . isFocussed = this . element . isEqualNode ( document . activeElement ) ;
this . isDisabled = element . disabled ;
this . _onPaste = this . _onPaste . bind ( this ) ;
this . _onInput = this . _onInput . bind ( this ) ;
this . _onFocus = this . _onFocus . bind ( this ) ;
this . _onBlur = this . _onBlur . bind ( this ) ;
}
Object . defineProperty ( Input . prototype , "placeholder" , {
set : function set ( placeholder ) {
this . element . placeholder = placeholder ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( Input . prototype , "value" , {
get : function get ( ) {
return utils _1 . sanitise ( this . element . value ) ;
} ,
set : function set ( value ) {
this . element . value = value ;
} ,
enumerable : true ,
configurable : true
} ) ;
Input . prototype . addEventListeners = function ( ) {
this . element . addEventListener ( 'paste' , this . _onPaste ) ;
this . element . addEventListener ( 'input' , this . _onInput , {
passive : true
} ) ;
this . element . addEventListener ( 'focus' , this . _onFocus , {
passive : true
} ) ;
this . element . addEventListener ( 'blur' , this . _onBlur , {
passive : true
} ) ;
} ;
Input . prototype . removeEventListeners = function ( ) {
this . element . removeEventListener ( 'input' , this . _onInput ) ;
this . element . removeEventListener ( 'paste' , this . _onPaste ) ;
this . element . removeEventListener ( 'focus' , this . _onFocus ) ;
this . element . removeEventListener ( 'blur' , this . _onBlur ) ;
2019-10-22 23:20:40 +02:00
} ;
2019-12-23 19:22:54 +01:00
Input . prototype . enable = function ( ) {
this . element . removeAttribute ( 'disabled' ) ;
this . isDisabled = false ;
} ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
Input . prototype . disable = function ( ) {
this . element . setAttribute ( 'disabled' , '' ) ;
this . isDisabled = true ;
} ;
Input . prototype . focus = function ( ) {
if ( ! this . isFocussed ) {
this . element . focus ( ) ;
2019-10-22 23:20:40 +02:00
}
} ;
2017-11-07 12:59:49 +01:00
2019-12-23 19:22:54 +01:00
Input . prototype . blur = function ( ) {
if ( this . isFocussed ) {
this . element . blur ( ) ;
}
} ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
Input . prototype . clear = function ( setWidth ) {
if ( setWidth === void 0 ) {
setWidth = true ;
}
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
if ( this . element . value ) {
this . element . value = '' ;
}
2017-11-13 20:13:37 +01:00
2019-12-23 19:22:54 +01:00
if ( setWidth ) {
this . setWidth ( ) ;
}
2017-11-13 20:13:37 +01:00
2019-12-23 19:22:54 +01:00
return this ;
} ;
/ * *
* Set the correct input width based on placeholder
* value or input value
* /
2018-02-02 12:08:03 +01:00
2019-12-23 19:22:54 +01:00
Input . prototype . setWidth = function ( ) {
// Resize input to contents or placeholder
var _a = this . element ,
style = _a . style ,
value = _a . value ,
placeholder = _a . placeholder ;
style . minWidth = placeholder . length + 1 + "ch" ;
style . width = value . length + 1 + "ch" ;
} ;
2017-11-13 20:13:37 +01:00
2019-12-23 19:22:54 +01:00
Input . prototype . setActiveDescendant = function ( activeDescendantID ) {
this . element . setAttribute ( 'aria-activedescendant' , activeDescendantID ) ;
2019-10-22 23:20:40 +02:00
} ;
2017-11-13 20:13:37 +01:00
2019-12-23 19:22:54 +01:00
Input . prototype . removeActiveDescendant = function ( ) {
this . element . removeAttribute ( 'aria-activedescendant' ) ;
} ;
2017-11-13 20:13:37 +01:00
2019-12-23 19:22:54 +01:00
Input . prototype . _onInput = function ( ) {
if ( this . type !== constants _1 . SELECT _ONE _TYPE ) {
this . setWidth ( ) ;
}
} ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
Input . prototype . _onPaste = function ( event ) {
if ( this . preventPaste ) {
2019-10-22 23:20:40 +02:00
event . preventDefault ( ) ;
}
} ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
Input . prototype . _onFocus = function ( ) {
this . isFocussed = true ;
2019-10-22 23:20:40 +02:00
} ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
Input . prototype . _onBlur = function ( ) {
this . isFocussed = false ;
} ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
return Input ;
} ( ) ;
2019-10-22 12:25:36 +02:00
2019-12-23 19:22:54 +01:00
exports . default = Input ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
/***/ } ) ,
/* 22 */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
"use strict" ;
2017-11-15 07:51:53 +01:00
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
var constants _1 = _ _webpack _require _ _ ( 0 ) ;
var List =
/** @class */
function ( ) {
function List ( _a ) {
var element = _a . element ;
this . element = element ;
this . scrollPos = this . element . scrollTop ;
this . height = this . element . offsetHeight ;
}
List . prototype . clear = function ( ) {
this . element . innerHTML = '' ;
} ;
List . prototype . append = function ( node ) {
this . element . appendChild ( node ) ;
} ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
List . prototype . getChild = function ( selector ) {
return this . element . querySelector ( selector ) ;
} ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
List . prototype . hasChildren = function ( ) {
return this . element . hasChildNodes ( ) ;
} ;
2019-11-13 16:40:47 +01:00
2019-12-23 19:22:54 +01:00
List . prototype . scrollToTop = function ( ) {
this . element . scrollTop = 0 ;
} ;
2019-11-13 16:40:47 +01:00
2019-12-23 19:22:54 +01:00
List . prototype . scrollToChildElement = function ( element , direction ) {
var _this = this ;
2019-10-22 12:25:36 +02:00
2019-12-23 19:22:54 +01:00
if ( ! element ) {
2019-10-22 23:20:40 +02:00
return ;
}
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
var listHeight = this . element . offsetHeight ; // Scroll position of dropdown
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
var listScrollPosition = this . element . scrollTop + listHeight ;
var elementHeight = element . offsetHeight ; // Distance from bottom of element to top of parent
2019-11-13 16:40:47 +01:00
2019-12-23 19:22:54 +01:00
var elementPos = element . offsetTop + elementHeight ; // Difference between the element and scroll position
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
var destination = direction > 0 ? this . element . scrollTop + elementPos - listScrollPosition : element . offsetTop ;
requestAnimationFrame ( function ( ) {
_this . _animateScroll ( destination , direction ) ;
} ) ;
} ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
List . prototype . _scrollDown = function ( scrollPos , strength , destination ) {
var easing = ( destination - scrollPos ) / strength ;
var distance = easing > 1 ? easing : 1 ;
this . element . scrollTop = scrollPos + distance ;
} ;
2016-08-23 08:24:45 +02:00
2019-12-23 19:22:54 +01:00
List . prototype . _scrollUp = function ( scrollPos , strength , destination ) {
var easing = ( scrollPos - destination ) / strength ;
var distance = easing > 1 ? easing : 1 ;
this . element . scrollTop = scrollPos - distance ;
2019-10-22 23:20:40 +02:00
} ;
2016-08-23 08:24:45 +02:00
2019-12-23 19:22:54 +01:00
List . prototype . _animateScroll = function ( destination , direction ) {
var _this = this ;
2017-08-18 06:01:03 +02:00
2019-12-23 19:22:54 +01:00
var strength = constants _1 . SCROLLING _SPEED ;
var choiceListScrollTop = this . element . scrollTop ;
var continueAnimation = false ;
if ( direction > 0 ) {
this . _scrollDown ( choiceListScrollTop , strength , destination ) ;
if ( choiceListScrollTop < destination ) {
continueAnimation = true ;
2019-10-22 23:20:40 +02:00
}
} else {
2019-12-23 19:22:54 +01:00
this . _scrollUp ( choiceListScrollTop , strength , destination ) ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
if ( choiceListScrollTop > destination ) {
continueAnimation = true ;
2019-10-22 23:20:40 +02:00
}
2019-12-23 19:22:54 +01:00
}
2019-10-22 12:25:36 +02:00
2019-12-23 19:22:54 +01:00
if ( continueAnimation ) {
requestAnimationFrame ( function ( ) {
_this . _animateScroll ( destination , direction ) ;
} ) ;
2019-10-22 23:20:40 +02:00
}
} ;
2019-10-22 12:25:36 +02:00
2019-12-23 19:22:54 +01:00
return List ;
} ( ) ;
2019-10-22 12:25:36 +02:00
2019-12-23 19:22:54 +01:00
exports . default = List ;
2019-10-22 12:25:36 +02:00
2019-12-23 19:22:54 +01:00
/***/ } ) ,
/* 23 */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
2019-10-22 12:25:36 +02:00
2019-12-23 19:22:54 +01:00
"use strict" ;
2019-10-22 12:25:36 +02:00
2019-12-23 19:22:54 +01:00
var _ _extends = this && this . _ _extends || function ( ) {
var _extendStatics = function extendStatics ( d , b ) {
_extendStatics = Object . setPrototypeOf || {
_ _proto _ _ : [ ]
} instanceof Array && function ( d , b ) {
d . _ _proto _ _ = b ;
} || function ( d , b ) {
for ( var p in b ) {
if ( b . hasOwnProperty ( p ) ) d [ p ] = b [ p ] ;
2019-10-22 23:20:40 +02:00
}
2019-12-23 19:22:54 +01:00
} ;
2019-10-22 12:25:36 +02:00
2019-12-23 19:22:54 +01:00
return _extendStatics ( d , b ) ;
} ;
2019-10-22 12:25:36 +02:00
2019-12-23 19:22:54 +01:00
return function ( d , b ) {
_extendStatics ( d , b ) ;
2019-10-22 12:25:36 +02:00
2019-12-23 19:22:54 +01:00
function _ _ ( ) {
this . constructor = d ;
}
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
d . prototype = b === null ? Object . create ( b ) : ( _ _ . prototype = b . prototype , new _ _ ( ) ) ;
} ;
} ( ) ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
var _ _importDefault = this && this . _ _importDefault || function ( mod ) {
return mod && mod . _ _esModule ? mod : {
"default" : mod
} ;
} ;
2019-10-22 12:25:36 +02:00
2019-12-23 19:22:54 +01:00
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
var wrapped _element _1 = _ _importDefault ( _ _webpack _require _ _ ( 5 ) ) ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
var WrappedInput =
/** @class */
function ( _super ) {
_ _extends ( WrappedInput , _super ) ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
function WrappedInput ( _a ) {
var element = _a . element ,
classNames = _a . classNames ,
delimiter = _a . delimiter ;
2019-10-22 12:25:36 +02:00
2019-12-23 19:22:54 +01:00
var _this = _super . call ( this , {
element : element ,
classNames : classNames
} ) || this ;
2019-10-22 12:25:36 +02:00
2019-12-23 19:22:54 +01:00
_this . delimiter = delimiter ;
return _this ;
}
2019-10-22 12:25:36 +02:00
2019-12-23 19:22:54 +01:00
Object . defineProperty ( WrappedInput . prototype , "value" , {
get : function get ( ) {
return this . element . value ;
} ,
set : function set ( value ) {
this . element . setAttribute ( 'value' , value ) ;
this . element . value = value ;
} ,
enumerable : true ,
configurable : true
} ) ;
return WrappedInput ;
} ( wrapped _element _1 . default ) ;
2019-10-22 12:25:36 +02:00
2019-12-23 19:22:54 +01:00
exports . default = WrappedInput ;
2017-09-18 17:46:48 +02:00
2019-12-23 19:22:54 +01:00
/***/ } ) ,
/* 24 */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
2017-09-18 17:46:48 +02:00
2019-12-23 19:22:54 +01:00
"use strict" ;
2017-09-18 17:46:48 +02:00
2019-12-23 19:22:54 +01:00
var _ _extends = this && this . _ _extends || function ( ) {
var _extendStatics = function extendStatics ( d , b ) {
_extendStatics = Object . setPrototypeOf || {
_ _proto _ _ : [ ]
} instanceof Array && function ( d , b ) {
d . _ _proto _ _ = b ;
} || function ( d , b ) {
for ( var p in b ) {
if ( b . hasOwnProperty ( p ) ) d [ p ] = b [ p ] ;
2019-10-22 23:20:40 +02:00
}
2019-12-23 19:22:54 +01:00
} ;
2017-09-18 17:46:48 +02:00
2019-12-23 19:22:54 +01:00
return _extendStatics ( d , b ) ;
} ;
2017-09-18 17:46:48 +02:00
2019-12-23 19:22:54 +01:00
return function ( d , b ) {
_extendStatics ( d , b ) ;
2017-09-18 17:46:48 +02:00
2019-12-23 19:22:54 +01:00
function _ _ ( ) {
this . constructor = d ;
2019-10-22 23:20:40 +02:00
}
2019-12-23 19:22:54 +01:00
d . prototype = b === null ? Object . create ( b ) : ( _ _ . prototype = b . prototype , new _ _ ( ) ) ;
2019-10-22 23:20:40 +02:00
} ;
2019-12-23 19:22:54 +01:00
} ( ) ;
2017-09-18 17:46:48 +02:00
2019-12-23 19:22:54 +01:00
var _ _importDefault = this && this . _ _importDefault || function ( mod ) {
return mod && mod . _ _esModule ? mod : {
"default" : mod
} ;
} ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
var wrapped _element _1 = _ _importDefault ( _ _webpack _require _ _ ( 5 ) ) ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
var WrappedSelect =
/** @class */
function ( _super ) {
_ _extends ( WrappedSelect , _super ) ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
function WrappedSelect ( _a ) {
var element = _a . element ,
classNames = _a . classNames ,
template = _a . template ;
2017-09-18 17:46:48 +02:00
2019-12-23 19:22:54 +01:00
var _this = _super . call ( this , {
element : element ,
classNames : classNames
} ) || this ;
2017-09-18 17:46:48 +02:00
2019-12-23 19:22:54 +01:00
_this . template = template ;
return _this ;
}
2017-09-18 17:46:48 +02:00
2019-12-23 19:22:54 +01:00
Object . defineProperty ( WrappedSelect . prototype , "placeholderOption" , {
get : function get ( ) {
return this . element . querySelector ( 'option[value=""]' ) || // Backward compatibility layer for the non-standard placeholder attribute supported in older versions.
this . element . querySelector ( 'option[placeholder]' ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( WrappedSelect . prototype , "optionGroups" , {
get : function get ( ) {
return Array . from ( this . element . getElementsByTagName ( 'OPTGROUP' ) ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
Object . defineProperty ( WrappedSelect . prototype , "options" , {
get : function get ( ) {
return Array . from ( this . element . options ) ;
} ,
set : function set ( options ) {
var _this = this ;
var fragment = document . createDocumentFragment ( ) ;
var addOptionToFragment = function addOptionToFragment ( data ) {
// Create a standard select option
var option = _this . template ( data ) ; // Append it to fragment
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
fragment . appendChild ( option ) ;
} ; // Add each list item to list
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
options . forEach ( function ( optionData ) {
return addOptionToFragment ( optionData ) ;
2019-10-22 23:20:40 +02:00
} ) ;
2019-12-23 19:22:54 +01:00
this . appendDocFragment ( fragment ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
WrappedSelect . prototype . appendDocFragment = function ( fragment ) {
this . element . innerHTML = '' ;
this . element . appendChild ( fragment ) ;
2017-11-15 07:51:53 +01:00
} ;
2019-12-23 19:22:54 +01:00
return WrappedSelect ;
} ( wrapped _element _1 . default ) ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
exports . default = WrappedSelect ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
/***/ } ) ,
/* 25 */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
"use strict" ;
2019-02-09 19:13:25 +01:00
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
/ * *
* Helpers to create HTML elements used by Choices
* Can be overridden by providing ` callbackOnCreateTemplates ` option
* /
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
var templates = {
containerOuter : function containerOuter ( _a , dir , isSelectElement , isSelectOneElement , searchEnabled , passedElementType ) {
var containerOuter = _a . containerOuter ;
var div = Object . assign ( document . createElement ( 'div' ) , {
className : containerOuter
} ) ;
div . dataset . type = passedElementType ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
if ( dir ) {
div . dir = dir ;
}
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
if ( isSelectOneElement ) {
div . tabIndex = 0 ;
}
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
if ( isSelectElement ) {
div . setAttribute ( 'role' , searchEnabled ? 'combobox' : 'listbox' ) ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( searchEnabled ) {
div . setAttribute ( 'aria-autocomplete' , 'list' ) ;
}
2019-10-22 23:20:40 +02:00
}
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
div . setAttribute ( 'aria-haspopup' , 'true' ) ;
div . setAttribute ( 'aria-expanded' , 'false' ) ;
return div ;
} ,
containerInner : function containerInner ( _a ) {
var containerInner = _a . containerInner ;
return Object . assign ( document . createElement ( 'div' ) , {
className : containerInner
} ) ;
} ,
itemList : function itemList ( _a , isSelectOneElement ) {
var list = _a . list ,
listSingle = _a . listSingle ,
listItems = _a . listItems ;
return Object . assign ( document . createElement ( 'div' ) , {
className : list + " " + ( isSelectOneElement ? listSingle : listItems )
} ) ;
} ,
placeholder : function placeholder ( _a , value ) {
var placeholder = _a . placeholder ;
return Object . assign ( document . createElement ( 'div' ) , {
className : placeholder ,
innerHTML : value
} ) ;
} ,
item : function item ( _a , _b , removeItemButton ) {
var item = _a . item ,
button = _a . button ,
highlightedState = _a . highlightedState ,
itemSelectable = _a . itemSelectable ,
placeholder = _a . placeholder ;
var id = _b . id ,
value = _b . value ,
label = _b . label ,
customProperties = _b . customProperties ,
active = _b . active ,
disabled = _b . disabled ,
highlighted = _b . highlighted ,
isPlaceholder = _b . placeholder ;
var div = Object . assign ( document . createElement ( 'div' ) , {
className : item ,
innerHTML : label
} ) ;
Object . assign ( div . dataset , {
item : '' ,
id : id ,
value : value ,
customProperties : customProperties
} ) ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( active ) {
div . setAttribute ( 'aria-selected' , 'true' ) ;
2019-10-22 23:20:40 +02:00
}
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
if ( disabled ) {
div . setAttribute ( 'aria-disabled' , 'true' ) ;
}
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( isPlaceholder ) {
div . classList . add ( placeholder ) ;
2019-10-22 23:20:40 +02:00
}
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
div . classList . add ( highlighted ? highlightedState : itemSelectable ) ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
if ( removeItemButton ) {
if ( disabled ) {
div . classList . remove ( itemSelectable ) ;
}
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
div . dataset . deletable = '' ;
/** @todo This MUST be localizable, not hardcoded! */
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
var REMOVE _ITEM _TEXT = 'Remove item' ;
var removeButton = Object . assign ( document . createElement ( 'button' ) , {
type : 'button' ,
className : button ,
innerHTML : REMOVE _ITEM _TEXT
} ) ;
removeButton . setAttribute ( 'aria-label' , REMOVE _ITEM _TEXT + ": '" + value + "'" ) ;
removeButton . dataset . button = '' ;
div . appendChild ( removeButton ) ;
}
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
return div ;
} ,
choiceList : function choiceList ( _a , isSelectOneElement ) {
var list = _a . list ;
var div = Object . assign ( document . createElement ( 'div' ) , {
className : list
2019-10-22 23:20:40 +02:00
} ) ;
2019-12-23 19:22:54 +01:00
if ( ! isSelectOneElement ) {
div . setAttribute ( 'aria-multiselectable' , 'true' ) ;
}
div . setAttribute ( 'role' , 'listbox' ) ;
return div ;
} ,
choiceGroup : function choiceGroup ( _a , _b ) {
var group = _a . group ,
groupHeading = _a . groupHeading ,
itemDisabled = _a . itemDisabled ;
var id = _b . id ,
value = _b . value ,
disabled = _b . disabled ;
var div = Object . assign ( document . createElement ( 'div' ) , {
className : group + " " + ( disabled ? itemDisabled : '' )
2019-10-22 23:20:40 +02:00
} ) ;
2019-12-23 19:22:54 +01:00
div . setAttribute ( 'role' , 'group' ) ;
Object . assign ( div . dataset , {
group : '' ,
id : id ,
value : value
2019-10-22 23:20:40 +02:00
} ) ;
2019-12-23 19:22:54 +01:00
if ( disabled ) {
div . setAttribute ( 'aria-disabled' , 'true' ) ;
}
div . appendChild ( Object . assign ( document . createElement ( 'div' ) , {
className : groupHeading ,
innerHTML : value
} ) ) ;
return div ;
} ,
choice : function choice ( _a , _b , selectText ) {
var item = _a . item ,
itemChoice = _a . itemChoice ,
itemSelectable = _a . itemSelectable ,
selectedState = _a . selectedState ,
itemDisabled = _a . itemDisabled ,
placeholder = _a . placeholder ;
var id = _b . id ,
value = _b . value ,
label = _b . label ,
groupId = _b . groupId ,
elementId = _b . elementId ,
isDisabled = _b . disabled ,
isSelected = _b . selected ,
isPlaceholder = _b . placeholder ;
var div = Object . assign ( document . createElement ( 'div' ) , {
id : elementId ,
innerHTML : label ,
className : item + " " + itemChoice
2019-10-22 23:20:40 +02:00
} ) ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
if ( isSelected ) {
div . classList . add ( selectedState ) ;
}
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( isPlaceholder ) {
div . classList . add ( placeholder ) ;
}
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
div . setAttribute ( 'role' , groupId && groupId > 0 ? 'treeitem' : 'option' ) ;
Object . assign ( div . dataset , {
choice : '' ,
id : id ,
value : value ,
selectText : selectText
} ) ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
if ( isDisabled ) {
div . classList . add ( itemDisabled ) ;
div . dataset . choiceDisabled = '' ;
div . setAttribute ( 'aria-disabled' , 'true' ) ;
} else {
div . classList . add ( itemSelectable ) ;
div . dataset . choiceSelectable = '' ;
2019-10-22 23:20:40 +02:00
}
2019-12-23 19:22:54 +01:00
return div ;
} ,
input : function input ( _a , placeholderValue ) {
var input = _a . input ,
inputCloned = _a . inputCloned ;
var inp = Object . assign ( document . createElement ( 'input' ) , {
type : 'text' ,
className : input + " " + inputCloned ,
autocomplete : 'off' ,
autocapitalize : 'off' ,
spellcheck : false
} ) ;
inp . setAttribute ( 'role' , 'textbox' ) ;
inp . setAttribute ( 'aria-autocomplete' , 'list' ) ;
inp . setAttribute ( 'aria-label' , placeholderValue ) ;
return inp ;
} ,
dropdown : function dropdown ( _a ) {
var list = _a . list ,
listDropdown = _a . listDropdown ;
var div = document . createElement ( 'div' ) ;
div . classList . add ( list , listDropdown ) ;
div . setAttribute ( 'aria-expanded' , 'false' ) ;
return div ;
} ,
notice : function notice ( _a , innerHTML , type ) {
var item = _a . item ,
itemChoice = _a . itemChoice ,
noResults = _a . noResults ,
noChoices = _a . noChoices ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
if ( type === void 0 ) {
type = '' ;
2019-10-22 23:20:40 +02:00
}
2019-12-23 19:22:54 +01:00
var classes = [ item , itemChoice ] ;
if ( type === 'no-choices' ) {
classes . push ( noChoices ) ;
} else if ( type === 'no-results' ) {
classes . push ( noResults ) ;
2019-10-22 23:20:40 +02:00
}
2019-12-23 19:22:54 +01:00
return Object . assign ( document . createElement ( 'div' ) , {
innerHTML : innerHTML ,
className : classes . join ( ' ' )
} ) ;
} ,
option : function option ( _a ) {
var label = _a . label ,
value = _a . value ,
customProperties = _a . customProperties ,
active = _a . active ,
disabled = _a . disabled ;
var opt = new Option ( label , value , false , active ) ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
if ( customProperties ) {
opt . dataset . customProperties = "" + customProperties ;
}
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
opt . disabled = ! ! disabled ;
return opt ;
}
} ;
exports . default = templates ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
/***/ } ) ,
/* 26 */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
"use strict" ;
2017-11-15 07:51:53 +01:00
2019-10-29 22:19:56 +01:00
2019-12-23 19:22:54 +01:00
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
2017-11-15 07:51:53 +01:00
2019-12-23 19:22:54 +01:00
var constants _1 = _ _webpack _require _ _ ( 0 ) ;
exports . addChoice = function ( _a ) {
var value = _a . value ,
label = _a . label ,
id = _a . id ,
groupId = _a . groupId ,
disabled = _a . disabled ,
elementId = _a . elementId ,
customProperties = _a . customProperties ,
placeholder = _a . placeholder ,
keyCode = _a . keyCode ;
return {
type : constants _1 . ACTION _TYPES . ADD _CHOICE ,
value : value ,
label : label ,
id : id ,
groupId : groupId ,
disabled : disabled ,
elementId : elementId ,
customProperties : customProperties ,
placeholder : placeholder ,
keyCode : keyCode
} ;
} ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
exports . filterChoices = function ( results ) {
return {
type : constants _1 . ACTION _TYPES . FILTER _CHOICES ,
results : results
2019-11-03 18:45:16 +01:00
} ;
2019-12-23 19:22:54 +01:00
} ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
exports . activateChoices = function ( active ) {
if ( active === void 0 ) {
active = true ;
}
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
return {
type : constants _1 . ACTION _TYPES . ACTIVATE _CHOICES ,
active : active
} ;
} ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
exports . clearChoices = function ( ) {
return {
type : constants _1 . ACTION _TYPES . CLEAR _CHOICES
} ;
} ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
/***/ } ) ,
/* 27 */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
"use strict" ;
2019-02-09 19:13:25 +01:00
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
var constants _1 = _ _webpack _require _ _ ( 0 ) ;
exports . addItem = function ( _a ) {
var value = _a . value ,
label = _a . label ,
id = _a . id ,
choiceId = _a . choiceId ,
groupId = _a . groupId ,
customProperties = _a . customProperties ,
placeholder = _a . placeholder ,
keyCode = _a . keyCode ;
return {
type : constants _1 . ACTION _TYPES . ADD _ITEM ,
value : value ,
label : label ,
id : id ,
choiceId : choiceId ,
groupId : groupId ,
customProperties : customProperties ,
placeholder : placeholder ,
keyCode : keyCode
2018-05-28 17:22:22 +02:00
} ;
2019-12-23 19:22:54 +01:00
} ;
2018-05-28 17:22:22 +02:00
2019-12-23 19:22:54 +01:00
exports . removeItem = function ( id , choiceId ) {
return {
type : constants _1 . ACTION _TYPES . REMOVE _ITEM ,
id : id ,
choiceId : choiceId
} ;
} ;
2019-02-09 19:13:25 +01:00
2019-12-23 19:22:54 +01:00
exports . highlightItem = function ( id , highlighted ) {
return {
type : constants _1 . ACTION _TYPES . HIGHLIGHT _ITEM ,
id : id ,
highlighted : highlighted
} ;
} ;
2019-01-26 13:36:47 +01:00
2019-12-23 19:22:54 +01:00
/***/ } ) ,
/* 28 */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
2019-01-26 13:36:47 +01:00
2019-12-23 19:22:54 +01:00
"use strict" ;
2019-10-22 23:20:40 +02:00
2019-01-26 13:36:47 +01:00
2019-12-23 19:22:54 +01:00
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
2019-01-26 13:36:47 +01:00
2019-12-23 19:22:54 +01:00
var constants _1 = _ _webpack _require _ _ ( 0 ) ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
exports . addGroup = function ( _a ) {
var value = _a . value ,
id = _a . id ,
active = _a . active ,
disabled = _a . disabled ;
return {
type : constants _1 . ACTION _TYPES . ADD _GROUP ,
value : value ,
id : id ,
active : active ,
disabled : disabled
2019-01-26 13:36:47 +01:00
} ;
2019-12-23 19:22:54 +01:00
} ;
2019-01-26 13:36:47 +01:00
2019-12-23 19:22:54 +01:00
/***/ } ) ,
/* 29 */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
"use strict" ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
2019-11-03 18:45:16 +01:00
2019-12-23 19:22:54 +01:00
var constants _1 = _ _webpack _require _ _ ( 0 ) ;
exports . clearAll = function ( ) {
return {
type : constants _1 . ACTION _TYPES . CLEAR _ALL
2019-11-03 18:45:16 +01:00
} ;
2019-12-23 19:22:54 +01:00
} ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
exports . resetTo = function ( state ) {
return {
type : constants _1 . ACTION _TYPES . RESET _TO ,
state : state
} ;
} ;
2019-10-22 23:20:40 +02:00
2019-12-23 19:22:54 +01:00
exports . setIsLoading = function ( isLoading ) {
return {
type : constants _1 . ACTION _TYPES . SET _IS _LOADING ,
isLoading : isLoading
} ;
} ;
2019-02-09 19:13:25 +01:00
2017-05-18 18:57:35 +02:00
/***/ } )
2019-10-22 23:20:40 +02:00
/******/ ] ) [ "default" ] ;
2019-02-09 19:13:25 +01:00
} ) ;