From 525f7750830f606ed6ffb897184af5048f3723ab Mon Sep 17 00:00:00 2001 From: Patrick Kunka Date: Sun, 31 Mar 2019 23:31:37 +0100 Subject: [PATCH] openOnFocus fixes --- CHANGELOG.md | 4 +++ bundle/easydropdown.js | 2 +- bundle/easydropdown.js.map | 2 +- demos/easydropdown.js | 2 +- demos/easydropdown.js.map | 2 +- package-lock.json | 2 +- package.json | 2 +- src/Config/Behavior.ts | 2 +- .../Handlers/handleBodyMousedown.test.ts | 33 +++++++++++++++++++ src/Events/Handlers/handleBodyMousedown.ts | 15 +++++++++ src/Events/Handlers/handleSelectBlur.test.ts | 21 +++++++++++- src/Events/Handlers/handleSelectBlur.ts | 2 +- src/Events/getEventsList.ts | 6 ++++ src/State/Interfaces/IActions.ts | 1 + src/State/State.ts | 1 + src/State/resolveActions.test.ts | 18 ++++++++++ src/State/resolveActions.ts | 6 ++++ 17 files changed, 112 insertions(+), 9 deletions(-) create mode 100644 src/Events/Handlers/handleBodyMousedown.test.ts create mode 100644 src/Events/Handlers/handleBodyMousedown.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index c98eab3..8385017 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ Changelog ========= +## 4.1.1 +- Fixes issue introduced in 4.1.0 where UI no longer closed on select by default +- Fixes issue introduced in 4.1.0 where clicking an option while `behavior.openOnFocus` set would close the UI without selecting any option. + ## 4.1.0 - Fixes a styling issue in Beanstalk and Ivy themes where native select element was discoverable on click to the left of the head element. - Fixes the `behavior.closeOnSelect` configuration option which not previously implemented internally. diff --git a/bundle/easydropdown.js b/bundle/easydropdown.js index 2f61ad3..3a9c02b 100644 --- a/bundle/easydropdown.js +++ b/bundle/easydropdown.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.easydropdown=t():e.easydropdown=t()}(window,function(){return function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},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 o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},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=20)}([function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(6),r=n(3);t.ArrayStrategy=r.default,t.default=o.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(38);function r(e,t,n,o){var r=e(o,n),i=r.maxVisibleItemsOverride>-1?r.maxVisibleItemsOverride:n.behavior.maxVisibleItems,a=o.item.length>i,u=o.sumItemsHeight(i);t.open(u,r.type,a)}t.dispatchOpen=r;var i=r.bind(null,o.default);t.default=i},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return e.reduce(function(e,t){if("string"==typeof t)e.push(t);else{var n=t[0],o=t[1];n&&e.push(o)}return e},[]).join(" ")}},function(e,t,n){"use strict";var o;Object.defineProperty(t,"__esModule",{value:!0}),function(e){e.PUSH="PUSH",e.REPLACE="REPLACE"}(o||(o={})),t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default=function(e,t){var n=t.actions,o=t.timers;window.clearTimeout(o.keyingTimeoutId),n.keying(),o.keyingTimeoutId=window.setTimeout(function(){return n.resetKeying()},100),e.disabled=!0,setTimeout(function(){e.disabled=!1,e.focus()})}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default=[]},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),r=n(3),i=n(26),a=n(27),u=n(7);function s(e,t,n){void 0===n&&(n=null);var i,l=[];if(i=n instanceof o.default?n:new o.default,"boolean"==typeof n&&!0===n)i.deep=!0;else if(n&&i!==n&&"object"==typeof n&&(s(i,n),[r.default.PUSH,r.default.REPLACE].indexOf(i.arrayStrategy)<0))throw RangeError(u.INVALID_ARRAY_STRATEGY(i.arrayStrategy));if(!e||"object"!=typeof e)throw new TypeError(u.TYPE_ERROR_TARGET(e));if(!t||"object"!=typeof t)throw new TypeError(u.TYPE_ERROR_SOURCE(t));if(Array.isArray(t)){if(i.arrayStrategy===r.default.PUSH)return e.push.apply(e,t),e;for(var d=0;dt.length?e:t,o=n===e?t:e,r=0,i=0,a=0,u=-1;r1)break;a=i=0}}u=-1;for(var s=0,l=0,d=0,c=n.length-1,f=o.length-1;s1)break;d=l=0}}return Math.min(o.length,a+d)}Object.defineProperty(t,"__esModule",{value:!0}),t.getTotalMatching=o,t.default=function(e,t,n,r){if(Object.hasOwnProperty.call(t,n)||!Object.isSealed(t)||Object.isExtensible(t)||!(e instanceof TypeError))throw e;var i=function(e,t,n,r){var i=o(r.toLowerCase(),e),a=Math.abs(r.length-t.length);return i>n.totalMatching||i===n.totalMatching&&a1?u.key:"";throw new TypeError(r(n,s))}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(){return function(){this.showPlaceholderWhenOpen=!1,this.openOnFocus=!1,this.closeOnSelect=!1,this.useNativeUiOnMobile=!0,this.loop=!1,this.clampMaxVisibleItems=!0,this.liveUpdates=!1,this.maxVisibleItems=15,Object.seal(this)}}();t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(){return function(){this.onOpen=null,this.onClose=null,this.onSelect=null,Object.seal(this)}}();t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(){return function(){this.root="edd-root",this.rootOpen="edd-root-open",this.rootOpenAbove="edd-root-open-above",this.rootOpenBelow="edd-root-open-below",this.rootDisabled="edd-root-disabled",this.rootInvalid="edd-root-invalid",this.rootFocused="edd-root-focused",this.rootHasValue="edd-root-has-value",this.rootNative="edd-root-native",this.gradientTop="edd-gradient-top",this.gradientBottom="edd-gradient-bottom",this.head="edd-head",this.value="edd-value",this.arrow="edd-arrow",this.select="edd-select",this.body="edd-body",this.bodyScrollable="edd-body-scrollable",this.bodyAtTop="edd-body-at-top",this.bodyAtBottom="edd-body-at-bottom",this.itemsList="edd-items-list",this.group="edd-group",this.groupDisabled="edd-group-disabled",this.groupHasLabel="edd-group-has-label",this.groupLabel="edd-group-label",this.option="edd-option",this.optionDisabled="edd-option-disabled",this.optionFocused="edd-option-focused",this.optionSelected="edd-option-selected",Object.seal(this)}}();t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(32),r=n(33),i=n(34);function a(e,t){var n=new r.default(t);if(!n.target)return n;var i=function(t){return n.handler(t,e)};return n.throttle>0?n.boundHandler=o.default(i,n.throttle):n.boundHandler=i,n.target.addEventListener(n.type,n.boundHandler),n}t.bindEvent=a,t.default=function(e){return i.default(e.dom).map(a.bind(null,e))}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=null,o=-1/0;return function(){for(var r=this,i=[],a=0;a=t?s():(clearTimeout(n),n=setTimeout(s,t-l))}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(0),r=function(){function e(e){this.type="",this.target=null,this.debounce=0,this.throttle=0,this.handler=null,this.boundHandler=null,this.passive=!1,o.default(this,e),Object.seal(this)}return e.prototype.unbind=function(){this.target&&this.target.removeEventListener(this.type,this.boundHandler)},e}();t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(35),r=n(36),i=n(37),a=n(39),u=n(40),s=n(41),l=n(42),d=n(43),c=n(46),f=n(13),p=n(13);t.default=function(e){return[{target:e.head,type:"click",handler:i.default},{target:e.body,type:"click",handler:o.default},{target:e.body,type:"mouseover",handler:r.default},{target:e.itemsList,type:"scroll",handler:a.default},{target:e.select,type:"keydown",handler:d.default},{target:e.select,type:"invalid",handler:l.default},{target:e.select,type:"keypress",handler:c.default},{target:e.select,type:"focus",handler:s.default},{target:e.select,type:"blur",handler:u.default},{target:document.documentElement,type:"click",handler:f.default},{target:window,type:"resize",handler:p.default,throttle:100}]}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(9),r=n(10);t.default=function(e,t){t.state;var n=t.actions,i=t.dom,a=t.config;e.stopPropagation();var u=o.default(e.target,r.OPTION,!0);if(u){var s=Array.prototype.indexOf.call(i.option,u);n.selectOption(s,a.behavior.closeOnSelect)}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(9),r=n(10);t.default=function(e,t){var n=t.state,i=t.actions,a=t.dom;e.stopPropagation();var u=o.default(e.target,r.OPTION,!0);if(u&&!n.isKeying){var s=Array.prototype.indexOf.call(a.option,u);i.focusOption(s)}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(1);t.default=function(e,t){var n=t.state,r=t.actions,i=t.dom,a=t.config;n.isUseNativeMode||(e.stopPropagation(),n.isClosed?(o.default(r,a,i),i.select.focus()):r.close())}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(11),r=10;function i(e,t,n,r){var i=o.default.NONE,a=-1;if(e<=n&&t<=n){var u=Math.max(t,e);i=e-1?a.focusedIndex:a.selectedIndex,c=0,f=1;e.preventDefault(),r.default(i,t),n&&(f=Math.round(Math.max(a.totalOptions/2,l.behavior.maxVisibleItems)));do{d+=f,f=1,d>=a.totalOptions&&(d=l.behavior.loop?0:a.totalOptions-1),s.focusOption(d,!0),c++}while(a.focusedOption&&a.focusedOption.isDisabled&&c<=a.totalOptions);a.isClosed&&o.default(s,l,u)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(1),r=n(4);t.default=function(e,t){var n=e.metaKey,i=e.target,a=t.state,u=t.config,s=t.dom,l=t.actions,d=a.focusedIndex>-1?a.focusedIndex:a.selectedIndex,c=0,f=1;e.preventDefault(),r.default(i,t),n&&(f=Math.round(Math.max(a.totalOptions/2,u.behavior.maxVisibleItems)));do{d-=f,f=1,d<0&&(d=u.behavior.loop?a.totalOptions-1:0),l.focusOption(d,!0),c++}while(a.focusedOption&&a.focusedOption.isDisabled&&c` element must exist within a document");t.replaceChild(this.dom.root,e),n.parentElement.replaceChild(e,n),e.className=this.classNames.select,e.setAttribute("aria-hidden","true"),this.dom.select=e},e.prototype.syncSelectWithValue=function(e){if(this.dom.select.value!==e){var t=new CustomEvent("change",{bubbles:!0});this.dom.select.value=e,this.dom.select.dispatchEvent(t)}},e.queryDomRefs=function(e,t){return void 0===t&&(t=Object.keys(e)),t.reduce(function(e,t){var n='[data-ref~="'+t+'"]',o=e.root.querySelectorAll(n);if(o.length<1||"root"===t)return e;var r=o[0],i=e[t];return null===i?e[t]=r:Array.isArray(i)&&Array.prototype.push.apply(i,o),e},e)},e}();t.default=s},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(2),r=n(49),i=n(52);t.default=function(e,t){return'\n \n "+i.default(e,t)+"\n "+(e.isUseNativeMode?"":r.default(e,t))+"\n \n "}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(2),r=n(50);t.default=function(e,t){var n=o.default([t.body,[e.isAtTop,t.bodyAtTop],[e.isAtBottom,t.bodyAtBottom],[e.isScrollable,t.bodyScrollable]]),i=e.isOpen?'style="max-height: '+e.maxBodyHeight+'px;"':"";return'\n \n
\n "+e.groups.map(function(n){return r.default(n,e,t)}).join("")+"\n
\n
\n \n \n '}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(2),r=n(51);t.default=function(e,t,n){return'\n
\n '+(e.hasLabel?'
'+e.label+"
":"")+"\n "+e.options.map(function(e){return r.default(e,t,n)}).join("")+"\n
\n "}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(2);t.default=function(e,t,n){var r=t.selectedOption===e;return'\n \n "+e.label+"\n \n "}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(53),r=n(54);t.default=function(e,t){return'\n
\n '+r.default(e,t)+"\n "+o.default(e,t)+'\n \n
\n'}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default=function(e,t){return''}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default=function(e,t){return'\n \n "+e.humanReadableValue+"\n \n "}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=document.createElement("div");return t.innerHTML=e,t.firstElementChild}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(){this.select=null,this.root=null,this.head=null,this.value=null,this.body=null,this.arrow=null,this.itemsList=null,this.item=[],this.group=[],this.option=[]}return e.prototype.sumItemsHeight=function(e){void 0===e&&(e=1/0);for(var t=0,n=0,o=void 0;(o=this.item[n])&&n!==e;n++)t+=o.offsetHeight;return t},e}();t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(0),r=n(14),i=n(15),a=n(58);function u(e,t){for(var n=Math.max(e.attributes.length,t.attributes.length),o={},a=[],u=0;u1&&d.sort();u=0;for(var c=void 0;c=d[u];u++){var f=o[c],p={type:null,name:c,value:null};f[0]!==f[1]&&(void 0===f[0]?(p.type=r.default.ADD,p.value=f[1]):void 0===f[1]?(p.type=r.default.REMOVE,p.value=""):(p.type=r.default.EDIT,p.value=f[1]),a.push(p))}return{type:i.default.OUTER,attributeChanges:a}}t.default=function e(t,n){var r=-1,s=new a.default;if(t instanceof HTMLSelectElement)return s.type=i.default.NONE,s;if(t instanceof Text&&n instanceof Text)t.textContent===n.textContent?s.type=i.default.NONE:(s.type=i.default.INNER,s.newTextContent=n.textContent);else if(t instanceof HTMLElement&&n instanceof HTMLElement)if(t.tagName!==n.tagName)s.type=i.default.REPLACE,s.newNode=n;else if(t.outerHTML===n.outerHTML)s.type=i.default.NONE;else if(t.innerHTML===n.innerHTML)o.default(s,u(t,n));else if(o.default(s,u(t,n)),s.attributeChanges.length>0?s.type=i.default.FULL:s.type=i.default.INNER,(r=t.childNodes.length)>0&&r===n.childNodes.length)for(var l=0,d=void 0;d=t.childNodes[l];l++)s.childCommands.push(e(d,n.childNodes[l]));else s.newInnerHtml=n.innerHTML;else s.type=i.default.REPLACE,s.newNode=n;return s}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(){return function(){this.newNode=null,this.newInnerHtml="",this.newTextContent="",this.attributeChanges=[],this.childCommands=[],this.index=null}}();t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(14),r=n(15);function i(e,t){var n=window.requestAnimationFrame;t.forEach(function(t){n&&["class","style"].indexOf(t.name)>-1?n(function(){return a(e,t)}):a(e,t)})}function a(e,t){switch(t.type){case o.default.ADD:case o.default.EDIT:e.setAttribute(t.name,t.value);break;case o.default.REMOVE:e.removeAttribute(t.name)}}t.default=function e(t,n){switch(n.type){case r.default.NONE:return t;case r.default.REPLACE:return t.parentElement.replaceChild(n.newNode,t),n.newNode;case r.default.INNER:return t instanceof Text?t.textContent=n.newTextContent:n.childCommands.length>0?n.childCommands.forEach(function(n,o){return e(t.childNodes[o],n)}):t.innerHTML=n.newInnerHtml,t;case r.default.OUTER:return i(t,n.attributeChanges),t;case r.default.FULL:return n.childCommands.length>0?n.childCommands.forEach(function(n,o){return e(t.childNodes[o],n)}):t.innerHTML=n.newInnerHtml,i(t,n.attributeChanges),t}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=100;t.default=function(e,t,n,r){var i=e.value;return window.setInterval(function(){if(e.value!==i){var o=t.getOptionIndexFromValue(e.value);n.selectOption(o,r.behavior.closeOnSelect),n.focusOption(o,!0)}i=e.value},o)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=300;t.default=function(e,t,n){var r=e.outerHTML;return window.setInterval(function(){var o=e.outerHTML;o===r||t.isKeying||n(),r=o},o)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){for(var n=0,o=t;n0?e+i+r:e}Object.defineProperty(t,"__esModule",{value:!0}),t.getScrollTop=o,t.default=function(e,t,n,r){void 0===r&&(r=!1);var i=Math.max(0,n.focusedIndex>-1?n.focusedIndex:n.selectedIndex),a=e.option[i];if(a){var u=r?n.maxBodyHeight/2-a.offsetHeight/2:0,s=o(e.itemsList.scrollTop,a.offsetTop,a.offsetHeight,n.maxBodyHeight,u);s!==e.itemsList.scrollTop&&(e.itemsList.scrollTop=s)}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(0),r=n(65),i=function(){function e(){}return e.proxyActions=function(t,n,i){var a=e.createStateProxy(t,i),u=r.default(a);return o.default(u,n),u},e.createStateProxy=function(t,n){return Object.seal(e.getPropertyDescriptorsFromValue(t,n).reduce(function(e,t){var n=t.key,o=t.get,r=t.set;return Object.defineProperty(e,n,{enumerable:!0,get:o,set:r})},{}))},e.getPropertyDescriptorsFromValue=function(t,n){var o=Object.getPrototypeOf(t);return Object.keys(t).concat(Object.keys(o)).reduce(function(r,i){var a="function"==typeof(Object.getOwnPropertyDescriptor(t,i)||Object.getOwnPropertyDescriptor(o,i)).get;return r.push({get:e.readPropertyValue.bind(null,t,i),set:a?void 0:e.updatePropertyValue.bind(null,t,i,n),key:i}),r},[])},e.readPropertyValue=function(e,t){return e[t]},e.updatePropertyValue=function(e,t,n,o){e[t]!==o&&(e[t]=o,n(e,t))},e}();t.default=i},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(11),r=n(16),i=n(17);t.default=function(e){return{focus:function(){e.isFocused=!0},blur:function(){e.isFocused=!1},invalidate:function(){e.isInvalid=!0},validate:function(){e.isInvalid=!1},topOut:function(){e.scrollStatus=i.default.AT_TOP},bottomOut:function(){e.scrollStatus=i.default.AT_BOTTOM},scroll:function(){e.scrollStatus=i.default.SCROLLED},makeScrollable:function(){e.isScrollable=!0},makeUnscrollable:function(){e.isScrollable=!1},open:function(t,n,i){if(!e.isDisabled){switch(this.closeOthers(),n){case o.default.NONE:case o.default.TOP:e.bodyStatus=r.default.OPEN_BELOW;break;case o.default.BOTTOM:e.bodyStatus=r.default.OPEN_ABOVE}e.isScrollable=i,e.maxBodyHeight=t,this.scrollToView(e,!0)}},close:function(){e.bodyStatus=r.default.CLOSED,e.focusedIndex=-1},selectOption:function(t,n){void 0===n&&(n=!0);var o=e.getOptionFromIndex(t);t>-1&&(!o||o.isDisabled)||(e.selectedIndex=t,e.isInvalid&&this.validate(),e.isSearching?this.scrollToView(e):n&&this.close())},focusOption:function(t,n){void 0===n&&(n=!1);var o=Math.abs(t-e.focusedIndex)>1;e.focusedIndex=t,n&&this.scrollToView(e,o)},search:function(){e.isSearching=!0},resetSearch:function(){e.isSearching=!1},keying:function(){e.isKeying=!0},resetKeying:function(){e.isKeying=!1},useNative:function(){e.isUseNativeMode=!0}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(0),r=n(67),i=n(18),a=n(19),u=n(68),s=function(){function e(){}return e.mapFromSelect=function(t,n){var o=new u.default(null,n),i=!1;o.name=t.name,o.isDisabled=t.disabled,o.isRequired=t.required,o.isUseNativeMode=n.behavior.useNativeUiOnMobile&&r.default(window.navigator.userAgent);for(var a=0,s=void 0;s=t.children[a];a++)if(0!==a||null===s.getAttribute("data-placeholder"))if(s instanceof HTMLOptionElement)!1===i&&(o.groups.push(e.mapGroup()),i=!0),o.lastGroup.options.push(e.mapOption(s)),s.selected&&(o.selectedIndex=o.totalOptions-1);else{if(!(s instanceof HTMLOptGroupElement))throw new TypeError('[EasyDropDown] Invalid child tag "'+s.tagName+'" found in provided `\n \n'}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default=function(e,t){return''}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default=function(e,t){return'\n \n "+e.humanReadableValue+"\n \n "}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=document.createElement("div");return t.innerHTML=e,t.firstElementChild}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(){this.select=null,this.root=null,this.head=null,this.value=null,this.body=null,this.arrow=null,this.itemsList=null,this.item=[],this.group=[],this.option=[]}return e.prototype.sumItemsHeight=function(e){void 0===e&&(e=1/0);for(var t=0,n=0,o=void 0;(o=this.item[n])&&n!==e;n++)t+=o.offsetHeight;return t},e}();t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(0),i=n(14),r=n(15),a=n(60);function u(e,t){for(var n=Math.max(e.attributes.length,t.attributes.length),o={},a=[],u=0;u1&&d.sort();u=0;for(var c=void 0;c=d[u];u++){var f=o[c],p={type:null,name:c,value:null};f[0]!==f[1]&&(void 0===f[0]?(p.type=i.default.ADD,p.value=f[1]):void 0===f[1]?(p.type=i.default.REMOVE,p.value=""):(p.type=i.default.EDIT,p.value=f[1]),a.push(p))}return{type:r.default.OUTER,attributeChanges:a}}t.default=function e(t,n){var i=-1,s=new a.default;if(t instanceof HTMLSelectElement)return s.type=r.default.NONE,s;if(t instanceof Text&&n instanceof Text)t.textContent===n.textContent?s.type=r.default.NONE:(s.type=r.default.INNER,s.newTextContent=n.textContent);else if(t instanceof HTMLElement&&n instanceof HTMLElement)if(t.tagName!==n.tagName)s.type=r.default.REPLACE,s.newNode=n;else if(t.outerHTML===n.outerHTML)s.type=r.default.NONE;else if(t.innerHTML===n.innerHTML)o.default(s,u(t,n));else if(o.default(s,u(t,n)),s.attributeChanges.length>0?s.type=r.default.FULL:s.type=r.default.INNER,(i=t.childNodes.length)>0&&i===n.childNodes.length)for(var l=0,d=void 0;d=t.childNodes[l];l++)s.childCommands.push(e(d,n.childNodes[l]));else s.newInnerHtml=n.innerHTML;else s.type=r.default.REPLACE,s.newNode=n;return s}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(){return function(){this.newNode=null,this.newInnerHtml="",this.newTextContent="",this.attributeChanges=[],this.childCommands=[],this.index=null}}();t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(14),i=n(15);function r(e,t){var n=window.requestAnimationFrame;t.forEach(function(t){n&&["class","style"].indexOf(t.name)>-1?n(function(){return a(e,t)}):a(e,t)})}function a(e,t){switch(t.type){case o.default.ADD:case o.default.EDIT:e.setAttribute(t.name,t.value);break;case o.default.REMOVE:e.removeAttribute(t.name)}}t.default=function e(t,n){switch(n.type){case i.default.NONE:return t;case i.default.REPLACE:return t.parentElement.replaceChild(n.newNode,t),n.newNode;case i.default.INNER:return t instanceof Text?t.textContent=n.newTextContent:n.childCommands.length>0?n.childCommands.forEach(function(n,o){return e(t.childNodes[o],n)}):t.innerHTML=n.newInnerHtml,t;case i.default.OUTER:return r(t,n.attributeChanges),t;case i.default.FULL:return n.childCommands.length>0?n.childCommands.forEach(function(n,o){return e(t.childNodes[o],n)}):t.innerHTML=n.newInnerHtml,r(t,n.attributeChanges),t}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=100;t.default=function(e,t,n,i){var r=e.value;return window.setInterval(function(){if(e.value!==r){var o=t.getOptionIndexFromValue(e.value);n.selectOption(o,i.behavior.closeOnSelect),n.focusOption(o,!0)}r=e.value},o)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=300;t.default=function(e,t,n){var i=e.outerHTML;return window.setInterval(function(){var o=e.outerHTML;o===i||t.isKeying||n(),i=o},o)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){for(var n=0,o=t;n0?e+r+i:e}Object.defineProperty(t,"__esModule",{value:!0}),t.getScrollTop=o,t.default=function(e,t,n,i){void 0===i&&(i=!1);var r=Math.max(0,n.focusedIndex>-1?n.focusedIndex:n.selectedIndex),a=e.option[r];if(a){var u=i?n.maxBodyHeight/2-a.offsetHeight/2:0,s=o(e.itemsList.scrollTop,a.offsetTop,a.offsetHeight,n.maxBodyHeight,u);s!==e.itemsList.scrollTop&&(e.itemsList.scrollTop=s)}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(0),i=n(67),r=function(){function e(){}return e.proxyActions=function(t,n,r){var a=e.createStateProxy(t,r),u=i.default(a);return o.default(u,n),u},e.createStateProxy=function(t,n){return Object.seal(e.getPropertyDescriptorsFromValue(t,n).reduce(function(e,t){var n=t.key,o=t.get,i=t.set;return Object.defineProperty(e,n,{enumerable:!0,get:o,set:i})},{}))},e.getPropertyDescriptorsFromValue=function(t,n){var o=Object.getPrototypeOf(t);return Object.keys(t).concat(Object.keys(o)).reduce(function(i,r){var a="function"==typeof(Object.getOwnPropertyDescriptor(t,r)||Object.getOwnPropertyDescriptor(o,r)).get;return i.push({get:e.readPropertyValue.bind(null,t,r),set:a?void 0:e.updatePropertyValue.bind(null,t,r,n),key:r}),i},[])},e.readPropertyValue=function(e,t){return e[t]},e.updatePropertyValue=function(e,t,n,o){e[t]!==o&&(e[t]=o,n(e,t))},e}();t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(11),i=n(16),r=n(17);t.default=function(e){return{focus:function(){e.isFocused=!0},blur:function(){e.isFocused=!1},invalidate:function(){e.isInvalid=!0},validate:function(){e.isInvalid=!1},topOut:function(){e.scrollStatus=r.default.AT_TOP},bottomOut:function(){e.scrollStatus=r.default.AT_BOTTOM},scroll:function(){e.scrollStatus=r.default.SCROLLED},makeScrollable:function(){e.isScrollable=!0},makeUnscrollable:function(){e.isScrollable=!1},open:function(t,n,r){if(!e.isDisabled){switch(this.closeOthers(),n){case o.default.NONE:case o.default.TOP:e.bodyStatus=i.default.OPEN_BELOW;break;case o.default.BOTTOM:e.bodyStatus=i.default.OPEN_ABOVE}e.isScrollable=r,e.maxBodyHeight=t,this.scrollToView(e,!0)}},close:function(){e.bodyStatus=i.default.CLOSED,e.focusedIndex=-1},startClickSelecting:function(){e.isClickSelecting=!0},selectOption:function(t,n){void 0===n&&(n=!0);var o=e.getOptionFromIndex(t);e.isClickSelecting=!1,t>-1&&(!o||o.isDisabled)||(e.selectedIndex=t,e.isInvalid&&this.validate(),e.isSearching?this.scrollToView(e):n&&this.close())},focusOption:function(t,n){void 0===n&&(n=!1);var o=Math.abs(t-e.focusedIndex)>1;e.focusedIndex=t,n&&this.scrollToView(e,o)},search:function(){e.isSearching=!0},resetSearch:function(){e.isSearching=!1},keying:function(){e.isKeying=!0},resetKeying:function(){e.isKeying=!1},useNative:function(){e.isUseNativeMode=!0}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(0),i=n(69),r=n(18),a=n(19),u=n(70),s=function(){function e(){}return e.mapFromSelect=function(t,n){var o=new u.default(null,n),r=!1;o.name=t.name,o.isDisabled=t.disabled,o.isRequired=t.required,o.isUseNativeMode=n.behavior.useNativeUiOnMobile&&i.default(window.navigator.userAgent);for(var a=0,s=void 0;s=t.children[a];a++)if(0!==a||null===s.getAttribute("data-placeholder"))if(s instanceof HTMLOptionElement)!1===r&&(o.groups.push(e.mapGroup()),r=!0),o.lastGroup.options.push(e.mapOption(s)),s.selected&&(o.selectedIndex=o.totalOptions-1);else{if(!(s instanceof HTMLOptGroupElement))throw new TypeError('[EasyDropDown] Invalid child tag "'+s.tagName+'" found in provided `` element must exist within a document');\n\n parent.replaceChild(this.dom.root, selectElement);\n\n tempSelect.parentElement.replaceChild(selectElement, tempSelect);\n selectElement.className = this.classNames.select;\n selectElement.setAttribute('aria-hidden', 'true');\n\n this.dom.select = selectElement;\n }\n\n private syncSelectWithValue(value: string): void {\n if (this.dom.select.value === value) return;\n\n const event = new CustomEvent('change', {\n bubbles: true\n });\n\n this.dom.select.value = value;\n\n this.dom.select.dispatchEvent(event);\n }\n\n public static queryDomRefs(dom: Dom, keys: string[] = Object.keys(dom)): Dom {\n return keys\n .reduce((localDom: Dom, ref: string) => {\n const selector = `[data-ref~=\"${ref}\"]`;\n const elements = localDom.root.querySelectorAll(selector);\n\n if (elements.length < 1 || ref === 'root') return localDom;\n\n const element = elements[0];\n const value = localDom[ref];\n\n if (value === null) {\n localDom[ref] = element;\n } else if (Array.isArray(value)) {\n Array.prototype.push.apply(value, elements);\n }\n\n return localDom;\n }, dom);\n }\n}\n\nexport default Renderer;","import ClassNames from '../Config/ClassNames';\nimport composeClassName from '../Shared/Util/composeClassName';\nimport State from '../State/State';\n\nimport body from './body';\nimport head from './head';\n\nconst root = (state: State, classNames: ClassNames) => {\n const className = composeClassName([\n classNames.root,\n [state.isDisabled, classNames.rootDisabled],\n [state.isInvalid, classNames.rootInvalid],\n [state.isOpen, classNames.rootOpen],\n [state.isFocused, classNames.rootFocused],\n [state.hasValue, classNames.rootHasValue],\n [state.isOpenAbove, classNames.rootOpenAbove],\n [state.isOpenBelow, classNames.rootOpenBelow],\n [state.isUseNativeMode, classNames.rootNative]\n ]);\n\n return (`\n \n ${head(state, classNames)}\n ${state.isUseNativeMode ? '' : body(state, classNames)}\n \n `);\n};\n\nexport default root;","import ClassNames from '../Config/ClassNames';\nimport composeClassName from '../Shared/Util/composeClassName';\nimport State from '../State/State';\n\nimport group from './group';\n\nfunction body(state: State, classNames: ClassNames): string {\n const className = composeClassName([\n classNames.body,\n [state.isAtTop, classNames.bodyAtTop],\n [state.isAtBottom, classNames.bodyAtBottom],\n [state.isScrollable, classNames.bodyScrollable]\n ]);\n\n const styleAttr = state.isOpen ?\n `style=\"max-height: ${state.maxBodyHeight}px;\"` : '';\n\n return (`\n \n
\n ${state.groups.map(groupState => group(groupState, state, classNames)).join('')}\n
\n
\n
\n \n `);\n}\n\nexport default body;","import ClassNames from '../Config/ClassNames';\nimport composeClassName from '../Shared/Util/composeClassName';\nimport Group from '../State/Group';\nimport State from '../State/State';\n\nimport option from './option';\n\nconst group = (groupState: Group, state: State, classNames: ClassNames) => {\n const className = composeClassName([\n classNames.group,\n [groupState.isDisabled, classNames.groupDisabled],\n [groupState.hasLabel, classNames.groupHasLabel]\n ]);\n\n return (`\n
\n ${groupState.hasLabel ?\n `
${groupState.label}
` : ''\n }\n ${groupState.options.map(optionState => option(optionState, state, classNames)).join('')}\n
\n `);\n};\n\nexport default group;","import ClassNames from '../Config/ClassNames';\nimport composeClassName from '../Shared/Util/composeClassName';\nimport Option from '../State/Option';\nimport State from '../State/State';\n\nfunction option(optionState: Option, state: State, classNames: ClassNames): string {\n const isSelected = state.selectedOption === optionState;\n\n const className = composeClassName([\n classNames.option,\n [isSelected, classNames.optionSelected],\n [optionState === state.focusedOption, classNames.optionFocused],\n [optionState.isDisabled, classNames.optionDisabled]\n ]);\n\n return (`\n \n ${optionState.label}\n \n `);\n}\n\nexport default option;","import ClassNames from '../Config/ClassNames';\nimport State from '../State/State';\n\nimport arrow from './arrow';\nimport value from './value';\n\nconst head = (state: State, classNames: ClassNames) => (`\n
\n ${value(state, classNames)}\n ${arrow(state, classNames)}\n \n
\n`);\n\nexport default head;","import ClassNames from '../Config/ClassNames';\n\nconst arrow = (_, classNames: ClassNames) => `
`;\n\nexport default arrow;","import ClassNames from '../Config/ClassNames';\nimport State from '../State/State';\n\nconst value = (state: State, classNames: ClassNames) => {\n return (`\n \n ${state.humanReadableValue}\n \n `);\n};\n\nexport default value;","function createDomElementFromHtml(html: string): Element {\n const temp = document.createElement('div');\n\n temp.innerHTML = html;\n\n return temp.firstElementChild;\n}\n\nexport default createDomElementFromHtml;","class Dom {\n public select: HTMLSelectElement = null;\n public root: HTMLDivElement = null;\n public head: HTMLDivElement = null;\n public value: HTMLDivElement = null;\n public body: HTMLDivElement = null;\n public arrow: HTMLDivElement = null;\n public itemsList: HTMLDivElement = null;\n public item: HTMLDivElement[] = [];\n public group: HTMLDivElement[] = [];\n public option: HTMLDivElement[] = [];\n\n public sumItemsHeight(max: number = Infinity): number {\n let totalHeight = 0;\n\n for (let i = 0, item; (item = this.item[i]); i++) {\n if (i === max) break;\n\n totalHeight += item.offsetHeight;\n }\n\n return totalHeight;\n }\n}\n\nexport default Dom;","import merge from 'helpful-merge';\n\nimport AttributeChangeType from './Constants/AttributeChangeType';\nimport DomChangeType from './Constants/DomChangeType';\nimport IAttributeChange from './Interfaces/IAttributeChange';\nimport IPatchCommand from './Interfaces/IPatchCommand';\nimport PatchCommand from './PatchCommand';\n\nfunction domDiff(prev: Node, next: Node): PatchCommand {\n let totalChildNodes = -1;\n\n const command = new PatchCommand();\n\n if (prev instanceof HTMLSelectElement) {\n command.type = DomChangeType.NONE;\n\n return command;\n }\n\n if (prev instanceof Text && next instanceof Text) {\n if (prev.textContent === next.textContent) {\n command.type = DomChangeType.NONE;\n } else {\n command.type = DomChangeType.INNER;\n command.newTextContent = next.textContent;\n }\n } else if (prev instanceof HTMLElement && next instanceof HTMLElement) {\n if (prev.tagName !== next.tagName) {\n command.type = DomChangeType.REPLACE;\n command.newNode = next;\n } else if (prev.outerHTML === next.outerHTML) {\n command.type = DomChangeType.NONE;\n } else if (prev.innerHTML === next.innerHTML) {\n merge(command, diffAttributeChanges(prev, next));\n } else {\n merge(command, diffAttributeChanges(prev, next));\n\n if (command.attributeChanges.length > 0) {\n command.type = DomChangeType.FULL;\n } else {\n command.type = DomChangeType.INNER;\n }\n\n if ((totalChildNodes = prev.childNodes.length) > 0 && totalChildNodes === next.childNodes.length) {\n for (let i = 0, childNode; (childNode = prev.childNodes[i]); i++) {\n command.childCommands.push(domDiff(childNode, next.childNodes[i]));\n }\n } else {\n command.newInnerHtml = next.innerHTML;\n }\n }\n } else {\n command.type = DomChangeType.REPLACE;\n command.newNode = next;\n }\n\n return command;\n}\n\nfunction diffAttributeChanges(prev: HTMLElement, next: HTMLElement): IPatchCommand {\n const totalAttributes = Math.max(prev.attributes.length, next.attributes.length);\n const attributesMap = {};\n const undef = void(0);\n const attributeChanges: IAttributeChange[] = [];\n\n for (let i = 0; i < totalAttributes; i++) {\n const attr1 = prev.attributes[i];\n const attr2 = next.attributes[i];\n\n if (attr1 && attributesMap[attr1.name] === undef) {\n attributesMap[attr1.name] = [];\n }\n\n if (attr2 && attributesMap[attr2.name] === undef) {\n attributesMap[attr2.name] = [];\n }\n\n if (attr1) attributesMap[attr1.name][0] = attr1.value;\n if (attr2) attributesMap[attr2.name][1] = attr2.value;\n }\n\n const keys = Object.keys(attributesMap);\n\n if (keys.length > 1) {\n keys.sort();\n }\n\n for (let i = 0, key; (key = keys[i]); i++) {\n const attr = attributesMap[key];\n\n const change: IAttributeChange = {\n type: null,\n name: key,\n value: null\n };\n\n if (attr[0] === attr[1]) continue;\n\n if (attr[0] === undef) {\n change.type = AttributeChangeType.ADD;\n change.value = attr[1];\n } else if (attr[1] === undef) {\n change.type = AttributeChangeType.REMOVE,\n change.value = '';\n } else {\n change.type = AttributeChangeType.EDIT,\n change.value = attr[1];\n }\n\n attributeChanges.push(change);\n }\n\n return {\n type: DomChangeType.OUTER,\n attributeChanges\n };\n}\n\nexport default domDiff;","import DomChangeType from './Constants/DomChangeType';\nimport IAttributeChange from './Interfaces/IAttributeChange';\n\nclass PatchCommand {\n public type: DomChangeType;\n public newNode: Node = null;\n public newInnerHtml: string = '';\n public newTextContent: string = '';\n public attributeChanges: IAttributeChange[] = [];\n public childCommands: PatchCommand[] = [];\n public index: number = null;\n}\n\nexport default PatchCommand;","import AttributeChangeType from './Constants/AttributeChangeType';\nimport DomChangeType from './Constants/DomChangeType';\nimport IAttributeChange from './Interfaces/IAttributeChange';\nimport PatchCommand from './PatchCommand';\n\nfunction domPatch(node: Node, command: PatchCommand): Node {\n switch (command.type) {\n case DomChangeType.NONE:\n return node;\n case DomChangeType.REPLACE:\n node.parentElement.replaceChild(command.newNode, node);\n\n return command.newNode;\n case DomChangeType.INNER:\n if (node instanceof Text) {\n node.textContent = command.newTextContent;\n } else if (command.childCommands.length > 0) {\n command.childCommands.forEach((childCommand, i) => domPatch(node.childNodes[i], childCommand));\n } else {\n (node as HTMLElement).innerHTML = command.newInnerHtml;\n }\n\n return node;\n case DomChangeType.OUTER:\n patchAttributes(node as HTMLElement, command.attributeChanges);\n\n return node;\n case DomChangeType.FULL:\n if (command.childCommands.length > 0) {\n command.childCommands.forEach((childCommand, i) => domPatch(node.childNodes[i], childCommand));\n } else {\n (node as HTMLElement).innerHTML = command.newInnerHtml;\n }\n\n patchAttributes(node as HTMLElement, command.attributeChanges);\n\n return node;\n }\n}\n\nfunction patchAttributes(el: HTMLElement, attributeChanges: IAttributeChange[]): void {\n const raf = window.requestAnimationFrame;\n\n attributeChanges.forEach(change => {\n if (raf && ['class', 'style'].indexOf(change.name) > -1) {\n raf(() => patchAttribute(el, change));\n } else {\n patchAttribute(el, change);\n }\n });\n}\n\nfunction patchAttribute(el: HTMLElement, change: IAttributeChange): void {\n switch (change.type) {\n case AttributeChangeType.ADD:\n case AttributeChangeType.EDIT:\n el.setAttribute(change.name, change.value);\n\n break;\n case AttributeChangeType.REMOVE:\n el.removeAttribute(change.name);\n\n break;\n }\n}\n\nexport default domPatch;","import Config from '../../Config/Config';\nimport IActions from '../../State/Interfaces/IActions';\nimport State from '../../State/State';\n\nconst POLL_INTERVAL_DURATION = 100;\n\nfunction pollForSelectChange(\n selectElement: HTMLSelectElement,\n state: State,\n actions: IActions,\n config: Config\n): number {\n let lastValue: string = selectElement.value;\n\n const pollIntervalId = window.setInterval(() => {\n if (selectElement.value !== lastValue) {\n const selectedIndex = state.getOptionIndexFromValue(selectElement.value);\n\n actions.selectOption(selectedIndex, config.behavior.closeOnSelect);\n actions.focusOption(selectedIndex, true);\n }\n\n lastValue = selectElement.value;\n }, POLL_INTERVAL_DURATION);\n\n return pollIntervalId;\n}\n\nexport default pollForSelectChange;","import State from '../../State/State';\n\nconst POLL_INTERVAL_DURATION = 300;\n\nfunction pollForSelectMutation(selectElement: HTMLSelectElement, state: State, handleMutation: () => void): number {\n let lastOuterHtml: string = selectElement.outerHTML;\n\n const pollIntervalId = window.setInterval(() => {\n const {outerHTML} = selectElement;\n\n if (outerHTML !== lastOuterHtml && !state.isKeying) {\n handleMutation();\n }\n\n lastOuterHtml = outerHTML;\n }, POLL_INTERVAL_DURATION);\n\n return pollIntervalId;\n}\n\nexport default pollForSelectMutation;","import Easydropdown from '../../Easydropdown/Easydropdown';\n\nfunction closeOthers(thisInstance: Easydropdown, cache: Easydropdown[]): void {\n for (const instance of cache) {\n if (instance !== thisInstance) instance.actions.close();\n }\n}\n\nexport default closeOthers;","import Timers from '../../Easydropdown/Timers';\nimport Dom from '../../Renderer/Dom';\nimport State from '../../State/State';\n\nfunction getScrollTop(\n currentScrollTop: number,\n optionOffsetTop: number,\n optionHeight: number,\n bodyHeight: number,\n scrollOffset: number\n): number {\n const max = currentScrollTop + bodyHeight;\n\n let remainder: number;\n\n if (optionOffsetTop < currentScrollTop) {\n return optionOffsetTop - scrollOffset;\n } else if ((remainder = (optionOffsetTop + optionHeight) - max) > 0) {\n return currentScrollTop + remainder + scrollOffset;\n }\n\n return currentScrollTop;\n}\n\nfunction scrollToView(dom: Dom, timers: Timers, state: State, scrollToMiddle: boolean = false): void {\n const index = Math.max(0, state.focusedIndex > -1 ? state.focusedIndex : state.selectedIndex);\n const option = dom.option[index];\n\n if (!option) return;\n\n const offset = scrollToMiddle ? (state.maxBodyHeight / 2) - (option.offsetHeight / 2) : 0;\n\n const scrollTop = getScrollTop(\n dom.itemsList.scrollTop,\n option.offsetTop,\n option.offsetHeight,\n state.maxBodyHeight,\n offset\n );\n\n if (scrollTop === dom.itemsList.scrollTop) return;\n\n dom.itemsList.scrollTop = scrollTop;\n}\n\nexport {\n getScrollTop,\n scrollToView as default\n};","import merge from 'helpful-merge';\n\nimport IActions from './Interfaces/IActions';\nimport IOnAction from './Interfaces/IOnAction';\nimport IPropertyDescriptor from './Interfaces/IPropertyDescriptor';\nimport resolveActions from './resolveActions';\nimport State from './State';\n\nclass StateManager {\n public static proxyActions(state: State, injectedActions: any, onAction: IOnAction): IActions {\n const stateProxy = StateManager.createStateProxy(state, onAction);\n const actions = resolveActions(stateProxy);\n\n merge(actions, injectedActions);\n\n return actions;\n }\n\n private static createStateProxy(state: State, onAction: IOnAction): State {\n return Object.seal(\n StateManager\n .getPropertyDescriptorsFromValue(state, onAction)\n .reduce((proxy, {key, get, set}) => Object.defineProperty(\n proxy,\n key,\n {\n enumerable: true,\n get,\n set\n }\n ), {})\n );\n }\n\n private static getPropertyDescriptorsFromValue(state: State, onAction: IOnAction): IPropertyDescriptor[] {\n const prototype = Object.getPrototypeOf(state);\n const allKeys = Object.keys(state).concat(Object.keys(prototype));\n\n return allKeys\n .reduce((localDescriptors, key) => {\n const propertyDescriptor =\n Object.getOwnPropertyDescriptor(state, key) ||\n Object.getOwnPropertyDescriptor(prototype, key);\n\n const isAccessorProperty = typeof propertyDescriptor.get === 'function';\n\n localDescriptors.push({\n get: StateManager.readPropertyValue.bind(null, state, key),\n set: isAccessorProperty ?\n void 0 : StateManager.updatePropertyValue.bind(null, state, key, onAction),\n key\n });\n\n return localDescriptors;\n }, []);\n }\n\n private static readPropertyValue(state: State, key: string): any {\n return state[key];\n }\n\n private static updatePropertyValue(state: State, key: string, onAction: IOnAction, value: any): void {\n if (state[key] === value) return;\n\n state[key] = value;\n\n onAction(state, key);\n }\n}\n\nexport default StateManager;","import CollisionType from '../Shared/Util/Constants/CollisionType';\n\nimport BodyStatus from './Constants/BodyStatus';\nimport ScrollStatus from './Constants/ScrollStatus';\nimport IActions from './Interfaces/IActions';\nimport State from './State';\n\nconst resolveActions = (state: State): IActions => ({\n focus(): void {\n state.isFocused = true;\n },\n\n blur(): void {\n state.isFocused = false;\n },\n\n invalidate(): void {\n state.isInvalid = true;\n },\n\n validate(): void {\n state.isInvalid = false;\n },\n\n topOut(): void {\n state.scrollStatus = ScrollStatus.AT_TOP;\n },\n\n bottomOut(): void {\n state.scrollStatus = ScrollStatus.AT_BOTTOM;\n },\n\n scroll(): void {\n state.scrollStatus = ScrollStatus.SCROLLED;\n },\n\n makeScrollable(): void {\n state.isScrollable = true;\n },\n\n makeUnscrollable(): void {\n state.isScrollable = false;\n },\n\n open(\n this: IActions,\n maxBodyHeight: number,\n collisionType: CollisionType,\n isScrollable: boolean\n ): void {\n if (state.isDisabled) return;\n\n this.closeOthers();\n\n switch (collisionType) {\n case CollisionType.NONE:\n case CollisionType.TOP:\n state.bodyStatus = BodyStatus.OPEN_BELOW;\n\n break;\n case CollisionType.BOTTOM:\n state.bodyStatus = BodyStatus.OPEN_ABOVE;\n\n break;\n }\n\n state.isScrollable = isScrollable;\n state.maxBodyHeight = maxBodyHeight;\n\n this.scrollToView(state, true);\n },\n\n close(): void {\n state.bodyStatus = BodyStatus.CLOSED;\n state.focusedIndex = -1;\n },\n\n selectOption(this: IActions, index: number, close = true): void {\n const optionAtIndex = state.getOptionFromIndex(index);\n\n if (index > -1 && (!optionAtIndex || optionAtIndex.isDisabled)) return;\n\n state.selectedIndex = index;\n\n if (state.isInvalid) {\n this.validate();\n }\n\n if (state.isSearching) {\n this.scrollToView(state);\n } else if (close) {\n this.close();\n }\n },\n\n focusOption(this: IActions, index: number, shouldScrollToView: boolean = false): void {\n const scrollToMiddle = Math.abs(index - state.focusedIndex) > 1;\n\n state.focusedIndex = index;\n\n if (shouldScrollToView) {\n this.scrollToView(state, scrollToMiddle);\n }\n },\n\n search(): void {\n state.isSearching = true;\n },\n\n resetSearch(): void {\n state.isSearching = false;\n },\n\n keying(): void {\n state.isKeying = true;\n },\n\n resetKeying(): void {\n state.isKeying = false;\n },\n\n useNative(): void {\n state.isUseNativeMode = true;\n }\n});\n\nexport default resolveActions;","import merge from 'helpful-merge';\n\nimport Config from '../Config/Config';\nimport isMobilePlatform from '../Shared/Util/isMobilePlatform';\n\nimport Group from './Group';\nimport Option from './Option';\nimport State from './State';\n\nclass StateMapper {\n public static mapFromSelect(selectElement: HTMLSelectElement, config: Config): State {\n const state = new State(null, config);\n\n let isWithinGroup = false;\n\n state.name = selectElement.name;\n state.isDisabled = selectElement.disabled;\n state.isRequired = selectElement.required;\n\n state.isUseNativeMode = (\n config.behavior.useNativeUiOnMobile &&\n isMobilePlatform(window.navigator.userAgent)\n );\n\n for (let i = 0, child: Element; (child = selectElement.children[i]); i++) {\n if (i === 0 && child.getAttribute('data-placeholder') !== null) {\n state.placeholder = child.textContent;\n (child as HTMLOptionElement).value = '';\n\n continue;\n }\n\n if (child instanceof HTMLOptionElement) {\n if (isWithinGroup === false) {\n state.groups.push(StateMapper.mapGroup());\n\n isWithinGroup = true;\n }\n\n state.lastGroup.options.push(StateMapper.mapOption(child));\n\n if (child.selected) state.selectedIndex = state.totalOptions - 1;\n } else if (child instanceof HTMLOptGroupElement) {\n isWithinGroup = true;\n\n state.groups.push(StateMapper.mapGroup(child));\n\n for (let j = 0, groupChild: Element; (groupChild = child.children[j]); j++) {\n state.lastGroup.options.push(\n StateMapper.mapOption(\n groupChild as HTMLOptionElement,\n child as HTMLOptGroupElement\n )\n );\n\n if ((groupChild as HTMLOptionElement).selected) state.selectedIndex = state.totalOptions - 1;\n }\n\n isWithinGroup = false;\n } else {\n throw new TypeError(\n `[EasyDropDown] Invalid child tag \"${child.tagName}\" found in provided \\``\n * element (for example, adding or removing an option).\n */\n\n public refresh: () => void;\n\n /**\n * Destroys the instance by removing all EasyDropDown-generated\n * elements from the DOM, and unbinding all event handlers.\n * The underlying select is returned to the root position.\n */\n\n public destroy: () => void;\n\n /**\n * An accessor property allowing writing to and reading\n * from the dropdown's value.\n */\n\n public value: string;\n\n constructor(implementation: Easydropdown) {\n this.open = implementation.open.bind(implementation);\n this.close = implementation.close.bind(implementation);\n this.refresh = implementation.refresh.bind(implementation);\n this.destroy = implementation.destroy.bind(implementation);\n\n Object.defineProperties(this, {\n value: {\n get: () => implementation.value,\n set: (nextValue: string) => implementation.value = nextValue\n }\n });\n }\n}\n\nexport default EasydropdownFacade;"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://easydropdown/webpack/universalModuleDefinition","webpack://easydropdown/webpack/bootstrap","webpack://easydropdown/./node_modules/helpful-merge/dist/index.js","webpack://easydropdown/./src/Shared/Util/dispatchOpen.ts","webpack://easydropdown/./src/Shared/Util/composeClassName.ts","webpack://easydropdown/./node_modules/helpful-merge/dist/Constants/ArrayStrategy.js","webpack://easydropdown/./src/Shared/Util/closestParent.ts","webpack://easydropdown/./src/Events/Constants/Selectors.ts","webpack://easydropdown/./src/Shared/Util/killSelectReaction.ts","webpack://easydropdown/./src/Easydropdown/cache.ts","webpack://easydropdown/./node_modules/helpful-merge/dist/merge.js","webpack://easydropdown/./node_modules/helpful-merge/dist/Messages.js","webpack://easydropdown/./src/Config/Config.ts","webpack://easydropdown/./src/Shared/Util/Constants/CollisionType.ts","webpack://easydropdown/./src/Events/Constants/KeyCodes.ts","webpack://easydropdown/./src/Events/Handlers/handleWindowClick.ts","webpack://easydropdown/./src/Renderer/Constants/AttributeChangeType.ts","webpack://easydropdown/./src/Renderer/Constants/DomChangeType.ts","webpack://easydropdown/./src/State/Constants/BodyStatus.ts","webpack://easydropdown/./src/State/Constants/ScrollStatus.ts","webpack://easydropdown/./src/State/Group.ts","webpack://easydropdown/./src/State/Option.ts","webpack://easydropdown/./src/umd.ts","webpack://easydropdown/./node_modules/custom-event-polyfill/polyfill.js","webpack://easydropdown/./src/Shared/Polyfills/Element.matches.ts","webpack://easydropdown/./src/Easydropdown/factory.ts","webpack://easydropdown/./src/Easydropdown/Easydropdown.ts","webpack://easydropdown/./node_modules/helpful-merge/dist/Config.js","webpack://easydropdown/./node_modules/helpful-merge/dist/deriveCustomTypeInstance.js","webpack://easydropdown/./node_modules/helpful-merge/dist/FluentMerge.js","webpack://easydropdown/./node_modules/helpful-merge/dist/handleMergeError.js","webpack://easydropdown/./src/Config/Behavior.ts","webpack://easydropdown/./src/Config/Callbacks.ts","webpack://easydropdown/./src/Config/ClassNames.ts","webpack://easydropdown/./src/Events/bindEvents.ts","webpack://easydropdown/./src/Shared/Util/throttle.ts","webpack://easydropdown/./src/Events/EventBinding.ts","webpack://easydropdown/./src/Events/getEventsList.ts","webpack://easydropdown/./src/Events/Handlers/handleBodyClick.ts","webpack://easydropdown/./src/Events/Handlers/handleBodyMousedown.ts","webpack://easydropdown/./src/Events/Handlers/handleBodyMouseover.ts","webpack://easydropdown/./src/Events/Handlers/handleHeadClick.ts","webpack://easydropdown/./src/Shared/Util/detectBodyCollision.ts","webpack://easydropdown/./src/Events/Handlers/handleItemsListScroll.ts","webpack://easydropdown/./src/Events/Handlers/handleSelectBlur.ts","webpack://easydropdown/./src/Events/Handlers/handleSelectFocus.ts","webpack://easydropdown/./src/Events/Handlers/handleSelectInvalid.ts","webpack://easydropdown/./src/Events/Handlers/handleSelectKeydown.ts","webpack://easydropdown/./src/Events/Handlers/handleSelectKeydownDown.ts","webpack://easydropdown/./src/Events/Handlers/handleSelectKeydownUp.ts","webpack://easydropdown/./src/Events/Handlers/handleSelectKeypress.ts","webpack://easydropdown/./src/Renderer/Renderer.ts","webpack://easydropdown/./src/Components/root.ts","webpack://easydropdown/./src/Components/body.ts","webpack://easydropdown/./src/Components/group.ts","webpack://easydropdown/./src/Components/option.ts","webpack://easydropdown/./src/Components/head.ts","webpack://easydropdown/./src/Components/arrow.ts","webpack://easydropdown/./src/Components/value.ts","webpack://easydropdown/./src/Shared/Util/createDomElementFromHtml.ts","webpack://easydropdown/./src/Renderer/Dom.ts","webpack://easydropdown/./src/Renderer/domDiff.ts","webpack://easydropdown/./src/Renderer/PatchCommand.ts","webpack://easydropdown/./src/Renderer/domPatch.ts","webpack://easydropdown/./src/Shared/Util/pollForSelectChange.ts","webpack://easydropdown/./src/Shared/Util/pollForSelectMutation.ts","webpack://easydropdown/./src/State/InjectedActions/closeOthers.ts","webpack://easydropdown/./src/State/InjectedActions/scrollToView.ts","webpack://easydropdown/./src/State/StateManager.ts","webpack://easydropdown/./src/State/resolveActions.ts","webpack://easydropdown/./src/State/StateMapper.ts","webpack://easydropdown/./src/Shared/Util/isMobilePlatform.ts","webpack://easydropdown/./src/State/State.ts","webpack://easydropdown/./src/Easydropdown/Timers.ts","webpack://easydropdown/./src/Easydropdown/EasydropdownFacade.ts"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","merge_1","ArrayStrategy_1","ArrayStrategy","default","detectBodyCollision_1","dispatchOpen","injectedDetectBodyCollision","actions","config","dom","collisionData","maxVisibleItems","maxVisibleItemsOverride","behavior","isScrollable","item","length","maxBodyHeight","sumItemsHeight","open","type","boundDispatchOpen","tokens","reduce","classNames","token","push","predicate","className","join","el","selector","includeSelf","parent","parentNode","matches","document","body","OPTION","select","_a","timers","clearTimeout","keyingTimeoutId","keying","setTimeout","resetKeying","disabled","focus","Config_1","deriveCustomTypeInstance_1","FluentMerge_1","handleMergeError_1","Messages","merge","target","source","options","isClientSide","sourceKeys","deep","PUSH","REPLACE","indexOf","arrayStrategy","RangeError","INVALID_ARRAY_STRATEGY","TypeError","TYPE_ERROR_TARGET","TYPE_ERROR_SOURCE","Array","isArray","apply","toString","getOwnPropertyNames","_i","sourceKeys_1","descriptor","getOwnPropertyDescriptor","set","includeReadOnly","includeNonEmurable","Node","documentElement","useReferenceIfArray","useReferenceIfTargetUnset","err","errorMessage","preserveTypeIfTargetUnset","keys","forEach","method","args","arguments","createFluent","MERGE_ERROR","offender","suggestion","strategy","Behavior_1","Callbacks_1","ClassNames_1","Config","this","callbacks","seal","CollisionType","UP","DOWN","SPACE","ENTER","ESC","_","state","isOpen","close","blur","AttributeChangeType","DomChangeType","BodyStatus","ScrollStatus","Group","label","isDisabled","Option","factory_1","ce","CustomEvent","cancelable","preventDefault","defaultPrevented","Error","e","event","params","evt","origPrevent","bubbles","detail","undefined","createEvent","initCustomEvent","Event","Element","msMatchesSelector","cache_1","Easydropdown_1","EasydropdownFacade_1","selectElementOrSelector","selectElement","querySelector","HTMLSelectElement","multiple","cache_2","cachedInstance","instance","factoryFn","decoratedFactory","all","selects","querySelectorAll","destroy","slice","helpful_merge_1","bindEvents_1","Renderer_1","dispatchOpen_1","pollForSelectChange_1","pollForSelectMutation_1","closeOthers_1","scrollToView_1","StateManager_1","StateMapper_1","Timers_1","Easydropdown","mapFromSelect","renderer","render","proxyActions","closeOthers","scrollToView","handleStateUpdate","eventBindings","pollChangeIntervalId","liveUpdates","pollMutationIntervalId","refresh","nextValue","update","group","option","queryDomRefs","clear","binding","unbind","cacheIndex","splice","cb","onOpen","onClose","onSelect","constructor","FluentMerge","sources","to","from","with","exec","_this","getTotalMatching","possibleKey","offendingKey","longer","shorter","leftPointer","leftInnerPointer","leftTotalMatching","lastCommonIndex","rightPointer","rightInnerPointer","rightTotalMatching","longerLastIndex","shorterLastIndex","Math","min","message","isSealed","isExtensible","reducer","offendingKeyLower","currBestMatch","currKey","totalMatching","toLowerCase","delta","abs","primer","Infinity","bestMatch","Behavior","showPlaceholderWhenOpen","openOnFocus","closeOnSelect","useNativeUiOnMobile","loop","clampMaxVisibleItems","Callbacks","ClassNames","rootOpen","rootOpenAbove","rootOpenBelow","rootDisabled","rootInvalid","rootFocused","rootHasValue","rootNative","gradientTop","gradientBottom","head","arrow","bodyScrollable","bodyAtTop","bodyAtBottom","itemsList","groupDisabled","groupHasLabel","groupLabel","optionDisabled","optionFocused","optionSelected","throttle_1","EventBinding_1","getEventsList_1","bindEvent","handlerParams","eventBindingRaw","eventBinding","boundHandler","handler","throttle","addEventListener","map","delay","timerId","last","now","Date","later","difference","EventBinding","debounce","passive","removeEventListener","handleBodyClick_1","handleBodyMousedown_1","handleBodyMouseover_1","handleHeadClick_1","handleItemsListScroll_1","handleSelectBlur_1","handleSelectFocus_1","handleSelectInvalid_1","handleSelectKeydown_1","handleSelectKeypress_1","handleWindowClick_1","handleWindowClick_2","closestParent_1","Selectors","stopPropagation","optionIndex","selectOption","startClickSelecting","isKeying","focusOption","isUseNativeMode","isClosed","CollisionType_1","CLEARSPACE","mapCollisionData","deltaTop","deltaBottom","maxHeight","itemHeight","NONE","largestDelta","max","TOP","BOTTOM","floor","bbHead","getBoundingClientRect","wh","innerHeight","top","bottom","_b","offsetHeight","scrollHeight","scrollTop","topOut","bottomOut","scroll","isClickSelecting","invalidate","killSelectReaction_1","KeyCodes","handleSelectKeydownDown_1","handleSelectKeydownUp_1","keyCode","isSearching","focusedIndex","metaKey","selectedIndex","iterations","incrementAmount","round","totalOptions","focusedOption","SEARCH_RESET_DURATION","searchResetDuration","includes","searchTimeoutId","search","resetSearch","root_1","createDomElementFromHtml_1","Dom_1","domDiff_1","domPatch_1","Renderer","html","rootElement","injectSelect","nextHtml","nextRoot","diffCommand","syncSelectWithValue","classList","remove","parentElement","replaceChild","tempSelect","setAttribute","dispatchEvent","localDom","ref","elements","element","composeClassName_1","body_1","head_1","isInvalid","isFocused","hasValue","isOpenAbove","isOpenBelow","isRequired","group_1","isAtTop","isAtBottom","styleAttr","groups","groupState","option_1","hasLabel","optionState","isSelected","selectedOption","arrow_1","value_1","isPlaceholderShown","humanReadableValue","temp","createElement","innerHTML","firstElementChild","Dom","totalHeight","AttributeChangeType_1","DomChangeType_1","PatchCommand_1","diffAttributeChanges","prev","next","totalAttributes","attributes","attributesMap","attributeChanges","attr1","attr2","sort","attr","change","ADD","REMOVE","EDIT","OUTER","domDiff","totalChildNodes","command","Text","textContent","INNER","newTextContent","HTMLElement","tagName","newNode","outerHTML","FULL","childNodes","childNode","childCommands","newInnerHtml","PatchCommand","index","patchAttributes","raf","requestAnimationFrame","patchAttribute","removeAttribute","domPatch","node","childCommand","POLL_INTERVAL_DURATION","lastValue","setInterval","getOptionIndexFromValue","handleMutation","lastOuterHtml","thisInstance","cache","getScrollTop","currentScrollTop","optionOffsetTop","optionHeight","bodyHeight","scrollOffset","remainder","scrollToMiddle","offset","offsetTop","resolveActions_1","StateManager","injectedActions","onAction","stateProxy","createStateProxy","getPropertyDescriptorsFromValue","proxy","getPrototypeOf","concat","localDescriptors","isAccessorProperty","readPropertyValue","updatePropertyValue","BodyStatus_1","ScrollStatus_1","validate","scrollStatus","AT_TOP","AT_BOTTOM","SCROLLED","makeScrollable","makeUnscrollable","collisionType","bodyStatus","OPEN_BELOW","OPEN_ABOVE","CLOSED","optionAtIndex","getOptionFromIndex","shouldScrollToView","useNative","isMobilePlatform_1","Group_1","Option_1","State_1","StateMapper","isWithinGroup","required","navigator","userAgent","child","children","getAttribute","HTMLOptionElement","mapGroup","lastGroup","mapOption","selected","HTMLOptGroupElement","j","groupChild","placeholder","isParentGroupDisabled","isIos","test","isAndroid","isOperaMini","isWindowsPhone","State","stateRaw","groupRaw","optionRaw","total","hasPlaceholder","Boolean","find","groupStartIndex","_c","Timers","clearInterval","EasydropdownFacade","implementation","defineProperties"],"mappings":"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","file":"easydropdown.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"easydropdown\"] = factory();\n\telse\n\t\troot[\"easydropdown\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 20);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar merge_1 = require(\"./merge\");\nvar ArrayStrategy_1 = require(\"./Constants/ArrayStrategy\");\nexports.ArrayStrategy = ArrayStrategy_1.default;\nexports.default = merge_1.default;\n//# sourceMappingURL=index.js.map","import Config from '../../Config/Config';\nimport Dom from '../../Renderer/Dom';\nimport IActions from '../../State/Interfaces/IActions';\n\nimport detectBodyCollision from './detectBodyCollision';\nimport IDispatchOpen from './Interfaces/IDispatchOpen';\n\nfunction dispatchOpen(\n injectedDetectBodyCollision,\n actions: IActions,\n config: Config,\n dom: Dom\n): void {\n const collisionData = injectedDetectBodyCollision(dom, config);\n\n const maxVisibleItems = collisionData.maxVisibleItemsOverride > -1 ?\n collisionData.maxVisibleItemsOverride : config.behavior.maxVisibleItems;\n\n const isScrollable = dom.item.length > maxVisibleItems;\n const maxBodyHeight = dom.sumItemsHeight(maxVisibleItems);\n\n actions.open(maxBodyHeight, collisionData.type, isScrollable);\n}\n\nconst boundDispatchOpen: IDispatchOpen = dispatchOpen.bind(null, detectBodyCollision);\n\nexport {\n boundDispatchOpen as default,\n dispatchOpen\n};","function composeClassName(tokens: Array): string {\n return tokens\n .reduce((classNames, token) => {\n if (typeof token === 'string') classNames.push(token);\n else {\n const [predicate, className] = token;\n\n if (predicate) classNames.push(className);\n }\n\n return classNames;\n }, [])\n .join(' ');\n}\n\nexport default composeClassName;","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ArrayStrategy;\n(function (ArrayStrategy) {\n ArrayStrategy[\"PUSH\"] = \"PUSH\";\n ArrayStrategy[\"REPLACE\"] = \"REPLACE\";\n})(ArrayStrategy || (ArrayStrategy = {}));\nexports.default = ArrayStrategy;\n//# sourceMappingURL=ArrayStrategy.js.map","/**\n * Returns the closest parent of a given element matching the\n * provided selector, optionally including the element itself.\n */\n\nfunction closestParent(\n el: HTMLElement,\n selector: string,\n includeSelf: boolean = false\n): HTMLElement {\n let parent = el.parentNode as HTMLElement;\n\n if (includeSelf && el.matches(selector)) {\n return el;\n }\n\n while (parent && parent !== document.body) {\n if (parent.matches && parent.matches(selector)) {\n return parent;\n } else if (parent.parentNode) {\n parent = parent.parentNode as HTMLElement;\n } else {\n return null;\n }\n }\n\n return null;\n}\n\nexport default closestParent;","export const OPTION = '[data-ref~=\"option\"]';","import IHandlerParams from '../../Events/Interfaces/IHandlerParams';\n\nconst killSelectReaction = (select: HTMLSelectElement, {actions, timers}: IHandlerParams): void => {\n const keyingResetDuration = 100;\n\n window.clearTimeout(timers.keyingTimeoutId);\n\n actions.keying();\n\n timers.keyingTimeoutId = window.setTimeout(() => actions.resetKeying(), keyingResetDuration);\n\n select.disabled = true;\n\n setTimeout(() => {\n select.disabled = false;\n select.focus();\n });\n};\n\nexport default killSelectReaction;","import Easydropdown from './Easydropdown';\n\nconst cache: Easydropdown[] = [];\n\nexport default cache;","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Config_1 = require(\"./Config\");\nvar ArrayStrategy_1 = require(\"./Constants/ArrayStrategy\");\nvar deriveCustomTypeInstance_1 = require(\"./deriveCustomTypeInstance\");\nvar FluentMerge_1 = require(\"./FluentMerge\");\nvar handleMergeError_1 = require(\"./handleMergeError\");\nvar Messages = require(\"./Messages\");\nfunction merge(target, source, options) {\n if (options === void 0) { options = null; }\n var isClientSide = typeof window !== 'undefined';\n var sourceKeys = [];\n var config;\n if (options instanceof Config_1.default) {\n config = options;\n }\n else {\n config = new Config_1.default();\n }\n if (typeof options === 'boolean' && options === true) {\n config.deep = true;\n }\n else if (options && config !== options && typeof options === 'object') {\n merge(config, options);\n if ([ArrayStrategy_1.default.PUSH, ArrayStrategy_1.default.REPLACE].indexOf(config.arrayStrategy) < 0) {\n throw RangeError(Messages.INVALID_ARRAY_STRATEGY(config.arrayStrategy));\n }\n }\n if (!target || typeof target !== 'object') {\n throw new TypeError(Messages.TYPE_ERROR_TARGET(target));\n }\n if (!source || typeof source !== 'object') {\n throw new TypeError(Messages.TYPE_ERROR_SOURCE(source));\n }\n if (Array.isArray(source)) {\n if (config.arrayStrategy === ArrayStrategy_1.default.PUSH) {\n // Merge arrays via push()\n target.push.apply(target, source);\n return target;\n }\n for (var i = 0; i < source.length; i++) {\n sourceKeys.push(i.toString());\n }\n }\n else {\n sourceKeys = Object.getOwnPropertyNames(source);\n }\n for (var _i = 0, sourceKeys_1 = sourceKeys; _i < sourceKeys_1.length; _i++) {\n var key = sourceKeys_1[_i];\n var descriptor = Object.getOwnPropertyDescriptor(source, key);\n // Skip read-only properties\n if (typeof descriptor.get === 'function' && !descriptor.set && !config.includeReadOnly)\n continue;\n // Skip non-enumerable properties\n if (!descriptor.enumerable && !config.includeNonEmurable)\n continue;\n if (!config.deep ||\n typeof source[key] !== 'object' ||\n (isClientSide && source[key] instanceof window.Node) ||\n (isClientSide && source[key] === window.document.body) ||\n (isClientSide && source[key] === window.document.documentElement) ||\n source[key] === null ||\n (Array.isArray(source[key]) && config.useReferenceIfArray) ||\n (!target[key] && config.useReferenceIfTargetUnset)) {\n // If:\n // - Shallow merge\n // - All non-object primatives\n // - , , or DOM Nodes\n // - Null pointers\n // - Arrays, if `useReferenceIfArray` set\n // - Target prop null or undefined and `useRererenceIfTargetUnset` set\n try {\n target[key] = source[key];\n }\n catch (err) {\n handleMergeError_1.default(err, target, key, config.errorMessage);\n }\n }\n else {\n // Deep merge objects/arrays\n if (!Object.prototype.hasOwnProperty.call(target, key) || target[key] === null) {\n // If property does not exist on target, instantiate an empty\n // object, custom type or array to merge into\n try {\n target[key] = Array.isArray(source[key]) ?\n [] : config.preserveTypeIfTargetUnset ?\n deriveCustomTypeInstance_1.default(source[key]) : {};\n }\n catch (err) {\n handleMergeError_1.default(err, target, key, config.errorMessage);\n }\n }\n // Recursively deep copy objects or arrays\n merge(target[key], source[key], config);\n }\n }\n return target;\n}\nvar createFluent = function (method) { return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return (_a = new FluentMerge_1.default())[method].apply(_a, args);\n var _a;\n}; };\nObject\n .keys(FluentMerge_1.default.prototype)\n .forEach(function (method) { return merge[method] = createFluent(method); });\nexports.default = merge;\n//# sourceMappingURL=merge.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MERGE_ERROR = function (offender, suggestion) {\n if (suggestion === void 0) { suggestion = ''; }\n return \"Unknown property \\\"\" + offender + \"\\\"\" + (suggestion ? \". Did you mean \\\"\" + suggestion + \"\\\"?\" : '');\n};\nexports.TYPE_ERROR_TARGET = function (target) {\n return \"[Helpful Merge] Target \\\"\" + target + \"\\\" must be a valid object\";\n};\nexports.TYPE_ERROR_SOURCE = function (source) {\n return \"[Helpful Merge] Source \\\"\" + source + \"\\\" must be a valid object\";\n};\nexports.INVALID_ARRAY_STRATEGY = function (strategy) {\n return \"[Helpful Merge] Invalid array strategy \\\"\" + strategy + \"\\\"\";\n};\n//# sourceMappingURL=Messages.js.map","import Behavior from './Behavior';\nimport Callbacks from './Callbacks';\nimport ClassNames from './ClassNames';\nimport IConfig from './Interfaces/IConfig';\n\nclass Config implements IConfig {\n public callbacks = new Callbacks();\n public classNames = new ClassNames();\n public behavior = new Behavior();\n\n constructor() {\n Object.seal(this);\n }\n}\n\nexport default Config;","enum CollisionType {\n NONE = 'NONE',\n TOP = 'TOP',\n BOTTOM = 'BOTTOM'\n}\n\nexport default CollisionType;","export const UP = 38;\nexport const DOWN = 40;\nexport const SPACE = 32;\nexport const ENTER = 13;\nexport const ESC = 27;","import IHandlerParams from '../Interfaces/IHandlerParams';\n\nfunction handleWindowClick(_, {state, actions, dom}: IHandlerParams): void {\n if (!state.isOpen) return;\n\n actions.close();\n\n dom.select.blur();\n}\n\nexport default handleWindowClick;","enum AttributeChangeType {\n ADD = 'ADD',\n EDIT = 'EDIT',\n REMOVE = 'REMOVE'\n}\n\nexport default AttributeChangeType;","export enum DomChangeType {\n NONE = 'NONE',\n FULL = 'FULL',\n REPLACE = 'REPLACE',\n INNER = 'INNER',\n OUTER = 'OUTER'\n}\n\nexport default DomChangeType;","enum BodyStatus {\n CLOSED = 'CLOSED',\n OPEN_ABOVE = 'OPEN_ABOVE',\n OPEN_BELOW = 'OPEN_BELOW'\n}\n\nexport default BodyStatus;","enum ScrollStatus {\n AT_TOP = 'AT_TOP',\n SCROLLED = 'SCROLLED',\n AT_BOTTOM = 'AT_BOTTOM'\n}\n\nexport default ScrollStatus;","import Option from './Option';\n\nclass Group {\n public label: string = '';\n public options: Option[] = [];\n public isDisabled: boolean = false;\n\n public get totalOptions(): number {\n return this.options.length;\n }\n\n public get hasLabel(): boolean {\n return this.label !== '';\n }\n}\n\nexport default Group;","class Option {\n public label: string = '';\n public value: string = '';\n public isDisabled: boolean = false;\n}\n\nexport default Option;","import 'custom-event-polyfill';\n\nimport './Shared/Polyfills/Element.matches';\n\nimport factory from './Easydropdown/factory';\n\nmodule.exports = factory;","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\n(function() {\n if (typeof window === 'undefined') {\n return;\n }\n\n try {\n var ce = new window.CustomEvent('test', { cancelable: true });\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n } catch (e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(\n event,\n params.bubbles,\n params.cancelable,\n params.detail\n );\n origPrevent = evt.preventDefault;\n evt.preventDefault = function() {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function() {\n return true;\n }\n });\n } catch (e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n }\n})();\n","if (!Element.prototype.matches) {\n Element.prototype.matches = (Element.prototype as any).msMatchesSelector;\n}","import IConfig from '../Config/Interfaces/IConfig';\n\nimport cache from './cache';\nimport Easydropdown from './Easydropdown';\nimport EasydropdownFacade from './EasydropdownFacade';\nimport IFactory from './Interfaces/IFactory';\n\nfunction factory(\n selectElementOrSelector: (HTMLSelectElement|string),\n options: IConfig = {}\n): EasydropdownFacade {\n let selectElement = selectElementOrSelector;\n\n if (typeof selectElementOrSelector === 'string') {\n selectElement = document.querySelector(selectElementOrSelector) as HTMLSelectElement;\n }\n\n if (!(selectElement instanceof HTMLSelectElement)) {\n throw new TypeError('[EasyDropDown] Invalid select element provided');\n }\n\n if (selectElement.multiple) {\n throw new Error(\n '[EasyDropDown] EasyDropDown does not support the `multiple`' +\n ' attribute on select elements.'\n );\n }\n\n for (const cachedInstance of cache) {\n if (cachedInstance.selectElement === selectElement) {\n return new EasydropdownFacade(cachedInstance);\n }\n }\n\n const instance = new Easydropdown(selectElement, options);\n\n // @ts-ignore\n\n cache.push(instance);\n\n return new EasydropdownFacade(instance);\n}\n\nfunction decorateFactory(factoryFn: any): IFactory {\n factoryFn.all = (options: IConfig = {}) => {\n const selects = document.querySelectorAll('select');\n\n Array.prototype.forEach.call(selects, select => {\n const instance = factory(select, options);\n\n return instance;\n });\n };\n\n factoryFn.destroy = () => {\n const cacheCopy = cache.slice();\n\n cacheCopy.forEach(instance => instance.destroy());\n };\n\n return factoryFn;\n}\n\nconst decoratedFactory = decorateFactory(factory);\n\nexport default decoratedFactory;","import merge from 'helpful-merge';\n\nimport Config from '../Config/Config';\nimport ICallback from '../Config/Interfaces/ICallback';\nimport IConfig from '../Config/Interfaces/IConfig';\nimport ISelectCallback from '../Config/Interfaces/ISelectCallback';\nimport bindEvents from '../Events/bindEvents';\nimport EventBinding from '../Events/EventBinding';\nimport Dom from '../Renderer/Dom';\nimport Renderer from '../Renderer/Renderer';\nimport dispatchOpen from '../Shared/Util/dispatchOpen';\nimport pollForSelectChange from '../Shared/Util/pollForSelectChange';\nimport pollForSelectMutation from '../Shared/Util/pollForSelectMutation';\nimport closeOthers from '../State/InjectedActions/closeOthers';\nimport scrollToView from '../State/InjectedActions/scrollToView';\nimport IActions from '../State/Interfaces/IActions';\nimport State from '../State/State';\nimport StateManager from '../State/StateManager';\nimport StateMapper from '../State/StateMapper';\n\nimport cache from './cache';\nimport Timers from './Timers';\n\nclass Easydropdown {\n public actions: IActions;\n\n private config: Config;\n private state: State;\n private dom: Dom;\n private eventBindings: EventBinding[];\n private renderer: Renderer;\n private timers: Timers;\n\n constructor(selectElement: HTMLSelectElement, options: IConfig) {\n this.config = merge(new Config(), options, true);\n this.state = StateMapper.mapFromSelect(selectElement, this.config);\n this.renderer = new Renderer(this.config.classNames);\n this.dom = this.renderer.render(this.state, selectElement);\n this.timers = new Timers();\n\n this.actions = StateManager.proxyActions(this.state, {\n closeOthers: closeOthers.bind(null, this, cache),\n scrollToView: scrollToView.bind(null, this.dom, this.timers)\n }, this.handleStateUpdate.bind(this));\n\n this.eventBindings = bindEvents({\n actions: this.actions,\n config: this.config,\n dom: this.dom,\n state: this.state,\n timers: this.timers\n });\n\n this.timers.pollChangeIntervalId = pollForSelectChange(this.dom.select, this.state, this.actions, this.config);\n\n if (this.config.behavior.liveUpdates) {\n this.timers.pollMutationIntervalId = pollForSelectMutation(\n this.dom.select,\n this.state,\n this.refresh.bind(this)\n );\n }\n }\n\n public get selectElement(): HTMLSelectElement {\n return this.dom.select;\n }\n\n public get value(): string {\n return this.state.value;\n }\n\n public set value(nextValue: string) {\n if (typeof nextValue !== 'string') {\n throw new TypeError('[EasyDropDown] Provided value not a valid string');\n }\n\n this.dom.select.value = nextValue;\n }\n\n public open(): void {\n dispatchOpen(this.actions, this.config, this.dom);\n }\n\n public close(): void {\n this.actions.close();\n }\n\n public refresh(): void {\n this.state = merge(\n this.state,\n StateMapper.mapFromSelect(this.dom.select, this.config)\n );\n\n this.renderer.update(this.state);\n\n this.dom.group.length = this.dom.option.length = this.dom.item.length = 0;\n\n Renderer.queryDomRefs(this.dom, ['group', 'option', 'item']);\n }\n\n public destroy(): void {\n this.timers.clear();\n this.eventBindings.forEach(binding => binding.unbind());\n this.renderer.destroy();\n\n const cacheIndex = cache.indexOf(this);\n\n cache.splice(cacheIndex, 1);\n }\n\n private handleStateUpdate(state: State, key: keyof State): void {\n const {callbacks} = this.config;\n\n let cb: ICallback;\n\n this.renderer.update(state, key);\n\n switch (key) {\n case 'bodyStatus':\n if (state.isOpen) {\n cb = callbacks.onOpen;\n } else {\n cb = callbacks.onClose;\n }\n\n if (typeof cb === 'function') cb();\n\n break;\n case 'selectedIndex':\n cb = callbacks.onSelect;\n\n if (typeof cb === 'function') (cb as ISelectCallback)(state.value);\n }\n }\n}\n\nexport default Easydropdown;","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ArrayStrategy_1 = require(\"./Constants/ArrayStrategy\");\nvar Messages = require(\"./Messages\");\nvar Config = /** @class */ (function () {\n function Config() {\n this.deep = false;\n this.useReferenceIfTargetUnset = false;\n this.useReferenceIfArray = false;\n this.preserveTypeIfTargetUnset = false;\n this.includeReadOnly = false;\n this.includeNonEmurable = false;\n this.arrayStrategy = ArrayStrategy_1.default.REPLACE;\n this.errorMessage = Messages.MERGE_ERROR;\n Object.seal(this);\n }\n return Config;\n}());\nexports.default = Config;\n//# sourceMappingURL=Config.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction deriveCustoTypeInstance(_a) {\n var constructor = _a.constructor;\n if (typeof constructor === 'function' && constructor !== Object) {\n return new constructor();\n }\n return {};\n}\nexports.default = deriveCustoTypeInstance;\n//# sourceMappingURL=deriveCustomTypeInstance.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar merge_1 = require(\"./merge\");\nvar FluentMerge = /** @class */ (function () {\n function FluentMerge() {\n this.target = null;\n this.sources = [];\n this.config = {};\n }\n /**\n * Supplies a fluent merge instance with a target object to merge into and return.\n */\n FluentMerge.prototype.to = function (target) {\n this.target = target;\n return this;\n };\n /**\n * Supplies a fluent merge instance with one or more source objects to merge from, in right to left order.\n */\n FluentMerge.prototype.from = function () {\n var sources = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n sources[_i] = arguments[_i];\n }\n this.sources = sources;\n return this;\n };\n /**\n * Supplies a fluent merge instance with a configuration object of one or more options.\n */\n FluentMerge.prototype.with = function (options) {\n this.config = options;\n return this;\n };\n /**\n * Executes a fluent merge instance, merging all provided sources into the\n * target, as per any provided configuration, and returning a reference to\n * the target.\n */\n FluentMerge.prototype.exec = function () {\n var _this = this;\n return this.sources.reduce(function (target, source) { return merge_1.default(target, source, _this.config); }, this.target || {});\n };\n return FluentMerge;\n}());\nexports.default = FluentMerge;\n//# sourceMappingURL=FluentMerge.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction handleMergeError(err, target, offendingKey, message) {\n // Rethrow if any of the following:\n // - offending key already exists on target\n // - object not sealed\n // - is extensible\n // - error not a TypeError\n if (Object.hasOwnProperty.call(target, offendingKey) ||\n !Object.isSealed(target) ||\n Object.isExtensible(target) ||\n !(err instanceof TypeError))\n throw err;\n var reducer = reduceBestMatch.bind(null, offendingKey, offendingKey.toLowerCase());\n var primer = { key: '', delta: Infinity, totalMatching: 0 };\n // Iterate through keys in target, for each key, compare with\n // the offending key. Greatest number of matching characters wins.\n var bestMatch = Object.keys(target).reduce(reducer, primer);\n var suggestion = bestMatch && bestMatch.totalMatching > 1 ? bestMatch.key : '';\n throw new TypeError(message(offendingKey, suggestion));\n}\n/**\n * Compares current key with current best match.\n */\nfunction reduceBestMatch(offendingKeyLower, offendingKey, currBestMatch, currKey) {\n var totalMatching = getTotalMatching(currKey.toLowerCase(), offendingKeyLower);\n var delta = Math.abs(currKey.length - offendingKey.length);\n if (totalMatching > currBestMatch.totalMatching ||\n (totalMatching === currBestMatch.totalMatching && delta < currBestMatch.delta)) {\n // If a greater number of matching characters, or the same\n // number, but a lesser delta, usurp the best match\n return { key: currKey, delta: delta, totalMatching: totalMatching };\n }\n return currBestMatch;\n}\n/**\n * Returns the number of common, consecutive characters\n * between two strings.\n */\nfunction getTotalMatching(possibleKey, offendingKey) {\n var longer = possibleKey.length > offendingKey.length ? possibleKey : offendingKey;\n var shorter = longer === possibleKey ? offendingKey : possibleKey;\n var leftPointer = 0;\n var leftInnerPointer = 0;\n var leftTotalMatching = 0;\n var lastCommonIndex = -1;\n for (; leftPointer < longer.length; leftPointer++) {\n while (leftTotalMatching === 0 &&\n longer[leftPointer] !== shorter[leftInnerPointer] &&\n leftInnerPointer < shorter.length) {\n // No match at present, move innerPointer through all possible\n // indices until a match is found\n leftInnerPointer++;\n }\n if (longer[leftPointer] === shorter[leftInnerPointer]) {\n // Match found\n if (lastCommonIndex !== leftPointer - 1) {\n // If beginning of a new match, reset total common\n leftTotalMatching = 0;\n }\n lastCommonIndex = leftPointer;\n leftTotalMatching++;\n leftInnerPointer++;\n // Whole word matched, end\n if (leftTotalMatching === shorter.length)\n break;\n }\n else if (leftTotalMatching > 1) {\n // No match, but at least two common characters found, end\n break;\n }\n else {\n // No match at this index, reset\n leftTotalMatching = leftInnerPointer = 0;\n }\n }\n lastCommonIndex = -1;\n var rightPointer = 0;\n var rightInnerPointer = 0;\n var rightTotalMatching = 0;\n var longerLastIndex = longer.length - 1;\n var shorterLastIndex = shorter.length - 1;\n // As above, but from right to left\n for (; rightPointer < longer.length - leftPointer; rightPointer++) {\n while (rightTotalMatching === 0 &&\n longer[longerLastIndex - rightPointer] !== shorter[shorterLastIndex - rightInnerPointer] &&\n rightInnerPointer < shorter.length) {\n rightInnerPointer++;\n }\n if (longer[longerLastIndex - rightPointer] === shorter[shorterLastIndex - rightInnerPointer]) {\n if (lastCommonIndex !== rightPointer - 1)\n rightTotalMatching = 0;\n lastCommonIndex = rightPointer;\n rightTotalMatching++;\n rightInnerPointer++;\n }\n else if (rightTotalMatching > 1) {\n break;\n }\n else {\n rightTotalMatching = rightInnerPointer = 0;\n }\n }\n return Math.min(shorter.length, leftTotalMatching + rightTotalMatching);\n}\nexports.getTotalMatching = getTotalMatching;\nexports.default = handleMergeError;\n//# sourceMappingURL=handleMergeError.js.map","import IBehavior from './Interfaces/IBehavior';\n\nclass Behavior implements IBehavior {\n public showPlaceholderWhenOpen: boolean = false;\n public openOnFocus: boolean = false;\n public closeOnSelect: boolean = true;\n public useNativeUiOnMobile: boolean = true;\n public loop: boolean = false;\n public clampMaxVisibleItems: boolean = true;\n public liveUpdates: boolean = false;\n public maxVisibleItems: number = 15;\n\n constructor() {\n Object.seal(this);\n }\n}\n\nexport default Behavior;","import ICallback from './Interfaces/ICallback';\n\nclass Callbacks {\n public onOpen: ICallback = null;\n public onClose: ICallback = null;\n public onSelect: ICallback = null;\n\n constructor() {\n Object.seal(this);\n }\n}\n\nexport default Callbacks;","import IClassNames from './Interfaces/IClassNames';\n\nclass ClassNames implements IClassNames {\n public root: string = 'edd-root';\n public rootOpen: string = 'edd-root-open';\n public rootOpenAbove: string = 'edd-root-open-above';\n public rootOpenBelow: string = 'edd-root-open-below';\n public rootDisabled: string = 'edd-root-disabled';\n public rootInvalid: string = 'edd-root-invalid';\n public rootFocused: string = 'edd-root-focused';\n public rootHasValue: string = 'edd-root-has-value';\n public rootNative: string = 'edd-root-native';\n public gradientTop: string = 'edd-gradient-top';\n public gradientBottom: string = 'edd-gradient-bottom';\n public head: string = 'edd-head';\n public value: string = 'edd-value';\n public arrow: string = 'edd-arrow';\n public select: string = 'edd-select';\n public body: string = 'edd-body';\n public bodyScrollable: string = 'edd-body-scrollable';\n public bodyAtTop: string = 'edd-body-at-top';\n public bodyAtBottom: string = 'edd-body-at-bottom';\n public itemsList: string = 'edd-items-list';\n public group: string = 'edd-group';\n public groupDisabled: string = 'edd-group-disabled';\n public groupHasLabel: string = 'edd-group-has-label';\n public groupLabel: string = 'edd-group-label';\n public option: string = 'edd-option';\n public optionDisabled: string = 'edd-option-disabled';\n public optionFocused: string = 'edd-option-focused';\n public optionSelected: string = 'edd-option-selected';\n\n constructor() {\n Object.seal(this);\n }\n}\n\nexport default ClassNames;","import throttle from '../Shared/Util/throttle';\n\nimport EventBinding from './EventBinding';\nimport getEventsList from './getEventsList';\nimport IEventBinding from './Interfaces/IEventBinding';\nimport IHandlerParams from './Interfaces/IHandlerParams';\n\nfunction bindEvent(handlerParams: IHandlerParams, eventBindingRaw: IEventBinding): EventBinding {\n const eventBinding = new EventBinding(eventBindingRaw);\n\n if (!eventBinding.target) return eventBinding;\n\n const boundHandler = (e) => eventBinding.handler(e, handlerParams);\n\n if (eventBinding.throttle > 0) {\n eventBinding.boundHandler = throttle(boundHandler, eventBinding.throttle);\n } else {\n eventBinding.boundHandler = boundHandler;\n }\n\n eventBinding.target.addEventListener(eventBinding.type, eventBinding.boundHandler);\n\n return eventBinding;\n}\n\nfunction bindEvents(handlerParams: IHandlerParams): EventBinding[] {\n return getEventsList(handlerParams.dom).map(bindEvent.bind(null, handlerParams));\n}\n\nexport {\n bindEvents as default,\n bindEvent\n};","function throttle(\n handler: (...args: any[]) => void,\n delay: number\n): (...args: any[]) => void {\n let timerId = null;\n let last: number = -Infinity;\n\n return function(...args): void {\n const now = Date.now();\n\n const later = () => {\n timerId = null;\n\n handler.apply(this, args);\n\n last = now;\n };\n\n const difference = now - last;\n\n if (difference >= delay) {\n later();\n } else {\n clearTimeout(timerId);\n\n timerId = setTimeout(later, delay - difference);\n }\n };\n}\n\nexport default throttle;","import merge from 'helpful-merge';\n\nimport IEventBinding from './Interfaces/IEventBinding';\nimport IEventHandler from './Interfaces/IEventHandler';\n\nclass EventBinding implements IEventBinding {\n public type: string = '';\n public target: HTMLElement = null;\n public debounce: number = 0;\n public throttle: number = 0;\n public handler: IEventHandler = null;\n public boundHandler: EventListener = null;\n public passive: boolean = false;\n\n constructor(eventBindingRaw: IEventBinding|string) {\n merge(this, eventBindingRaw);\n\n Object.seal(this);\n }\n\n public unbind(): void {\n if (!this.target) return;\n\n this.target.removeEventListener(this.type, this.boundHandler);\n }\n}\n\nexport default EventBinding;","import Dom from '../Renderer/Dom';\n\nimport handleBodyClick from './Handlers/handleBodyClick';\nimport handleBodyMousedown from './Handlers/handleBodyMousedown';\nimport handleBodyMouseover from './Handlers/handleBodyMouseover';\nimport handleHeadClick from './Handlers/handleHeadClick';\nimport handleItemsListScroll from './Handlers/handleItemsListScroll';\nimport handleSelectBlur from './Handlers/handleSelectBlur';\nimport handleSelectFocus from './Handlers/handleSelectFocus';\nimport handleSelectInvalid from './Handlers/handleSelectInvalid';\nimport handleSelectKeydown from './Handlers/handleSelectKeydown';\nimport handleSelectKeypress from './Handlers/handleSelectKeypress';\nimport handleWindowClick from './Handlers/handleWindowClick';\nimport handleWindowResize from './Handlers/handleWindowClick';\nimport IEventBinding from './Interfaces/IEventBinding';\n\nconst getEventsList = (dom: Dom): IEventBinding[] => [\n {\n target: dom.head,\n type: 'click',\n handler: handleHeadClick\n },\n {\n target: dom.body,\n type: 'mousedown',\n handler: handleBodyMousedown\n },\n {\n target: dom.body,\n type: 'click',\n handler: handleBodyClick\n },\n {\n target: dom.body,\n type: 'mouseover',\n handler: handleBodyMouseover\n },\n {\n target: dom.itemsList,\n type: 'scroll',\n handler: handleItemsListScroll\n },\n {\n target: dom.select,\n type: 'keydown',\n handler: handleSelectKeydown\n },\n {\n target: dom.select,\n type: 'invalid',\n handler: handleSelectInvalid\n },\n {\n target: dom.select,\n type: 'keypress',\n handler: handleSelectKeypress\n },\n {\n target: dom.select,\n type: 'focus',\n handler: handleSelectFocus\n },\n {\n target: dom.select,\n type: 'blur',\n handler: handleSelectBlur\n },\n {\n target: document.documentElement,\n type: 'click',\n handler: handleWindowClick\n },\n {\n target: window,\n type: 'resize',\n handler: handleWindowResize,\n throttle: 100\n }\n];\n\nexport default getEventsList;","import closestParent from '../../Shared/Util/closestParent';\nimport * as Selectors from '../Constants/Selectors';\nimport IHandlerParams from '../Interfaces/IHandlerParams';\n\nfunction handleBodyClick(e: Event, {state, actions, dom, config}: IHandlerParams): void {\n e.stopPropagation();\n\n const option = closestParent(e.target as HTMLElement, Selectors.OPTION, true);\n\n if (!option) return;\n\n const optionIndex = Array.prototype.indexOf.call(dom.option, option);\n\n actions.selectOption(optionIndex, config.behavior.closeOnSelect);\n}\n\nexport default handleBodyClick;","import closestParent from '../../Shared/Util/closestParent';\nimport * as Selectors from '../Constants/Selectors';\nimport IHandlerParams from '../Interfaces/IHandlerParams';\n\nfunction handleBodyMousedown(e: Event, {actions}: IHandlerParams): void {\n e.stopPropagation();\n\n const option = closestParent(e.target as HTMLElement, Selectors.OPTION, true);\n\n if (!option) return;\n\n actions.startClickSelecting();\n}\n\nexport default handleBodyMousedown;","import closestParent from '../../Shared/Util/closestParent';\nimport * as Selectors from '../Constants/Selectors';\nimport IHandlerParams from '../Interfaces/IHandlerParams';\n\nfunction handleBodyMouseover(e: Event, {state, actions, dom}: IHandlerParams): void {\n e.stopPropagation();\n\n const option = closestParent(e.target as HTMLElement, Selectors.OPTION, true);\n\n if (!option || state.isKeying) return;\n\n const optionIndex = Array.prototype.indexOf.call(dom.option, option);\n\n actions.focusOption(optionIndex);\n}\n\nexport default handleBodyMouseover;","import dispatchOpen from '../../Shared/Util/dispatchOpen';\nimport IHandlerParams from '../Interfaces/IHandlerParams';\n\nfunction handleHeadClick(e: MouseEvent, {state, actions, dom, config}: IHandlerParams): void {\n if (state.isUseNativeMode) return;\n\n e.stopPropagation();\n\n if (state.isClosed) {\n dispatchOpen(actions, config, dom);\n\n dom.select.focus();\n } else {\n actions.close();\n }\n}\n\nexport default handleHeadClick;","import Config from '../../Config/Config';\nimport Dom from '../../Renderer/Dom';\n\nimport CollisionType from './Constants/CollisionType';\nimport ICollisionData from './Interfaces/ICollisionData';\n\nconst CLEARSPACE = 10;\n\nfunction mapCollisionData(deltaTop, deltaBottom, maxHeight, itemHeight): ICollisionData {\n let type = CollisionType.NONE;\n let maxVisibleItemsOverride = -1;\n\n if (deltaTop <= maxHeight && deltaBottom <= maxHeight) {\n const largestDelta = Math.max(deltaBottom, deltaTop);\n\n type = deltaTop < deltaBottom ? CollisionType.TOP : CollisionType.BOTTOM;\n maxVisibleItemsOverride = Math.floor(largestDelta / itemHeight);\n } else if (deltaTop <= maxHeight) {\n type = CollisionType.TOP;\n } else if (deltaBottom <= maxHeight) {\n type = CollisionType.BOTTOM;\n }\n\n return {type, maxVisibleItemsOverride};\n}\n\nfunction detectBodyCollision(dom: Dom, config: Config): ICollisionData {\n const bbHead = dom.head.getBoundingClientRect();\n const wh = window.innerHeight;\n const deltaTop = bbHead.top - CLEARSPACE;\n const deltaBottom = wh - bbHead.bottom - CLEARSPACE;\n\n if (dom.option.length < 1) return {\n type: CollisionType.NONE,\n maxVisibleItemsOverride: -1\n };\n\n const maxVisibleItems = Math.min(config.behavior.maxVisibleItems, dom.item.length);\n const maxHeight = dom.sumItemsHeight(maxVisibleItems);\n const itemHeight = dom.sumItemsHeight(1);\n\n return mapCollisionData(deltaTop, deltaBottom, maxHeight, itemHeight);\n}\n\nexport {\n detectBodyCollision as default,\n mapCollisionData\n};","import IHandlerParams from '../Interfaces/IHandlerParams';\n\nfunction handleItemsListScroll(e: Event, {state, actions, dom}: IHandlerParams): void {\n e.stopPropagation();\n\n const {offsetHeight, scrollHeight, scrollTop} = dom.itemsList;\n\n if (scrollTop === 0) {\n actions.topOut();\n } else if (scrollTop === scrollHeight - offsetHeight) {\n actions.bottomOut();\n } else {\n actions.scroll();\n }\n}\n\nexport default handleItemsListScroll;","import IHandlerParams from '../Interfaces/IHandlerParams';\n\nfunction handleSelectBlur(e: Event, {actions, state, config}: IHandlerParams): void {\n if (state.isKeying) return;\n\n actions.blur();\n\n if (config.behavior.openOnFocus && !state.isClickSelecting) actions.close();\n}\n\nexport default handleSelectBlur;","import dispatchOpen from '../../Shared/Util/dispatchOpen';\nimport IHandlerParams from '../Interfaces/IHandlerParams';\n\nfunction handleSelectFocus(e: Event, {actions, config, dom, state}: IHandlerParams): void {\n actions.focus();\n\n if (config.behavior.openOnFocus && !state.isUseNativeMode) {\n dispatchOpen(actions, config, dom);\n }\n}\n\nexport default handleSelectFocus;","import IHandlerParams from '../Interfaces/IHandlerParams';\n\nfunction handleSelectInvalid(e: Event, {actions, config, dom}: IHandlerParams): void {\n actions.invalidate();\n}\n\nexport default handleSelectInvalid;","import dispatchOpen from '../../Shared/Util/dispatchOpen';\nimport killSelectReaction from '../../Shared/Util/killSelectReaction';\nimport * as KeyCodes from '../Constants/KeyCodes';\nimport IHandlerParams from '../Interfaces/IHandlerParams';\n\nimport handleSelectKeydownDown from './handleSelectKeydownDown';\nimport handleSelectKeydownUp from './handleSelectKeydownUp';\n\nfunction handleSelectKeydown(e: KeyboardEvent, handlerParams: IHandlerParams): void {\n const {keyCode, target} = e;\n const {state, actions, dom, config} = handlerParams;\n\n if (state.isUseNativeMode || state.isDisabled) return;\n\n switch (keyCode) {\n case KeyCodes.DOWN:\n handleSelectKeydownDown(e, handlerParams);\n\n break;\n case KeyCodes.UP:\n handleSelectKeydownUp(e, handlerParams);\n\n break;\n case KeyCodes.SPACE:\n if (state.isSearching) {\n e.stopPropagation();\n\n return;\n }\n\n case KeyCodes.ENTER:\n e.stopPropagation();\n e.preventDefault();\n\n killSelectReaction(target as HTMLSelectElement, handlerParams);\n\n if (state.isOpen) {\n actions.selectOption(state.focusedIndex, config.behavior.closeOnSelect);\n } else {\n dispatchOpen(actions, config, dom);\n }\n\n break;\n case KeyCodes.ESC:\n actions.close();\n\n break;\n }\n}\n\nexport default handleSelectKeydown;","import dispatchOpen from '../../Shared/Util/dispatchOpen';\nimport killSelectReaction from '../../Shared/Util/killSelectReaction';\nimport IHandlerParams from '../Interfaces/IHandlerParams';\n\nfunction handleSelectKeydownDown(\n e: KeyboardEvent,\n handlerParams: IHandlerParams\n): void {\n const {metaKey, target} = e;\n const {state, dom, actions, config} = handlerParams;\n\n let focusedIndex: number = state.focusedIndex > -1 ?\n state.focusedIndex : state.selectedIndex;\n\n let iterations: number = 0;\n let incrementAmount: number = 1;\n\n e.preventDefault();\n\n killSelectReaction(target as HTMLSelectElement, handlerParams);\n\n if (metaKey) {\n incrementAmount = Math.round(\n Math.max(state.totalOptions / 2, config.behavior.maxVisibleItems)\n );\n }\n\n do {\n focusedIndex += incrementAmount;\n\n incrementAmount = 1;\n\n if (focusedIndex >= state.totalOptions) {\n focusedIndex = config.behavior.loop ? 0 : state.totalOptions - 1;\n }\n\n actions.focusOption(focusedIndex, true);\n\n iterations++;\n }\n while (\n state.focusedOption &&\n state.focusedOption.isDisabled &&\n iterations <= state.totalOptions\n );\n\n if (state.isClosed) {\n dispatchOpen(actions, config, dom);\n\n return;\n }\n}\n\nexport default handleSelectKeydownDown;","import dispatchOpen from '../../Shared/Util/dispatchOpen';\nimport killSelectReaction from '../../Shared/Util/killSelectReaction';\nimport IHandlerParams from '../Interfaces/IHandlerParams';\n\nfunction handleSelectKeydownUp(\n e: KeyboardEvent,\n handlerParams: IHandlerParams\n): void {\n const {metaKey, target} = e;\n const {state, config, dom, actions} = handlerParams;\n\n let focusedIndex = state.focusedIndex > -1 ?\n state.focusedIndex : state.selectedIndex;\n\n let iterations = 0;\n let incrementAmount: number = 1;\n\n e.preventDefault();\n\n killSelectReaction(target as HTMLSelectElement, handlerParams);\n\n if (metaKey) {\n incrementAmount = Math.round(\n Math.max(state.totalOptions / 2, config.behavior.maxVisibleItems)\n );\n }\n\n do {\n focusedIndex -= incrementAmount;\n\n incrementAmount = 1;\n\n if (focusedIndex < 0) {\n focusedIndex = config.behavior.loop ? state.totalOptions - 1 : 0;\n }\n\n actions.focusOption(focusedIndex, true);\n\n iterations++;\n }\n while (\n state.focusedOption &&\n state.focusedOption.isDisabled &&\n iterations < state.totalOptions\n );\n\n if (state.isClosed) {\n dispatchOpen(actions, config, dom);\n }\n}\n\nexport default handleSelectKeydownUp;","import * as KeyCodes from '../Constants/KeyCodes';\nimport IHandlerParams from '../Interfaces/IHandlerParams';\n\nconst SEARCH_RESET_DURATION = 1200;\n\nfunction handleSelectKeypress(\n {keyCode}: KeyboardEvent,\n {actions, timers, state}: IHandlerParams,\n searchResetDuration = SEARCH_RESET_DURATION\n): void {\n if (state.isUseNativeMode || [KeyCodes.UP, KeyCodes.DOWN].includes(keyCode)) return;\n\n window.clearTimeout(timers.searchTimeoutId);\n\n actions.search();\n\n timers.searchTimeoutId = window.setTimeout(() => actions.resetSearch(), searchResetDuration);\n}\n\nexport default handleSelectKeypress;","import root from '../Components/root';\nimport ClassNames from '../Config/ClassNames';\nimport createDomElementFromHtml from '../Shared/Util/createDomElementFromHtml';\nimport State from '../State/State';\n\nimport Dom from './Dom';\nimport domDiff from './domDiff';\nimport domPatch from './domPatch';\n\nclass Renderer {\n public classNames: ClassNames;\n public dom: Dom;\n\n constructor(classNames: ClassNames) {\n this.dom = new Dom();\n this.classNames = classNames;\n }\n\n public render(state: State, selectElement: HTMLSelectElement): Dom {\n const html = root(state, this.classNames);\n const rootElement = createDomElementFromHtml(html) as HTMLDivElement;\n\n this.dom = new Dom();\n this.dom.root = rootElement;\n\n this.dom.option.length = this.dom.group.length = 0;\n\n Renderer.queryDomRefs(this.dom);\n\n this.injectSelect(selectElement);\n\n return this.dom;\n }\n\n public update(state: State, key?: keyof State): void {\n const nextHtml = root(state, this.classNames);\n const nextRoot = createDomElementFromHtml(nextHtml) as HTMLDivElement;\n const diffCommand = domDiff(this.dom.root, nextRoot);\n\n domPatch(this.dom.root, diffCommand);\n\n if (key === 'selectedIndex') {\n this.syncSelectWithValue(state.value);\n }\n }\n\n public destroy(): void {\n this.dom.select.classList.remove(this.classNames.select);\n\n try {\n this.dom.root.parentElement.replaceChild(this.dom.select, this.dom.root);\n } catch (err) { /**/ }\n }\n\n private injectSelect(selectElement: HTMLSelectElement): void {\n const parent = selectElement.parentElement;\n const tempSelect = this.dom.select;\n\n if (!parent) throw new Error('[EasyDropDown] The provided `\n \n`);\n\nexport default head;","import ClassNames from '../Config/ClassNames';\n\nconst arrow = (_, classNames: ClassNames) => `
`;\n\nexport default arrow;","import ClassNames from '../Config/ClassNames';\nimport State from '../State/State';\n\nconst value = (state: State, classNames: ClassNames) => {\n return (`\n \n ${state.humanReadableValue}\n \n `);\n};\n\nexport default value;","function createDomElementFromHtml(html: string): Element {\n const temp = document.createElement('div');\n\n temp.innerHTML = html;\n\n return temp.firstElementChild;\n}\n\nexport default createDomElementFromHtml;","class Dom {\n public select: HTMLSelectElement = null;\n public root: HTMLDivElement = null;\n public head: HTMLDivElement = null;\n public value: HTMLDivElement = null;\n public body: HTMLDivElement = null;\n public arrow: HTMLDivElement = null;\n public itemsList: HTMLDivElement = null;\n public item: HTMLDivElement[] = [];\n public group: HTMLDivElement[] = [];\n public option: HTMLDivElement[] = [];\n\n public sumItemsHeight(max: number = Infinity): number {\n let totalHeight = 0;\n\n for (let i = 0, item; (item = this.item[i]); i++) {\n if (i === max) break;\n\n totalHeight += item.offsetHeight;\n }\n\n return totalHeight;\n }\n}\n\nexport default Dom;","import merge from 'helpful-merge';\n\nimport AttributeChangeType from './Constants/AttributeChangeType';\nimport DomChangeType from './Constants/DomChangeType';\nimport IAttributeChange from './Interfaces/IAttributeChange';\nimport IPatchCommand from './Interfaces/IPatchCommand';\nimport PatchCommand from './PatchCommand';\n\nfunction domDiff(prev: Node, next: Node): PatchCommand {\n let totalChildNodes = -1;\n\n const command = new PatchCommand();\n\n if (prev instanceof HTMLSelectElement) {\n command.type = DomChangeType.NONE;\n\n return command;\n }\n\n if (prev instanceof Text && next instanceof Text) {\n if (prev.textContent === next.textContent) {\n command.type = DomChangeType.NONE;\n } else {\n command.type = DomChangeType.INNER;\n command.newTextContent = next.textContent;\n }\n } else if (prev instanceof HTMLElement && next instanceof HTMLElement) {\n if (prev.tagName !== next.tagName) {\n command.type = DomChangeType.REPLACE;\n command.newNode = next;\n } else if (prev.outerHTML === next.outerHTML) {\n command.type = DomChangeType.NONE;\n } else if (prev.innerHTML === next.innerHTML) {\n merge(command, diffAttributeChanges(prev, next));\n } else {\n merge(command, diffAttributeChanges(prev, next));\n\n if (command.attributeChanges.length > 0) {\n command.type = DomChangeType.FULL;\n } else {\n command.type = DomChangeType.INNER;\n }\n\n if ((totalChildNodes = prev.childNodes.length) > 0 && totalChildNodes === next.childNodes.length) {\n for (let i = 0, childNode; (childNode = prev.childNodes[i]); i++) {\n command.childCommands.push(domDiff(childNode, next.childNodes[i]));\n }\n } else {\n command.newInnerHtml = next.innerHTML;\n }\n }\n } else {\n command.type = DomChangeType.REPLACE;\n command.newNode = next;\n }\n\n return command;\n}\n\nfunction diffAttributeChanges(prev: HTMLElement, next: HTMLElement): IPatchCommand {\n const totalAttributes = Math.max(prev.attributes.length, next.attributes.length);\n const attributesMap = {};\n const undef = void(0);\n const attributeChanges: IAttributeChange[] = [];\n\n for (let i = 0; i < totalAttributes; i++) {\n const attr1 = prev.attributes[i];\n const attr2 = next.attributes[i];\n\n if (attr1 && attributesMap[attr1.name] === undef) {\n attributesMap[attr1.name] = [];\n }\n\n if (attr2 && attributesMap[attr2.name] === undef) {\n attributesMap[attr2.name] = [];\n }\n\n if (attr1) attributesMap[attr1.name][0] = attr1.value;\n if (attr2) attributesMap[attr2.name][1] = attr2.value;\n }\n\n const keys = Object.keys(attributesMap);\n\n if (keys.length > 1) {\n keys.sort();\n }\n\n for (let i = 0, key; (key = keys[i]); i++) {\n const attr = attributesMap[key];\n\n const change: IAttributeChange = {\n type: null,\n name: key,\n value: null\n };\n\n if (attr[0] === attr[1]) continue;\n\n if (attr[0] === undef) {\n change.type = AttributeChangeType.ADD;\n change.value = attr[1];\n } else if (attr[1] === undef) {\n change.type = AttributeChangeType.REMOVE,\n change.value = '';\n } else {\n change.type = AttributeChangeType.EDIT,\n change.value = attr[1];\n }\n\n attributeChanges.push(change);\n }\n\n return {\n type: DomChangeType.OUTER,\n attributeChanges\n };\n}\n\nexport default domDiff;","import DomChangeType from './Constants/DomChangeType';\nimport IAttributeChange from './Interfaces/IAttributeChange';\n\nclass PatchCommand {\n public type: DomChangeType;\n public newNode: Node = null;\n public newInnerHtml: string = '';\n public newTextContent: string = '';\n public attributeChanges: IAttributeChange[] = [];\n public childCommands: PatchCommand[] = [];\n public index: number = null;\n}\n\nexport default PatchCommand;","import AttributeChangeType from './Constants/AttributeChangeType';\nimport DomChangeType from './Constants/DomChangeType';\nimport IAttributeChange from './Interfaces/IAttributeChange';\nimport PatchCommand from './PatchCommand';\n\nfunction domPatch(node: Node, command: PatchCommand): Node {\n switch (command.type) {\n case DomChangeType.NONE:\n return node;\n case DomChangeType.REPLACE:\n node.parentElement.replaceChild(command.newNode, node);\n\n return command.newNode;\n case DomChangeType.INNER:\n if (node instanceof Text) {\n node.textContent = command.newTextContent;\n } else if (command.childCommands.length > 0) {\n command.childCommands.forEach((childCommand, i) => domPatch(node.childNodes[i], childCommand));\n } else {\n (node as HTMLElement).innerHTML = command.newInnerHtml;\n }\n\n return node;\n case DomChangeType.OUTER:\n patchAttributes(node as HTMLElement, command.attributeChanges);\n\n return node;\n case DomChangeType.FULL:\n if (command.childCommands.length > 0) {\n command.childCommands.forEach((childCommand, i) => domPatch(node.childNodes[i], childCommand));\n } else {\n (node as HTMLElement).innerHTML = command.newInnerHtml;\n }\n\n patchAttributes(node as HTMLElement, command.attributeChanges);\n\n return node;\n }\n}\n\nfunction patchAttributes(el: HTMLElement, attributeChanges: IAttributeChange[]): void {\n const raf = window.requestAnimationFrame;\n\n attributeChanges.forEach(change => {\n if (raf && ['class', 'style'].indexOf(change.name) > -1) {\n raf(() => patchAttribute(el, change));\n } else {\n patchAttribute(el, change);\n }\n });\n}\n\nfunction patchAttribute(el: HTMLElement, change: IAttributeChange): void {\n switch (change.type) {\n case AttributeChangeType.ADD:\n case AttributeChangeType.EDIT:\n el.setAttribute(change.name, change.value);\n\n break;\n case AttributeChangeType.REMOVE:\n el.removeAttribute(change.name);\n\n break;\n }\n}\n\nexport default domPatch;","import Config from '../../Config/Config';\nimport IActions from '../../State/Interfaces/IActions';\nimport State from '../../State/State';\n\nconst POLL_INTERVAL_DURATION = 100;\n\nfunction pollForSelectChange(\n selectElement: HTMLSelectElement,\n state: State,\n actions: IActions,\n config: Config\n): number {\n let lastValue: string = selectElement.value;\n\n const pollIntervalId = window.setInterval(() => {\n if (selectElement.value !== lastValue) {\n const selectedIndex = state.getOptionIndexFromValue(selectElement.value);\n\n actions.selectOption(selectedIndex, config.behavior.closeOnSelect);\n actions.focusOption(selectedIndex, true);\n }\n\n lastValue = selectElement.value;\n }, POLL_INTERVAL_DURATION);\n\n return pollIntervalId;\n}\n\nexport default pollForSelectChange;","import State from '../../State/State';\n\nconst POLL_INTERVAL_DURATION = 300;\n\nfunction pollForSelectMutation(selectElement: HTMLSelectElement, state: State, handleMutation: () => void): number {\n let lastOuterHtml: string = selectElement.outerHTML;\n\n const pollIntervalId = window.setInterval(() => {\n const {outerHTML} = selectElement;\n\n if (outerHTML !== lastOuterHtml && !state.isKeying) {\n handleMutation();\n }\n\n lastOuterHtml = outerHTML;\n }, POLL_INTERVAL_DURATION);\n\n return pollIntervalId;\n}\n\nexport default pollForSelectMutation;","import Easydropdown from '../../Easydropdown/Easydropdown';\n\nfunction closeOthers(thisInstance: Easydropdown, cache: Easydropdown[]): void {\n for (const instance of cache) {\n if (instance !== thisInstance) instance.actions.close();\n }\n}\n\nexport default closeOthers;","import Timers from '../../Easydropdown/Timers';\nimport Dom from '../../Renderer/Dom';\nimport State from '../../State/State';\n\nfunction getScrollTop(\n currentScrollTop: number,\n optionOffsetTop: number,\n optionHeight: number,\n bodyHeight: number,\n scrollOffset: number\n): number {\n const max = currentScrollTop + bodyHeight;\n\n let remainder: number;\n\n if (optionOffsetTop < currentScrollTop) {\n return optionOffsetTop - scrollOffset;\n } else if ((remainder = (optionOffsetTop + optionHeight) - max) > 0) {\n return currentScrollTop + remainder + scrollOffset;\n }\n\n return currentScrollTop;\n}\n\nfunction scrollToView(dom: Dom, timers: Timers, state: State, scrollToMiddle: boolean = false): void {\n const index = Math.max(0, state.focusedIndex > -1 ? state.focusedIndex : state.selectedIndex);\n const option = dom.option[index];\n\n if (!option) return;\n\n const offset = scrollToMiddle ? (state.maxBodyHeight / 2) - (option.offsetHeight / 2) : 0;\n\n const scrollTop = getScrollTop(\n dom.itemsList.scrollTop,\n option.offsetTop,\n option.offsetHeight,\n state.maxBodyHeight,\n offset\n );\n\n if (scrollTop === dom.itemsList.scrollTop) return;\n\n dom.itemsList.scrollTop = scrollTop;\n}\n\nexport {\n getScrollTop,\n scrollToView as default\n};","import merge from 'helpful-merge';\n\nimport IActions from './Interfaces/IActions';\nimport IOnAction from './Interfaces/IOnAction';\nimport IPropertyDescriptor from './Interfaces/IPropertyDescriptor';\nimport resolveActions from './resolveActions';\nimport State from './State';\n\nclass StateManager {\n public static proxyActions(state: State, injectedActions: any, onAction: IOnAction): IActions {\n const stateProxy = StateManager.createStateProxy(state, onAction);\n const actions = resolveActions(stateProxy);\n\n merge(actions, injectedActions);\n\n return actions;\n }\n\n private static createStateProxy(state: State, onAction: IOnAction): State {\n return Object.seal(\n StateManager\n .getPropertyDescriptorsFromValue(state, onAction)\n .reduce((proxy, {key, get, set}) => Object.defineProperty(\n proxy,\n key,\n {\n enumerable: true,\n get,\n set\n }\n ), {})\n );\n }\n\n private static getPropertyDescriptorsFromValue(state: State, onAction: IOnAction): IPropertyDescriptor[] {\n const prototype = Object.getPrototypeOf(state);\n const allKeys = Object.keys(state).concat(Object.keys(prototype));\n\n return allKeys\n .reduce((localDescriptors, key) => {\n const propertyDescriptor =\n Object.getOwnPropertyDescriptor(state, key) ||\n Object.getOwnPropertyDescriptor(prototype, key);\n\n const isAccessorProperty = typeof propertyDescriptor.get === 'function';\n\n localDescriptors.push({\n get: StateManager.readPropertyValue.bind(null, state, key),\n set: isAccessorProperty ?\n void 0 : StateManager.updatePropertyValue.bind(null, state, key, onAction),\n key\n });\n\n return localDescriptors;\n }, []);\n }\n\n private static readPropertyValue(state: State, key: string): any {\n return state[key];\n }\n\n private static updatePropertyValue(state: State, key: string, onAction: IOnAction, value: any): void {\n if (state[key] === value) return;\n\n state[key] = value;\n\n onAction(state, key);\n }\n}\n\nexport default StateManager;","import CollisionType from '../Shared/Util/Constants/CollisionType';\n\nimport BodyStatus from './Constants/BodyStatus';\nimport ScrollStatus from './Constants/ScrollStatus';\nimport IActions from './Interfaces/IActions';\nimport State from './State';\n\nconst resolveActions = (state: State): IActions => ({\n focus(): void {\n state.isFocused = true;\n },\n\n blur(): void {\n state.isFocused = false;\n },\n\n invalidate(): void {\n state.isInvalid = true;\n },\n\n validate(): void {\n state.isInvalid = false;\n },\n\n topOut(): void {\n state.scrollStatus = ScrollStatus.AT_TOP;\n },\n\n bottomOut(): void {\n state.scrollStatus = ScrollStatus.AT_BOTTOM;\n },\n\n scroll(): void {\n state.scrollStatus = ScrollStatus.SCROLLED;\n },\n\n makeScrollable(): void {\n state.isScrollable = true;\n },\n\n makeUnscrollable(): void {\n state.isScrollable = false;\n },\n\n open(\n this: IActions,\n maxBodyHeight: number,\n collisionType: CollisionType,\n isScrollable: boolean\n ): void {\n if (state.isDisabled) return;\n\n this.closeOthers();\n\n switch (collisionType) {\n case CollisionType.NONE:\n case CollisionType.TOP:\n state.bodyStatus = BodyStatus.OPEN_BELOW;\n\n break;\n case CollisionType.BOTTOM:\n state.bodyStatus = BodyStatus.OPEN_ABOVE;\n\n break;\n }\n\n state.isScrollable = isScrollable;\n state.maxBodyHeight = maxBodyHeight;\n\n this.scrollToView(state, true);\n },\n\n close(): void {\n state.bodyStatus = BodyStatus.CLOSED;\n state.focusedIndex = -1;\n },\n\n startClickSelecting(): void {\n state.isClickSelecting = true;\n },\n\n selectOption(this: IActions, index: number, close = true): void {\n const optionAtIndex = state.getOptionFromIndex(index);\n\n state.isClickSelecting = false;\n\n if (index > -1 && (!optionAtIndex || optionAtIndex.isDisabled)) return;\n\n state.selectedIndex = index;\n\n if (state.isInvalid) {\n this.validate();\n }\n\n if (state.isSearching) {\n this.scrollToView(state);\n } else if (close) {\n this.close();\n }\n },\n\n focusOption(this: IActions, index: number, shouldScrollToView: boolean = false): void {\n const scrollToMiddle = Math.abs(index - state.focusedIndex) > 1;\n\n state.focusedIndex = index;\n\n if (shouldScrollToView) {\n this.scrollToView(state, scrollToMiddle);\n }\n },\n\n search(): void {\n state.isSearching = true;\n },\n\n resetSearch(): void {\n state.isSearching = false;\n },\n\n keying(): void {\n state.isKeying = true;\n },\n\n resetKeying(): void {\n state.isKeying = false;\n },\n\n useNative(): void {\n state.isUseNativeMode = true;\n }\n});\n\nexport default resolveActions;","import merge from 'helpful-merge';\n\nimport Config from '../Config/Config';\nimport isMobilePlatform from '../Shared/Util/isMobilePlatform';\n\nimport Group from './Group';\nimport Option from './Option';\nimport State from './State';\n\nclass StateMapper {\n public static mapFromSelect(selectElement: HTMLSelectElement, config: Config): State {\n const state = new State(null, config);\n\n let isWithinGroup = false;\n\n state.name = selectElement.name;\n state.isDisabled = selectElement.disabled;\n state.isRequired = selectElement.required;\n\n state.isUseNativeMode = (\n config.behavior.useNativeUiOnMobile &&\n isMobilePlatform(window.navigator.userAgent)\n );\n\n for (let i = 0, child: Element; (child = selectElement.children[i]); i++) {\n if (i === 0 && child.getAttribute('data-placeholder') !== null) {\n state.placeholder = child.textContent;\n (child as HTMLOptionElement).value = '';\n\n continue;\n }\n\n if (child instanceof HTMLOptionElement) {\n if (isWithinGroup === false) {\n state.groups.push(StateMapper.mapGroup());\n\n isWithinGroup = true;\n }\n\n state.lastGroup.options.push(StateMapper.mapOption(child));\n\n if (child.selected) state.selectedIndex = state.totalOptions - 1;\n } else if (child instanceof HTMLOptGroupElement) {\n isWithinGroup = true;\n\n state.groups.push(StateMapper.mapGroup(child));\n\n for (let j = 0, groupChild: Element; (groupChild = child.children[j]); j++) {\n state.lastGroup.options.push(\n StateMapper.mapOption(\n groupChild as HTMLOptionElement,\n child as HTMLOptGroupElement\n )\n );\n\n if ((groupChild as HTMLOptionElement).selected) state.selectedIndex = state.totalOptions - 1;\n }\n\n isWithinGroup = false;\n } else {\n throw new TypeError(\n `[EasyDropDown] Invalid child tag \"${child.tagName}\" found in provided \\``\n * element (for example, adding or removing an option).\n */\n\n public refresh: () => void;\n\n /**\n * Destroys the instance by removing all EasyDropDown-generated\n * elements from the DOM, and unbinding all event handlers.\n * The underlying select is returned to the root position.\n */\n\n public destroy: () => void;\n\n /**\n * An accessor property allowing writing to and reading\n * from the dropdown's value.\n */\n\n public value: string;\n\n constructor(implementation: Easydropdown) {\n this.open = implementation.open.bind(implementation);\n this.close = implementation.close.bind(implementation);\n this.refresh = implementation.refresh.bind(implementation);\n this.destroy = implementation.destroy.bind(implementation);\n\n Object.defineProperties(this, {\n value: {\n get: () => implementation.value,\n set: (nextValue: string) => implementation.value = nextValue\n }\n });\n }\n}\n\nexport default EasydropdownFacade;"],"sourceRoot":""} \ No newline at end of file diff --git a/demos/easydropdown.js b/demos/easydropdown.js index 2f61ad3..3a9c02b 100644 --- a/demos/easydropdown.js +++ b/demos/easydropdown.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.easydropdown=t():e.easydropdown=t()}(window,function(){return function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},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 o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},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=20)}([function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(6),r=n(3);t.ArrayStrategy=r.default,t.default=o.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(38);function r(e,t,n,o){var r=e(o,n),i=r.maxVisibleItemsOverride>-1?r.maxVisibleItemsOverride:n.behavior.maxVisibleItems,a=o.item.length>i,u=o.sumItemsHeight(i);t.open(u,r.type,a)}t.dispatchOpen=r;var i=r.bind(null,o.default);t.default=i},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return e.reduce(function(e,t){if("string"==typeof t)e.push(t);else{var n=t[0],o=t[1];n&&e.push(o)}return e},[]).join(" ")}},function(e,t,n){"use strict";var o;Object.defineProperty(t,"__esModule",{value:!0}),function(e){e.PUSH="PUSH",e.REPLACE="REPLACE"}(o||(o={})),t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default=function(e,t){var n=t.actions,o=t.timers;window.clearTimeout(o.keyingTimeoutId),n.keying(),o.keyingTimeoutId=window.setTimeout(function(){return n.resetKeying()},100),e.disabled=!0,setTimeout(function(){e.disabled=!1,e.focus()})}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default=[]},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(25),r=n(3),i=n(26),a=n(27),u=n(7);function s(e,t,n){void 0===n&&(n=null);var i,l=[];if(i=n instanceof o.default?n:new o.default,"boolean"==typeof n&&!0===n)i.deep=!0;else if(n&&i!==n&&"object"==typeof n&&(s(i,n),[r.default.PUSH,r.default.REPLACE].indexOf(i.arrayStrategy)<0))throw RangeError(u.INVALID_ARRAY_STRATEGY(i.arrayStrategy));if(!e||"object"!=typeof e)throw new TypeError(u.TYPE_ERROR_TARGET(e));if(!t||"object"!=typeof t)throw new TypeError(u.TYPE_ERROR_SOURCE(t));if(Array.isArray(t)){if(i.arrayStrategy===r.default.PUSH)return e.push.apply(e,t),e;for(var d=0;dt.length?e:t,o=n===e?t:e,r=0,i=0,a=0,u=-1;r1)break;a=i=0}}u=-1;for(var s=0,l=0,d=0,c=n.length-1,f=o.length-1;s1)break;d=l=0}}return Math.min(o.length,a+d)}Object.defineProperty(t,"__esModule",{value:!0}),t.getTotalMatching=o,t.default=function(e,t,n,r){if(Object.hasOwnProperty.call(t,n)||!Object.isSealed(t)||Object.isExtensible(t)||!(e instanceof TypeError))throw e;var i=function(e,t,n,r){var i=o(r.toLowerCase(),e),a=Math.abs(r.length-t.length);return i>n.totalMatching||i===n.totalMatching&&a1?u.key:"";throw new TypeError(r(n,s))}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(){return function(){this.showPlaceholderWhenOpen=!1,this.openOnFocus=!1,this.closeOnSelect=!1,this.useNativeUiOnMobile=!0,this.loop=!1,this.clampMaxVisibleItems=!0,this.liveUpdates=!1,this.maxVisibleItems=15,Object.seal(this)}}();t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(){return function(){this.onOpen=null,this.onClose=null,this.onSelect=null,Object.seal(this)}}();t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(){return function(){this.root="edd-root",this.rootOpen="edd-root-open",this.rootOpenAbove="edd-root-open-above",this.rootOpenBelow="edd-root-open-below",this.rootDisabled="edd-root-disabled",this.rootInvalid="edd-root-invalid",this.rootFocused="edd-root-focused",this.rootHasValue="edd-root-has-value",this.rootNative="edd-root-native",this.gradientTop="edd-gradient-top",this.gradientBottom="edd-gradient-bottom",this.head="edd-head",this.value="edd-value",this.arrow="edd-arrow",this.select="edd-select",this.body="edd-body",this.bodyScrollable="edd-body-scrollable",this.bodyAtTop="edd-body-at-top",this.bodyAtBottom="edd-body-at-bottom",this.itemsList="edd-items-list",this.group="edd-group",this.groupDisabled="edd-group-disabled",this.groupHasLabel="edd-group-has-label",this.groupLabel="edd-group-label",this.option="edd-option",this.optionDisabled="edd-option-disabled",this.optionFocused="edd-option-focused",this.optionSelected="edd-option-selected",Object.seal(this)}}();t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(32),r=n(33),i=n(34);function a(e,t){var n=new r.default(t);if(!n.target)return n;var i=function(t){return n.handler(t,e)};return n.throttle>0?n.boundHandler=o.default(i,n.throttle):n.boundHandler=i,n.target.addEventListener(n.type,n.boundHandler),n}t.bindEvent=a,t.default=function(e){return i.default(e.dom).map(a.bind(null,e))}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=null,o=-1/0;return function(){for(var r=this,i=[],a=0;a=t?s():(clearTimeout(n),n=setTimeout(s,t-l))}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(0),r=function(){function e(e){this.type="",this.target=null,this.debounce=0,this.throttle=0,this.handler=null,this.boundHandler=null,this.passive=!1,o.default(this,e),Object.seal(this)}return e.prototype.unbind=function(){this.target&&this.target.removeEventListener(this.type,this.boundHandler)},e}();t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(35),r=n(36),i=n(37),a=n(39),u=n(40),s=n(41),l=n(42),d=n(43),c=n(46),f=n(13),p=n(13);t.default=function(e){return[{target:e.head,type:"click",handler:i.default},{target:e.body,type:"click",handler:o.default},{target:e.body,type:"mouseover",handler:r.default},{target:e.itemsList,type:"scroll",handler:a.default},{target:e.select,type:"keydown",handler:d.default},{target:e.select,type:"invalid",handler:l.default},{target:e.select,type:"keypress",handler:c.default},{target:e.select,type:"focus",handler:s.default},{target:e.select,type:"blur",handler:u.default},{target:document.documentElement,type:"click",handler:f.default},{target:window,type:"resize",handler:p.default,throttle:100}]}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(9),r=n(10);t.default=function(e,t){t.state;var n=t.actions,i=t.dom,a=t.config;e.stopPropagation();var u=o.default(e.target,r.OPTION,!0);if(u){var s=Array.prototype.indexOf.call(i.option,u);n.selectOption(s,a.behavior.closeOnSelect)}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(9),r=n(10);t.default=function(e,t){var n=t.state,i=t.actions,a=t.dom;e.stopPropagation();var u=o.default(e.target,r.OPTION,!0);if(u&&!n.isKeying){var s=Array.prototype.indexOf.call(a.option,u);i.focusOption(s)}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(1);t.default=function(e,t){var n=t.state,r=t.actions,i=t.dom,a=t.config;n.isUseNativeMode||(e.stopPropagation(),n.isClosed?(o.default(r,a,i),i.select.focus()):r.close())}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(11),r=10;function i(e,t,n,r){var i=o.default.NONE,a=-1;if(e<=n&&t<=n){var u=Math.max(t,e);i=e-1?a.focusedIndex:a.selectedIndex,c=0,f=1;e.preventDefault(),r.default(i,t),n&&(f=Math.round(Math.max(a.totalOptions/2,l.behavior.maxVisibleItems)));do{d+=f,f=1,d>=a.totalOptions&&(d=l.behavior.loop?0:a.totalOptions-1),s.focusOption(d,!0),c++}while(a.focusedOption&&a.focusedOption.isDisabled&&c<=a.totalOptions);a.isClosed&&o.default(s,l,u)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(1),r=n(4);t.default=function(e,t){var n=e.metaKey,i=e.target,a=t.state,u=t.config,s=t.dom,l=t.actions,d=a.focusedIndex>-1?a.focusedIndex:a.selectedIndex,c=0,f=1;e.preventDefault(),r.default(i,t),n&&(f=Math.round(Math.max(a.totalOptions/2,u.behavior.maxVisibleItems)));do{d-=f,f=1,d<0&&(d=u.behavior.loop?a.totalOptions-1:0),l.focusOption(d,!0),c++}while(a.focusedOption&&a.focusedOption.isDisabled&&c` element must exist within a document");t.replaceChild(this.dom.root,e),n.parentElement.replaceChild(e,n),e.className=this.classNames.select,e.setAttribute("aria-hidden","true"),this.dom.select=e},e.prototype.syncSelectWithValue=function(e){if(this.dom.select.value!==e){var t=new CustomEvent("change",{bubbles:!0});this.dom.select.value=e,this.dom.select.dispatchEvent(t)}},e.queryDomRefs=function(e,t){return void 0===t&&(t=Object.keys(e)),t.reduce(function(e,t){var n='[data-ref~="'+t+'"]',o=e.root.querySelectorAll(n);if(o.length<1||"root"===t)return e;var r=o[0],i=e[t];return null===i?e[t]=r:Array.isArray(i)&&Array.prototype.push.apply(i,o),e},e)},e}();t.default=s},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(2),r=n(49),i=n(52);t.default=function(e,t){return'\n \n "+i.default(e,t)+"\n "+(e.isUseNativeMode?"":r.default(e,t))+"\n \n "}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(2),r=n(50);t.default=function(e,t){var n=o.default([t.body,[e.isAtTop,t.bodyAtTop],[e.isAtBottom,t.bodyAtBottom],[e.isScrollable,t.bodyScrollable]]),i=e.isOpen?'style="max-height: '+e.maxBodyHeight+'px;"':"";return'\n \n
\n "+e.groups.map(function(n){return r.default(n,e,t)}).join("")+"\n
\n
\n \n \n '}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(2),r=n(51);t.default=function(e,t,n){return'\n
\n '+(e.hasLabel?'
'+e.label+"
":"")+"\n "+e.options.map(function(e){return r.default(e,t,n)}).join("")+"\n
\n "}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(2);t.default=function(e,t,n){var r=t.selectedOption===e;return'\n \n "+e.label+"\n \n "}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(53),r=n(54);t.default=function(e,t){return'\n
\n '+r.default(e,t)+"\n "+o.default(e,t)+'\n \n
\n'}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default=function(e,t){return''}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default=function(e,t){return'\n \n "+e.humanReadableValue+"\n \n "}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=document.createElement("div");return t.innerHTML=e,t.firstElementChild}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(){this.select=null,this.root=null,this.head=null,this.value=null,this.body=null,this.arrow=null,this.itemsList=null,this.item=[],this.group=[],this.option=[]}return e.prototype.sumItemsHeight=function(e){void 0===e&&(e=1/0);for(var t=0,n=0,o=void 0;(o=this.item[n])&&n!==e;n++)t+=o.offsetHeight;return t},e}();t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(0),r=n(14),i=n(15),a=n(58);function u(e,t){for(var n=Math.max(e.attributes.length,t.attributes.length),o={},a=[],u=0;u1&&d.sort();u=0;for(var c=void 0;c=d[u];u++){var f=o[c],p={type:null,name:c,value:null};f[0]!==f[1]&&(void 0===f[0]?(p.type=r.default.ADD,p.value=f[1]):void 0===f[1]?(p.type=r.default.REMOVE,p.value=""):(p.type=r.default.EDIT,p.value=f[1]),a.push(p))}return{type:i.default.OUTER,attributeChanges:a}}t.default=function e(t,n){var r=-1,s=new a.default;if(t instanceof HTMLSelectElement)return s.type=i.default.NONE,s;if(t instanceof Text&&n instanceof Text)t.textContent===n.textContent?s.type=i.default.NONE:(s.type=i.default.INNER,s.newTextContent=n.textContent);else if(t instanceof HTMLElement&&n instanceof HTMLElement)if(t.tagName!==n.tagName)s.type=i.default.REPLACE,s.newNode=n;else if(t.outerHTML===n.outerHTML)s.type=i.default.NONE;else if(t.innerHTML===n.innerHTML)o.default(s,u(t,n));else if(o.default(s,u(t,n)),s.attributeChanges.length>0?s.type=i.default.FULL:s.type=i.default.INNER,(r=t.childNodes.length)>0&&r===n.childNodes.length)for(var l=0,d=void 0;d=t.childNodes[l];l++)s.childCommands.push(e(d,n.childNodes[l]));else s.newInnerHtml=n.innerHTML;else s.type=i.default.REPLACE,s.newNode=n;return s}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(){return function(){this.newNode=null,this.newInnerHtml="",this.newTextContent="",this.attributeChanges=[],this.childCommands=[],this.index=null}}();t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(14),r=n(15);function i(e,t){var n=window.requestAnimationFrame;t.forEach(function(t){n&&["class","style"].indexOf(t.name)>-1?n(function(){return a(e,t)}):a(e,t)})}function a(e,t){switch(t.type){case o.default.ADD:case o.default.EDIT:e.setAttribute(t.name,t.value);break;case o.default.REMOVE:e.removeAttribute(t.name)}}t.default=function e(t,n){switch(n.type){case r.default.NONE:return t;case r.default.REPLACE:return t.parentElement.replaceChild(n.newNode,t),n.newNode;case r.default.INNER:return t instanceof Text?t.textContent=n.newTextContent:n.childCommands.length>0?n.childCommands.forEach(function(n,o){return e(t.childNodes[o],n)}):t.innerHTML=n.newInnerHtml,t;case r.default.OUTER:return i(t,n.attributeChanges),t;case r.default.FULL:return n.childCommands.length>0?n.childCommands.forEach(function(n,o){return e(t.childNodes[o],n)}):t.innerHTML=n.newInnerHtml,i(t,n.attributeChanges),t}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=100;t.default=function(e,t,n,r){var i=e.value;return window.setInterval(function(){if(e.value!==i){var o=t.getOptionIndexFromValue(e.value);n.selectOption(o,r.behavior.closeOnSelect),n.focusOption(o,!0)}i=e.value},o)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=300;t.default=function(e,t,n){var r=e.outerHTML;return window.setInterval(function(){var o=e.outerHTML;o===r||t.isKeying||n(),r=o},o)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){for(var n=0,o=t;n0?e+i+r:e}Object.defineProperty(t,"__esModule",{value:!0}),t.getScrollTop=o,t.default=function(e,t,n,r){void 0===r&&(r=!1);var i=Math.max(0,n.focusedIndex>-1?n.focusedIndex:n.selectedIndex),a=e.option[i];if(a){var u=r?n.maxBodyHeight/2-a.offsetHeight/2:0,s=o(e.itemsList.scrollTop,a.offsetTop,a.offsetHeight,n.maxBodyHeight,u);s!==e.itemsList.scrollTop&&(e.itemsList.scrollTop=s)}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(0),r=n(65),i=function(){function e(){}return e.proxyActions=function(t,n,i){var a=e.createStateProxy(t,i),u=r.default(a);return o.default(u,n),u},e.createStateProxy=function(t,n){return Object.seal(e.getPropertyDescriptorsFromValue(t,n).reduce(function(e,t){var n=t.key,o=t.get,r=t.set;return Object.defineProperty(e,n,{enumerable:!0,get:o,set:r})},{}))},e.getPropertyDescriptorsFromValue=function(t,n){var o=Object.getPrototypeOf(t);return Object.keys(t).concat(Object.keys(o)).reduce(function(r,i){var a="function"==typeof(Object.getOwnPropertyDescriptor(t,i)||Object.getOwnPropertyDescriptor(o,i)).get;return r.push({get:e.readPropertyValue.bind(null,t,i),set:a?void 0:e.updatePropertyValue.bind(null,t,i,n),key:i}),r},[])},e.readPropertyValue=function(e,t){return e[t]},e.updatePropertyValue=function(e,t,n,o){e[t]!==o&&(e[t]=o,n(e,t))},e}();t.default=i},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(11),r=n(16),i=n(17);t.default=function(e){return{focus:function(){e.isFocused=!0},blur:function(){e.isFocused=!1},invalidate:function(){e.isInvalid=!0},validate:function(){e.isInvalid=!1},topOut:function(){e.scrollStatus=i.default.AT_TOP},bottomOut:function(){e.scrollStatus=i.default.AT_BOTTOM},scroll:function(){e.scrollStatus=i.default.SCROLLED},makeScrollable:function(){e.isScrollable=!0},makeUnscrollable:function(){e.isScrollable=!1},open:function(t,n,i){if(!e.isDisabled){switch(this.closeOthers(),n){case o.default.NONE:case o.default.TOP:e.bodyStatus=r.default.OPEN_BELOW;break;case o.default.BOTTOM:e.bodyStatus=r.default.OPEN_ABOVE}e.isScrollable=i,e.maxBodyHeight=t,this.scrollToView(e,!0)}},close:function(){e.bodyStatus=r.default.CLOSED,e.focusedIndex=-1},selectOption:function(t,n){void 0===n&&(n=!0);var o=e.getOptionFromIndex(t);t>-1&&(!o||o.isDisabled)||(e.selectedIndex=t,e.isInvalid&&this.validate(),e.isSearching?this.scrollToView(e):n&&this.close())},focusOption:function(t,n){void 0===n&&(n=!1);var o=Math.abs(t-e.focusedIndex)>1;e.focusedIndex=t,n&&this.scrollToView(e,o)},search:function(){e.isSearching=!0},resetSearch:function(){e.isSearching=!1},keying:function(){e.isKeying=!0},resetKeying:function(){e.isKeying=!1},useNative:function(){e.isUseNativeMode=!0}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(0),r=n(67),i=n(18),a=n(19),u=n(68),s=function(){function e(){}return e.mapFromSelect=function(t,n){var o=new u.default(null,n),i=!1;o.name=t.name,o.isDisabled=t.disabled,o.isRequired=t.required,o.isUseNativeMode=n.behavior.useNativeUiOnMobile&&r.default(window.navigator.userAgent);for(var a=0,s=void 0;s=t.children[a];a++)if(0!==a||null===s.getAttribute("data-placeholder"))if(s instanceof HTMLOptionElement)!1===i&&(o.groups.push(e.mapGroup()),i=!0),o.lastGroup.options.push(e.mapOption(s)),s.selected&&(o.selectedIndex=o.totalOptions-1);else{if(!(s instanceof HTMLOptGroupElement))throw new TypeError('[EasyDropDown] Invalid child tag "'+s.tagName+'" found in provided `\n \n'}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default=function(e,t){return''}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default=function(e,t){return'\n \n "+e.humanReadableValue+"\n \n "}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=document.createElement("div");return t.innerHTML=e,t.firstElementChild}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(){this.select=null,this.root=null,this.head=null,this.value=null,this.body=null,this.arrow=null,this.itemsList=null,this.item=[],this.group=[],this.option=[]}return e.prototype.sumItemsHeight=function(e){void 0===e&&(e=1/0);for(var t=0,n=0,o=void 0;(o=this.item[n])&&n!==e;n++)t+=o.offsetHeight;return t},e}();t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(0),i=n(14),r=n(15),a=n(60);function u(e,t){for(var n=Math.max(e.attributes.length,t.attributes.length),o={},a=[],u=0;u1&&d.sort();u=0;for(var c=void 0;c=d[u];u++){var f=o[c],p={type:null,name:c,value:null};f[0]!==f[1]&&(void 0===f[0]?(p.type=i.default.ADD,p.value=f[1]):void 0===f[1]?(p.type=i.default.REMOVE,p.value=""):(p.type=i.default.EDIT,p.value=f[1]),a.push(p))}return{type:r.default.OUTER,attributeChanges:a}}t.default=function e(t,n){var i=-1,s=new a.default;if(t instanceof HTMLSelectElement)return s.type=r.default.NONE,s;if(t instanceof Text&&n instanceof Text)t.textContent===n.textContent?s.type=r.default.NONE:(s.type=r.default.INNER,s.newTextContent=n.textContent);else if(t instanceof HTMLElement&&n instanceof HTMLElement)if(t.tagName!==n.tagName)s.type=r.default.REPLACE,s.newNode=n;else if(t.outerHTML===n.outerHTML)s.type=r.default.NONE;else if(t.innerHTML===n.innerHTML)o.default(s,u(t,n));else if(o.default(s,u(t,n)),s.attributeChanges.length>0?s.type=r.default.FULL:s.type=r.default.INNER,(i=t.childNodes.length)>0&&i===n.childNodes.length)for(var l=0,d=void 0;d=t.childNodes[l];l++)s.childCommands.push(e(d,n.childNodes[l]));else s.newInnerHtml=n.innerHTML;else s.type=r.default.REPLACE,s.newNode=n;return s}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(){return function(){this.newNode=null,this.newInnerHtml="",this.newTextContent="",this.attributeChanges=[],this.childCommands=[],this.index=null}}();t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(14),i=n(15);function r(e,t){var n=window.requestAnimationFrame;t.forEach(function(t){n&&["class","style"].indexOf(t.name)>-1?n(function(){return a(e,t)}):a(e,t)})}function a(e,t){switch(t.type){case o.default.ADD:case o.default.EDIT:e.setAttribute(t.name,t.value);break;case o.default.REMOVE:e.removeAttribute(t.name)}}t.default=function e(t,n){switch(n.type){case i.default.NONE:return t;case i.default.REPLACE:return t.parentElement.replaceChild(n.newNode,t),n.newNode;case i.default.INNER:return t instanceof Text?t.textContent=n.newTextContent:n.childCommands.length>0?n.childCommands.forEach(function(n,o){return e(t.childNodes[o],n)}):t.innerHTML=n.newInnerHtml,t;case i.default.OUTER:return r(t,n.attributeChanges),t;case i.default.FULL:return n.childCommands.length>0?n.childCommands.forEach(function(n,o){return e(t.childNodes[o],n)}):t.innerHTML=n.newInnerHtml,r(t,n.attributeChanges),t}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=100;t.default=function(e,t,n,i){var r=e.value;return window.setInterval(function(){if(e.value!==r){var o=t.getOptionIndexFromValue(e.value);n.selectOption(o,i.behavior.closeOnSelect),n.focusOption(o,!0)}r=e.value},o)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=300;t.default=function(e,t,n){var i=e.outerHTML;return window.setInterval(function(){var o=e.outerHTML;o===i||t.isKeying||n(),i=o},o)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){for(var n=0,o=t;n0?e+r+i:e}Object.defineProperty(t,"__esModule",{value:!0}),t.getScrollTop=o,t.default=function(e,t,n,i){void 0===i&&(i=!1);var r=Math.max(0,n.focusedIndex>-1?n.focusedIndex:n.selectedIndex),a=e.option[r];if(a){var u=i?n.maxBodyHeight/2-a.offsetHeight/2:0,s=o(e.itemsList.scrollTop,a.offsetTop,a.offsetHeight,n.maxBodyHeight,u);s!==e.itemsList.scrollTop&&(e.itemsList.scrollTop=s)}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(0),i=n(67),r=function(){function e(){}return e.proxyActions=function(t,n,r){var a=e.createStateProxy(t,r),u=i.default(a);return o.default(u,n),u},e.createStateProxy=function(t,n){return Object.seal(e.getPropertyDescriptorsFromValue(t,n).reduce(function(e,t){var n=t.key,o=t.get,i=t.set;return Object.defineProperty(e,n,{enumerable:!0,get:o,set:i})},{}))},e.getPropertyDescriptorsFromValue=function(t,n){var o=Object.getPrototypeOf(t);return Object.keys(t).concat(Object.keys(o)).reduce(function(i,r){var a="function"==typeof(Object.getOwnPropertyDescriptor(t,r)||Object.getOwnPropertyDescriptor(o,r)).get;return i.push({get:e.readPropertyValue.bind(null,t,r),set:a?void 0:e.updatePropertyValue.bind(null,t,r,n),key:r}),i},[])},e.readPropertyValue=function(e,t){return e[t]},e.updatePropertyValue=function(e,t,n,o){e[t]!==o&&(e[t]=o,n(e,t))},e}();t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(11),i=n(16),r=n(17);t.default=function(e){return{focus:function(){e.isFocused=!0},blur:function(){e.isFocused=!1},invalidate:function(){e.isInvalid=!0},validate:function(){e.isInvalid=!1},topOut:function(){e.scrollStatus=r.default.AT_TOP},bottomOut:function(){e.scrollStatus=r.default.AT_BOTTOM},scroll:function(){e.scrollStatus=r.default.SCROLLED},makeScrollable:function(){e.isScrollable=!0},makeUnscrollable:function(){e.isScrollable=!1},open:function(t,n,r){if(!e.isDisabled){switch(this.closeOthers(),n){case o.default.NONE:case o.default.TOP:e.bodyStatus=i.default.OPEN_BELOW;break;case o.default.BOTTOM:e.bodyStatus=i.default.OPEN_ABOVE}e.isScrollable=r,e.maxBodyHeight=t,this.scrollToView(e,!0)}},close:function(){e.bodyStatus=i.default.CLOSED,e.focusedIndex=-1},startClickSelecting:function(){e.isClickSelecting=!0},selectOption:function(t,n){void 0===n&&(n=!0);var o=e.getOptionFromIndex(t);e.isClickSelecting=!1,t>-1&&(!o||o.isDisabled)||(e.selectedIndex=t,e.isInvalid&&this.validate(),e.isSearching?this.scrollToView(e):n&&this.close())},focusOption:function(t,n){void 0===n&&(n=!1);var o=Math.abs(t-e.focusedIndex)>1;e.focusedIndex=t,n&&this.scrollToView(e,o)},search:function(){e.isSearching=!0},resetSearch:function(){e.isSearching=!1},keying:function(){e.isKeying=!0},resetKeying:function(){e.isKeying=!1},useNative:function(){e.isUseNativeMode=!0}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(0),i=n(69),r=n(18),a=n(19),u=n(70),s=function(){function e(){}return e.mapFromSelect=function(t,n){var o=new u.default(null,n),r=!1;o.name=t.name,o.isDisabled=t.disabled,o.isRequired=t.required,o.isUseNativeMode=n.behavior.useNativeUiOnMobile&&i.default(window.navigator.userAgent);for(var a=0,s=void 0;s=t.children[a];a++)if(0!==a||null===s.getAttribute("data-placeholder"))if(s instanceof HTMLOptionElement)!1===r&&(o.groups.push(e.mapGroup()),r=!0),o.lastGroup.options.push(e.mapOption(s)),s.selected&&(o.selectedIndex=o.totalOptions-1);else{if(!(s instanceof HTMLOptGroupElement))throw new TypeError('[EasyDropDown] Invalid child tag "'+s.tagName+'" found in provided `` element must exist within a document');\n\n parent.replaceChild(this.dom.root, selectElement);\n\n tempSelect.parentElement.replaceChild(selectElement, tempSelect);\n selectElement.className = this.classNames.select;\n selectElement.setAttribute('aria-hidden', 'true');\n\n this.dom.select = selectElement;\n }\n\n private syncSelectWithValue(value: string): void {\n if (this.dom.select.value === value) return;\n\n const event = new CustomEvent('change', {\n bubbles: true\n });\n\n this.dom.select.value = value;\n\n this.dom.select.dispatchEvent(event);\n }\n\n public static queryDomRefs(dom: Dom, keys: string[] = Object.keys(dom)): Dom {\n return keys\n .reduce((localDom: Dom, ref: string) => {\n const selector = `[data-ref~=\"${ref}\"]`;\n const elements = localDom.root.querySelectorAll(selector);\n\n if (elements.length < 1 || ref === 'root') return localDom;\n\n const element = elements[0];\n const value = localDom[ref];\n\n if (value === null) {\n localDom[ref] = element;\n } else if (Array.isArray(value)) {\n Array.prototype.push.apply(value, elements);\n }\n\n return localDom;\n }, dom);\n }\n}\n\nexport default Renderer;","import ClassNames from '../Config/ClassNames';\nimport composeClassName from '../Shared/Util/composeClassName';\nimport State from '../State/State';\n\nimport body from './body';\nimport head from './head';\n\nconst root = (state: State, classNames: ClassNames) => {\n const className = composeClassName([\n classNames.root,\n [state.isDisabled, classNames.rootDisabled],\n [state.isInvalid, classNames.rootInvalid],\n [state.isOpen, classNames.rootOpen],\n [state.isFocused, classNames.rootFocused],\n [state.hasValue, classNames.rootHasValue],\n [state.isOpenAbove, classNames.rootOpenAbove],\n [state.isOpenBelow, classNames.rootOpenBelow],\n [state.isUseNativeMode, classNames.rootNative]\n ]);\n\n return (`\n \n ${head(state, classNames)}\n ${state.isUseNativeMode ? '' : body(state, classNames)}\n \n `);\n};\n\nexport default root;","import ClassNames from '../Config/ClassNames';\nimport composeClassName from '../Shared/Util/composeClassName';\nimport State from '../State/State';\n\nimport group from './group';\n\nfunction body(state: State, classNames: ClassNames): string {\n const className = composeClassName([\n classNames.body,\n [state.isAtTop, classNames.bodyAtTop],\n [state.isAtBottom, classNames.bodyAtBottom],\n [state.isScrollable, classNames.bodyScrollable]\n ]);\n\n const styleAttr = state.isOpen ?\n `style=\"max-height: ${state.maxBodyHeight}px;\"` : '';\n\n return (`\n \n
\n ${state.groups.map(groupState => group(groupState, state, classNames)).join('')}\n
\n
\n
\n \n `);\n}\n\nexport default body;","import ClassNames from '../Config/ClassNames';\nimport composeClassName from '../Shared/Util/composeClassName';\nimport Group from '../State/Group';\nimport State from '../State/State';\n\nimport option from './option';\n\nconst group = (groupState: Group, state: State, classNames: ClassNames) => {\n const className = composeClassName([\n classNames.group,\n [groupState.isDisabled, classNames.groupDisabled],\n [groupState.hasLabel, classNames.groupHasLabel]\n ]);\n\n return (`\n
\n ${groupState.hasLabel ?\n `
${groupState.label}
` : ''\n }\n ${groupState.options.map(optionState => option(optionState, state, classNames)).join('')}\n
\n `);\n};\n\nexport default group;","import ClassNames from '../Config/ClassNames';\nimport composeClassName from '../Shared/Util/composeClassName';\nimport Option from '../State/Option';\nimport State from '../State/State';\n\nfunction option(optionState: Option, state: State, classNames: ClassNames): string {\n const isSelected = state.selectedOption === optionState;\n\n const className = composeClassName([\n classNames.option,\n [isSelected, classNames.optionSelected],\n [optionState === state.focusedOption, classNames.optionFocused],\n [optionState.isDisabled, classNames.optionDisabled]\n ]);\n\n return (`\n \n ${optionState.label}\n \n `);\n}\n\nexport default option;","import ClassNames from '../Config/ClassNames';\nimport State from '../State/State';\n\nimport arrow from './arrow';\nimport value from './value';\n\nconst head = (state: State, classNames: ClassNames) => (`\n
\n ${value(state, classNames)}\n ${arrow(state, classNames)}\n \n
\n`);\n\nexport default head;","import ClassNames from '../Config/ClassNames';\n\nconst arrow = (_, classNames: ClassNames) => `
`;\n\nexport default arrow;","import ClassNames from '../Config/ClassNames';\nimport State from '../State/State';\n\nconst value = (state: State, classNames: ClassNames) => {\n return (`\n \n ${state.humanReadableValue}\n \n `);\n};\n\nexport default value;","function createDomElementFromHtml(html: string): Element {\n const temp = document.createElement('div');\n\n temp.innerHTML = html;\n\n return temp.firstElementChild;\n}\n\nexport default createDomElementFromHtml;","class Dom {\n public select: HTMLSelectElement = null;\n public root: HTMLDivElement = null;\n public head: HTMLDivElement = null;\n public value: HTMLDivElement = null;\n public body: HTMLDivElement = null;\n public arrow: HTMLDivElement = null;\n public itemsList: HTMLDivElement = null;\n public item: HTMLDivElement[] = [];\n public group: HTMLDivElement[] = [];\n public option: HTMLDivElement[] = [];\n\n public sumItemsHeight(max: number = Infinity): number {\n let totalHeight = 0;\n\n for (let i = 0, item; (item = this.item[i]); i++) {\n if (i === max) break;\n\n totalHeight += item.offsetHeight;\n }\n\n return totalHeight;\n }\n}\n\nexport default Dom;","import merge from 'helpful-merge';\n\nimport AttributeChangeType from './Constants/AttributeChangeType';\nimport DomChangeType from './Constants/DomChangeType';\nimport IAttributeChange from './Interfaces/IAttributeChange';\nimport IPatchCommand from './Interfaces/IPatchCommand';\nimport PatchCommand from './PatchCommand';\n\nfunction domDiff(prev: Node, next: Node): PatchCommand {\n let totalChildNodes = -1;\n\n const command = new PatchCommand();\n\n if (prev instanceof HTMLSelectElement) {\n command.type = DomChangeType.NONE;\n\n return command;\n }\n\n if (prev instanceof Text && next instanceof Text) {\n if (prev.textContent === next.textContent) {\n command.type = DomChangeType.NONE;\n } else {\n command.type = DomChangeType.INNER;\n command.newTextContent = next.textContent;\n }\n } else if (prev instanceof HTMLElement && next instanceof HTMLElement) {\n if (prev.tagName !== next.tagName) {\n command.type = DomChangeType.REPLACE;\n command.newNode = next;\n } else if (prev.outerHTML === next.outerHTML) {\n command.type = DomChangeType.NONE;\n } else if (prev.innerHTML === next.innerHTML) {\n merge(command, diffAttributeChanges(prev, next));\n } else {\n merge(command, diffAttributeChanges(prev, next));\n\n if (command.attributeChanges.length > 0) {\n command.type = DomChangeType.FULL;\n } else {\n command.type = DomChangeType.INNER;\n }\n\n if ((totalChildNodes = prev.childNodes.length) > 0 && totalChildNodes === next.childNodes.length) {\n for (let i = 0, childNode; (childNode = prev.childNodes[i]); i++) {\n command.childCommands.push(domDiff(childNode, next.childNodes[i]));\n }\n } else {\n command.newInnerHtml = next.innerHTML;\n }\n }\n } else {\n command.type = DomChangeType.REPLACE;\n command.newNode = next;\n }\n\n return command;\n}\n\nfunction diffAttributeChanges(prev: HTMLElement, next: HTMLElement): IPatchCommand {\n const totalAttributes = Math.max(prev.attributes.length, next.attributes.length);\n const attributesMap = {};\n const undef = void(0);\n const attributeChanges: IAttributeChange[] = [];\n\n for (let i = 0; i < totalAttributes; i++) {\n const attr1 = prev.attributes[i];\n const attr2 = next.attributes[i];\n\n if (attr1 && attributesMap[attr1.name] === undef) {\n attributesMap[attr1.name] = [];\n }\n\n if (attr2 && attributesMap[attr2.name] === undef) {\n attributesMap[attr2.name] = [];\n }\n\n if (attr1) attributesMap[attr1.name][0] = attr1.value;\n if (attr2) attributesMap[attr2.name][1] = attr2.value;\n }\n\n const keys = Object.keys(attributesMap);\n\n if (keys.length > 1) {\n keys.sort();\n }\n\n for (let i = 0, key; (key = keys[i]); i++) {\n const attr = attributesMap[key];\n\n const change: IAttributeChange = {\n type: null,\n name: key,\n value: null\n };\n\n if (attr[0] === attr[1]) continue;\n\n if (attr[0] === undef) {\n change.type = AttributeChangeType.ADD;\n change.value = attr[1];\n } else if (attr[1] === undef) {\n change.type = AttributeChangeType.REMOVE,\n change.value = '';\n } else {\n change.type = AttributeChangeType.EDIT,\n change.value = attr[1];\n }\n\n attributeChanges.push(change);\n }\n\n return {\n type: DomChangeType.OUTER,\n attributeChanges\n };\n}\n\nexport default domDiff;","import DomChangeType from './Constants/DomChangeType';\nimport IAttributeChange from './Interfaces/IAttributeChange';\n\nclass PatchCommand {\n public type: DomChangeType;\n public newNode: Node = null;\n public newInnerHtml: string = '';\n public newTextContent: string = '';\n public attributeChanges: IAttributeChange[] = [];\n public childCommands: PatchCommand[] = [];\n public index: number = null;\n}\n\nexport default PatchCommand;","import AttributeChangeType from './Constants/AttributeChangeType';\nimport DomChangeType from './Constants/DomChangeType';\nimport IAttributeChange from './Interfaces/IAttributeChange';\nimport PatchCommand from './PatchCommand';\n\nfunction domPatch(node: Node, command: PatchCommand): Node {\n switch (command.type) {\n case DomChangeType.NONE:\n return node;\n case DomChangeType.REPLACE:\n node.parentElement.replaceChild(command.newNode, node);\n\n return command.newNode;\n case DomChangeType.INNER:\n if (node instanceof Text) {\n node.textContent = command.newTextContent;\n } else if (command.childCommands.length > 0) {\n command.childCommands.forEach((childCommand, i) => domPatch(node.childNodes[i], childCommand));\n } else {\n (node as HTMLElement).innerHTML = command.newInnerHtml;\n }\n\n return node;\n case DomChangeType.OUTER:\n patchAttributes(node as HTMLElement, command.attributeChanges);\n\n return node;\n case DomChangeType.FULL:\n if (command.childCommands.length > 0) {\n command.childCommands.forEach((childCommand, i) => domPatch(node.childNodes[i], childCommand));\n } else {\n (node as HTMLElement).innerHTML = command.newInnerHtml;\n }\n\n patchAttributes(node as HTMLElement, command.attributeChanges);\n\n return node;\n }\n}\n\nfunction patchAttributes(el: HTMLElement, attributeChanges: IAttributeChange[]): void {\n const raf = window.requestAnimationFrame;\n\n attributeChanges.forEach(change => {\n if (raf && ['class', 'style'].indexOf(change.name) > -1) {\n raf(() => patchAttribute(el, change));\n } else {\n patchAttribute(el, change);\n }\n });\n}\n\nfunction patchAttribute(el: HTMLElement, change: IAttributeChange): void {\n switch (change.type) {\n case AttributeChangeType.ADD:\n case AttributeChangeType.EDIT:\n el.setAttribute(change.name, change.value);\n\n break;\n case AttributeChangeType.REMOVE:\n el.removeAttribute(change.name);\n\n break;\n }\n}\n\nexport default domPatch;","import Config from '../../Config/Config';\nimport IActions from '../../State/Interfaces/IActions';\nimport State from '../../State/State';\n\nconst POLL_INTERVAL_DURATION = 100;\n\nfunction pollForSelectChange(\n selectElement: HTMLSelectElement,\n state: State,\n actions: IActions,\n config: Config\n): number {\n let lastValue: string = selectElement.value;\n\n const pollIntervalId = window.setInterval(() => {\n if (selectElement.value !== lastValue) {\n const selectedIndex = state.getOptionIndexFromValue(selectElement.value);\n\n actions.selectOption(selectedIndex, config.behavior.closeOnSelect);\n actions.focusOption(selectedIndex, true);\n }\n\n lastValue = selectElement.value;\n }, POLL_INTERVAL_DURATION);\n\n return pollIntervalId;\n}\n\nexport default pollForSelectChange;","import State from '../../State/State';\n\nconst POLL_INTERVAL_DURATION = 300;\n\nfunction pollForSelectMutation(selectElement: HTMLSelectElement, state: State, handleMutation: () => void): number {\n let lastOuterHtml: string = selectElement.outerHTML;\n\n const pollIntervalId = window.setInterval(() => {\n const {outerHTML} = selectElement;\n\n if (outerHTML !== lastOuterHtml && !state.isKeying) {\n handleMutation();\n }\n\n lastOuterHtml = outerHTML;\n }, POLL_INTERVAL_DURATION);\n\n return pollIntervalId;\n}\n\nexport default pollForSelectMutation;","import Easydropdown from '../../Easydropdown/Easydropdown';\n\nfunction closeOthers(thisInstance: Easydropdown, cache: Easydropdown[]): void {\n for (const instance of cache) {\n if (instance !== thisInstance) instance.actions.close();\n }\n}\n\nexport default closeOthers;","import Timers from '../../Easydropdown/Timers';\nimport Dom from '../../Renderer/Dom';\nimport State from '../../State/State';\n\nfunction getScrollTop(\n currentScrollTop: number,\n optionOffsetTop: number,\n optionHeight: number,\n bodyHeight: number,\n scrollOffset: number\n): number {\n const max = currentScrollTop + bodyHeight;\n\n let remainder: number;\n\n if (optionOffsetTop < currentScrollTop) {\n return optionOffsetTop - scrollOffset;\n } else if ((remainder = (optionOffsetTop + optionHeight) - max) > 0) {\n return currentScrollTop + remainder + scrollOffset;\n }\n\n return currentScrollTop;\n}\n\nfunction scrollToView(dom: Dom, timers: Timers, state: State, scrollToMiddle: boolean = false): void {\n const index = Math.max(0, state.focusedIndex > -1 ? state.focusedIndex : state.selectedIndex);\n const option = dom.option[index];\n\n if (!option) return;\n\n const offset = scrollToMiddle ? (state.maxBodyHeight / 2) - (option.offsetHeight / 2) : 0;\n\n const scrollTop = getScrollTop(\n dom.itemsList.scrollTop,\n option.offsetTop,\n option.offsetHeight,\n state.maxBodyHeight,\n offset\n );\n\n if (scrollTop === dom.itemsList.scrollTop) return;\n\n dom.itemsList.scrollTop = scrollTop;\n}\n\nexport {\n getScrollTop,\n scrollToView as default\n};","import merge from 'helpful-merge';\n\nimport IActions from './Interfaces/IActions';\nimport IOnAction from './Interfaces/IOnAction';\nimport IPropertyDescriptor from './Interfaces/IPropertyDescriptor';\nimport resolveActions from './resolveActions';\nimport State from './State';\n\nclass StateManager {\n public static proxyActions(state: State, injectedActions: any, onAction: IOnAction): IActions {\n const stateProxy = StateManager.createStateProxy(state, onAction);\n const actions = resolveActions(stateProxy);\n\n merge(actions, injectedActions);\n\n return actions;\n }\n\n private static createStateProxy(state: State, onAction: IOnAction): State {\n return Object.seal(\n StateManager\n .getPropertyDescriptorsFromValue(state, onAction)\n .reduce((proxy, {key, get, set}) => Object.defineProperty(\n proxy,\n key,\n {\n enumerable: true,\n get,\n set\n }\n ), {})\n );\n }\n\n private static getPropertyDescriptorsFromValue(state: State, onAction: IOnAction): IPropertyDescriptor[] {\n const prototype = Object.getPrototypeOf(state);\n const allKeys = Object.keys(state).concat(Object.keys(prototype));\n\n return allKeys\n .reduce((localDescriptors, key) => {\n const propertyDescriptor =\n Object.getOwnPropertyDescriptor(state, key) ||\n Object.getOwnPropertyDescriptor(prototype, key);\n\n const isAccessorProperty = typeof propertyDescriptor.get === 'function';\n\n localDescriptors.push({\n get: StateManager.readPropertyValue.bind(null, state, key),\n set: isAccessorProperty ?\n void 0 : StateManager.updatePropertyValue.bind(null, state, key, onAction),\n key\n });\n\n return localDescriptors;\n }, []);\n }\n\n private static readPropertyValue(state: State, key: string): any {\n return state[key];\n }\n\n private static updatePropertyValue(state: State, key: string, onAction: IOnAction, value: any): void {\n if (state[key] === value) return;\n\n state[key] = value;\n\n onAction(state, key);\n }\n}\n\nexport default StateManager;","import CollisionType from '../Shared/Util/Constants/CollisionType';\n\nimport BodyStatus from './Constants/BodyStatus';\nimport ScrollStatus from './Constants/ScrollStatus';\nimport IActions from './Interfaces/IActions';\nimport State from './State';\n\nconst resolveActions = (state: State): IActions => ({\n focus(): void {\n state.isFocused = true;\n },\n\n blur(): void {\n state.isFocused = false;\n },\n\n invalidate(): void {\n state.isInvalid = true;\n },\n\n validate(): void {\n state.isInvalid = false;\n },\n\n topOut(): void {\n state.scrollStatus = ScrollStatus.AT_TOP;\n },\n\n bottomOut(): void {\n state.scrollStatus = ScrollStatus.AT_BOTTOM;\n },\n\n scroll(): void {\n state.scrollStatus = ScrollStatus.SCROLLED;\n },\n\n makeScrollable(): void {\n state.isScrollable = true;\n },\n\n makeUnscrollable(): void {\n state.isScrollable = false;\n },\n\n open(\n this: IActions,\n maxBodyHeight: number,\n collisionType: CollisionType,\n isScrollable: boolean\n ): void {\n if (state.isDisabled) return;\n\n this.closeOthers();\n\n switch (collisionType) {\n case CollisionType.NONE:\n case CollisionType.TOP:\n state.bodyStatus = BodyStatus.OPEN_BELOW;\n\n break;\n case CollisionType.BOTTOM:\n state.bodyStatus = BodyStatus.OPEN_ABOVE;\n\n break;\n }\n\n state.isScrollable = isScrollable;\n state.maxBodyHeight = maxBodyHeight;\n\n this.scrollToView(state, true);\n },\n\n close(): void {\n state.bodyStatus = BodyStatus.CLOSED;\n state.focusedIndex = -1;\n },\n\n selectOption(this: IActions, index: number, close = true): void {\n const optionAtIndex = state.getOptionFromIndex(index);\n\n if (index > -1 && (!optionAtIndex || optionAtIndex.isDisabled)) return;\n\n state.selectedIndex = index;\n\n if (state.isInvalid) {\n this.validate();\n }\n\n if (state.isSearching) {\n this.scrollToView(state);\n } else if (close) {\n this.close();\n }\n },\n\n focusOption(this: IActions, index: number, shouldScrollToView: boolean = false): void {\n const scrollToMiddle = Math.abs(index - state.focusedIndex) > 1;\n\n state.focusedIndex = index;\n\n if (shouldScrollToView) {\n this.scrollToView(state, scrollToMiddle);\n }\n },\n\n search(): void {\n state.isSearching = true;\n },\n\n resetSearch(): void {\n state.isSearching = false;\n },\n\n keying(): void {\n state.isKeying = true;\n },\n\n resetKeying(): void {\n state.isKeying = false;\n },\n\n useNative(): void {\n state.isUseNativeMode = true;\n }\n});\n\nexport default resolveActions;","import merge from 'helpful-merge';\n\nimport Config from '../Config/Config';\nimport isMobilePlatform from '../Shared/Util/isMobilePlatform';\n\nimport Group from './Group';\nimport Option from './Option';\nimport State from './State';\n\nclass StateMapper {\n public static mapFromSelect(selectElement: HTMLSelectElement, config: Config): State {\n const state = new State(null, config);\n\n let isWithinGroup = false;\n\n state.name = selectElement.name;\n state.isDisabled = selectElement.disabled;\n state.isRequired = selectElement.required;\n\n state.isUseNativeMode = (\n config.behavior.useNativeUiOnMobile &&\n isMobilePlatform(window.navigator.userAgent)\n );\n\n for (let i = 0, child: Element; (child = selectElement.children[i]); i++) {\n if (i === 0 && child.getAttribute('data-placeholder') !== null) {\n state.placeholder = child.textContent;\n (child as HTMLOptionElement).value = '';\n\n continue;\n }\n\n if (child instanceof HTMLOptionElement) {\n if (isWithinGroup === false) {\n state.groups.push(StateMapper.mapGroup());\n\n isWithinGroup = true;\n }\n\n state.lastGroup.options.push(StateMapper.mapOption(child));\n\n if (child.selected) state.selectedIndex = state.totalOptions - 1;\n } else if (child instanceof HTMLOptGroupElement) {\n isWithinGroup = true;\n\n state.groups.push(StateMapper.mapGroup(child));\n\n for (let j = 0, groupChild: Element; (groupChild = child.children[j]); j++) {\n state.lastGroup.options.push(\n StateMapper.mapOption(\n groupChild as HTMLOptionElement,\n child as HTMLOptGroupElement\n )\n );\n\n if ((groupChild as HTMLOptionElement).selected) state.selectedIndex = state.totalOptions - 1;\n }\n\n isWithinGroup = false;\n } else {\n throw new TypeError(\n `[EasyDropDown] Invalid child tag \"${child.tagName}\" found in provided \\``\n * element (for example, adding or removing an option).\n */\n\n public refresh: () => void;\n\n /**\n * Destroys the instance by removing all EasyDropDown-generated\n * elements from the DOM, and unbinding all event handlers.\n * The underlying select is returned to the root position.\n */\n\n public destroy: () => void;\n\n /**\n * An accessor property allowing writing to and reading\n * from the dropdown's value.\n */\n\n public value: string;\n\n constructor(implementation: Easydropdown) {\n this.open = implementation.open.bind(implementation);\n this.close = implementation.close.bind(implementation);\n this.refresh = implementation.refresh.bind(implementation);\n this.destroy = implementation.destroy.bind(implementation);\n\n Object.defineProperties(this, {\n value: {\n get: () => implementation.value,\n set: (nextValue: string) => implementation.value = nextValue\n }\n });\n }\n}\n\nexport default EasydropdownFacade;"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://easydropdown/webpack/universalModuleDefinition","webpack://easydropdown/webpack/bootstrap","webpack://easydropdown/./node_modules/helpful-merge/dist/index.js","webpack://easydropdown/./src/Shared/Util/dispatchOpen.ts","webpack://easydropdown/./src/Shared/Util/composeClassName.ts","webpack://easydropdown/./node_modules/helpful-merge/dist/Constants/ArrayStrategy.js","webpack://easydropdown/./src/Shared/Util/closestParent.ts","webpack://easydropdown/./src/Events/Constants/Selectors.ts","webpack://easydropdown/./src/Shared/Util/killSelectReaction.ts","webpack://easydropdown/./src/Easydropdown/cache.ts","webpack://easydropdown/./node_modules/helpful-merge/dist/merge.js","webpack://easydropdown/./node_modules/helpful-merge/dist/Messages.js","webpack://easydropdown/./src/Config/Config.ts","webpack://easydropdown/./src/Shared/Util/Constants/CollisionType.ts","webpack://easydropdown/./src/Events/Constants/KeyCodes.ts","webpack://easydropdown/./src/Events/Handlers/handleWindowClick.ts","webpack://easydropdown/./src/Renderer/Constants/AttributeChangeType.ts","webpack://easydropdown/./src/Renderer/Constants/DomChangeType.ts","webpack://easydropdown/./src/State/Constants/BodyStatus.ts","webpack://easydropdown/./src/State/Constants/ScrollStatus.ts","webpack://easydropdown/./src/State/Group.ts","webpack://easydropdown/./src/State/Option.ts","webpack://easydropdown/./src/umd.ts","webpack://easydropdown/./node_modules/custom-event-polyfill/polyfill.js","webpack://easydropdown/./src/Shared/Polyfills/Element.matches.ts","webpack://easydropdown/./src/Easydropdown/factory.ts","webpack://easydropdown/./src/Easydropdown/Easydropdown.ts","webpack://easydropdown/./node_modules/helpful-merge/dist/Config.js","webpack://easydropdown/./node_modules/helpful-merge/dist/deriveCustomTypeInstance.js","webpack://easydropdown/./node_modules/helpful-merge/dist/FluentMerge.js","webpack://easydropdown/./node_modules/helpful-merge/dist/handleMergeError.js","webpack://easydropdown/./src/Config/Behavior.ts","webpack://easydropdown/./src/Config/Callbacks.ts","webpack://easydropdown/./src/Config/ClassNames.ts","webpack://easydropdown/./src/Events/bindEvents.ts","webpack://easydropdown/./src/Shared/Util/throttle.ts","webpack://easydropdown/./src/Events/EventBinding.ts","webpack://easydropdown/./src/Events/getEventsList.ts","webpack://easydropdown/./src/Events/Handlers/handleBodyClick.ts","webpack://easydropdown/./src/Events/Handlers/handleBodyMousedown.ts","webpack://easydropdown/./src/Events/Handlers/handleBodyMouseover.ts","webpack://easydropdown/./src/Events/Handlers/handleHeadClick.ts","webpack://easydropdown/./src/Shared/Util/detectBodyCollision.ts","webpack://easydropdown/./src/Events/Handlers/handleItemsListScroll.ts","webpack://easydropdown/./src/Events/Handlers/handleSelectBlur.ts","webpack://easydropdown/./src/Events/Handlers/handleSelectFocus.ts","webpack://easydropdown/./src/Events/Handlers/handleSelectInvalid.ts","webpack://easydropdown/./src/Events/Handlers/handleSelectKeydown.ts","webpack://easydropdown/./src/Events/Handlers/handleSelectKeydownDown.ts","webpack://easydropdown/./src/Events/Handlers/handleSelectKeydownUp.ts","webpack://easydropdown/./src/Events/Handlers/handleSelectKeypress.ts","webpack://easydropdown/./src/Renderer/Renderer.ts","webpack://easydropdown/./src/Components/root.ts","webpack://easydropdown/./src/Components/body.ts","webpack://easydropdown/./src/Components/group.ts","webpack://easydropdown/./src/Components/option.ts","webpack://easydropdown/./src/Components/head.ts","webpack://easydropdown/./src/Components/arrow.ts","webpack://easydropdown/./src/Components/value.ts","webpack://easydropdown/./src/Shared/Util/createDomElementFromHtml.ts","webpack://easydropdown/./src/Renderer/Dom.ts","webpack://easydropdown/./src/Renderer/domDiff.ts","webpack://easydropdown/./src/Renderer/PatchCommand.ts","webpack://easydropdown/./src/Renderer/domPatch.ts","webpack://easydropdown/./src/Shared/Util/pollForSelectChange.ts","webpack://easydropdown/./src/Shared/Util/pollForSelectMutation.ts","webpack://easydropdown/./src/State/InjectedActions/closeOthers.ts","webpack://easydropdown/./src/State/InjectedActions/scrollToView.ts","webpack://easydropdown/./src/State/StateManager.ts","webpack://easydropdown/./src/State/resolveActions.ts","webpack://easydropdown/./src/State/StateMapper.ts","webpack://easydropdown/./src/Shared/Util/isMobilePlatform.ts","webpack://easydropdown/./src/State/State.ts","webpack://easydropdown/./src/Easydropdown/Timers.ts","webpack://easydropdown/./src/Easydropdown/EasydropdownFacade.ts"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","merge_1","ArrayStrategy_1","ArrayStrategy","default","detectBodyCollision_1","dispatchOpen","injectedDetectBodyCollision","actions","config","dom","collisionData","maxVisibleItems","maxVisibleItemsOverride","behavior","isScrollable","item","length","maxBodyHeight","sumItemsHeight","open","type","boundDispatchOpen","tokens","reduce","classNames","token","push","predicate","className","join","el","selector","includeSelf","parent","parentNode","matches","document","body","OPTION","select","_a","timers","clearTimeout","keyingTimeoutId","keying","setTimeout","resetKeying","disabled","focus","Config_1","deriveCustomTypeInstance_1","FluentMerge_1","handleMergeError_1","Messages","merge","target","source","options","isClientSide","sourceKeys","deep","PUSH","REPLACE","indexOf","arrayStrategy","RangeError","INVALID_ARRAY_STRATEGY","TypeError","TYPE_ERROR_TARGET","TYPE_ERROR_SOURCE","Array","isArray","apply","toString","getOwnPropertyNames","_i","sourceKeys_1","descriptor","getOwnPropertyDescriptor","set","includeReadOnly","includeNonEmurable","Node","documentElement","useReferenceIfArray","useReferenceIfTargetUnset","err","errorMessage","preserveTypeIfTargetUnset","keys","forEach","method","args","arguments","createFluent","MERGE_ERROR","offender","suggestion","strategy","Behavior_1","Callbacks_1","ClassNames_1","Config","this","callbacks","seal","CollisionType","UP","DOWN","SPACE","ENTER","ESC","_","state","isOpen","close","blur","AttributeChangeType","DomChangeType","BodyStatus","ScrollStatus","Group","label","isDisabled","Option","factory_1","ce","CustomEvent","cancelable","preventDefault","defaultPrevented","Error","e","event","params","evt","origPrevent","bubbles","detail","undefined","createEvent","initCustomEvent","Event","Element","msMatchesSelector","cache_1","Easydropdown_1","EasydropdownFacade_1","selectElementOrSelector","selectElement","querySelector","HTMLSelectElement","multiple","cache_2","cachedInstance","instance","factoryFn","decoratedFactory","all","selects","querySelectorAll","destroy","slice","helpful_merge_1","bindEvents_1","Renderer_1","dispatchOpen_1","pollForSelectChange_1","pollForSelectMutation_1","closeOthers_1","scrollToView_1","StateManager_1","StateMapper_1","Timers_1","Easydropdown","mapFromSelect","renderer","render","proxyActions","closeOthers","scrollToView","handleStateUpdate","eventBindings","pollChangeIntervalId","liveUpdates","pollMutationIntervalId","refresh","nextValue","update","group","option","queryDomRefs","clear","binding","unbind","cacheIndex","splice","cb","onOpen","onClose","onSelect","constructor","FluentMerge","sources","to","from","with","exec","_this","getTotalMatching","possibleKey","offendingKey","longer","shorter","leftPointer","leftInnerPointer","leftTotalMatching","lastCommonIndex","rightPointer","rightInnerPointer","rightTotalMatching","longerLastIndex","shorterLastIndex","Math","min","message","isSealed","isExtensible","reducer","offendingKeyLower","currBestMatch","currKey","totalMatching","toLowerCase","delta","abs","primer","Infinity","bestMatch","Behavior","showPlaceholderWhenOpen","openOnFocus","closeOnSelect","useNativeUiOnMobile","loop","clampMaxVisibleItems","Callbacks","ClassNames","rootOpen","rootOpenAbove","rootOpenBelow","rootDisabled","rootInvalid","rootFocused","rootHasValue","rootNative","gradientTop","gradientBottom","head","arrow","bodyScrollable","bodyAtTop","bodyAtBottom","itemsList","groupDisabled","groupHasLabel","groupLabel","optionDisabled","optionFocused","optionSelected","throttle_1","EventBinding_1","getEventsList_1","bindEvent","handlerParams","eventBindingRaw","eventBinding","boundHandler","handler","throttle","addEventListener","map","delay","timerId","last","now","Date","later","difference","EventBinding","debounce","passive","removeEventListener","handleBodyClick_1","handleBodyMousedown_1","handleBodyMouseover_1","handleHeadClick_1","handleItemsListScroll_1","handleSelectBlur_1","handleSelectFocus_1","handleSelectInvalid_1","handleSelectKeydown_1","handleSelectKeypress_1","handleWindowClick_1","handleWindowClick_2","closestParent_1","Selectors","stopPropagation","optionIndex","selectOption","startClickSelecting","isKeying","focusOption","isUseNativeMode","isClosed","CollisionType_1","CLEARSPACE","mapCollisionData","deltaTop","deltaBottom","maxHeight","itemHeight","NONE","largestDelta","max","TOP","BOTTOM","floor","bbHead","getBoundingClientRect","wh","innerHeight","top","bottom","_b","offsetHeight","scrollHeight","scrollTop","topOut","bottomOut","scroll","isClickSelecting","invalidate","killSelectReaction_1","KeyCodes","handleSelectKeydownDown_1","handleSelectKeydownUp_1","keyCode","isSearching","focusedIndex","metaKey","selectedIndex","iterations","incrementAmount","round","totalOptions","focusedOption","SEARCH_RESET_DURATION","searchResetDuration","includes","searchTimeoutId","search","resetSearch","root_1","createDomElementFromHtml_1","Dom_1","domDiff_1","domPatch_1","Renderer","html","rootElement","injectSelect","nextHtml","nextRoot","diffCommand","syncSelectWithValue","classList","remove","parentElement","replaceChild","tempSelect","setAttribute","dispatchEvent","localDom","ref","elements","element","composeClassName_1","body_1","head_1","isInvalid","isFocused","hasValue","isOpenAbove","isOpenBelow","isRequired","group_1","isAtTop","isAtBottom","styleAttr","groups","groupState","option_1","hasLabel","optionState","isSelected","selectedOption","arrow_1","value_1","isPlaceholderShown","humanReadableValue","temp","createElement","innerHTML","firstElementChild","Dom","totalHeight","AttributeChangeType_1","DomChangeType_1","PatchCommand_1","diffAttributeChanges","prev","next","totalAttributes","attributes","attributesMap","attributeChanges","attr1","attr2","sort","attr","change","ADD","REMOVE","EDIT","OUTER","domDiff","totalChildNodes","command","Text","textContent","INNER","newTextContent","HTMLElement","tagName","newNode","outerHTML","FULL","childNodes","childNode","childCommands","newInnerHtml","PatchCommand","index","patchAttributes","raf","requestAnimationFrame","patchAttribute","removeAttribute","domPatch","node","childCommand","POLL_INTERVAL_DURATION","lastValue","setInterval","getOptionIndexFromValue","handleMutation","lastOuterHtml","thisInstance","cache","getScrollTop","currentScrollTop","optionOffsetTop","optionHeight","bodyHeight","scrollOffset","remainder","scrollToMiddle","offset","offsetTop","resolveActions_1","StateManager","injectedActions","onAction","stateProxy","createStateProxy","getPropertyDescriptorsFromValue","proxy","getPrototypeOf","concat","localDescriptors","isAccessorProperty","readPropertyValue","updatePropertyValue","BodyStatus_1","ScrollStatus_1","validate","scrollStatus","AT_TOP","AT_BOTTOM","SCROLLED","makeScrollable","makeUnscrollable","collisionType","bodyStatus","OPEN_BELOW","OPEN_ABOVE","CLOSED","optionAtIndex","getOptionFromIndex","shouldScrollToView","useNative","isMobilePlatform_1","Group_1","Option_1","State_1","StateMapper","isWithinGroup","required","navigator","userAgent","child","children","getAttribute","HTMLOptionElement","mapGroup","lastGroup","mapOption","selected","HTMLOptGroupElement","j","groupChild","placeholder","isParentGroupDisabled","isIos","test","isAndroid","isOperaMini","isWindowsPhone","State","stateRaw","groupRaw","optionRaw","total","hasPlaceholder","Boolean","find","groupStartIndex","_c","Timers","clearInterval","EasydropdownFacade","implementation","defineProperties"],"mappings":"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","file":"easydropdown.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"easydropdown\"] = factory();\n\telse\n\t\troot[\"easydropdown\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 20);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar merge_1 = require(\"./merge\");\nvar ArrayStrategy_1 = require(\"./Constants/ArrayStrategy\");\nexports.ArrayStrategy = ArrayStrategy_1.default;\nexports.default = merge_1.default;\n//# sourceMappingURL=index.js.map","import Config from '../../Config/Config';\nimport Dom from '../../Renderer/Dom';\nimport IActions from '../../State/Interfaces/IActions';\n\nimport detectBodyCollision from './detectBodyCollision';\nimport IDispatchOpen from './Interfaces/IDispatchOpen';\n\nfunction dispatchOpen(\n injectedDetectBodyCollision,\n actions: IActions,\n config: Config,\n dom: Dom\n): void {\n const collisionData = injectedDetectBodyCollision(dom, config);\n\n const maxVisibleItems = collisionData.maxVisibleItemsOverride > -1 ?\n collisionData.maxVisibleItemsOverride : config.behavior.maxVisibleItems;\n\n const isScrollable = dom.item.length > maxVisibleItems;\n const maxBodyHeight = dom.sumItemsHeight(maxVisibleItems);\n\n actions.open(maxBodyHeight, collisionData.type, isScrollable);\n}\n\nconst boundDispatchOpen: IDispatchOpen = dispatchOpen.bind(null, detectBodyCollision);\n\nexport {\n boundDispatchOpen as default,\n dispatchOpen\n};","function composeClassName(tokens: Array): string {\n return tokens\n .reduce((classNames, token) => {\n if (typeof token === 'string') classNames.push(token);\n else {\n const [predicate, className] = token;\n\n if (predicate) classNames.push(className);\n }\n\n return classNames;\n }, [])\n .join(' ');\n}\n\nexport default composeClassName;","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ArrayStrategy;\n(function (ArrayStrategy) {\n ArrayStrategy[\"PUSH\"] = \"PUSH\";\n ArrayStrategy[\"REPLACE\"] = \"REPLACE\";\n})(ArrayStrategy || (ArrayStrategy = {}));\nexports.default = ArrayStrategy;\n//# sourceMappingURL=ArrayStrategy.js.map","/**\n * Returns the closest parent of a given element matching the\n * provided selector, optionally including the element itself.\n */\n\nfunction closestParent(\n el: HTMLElement,\n selector: string,\n includeSelf: boolean = false\n): HTMLElement {\n let parent = el.parentNode as HTMLElement;\n\n if (includeSelf && el.matches(selector)) {\n return el;\n }\n\n while (parent && parent !== document.body) {\n if (parent.matches && parent.matches(selector)) {\n return parent;\n } else if (parent.parentNode) {\n parent = parent.parentNode as HTMLElement;\n } else {\n return null;\n }\n }\n\n return null;\n}\n\nexport default closestParent;","export const OPTION = '[data-ref~=\"option\"]';","import IHandlerParams from '../../Events/Interfaces/IHandlerParams';\n\nconst killSelectReaction = (select: HTMLSelectElement, {actions, timers}: IHandlerParams): void => {\n const keyingResetDuration = 100;\n\n window.clearTimeout(timers.keyingTimeoutId);\n\n actions.keying();\n\n timers.keyingTimeoutId = window.setTimeout(() => actions.resetKeying(), keyingResetDuration);\n\n select.disabled = true;\n\n setTimeout(() => {\n select.disabled = false;\n select.focus();\n });\n};\n\nexport default killSelectReaction;","import Easydropdown from './Easydropdown';\n\nconst cache: Easydropdown[] = [];\n\nexport default cache;","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Config_1 = require(\"./Config\");\nvar ArrayStrategy_1 = require(\"./Constants/ArrayStrategy\");\nvar deriveCustomTypeInstance_1 = require(\"./deriveCustomTypeInstance\");\nvar FluentMerge_1 = require(\"./FluentMerge\");\nvar handleMergeError_1 = require(\"./handleMergeError\");\nvar Messages = require(\"./Messages\");\nfunction merge(target, source, options) {\n if (options === void 0) { options = null; }\n var isClientSide = typeof window !== 'undefined';\n var sourceKeys = [];\n var config;\n if (options instanceof Config_1.default) {\n config = options;\n }\n else {\n config = new Config_1.default();\n }\n if (typeof options === 'boolean' && options === true) {\n config.deep = true;\n }\n else if (options && config !== options && typeof options === 'object') {\n merge(config, options);\n if ([ArrayStrategy_1.default.PUSH, ArrayStrategy_1.default.REPLACE].indexOf(config.arrayStrategy) < 0) {\n throw RangeError(Messages.INVALID_ARRAY_STRATEGY(config.arrayStrategy));\n }\n }\n if (!target || typeof target !== 'object') {\n throw new TypeError(Messages.TYPE_ERROR_TARGET(target));\n }\n if (!source || typeof source !== 'object') {\n throw new TypeError(Messages.TYPE_ERROR_SOURCE(source));\n }\n if (Array.isArray(source)) {\n if (config.arrayStrategy === ArrayStrategy_1.default.PUSH) {\n // Merge arrays via push()\n target.push.apply(target, source);\n return target;\n }\n for (var i = 0; i < source.length; i++) {\n sourceKeys.push(i.toString());\n }\n }\n else {\n sourceKeys = Object.getOwnPropertyNames(source);\n }\n for (var _i = 0, sourceKeys_1 = sourceKeys; _i < sourceKeys_1.length; _i++) {\n var key = sourceKeys_1[_i];\n var descriptor = Object.getOwnPropertyDescriptor(source, key);\n // Skip read-only properties\n if (typeof descriptor.get === 'function' && !descriptor.set && !config.includeReadOnly)\n continue;\n // Skip non-enumerable properties\n if (!descriptor.enumerable && !config.includeNonEmurable)\n continue;\n if (!config.deep ||\n typeof source[key] !== 'object' ||\n (isClientSide && source[key] instanceof window.Node) ||\n (isClientSide && source[key] === window.document.body) ||\n (isClientSide && source[key] === window.document.documentElement) ||\n source[key] === null ||\n (Array.isArray(source[key]) && config.useReferenceIfArray) ||\n (!target[key] && config.useReferenceIfTargetUnset)) {\n // If:\n // - Shallow merge\n // - All non-object primatives\n // - , , or DOM Nodes\n // - Null pointers\n // - Arrays, if `useReferenceIfArray` set\n // - Target prop null or undefined and `useRererenceIfTargetUnset` set\n try {\n target[key] = source[key];\n }\n catch (err) {\n handleMergeError_1.default(err, target, key, config.errorMessage);\n }\n }\n else {\n // Deep merge objects/arrays\n if (!Object.prototype.hasOwnProperty.call(target, key) || target[key] === null) {\n // If property does not exist on target, instantiate an empty\n // object, custom type or array to merge into\n try {\n target[key] = Array.isArray(source[key]) ?\n [] : config.preserveTypeIfTargetUnset ?\n deriveCustomTypeInstance_1.default(source[key]) : {};\n }\n catch (err) {\n handleMergeError_1.default(err, target, key, config.errorMessage);\n }\n }\n // Recursively deep copy objects or arrays\n merge(target[key], source[key], config);\n }\n }\n return target;\n}\nvar createFluent = function (method) { return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return (_a = new FluentMerge_1.default())[method].apply(_a, args);\n var _a;\n}; };\nObject\n .keys(FluentMerge_1.default.prototype)\n .forEach(function (method) { return merge[method] = createFluent(method); });\nexports.default = merge;\n//# sourceMappingURL=merge.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MERGE_ERROR = function (offender, suggestion) {\n if (suggestion === void 0) { suggestion = ''; }\n return \"Unknown property \\\"\" + offender + \"\\\"\" + (suggestion ? \". Did you mean \\\"\" + suggestion + \"\\\"?\" : '');\n};\nexports.TYPE_ERROR_TARGET = function (target) {\n return \"[Helpful Merge] Target \\\"\" + target + \"\\\" must be a valid object\";\n};\nexports.TYPE_ERROR_SOURCE = function (source) {\n return \"[Helpful Merge] Source \\\"\" + source + \"\\\" must be a valid object\";\n};\nexports.INVALID_ARRAY_STRATEGY = function (strategy) {\n return \"[Helpful Merge] Invalid array strategy \\\"\" + strategy + \"\\\"\";\n};\n//# sourceMappingURL=Messages.js.map","import Behavior from './Behavior';\nimport Callbacks from './Callbacks';\nimport ClassNames from './ClassNames';\nimport IConfig from './Interfaces/IConfig';\n\nclass Config implements IConfig {\n public callbacks = new Callbacks();\n public classNames = new ClassNames();\n public behavior = new Behavior();\n\n constructor() {\n Object.seal(this);\n }\n}\n\nexport default Config;","enum CollisionType {\n NONE = 'NONE',\n TOP = 'TOP',\n BOTTOM = 'BOTTOM'\n}\n\nexport default CollisionType;","export const UP = 38;\nexport const DOWN = 40;\nexport const SPACE = 32;\nexport const ENTER = 13;\nexport const ESC = 27;","import IHandlerParams from '../Interfaces/IHandlerParams';\n\nfunction handleWindowClick(_, {state, actions, dom}: IHandlerParams): void {\n if (!state.isOpen) return;\n\n actions.close();\n\n dom.select.blur();\n}\n\nexport default handleWindowClick;","enum AttributeChangeType {\n ADD = 'ADD',\n EDIT = 'EDIT',\n REMOVE = 'REMOVE'\n}\n\nexport default AttributeChangeType;","export enum DomChangeType {\n NONE = 'NONE',\n FULL = 'FULL',\n REPLACE = 'REPLACE',\n INNER = 'INNER',\n OUTER = 'OUTER'\n}\n\nexport default DomChangeType;","enum BodyStatus {\n CLOSED = 'CLOSED',\n OPEN_ABOVE = 'OPEN_ABOVE',\n OPEN_BELOW = 'OPEN_BELOW'\n}\n\nexport default BodyStatus;","enum ScrollStatus {\n AT_TOP = 'AT_TOP',\n SCROLLED = 'SCROLLED',\n AT_BOTTOM = 'AT_BOTTOM'\n}\n\nexport default ScrollStatus;","import Option from './Option';\n\nclass Group {\n public label: string = '';\n public options: Option[] = [];\n public isDisabled: boolean = false;\n\n public get totalOptions(): number {\n return this.options.length;\n }\n\n public get hasLabel(): boolean {\n return this.label !== '';\n }\n}\n\nexport default Group;","class Option {\n public label: string = '';\n public value: string = '';\n public isDisabled: boolean = false;\n}\n\nexport default Option;","import 'custom-event-polyfill';\n\nimport './Shared/Polyfills/Element.matches';\n\nimport factory from './Easydropdown/factory';\n\nmodule.exports = factory;","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\n(function() {\n if (typeof window === 'undefined') {\n return;\n }\n\n try {\n var ce = new window.CustomEvent('test', { cancelable: true });\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n } catch (e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(\n event,\n params.bubbles,\n params.cancelable,\n params.detail\n );\n origPrevent = evt.preventDefault;\n evt.preventDefault = function() {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function() {\n return true;\n }\n });\n } catch (e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n }\n})();\n","if (!Element.prototype.matches) {\n Element.prototype.matches = (Element.prototype as any).msMatchesSelector;\n}","import IConfig from '../Config/Interfaces/IConfig';\n\nimport cache from './cache';\nimport Easydropdown from './Easydropdown';\nimport EasydropdownFacade from './EasydropdownFacade';\nimport IFactory from './Interfaces/IFactory';\n\nfunction factory(\n selectElementOrSelector: (HTMLSelectElement|string),\n options: IConfig = {}\n): EasydropdownFacade {\n let selectElement = selectElementOrSelector;\n\n if (typeof selectElementOrSelector === 'string') {\n selectElement = document.querySelector(selectElementOrSelector) as HTMLSelectElement;\n }\n\n if (!(selectElement instanceof HTMLSelectElement)) {\n throw new TypeError('[EasyDropDown] Invalid select element provided');\n }\n\n if (selectElement.multiple) {\n throw new Error(\n '[EasyDropDown] EasyDropDown does not support the `multiple`' +\n ' attribute on select elements.'\n );\n }\n\n for (const cachedInstance of cache) {\n if (cachedInstance.selectElement === selectElement) {\n return new EasydropdownFacade(cachedInstance);\n }\n }\n\n const instance = new Easydropdown(selectElement, options);\n\n // @ts-ignore\n\n cache.push(instance);\n\n return new EasydropdownFacade(instance);\n}\n\nfunction decorateFactory(factoryFn: any): IFactory {\n factoryFn.all = (options: IConfig = {}) => {\n const selects = document.querySelectorAll('select');\n\n Array.prototype.forEach.call(selects, select => {\n const instance = factory(select, options);\n\n return instance;\n });\n };\n\n factoryFn.destroy = () => {\n const cacheCopy = cache.slice();\n\n cacheCopy.forEach(instance => instance.destroy());\n };\n\n return factoryFn;\n}\n\nconst decoratedFactory = decorateFactory(factory);\n\nexport default decoratedFactory;","import merge from 'helpful-merge';\n\nimport Config from '../Config/Config';\nimport ICallback from '../Config/Interfaces/ICallback';\nimport IConfig from '../Config/Interfaces/IConfig';\nimport ISelectCallback from '../Config/Interfaces/ISelectCallback';\nimport bindEvents from '../Events/bindEvents';\nimport EventBinding from '../Events/EventBinding';\nimport Dom from '../Renderer/Dom';\nimport Renderer from '../Renderer/Renderer';\nimport dispatchOpen from '../Shared/Util/dispatchOpen';\nimport pollForSelectChange from '../Shared/Util/pollForSelectChange';\nimport pollForSelectMutation from '../Shared/Util/pollForSelectMutation';\nimport closeOthers from '../State/InjectedActions/closeOthers';\nimport scrollToView from '../State/InjectedActions/scrollToView';\nimport IActions from '../State/Interfaces/IActions';\nimport State from '../State/State';\nimport StateManager from '../State/StateManager';\nimport StateMapper from '../State/StateMapper';\n\nimport cache from './cache';\nimport Timers from './Timers';\n\nclass Easydropdown {\n public actions: IActions;\n\n private config: Config;\n private state: State;\n private dom: Dom;\n private eventBindings: EventBinding[];\n private renderer: Renderer;\n private timers: Timers;\n\n constructor(selectElement: HTMLSelectElement, options: IConfig) {\n this.config = merge(new Config(), options, true);\n this.state = StateMapper.mapFromSelect(selectElement, this.config);\n this.renderer = new Renderer(this.config.classNames);\n this.dom = this.renderer.render(this.state, selectElement);\n this.timers = new Timers();\n\n this.actions = StateManager.proxyActions(this.state, {\n closeOthers: closeOthers.bind(null, this, cache),\n scrollToView: scrollToView.bind(null, this.dom, this.timers)\n }, this.handleStateUpdate.bind(this));\n\n this.eventBindings = bindEvents({\n actions: this.actions,\n config: this.config,\n dom: this.dom,\n state: this.state,\n timers: this.timers\n });\n\n this.timers.pollChangeIntervalId = pollForSelectChange(this.dom.select, this.state, this.actions, this.config);\n\n if (this.config.behavior.liveUpdates) {\n this.timers.pollMutationIntervalId = pollForSelectMutation(\n this.dom.select,\n this.state,\n this.refresh.bind(this)\n );\n }\n }\n\n public get selectElement(): HTMLSelectElement {\n return this.dom.select;\n }\n\n public get value(): string {\n return this.state.value;\n }\n\n public set value(nextValue: string) {\n if (typeof nextValue !== 'string') {\n throw new TypeError('[EasyDropDown] Provided value not a valid string');\n }\n\n this.dom.select.value = nextValue;\n }\n\n public open(): void {\n dispatchOpen(this.actions, this.config, this.dom);\n }\n\n public close(): void {\n this.actions.close();\n }\n\n public refresh(): void {\n this.state = merge(\n this.state,\n StateMapper.mapFromSelect(this.dom.select, this.config)\n );\n\n this.renderer.update(this.state);\n\n this.dom.group.length = this.dom.option.length = this.dom.item.length = 0;\n\n Renderer.queryDomRefs(this.dom, ['group', 'option', 'item']);\n }\n\n public destroy(): void {\n this.timers.clear();\n this.eventBindings.forEach(binding => binding.unbind());\n this.renderer.destroy();\n\n const cacheIndex = cache.indexOf(this);\n\n cache.splice(cacheIndex, 1);\n }\n\n private handleStateUpdate(state: State, key: keyof State): void {\n const {callbacks} = this.config;\n\n let cb: ICallback;\n\n this.renderer.update(state, key);\n\n switch (key) {\n case 'bodyStatus':\n if (state.isOpen) {\n cb = callbacks.onOpen;\n } else {\n cb = callbacks.onClose;\n }\n\n if (typeof cb === 'function') cb();\n\n break;\n case 'selectedIndex':\n cb = callbacks.onSelect;\n\n if (typeof cb === 'function') (cb as ISelectCallback)(state.value);\n }\n }\n}\n\nexport default Easydropdown;","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ArrayStrategy_1 = require(\"./Constants/ArrayStrategy\");\nvar Messages = require(\"./Messages\");\nvar Config = /** @class */ (function () {\n function Config() {\n this.deep = false;\n this.useReferenceIfTargetUnset = false;\n this.useReferenceIfArray = false;\n this.preserveTypeIfTargetUnset = false;\n this.includeReadOnly = false;\n this.includeNonEmurable = false;\n this.arrayStrategy = ArrayStrategy_1.default.REPLACE;\n this.errorMessage = Messages.MERGE_ERROR;\n Object.seal(this);\n }\n return Config;\n}());\nexports.default = Config;\n//# sourceMappingURL=Config.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction deriveCustoTypeInstance(_a) {\n var constructor = _a.constructor;\n if (typeof constructor === 'function' && constructor !== Object) {\n return new constructor();\n }\n return {};\n}\nexports.default = deriveCustoTypeInstance;\n//# sourceMappingURL=deriveCustomTypeInstance.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar merge_1 = require(\"./merge\");\nvar FluentMerge = /** @class */ (function () {\n function FluentMerge() {\n this.target = null;\n this.sources = [];\n this.config = {};\n }\n /**\n * Supplies a fluent merge instance with a target object to merge into and return.\n */\n FluentMerge.prototype.to = function (target) {\n this.target = target;\n return this;\n };\n /**\n * Supplies a fluent merge instance with one or more source objects to merge from, in right to left order.\n */\n FluentMerge.prototype.from = function () {\n var sources = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n sources[_i] = arguments[_i];\n }\n this.sources = sources;\n return this;\n };\n /**\n * Supplies a fluent merge instance with a configuration object of one or more options.\n */\n FluentMerge.prototype.with = function (options) {\n this.config = options;\n return this;\n };\n /**\n * Executes a fluent merge instance, merging all provided sources into the\n * target, as per any provided configuration, and returning a reference to\n * the target.\n */\n FluentMerge.prototype.exec = function () {\n var _this = this;\n return this.sources.reduce(function (target, source) { return merge_1.default(target, source, _this.config); }, this.target || {});\n };\n return FluentMerge;\n}());\nexports.default = FluentMerge;\n//# sourceMappingURL=FluentMerge.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction handleMergeError(err, target, offendingKey, message) {\n // Rethrow if any of the following:\n // - offending key already exists on target\n // - object not sealed\n // - is extensible\n // - error not a TypeError\n if (Object.hasOwnProperty.call(target, offendingKey) ||\n !Object.isSealed(target) ||\n Object.isExtensible(target) ||\n !(err instanceof TypeError))\n throw err;\n var reducer = reduceBestMatch.bind(null, offendingKey, offendingKey.toLowerCase());\n var primer = { key: '', delta: Infinity, totalMatching: 0 };\n // Iterate through keys in target, for each key, compare with\n // the offending key. Greatest number of matching characters wins.\n var bestMatch = Object.keys(target).reduce(reducer, primer);\n var suggestion = bestMatch && bestMatch.totalMatching > 1 ? bestMatch.key : '';\n throw new TypeError(message(offendingKey, suggestion));\n}\n/**\n * Compares current key with current best match.\n */\nfunction reduceBestMatch(offendingKeyLower, offendingKey, currBestMatch, currKey) {\n var totalMatching = getTotalMatching(currKey.toLowerCase(), offendingKeyLower);\n var delta = Math.abs(currKey.length - offendingKey.length);\n if (totalMatching > currBestMatch.totalMatching ||\n (totalMatching === currBestMatch.totalMatching && delta < currBestMatch.delta)) {\n // If a greater number of matching characters, or the same\n // number, but a lesser delta, usurp the best match\n return { key: currKey, delta: delta, totalMatching: totalMatching };\n }\n return currBestMatch;\n}\n/**\n * Returns the number of common, consecutive characters\n * between two strings.\n */\nfunction getTotalMatching(possibleKey, offendingKey) {\n var longer = possibleKey.length > offendingKey.length ? possibleKey : offendingKey;\n var shorter = longer === possibleKey ? offendingKey : possibleKey;\n var leftPointer = 0;\n var leftInnerPointer = 0;\n var leftTotalMatching = 0;\n var lastCommonIndex = -1;\n for (; leftPointer < longer.length; leftPointer++) {\n while (leftTotalMatching === 0 &&\n longer[leftPointer] !== shorter[leftInnerPointer] &&\n leftInnerPointer < shorter.length) {\n // No match at present, move innerPointer through all possible\n // indices until a match is found\n leftInnerPointer++;\n }\n if (longer[leftPointer] === shorter[leftInnerPointer]) {\n // Match found\n if (lastCommonIndex !== leftPointer - 1) {\n // If beginning of a new match, reset total common\n leftTotalMatching = 0;\n }\n lastCommonIndex = leftPointer;\n leftTotalMatching++;\n leftInnerPointer++;\n // Whole word matched, end\n if (leftTotalMatching === shorter.length)\n break;\n }\n else if (leftTotalMatching > 1) {\n // No match, but at least two common characters found, end\n break;\n }\n else {\n // No match at this index, reset\n leftTotalMatching = leftInnerPointer = 0;\n }\n }\n lastCommonIndex = -1;\n var rightPointer = 0;\n var rightInnerPointer = 0;\n var rightTotalMatching = 0;\n var longerLastIndex = longer.length - 1;\n var shorterLastIndex = shorter.length - 1;\n // As above, but from right to left\n for (; rightPointer < longer.length - leftPointer; rightPointer++) {\n while (rightTotalMatching === 0 &&\n longer[longerLastIndex - rightPointer] !== shorter[shorterLastIndex - rightInnerPointer] &&\n rightInnerPointer < shorter.length) {\n rightInnerPointer++;\n }\n if (longer[longerLastIndex - rightPointer] === shorter[shorterLastIndex - rightInnerPointer]) {\n if (lastCommonIndex !== rightPointer - 1)\n rightTotalMatching = 0;\n lastCommonIndex = rightPointer;\n rightTotalMatching++;\n rightInnerPointer++;\n }\n else if (rightTotalMatching > 1) {\n break;\n }\n else {\n rightTotalMatching = rightInnerPointer = 0;\n }\n }\n return Math.min(shorter.length, leftTotalMatching + rightTotalMatching);\n}\nexports.getTotalMatching = getTotalMatching;\nexports.default = handleMergeError;\n//# sourceMappingURL=handleMergeError.js.map","import IBehavior from './Interfaces/IBehavior';\n\nclass Behavior implements IBehavior {\n public showPlaceholderWhenOpen: boolean = false;\n public openOnFocus: boolean = false;\n public closeOnSelect: boolean = true;\n public useNativeUiOnMobile: boolean = true;\n public loop: boolean = false;\n public clampMaxVisibleItems: boolean = true;\n public liveUpdates: boolean = false;\n public maxVisibleItems: number = 15;\n\n constructor() {\n Object.seal(this);\n }\n}\n\nexport default Behavior;","import ICallback from './Interfaces/ICallback';\n\nclass Callbacks {\n public onOpen: ICallback = null;\n public onClose: ICallback = null;\n public onSelect: ICallback = null;\n\n constructor() {\n Object.seal(this);\n }\n}\n\nexport default Callbacks;","import IClassNames from './Interfaces/IClassNames';\n\nclass ClassNames implements IClassNames {\n public root: string = 'edd-root';\n public rootOpen: string = 'edd-root-open';\n public rootOpenAbove: string = 'edd-root-open-above';\n public rootOpenBelow: string = 'edd-root-open-below';\n public rootDisabled: string = 'edd-root-disabled';\n public rootInvalid: string = 'edd-root-invalid';\n public rootFocused: string = 'edd-root-focused';\n public rootHasValue: string = 'edd-root-has-value';\n public rootNative: string = 'edd-root-native';\n public gradientTop: string = 'edd-gradient-top';\n public gradientBottom: string = 'edd-gradient-bottom';\n public head: string = 'edd-head';\n public value: string = 'edd-value';\n public arrow: string = 'edd-arrow';\n public select: string = 'edd-select';\n public body: string = 'edd-body';\n public bodyScrollable: string = 'edd-body-scrollable';\n public bodyAtTop: string = 'edd-body-at-top';\n public bodyAtBottom: string = 'edd-body-at-bottom';\n public itemsList: string = 'edd-items-list';\n public group: string = 'edd-group';\n public groupDisabled: string = 'edd-group-disabled';\n public groupHasLabel: string = 'edd-group-has-label';\n public groupLabel: string = 'edd-group-label';\n public option: string = 'edd-option';\n public optionDisabled: string = 'edd-option-disabled';\n public optionFocused: string = 'edd-option-focused';\n public optionSelected: string = 'edd-option-selected';\n\n constructor() {\n Object.seal(this);\n }\n}\n\nexport default ClassNames;","import throttle from '../Shared/Util/throttle';\n\nimport EventBinding from './EventBinding';\nimport getEventsList from './getEventsList';\nimport IEventBinding from './Interfaces/IEventBinding';\nimport IHandlerParams from './Interfaces/IHandlerParams';\n\nfunction bindEvent(handlerParams: IHandlerParams, eventBindingRaw: IEventBinding): EventBinding {\n const eventBinding = new EventBinding(eventBindingRaw);\n\n if (!eventBinding.target) return eventBinding;\n\n const boundHandler = (e) => eventBinding.handler(e, handlerParams);\n\n if (eventBinding.throttle > 0) {\n eventBinding.boundHandler = throttle(boundHandler, eventBinding.throttle);\n } else {\n eventBinding.boundHandler = boundHandler;\n }\n\n eventBinding.target.addEventListener(eventBinding.type, eventBinding.boundHandler);\n\n return eventBinding;\n}\n\nfunction bindEvents(handlerParams: IHandlerParams): EventBinding[] {\n return getEventsList(handlerParams.dom).map(bindEvent.bind(null, handlerParams));\n}\n\nexport {\n bindEvents as default,\n bindEvent\n};","function throttle(\n handler: (...args: any[]) => void,\n delay: number\n): (...args: any[]) => void {\n let timerId = null;\n let last: number = -Infinity;\n\n return function(...args): void {\n const now = Date.now();\n\n const later = () => {\n timerId = null;\n\n handler.apply(this, args);\n\n last = now;\n };\n\n const difference = now - last;\n\n if (difference >= delay) {\n later();\n } else {\n clearTimeout(timerId);\n\n timerId = setTimeout(later, delay - difference);\n }\n };\n}\n\nexport default throttle;","import merge from 'helpful-merge';\n\nimport IEventBinding from './Interfaces/IEventBinding';\nimport IEventHandler from './Interfaces/IEventHandler';\n\nclass EventBinding implements IEventBinding {\n public type: string = '';\n public target: HTMLElement = null;\n public debounce: number = 0;\n public throttle: number = 0;\n public handler: IEventHandler = null;\n public boundHandler: EventListener = null;\n public passive: boolean = false;\n\n constructor(eventBindingRaw: IEventBinding|string) {\n merge(this, eventBindingRaw);\n\n Object.seal(this);\n }\n\n public unbind(): void {\n if (!this.target) return;\n\n this.target.removeEventListener(this.type, this.boundHandler);\n }\n}\n\nexport default EventBinding;","import Dom from '../Renderer/Dom';\n\nimport handleBodyClick from './Handlers/handleBodyClick';\nimport handleBodyMousedown from './Handlers/handleBodyMousedown';\nimport handleBodyMouseover from './Handlers/handleBodyMouseover';\nimport handleHeadClick from './Handlers/handleHeadClick';\nimport handleItemsListScroll from './Handlers/handleItemsListScroll';\nimport handleSelectBlur from './Handlers/handleSelectBlur';\nimport handleSelectFocus from './Handlers/handleSelectFocus';\nimport handleSelectInvalid from './Handlers/handleSelectInvalid';\nimport handleSelectKeydown from './Handlers/handleSelectKeydown';\nimport handleSelectKeypress from './Handlers/handleSelectKeypress';\nimport handleWindowClick from './Handlers/handleWindowClick';\nimport handleWindowResize from './Handlers/handleWindowClick';\nimport IEventBinding from './Interfaces/IEventBinding';\n\nconst getEventsList = (dom: Dom): IEventBinding[] => [\n {\n target: dom.head,\n type: 'click',\n handler: handleHeadClick\n },\n {\n target: dom.body,\n type: 'mousedown',\n handler: handleBodyMousedown\n },\n {\n target: dom.body,\n type: 'click',\n handler: handleBodyClick\n },\n {\n target: dom.body,\n type: 'mouseover',\n handler: handleBodyMouseover\n },\n {\n target: dom.itemsList,\n type: 'scroll',\n handler: handleItemsListScroll\n },\n {\n target: dom.select,\n type: 'keydown',\n handler: handleSelectKeydown\n },\n {\n target: dom.select,\n type: 'invalid',\n handler: handleSelectInvalid\n },\n {\n target: dom.select,\n type: 'keypress',\n handler: handleSelectKeypress\n },\n {\n target: dom.select,\n type: 'focus',\n handler: handleSelectFocus\n },\n {\n target: dom.select,\n type: 'blur',\n handler: handleSelectBlur\n },\n {\n target: document.documentElement,\n type: 'click',\n handler: handleWindowClick\n },\n {\n target: window,\n type: 'resize',\n handler: handleWindowResize,\n throttle: 100\n }\n];\n\nexport default getEventsList;","import closestParent from '../../Shared/Util/closestParent';\nimport * as Selectors from '../Constants/Selectors';\nimport IHandlerParams from '../Interfaces/IHandlerParams';\n\nfunction handleBodyClick(e: Event, {state, actions, dom, config}: IHandlerParams): void {\n e.stopPropagation();\n\n const option = closestParent(e.target as HTMLElement, Selectors.OPTION, true);\n\n if (!option) return;\n\n const optionIndex = Array.prototype.indexOf.call(dom.option, option);\n\n actions.selectOption(optionIndex, config.behavior.closeOnSelect);\n}\n\nexport default handleBodyClick;","import closestParent from '../../Shared/Util/closestParent';\nimport * as Selectors from '../Constants/Selectors';\nimport IHandlerParams from '../Interfaces/IHandlerParams';\n\nfunction handleBodyMousedown(e: Event, {actions}: IHandlerParams): void {\n e.stopPropagation();\n\n const option = closestParent(e.target as HTMLElement, Selectors.OPTION, true);\n\n if (!option) return;\n\n actions.startClickSelecting();\n}\n\nexport default handleBodyMousedown;","import closestParent from '../../Shared/Util/closestParent';\nimport * as Selectors from '../Constants/Selectors';\nimport IHandlerParams from '../Interfaces/IHandlerParams';\n\nfunction handleBodyMouseover(e: Event, {state, actions, dom}: IHandlerParams): void {\n e.stopPropagation();\n\n const option = closestParent(e.target as HTMLElement, Selectors.OPTION, true);\n\n if (!option || state.isKeying) return;\n\n const optionIndex = Array.prototype.indexOf.call(dom.option, option);\n\n actions.focusOption(optionIndex);\n}\n\nexport default handleBodyMouseover;","import dispatchOpen from '../../Shared/Util/dispatchOpen';\nimport IHandlerParams from '../Interfaces/IHandlerParams';\n\nfunction handleHeadClick(e: MouseEvent, {state, actions, dom, config}: IHandlerParams): void {\n if (state.isUseNativeMode) return;\n\n e.stopPropagation();\n\n if (state.isClosed) {\n dispatchOpen(actions, config, dom);\n\n dom.select.focus();\n } else {\n actions.close();\n }\n}\n\nexport default handleHeadClick;","import Config from '../../Config/Config';\nimport Dom from '../../Renderer/Dom';\n\nimport CollisionType from './Constants/CollisionType';\nimport ICollisionData from './Interfaces/ICollisionData';\n\nconst CLEARSPACE = 10;\n\nfunction mapCollisionData(deltaTop, deltaBottom, maxHeight, itemHeight): ICollisionData {\n let type = CollisionType.NONE;\n let maxVisibleItemsOverride = -1;\n\n if (deltaTop <= maxHeight && deltaBottom <= maxHeight) {\n const largestDelta = Math.max(deltaBottom, deltaTop);\n\n type = deltaTop < deltaBottom ? CollisionType.TOP : CollisionType.BOTTOM;\n maxVisibleItemsOverride = Math.floor(largestDelta / itemHeight);\n } else if (deltaTop <= maxHeight) {\n type = CollisionType.TOP;\n } else if (deltaBottom <= maxHeight) {\n type = CollisionType.BOTTOM;\n }\n\n return {type, maxVisibleItemsOverride};\n}\n\nfunction detectBodyCollision(dom: Dom, config: Config): ICollisionData {\n const bbHead = dom.head.getBoundingClientRect();\n const wh = window.innerHeight;\n const deltaTop = bbHead.top - CLEARSPACE;\n const deltaBottom = wh - bbHead.bottom - CLEARSPACE;\n\n if (dom.option.length < 1) return {\n type: CollisionType.NONE,\n maxVisibleItemsOverride: -1\n };\n\n const maxVisibleItems = Math.min(config.behavior.maxVisibleItems, dom.item.length);\n const maxHeight = dom.sumItemsHeight(maxVisibleItems);\n const itemHeight = dom.sumItemsHeight(1);\n\n return mapCollisionData(deltaTop, deltaBottom, maxHeight, itemHeight);\n}\n\nexport {\n detectBodyCollision as default,\n mapCollisionData\n};","import IHandlerParams from '../Interfaces/IHandlerParams';\n\nfunction handleItemsListScroll(e: Event, {state, actions, dom}: IHandlerParams): void {\n e.stopPropagation();\n\n const {offsetHeight, scrollHeight, scrollTop} = dom.itemsList;\n\n if (scrollTop === 0) {\n actions.topOut();\n } else if (scrollTop === scrollHeight - offsetHeight) {\n actions.bottomOut();\n } else {\n actions.scroll();\n }\n}\n\nexport default handleItemsListScroll;","import IHandlerParams from '../Interfaces/IHandlerParams';\n\nfunction handleSelectBlur(e: Event, {actions, state, config}: IHandlerParams): void {\n if (state.isKeying) return;\n\n actions.blur();\n\n if (config.behavior.openOnFocus && !state.isClickSelecting) actions.close();\n}\n\nexport default handleSelectBlur;","import dispatchOpen from '../../Shared/Util/dispatchOpen';\nimport IHandlerParams from '../Interfaces/IHandlerParams';\n\nfunction handleSelectFocus(e: Event, {actions, config, dom, state}: IHandlerParams): void {\n actions.focus();\n\n if (config.behavior.openOnFocus && !state.isUseNativeMode) {\n dispatchOpen(actions, config, dom);\n }\n}\n\nexport default handleSelectFocus;","import IHandlerParams from '../Interfaces/IHandlerParams';\n\nfunction handleSelectInvalid(e: Event, {actions, config, dom}: IHandlerParams): void {\n actions.invalidate();\n}\n\nexport default handleSelectInvalid;","import dispatchOpen from '../../Shared/Util/dispatchOpen';\nimport killSelectReaction from '../../Shared/Util/killSelectReaction';\nimport * as KeyCodes from '../Constants/KeyCodes';\nimport IHandlerParams from '../Interfaces/IHandlerParams';\n\nimport handleSelectKeydownDown from './handleSelectKeydownDown';\nimport handleSelectKeydownUp from './handleSelectKeydownUp';\n\nfunction handleSelectKeydown(e: KeyboardEvent, handlerParams: IHandlerParams): void {\n const {keyCode, target} = e;\n const {state, actions, dom, config} = handlerParams;\n\n if (state.isUseNativeMode || state.isDisabled) return;\n\n switch (keyCode) {\n case KeyCodes.DOWN:\n handleSelectKeydownDown(e, handlerParams);\n\n break;\n case KeyCodes.UP:\n handleSelectKeydownUp(e, handlerParams);\n\n break;\n case KeyCodes.SPACE:\n if (state.isSearching) {\n e.stopPropagation();\n\n return;\n }\n\n case KeyCodes.ENTER:\n e.stopPropagation();\n e.preventDefault();\n\n killSelectReaction(target as HTMLSelectElement, handlerParams);\n\n if (state.isOpen) {\n actions.selectOption(state.focusedIndex, config.behavior.closeOnSelect);\n } else {\n dispatchOpen(actions, config, dom);\n }\n\n break;\n case KeyCodes.ESC:\n actions.close();\n\n break;\n }\n}\n\nexport default handleSelectKeydown;","import dispatchOpen from '../../Shared/Util/dispatchOpen';\nimport killSelectReaction from '../../Shared/Util/killSelectReaction';\nimport IHandlerParams from '../Interfaces/IHandlerParams';\n\nfunction handleSelectKeydownDown(\n e: KeyboardEvent,\n handlerParams: IHandlerParams\n): void {\n const {metaKey, target} = e;\n const {state, dom, actions, config} = handlerParams;\n\n let focusedIndex: number = state.focusedIndex > -1 ?\n state.focusedIndex : state.selectedIndex;\n\n let iterations: number = 0;\n let incrementAmount: number = 1;\n\n e.preventDefault();\n\n killSelectReaction(target as HTMLSelectElement, handlerParams);\n\n if (metaKey) {\n incrementAmount = Math.round(\n Math.max(state.totalOptions / 2, config.behavior.maxVisibleItems)\n );\n }\n\n do {\n focusedIndex += incrementAmount;\n\n incrementAmount = 1;\n\n if (focusedIndex >= state.totalOptions) {\n focusedIndex = config.behavior.loop ? 0 : state.totalOptions - 1;\n }\n\n actions.focusOption(focusedIndex, true);\n\n iterations++;\n }\n while (\n state.focusedOption &&\n state.focusedOption.isDisabled &&\n iterations <= state.totalOptions\n );\n\n if (state.isClosed) {\n dispatchOpen(actions, config, dom);\n\n return;\n }\n}\n\nexport default handleSelectKeydownDown;","import dispatchOpen from '../../Shared/Util/dispatchOpen';\nimport killSelectReaction from '../../Shared/Util/killSelectReaction';\nimport IHandlerParams from '../Interfaces/IHandlerParams';\n\nfunction handleSelectKeydownUp(\n e: KeyboardEvent,\n handlerParams: IHandlerParams\n): void {\n const {metaKey, target} = e;\n const {state, config, dom, actions} = handlerParams;\n\n let focusedIndex = state.focusedIndex > -1 ?\n state.focusedIndex : state.selectedIndex;\n\n let iterations = 0;\n let incrementAmount: number = 1;\n\n e.preventDefault();\n\n killSelectReaction(target as HTMLSelectElement, handlerParams);\n\n if (metaKey) {\n incrementAmount = Math.round(\n Math.max(state.totalOptions / 2, config.behavior.maxVisibleItems)\n );\n }\n\n do {\n focusedIndex -= incrementAmount;\n\n incrementAmount = 1;\n\n if (focusedIndex < 0) {\n focusedIndex = config.behavior.loop ? state.totalOptions - 1 : 0;\n }\n\n actions.focusOption(focusedIndex, true);\n\n iterations++;\n }\n while (\n state.focusedOption &&\n state.focusedOption.isDisabled &&\n iterations < state.totalOptions\n );\n\n if (state.isClosed) {\n dispatchOpen(actions, config, dom);\n }\n}\n\nexport default handleSelectKeydownUp;","import * as KeyCodes from '../Constants/KeyCodes';\nimport IHandlerParams from '../Interfaces/IHandlerParams';\n\nconst SEARCH_RESET_DURATION = 1200;\n\nfunction handleSelectKeypress(\n {keyCode}: KeyboardEvent,\n {actions, timers, state}: IHandlerParams,\n searchResetDuration = SEARCH_RESET_DURATION\n): void {\n if (state.isUseNativeMode || [KeyCodes.UP, KeyCodes.DOWN].includes(keyCode)) return;\n\n window.clearTimeout(timers.searchTimeoutId);\n\n actions.search();\n\n timers.searchTimeoutId = window.setTimeout(() => actions.resetSearch(), searchResetDuration);\n}\n\nexport default handleSelectKeypress;","import root from '../Components/root';\nimport ClassNames from '../Config/ClassNames';\nimport createDomElementFromHtml from '../Shared/Util/createDomElementFromHtml';\nimport State from '../State/State';\n\nimport Dom from './Dom';\nimport domDiff from './domDiff';\nimport domPatch from './domPatch';\n\nclass Renderer {\n public classNames: ClassNames;\n public dom: Dom;\n\n constructor(classNames: ClassNames) {\n this.dom = new Dom();\n this.classNames = classNames;\n }\n\n public render(state: State, selectElement: HTMLSelectElement): Dom {\n const html = root(state, this.classNames);\n const rootElement = createDomElementFromHtml(html) as HTMLDivElement;\n\n this.dom = new Dom();\n this.dom.root = rootElement;\n\n this.dom.option.length = this.dom.group.length = 0;\n\n Renderer.queryDomRefs(this.dom);\n\n this.injectSelect(selectElement);\n\n return this.dom;\n }\n\n public update(state: State, key?: keyof State): void {\n const nextHtml = root(state, this.classNames);\n const nextRoot = createDomElementFromHtml(nextHtml) as HTMLDivElement;\n const diffCommand = domDiff(this.dom.root, nextRoot);\n\n domPatch(this.dom.root, diffCommand);\n\n if (key === 'selectedIndex') {\n this.syncSelectWithValue(state.value);\n }\n }\n\n public destroy(): void {\n this.dom.select.classList.remove(this.classNames.select);\n\n try {\n this.dom.root.parentElement.replaceChild(this.dom.select, this.dom.root);\n } catch (err) { /**/ }\n }\n\n private injectSelect(selectElement: HTMLSelectElement): void {\n const parent = selectElement.parentElement;\n const tempSelect = this.dom.select;\n\n if (!parent) throw new Error('[EasyDropDown] The provided `\n \n`);\n\nexport default head;","import ClassNames from '../Config/ClassNames';\n\nconst arrow = (_, classNames: ClassNames) => `
`;\n\nexport default arrow;","import ClassNames from '../Config/ClassNames';\nimport State from '../State/State';\n\nconst value = (state: State, classNames: ClassNames) => {\n return (`\n \n ${state.humanReadableValue}\n \n `);\n};\n\nexport default value;","function createDomElementFromHtml(html: string): Element {\n const temp = document.createElement('div');\n\n temp.innerHTML = html;\n\n return temp.firstElementChild;\n}\n\nexport default createDomElementFromHtml;","class Dom {\n public select: HTMLSelectElement = null;\n public root: HTMLDivElement = null;\n public head: HTMLDivElement = null;\n public value: HTMLDivElement = null;\n public body: HTMLDivElement = null;\n public arrow: HTMLDivElement = null;\n public itemsList: HTMLDivElement = null;\n public item: HTMLDivElement[] = [];\n public group: HTMLDivElement[] = [];\n public option: HTMLDivElement[] = [];\n\n public sumItemsHeight(max: number = Infinity): number {\n let totalHeight = 0;\n\n for (let i = 0, item; (item = this.item[i]); i++) {\n if (i === max) break;\n\n totalHeight += item.offsetHeight;\n }\n\n return totalHeight;\n }\n}\n\nexport default Dom;","import merge from 'helpful-merge';\n\nimport AttributeChangeType from './Constants/AttributeChangeType';\nimport DomChangeType from './Constants/DomChangeType';\nimport IAttributeChange from './Interfaces/IAttributeChange';\nimport IPatchCommand from './Interfaces/IPatchCommand';\nimport PatchCommand from './PatchCommand';\n\nfunction domDiff(prev: Node, next: Node): PatchCommand {\n let totalChildNodes = -1;\n\n const command = new PatchCommand();\n\n if (prev instanceof HTMLSelectElement) {\n command.type = DomChangeType.NONE;\n\n return command;\n }\n\n if (prev instanceof Text && next instanceof Text) {\n if (prev.textContent === next.textContent) {\n command.type = DomChangeType.NONE;\n } else {\n command.type = DomChangeType.INNER;\n command.newTextContent = next.textContent;\n }\n } else if (prev instanceof HTMLElement && next instanceof HTMLElement) {\n if (prev.tagName !== next.tagName) {\n command.type = DomChangeType.REPLACE;\n command.newNode = next;\n } else if (prev.outerHTML === next.outerHTML) {\n command.type = DomChangeType.NONE;\n } else if (prev.innerHTML === next.innerHTML) {\n merge(command, diffAttributeChanges(prev, next));\n } else {\n merge(command, diffAttributeChanges(prev, next));\n\n if (command.attributeChanges.length > 0) {\n command.type = DomChangeType.FULL;\n } else {\n command.type = DomChangeType.INNER;\n }\n\n if ((totalChildNodes = prev.childNodes.length) > 0 && totalChildNodes === next.childNodes.length) {\n for (let i = 0, childNode; (childNode = prev.childNodes[i]); i++) {\n command.childCommands.push(domDiff(childNode, next.childNodes[i]));\n }\n } else {\n command.newInnerHtml = next.innerHTML;\n }\n }\n } else {\n command.type = DomChangeType.REPLACE;\n command.newNode = next;\n }\n\n return command;\n}\n\nfunction diffAttributeChanges(prev: HTMLElement, next: HTMLElement): IPatchCommand {\n const totalAttributes = Math.max(prev.attributes.length, next.attributes.length);\n const attributesMap = {};\n const undef = void(0);\n const attributeChanges: IAttributeChange[] = [];\n\n for (let i = 0; i < totalAttributes; i++) {\n const attr1 = prev.attributes[i];\n const attr2 = next.attributes[i];\n\n if (attr1 && attributesMap[attr1.name] === undef) {\n attributesMap[attr1.name] = [];\n }\n\n if (attr2 && attributesMap[attr2.name] === undef) {\n attributesMap[attr2.name] = [];\n }\n\n if (attr1) attributesMap[attr1.name][0] = attr1.value;\n if (attr2) attributesMap[attr2.name][1] = attr2.value;\n }\n\n const keys = Object.keys(attributesMap);\n\n if (keys.length > 1) {\n keys.sort();\n }\n\n for (let i = 0, key; (key = keys[i]); i++) {\n const attr = attributesMap[key];\n\n const change: IAttributeChange = {\n type: null,\n name: key,\n value: null\n };\n\n if (attr[0] === attr[1]) continue;\n\n if (attr[0] === undef) {\n change.type = AttributeChangeType.ADD;\n change.value = attr[1];\n } else if (attr[1] === undef) {\n change.type = AttributeChangeType.REMOVE,\n change.value = '';\n } else {\n change.type = AttributeChangeType.EDIT,\n change.value = attr[1];\n }\n\n attributeChanges.push(change);\n }\n\n return {\n type: DomChangeType.OUTER,\n attributeChanges\n };\n}\n\nexport default domDiff;","import DomChangeType from './Constants/DomChangeType';\nimport IAttributeChange from './Interfaces/IAttributeChange';\n\nclass PatchCommand {\n public type: DomChangeType;\n public newNode: Node = null;\n public newInnerHtml: string = '';\n public newTextContent: string = '';\n public attributeChanges: IAttributeChange[] = [];\n public childCommands: PatchCommand[] = [];\n public index: number = null;\n}\n\nexport default PatchCommand;","import AttributeChangeType from './Constants/AttributeChangeType';\nimport DomChangeType from './Constants/DomChangeType';\nimport IAttributeChange from './Interfaces/IAttributeChange';\nimport PatchCommand from './PatchCommand';\n\nfunction domPatch(node: Node, command: PatchCommand): Node {\n switch (command.type) {\n case DomChangeType.NONE:\n return node;\n case DomChangeType.REPLACE:\n node.parentElement.replaceChild(command.newNode, node);\n\n return command.newNode;\n case DomChangeType.INNER:\n if (node instanceof Text) {\n node.textContent = command.newTextContent;\n } else if (command.childCommands.length > 0) {\n command.childCommands.forEach((childCommand, i) => domPatch(node.childNodes[i], childCommand));\n } else {\n (node as HTMLElement).innerHTML = command.newInnerHtml;\n }\n\n return node;\n case DomChangeType.OUTER:\n patchAttributes(node as HTMLElement, command.attributeChanges);\n\n return node;\n case DomChangeType.FULL:\n if (command.childCommands.length > 0) {\n command.childCommands.forEach((childCommand, i) => domPatch(node.childNodes[i], childCommand));\n } else {\n (node as HTMLElement).innerHTML = command.newInnerHtml;\n }\n\n patchAttributes(node as HTMLElement, command.attributeChanges);\n\n return node;\n }\n}\n\nfunction patchAttributes(el: HTMLElement, attributeChanges: IAttributeChange[]): void {\n const raf = window.requestAnimationFrame;\n\n attributeChanges.forEach(change => {\n if (raf && ['class', 'style'].indexOf(change.name) > -1) {\n raf(() => patchAttribute(el, change));\n } else {\n patchAttribute(el, change);\n }\n });\n}\n\nfunction patchAttribute(el: HTMLElement, change: IAttributeChange): void {\n switch (change.type) {\n case AttributeChangeType.ADD:\n case AttributeChangeType.EDIT:\n el.setAttribute(change.name, change.value);\n\n break;\n case AttributeChangeType.REMOVE:\n el.removeAttribute(change.name);\n\n break;\n }\n}\n\nexport default domPatch;","import Config from '../../Config/Config';\nimport IActions from '../../State/Interfaces/IActions';\nimport State from '../../State/State';\n\nconst POLL_INTERVAL_DURATION = 100;\n\nfunction pollForSelectChange(\n selectElement: HTMLSelectElement,\n state: State,\n actions: IActions,\n config: Config\n): number {\n let lastValue: string = selectElement.value;\n\n const pollIntervalId = window.setInterval(() => {\n if (selectElement.value !== lastValue) {\n const selectedIndex = state.getOptionIndexFromValue(selectElement.value);\n\n actions.selectOption(selectedIndex, config.behavior.closeOnSelect);\n actions.focusOption(selectedIndex, true);\n }\n\n lastValue = selectElement.value;\n }, POLL_INTERVAL_DURATION);\n\n return pollIntervalId;\n}\n\nexport default pollForSelectChange;","import State from '../../State/State';\n\nconst POLL_INTERVAL_DURATION = 300;\n\nfunction pollForSelectMutation(selectElement: HTMLSelectElement, state: State, handleMutation: () => void): number {\n let lastOuterHtml: string = selectElement.outerHTML;\n\n const pollIntervalId = window.setInterval(() => {\n const {outerHTML} = selectElement;\n\n if (outerHTML !== lastOuterHtml && !state.isKeying) {\n handleMutation();\n }\n\n lastOuterHtml = outerHTML;\n }, POLL_INTERVAL_DURATION);\n\n return pollIntervalId;\n}\n\nexport default pollForSelectMutation;","import Easydropdown from '../../Easydropdown/Easydropdown';\n\nfunction closeOthers(thisInstance: Easydropdown, cache: Easydropdown[]): void {\n for (const instance of cache) {\n if (instance !== thisInstance) instance.actions.close();\n }\n}\n\nexport default closeOthers;","import Timers from '../../Easydropdown/Timers';\nimport Dom from '../../Renderer/Dom';\nimport State from '../../State/State';\n\nfunction getScrollTop(\n currentScrollTop: number,\n optionOffsetTop: number,\n optionHeight: number,\n bodyHeight: number,\n scrollOffset: number\n): number {\n const max = currentScrollTop + bodyHeight;\n\n let remainder: number;\n\n if (optionOffsetTop < currentScrollTop) {\n return optionOffsetTop - scrollOffset;\n } else if ((remainder = (optionOffsetTop + optionHeight) - max) > 0) {\n return currentScrollTop + remainder + scrollOffset;\n }\n\n return currentScrollTop;\n}\n\nfunction scrollToView(dom: Dom, timers: Timers, state: State, scrollToMiddle: boolean = false): void {\n const index = Math.max(0, state.focusedIndex > -1 ? state.focusedIndex : state.selectedIndex);\n const option = dom.option[index];\n\n if (!option) return;\n\n const offset = scrollToMiddle ? (state.maxBodyHeight / 2) - (option.offsetHeight / 2) : 0;\n\n const scrollTop = getScrollTop(\n dom.itemsList.scrollTop,\n option.offsetTop,\n option.offsetHeight,\n state.maxBodyHeight,\n offset\n );\n\n if (scrollTop === dom.itemsList.scrollTop) return;\n\n dom.itemsList.scrollTop = scrollTop;\n}\n\nexport {\n getScrollTop,\n scrollToView as default\n};","import merge from 'helpful-merge';\n\nimport IActions from './Interfaces/IActions';\nimport IOnAction from './Interfaces/IOnAction';\nimport IPropertyDescriptor from './Interfaces/IPropertyDescriptor';\nimport resolveActions from './resolveActions';\nimport State from './State';\n\nclass StateManager {\n public static proxyActions(state: State, injectedActions: any, onAction: IOnAction): IActions {\n const stateProxy = StateManager.createStateProxy(state, onAction);\n const actions = resolveActions(stateProxy);\n\n merge(actions, injectedActions);\n\n return actions;\n }\n\n private static createStateProxy(state: State, onAction: IOnAction): State {\n return Object.seal(\n StateManager\n .getPropertyDescriptorsFromValue(state, onAction)\n .reduce((proxy, {key, get, set}) => Object.defineProperty(\n proxy,\n key,\n {\n enumerable: true,\n get,\n set\n }\n ), {})\n );\n }\n\n private static getPropertyDescriptorsFromValue(state: State, onAction: IOnAction): IPropertyDescriptor[] {\n const prototype = Object.getPrototypeOf(state);\n const allKeys = Object.keys(state).concat(Object.keys(prototype));\n\n return allKeys\n .reduce((localDescriptors, key) => {\n const propertyDescriptor =\n Object.getOwnPropertyDescriptor(state, key) ||\n Object.getOwnPropertyDescriptor(prototype, key);\n\n const isAccessorProperty = typeof propertyDescriptor.get === 'function';\n\n localDescriptors.push({\n get: StateManager.readPropertyValue.bind(null, state, key),\n set: isAccessorProperty ?\n void 0 : StateManager.updatePropertyValue.bind(null, state, key, onAction),\n key\n });\n\n return localDescriptors;\n }, []);\n }\n\n private static readPropertyValue(state: State, key: string): any {\n return state[key];\n }\n\n private static updatePropertyValue(state: State, key: string, onAction: IOnAction, value: any): void {\n if (state[key] === value) return;\n\n state[key] = value;\n\n onAction(state, key);\n }\n}\n\nexport default StateManager;","import CollisionType from '../Shared/Util/Constants/CollisionType';\n\nimport BodyStatus from './Constants/BodyStatus';\nimport ScrollStatus from './Constants/ScrollStatus';\nimport IActions from './Interfaces/IActions';\nimport State from './State';\n\nconst resolveActions = (state: State): IActions => ({\n focus(): void {\n state.isFocused = true;\n },\n\n blur(): void {\n state.isFocused = false;\n },\n\n invalidate(): void {\n state.isInvalid = true;\n },\n\n validate(): void {\n state.isInvalid = false;\n },\n\n topOut(): void {\n state.scrollStatus = ScrollStatus.AT_TOP;\n },\n\n bottomOut(): void {\n state.scrollStatus = ScrollStatus.AT_BOTTOM;\n },\n\n scroll(): void {\n state.scrollStatus = ScrollStatus.SCROLLED;\n },\n\n makeScrollable(): void {\n state.isScrollable = true;\n },\n\n makeUnscrollable(): void {\n state.isScrollable = false;\n },\n\n open(\n this: IActions,\n maxBodyHeight: number,\n collisionType: CollisionType,\n isScrollable: boolean\n ): void {\n if (state.isDisabled) return;\n\n this.closeOthers();\n\n switch (collisionType) {\n case CollisionType.NONE:\n case CollisionType.TOP:\n state.bodyStatus = BodyStatus.OPEN_BELOW;\n\n break;\n case CollisionType.BOTTOM:\n state.bodyStatus = BodyStatus.OPEN_ABOVE;\n\n break;\n }\n\n state.isScrollable = isScrollable;\n state.maxBodyHeight = maxBodyHeight;\n\n this.scrollToView(state, true);\n },\n\n close(): void {\n state.bodyStatus = BodyStatus.CLOSED;\n state.focusedIndex = -1;\n },\n\n startClickSelecting(): void {\n state.isClickSelecting = true;\n },\n\n selectOption(this: IActions, index: number, close = true): void {\n const optionAtIndex = state.getOptionFromIndex(index);\n\n state.isClickSelecting = false;\n\n if (index > -1 && (!optionAtIndex || optionAtIndex.isDisabled)) return;\n\n state.selectedIndex = index;\n\n if (state.isInvalid) {\n this.validate();\n }\n\n if (state.isSearching) {\n this.scrollToView(state);\n } else if (close) {\n this.close();\n }\n },\n\n focusOption(this: IActions, index: number, shouldScrollToView: boolean = false): void {\n const scrollToMiddle = Math.abs(index - state.focusedIndex) > 1;\n\n state.focusedIndex = index;\n\n if (shouldScrollToView) {\n this.scrollToView(state, scrollToMiddle);\n }\n },\n\n search(): void {\n state.isSearching = true;\n },\n\n resetSearch(): void {\n state.isSearching = false;\n },\n\n keying(): void {\n state.isKeying = true;\n },\n\n resetKeying(): void {\n state.isKeying = false;\n },\n\n useNative(): void {\n state.isUseNativeMode = true;\n }\n});\n\nexport default resolveActions;","import merge from 'helpful-merge';\n\nimport Config from '../Config/Config';\nimport isMobilePlatform from '../Shared/Util/isMobilePlatform';\n\nimport Group from './Group';\nimport Option from './Option';\nimport State from './State';\n\nclass StateMapper {\n public static mapFromSelect(selectElement: HTMLSelectElement, config: Config): State {\n const state = new State(null, config);\n\n let isWithinGroup = false;\n\n state.name = selectElement.name;\n state.isDisabled = selectElement.disabled;\n state.isRequired = selectElement.required;\n\n state.isUseNativeMode = (\n config.behavior.useNativeUiOnMobile &&\n isMobilePlatform(window.navigator.userAgent)\n );\n\n for (let i = 0, child: Element; (child = selectElement.children[i]); i++) {\n if (i === 0 && child.getAttribute('data-placeholder') !== null) {\n state.placeholder = child.textContent;\n (child as HTMLOptionElement).value = '';\n\n continue;\n }\n\n if (child instanceof HTMLOptionElement) {\n if (isWithinGroup === false) {\n state.groups.push(StateMapper.mapGroup());\n\n isWithinGroup = true;\n }\n\n state.lastGroup.options.push(StateMapper.mapOption(child));\n\n if (child.selected) state.selectedIndex = state.totalOptions - 1;\n } else if (child instanceof HTMLOptGroupElement) {\n isWithinGroup = true;\n\n state.groups.push(StateMapper.mapGroup(child));\n\n for (let j = 0, groupChild: Element; (groupChild = child.children[j]); j++) {\n state.lastGroup.options.push(\n StateMapper.mapOption(\n groupChild as HTMLOptionElement,\n child as HTMLOptGroupElement\n )\n );\n\n if ((groupChild as HTMLOptionElement).selected) state.selectedIndex = state.totalOptions - 1;\n }\n\n isWithinGroup = false;\n } else {\n throw new TypeError(\n `[EasyDropDown] Invalid child tag \"${child.tagName}\" found in provided \\``\n * element (for example, adding or removing an option).\n */\n\n public refresh: () => void;\n\n /**\n * Destroys the instance by removing all EasyDropDown-generated\n * elements from the DOM, and unbinding all event handlers.\n * The underlying select is returned to the root position.\n */\n\n public destroy: () => void;\n\n /**\n * An accessor property allowing writing to and reading\n * from the dropdown's value.\n */\n\n public value: string;\n\n constructor(implementation: Easydropdown) {\n this.open = implementation.open.bind(implementation);\n this.close = implementation.close.bind(implementation);\n this.refresh = implementation.refresh.bind(implementation);\n this.destroy = implementation.destroy.bind(implementation);\n\n Object.defineProperties(this, {\n value: {\n get: () => implementation.value,\n set: (nextValue: string) => implementation.value = nextValue\n }\n });\n }\n}\n\nexport default EasydropdownFacade;"],"sourceRoot":""} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index b2799f5..fc7b4ae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "easydropdown", - "version": "4.1.0", + "version": "4.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 2d746fd..3947dc8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "easydropdown", - "version": "4.1.0", + "version": "4.1.1", "description": "A lightweight library for building beautiful styleable select elements", "author": "KunkaLabs Limited", "private": false, diff --git a/src/Config/Behavior.ts b/src/Config/Behavior.ts index a904e77..dcf0d01 100644 --- a/src/Config/Behavior.ts +++ b/src/Config/Behavior.ts @@ -3,7 +3,7 @@ import IBehavior from './Interfaces/IBehavior'; class Behavior implements IBehavior { public showPlaceholderWhenOpen: boolean = false; public openOnFocus: boolean = false; - public closeOnSelect: boolean = false; + public closeOnSelect: boolean = true; public useNativeUiOnMobile: boolean = true; public loop: boolean = false; public clampMaxVisibleItems: boolean = true; diff --git a/src/Events/Handlers/handleBodyMousedown.test.ts b/src/Events/Handlers/handleBodyMousedown.test.ts new file mode 100644 index 0000000..6ed8acc --- /dev/null +++ b/src/Events/Handlers/handleBodyMousedown.test.ts @@ -0,0 +1,33 @@ +import {assert} from 'chai'; +import {spy} from 'sinon'; + +import createMockEvent from '../Mock/createMockEvent'; +import createMockHandlerParams from '../Mock/createMockHandlerParams'; + +import handleBodyMousedown from './handleBodyMousedown'; + +describe('handleBodyMousedown()', () => { + it('calls `stopPropagation` on the provided event', () => { + const params = createMockHandlerParams(); + const mockEvent = createMockEvent(); + + handleBodyMousedown(mockEvent, params); + + assert.isTrue(mockEvent.stopPropagation.called); + }); + + it('calls `actions.startClickSelecting()` if the event target is an option', () => { + const params = createMockHandlerParams(); + const startClickSelectingSpy = spy(params.actions, 'startClickSelecting'); + const option = document.createElement('div'); + const mockEvent = createMockEvent(option); + + option.setAttribute('data-ref', 'option'); + + params.dom.option.push(option); + + handleBodyMousedown(mockEvent, params); + + assert.isTrue(startClickSelectingSpy.called); + }); +}); diff --git a/src/Events/Handlers/handleBodyMousedown.ts b/src/Events/Handlers/handleBodyMousedown.ts new file mode 100644 index 0000000..91a8ef1 --- /dev/null +++ b/src/Events/Handlers/handleBodyMousedown.ts @@ -0,0 +1,15 @@ +import closestParent from '../../Shared/Util/closestParent'; +import * as Selectors from '../Constants/Selectors'; +import IHandlerParams from '../Interfaces/IHandlerParams'; + +function handleBodyMousedown(e: Event, {actions}: IHandlerParams): void { + e.stopPropagation(); + + const option = closestParent(e.target as HTMLElement, Selectors.OPTION, true); + + if (!option) return; + + actions.startClickSelecting(); +} + +export default handleBodyMousedown; \ No newline at end of file diff --git a/src/Events/Handlers/handleSelectBlur.test.ts b/src/Events/Handlers/handleSelectBlur.test.ts index 4aee536..fc24550 100644 --- a/src/Events/Handlers/handleSelectBlur.test.ts +++ b/src/Events/Handlers/handleSelectBlur.test.ts @@ -29,13 +29,15 @@ describe('handleSelectBlur()', () => { assert.isFalse(blurSpy.called); }); - it('calls `actions.close()` if `config.openOnFocus` is set', () => { + it('calls `actions.close()` if `config.openOnFocus` is set and `state.isClickSelecting` not set', () => { const params = createMockHandlerParams({ behavior: { openOnFocus: true } }); + params.state.isClickSelecting = false; + const mockEvent = createMockEvent(); const closeSpy = spy(params.actions, 'close'); @@ -43,4 +45,21 @@ describe('handleSelectBlur()', () => { assert.isTrue(closeSpy.called); }); + + it('does not call `actions.close()` if `config.openOnFocus` is set and `state.isClickSelecting` is set', () => { + const params = createMockHandlerParams({ + behavior: { + openOnFocus: true + } + }); + + params.state.isClickSelecting = true; + + const mockEvent = createMockEvent(); + const closeSpy = spy(params.actions, 'close'); + + handleSelectBlur(mockEvent, params); + + assert.isFalse(closeSpy.called); + }); }); diff --git a/src/Events/Handlers/handleSelectBlur.ts b/src/Events/Handlers/handleSelectBlur.ts index 2c0e770..72c2991 100644 --- a/src/Events/Handlers/handleSelectBlur.ts +++ b/src/Events/Handlers/handleSelectBlur.ts @@ -5,7 +5,7 @@ function handleSelectBlur(e: Event, {actions, state, config}: IHandlerParams): v actions.blur(); - if (config.behavior.openOnFocus) actions.close(); + if (config.behavior.openOnFocus && !state.isClickSelecting) actions.close(); } export default handleSelectBlur; \ No newline at end of file diff --git a/src/Events/getEventsList.ts b/src/Events/getEventsList.ts index 5a4c1e1..6169610 100644 --- a/src/Events/getEventsList.ts +++ b/src/Events/getEventsList.ts @@ -1,6 +1,7 @@ import Dom from '../Renderer/Dom'; import handleBodyClick from './Handlers/handleBodyClick'; +import handleBodyMousedown from './Handlers/handleBodyMousedown'; import handleBodyMouseover from './Handlers/handleBodyMouseover'; import handleHeadClick from './Handlers/handleHeadClick'; import handleItemsListScroll from './Handlers/handleItemsListScroll'; @@ -19,6 +20,11 @@ const getEventsList = (dom: Dom): IEventBinding[] => [ type: 'click', handler: handleHeadClick }, + { + target: dom.body, + type: 'mousedown', + handler: handleBodyMousedown + }, { target: dom.body, type: 'click', diff --git a/src/State/Interfaces/IActions.ts b/src/State/Interfaces/IActions.ts index 7874ce4..caa30f7 100644 --- a/src/State/Interfaces/IActions.ts +++ b/src/State/Interfaces/IActions.ts @@ -17,6 +17,7 @@ interface IActions { close(): void; makeScrollable(): void; makeUnscrollable(): void; + startClickSelecting(): void; selectOption(index: number, close?: boolean): void; focusOption(index: number, shouldScrollToView?: boolean): void; search(): void; diff --git a/src/State/State.ts b/src/State/State.ts index 19b9a15..7426892 100644 --- a/src/State/State.ts +++ b/src/State/State.ts @@ -23,6 +23,7 @@ class State { public isFocused: boolean = false; public isUseNativeMode: boolean = false; public isScrollable: boolean = false; + public isClickSelecting: boolean = false; public isSearching: boolean = false; public isKeying: boolean = false; diff --git a/src/State/resolveActions.test.ts b/src/State/resolveActions.test.ts index 5e945b5..a719852 100644 --- a/src/State/resolveActions.test.ts +++ b/src/State/resolveActions.test.ts @@ -183,6 +183,14 @@ describe('resolveActions', function(): void { }); }); + describe('.startClickSelecting()', () => { + it('sets `state.isClickSelecting` to `true`', () => { + self.actions.startClickSelecting(); + + assert.isTrue(self.state.isClickSelecting); + }); + }); + describe('.selectOption()', () => { it('sets `state.selectedIndex` to the provided index', () => { self.actions.selectOption(2); @@ -190,6 +198,16 @@ describe('resolveActions', function(): void { assert.equal(self.state.selectedIndex, 2); }); + it('sets `state.isClickSelecting` to `false`', () => { + self.actions.startClickSelecting(); + + assert.isTrue(self.state.isClickSelecting); + + self.actions.selectOption(2); + + assert.isFalse(self.state.isClickSelecting); + }); + it( 'it does not set `state.selectedIndex` to the provided ' + 'index, if the option is disabled', diff --git a/src/State/resolveActions.ts b/src/State/resolveActions.ts index b3ee797..65213e3 100644 --- a/src/State/resolveActions.ts +++ b/src/State/resolveActions.ts @@ -75,9 +75,15 @@ const resolveActions = (state: State): IActions => ({ state.focusedIndex = -1; }, + startClickSelecting(): void { + state.isClickSelecting = true; + }, + selectOption(this: IActions, index: number, close = true): void { const optionAtIndex = state.getOptionFromIndex(index); + state.isClickSelecting = false; + if (index > -1 && (!optionAtIndex || optionAtIndex.isDisabled)) return; state.selectedIndex = index;