From ff8dec597cfb1cfb6ce2db0343841356ca5c065f Mon Sep 17 00:00:00 2001 From: Josh Johnson Date: Fri, 25 May 2018 14:00:27 +0100 Subject: [PATCH] Move public assets into public foldeR --- assets/images/android-chrome-192x192.png | Bin 0 -> 6751 bytes assets/images/apple-touch-icon.png | Bin 0 -> 1739 bytes assets/images/browserconfig.xml | 9 + assets/images/favicon-16x16.png | Bin 0 -> 574 bytes assets/images/favicon-32x32.png | Bin 0 -> 887 bytes assets/images/favicon.ico | Bin 0 -> 15086 bytes assets/images/favicon.png | Bin 0 -> 6153 bytes assets/images/logo.svg | 10 + assets/images/manifest.json | 12 + assets/images/mstile-150x150.png | Bin 0 -> 3067 bytes assets/images/safari-pinned-tab.svg | 28 + assets/scripts/choices.js | 7843 ++++++++++++++++++++++ assets/scripts/choices.js.map | 1 + assets/scripts/choices.min.js | 2 + assets/styles/base.css | 156 + assets/styles/choices.css | 357 + index.html | 540 ++ 17 files changed, 8958 insertions(+) create mode 100644 assets/images/android-chrome-192x192.png create mode 100644 assets/images/apple-touch-icon.png create mode 100644 assets/images/browserconfig.xml create mode 100644 assets/images/favicon-16x16.png create mode 100644 assets/images/favicon-32x32.png create mode 100644 assets/images/favicon.ico create mode 100644 assets/images/favicon.png create mode 100644 assets/images/logo.svg create mode 100644 assets/images/manifest.json create mode 100644 assets/images/mstile-150x150.png create mode 100644 assets/images/safari-pinned-tab.svg create mode 100644 assets/scripts/choices.js create mode 100644 assets/scripts/choices.js.map create mode 100644 assets/scripts/choices.min.js create mode 100644 assets/styles/base.css create mode 100644 assets/styles/choices.css create mode 100644 index.html diff --git a/assets/images/android-chrome-192x192.png b/assets/images/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..5ee80a7ac9547f63cc5ec5fb5cef08ddc8db2b1b GIT binary patch literal 6751 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 BDO~^n literal 0 HcmV?d00001 diff --git a/assets/images/apple-touch-icon.png b/assets/images/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a6c4f84a342c74c584ce8aea80826600bf36438a GIT binary patch literal 1739 zcmZ{jX;2e(8pi*UatKtE!%(gUSrKq{0=q(DFn3TBIopin{xf`S+jtSExJQwjmA z)gp%?@u+JHRdKE16oMdU0tpETA%r9(0!bhVZhxd8rd1sz^KfLp+JRT4K z)ZD=w0PtySOk|?L+y5Lhh(XP5HVg_r$vTWU48V(83vIfwA;U6a5)lAg{wn}wHvmu@ zR%Jo}3Vi@rN&_IM4ghF=BOxIKfGs1(k0PTsH#fEVO{GpRQfucG>PeaMon*ajN!rL4 zSI)0s8A8-FA33=YH9j9O%-T1^-2I;6Oq|)-N4M&wnfFYac2kYJs776sEu9pdese>o zpW9H6NfiW<3@?yWb5;tO!qZeiY_sQXQ;gB@p+#QvoPX}^*fqbHx<%Feg1LHsefi$@AM~K)B=X!IGMAe*7|;! zrOA~J{q#VYIg2V|Mo!c|WbRA$=_Dq{}Q$t7R zj*>X1DBK+S;;jYIBf;vM71{9G#>~1(pwdK)v6H5_c{74;v3ydd;43xm@0lqS-nX+K z8~9?XTxs7&-#;{~(&-)hXJ$84y^{3@i;|#`xgEWX^|6tMk;M!VQx))Ig45s{ znQrqkM0R}7sL#fb2P(FH$meBV|Il4~&$ueDJ>M2BP2d{Gvx7ZL57F*T33SlTtHtPU z#al&~2_&Q1_r3jpiH0rxGE2TLvof7pC$ZkA3X&3zkC@Ukr{6aDDv<0n5KW?OdLIg@X`JYmOUn|C}jN%b(& zCqJ~lID9Taes1>!JmG~0;rAG0!Xu<@YI2KF>C>aOsYOY~gcNAhGT)P=h#dQRIn;Qu zt~edrSx(0E?62<58^rG&?ZaF&c1cx*+v}RGYg@m!j)wn@L#~XH_7jb{z1^P@hChCv^(PNviw3@EpcL#<_@ zmk7M5e?ge8EQLLVJBhA;E_940lHKxOxyCp--+)_vcgD1QVrNA<^0LjtT-(}>s_oJ6 zkOBOIP-yg_YyX5ZA0M+$HE%tquHK3tL|#$(c~`q6r5!vfY(bYs7!#s4zUVdSvBXk% z776mISUVx*rxxK)&pb(OsJ1KE&cy3GPYd>(P0y#K9TV<72-+>Lrq)aUu*fqNup6oH=6DT> zr>P!z9CoZ|K{|Z)7W0WtDXjBv2+l6d{L+^>^`^aU?P|eL&9xpie!6k_y_I8w{#1>q ziPiN>y{@A6L72-54J8tZbA$h_4G0Lcr#0ndjiLSrI5Kq@#Oh{YnPlEpVgPqHHtHl6 zm5$8}$|%S*81VD)J?P~V=;iB=^bHL13kdS_-|OQSp0Bwa?H#3rU+g5?+Fp|f){Vc3%VOjve4HUog-My}M-?84U`9>d2*Mq~Mj0ODrh zonc|)W)pYY7GeX7Ec5S2LEK&;VIy?P5OI{~L^K^Ki)lXM4VIugu+oSx?ifyh*r@o( J)`+z7KLEQNkWc^s literal 0 HcmV?d00001 diff --git a/assets/images/browserconfig.xml b/assets/images/browserconfig.xml new file mode 100644 index 00000000..011a5dd9 --- /dev/null +++ b/assets/images/browserconfig.xml @@ -0,0 +1,9 @@ + + + + + + #ffffff + + + diff --git a/assets/images/favicon-16x16.png b/assets/images/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..8a14f87d78b6847b282a969ebac14f78ae5d2874 GIT binary patch literal 574 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>$qswaksN_uEeD?k;&(C>oKxK?c-tI0k zb66bNfgJV{PhVH|2ONAt(vmk0%$x!git==E43W5;dcsqvK|z4!VB5sd7zf9L|NmcJ zEqiUPP(YMg^4!g7LTefR2go%lI!LfgR7^^nF;PNDrulbsYQzSkH8&*8-tbr(IlEcz zs~4HGHMU&-SWjL2+IjkCHN~T{E~%sgZBZ?8jVMV;EJ?LWE=mPb3`PcqX1WFzx`rkp zh89*v=2k|g+6G2e1_o2b-v2?-kei>9nO2Eg!xQgt2cU-Vs*s41pu}>8f};Gi%$!t( zlFEWqh0KDIWCn(cIgdZ_a1@4VXq@stea7=?5CgL^w_Y;0u(GiCWD#az1(ybs!zs+l tn?n>%-?(z($eANDN7zp{cr5VJV|XPlSn|oqbSlsa22WQ%mvv4FO#l+d&PV_N literal 0 HcmV?d00001 diff --git a/assets/images/favicon-32x32.png b/assets/images/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..7c4a93a67ad495eef1876f6a70a6f3833f089981 GIT binary patch literal 887 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10;&y;fh%3Y1t3W2h-YX1y zh(GyKmVATZ#?_-i~k6}@?G0^Q9q|`Jbv@zkKbP(T|Tg)C+}~7@k_2A!*4Q2WCzI3O)98 zaSX9I-FnGgsL6rB<)T~2g}}6sGfC$pH#bE-_-Fo!A#7{??fjb#KK<&G+Gcun`&^sk z<*7Ye@a2?D72!f#wkMxhcSi(W^j{USh5M(>si_?yD;I^OFNkwKoOmE}!Of%vS6dcJ z1hCx_T-(dXE?Z*xV$pF&elvEnUou||A0#lGY;1Yt@R!}0uT7%Rpy_a9vmtx3kHw6H zQwK$i`O;<-8yrtM`Ryr_b~j^o>(mc$R0`{(ule*3C=y73nMNxe)AlS+~VfZkOtag8WRNi0dVN-jzT zQVd20hGx137P^KeA%+%KM&?#VrrHKZRt5%B#oqrx(U6;;l9^VCTf-CYa0j4<@T!oA zlAy$Lg@U5|w9K4Tg_6pGRE5lfl4J&kiaC!z@o*G|X=t4CKYhmYX%GXmGPhnbx3IFX z_hb=fVFi~4lfx;@%9}$JPT#n4;>ejJGDp}?H+U@Y(qnifE?Dx($#g2v3I~swaaYVNRF^5&2LC z&4XZM7<8egm&_TCG+n3+qM4%==@d~JWmnBh&h+~^XAOsg#@X%@>#PmGS^M&R-~Yew zXRo~{gq|=z^z{YWO4zj`gn-_;ZouPj{>-~ugy~lfi-nVD$U++0y`{VZ4`}-Mhf4xs; z?0*99J}<=mkz1?xpECBZ_un)2uXmrzayxFKU%lt_+!cMtR_{6fc8LD<-c9`s(O0{z z-v5Disx^26*>qqZ7K6}OW)B6t@Z-2dim9c-lf10s>y^m$=U+=z4 zi04CYt=^x_*uUN%g&coF=vnV~Lyq@gJ?s4@_!DwF_VujyKFIMNrsqETaF@~UhupUR ze!cS!;1ay=&Cvf|z4MNEKHhg`=znK@lo$I9c;B3%|IK=Lz`O6ab36Xm&$>V3e>MJ( zWwZ`@UESn=1=IG$<+2a-%2zA11LyGqrU$|AK!#u#-UPoJ`4WDFKfrt5|M^?P+G?n! zrrLVY%P{CokAr%S{#)AvW1+|8yj#7L*j~5>*1#R`5IhYp!rSl>9DwiOXYjsw0_+>m zk2vl;mlm{&9ZEZgz8^LyFmjP$bY{Z6X_gE04<7T z;WZco-;Ym%&!`6*IPN@`8Dp$D=32vA)?B8BTG2}t3X?gWob--Eph??N5ypYeZ8e0K5PWnFRHc`h@? zSaZy^hPA9|Z8esvskYrTHF^}PbQ83~;*Jc}v($DTeM3X`Q`jw0fw_JP{@1K^!1Hpr zAD)2`*awHeZ|z)faol+>GsakR%-slXr=rKNIp)4}9=TD=-1kc4n_K1_HMh()#@sU3 zNPp*eoW|`@w2jAk(YzRMzUN<@F4~&=TZw#g?VB#D8{^HjPc}{$ZOwh9M83IOO5~e6 p09)a8(9aZj&U#$M{p+~%TxN{1TVbF^pJ#Qh*Rb{K@ZZzs{R_iA#isxO literal 0 HcmV?d00001 diff --git a/assets/images/favicon.png b/assets/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..bfc463c14c6a219129bf172f0712d45001162d0d GIT binary patch literal 6153 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 T7W-lFZ6858Vs7-zfI|BZkHLv@ literal 0 HcmV?d00001 diff --git a/assets/images/logo.svg b/assets/images/logo.svg new file mode 100644 index 00000000..acfca7cd --- /dev/null +++ b/assets/images/logo.svg @@ -0,0 +1,10 @@ + + + + Slice 1 + Created with Sketch. + + + + + \ No newline at end of file diff --git a/assets/images/manifest.json b/assets/images/manifest.json new file mode 100644 index 00000000..572d844f --- /dev/null +++ b/assets/images/manifest.json @@ -0,0 +1,12 @@ +{ + "name": "Choices.js", + "icons": [ + { + "src": "\/assets\/images\/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image\/png" + } + ], + "theme_color": "#ffffff", + "display": "standalone" +} diff --git a/assets/images/mstile-150x150.png b/assets/images/mstile-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..9e7cf45cca13cdf0a2f76490f1484b42887061cb GIT binary patch literal 3067 zcmb_ec{r478-E#DvTuWo$y%8thL{w|(pbXbn1(bm*3yV!XpCr-gwaTd$&!*KRF=Xa zne5?EMrA!TB)cpJq2qgpuIu~0^IhM6=X&4wdY@T)x;oW<70{|dw zX<_C709+!RkDnK$kW0Vkf&-7wNt=@ZP?{jPiQfgT6+J8*Yyg0=4*;l90I&{{s1pDX ztOWp5ZUA7A1^_Yv8P)d3K?bk8HQEf=;yl^4`AHy!k7Q|M&Nsp@A|Wr=%VZ=2!0rr7 zvy+bG{@Ed%ztks%mWBDgKOy7z+uB_5OYiQyP_oiIh$(!esunI;J8eCUJ8y2$O|!yK z7|{L#RV7p!)n=2rmsyi9;{#(M7LQ625)7AqSmfXYRR8LjU;EnE$H3iDwY>Y!y$hE(E!j4V#Z9xgv zQQxSot30pwmzlW<*YAnMQ1F?pIuWZOg!L02f}t(=jTxFzgVw1rsYJOE?nXf#Z>4jQ zD72?Yl~6|smLIZ0=cQWBp4IrryMo!t4vt-1n!0x&(3(!R4EPp*5lKd8%_2uubThBq!@f(XHMIQ61$yX!GoJ$RW-|?ai0nam{xXyO0&8K zU5`@RcIKuAoze-x-Ul_$A=O=^%TQB{{X>p{@|9$T!F*FBy*bHT-&N|Hb>srMsPAUtH@iq55ZF>Ks;F z(@|!U&+HM`ZIt?n@`pbF{jxLkCVTf6 zI#lw*No`Uu`)2aXKn=P?BG(@wL%Ue;vT+xTn6AOHpn_DbRXG%fMvKhz8sl zT8e5r$K4G2;nwB&Uz0neh?Q4cLII+Uw6g)ARs2zOES*8RP zXjEeuyT7A)>}twyD|q6V5c=0OTqzD&fc#{nLC=u2^B|JmX1AT&07aGIL{j_DIrqQk zi+OK`jTMkLD`h;LVWH*Z4;ND76Sv{TWcY->;Z6GKx@`rEyiPD&cT3P&XDHfMh{ahv z-;ujOBw7EIIZl{`>vWZ%7B?mG=CqfDXewRiJ%-*{;NC)|@vG!F=cAhvzaIKH6jV6L zML+hR?B0GuD4N4np4w4y&TMGZ-kU>t`~Igcm#LbT4jm2p@m2fPw9x2d2fE}3t9K|e z+Z0gPhyxGc`|^DtKdj?;1G{ypJ#Po~%AN(8Xk~r*Ni#uq{35(9hgh#aRK$9SuFS#fSvUxkCyP6! z7PHm9a$Yk`R79(aTMbwM6BR|AY?X>FTI;luNecqY)olH=$aA<~ zoiqiC7NF%=`0rYKIH^vWh)`VF+{LL5@%3pjxSnCOhzmJwr<@+?M^(LBmNg&{mAsz9 zXgQ5x{-?NyIU>#@E`NlvMDsM=h{@%s{;qgIXIQQ~8HlhorTIzJ4!%lmvPXR5AHM5X zE^YFS{oDjB{cmEloZrt}{aTy>@}gVFVd3eAFmgrICi_DDe%{v?DMAYO{R`tU;8uc1 zGkut!zz%4-6r93o4lj8UP-oi-(_k-jX4)|?=LkDga5|E>6Yvr2Kzx^x0RT@ z!Z+-KOILkwiy7@#2qui`zsfXIaR>qbYDY(Zb?w3adVxZfoE$%)DaPP)<&Cf$6OO3^ zTz8FA%bDug!^;H<`aBgDpN0qd<|Nkk)L)|>jtt|0RxNY}vTkJQLR(I*wa+pGNOATs zpxn&$<{ILOMMz~4Q}>BuUcm6)WQ%o+mf&to?J(Ds)rx>rCeAI^)hTy)fc;}SLUBPb zZ~y6$nA$4S7F1wnz*CP zxdnNkEa~i88zahq%a~|l)BDHil^czpQA(%98EVb6D3svm+`@Aql{99kn=#^^4pVh9 z_m_mER1eimAKAN|M~*8=Hy|eEm*9zWf@f8u%wt4j@v&lXaVOYt?8Jj0%X9eXzB}`VbPm+%4XLu6c z>ms^Ur^yaVsOdt_NHh7#rwow2`)WyKlj>9MIh4Pm#6HFlwF(A<2`y#rFb!bnn + + + +Created by potrace 1.11, written by Peter Selinger 2001-2013 + + + + + diff --git a/assets/scripts/choices.js b/assets/scripts/choices.js new file mode 100644 index 00000000..b7112e73 --- /dev/null +++ b/assets/scripts/choices.js @@ -0,0 +1,7843 @@ +/*! choices.js v3.0.2 | (c) 2018 Josh Johnson | https://github.com/jshjohnson/Choices#readme */ +(function webpackUniversalModuleDefinition(root, factory) { + //CommonJS2 + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + //AMD + else if(typeof define === 'function' && define.amd) + define([], factory); + //CommonJS + else if(typeof exports === 'object') + exports["Choices"] = factory(); + //Window + else + root["Choices"] = factory(); +})(typeof self !== 'undefined' ? self : this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // 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); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = "/public/assets/scripts/"; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 34); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + +var store = __webpack_require__(26)('wks'); +var uid = __webpack_require__(14); +var Symbol = __webpack_require__(2).Symbol; +var USE_SYMBOL = typeof Symbol == 'function'; + +var $exports = module.exports = function (name) { + return store[name] || (store[name] = + USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name)); +}; + +$exports.store = store; + + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +/* eslint-disable */ + +/** + * Generates a string of random chars + * @param {Number} length Length of the string to generate + * @return {String} String of random chars + */ +var generateChars = exports.generateChars = function generateChars(length) { + var chars = ''; + + for (var i = 0; i < length; i++) { + var randomChar = getRandomNumber(0, 36); + chars += randomChar.toString(36); + } + + return chars; +}; + +/** + * Generates a unique id based on an element + * @param {HTMLElement} element Element to generate the id from + * @param {String} Prefix for the Id + * @return {String} Unique Id + */ +var generateId = exports.generateId = function generateId(element, prefix) { + var id = element.id || element.name && element.name + '-' + generateChars(2) || generateChars(4); + id = id.replace(/(:|\.|\[|\]|,)/g, ''); + id = prefix + id; + + return id; +}; + +/** + * Tests the type of an object + * @param {String} type Type to test object against + * @param {Object} obj Object to be tested + * @return {Boolean} + */ +var getType = exports.getType = function getType(obj) { + return Object.prototype.toString.call(obj).slice(8, -1); +}; + +/** + * Tests the type of an object + * @param {String} type Type to test object against + * @param {Object} obj Object to be tested + * @return {Boolean} + */ +var isType = exports.isType = function isType(type, obj) { + var clas = getType(obj); + return obj !== undefined && obj !== null && clas === type; +}; + +/** + * Tests to see if a passed object is an element + * @param {Object} obj Object to be tested + * @return {Boolean} + */ +var isElement = exports.isElement = function isElement(o) { + return (typeof HTMLElement === 'undefined' ? 'undefined' : _typeof(HTMLElement)) === 'object' ? o instanceof HTMLElement : // DOM2 + o && (typeof o === 'undefined' ? 'undefined' : _typeof(o)) === 'object' && o !== null && o.nodeType === 1 && typeof o.nodeName === 'string'; +}; + +/** + * Merges unspecified amount of objects into new object + * @private + * @return {Object} Merged object of arguments + */ +var extend = exports.extend = function extend() { + var extended = {}; + var length = arguments.length; + + /** + * Merge one object into another + * @param {Object} obj Object to merge into extended object + */ + var merge = function merge(obj) { + for (var prop in obj) { + if (Object.prototype.hasOwnProperty.call(obj, prop)) { + // If deep merge and property is an object, merge properties + if (isType('Object', obj[prop])) { + extended[prop] = extend(true, extended[prop], obj[prop]); + } else { + extended[prop] = obj[prop]; + } + } + } + }; + + // Loop through each passed argument + for (var i = 0; i < length; i++) { + // store argument at position i + var obj = arguments[i]; + + // If we are in fact dealing with an object, merge it. + if (isType('Object', obj)) { + merge(obj); + } + } + + return extended; +}; + +var wrap = exports.wrap = function wrap(element, wrapper) { + wrapper = wrapper || document.createElement('div'); + if (element.nextSibling) { + element.parentNode.insertBefore(wrapper, element.nextSibling); + } else { + element.parentNode.appendChild(wrapper); + } + return wrapper.appendChild(element); +}; + +/** + * Find ancestor in DOM tree + * @param {NodeElement} el Element to start search from + * @param {[type]} cls Class of parent + * @return {NodeElement} Found parent element + */ +var findAncestor = exports.findAncestor = function findAncestor(el, cls) { + while ((el = el.parentElement) && !el.classList.contains(cls)) {} + return el; +}; + +/** + * Find ancestor in DOM tree by attribute name + * @param {NodeElement} el Element to start search from + * @param {string} attr Attribute name of parent + * @return {?NodeElement} Found parent element or null + */ +var findAncestorByAttrName = exports.findAncestorByAttrName = function findAncestorByAttrName(el, attr) { + var target = el; + + while (target) { + if (target.hasAttribute(attr)) { + return target; + } + + target = target.parentElement; + } + + return null; +}; + +/** + * Get the next or previous element from a given start point + * @param {HTMLElement} startEl Element to start position from + * @param {String} className The class we will look through + * @param {Number} direction Positive next element, negative previous element + * @return {[HTMLElement} Found element + */ +var getAdjacentEl = exports.getAdjacentEl = function getAdjacentEl(startEl, className) { + var direction = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; + + if (!startEl || !className) return; + + var parent = startEl.parentNode.parentNode; + var children = Array.from(parent.querySelectorAll(className)); + + var startPos = children.indexOf(startEl); + var operatorDirection = direction > 0 ? 1 : -1; + + return children[startPos + operatorDirection]; +}; + +/** + * Determine whether an element is within + * @param {HTMLElement} el Element to test + * @param {HTMLElement} parent Scrolling parent + * @param {Number} direction Whether element is visible from above or below + * @return {Boolean} + */ +var isScrolledIntoView = exports.isScrolledIntoView = function isScrolledIntoView(el, parent) { + var direction = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; + + if (!el) return; + + var isVisible = void 0; + + if (direction > 0) { + // In view from bottom + isVisible = parent.scrollTop + parent.offsetHeight >= el.offsetTop + el.offsetHeight; + } else { + // In view from top + isVisible = el.offsetTop >= parent.scrollTop; + } + + return isVisible; +}; + +/** + * Escape html in the string + * @param {String} html Initial string/html + * @return {String} Sanitised string + */ +var stripHTML = exports.stripHTML = function stripHTML(html) { + return html.replace(/&/g, '&').replace(/>/g, '&rt;').replace(/' + stripHTML(value) + ''); + testEl.style.position = 'absolute'; + testEl.style.padding = '0'; + testEl.style.top = '-9999px'; + testEl.style.left = '-9999px'; + testEl.style.width = 'auto'; + testEl.style.whiteSpace = 'pre'; + + if (document.body.contains(input) && window.getComputedStyle) { + var inputStyle = window.getComputedStyle(input); + + if (inputStyle) { + testEl.style.fontSize = inputStyle.fontSize; + testEl.style.fontFamily = inputStyle.fontFamily; + testEl.style.fontWeight = inputStyle.fontWeight; + testEl.style.fontStyle = inputStyle.fontStyle; + testEl.style.letterSpacing = inputStyle.letterSpacing; + testEl.style.textTransform = inputStyle.textTransform; + testEl.style.padding = inputStyle.padding; + } + } + + document.body.appendChild(testEl); + + if (value && testEl.offsetWidth !== input.offsetWidth) { + width = testEl.offsetWidth + 4; + } + + document.body.removeChild(testEl); + } + + return width + 'px'; +}; + +/** + * Sorting function for current and previous string + * @param {String} a Current value + * @param {String} b Next value + * @return {Number} -1 for after previous, + * 1 for before, + * 0 for same location + */ +var sortByAlpha = exports.sortByAlpha = function sortByAlpha(a, b) { + var labelA = (a.label || a.value).toLowerCase(); + var labelB = (b.label || b.value).toLowerCase(); + + if (labelA < labelB) return -1; + if (labelA > labelB) return 1; + return 0; +}; + +/** + * Sort by numeric score + * @param {Object} a Current value + * @param {Object} b Next value + * @return {Number} -1 for after previous, + * 1 for before, + * 0 for same location + */ +var sortByScore = exports.sortByScore = function sortByScore(a, b) { + return a.score - b.score; +}; + +/** + * Dispatch native event + * @param {NodeElement} element Element to trigger event on + * @param {String} type Type of event to trigger + * @param {Object} customArgs Data to pass with event + * @return {Object} Triggered event + */ +var dispatchEvent = exports.dispatchEvent = function dispatchEvent(element, type) { + var customArgs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + + var event = new CustomEvent(type, { + detail: customArgs, + bubbles: true, + cancelable: true + }); + + return element.dispatchEvent(event); +}; + +/** + * Tests value against a regular expression + * @param {string} value Value to test + * @return {Boolean} Whether test passed/failed + * @private + */ +var regexFilter = exports.regexFilter = function regexFilter(value, regex) { + if (!value || !regex) { + return false; + } + + var expression = new RegExp(regex.source, 'i'); + return expression.test(value); +}; + +var getWindowHeight = exports.getWindowHeight = function getWindowHeight() { + var body = document.body; + var html = document.documentElement; + return Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight); +}; + +var reduceToValues = exports.reduceToValues = function reduceToValues(items) { + var key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'value'; + + var values = items.reduce(function (prev, current) { + prev.push(current[key]); + return prev; + }, []); + + return values; +}; + +var isIE11 = exports.isIE11 = function isIE11() { + return !!(navigator.userAgent.match(/Trident/) && navigator.userAgent.match(/rv[ :]11/)); +}; + +/***/ }), +/* 2 */ +/***/ (function(module, exports) { + +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +var global = module.exports = typeof window != 'undefined' && window.Math == Math + ? window : typeof self != 'undefined' && self.Math == Math ? self + // eslint-disable-next-line no-new-func + : Function('return this')(); +if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef + + +/***/ }), +/* 3 */ +/***/ (function(module, exports) { + +var core = module.exports = { version: '2.5.6' }; +if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef + + +/***/ }), +/* 4 */ +/***/ (function(module, exports, __webpack_require__) { + +var dP = __webpack_require__(5); +var createDesc = __webpack_require__(13); +module.exports = __webpack_require__(7) ? function (object, key, value) { + return dP.f(object, key, createDesc(1, value)); +} : function (object, key, value) { + object[key] = value; + return object; +}; + + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { + +var anObject = __webpack_require__(6); +var IE8_DOM_DEFINE = __webpack_require__(42); +var toPrimitive = __webpack_require__(43); +var dP = Object.defineProperty; + +exports.f = __webpack_require__(7) ? Object.defineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPrimitive(P, true); + anObject(Attributes); + if (IE8_DOM_DEFINE) try { + return dP(O, P, Attributes); + } catch (e) { /* empty */ } + if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!'); + if ('value' in Attributes) O[P] = Attributes.value; + return O; +}; + + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(12); +module.exports = function (it) { + if (!isObject(it)) throw TypeError(it + ' is not an object!'); + return it; +}; + + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { + +// Thank's IE8 for his funny defineProperty +module.exports = !__webpack_require__(19)(function () { + return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; +}); + + +/***/ }), +/* 8 */ +/***/ (function(module, exports) { + +var hasOwnProperty = {}.hasOwnProperty; +module.exports = function (it, key) { + return hasOwnProperty.call(it, key); +}; + + +/***/ }), +/* 9 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.SCROLLING_SPEED = exports.KEY_CODES = exports.ACTION_TYPES = exports.EVENTS = exports.DEFAULT_CONFIG = exports.DEFAULT_CLASSNAMES = undefined; + +var _utils = __webpack_require__(1); + +var DEFAULT_CLASSNAMES = 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', + hiddenState: 'is-hidden', + flippedState: 'is-flipped', + loadingState: 'is-loading', + noResults: 'has-no-results', + noChoices: 'has-no-choices' +}; + +var DEFAULT_CONFIG = exports.DEFAULT_CONFIG = { + items: [], + choices: [], + silent: false, + renderChoiceLimit: -1, + maxItemCount: -1, + addItems: true, + removeItems: true, + removeItemButton: false, + editItems: false, + duplicateItems: true, + delimiter: ',', + paste: true, + searchEnabled: true, + searchChoices: true, + searchFloor: 1, + searchResultLimit: 4, + searchFields: ['label', 'value'], + position: 'auto', + resetScrollPosition: true, + regexFilter: null, + shouldSort: true, + shouldSortItems: false, + 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.', + addItemText: function addItemText(value) { + return 'Press Enter to add "' + (0, _utils.stripHTML)(value) + '"'; + }, + maxItemText: function maxItemText(maxItemCount) { + return 'Only ' + maxItemCount + ' values can be added.'; + }, + itemComparer: function itemComparer(choice, item) { + return choice === item; + }, + fuseOptions: { + includeScore: true + }, + callbackOnInit: null, + callbackOnCreateTemplates: null +}; + +var EVENTS = exports.EVENTS = { + showDropdown: 'showDropdown', + hideDropdown: 'hideDropdown', + change: 'change', + choice: 'choice', + search: 'search', + addItem: 'addItem', + removeItem: 'removeItem', + highlightItem: 'highlightItem' +}; + +var ACTION_TYPES = 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' +}; + +var KEY_CODES = 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 +}; + +var SCROLLING_SPEED = exports.SCROLLING_SPEED = 4; + +/***/ }), +/* 10 */ +/***/ (function(module, exports) { + +// 7.1.4 ToInteger +var ceil = Math.ceil; +var floor = Math.floor; +module.exports = function (it) { + return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); +}; + + +/***/ }), +/* 11 */ +/***/ (function(module, exports) { + +// 7.2.1 RequireObjectCoercible(argument) +module.exports = function (it) { + if (it == undefined) throw TypeError("Can't call method on " + it); + return it; +}; + + +/***/ }), +/* 12 */ +/***/ (function(module, exports) { + +module.exports = function (it) { + return typeof it === 'object' ? it !== null : typeof it === 'function'; +}; + + +/***/ }), +/* 13 */ +/***/ (function(module, exports) { + +module.exports = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; +}; + + +/***/ }), +/* 14 */ +/***/ (function(module, exports) { + +var id = 0; +var px = Math.random(); +module.exports = function (key) { + return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); +}; + + +/***/ }), +/* 15 */ +/***/ (function(module, exports) { + +module.exports = {}; + + +/***/ }), +/* 16 */ +/***/ (function(module, exports, __webpack_require__) { + +var shared = __webpack_require__(26)('keys'); +var uid = __webpack_require__(14); +module.exports = function (key) { + return shared[key] || (shared[key] = uid(key)); +}; + + +/***/ }), +/* 17 */ +/***/ (function(module, exports) { + +module.exports = false; + + +/***/ }), +/* 18 */ +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(2); +var core = __webpack_require__(3); +var hide = __webpack_require__(4); +var redefine = __webpack_require__(21); +var ctx = __webpack_require__(22); +var PROTOTYPE = 'prototype'; + +var $export = function (type, name, source) { + var IS_FORCED = type & $export.F; + var IS_GLOBAL = type & $export.G; + var IS_STATIC = type & $export.S; + var IS_PROTO = type & $export.P; + var IS_BIND = type & $export.B; + var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE]; + var exports = IS_GLOBAL ? core : core[name] || (core[name] = {}); + var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {}); + var key, own, out, exp; + if (IS_GLOBAL) source = name; + for (key in source) { + // contains in native + own = !IS_FORCED && target && target[key] !== undefined; + // export native or passed + out = (own ? target : source)[key]; + // bind timers to global for call from export context + exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; + // extend global + if (target) redefine(target, key, out, type & $export.U); + // export + if (exports[key] != out) hide(exports, key, exp); + if (IS_PROTO && expProto[key] != out) expProto[key] = out; + } +}; +global.core = core; +// type bitmap +$export.F = 1; // forced +$export.G = 2; // global +$export.S = 4; // static +$export.P = 8; // proto +$export.B = 16; // bind +$export.W = 32; // wrap +$export.U = 64; // safe +$export.R = 128; // real proto method for `library` +module.exports = $export; + + +/***/ }), +/* 19 */ +/***/ (function(module, exports) { + +module.exports = function (exec) { + try { + return !!exec(); + } catch (e) { + return true; + } +}; + + +/***/ }), +/* 20 */ +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(12); +var document = __webpack_require__(2).document; +// typeof document.createElement is 'object' in old IE +var is = isObject(document) && isObject(document.createElement); +module.exports = function (it) { + return is ? document.createElement(it) : {}; +}; + + +/***/ }), +/* 21 */ +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(2); +var hide = __webpack_require__(4); +var has = __webpack_require__(8); +var SRC = __webpack_require__(14)('src'); +var TO_STRING = 'toString'; +var $toString = Function[TO_STRING]; +var TPL = ('' + $toString).split(TO_STRING); + +__webpack_require__(3).inspectSource = function (it) { + return $toString.call(it); +}; + +(module.exports = function (O, key, val, safe) { + var isFunction = typeof val == 'function'; + if (isFunction) has(val, 'name') || hide(val, 'name', key); + if (O[key] === val) return; + if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key))); + if (O === global) { + O[key] = val; + } else if (!safe) { + delete O[key]; + hide(O, key, val); + } else if (O[key]) { + O[key] = val; + } else { + hide(O, key, val); + } +// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative +})(Function.prototype, TO_STRING, function toString() { + return typeof this == 'function' && this[SRC] || $toString.call(this); +}); + + +/***/ }), +/* 22 */ +/***/ (function(module, exports, __webpack_require__) { + +// optional / simple context binding +var aFunction = __webpack_require__(44); +module.exports = function (fn, that, length) { + aFunction(fn); + if (that === undefined) return fn; + switch (length) { + case 1: return function (a) { + return fn.call(that, a); + }; + case 2: return function (a, b) { + return fn.call(that, a, b); + }; + case 3: return function (a, b, c) { + return fn.call(that, a, b, c); + }; + } + return function (/* ...args */) { + return fn.apply(that, arguments); + }; +}; + + +/***/ }), +/* 23 */ +/***/ (function(module, exports, __webpack_require__) { + +// to indexed object, toObject with fallback for non-array-like ES3 strings +var IObject = __webpack_require__(50); +var defined = __webpack_require__(11); +module.exports = function (it) { + return IObject(defined(it)); +}; + + +/***/ }), +/* 24 */ +/***/ (function(module, exports) { + +var toString = {}.toString; + +module.exports = function (it) { + return toString.call(it).slice(8, -1); +}; + + +/***/ }), +/* 25 */ +/***/ (function(module, exports, __webpack_require__) { + +// 7.1.15 ToLength +var toInteger = __webpack_require__(10); +var min = Math.min; +module.exports = function (it) { + return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 +}; + + +/***/ }), +/* 26 */ +/***/ (function(module, exports, __webpack_require__) { + +var core = __webpack_require__(3); +var global = __webpack_require__(2); +var SHARED = '__core-js_shared__'; +var store = global[SHARED] || (global[SHARED] = {}); + +(module.exports = function (key, value) { + return store[key] || (store[key] = value !== undefined ? value : {}); +})('versions', []).push({ + version: core.version, + mode: __webpack_require__(17) ? 'pure' : 'global', + copyright: '© 2018 Denis Pushkarev (zloirock.ru)' +}); + + +/***/ }), +/* 27 */ +/***/ (function(module, exports) { + +// IE 8- don't enum bug keys +module.exports = ( + 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf' +).split(','); + + +/***/ }), +/* 28 */ +/***/ (function(module, exports, __webpack_require__) { + +var def = __webpack_require__(5).f; +var has = __webpack_require__(8); +var TAG = __webpack_require__(0)('toStringTag'); + +module.exports = function (it, tag, stat) { + if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag }); +}; + + +/***/ }), +/* 29 */ +/***/ (function(module, exports, __webpack_require__) { + +// 7.1.13 ToObject(argument) +var defined = __webpack_require__(11); +module.exports = function (it) { + return Object(defined(it)); +}; + + +/***/ }), +/* 30 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_freeGlobal.js +var _freeGlobal = __webpack_require__(64); + +// CONCATENATED MODULE: ./node_modules/lodash-es/_root.js + + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = _freeGlobal["a" /* default */] || freeSelf || Function('return this')(); + +/* harmony default export */ var _root = (root); + +// CONCATENATED MODULE: ./node_modules/lodash-es/_Symbol.js + + +/** Built-in value references. */ +var Symbol = _root.Symbol; + +/* harmony default export */ var _Symbol = (Symbol); + +// CONCATENATED MODULE: ./node_modules/lodash-es/_getRawTag.js + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _getRawTag_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** Built-in value references. */ +var symToStringTag = _Symbol ? _Symbol.toStringTag : undefined; + +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { + var isOwn = _getRawTag_hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; +} + +/* harmony default export */ var _getRawTag = (getRawTag); + +// CONCATENATED MODULE: ./node_modules/lodash-es/_objectToString.js +/** Used for built-in method references. */ +var _objectToString_objectProto = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var _objectToString_nativeObjectToString = _objectToString_objectProto.toString; + +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { + return _objectToString_nativeObjectToString.call(value); +} + +/* harmony default export */ var _objectToString = (objectToString); + +// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGetTag.js + + + + +/** `Object#toString` result references. */ +var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + +/** Built-in value references. */ +var _baseGetTag_symToStringTag = _Symbol ? _Symbol.toStringTag : undefined; + +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (_baseGetTag_symToStringTag && _baseGetTag_symToStringTag in Object(value)) + ? _getRawTag(value) + : _objectToString(value); +} + +/* harmony default export */ var _baseGetTag = (baseGetTag); + +// CONCATENATED MODULE: ./node_modules/lodash-es/_overArg.js +/** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ +function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; +} + +/* harmony default export */ var _overArg = (overArg); + +// CONCATENATED MODULE: ./node_modules/lodash-es/_getPrototype.js + + +/** Built-in value references. */ +var getPrototype = _overArg(Object.getPrototypeOf, Object); + +/* harmony default export */ var _getPrototype = (getPrototype); + +// CONCATENATED MODULE: ./node_modules/lodash-es/isObjectLike.js +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return value != null && typeof value == 'object'; +} + +/* harmony default export */ var lodash_es_isObjectLike = (isObjectLike); + +// CONCATENATED MODULE: ./node_modules/lodash-es/isPlainObject.js + + + + +/** `Object#toString` result references. */ +var objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + isPlainObject_objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var isPlainObject_hasOwnProperty = isPlainObject_objectProto.hasOwnProperty; + +/** Used to infer the `Object` constructor. */ +var objectCtorString = funcToString.call(Object); + +/** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ +function isPlainObject(value) { + if (!lodash_es_isObjectLike(value) || _baseGetTag(value) != objectTag) { + return false; + } + var proto = _getPrototype(value); + if (proto === null) { + return true; + } + var Ctor = isPlainObject_hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString.call(Ctor) == objectCtorString; +} + +/* harmony default export */ var lodash_es_isPlainObject = (isPlainObject); + +// EXTERNAL MODULE: ./node_modules/symbol-observable/index.js +var symbol_observable = __webpack_require__(65); +var symbol_observable_default = /*#__PURE__*/__webpack_require__.n(symbol_observable); + +// CONCATENATED MODULE: ./node_modules/redux/es/createStore.js + + + +/** + * 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. + */ +var ActionTypes = { + INIT: '@@redux/INIT' + + /** + * 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. + */ +};function createStore_createStore(reducer, preloadedState, enhancer) { + var _ref2; + + if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') { + enhancer = preloadedState; + preloadedState = undefined; + } + + if (typeof enhancer !== 'undefined') { + if (typeof enhancer !== 'function') { + throw new Error('Expected the enhancer to be a function.'); + } + + return enhancer(createStore_createStore)(reducer, preloadedState); + } + + if (typeof reducer !== 'function') { + throw new Error('Expected the reducer to be a function.'); + } + + var currentReducer = reducer; + var currentState = preloadedState; + var currentListeners = []; + var nextListeners = currentListeners; + var isDispatching = false; + + function ensureCanMutateNextListeners() { + if (nextListeners === currentListeners) { + nextListeners = currentListeners.slice(); + } + } + + /** + * Reads the state tree managed by the store. + * + * @returns {any} The current state tree of your application. + */ + function getState() { + 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. + */ + function subscribe(listener) { + if (typeof listener !== 'function') { + throw new Error('Expected listener to be a function.'); + } + + var isSubscribed = true; + + ensureCanMutateNextListeners(); + nextListeners.push(listener); + + return function unsubscribe() { + if (!isSubscribed) { + return; + } + + isSubscribed = false; + + ensureCanMutateNextListeners(); + var index = nextListeners.indexOf(listener); + nextListeners.splice(index, 1); + }; + } + + /** + * 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). + */ + function dispatch(action) { + if (!lodash_es_isPlainObject(action)) { + throw new Error('Actions must be plain objects. ' + 'Use custom middleware for async actions.'); + } + + if (typeof action.type === 'undefined') { + throw new Error('Actions may not have an undefined "type" property. ' + 'Have you misspelled a constant?'); + } + + if (isDispatching) { + throw new Error('Reducers may not dispatch actions.'); + } + + try { + isDispatching = true; + currentState = currentReducer(currentState, action); + } finally { + isDispatching = false; + } + + var listeners = currentListeners = nextListeners; + for (var i = 0; i < listeners.length; i++) { + var listener = listeners[i]; + listener(); + } + + 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} + */ + function replaceReducer(nextReducer) { + if (typeof nextReducer !== 'function') { + throw new Error('Expected the nextReducer to be a function.'); + } + + currentReducer = nextReducer; + dispatch({ type: ActionTypes.INIT }); + } + + /** + * 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 + */ + function observable() { + var _ref; + + 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') { + throw new TypeError('Expected the observer to be an object.'); + } + + function observeState() { + if (observer.next) { + observer.next(getState()); + } + } + + observeState(); + var unsubscribe = outerSubscribe(observeState); + return { unsubscribe: unsubscribe }; + } + }, _ref[symbol_observable_default.a] = function () { + 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. + dispatch({ type: ActionTypes.INIT }); + + return _ref2 = { + dispatch: dispatch, + subscribe: subscribe, + getState: getState, + replaceReducer: replaceReducer + }, _ref2[symbol_observable_default.a] = observable, _ref2; +} +// CONCATENATED MODULE: ./node_modules/redux/es/utils/warning.js +/** + * Prints a warning in the console if it exists. + * + * @param {String} message The warning message. + * @returns {void} + */ +function warning_warning(message) { + /* eslint-disable no-console */ + if (typeof console !== 'undefined' && typeof console.error === 'function') { + console.error(message); + } + /* eslint-enable no-console */ + 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); + /* eslint-disable no-empty */ + } catch (e) {} + /* eslint-enable no-empty */ +} +// CONCATENATED MODULE: ./node_modules/redux/es/combineReducers.js + + + + +function getUndefinedStateErrorMessage(key, action) { + var actionType = action && action.type; + var actionName = actionType && '"' + actionType.toString() + '"' || 'an action'; + + return 'Given action ' + actionName + ', 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.'; +} + +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'; + + 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.'; + } + + if (!lodash_es_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('", "') + '"'); + } + + var unexpectedKeys = Object.keys(inputState).filter(function (key) { + return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key]; + }); + + unexpectedKeys.forEach(function (key) { + unexpectedKeyCache[key] = true; + }); + + 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.'); + } +} + +function assertReducerShape(reducers) { + Object.keys(reducers).forEach(function (key) { + var reducer = reducers[key]; + var initialState = reducer(undefined, { type: ActionTypes.INIT }); + + 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.'); + } + + var type = '@@redux/PROBE_UNKNOWN_ACTION_' + Math.random().toString(36).substring(7).split('').join('.'); + if (typeof reducer(undefined, { type: type }) === '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.'); + } + }); +} + +/** + * 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. + */ +function combineReducers(reducers) { + var reducerKeys = Object.keys(reducers); + var finalReducers = {}; + for (var i = 0; i < reducerKeys.length; i++) { + var key = reducerKeys[i]; + + if (false) { + if (typeof reducers[key] === 'undefined') { + warning('No reducer provided for key "' + key + '"'); + } + } + + if (typeof reducers[key] === 'function') { + finalReducers[key] = reducers[key]; + } + } + var finalReducerKeys = Object.keys(finalReducers); + + var unexpectedKeyCache = void 0; + if (false) { + unexpectedKeyCache = {}; + } + + var shapeAssertionError = void 0; + try { + assertReducerShape(finalReducers); + } catch (e) { + shapeAssertionError = e; + } + + return function combination() { + var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var action = arguments[1]; + + if (shapeAssertionError) { + throw shapeAssertionError; + } + + if (false) { + var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache); + if (warningMessage) { + warning(warningMessage); + } + } + + var hasChanged = false; + var nextState = {}; + 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); + if (typeof nextStateForKey === 'undefined') { + var errorMessage = getUndefinedStateErrorMessage(_key, action); + throw new Error(errorMessage); + } + nextState[_key] = nextStateForKey; + hasChanged = hasChanged || nextStateForKey !== previousStateForKey; + } + return hasChanged ? nextState : state; + }; +} +// CONCATENATED MODULE: ./node_modules/redux/es/bindActionCreators.js +function bindActionCreator(actionCreator, dispatch) { + return function () { + return dispatch(actionCreator.apply(undefined, 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 a single function as the first argument, + * and get a 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. + */ +function bindActionCreators(actionCreators, dispatch) { + if (typeof actionCreators === 'function') { + return bindActionCreator(actionCreators, dispatch); + } + + 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"?'); + } + + var keys = Object.keys(actionCreators); + var boundActionCreators = {}; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + var actionCreator = actionCreators[key]; + if (typeof actionCreator === 'function') { + boundActionCreators[key] = bindActionCreator(actionCreator, dispatch); + } + } + return boundActionCreators; +} +// CONCATENATED MODULE: ./node_modules/redux/es/compose.js +/** + * 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 = Array(_len), _key = 0; _key < _len; _key++) { + funcs[_key] = arguments[_key]; + } + + if (funcs.length === 0) { + return function (arg) { + return arg; + }; + } + + if (funcs.length === 1) { + return funcs[0]; + } + + return funcs.reduce(function (a, b) { + return function () { + return a(b.apply(undefined, arguments)); + }; + }); +} +// CONCATENATED MODULE: ./node_modules/redux/es/applyMiddleware.js +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + + +/** + * 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. + */ +function applyMiddleware() { + for (var _len = arguments.length, middlewares = Array(_len), _key = 0; _key < _len; _key++) { + middlewares[_key] = arguments[_key]; + } + + return function (createStore) { + return function (reducer, preloadedState, enhancer) { + var store = createStore(reducer, preloadedState, enhancer); + var _dispatch = store.dispatch; + var chain = []; + + var middlewareAPI = { + getState: store.getState, + dispatch: function dispatch(action) { + return _dispatch(action); + } + }; + chain = middlewares.map(function (middleware) { + return middleware(middlewareAPI); + }); + _dispatch = compose.apply(undefined, chain)(store.dispatch); + + return _extends({}, store, { + dispatch: _dispatch + }); + }; + }; +} +// CONCATENATED MODULE: ./node_modules/redux/es/index.js +/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "createStore", function() { return createStore_createStore; }); +/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "combineReducers", function() { return combineReducers; }); +/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "bindActionCreators", function() { return bindActionCreators; }); +/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "applyMiddleware", function() { return applyMiddleware; }); +/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "compose", function() { return compose; }); + + + + + + + +/* +* 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. +*/ +function isCrushed() {} + +if (false) { + warning('You are currently using minified code outside of NODE_ENV === \'production\'. ' + 'This means that you are running a slower development build of Redux. ' + 'You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify ' + 'or DefinePlugin for webpack (http://stackoverflow.com/questions/30030031) ' + 'to ensure you have the correct code for your production build.'); +} + + + +/***/ }), +/* 31 */ +/***/ (function(module, exports) { + +var g; + +// This works in non-strict mode +g = (function() { + return this; +})(); + +try { + // This works if eval is allowed (see CSP) + g = g || Function("return this")() || (1,eval)("this"); +} catch(e) { + // This works if the window reference is available + if(typeof window === "object") + g = window; +} + +// 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) { ...} + +module.exports = g; + + +/***/ }), +/* 32 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _utils = __webpack_require__(1); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var WrappedElement = function () { + function WrappedElement(_ref) { + var element = _ref.element, + classNames = _ref.classNames; + + _classCallCheck(this, WrappedElement); + + Object.assign(this, { element: element, classNames: classNames }); + + if (!(0, _utils.isElement)(element)) { + throw new TypeError('Invalid element passed'); + } + + this.isDisabled = false; + } + + _createClass(WrappedElement, [{ + key: 'conceal', + value: function conceal() { + // Hide passed input + this.element.classList.add(this.classNames.input, this.classNames.hiddenState); + + // 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('aria-hidden', 'true'); + this.element.setAttribute('data-choice', 'active'); + } + }, { + key: 'reveal', + value: function reveal() { + // Reinstate passed element + this.element.classList.remove(this.classNames.input, this.classNames.hiddenState); + this.element.removeAttribute('tabindex'); + + // Recover original styles if any + var origStyle = this.element.getAttribute('data-choice-orig-style'); + + if (origStyle) { + this.element.removeAttribute('data-choice-orig-style'); + this.element.setAttribute('style', origStyle); + } else { + this.element.removeAttribute('style'); + } + this.element.removeAttribute('aria-hidden'); + this.element.removeAttribute('data-choice'); + + // Re-assign values - this is weird, I know + this.element.value = this.element.value; + } + }, { + key: 'enable', + value: function enable() { + this.element.removeAttribute('disabled'); + this.element.disabled = false; + this.isDisabled = false; + } + }, { + key: 'disable', + value: function disable() { + this.element.setAttribute('disabled', ''); + this.element.disabled = true; + this.isDisabled = true; + } + }, { + key: 'triggerEvent', + value: function triggerEvent(eventType, data) { + (0, _utils.dispatchEvent)(this.element, eventType, data); + } + }, { + key: 'value', + get: function get() { + return this.element.value; + } + }]); + + return WrappedElement; +}(); + +exports.default = WrappedElement; + +/***/ }), +/* 33 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.TEMPLATES = undefined; + +var _classnames = __webpack_require__(80); + +var _classnames2 = _interopRequireDefault(_classnames); + +var _utils = __webpack_require__(1); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +var TEMPLATES = exports.TEMPLATES = { + containerOuter: function containerOuter(globalClasses, direction, isSelectElement, isSelectOneElement, searchEnabled, passedElementType) { + var tabIndex = isSelectOneElement ? 'tabindex="0"' : ''; + var role = isSelectElement ? 'role="listbox"' : ''; + var ariaAutoComplete = ''; + + if (isSelectElement && searchEnabled) { + role = 'role="combobox"'; + ariaAutoComplete = 'aria-autocomplete="list"'; + } + + return (0, _utils.strToEl)('\n
+
+ +

Choices.js is a lightweight, configurable select box/text input plugin. Similar to Select2 and Selectize but without + the jQuery dependency.

+

For all config options, visit the GitHub repo.

+ +
+

+ Interested in writing your own ES6 JavaScript plugins? Check out ES6.io for great tutorials! 💪🏼 +

+
+ +

Text inputs

+ + + + + + + + + + + + + + + + + + + + + + + + +
+ +

Multiple select input

+ + + + + + + + + +

If the following example do not load, the Discogs rate limit has probably been reached. Try again later!

+ + + + + + + + +

+ +
+ +

Single select input

+ + + +

If the following two examples do not load, the Discogs rate limit has probably been reached. Try again later!

+ + + + + + + + + + + + + + + + + + + + +

Try searching for 'fantastic'

+ + + + + + + + +

Below is an example of how you could have two select inputs depend on eachother. 'Tube stations' will only be enabled if + the value of 'Cities' is 'London'

+ + + + + +
+
+ + + + + + + + +