{"version":3,"sources":["webpack:///webpack/universalModuleDefinition?5ca6*","webpack:///js/modal.min.js","webpack:///webpack/bootstrap c14592c10d64a660ef67?8c09*","webpack:///./src/main/util/Util.js?5bc4*","webpack:///./src/main/util/Settings.js?b01f*","webpack:///./src/main/util/Event.js?68bf*","webpack:///./src/main/Widget.js?920e","webpack:///./src/main/lib/FixedWindow.js?6376","webpack:///./src/main/Modal.js?a8d4","webpack:///./src/main/lib/debounce.js?3601","webpack:///./src/main/modules/Modal.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","global","_classCallCheck","instance","Constructor","TypeError","Object","defineProperty","value","_slicedToArray","sliceIterator","arr","i","_arr","_n","_d","_e","undefined","_s","_i","Symbol","iterator","next","done","push","length","err","Array","isArray","_createClass","defineProperties","target","props","descriptor","enumerable","configurable","writable","key","protoProps","staticProps","prototype","PFX","COL_LEFT_CLASS","COL_RIGHT_CLASS","COL_BOTTOM_CLASS","Util","element","type","callback","thisFunction","e","apply","thisType","toLowerCase","name","addEventListener","el","document","createElement","transitions","transition","OTransition","MozTransition","WebkitTransition","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","entries","_step$value","style","return","parent","now","parentNode","func","s4","Math","floor","random","toString","substring","doc","inner","width","height","outer","position","top","left","visibility","overflow","appendChild","body","w1","offsetWidth","w2","clientWidth","removeChild","ev","capture","event","removeEventListener","offsetHeight","str","replace","g","toUpperCase","input","JSON","parse","stringify","base","attrs","attributes","attr","s","dashToCamelCase","nodeName","val","nodeValue","hasOwnProperty","parseInt","elementToPosition","collisionContainer","centerHorizontal","positionTop","amountTop","amountLeft","parentsUntil","HTMLElement","window","getComputedStyle","isPartOfNode","offsetTop","offsetLeft","targetPosition","getBoundingClientRect","elementRect","colRect","targetTop","targetRight","right","isCollisionTop","isCollisionBottom","innerHeight","isCollisionLeft","targetLeft","isCollisionRight","classList","remove","calcTop","calcLeft","add","rightPosition","leftCentered","collisionCentered","cssText","optionalOffset","scrollIntoView","thisOffset","scrolledY","pageYOffset","scroll","default","_interopRequireDefault","obj","__esModule","_Util","_Util2","FLEXCSS_GLOBAL_SETTINGS","smallBreakpoint","touchMoveBreakpointOffCanvas","scrollbarUpdateNodes","darkenerFadeDelay","canvasToggledClass","FLEXCSS_CONST_IS_IOS","FLEXCSS_CONST_IS_TOUCH","FLEXCSS_CONST_IS_SAFARI","FLEXCSS_CONST_IS_IE","FLEXCSS_CONST_TAB_EVENT","FLEXCSS_IS_SMALL_SCREEN","init","FLEXCSS_CONST_SCROLLBAR_WIDTH","getScrollBarWidth","FLEXCSS_CONST_TRANSITION_EVENT","whichTransitionEndEvent","readyState","Settings","settings","assign","navigator","userAgent","match","test","innerWidth","get","msMaxTouchPoints","CustomEvent","params","thisParams","bubbles","cancelable","detail","evt","createEvent","initCustomEvent","superPreventDefault","preventDefault","Event","EventHandler","defaultOptions","options","withDetail","originalEvent","o","dispatchEvent","withOptions","fire","_typeof","constructor","Widget","_this","asyncContent","_isWidget","getElementById","Error","hfWidgetInstance","setAsync","Promise","finalContent","async","self","ALLOW_ELEMENT_OVERFLOW_TOUCH","EVENT_AFTER_FIXED_REMOVE","EVENT_BEFORE_FIXED_ADD","_Settings","_Settings2","_debounce","_debounce2","_Event","_Event2","CLS_FIXED_WINDOW","fixedWindowInstance","FixedWindow","widgets","currentScrollTop","fixedScreenConstraints","windowWidth","isFixedWindowActive","touchListener","widget","fixedBreakpointFn","thisWidget","fixed","Set","widgetsThatRequireFixedWindow","from","some","isFixed","getCurrentWidget","index","indexOf","_addFixedContainer","_removeFixedContainer","_this2","dispatchAndFire","map","n","foundProperty","direction","node","whatNode","property","d","__fixedWindowMod__","getScrollbarWidth","forEach","shouldNotMoveUp","shouldNotMoveDown","neverScroll","lastClientY","touchStartListener","_getLastFixedWidget","getLastFixedWidget","closestOverflow","closestCallback","HTMLTextAreaElement","hasAttribute","scrollHeight","touches","clientY","scrollTop","touchMoveListener","_getLastFixedWidget2","isScrollingDown","stopImmediatePropagation","touchEndListener","documentElement","_node","paddingRight","_checkFixedNeeded","pop","fixedWidget","eventHandler","resizeListener","bind","EVENT_MODAL_ASYNC_TARGET_LOADED","EVENT_MODAL_INIT","EVENT_MODAL_OPENED","EVENT_MODAL_BEFORE_CLOSED","EVENT_MODAL_CLOSED","_Widget","_Widget2","_FixedWindow","_FixedWindow2","KEY_ESC","ATTR_CREATE_NEW","ATTR_CLOSE","ATTR_NAME","CLS_CONTAINER_CURRENT","CLS_OPEN","CLS_CURRENT","CLS_PART_OF_STACK","CLS_MODAL_CONTAINER","CLS_ANIM_END","CLS_LOADER_CONTAINER","CLS_LOADER","CLS_BACKDROP","Modal","DelegateContainer","container","currentOpen","loading","classNames","closeOnEscape","closeOnBackgroundClick","destroyOnFinish","fixedContainer","containerClassNames","eventContainer","eventFunction","dataMainPageContainer","modalContainer","t","_modalInstances","splice","getInstance","close","applyOptionsFromElement","copy","KeyboardEvent","getTabEvent","defaultPrevented","_finishState","prevModal","switchModals","dispatch","withOriginal","_removeModalFromStack","lastContainer","childNodes","cl","destroy","co","last","open","prefixedAnimateEvent","_finishAnim","instances","isCurrent","contains","foundInstance","flexModalInstance","targetContent","future","hasTarget","isHtmlElement","isWidget","getAttribute","findWidget","newInstance","setDestroyOnFinish","fromEvent","then","registerEvents","getModalContainer","modalContainerClasses","className","closeModalFunction","ce","loader","toggleLoader","show","loaderLoader","requestAnimationFrame","getAsync","r","result","DocumentFragment","innerHTML","guid","resolve","thisEl","modal","internal","maybeEvent","delegate","delegateContainer","addScreenConstraint","_len","arguments","args","_key","createWidget","v","isEmptyContainer","MutationObserver","observer","mutations","disconnect","observe","childList","keyCode","lastModal","fn","ms","clearTimeout","timeout","setTimeout","concat","_Modal","_Modal2"],"mappings":"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","file":"js/modal.min.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[\"FlexCss\"] = factory();\n\telse\n\t\troot[\"FlexCss\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(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[\"FlexCss\"] = factory();\n\telse\n\t\troot[\"FlexCss\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \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/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"../\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(19);\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {\"use strict\";\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t    value: true\n\t});\n\t\n\tvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\t\n\tvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\t/*\n\t * The MIT License (MIT)\n\t *\n\t * Copyright (c) 2015 David Heidrich, BowlingX <me@bowlingx.com>\n\t *\n\t * Permission is hereby granted, free of charge, to any person obtaining a copy\n\t * of this software and associated documentation files (the \"Software\"), to deal\n\t * in the Software without restriction, including without limitation the rights\n\t * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n\t * copies of the Software, and to permit persons to whom the Software is\n\t * furnished to do so, subject to the following conditions:\n\t *\n\t * The above copyright notice and this permission notice shall be included in\n\t * all copies or substantial portions of the Software.\n\t *\n\t * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\t * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\t * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\t * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\t * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\t * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n\t * THE SOFTWARE.\n\t */\n\t\n\tvar PFX = [\"webkit\", \"moz\", \"MS\", \"o\", \"\"];\n\t\n\tvar COL_LEFT_CLASS = 'is-collision-left';\n\t\n\tvar COL_RIGHT_CLASS = 'is-collision-right';\n\t\n\tvar COL_BOTTOM_CLASS = 'is-collision-bottom';\n\t\n\t/**\n\t * Provides shared DOM-Utility functions\n\t */\n\t\n\tvar Util = function () {\n\t    function Util() {\n\t        _classCallCheck(this, Util);\n\t    }\n\t\n\t    _createClass(Util, null, [{\n\t        key: \"prefixedAnimateEvent\",\n\t\n\t\n\t        /**\n\t         * Will register the right animation event based on browser\n\t         * @param element\n\t         * @param type\n\t         * @param callback\n\t         */\n\t        value: function prefixedAnimateEvent(element, type, callback) {\n\t            var thisFunction = function thisFunction(e) {\n\t                callback.apply(element, [e, thisFunction]);\n\t            };\n\t\n\t            for (var p = 0; p < PFX.length; p++) {\n\t                var thisType = type;\n\t                if (!PFX[p]) {\n\t                    thisType = type.toLowerCase();\n\t                }\n\t                var name = PFX[p] + thisType;\n\t                element.addEventListener(name, thisFunction, true);\n\t            }\n\t        }\n\t\n\t        /**\n\t         * Get correct transitionend event\n\t         * @returns {String}\n\t         * @private\n\t         */\n\t\n\t    }, {\n\t        key: \"whichTransitionEndEvent\",\n\t        value: function whichTransitionEndEvent() {\n\t            var el = document.createElement('fake');\n\t\n\t            var transitions = {\n\t                transition: 'transitionend',\n\t                OTransition: 'oTransitionEnd',\n\t                MozTransition: 'transitionend',\n\t                WebkitTransition: 'webkitTransitionEnd'\n\t            };\n\t\n\t            var _iteratorNormalCompletion = true;\n\t            var _didIteratorError = false;\n\t            var _iteratorError = undefined;\n\t\n\t            try {\n\t                for (var _iterator = Object.entries(transitions)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t                    var _step$value = _slicedToArray(_step.value, 2),\n\t                        key = _step$value[0],\n\t                        value = _step$value[1];\n\t\n\t                    if (el.style[key] !== undefined) {\n\t                        return value;\n\t                    }\n\t                }\n\t            } catch (err) {\n\t                _didIteratorError = true;\n\t                _iteratorError = err;\n\t            } finally {\n\t                try {\n\t                    if (!_iteratorNormalCompletion && _iterator.return) {\n\t                        _iterator.return();\n\t                    }\n\t                } finally {\n\t                    if (_didIteratorError) {\n\t                        throw _iteratorError;\n\t                    }\n\t                }\n\t            }\n\t        }\n\t\n\t        /**\n\t         * Check if target is part of parent node\n\t         * @param target\n\t         * @param parent\n\t         * @returns {boolean}\n\t         */\n\t\n\t    }, {\n\t        key: \"isPartOfNode\",\n\t        value: function isPartOfNode(target, parent) {\n\t            if (!target || !parent) {\n\t                return false;\n\t            }\n\t            var now = target;\n\t            while (now !== parent && now !== null) {\n\t                if (now === parent) {\n\t                    break;\n\t                }\n\t                now = now.parentNode;\n\t            }\n\t            return now !== null;\n\t        }\n\t\n\t        /**\n\t         * Finds the closest element including itself matching a callback\n\t         * @param {Node} el\n\t         * @param {Function} callback\n\t         * @returns {Node|boolean}\n\t         */\n\t\n\t    }, {\n\t        key: \"closestCallback\",\n\t        value: function closestCallback(el, callback) {\n\t            var element = el;\n\t            while (element !== null) {\n\t                if (callback(element)) {\n\t                    return element;\n\t                }\n\t                element = element.parentNode;\n\t            }\n\t            return false;\n\t        }\n\t\n\t        /**\n\t         * Walks the tree until func returns true for given argument\n\t         * @param target\n\t         * @param func\n\t         * @returns {boolean|HTMLElement}\n\t         */\n\t\n\t    }, {\n\t        key: \"parentsUntil\",\n\t        value: function parentsUntil(target, func) {\n\t            if (!target) {\n\t                return false;\n\t            }\n\t            var now = target;\n\t            while (!func(now) && now !== null) {\n\t                now = now.parentNode;\n\t            }\n\t\n\t            return now;\n\t        }\n\t\n\t        /**\n\t         * Generates a unique id\n\t         * @return {String}\n\t         */\n\t\n\t    }, {\n\t        key: \"guid\",\n\t        value: function guid() {\n\t            function s4() {\n\t                return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);\n\t            }\n\t\n\t            return s4() + s4() + \"-\" + s4() + \"-\" + s4() + \"-\" + s4() + \"-\" + (s4() + s4() + s4());\n\t        }\n\t\n\t        /**\n\t         * Detects scrollbar width\n\t         * @see http://stackoverflow.com/questions/986937/how-can-i-get-the-browsers-scrollbar-sizes\n\t         * @returns {number}\n\t         */\n\t\n\t    }, {\n\t        key: \"getScrollBarWidth\",\n\t        value: function getScrollBarWidth() {\n\t            var doc = global.document;\n\t            var inner = doc.createElement('p');\n\t\n\t            inner.style.width = \"100%\";\n\t            inner.style.height = \"200px\";\n\t\n\t            var outer = doc.createElement('div');\n\t            outer.style.position = \"absolute\";\n\t            outer.style.top = \"0px\";\n\t            outer.style.left = \"0px\";\n\t            outer.style.visibility = \"hidden\";\n\t            outer.style.width = \"200px\";\n\t            outer.style.height = \"150px\";\n\t            outer.style.overflow = \"hidden\";\n\t            outer.appendChild(inner);\n\t\n\t            doc.body.appendChild(outer);\n\t            var w1 = inner.offsetWidth;\n\t            outer.style.overflow = 'scroll';\n\t            var w2 = inner.offsetWidth;\n\t            if (w1 === w2) {\n\t                w2 = outer.clientWidth;\n\t            }\n\t            doc.body.removeChild(outer);\n\t\n\t            return w1 - w2;\n\t        }\n\t\n\t        /**\n\t         * Run an event once\n\t         * @param {String} ev\n\t         * @param {HTMLElement|HTMLDocument} target\n\t         * @param {Function} func\n\t         * @param {boolean} [capture]\n\t         * @return Function created listener\n\t         */\n\t\n\t    }, {\n\t        key: \"addEventOnce\",\n\t        value: function addEventOnce(ev, target, func, capture) {\n\t            var thisFunction = function thisFunction(event) {\n\t                func(event, func);\n\t                target.removeEventListener(ev, thisFunction, capture);\n\t            };\n\t            target.addEventListener(ev, thisFunction, capture);\n\t            return thisFunction;\n\t        }\n\t\n\t        /**\n\t         * Checks if an element is visible\n\t         * @param {HTMLElement} element\n\t         * @returns bool\n\t         */\n\t\n\t    }, {\n\t        key: \"isVisible\",\n\t        value: function isVisible(element) {\n\t            return element.offsetWidth > 0 && element.offsetHeight > 0;\n\t        }\n\t\n\t        /**\n\t         * Creates a camelCaseRepresentation of a dashed string\n\t         * @param {String} str\n\t         * @returns String\n\t         */\n\t\n\t    }, {\n\t        key: \"dashToCamelCase\",\n\t        value: function dashToCamelCase(str) {\n\t            return str.replace(/-([a-z])/g, function (g) {\n\t                return g[1].toUpperCase();\n\t            });\n\t        }\n\t\n\t        /**\n\t         * Creates a copy of `input`\n\t         * @param {*} input\n\t         * @return *\n\t         */\n\t\n\t    }, {\n\t        key: \"copy\",\n\t        value: function copy(input) {\n\t            return JSON.parse(JSON.stringify(input));\n\t        }\n\t\n\t        /**\n\t         * Reads options from element (data attributes) and applies to base\n\t         * @param {HTMLElement} element\n\t         * @param {Object} base\n\t         * @return {Object}\n\t         */\n\t\n\t    }, {\n\t        key: \"applyOptionsFromElement\",\n\t        value: function applyOptionsFromElement(element, base) {\n\t            if (!element) {\n\t                return base;\n\t            }\n\t            var attrs = element.attributes;\n\t            for (var i = 0; i < attrs.length; i++) {\n\t                var attr = attrs[i];\n\t                if (attr) {\n\t                    var s = Util.dashToCamelCase(attr.nodeName.replace('data-', ''));\n\t                    var val = attr.nodeValue;\n\t                    if (base.hasOwnProperty(s)) {\n\t                        // skip functions\n\t                        if (typeof base[s] === 'function') {\n\t                            continue;\n\t                        }\n\t                        if (typeof base[s] === 'boolean') {\n\t                            base[s] = parseInt(val || 1, 10) === 1;\n\t                        } else {\n\t                            base[s] = val;\n\t                        }\n\t                    }\n\t                }\n\t            }\n\t            return base;\n\t        }\n\t\n\t        /**\n\t         * Will position an element directly at given target\n\t         * Is aware of a given collision container to detect edges\n\t         * Will put elementToPosition either to left, center or right edge (prefer right)\n\t         *  and either to bottom or top (prefers bottom)\n\t         *\n\t         * You may overwrite preferred positioned with `centerHorizontal` and `positionTop`\n\t         *\n\t         * @param {HTMLElement|ClientRect} target the target container to align to\n\t         * @param {HTMLElement} elementToPosition the element to position\n\t         * @param {HTMLElement} collisionContainer the outer container to prevent collisions\n\t         * @param {boolean} [centerHorizontal] set true to center element, otherwise it's put on the right border by default\n\t         * @param {boolean} [positionTop] flip top, by default element is positioned to the bottom.\n\t         * @returns {HTMLElement}\n\t         */\n\t\n\t    }, {\n\t        key: \"setupPositionNearby\",\n\t        value: function setupPositionNearby(target, elementToPosition, collisionContainer, centerHorizontal, positionTop) {\n\t            // determine relative offsets\n\t            var amountTop = 0;\n\t            var amountLeft = 0;\n\t            Util.parentsUntil(target.parentNode, function (el) {\n\t                if (!(el instanceof HTMLElement)) {\n\t                    return false;\n\t                }\n\t                var style = window.getComputedStyle(el);\n\t                if (Util.isPartOfNode(elementToPosition, el)) {\n\t                    if (style && style.position === 'relative') {\n\t                        amountTop += el.offsetTop || 0;\n\t                        amountLeft += el.offsetLeft || 0;\n\t                    }\n\t                    return false;\n\t                }\n\t                return true;\n\t            });\n\t\n\t            var targetPosition = target instanceof HTMLElement ? target.getBoundingClientRect() : target;\n\t            var elementRect = elementToPosition.getBoundingClientRect();\n\t            var colRect = collisionContainer.getBoundingClientRect();\n\t            var targetTop = targetPosition.top - amountTop;\n\t            var targetRight = targetPosition.right;\n\t            var isCollisionTop = targetTop - elementRect.height <= 0;\n\t            var isCollisionBottom = window.innerHeight < targetTop + amountTop + targetPosition.height + elementRect.height;\n\t            var isCollisionLeft = targetRight < elementRect.width;\n\t            var targetLeft = targetPosition.left;\n\t            var isCollisionRight = targetLeft + elementRect.width > colRect.width;\n\t            var classList = elementToPosition.classList;\n\t\n\t            classList.remove(COL_RIGHT_CLASS);\n\t            classList.remove(COL_LEFT_CLASS);\n\t            classList.remove(COL_BOTTOM_CLASS);\n\t\n\t            var calcTop = void 0;\n\t            var calcLeft = void 0;\n\t            if (isCollisionLeft && !isCollisionRight) {\n\t                // put element to left if collision with left\n\t                calcLeft = targetPosition.left - colRect.left - amountLeft + \"px\";\n\t                classList.add(COL_LEFT_CLASS);\n\t            } else {\n\t                // maybe center if no collision with either side\n\t                var rightPosition = targetRight - elementRect.width - colRect.left - amountLeft + \"px\";\n\t                var leftCentered = (targetLeft + targetPosition.width / 2 - elementRect.width / 2 || 0) - colRect.left;\n\t                var collisionCentered = leftCentered + elementRect.width > colRect.width;\n\t                if (centerHorizontal && !collisionCentered) {\n\t                    calcLeft = leftCentered + \"px\";\n\t                } else {\n\t                    classList.add(COL_RIGHT_CLASS);\n\t                    calcLeft = rightPosition;\n\t                }\n\t            }\n\t\n\t            if (isCollisionBottom || positionTop && !isCollisionTop) {\n\t                // Put Element on top if collision\n\t                calcTop = targetTop - elementRect.height - colRect.top + \"px\";\n\t                classList.add(COL_BOTTOM_CLASS);\n\t            } else {\n\t                calcTop = targetTop + targetPosition.height - colRect.top + \"px\";\n\t            }\n\t\n\t            elementToPosition.style.cssText = \"top:\" + calcTop + \";left:\" + calcLeft + \";\";\n\t\n\t            return elementToPosition;\n\t        }\n\t\n\t        /**\n\t         * Brings a given element into viewport\n\t         * @param {HTMLElement} el\n\t         * @param {int|function}[optionalOffset]\n\t         */\n\t\n\t    }, {\n\t        key: \"scrollToElement\",\n\t        value: function scrollToElement(el, optionalOffset) {\n\t            el.scrollIntoView();\n\t            var thisOffset = optionalOffset;\n\t            // optionally use a additional scrollDif\n\t            if (thisOffset) {\n\t                if (typeof thisOffset === 'function') {\n\t                    thisOffset = optionalOffset();\n\t                }\n\t                var scrolledY = window.pageYOffset;\n\t                window.scroll(0, scrolledY - thisOffset);\n\t            }\n\t        }\n\t    }]);\n\t\n\t    return Util;\n\t}();\n\t\n\texports.default = Util;\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t    value: true\n\t});\n\t\n\tvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /*\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * The MIT License (MIT)\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      *\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * Copyright (c) 2015 David Heidrich, BowlingX <me@bowlingx.com>\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      *\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * Permission is hereby granted, free of charge, to any person obtaining a copy\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * of this software and associated documentation files (the \"Software\"), to deal\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * in the Software without restriction, including without limitation the rights\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * copies of the Software, and to permit persons to whom the Software is\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * furnished to do so, subject to the following conditions:\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      *\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * The above copyright notice and this permission notice shall be included in\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * all copies or substantial portions of the Software.\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      *\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * THE SOFTWARE.\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      */\n\t\n\t\n\tvar _Util = __webpack_require__(1);\n\t\n\tvar _Util2 = _interopRequireDefault(_Util);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\t// we attach global settings to global once because settings might be shared a lot of times trough the application\n\t// Maybe find a better way to handle that scenario\n\tif (global.document && !global.FLEXCSS_GLOBAL_SETTINGS) {\n\t    global.FLEXCSS_GLOBAL_SETTINGS = {\n\t        // defined breakpoint for small devices < n\n\t        smallBreakpoint: 768,\n\t        // breakpoint when touchmove should be available\n\t        touchMoveBreakpointOffCanvas: 768,\n\t        // nodes that should be updated when no scrollbar is expected\n\t        scrollbarUpdateNodes: global.document.body !== null ? [global.document.body] : [],\n\t        // additional Delay until darkener is fully hidden\n\t        darkenerFadeDelay: 100,\n\t        // class that is added if canvas has been toggled\n\t        canvasToggledClass: 'toggled-canvas'\n\t    };\n\t\n\t    global.FLEXCSS_CONST_IS_IOS = null;\n\t\n\t    global.FLEXCSS_CONST_IS_TOUCH = null;\n\t\n\t    global.FLEXCSS_CONST_IS_SAFARI = null;\n\t\n\t    global.FLEXCSS_CONST_IS_IE = null;\n\t\n\t    global.FLEXCSS_CONST_TAB_EVENT = 'click';\n\t\n\t    global.FLEXCSS_IS_SMALL_SCREEN = false;\n\t\n\t    var init = function init() {\n\t        // Measure scrollbar width\n\t        global.FLEXCSS_CONST_SCROLLBAR_WIDTH = _Util2.default.getScrollBarWidth();\n\t        // detect right transition end event\n\t        global.FLEXCSS_CONST_TRANSITION_EVENT = _Util2.default.whichTransitionEndEvent();\n\t    };\n\t\n\t    if (global.document.readyState !== 'loading') {\n\t        init();\n\t    } else {\n\t        // it's possible that global.document.body is not available if the document is not\n\t        // loaded completely\n\t        document.addEventListener('DOMContentLoaded', function () {\n\t            init();\n\t        });\n\t    }\n\t}\n\t\n\t/**\n\t * Utility class that setups global settings\n\t */\n\t\n\tvar Settings = function () {\n\t    function Settings() {\n\t        _classCallCheck(this, Settings);\n\t    }\n\t\n\t    _createClass(Settings, null, [{\n\t        key: 'setup',\n\t\n\t\n\t        /**\n\t         * Setup global settings, overwrite default values\n\t         * @param {Object} settings\n\t         */\n\t        value: function setup(settings) {\n\t            Object.assign(global.FLEXCSS_GLOBAL_SETTINGS, settings);\n\t        }\n\t\n\t        /**\n\t         * Access to global settings\n\t         * @returns {Object}\n\t         */\n\t\n\t    }, {\n\t        key: 'get',\n\t        value: function get() {\n\t            return global.FLEXCSS_GLOBAL_SETTINGS;\n\t        }\n\t\n\t        /**\n\t         * Detects a IOS Device, caches subsequent calls\n\t         * @returns {boolean}\n\t         */\n\t\n\t    }, {\n\t        key: 'isIosDevice',\n\t        value: function isIosDevice() {\n\t            if (!global.FLEXCSS_CONST_IS_IOS) {\n\t                global.FLEXCSS_CONST_IS_IOS = global.navigator.userAgent.match(/(iPad|iPhone|iPod)/i);\n\t            }\n\t\n\t            return global.FLEXCSS_CONST_IS_IOS;\n\t        }\n\t\n\t        /**\n\t         * Detects a safari browser\n\t         * @returns {boolean}\n\t         */\n\t\n\t    }, {\n\t        key: 'isSafari',\n\t        value: function isSafari() {\n\t            if (!global.FLEXCSS_CONST_IS_SAFARI) {\n\t                global.FLEXCSS_CONST_IS_SAFARI = !!/^((?!chrome|android).)*safari/i.test(global.navigator.userAgent);\n\t            }\n\t            return global.FLEXCSS_CONST_IS_SAFARI;\n\t        }\n\t\n\t        /**\n\t         * @returns {boolean}\n\t         */\n\t\n\t    }, {\n\t        key: 'isSmallScreen',\n\t        value: function isSmallScreen() {\n\t            return window.innerWidth < Settings.get().smallBreakpoint;\n\t        }\n\t\n\t        /**\n\t         * Detects a touch device, caches subsequent calls\n\t         * @returns {boolean}\n\t         */\n\t\n\t    }, {\n\t        key: 'isTouchDevice',\n\t        value: function isTouchDevice() {\n\t            if (!global.FLEXCSS_CONST_IS_TOUCH) {\n\t                global.FLEXCSS_CONST_IS_TOUCH = 'ontouchstart' in window || !!global.navigator.msMaxTouchPoints;\n\t            }\n\t            return global.FLEXCSS_CONST_IS_TOUCH;\n\t        }\n\t\n\t        /**\n\t         * Checks if current browser is Internet Explorer\n\t         * @returns {boolean|*}\n\t         */\n\t\n\t    }, {\n\t        key: 'isIE',\n\t        value: function isIE() {\n\t            if (!global.FLEXCSS_CONST_IS_IE) {\n\t                global.FLEXCSS_CONST_IS_IE = \"ActiveXObject\" in window;\n\t            }\n\t            return global.FLEXCSS_CONST_IS_IE;\n\t        }\n\t\n\t        /**\n\t         * @returns {String}\n\t         */\n\t\n\t    }, {\n\t        key: 'getTransitionEvent',\n\t        value: function getTransitionEvent() {\n\t            return global.FLEXCSS_CONST_TRANSITION_EVENT;\n\t        }\n\t\n\t        /**\n\t         * @returns {int}\n\t         */\n\t\n\t    }, {\n\t        key: 'getScrollbarWidth',\n\t        value: function getScrollbarWidth() {\n\t            return global.FLEXCSS_CONST_SCROLLBAR_WIDTH;\n\t        }\n\t\n\t        /**\n\t         * @returns {String}\n\t         */\n\t\n\t    }, {\n\t        key: 'getTabEvent',\n\t        value: function getTabEvent() {\n\t            return global.FLEXCSS_CONST_TAB_EVENT;\n\t        }\n\t    }]);\n\t\n\t    return Settings;\n\t}();\n\t\n\texports.default = Settings;\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {\"use strict\";\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t    value: true\n\t});\n\t\n\tvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\t/* global CustomEvent */\n\t\n\t/*\n\t * The MIT License (MIT)\n\t *\n\t * Copyright (c) 2015 David Heidrich, BowlingX <me@bowlingx.com>\n\t *\n\t * Permission is hereby granted, free of charge, to any person obtaining a copy\n\t * of this software and associated documentation files (the \"Software\"), to deal\n\t * in the Software without restriction, including without limitation the rights\n\t * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n\t * copies of the Software, and to permit persons to whom the Software is\n\t * furnished to do so, subject to the following conditions:\n\t *\n\t * The above copyright notice and this permission notice shall be included in\n\t * all copies or substantial portions of the Software.\n\t *\n\t * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\t * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\t * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\t * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\t * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\t * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n\t * THE SOFTWARE.\n\t */\n\t\n\t// polyfill for custom events to make thinks work in IE\n\t// The needed polyfill is so small that I embedded it here\n\t(function poly() {\n\t    if (global.document && (!global.CustomEvent || typeof global.CustomEvent !== 'function')) {\n\t        var _CustomEvent = function CustomEvent(event, params) {\n\t            var thisParams = params || {\n\t                bubbles: false,\n\t                cancelable: false,\n\t                detail: undefined\n\t            };\n\t            var evt = document.createEvent(\"CustomEvent\");\n\t            evt.initCustomEvent(event, thisParams.bubbles, thisParams.cancelable, thisParams.detail);\n\t            evt.superPreventDefault = evt.preventDefault;\n\t            evt.preventDefault = function () {\n\t                // Due a bug in IE11, we need to set defaultPrevented manually\n\t                Object.defineProperty(evt, \"defaultPrevented\", {\n\t                    get: function get() {\n\t                        return true;\n\t                    }\n\t                });\n\t                evt.superPreventDefault();\n\t            };\n\t            return evt;\n\t        };\n\t        _CustomEvent.prototype = global.Event.prototype;\n\t        global.CustomEvent = _CustomEvent;\n\t    }\n\t})();\n\t/**\n\t * Simpler Event dispatching\n\t */\n\t\n\tvar EventHandler = function () {\n\t\n\t    /**\n\t     * @param {HTMLElement} target\n\t     * @param {String} name\n\t     */\n\t    function EventHandler(target, name) {\n\t        _classCallCheck(this, EventHandler);\n\t\n\t        this.target = target;\n\t        this.defaultOptions = {\n\t            bubbles: true,\n\t            cancelable: true\n\t        };\n\t\n\t        this.name = name;\n\t    }\n\t\n\t    /**\n\t     * Set more options\n\t     * @param {Object} options\n\t     * @returns {EventHandler}\n\t     */\n\t\n\t\n\t    _createClass(EventHandler, [{\n\t        key: \"withOptions\",\n\t        value: function withOptions(options) {\n\t            Object.assign(this.defaultOptions, options || {});\n\t            return this;\n\t        }\n\t\n\t        /**\n\t         * Call with the originalEvent\n\t         * @param {Event} e\n\t         * @returns {EventHandler}\n\t         */\n\t\n\t    }, {\n\t        key: \"withOriginal\",\n\t        value: function withOriginal(e) {\n\t            return this.withDetail({\n\t                originalEvent: e\n\t            });\n\t        }\n\t\n\t        /**\n\t         * Extends the detail part of the event\n\t         * @param {Object} o\n\t         * @returns {EventHandler}\n\t         */\n\t\n\t    }, {\n\t        key: \"withDetail\",\n\t        value: function withDetail(o) {\n\t            if (!this.defaultOptions.detail) {\n\t                this.defaultOptions.detail = {};\n\t            }\n\t            Object.assign(this.defaultOptions.detail, o);\n\t            return this;\n\t        }\n\t\n\t        /**\n\t         * @returns {CustomEvent}\n\t         */\n\t\n\t    }, {\n\t        key: \"fire\",\n\t        value: function fire() {\n\t            var e = new CustomEvent(this.name, this.defaultOptions);\n\t            if (this.target) {\n\t                this.target.dispatchEvent(e);\n\t            }\n\t            return e;\n\t        }\n\t    }]);\n\t\n\t    return EventHandler;\n\t}();\n\t\n\tvar Event = function () {\n\t    function Event() {\n\t        _classCallCheck(this, Event);\n\t    }\n\t\n\t    _createClass(Event, null, [{\n\t        key: \"dispatch\",\n\t\n\t        /**\n\t         * Prepares to dispatch a custom event (without firing)\n\t         * @param {HTMLElement} target\n\t         * @param {String} name\n\t         * @returns {EventHandler}\n\t         */\n\t        value: function dispatch(target, name) {\n\t            return new EventHandler(target, name);\n\t        }\n\t\n\t        /**\n\t         * Dispatches a custom event and fires it directly\n\t         * @param {HTMLElement} target\n\t         * @param {String} name\n\t         * @param {Object} [options]\n\t         * @returns {CustomEvent}\n\t         */\n\t\n\t    }, {\n\t        key: \"dispatchAndFire\",\n\t        value: function dispatchAndFire(target, name, options) {\n\t            return new EventHandler(target, name).withOptions(options).fire();\n\t        }\n\t    }]);\n\t\n\t    return Event;\n\t}();\n\t\n\texports.default = Event;\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\tvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\t/*\n\t * The MIT License (MIT)\n\t *\n\t * Copyright (c) 2015 David Heidrich, BowlingX <me@bowlingx.com>\n\t *\n\t * Permission is hereby granted, free of charge, to any person obtaining a copy\n\t * of this software and associated documentation files (the \"Software\"), to deal\n\t * in the Software without restriction, including without limitation the rights\n\t * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n\t * copies of the Software, and to permit persons to whom the Software is\n\t * furnished to do so, subject to the following conditions:\n\t *\n\t * The above copyright notice and this permission notice shall be included in\n\t * all copies or substantial portions of the Software.\n\t *\n\t * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\t * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\t * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\t * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\t * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\t * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n\t * THE SOFTWARE.\n\t */\n\t\n\t/*!\n\t * FlexCss.Widget\n\t * Licensed under the MIT License (MIT)\n\t * Copyright (c) 2015 David Heidrich, BowlingX <me@bowlingx.com>\n\t */\n\t\n\t/**\n\t * A Widget provides async content on a specific target (e.g. a modal link)\n\t */\n\tvar Widget = function () {\n\t\n\t  /**\n\t   * Creates a new Widget\n\t   * @param [element], optional define the content of widget\n\t   */\n\t  function Widget(element) {\n\t    var _this = this;\n\t\n\t    _classCallCheck(this, Widget);\n\t\n\t    /**\n\t     *\n\t     * @type {Promise}\n\t     */\n\t    this.asyncContent = null;\n\t\n\t    /**\n\t     * @type {boolean}\n\t     */\n\t    this._isWidget = true;\n\t\n\t    if (element) {\n\t      /**\n\t       * @type {HTMLElement}\n\t       */\n\t      this.element = element instanceof HTMLElement ? element : global.document.getElementById(element);\n\t      if (this.element) {\n\t        this.element.hfWidgetInstance = this;\n\t        this.setAsync(function () {\n\t          return new Promise(function (s) {\n\t            s(_this.element);\n\t          });\n\t        });\n\t      } else {\n\t        throw new Error('Could not found element with ID: ' + element);\n\t      }\n\t    }\n\t    /**\n\t     * The final resulted content that a widget did create (e.g. a modal container)\n\t     * @type {HTMLElement}\n\t     */\n\t    this.finalContent = null;\n\t  }\n\t\n\t  /**\n\t   *\n\t   * @returns {Promise}\n\t   */\n\t\n\t\n\t  _createClass(Widget, [{\n\t    key: 'getAsync',\n\t    value: function getAsync() {\n\t      return this.asyncContent();\n\t    }\n\t\n\t    /**\n\t     * @param {Function.<Promise>} async\n\t     * @returns {Widget}\n\t     */\n\t\n\t  }, {\n\t    key: 'setAsync',\n\t    value: function setAsync(async) {\n\t      this.asyncContent = async;\n\t      return this;\n\t    }\n\t\n\t    /**\n\t     * @returns {HTMLElement}\n\t     */\n\t\n\t  }, {\n\t    key: 'getFinalContent',\n\t    value: function getFinalContent() {\n\t      return this.finalContent;\n\t    }\n\t\n\t    /**\n\t     * @param {HTMLElement} element\n\t     * @returns {Widget}\n\t     */\n\t\n\t  }, {\n\t    key: 'setElement',\n\t    value: function setElement(element) {\n\t      this.element = element;\n\t      return this;\n\t    }\n\t\n\t    /**\n\t     * Destroys the generated content of this widget\n\t     * @returns {boolean}\n\t     */\n\t\n\t  }, {\n\t    key: 'destroy',\n\t    value: function destroy() {\n\t      if (this.finalContent && this.finalContent.parentNode) {\n\t        this.finalContent.parentNode.removeChild(this.finalContent);\n\t        return true;\n\t      }\n\t\n\t      delete this.element;\n\t      delete this.asyncContent;\n\t      delete this.finalContent;\n\t\n\t      return false;\n\t    }\n\t\n\t    /**\n\t     * Will find a widget on an Element\n\t     * @param {HTMLElement} element\n\t     * @returns {Widget|undefined}\n\t     */\n\t\n\t  }], [{\n\t    key: 'findWidget',\n\t    value: function findWidget(element) {\n\t      return element ? element.hfWidgetInstance : undefined;\n\t    }\n\t\n\t    /**\n\t     * Checks if a given object is an instance\n\t     * @param {Object} self\n\t     * @returns {boolean}\n\t     */\n\t\n\t  }, {\n\t    key: 'isWidget',\n\t    value: function isWidget(self) {\n\t      return self instanceof Widget || (typeof self === 'undefined' ? 'undefined' : _typeof(self)) === 'object' && self.hasOwnProperty('_isWidget');\n\t    }\n\t  }]);\n\t\n\t  return Widget;\n\t}();\n\t\n\texports.default = Widget;\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 5 */,\n/* 6 */,\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t    value: true\n\t});\n\texports.ALLOW_ELEMENT_OVERFLOW_TOUCH = exports.EVENT_AFTER_FIXED_REMOVE = exports.EVENT_BEFORE_FIXED_ADD = undefined;\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\tvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\t\n\tvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\t\n\tvar _Settings = __webpack_require__(2);\n\t\n\tvar _Settings2 = _interopRequireDefault(_Settings);\n\t\n\tvar _debounce = __webpack_require__(10);\n\t\n\tvar _debounce2 = _interopRequireDefault(_debounce);\n\t\n\tvar _Event = __webpack_require__(3);\n\t\n\tvar _Event2 = _interopRequireDefault(_Event);\n\t\n\tvar _Util = __webpack_require__(1);\n\t\n\tvar _Util2 = _interopRequireDefault(_Util);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tvar CLS_FIXED_WINDOW = 'fixed-window-open';\n\t\n\tvar EVENT_BEFORE_FIXED_ADD = exports.EVENT_BEFORE_FIXED_ADD = 'flexcss.fixedWindow.beforeAdd';\n\tvar EVENT_AFTER_FIXED_REMOVE = exports.EVENT_AFTER_FIXED_REMOVE = 'flexcss.fixedWindow.afterRemove';\n\t\n\t/**\n\t * @type {string}\n\t */\n\tvar ALLOW_ELEMENT_OVERFLOW_TOUCH = exports.ALLOW_ELEMENT_OVERFLOW_TOUCH = 'data-overflow';\n\t\n\t/**\n\t * @type {FixedWindow}\n\t */\n\tvar fixedWindowInstance = void 0;\n\t\n\tvar FixedWindow = function () {\n\t    function FixedWindow() {\n\t        _classCallCheck(this, FixedWindow);\n\t\n\t        this.widgets = [];\n\t        this.currentScrollTop = 0;\n\t        this.fixedScreenConstraints = [];\n\t        this.windowWidth = 0;\n\t        this.isFixedWindowActive = false;\n\t        this.touchListener = null;\n\t    }\n\t\n\t    /**\n\t     * Adds a constraint to detect if the window needs to be changed when the screensize changes\n\t     *\n\t     * @param {Function} widget\n\t     * @param {Function} fixedBreakpointFn gets a width argument, return true to open a window\n\t     */\n\t\n\t\n\t    _createClass(FixedWindow, [{\n\t        key: 'addScreenConstraint',\n\t        value: function addScreenConstraint(widget, fixedBreakpointFn) {\n\t            this.fixedScreenConstraints[widget] = fixedBreakpointFn;\n\t        }\n\t\n\t        /**\n\t         * @returns {null|DestroyableWidget}\n\t         */\n\t\n\t    }, {\n\t        key: 'getCurrentWidget',\n\t        value: function getCurrentWidget() {\n\t            return this.widgets.length > 0 ? this.widgets[this.widgets.length - 1] : null;\n\t        }\n\t    }, {\n\t        key: 'getLastFixedWidget',\n\t        value: function getLastFixedWidget() {\n\t            var length = this.widgets.length;\n\t            var widget = null;\n\t            while (length > 0) {\n\t                var thisWidget = this.widgets[length - 1];\n\t                if (thisWidget.fixed) {\n\t                    widget = thisWidget;\n\t                    break;\n\t                }\n\t                length--;\n\t            }\n\t            return widget;\n\t        }\n\t\n\t        /**\n\t         * @private\n\t         */\n\t\n\t    }, {\n\t        key: '_checkFixedNeeded',\n\t        value: function _checkFixedNeeded() {\n\t            var _this = this;\n\t\n\t            if (this.widgets.length === 0) {\n\t                return;\n\t            }\n\t            var widgets = new Set(this.widgets);\n\t            var widgetsThatRequireFixedWindow = Array.from(widgets).some(function (el) {\n\t                var widget = el.widget;\n\t\n\t                var isFixed = _this.fixedScreenConstraints[widget] && _this.fixedScreenConstraints[widget](_this.windowWidth, _this.getCurrentWidget());\n\t                var index = _this.widgets.indexOf(el);\n\t                _this.widgets[index] = Object.assign(el, { fixed: isFixed });\n\t                return isFixed;\n\t            });\n\t            if (!widgetsThatRequireFixedWindow) {\n\t                this._removeFixedContainer();\n\t            } else {\n\t                this._addFixedContainer();\n\t            }\n\t        }\n\t\n\t        /**\n\t         * @private\n\t         */\n\t\n\t    }, {\n\t        key: '_addFixedContainer',\n\t        value: function _addFixedContainer() {\n\t            var _this2 = this;\n\t\n\t            if (this.isFixedWindowActive) {\n\t                return;\n\t            }\n\t            _Event2.default.dispatchAndFire(global.document, EVENT_BEFORE_FIXED_ADD, {\n\t                detail: this.getCurrentWidget()\n\t            });\n\t            // this causes layout and should be optimized\n\t            // At lest we write in a batch later\n\t            _Settings2.default.get().scrollbarUpdateNodes.map(function (n) {\n\t                var foundProperty = 'paddingRight';\n\t                var direction = 1;\n\t                var node = n;\n\t                if (n instanceof Array) {\n\t                    var _n = _slicedToArray(n, 3),\n\t                        whatNode = _n[0],\n\t                        property = _n[1],\n\t                        d = _n[2];\n\t\n\t                    foundProperty = property;\n\t                    node = whatNode;\n\t                    direction = d || 1;\n\t                }\n\t                return {\n\t                    node: node,\n\t                    property: foundProperty,\n\t                    value: parseInt(global.getComputedStyle(node)[foundProperty], 10) + (!node.__fixedWindowMod__ ? _Settings2.default.getScrollbarWidth() * direction : 0) + 'px'\n\t                };\n\t            }).forEach(function (d) {\n\t                d.node.__fixedWindowMod__ = true;\n\t                d.node.style[d.property] = d.value;\n\t            });\n\t\n\t            this.touchListener = function (e) {\n\t                e.preventDefault();\n\t            };\n\t\n\t            var shouldNotMoveUp = false;\n\t            var shouldNotMoveDown = false;\n\t            var neverScroll = false;\n\t            var lastClientY = 0;\n\t            this.touchStartListener = function (e) {\n\t                var _getLastFixedWidget = _this2.getLastFixedWidget(),\n\t                    element = _getLastFixedWidget.element;\n\t\n\t                var closestOverflow = _Util2.default.closestCallback(e.target, function (el) {\n\t                    return el instanceof HTMLTextAreaElement || el.hasAttribute && el.hasAttribute(ALLOW_ELEMENT_OVERFLOW_TOUCH);\n\t                });\n\t                if (closestOverflow && closestOverflow.scrollHeight !== closestOverflow.offsetHeight) {\n\t                    element = closestOverflow;\n\t                }\n\t                if (_Util2.default.isPartOfNode(e.target, element)) {\n\t                    neverScroll = element.scrollHeight === element.offsetHeight;\n\t                    lastClientY = e.touches[0].clientY;\n\t                    // never allow scrolling when there is nothing to scroll\n\t                    if (neverScroll) {\n\t                        return false;\n\t                    }\n\t                    if (element.scrollTop === 0) {\n\t                        shouldNotMoveUp = true;\n\t                    } else if (element.scrollHeight === element.scrollTop + element.offsetHeight) {\n\t                        shouldNotMoveDown = true;\n\t                    }\n\t                }\n\t            };\n\t\n\t            global.addEventListener('touchmove', this.touchListener);\n\t            global.document.body.addEventListener('touchstart', this.touchStartListener);\n\t\n\t            this.touchMoveListener = function (e) {\n\t                var _getLastFixedWidget2 = _this2.getLastFixedWidget(),\n\t                    element = _getLastFixedWidget2.element;\n\t\n\t                if (_Util2.default.isPartOfNode(e.target, element)) {\n\t                    var clientY = e.touches[0].clientY;\n\t\n\t                    var isScrollingDown = lastClientY - clientY > 0;\n\t                    lastClientY = clientY;\n\t                    if (neverScroll) {\n\t                        return false;\n\t                    }\n\t                    if (!shouldNotMoveDown && isScrollingDown || shouldNotMoveDown && !isScrollingDown || !shouldNotMoveDown && !shouldNotMoveUp && !isScrollingDown || shouldNotMoveDown && shouldNotMoveUp && isScrollingDown) {\n\t                        e.stopImmediatePropagation();\n\t                    }\n\t                }\n\t            };\n\t\n\t            this.touchEndListener = function () {\n\t                neverScroll = false;\n\t                shouldNotMoveUp = false;\n\t                shouldNotMoveDown = false;\n\t                lastClientY = 0;\n\t            };\n\t\n\t            global.document.body.addEventListener('touchmove', this.touchMoveListener);\n\t            global.document.body.addEventListener('touchend', this.touchEndListener);\n\t            global.document.documentElement.classList.add(CLS_FIXED_WINDOW);\n\t            this.isFixedWindowActive = true;\n\t        }\n\t\n\t        /**\n\t         * @private\n\t         */\n\t\n\t    }, {\n\t        key: '_removeFixedContainer',\n\t        value: function _removeFixedContainer() {\n\t            if (this.isFixedWindowActive) {\n\t                // cleanup event listeners\n\t                global.removeEventListener('touchmove', this.touchListener);\n\t                global.document.body.removeEventListener('touchstart', this.touchStartListener);\n\t                global.document.body.removeEventListener('touchmove', this.touchMoveListener);\n\t                global.document.body.removeEventListener('touchend', this.touchEndListener);\n\t\n\t                // reset scrollbar nodes\n\t                _Settings2.default.get().scrollbarUpdateNodes.forEach(function (node) {\n\t                    if (node instanceof Array) {\n\t                        var _node = _slicedToArray(node, 2),\n\t                            whatNode = _node[0],\n\t                            property = _node[1];\n\t\n\t                        delete whatNode.__fixedWindowMod__;\n\t                        whatNode.style[property] = '';\n\t                    } else {\n\t                        delete node.__fixedWindowMod__;\n\t                        node.style.paddingRight = '';\n\t                    }\n\t                });\n\t                global.document.documentElement.classList.remove(CLS_FIXED_WINDOW);\n\t                _Event2.default.dispatchAndFire(global.document, EVENT_AFTER_FIXED_REMOVE);\n\t                this.isFixedWindowActive = false;\n\t            }\n\t        }\n\t\n\t        /**\n\t         * Will close a window when no widgets are opened that need one\n\t         */\n\t\n\t    }, {\n\t        key: 'resizeListener',\n\t        value: function resizeListener() {\n\t            this.windowWidth = global.innerWidth;\n\t            this._checkFixedNeeded();\n\t        }\n\t\n\t        /**\n\t         * @returns {FixedWindow}\n\t         */\n\t\n\t    }, {\n\t        key: 'close',\n\t\n\t\n\t        /**\n\t         * Request a close of the fixed window\n\t         */\n\t        value: function close() {\n\t            this.widgets.pop();\n\t            this._checkFixedNeeded();\n\t            if (this.widgets.length === 0) {\n\t                this._removeFixedContainer();\n\t            }\n\t        }\n\t\n\t        /**\n\t         * Request to open a fixed windows\n\t         * @param {Object|DestroyableWidget} instance\n\t         * @param {HTMLElement} element\n\t         */\n\t\n\t    }, {\n\t        key: 'open',\n\t        value: function open(instance, element) {\n\t            var fixed = false;\n\t            if ((typeof instance === 'undefined' ? 'undefined' : _typeof(instance)) === 'object') {\n\t                var widget = instance.constructor;\n\t                var fixedWidget = this.fixedScreenConstraints[instance.constructor];\n\t                if (widget && fixedWidget) {\n\t                    fixed = fixedWidget(this.windowWidth, instance);\n\t                }\n\t                this.widgets.push({\n\t                    widget: widget,\n\t                    element: element,\n\t                    fixed: fixed\n\t                });\n\t                // open a new window if there is no window active\n\t                if (!this.isFixedWindowActive && fixed) {\n\t                    this._addFixedContainer();\n\t                }\n\t            }\n\t        }\n\t    }], [{\n\t        key: 'getInstance',\n\t        value: function getInstance() {\n\t            if (!fixedWindowInstance) {\n\t                fixedWindowInstance = new FixedWindow();\n\t                fixedWindowInstance.windowWidth = global.innerWidth;\n\t                var eventHandler = fixedWindowInstance.resizeListener.bind(fixedWindowInstance);\n\t                global.addEventListener('resize', (0, _debounce2.default)(eventHandler, 500));\n\t                global.addEventListener('orientationchange', eventHandler);\n\t            }\n\t            return fixedWindowInstance;\n\t        }\n\t    }]);\n\t\n\t    return FixedWindow;\n\t}();\n\t\n\texports.default = FixedWindow;\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t    value: true\n\t});\n\texports.EVENT_MODAL_ASYNC_TARGET_LOADED = exports.EVENT_MODAL_INIT = exports.EVENT_MODAL_OPENED = exports.EVENT_MODAL_BEFORE_CLOSED = exports.EVENT_MODAL_CLOSED = undefined;\n\t\n\tvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /*\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * The MIT License (MIT)\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      *\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * Copyright (c) 2015 David Heidrich, BowlingX <me@bowlingx.com>\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      *\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * Permission is hereby granted, free of charge, to any person obtaining a copy\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * of this software and associated documentation files (the \"Software\"), to deal\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * in the Software without restriction, including without limitation the rights\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * copies of the Software, and to permit persons to whom the Software is\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * furnished to do so, subject to the following conditions:\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      *\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * The above copyright notice and this permission notice shall be included in\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * all copies or substantial portions of the Software.\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      *\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * THE SOFTWARE.\n\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      */\n\t\n\t/*!\n\t * FlexCss.Modal\n\t * Licensed under the MIT License (MIT)\n\t * Copyright (c) 2015 David Heidrich, BowlingX <me@bowlingx.com>\n\t */\n\t\n\t/* global KeyboardEvent */\n\t\n\tvar _Settings = __webpack_require__(2);\n\t\n\tvar _Settings2 = _interopRequireDefault(_Settings);\n\t\n\tvar _Event = __webpack_require__(3);\n\t\n\tvar _Event2 = _interopRequireDefault(_Event);\n\t\n\tvar _Util = __webpack_require__(1);\n\t\n\tvar _Util2 = _interopRequireDefault(_Util);\n\t\n\tvar _Widget = __webpack_require__(4);\n\t\n\tvar _Widget2 = _interopRequireDefault(_Widget);\n\t\n\tvar _FixedWindow = __webpack_require__(7);\n\t\n\tvar _FixedWindow2 = _interopRequireDefault(_FixedWindow);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tvar KEY_ESC = 27;\n\t/* Attribute Names */\n\tvar ATTR_CREATE_NEW = 'data-new-instance';\n\tvar ATTR_CLOSE = 'data-close-modal';\n\tvar ATTR_NAME = 'data-modal';\n\t\n\t/* Class names */\n\tvar CLS_CONTAINER_CURRENT = 'front';\n\tvar CLS_OPEN = 'open';\n\tvar CLS_CURRENT = 'current';\n\tvar CLS_PART_OF_STACK = 'part-of-stack';\n\tvar CLS_MODAL_CONTAINER = 'modal-container';\n\tvar CLS_ANIM_END = 'modal-anim-end';\n\tvar CLS_LOADER_CONTAINER = 'loader-container';\n\tvar CLS_LOADER = 'loader';\n\tvar CLS_BACKDROP = 'backdrop';\n\t\n\t/* Events */\n\t\n\t/**\n\t * Event triggered when modal is closed\n\t * @type {string}\n\t */\n\tvar EVENT_MODAL_CLOSED = exports.EVENT_MODAL_CLOSED = 'flexcss.modal.closed';\n\t/**\n\t * Event triggered before a modal is closed, cancelable\n\t * @type {string}\n\t */\n\tvar EVENT_MODAL_BEFORE_CLOSED = exports.EVENT_MODAL_BEFORE_CLOSED = 'flexcss.modal.beforeClose';\n\t/**\n\t * Event triggered when a modal is opened\n\t * @type {string}\n\t */\n\tvar EVENT_MODAL_OPENED = exports.EVENT_MODAL_OPENED = 'flexcss.modal.opened';\n\t\n\t/**\n\t * Event triggered when modal is initilized, called on target\n\t * @type {string}\n\t */\n\tvar EVENT_MODAL_INIT = exports.EVENT_MODAL_INIT = 'flexcss.modal.init';\n\t\n\t/**\n\t * Triggered when the content of an async modal on a target is loaded, called on target\n\t * @type {string}\n\t */\n\tvar EVENT_MODAL_ASYNC_TARGET_LOADED = exports.EVENT_MODAL_ASYNC_TARGET_LOADED = 'flexcss.modal.asyncTargetLoaded';\n\t\n\t/**\n\t * A Modal Implementation\n\t */\n\t\n\tvar Modal = function () {\n\t    function Modal(DelegateContainer, options) {\n\t        _classCallCheck(this, Modal);\n\t\n\t        var doc = global.document;\n\t        var container = DelegateContainer instanceof HTMLElement ? DelegateContainer : doc.getElementById(DelegateContainer);\n\t\n\t        // Instance vars:\n\t        if (!container) {\n\t            throw new Error('Could not found container element by given ID/Element: ' + DelegateContainer);\n\t        }\n\t\n\t        this.currentOpen = null;\n\t\n\t        this.loading = false;\n\t\n\t        this.container = container;\n\t\n\t        /**\n\t         * Default Options\n\t         */\n\t        this.options = {\n\t            classNames: 'modal',\n\t            closeOnEscape: true,\n\t            closeOnBackgroundClick: true,\n\t            destroyOnFinish: false,\n\t            fixedContainer: true,\n\t            containerClassNames: ''\n\t        };\n\t\n\t        Object.assign(this.options, options);\n\t\n\t        // Container where events are delegated\n\t        this.eventContainer = null;\n\t        this.eventFunction = null;\n\t\n\t        this.dataMainPageContainer = global.document.body;\n\t\n\t        this.currentScrollTop = 0;\n\t\n\t        this.modalContainer = null;\n\t\n\t        // Destroy full modal instance when no dialogs are bind to?\n\t        // Otherwise container is recycled\n\t        this.destroyOnFinish = this.options.destroyOnFinish;\n\t    }\n\t\n\t    /**\n\t     * Removes this modal from global stack\n\t     * Will handle fixing main html element too\n\t     * @private\n\t     * @param n\n\t     */\n\t\n\t\n\t    _createClass(Modal, [{\n\t        key: '_removeModalFromStack',\n\t        value: function _removeModalFromStack(n) {\n\t            var t = Modal._modalInstances.indexOf(n);\n\t            if (t > -1) {\n\t                Modal._modalInstances.splice(t, 1);\n\t                _FixedWindow2.default.getInstance().close();\n\t            }\n\t        }\n\t\n\t        /**\n\t         * Modal container that contains all `stacked` modals for this instance\n\t         * @returns {HTMLElement}\n\t         */\n\t\n\t    }, {\n\t        key: 'getModalContainer',\n\t        value: function getModalContainer() {\n\t            return this.modalContainer;\n\t        }\n\t\n\t        /**\n\t         * Closes the current open modal of this stack\n\t         * @params [e], optional event\n\t         * @returns {*}\n\t         */\n\t\n\t    }, {\n\t        key: 'close',\n\t        value: function close(e) {\n\t            var self = this;\n\t\n\t            var options = self.currentOpen ? _Util2.default.applyOptionsFromElement(self.currentOpen, _Util2.default.copy(self.options)) : self.options;\n\t\n\t            // close only on keyboard if instance should\n\t            if (!options.closeOnEscape && e instanceof KeyboardEvent) {\n\t                return false;\n\t            }\n\t\n\t            // close only on background if instance should\n\t            if (!options.closeOnBackgroundClick && e && e.type === _Settings2.default.getTabEvent() && !e.target.hasAttribute(ATTR_CLOSE)) {\n\t                return false;\n\t            }\n\t\n\t            // if an instance is currently loading, prevent from closing\n\t            if (self.loading) {\n\t                return false;\n\t            }\n\t\n\t            if (e) {\n\t                e.preventDefault();\n\t            }\n\t\n\t            if (self.currentOpen) {\n\t                // dispatch beforeClose event, if prevented prevent modal from closing\n\t                var ev = _Event2.default.dispatchAndFire(self.currentOpen, EVENT_MODAL_BEFORE_CLOSED);\n\t                if (ev.defaultPrevented) {\n\t                    return false;\n\t                }\n\t\n\t                this._finishState(self.currentOpen);\n\t                // if there is an previous modal\n\t                if (self.currentOpen.prevModal) {\n\t                    // switch to the next modal\n\t                    return self.switchModals(self.currentOpen.prevModal, self.currentOpen.prevModal.prevModal || null);\n\t                }\n\t\n\t                // finally trigger closed event\n\t                _Event2.default.dispatch(self.currentOpen, EVENT_MODAL_CLOSED).withOriginal(e).fire();\n\t            }\n\t            self._removeModalFromStack(self.currentOpen);\n\t\n\t            // Full stack closed:\n\t            self.currentOpen = null;\n\t            if (self.modalContainer) {\n\t                // setup next open\n\t                var lastContainer = Modal._modalInstances[Modal._modalInstances.length - 1];\n\t                var classList = self.modalContainer.classList;\n\t                classList.remove(CLS_CONTAINER_CURRENT);\n\t                classList.remove(CLS_BACKDROP);\n\t                classList.remove(CLS_OPEN);\n\t                // Remove all current classes from child-nodes\n\t                for (var i = 0; i < self.modalContainer.childNodes.length; i++) {\n\t                    var node = self.modalContainer.childNodes[i];\n\t                    var cl = node.classList;\n\t                    // remove applied styles\n\t                    self._finishState(node);\n\t                    cl.remove(CLS_CURRENT);\n\t                    cl.remove(CLS_PART_OF_STACK);\n\t                }\n\t                if (lastContainer) {\n\t                    lastContainer.parentNode.classList.add(CLS_CONTAINER_CURRENT);\n\t                }\n\t            }\n\t\n\t            if (self.destroyOnFinish) {\n\t                self.destroy();\n\t            }\n\t            return self;\n\t        }\n\t\n\t        /**\n\t         * Resets a target when newly initilizes\n\t         * @param target\n\t         * @private\n\t         */\n\t\n\t    }, {\n\t        key: '_finishState',\n\t        value: function _finishState(target) {\n\t            target.classList.remove(CLS_ANIM_END);\n\t        }\n\t\n\t        /**\n\t         * Handler called when a Modal has finished an animation\n\t         * @param e\n\t         * @param self\n\t         * @private\n\t         */\n\t\n\t    }, {\n\t        key: '_finishAnim',\n\t        value: function _finishAnim(e, self) {\n\t            e.target.classList.add(CLS_ANIM_END);\n\t            e.target.removeEventListener(e.type, self, true);\n\t        }\n\t\n\t        /**\n\t         * Brings the given modal to front\n\t         * @param co\n\t         * @param last\n\t         */\n\t\n\t    }, {\n\t        key: 'switchModals',\n\t        value: function switchModals(co, last) {\n\t            co.prevModal = last;\n\t            Modal._modalInstances.push(co);\n\t            _FixedWindow2.default.getInstance().open(this, this.modalContainer);\n\t            if (last) {\n\t                this._finishState(last);\n\t                _Util2.default.prefixedAnimateEvent(last, 'AnimationEnd', this._finishAnim);\n\t                last.classList.add(CLS_PART_OF_STACK);\n\t            }\n\t            // set new currentOpen\n\t            this.currentOpen = co;\n\t\n\t            // bring current container to the front\n\t            var instances = Modal._modalInstances;\n\t\n\t            for (var m = 0; m < instances.length; m++) {\n\t                instances[m].parentNode.classList.remove(CLS_CONTAINER_CURRENT);\n\t            }\n\t            this.modalContainer.classList.add(CLS_CONTAINER_CURRENT);\n\t            // remove animations if animations has been completed, fixes various bugs:\n\t            // - fixes nested scrolling element issue in iOS Browsers / Mobile-Safari\n\t            _Util2.default.prefixedAnimateEvent(co, 'AnimationEnd', this._finishAnim);\n\t\n\t            for (var i = 0; i < this.modalContainer.childNodes.length; i++) {\n\t                var n = this.modalContainer.childNodes[i];\n\t                var isCurrent = n.classList.contains(CLS_CURRENT);\n\t                if (n === co) {\n\t                    co.classList.add(CLS_CURRENT);\n\t                    co.classList.remove(CLS_PART_OF_STACK);\n\t                    this._finishState(co);\n\t                } else {\n\t                    n.classList.remove(CLS_CURRENT);\n\t                    if (isCurrent) {\n\t                        this._removeModalFromStack(n);\n\t                        _Event2.default.dispatchAndFire(n, EVENT_MODAL_CLOSED);\n\t                    }\n\t                }\n\t            }\n\t        }\n\t\n\t        /**\n\t         * Creates a Modal and opens it (later)\n\t         * @param e\n\t         * @returns {Promise|boolean}\n\t         */\n\t\n\t    }, {\n\t        key: 'createWidget',\n\t        value: function createWidget(e) {\n\t            var _this = this;\n\t\n\t            var self = this;\n\t            if (this.loading) {\n\t                return false;\n\t            }\n\t\n\t            // check if another modal has registered events on this dom path:\n\t            if (e && e.target) {\n\t                var foundInstance = _Util2.default.parentsUntil(e.target, function (node) {\n\t                    return node && node.flexModalInstance;\n\t                });\n\t\n\t                // if another instance has been found, abort\n\t                if (foundInstance !== this.container) {\n\t                    return false;\n\t                }\n\t            }\n\t            var targetContent = void 0;\n\t            var future = void 0;\n\t            var widget = void 0;\n\t            var target = void 0;\n\t            var hasTarget = true;\n\t            var isHtmlElement = e instanceof HTMLElement;\n\t            var isWidget = _Widget2.default.isWidget(e);\n\t            if (isHtmlElement || isWidget) {\n\t                if (isHtmlElement) {\n\t                    targetContent = e;\n\t                } else {\n\t                    widget = e;\n\t                    targetContent = widget.element;\n\t                }\n\t            } else {\n\t                target = e.target;\n\t                if (!target) {\n\t                    throw new Error('Could not find target, did you pass an event, a HTMLElement or an Widget?');\n\t                }\n\t                hasTarget = target.hasAttribute(ATTR_NAME);\n\t                targetContent = target.getAttribute(ATTR_NAME);\n\t                widget = _Widget2.default.findWidget(target);\n\t                if (target.hasAttribute(ATTR_CREATE_NEW) && !e.newInstance) {\n\t                    var newInstance = new Modal(this.container).setDestroyOnFinish(true);\n\t                    e.newInstance = true;\n\t                    newInstance.fromEvent(e).then(function () {\n\t                        newInstance.registerEvents(newInstance.getModalContainer());\n\t                    });\n\t                    return false;\n\t                }\n\t                if (hasTarget) {\n\t                    e.stopImmediatePropagation();\n\t                    e.preventDefault();\n\t                }\n\t            }\n\t\n\t            if (!hasTarget) {\n\t                return false;\n\t            }\n\t\n\t            var modalContainerClasses = this.modalContainer ? this.modalContainer.classList : [];\n\t\n\t            // lazy create modal container\n\t            if (!this.modalContainer) {\n\t                this.modalContainer = global.document.createElement('div');\n\t                this.modalContainer.className = CLS_MODAL_CONTAINER + ' ' + this.options.containerClassNames + ' ' + CLS_OPEN;\n\t                var closeModalFunction = function closeModalFunction(ce) {\n\t                    if (_this.loading) {\n\t                        return false;\n\t                    }\n\t                    if (_Util2.default.isPartOfNode(ce.target, _this.currentOpen)) {\n\t                        if (!ce.target.hasAttribute(ATTR_CLOSE)) {\n\t                            return false;\n\t                        }\n\t                    }\n\t                    _this.close(ce);\n\t                };\n\t\n\t                this.modalContainer.addEventListener(_Settings2.default.getTabEvent(), closeModalFunction, false);\n\t\n\t                modalContainerClasses = this.modalContainer.classList;\n\t                this.container.appendChild(this.modalContainer);\n\t            } else {\n\t                modalContainerClasses.add(CLS_OPEN);\n\t            }\n\t\n\t            var loader = void 0;\n\t            var doc = global.document;\n\t            var toggleLoader = function toggleLoader(show) {\n\t                if (show) {\n\t                    loader = doc.createElement('div');\n\t                    loader.className = CLS_LOADER_CONTAINER;\n\t                    var loaderLoader = doc.createElement('div');\n\t                    loaderLoader.className = CLS_LOADER;\n\t                    loader.appendChild(loaderLoader);\n\t                    _this.modalContainer.appendChild(loader);\n\t                } else {\n\t                    loader.parentNode.removeChild(loader);\n\t                }\n\t            };\n\t            modalContainerClasses.add('loading');\n\t            modalContainerClasses.add(CLS_CONTAINER_CURRENT);\n\t\n\t            requestAnimationFrame(function () {\n\t                requestAnimationFrame(function () {\n\t                    modalContainerClasses.add(CLS_BACKDROP);\n\t                });\n\t            });\n\t\n\t            this.loading = true;\n\t            toggleLoader(true);\n\t            var async = widget ? widget.getAsync() : null;\n\t            if (_Widget2.default.isWidget(widget) && async) {\n\t                future = async.then(function (r) {\n\t                    var result = void 0;\n\t                    if (r instanceof HTMLElement || r instanceof DocumentFragment) {\n\t                        result = r;\n\t                    } else {\n\t                        // Create container Element:\n\t                        var element = doc.createElement('div');\n\t                        element.className = self.options.classNames;\n\t                        element.innerHTML = r;\n\t                        element.id = _Util2.default.guid();\n\t                        result = element;\n\t                    }\n\t                    widget.finalContent = result;\n\t                    _Event2.default.dispatchAndFire(target, EVENT_MODAL_ASYNC_TARGET_LOADED);\n\t                    return result;\n\t                });\n\t            } else {\n\t                var el = targetContent instanceof HTMLElement || targetContent instanceof DocumentFragment ? targetContent : doc.getElementById(targetContent);\n\t                if (el) {\n\t                    future = new Promise(function (resolve) {\n\t                        resolve(el);\n\t                    });\n\t                } else {\n\t                    throw new Error('Could not found given modal element (content) with ID: ' + targetContent);\n\t                }\n\t            }\n\t\n\t            _Event2.default.dispatchAndFire(target, EVENT_MODAL_INIT);\n\t\n\t            return future.then(function (thisEl) {\n\t                thisEl.hfWidgetInstance = _this;\n\t                _this.modalContainer.appendChild(thisEl);\n\t                modalContainerClasses.remove('loading');\n\t                _this.loading = false;\n\t                toggleLoader(false);\n\t                _this.open(thisEl, true, e);\n\t                return thisEl;\n\t            });\n\t        }\n\t\n\t        /**\n\t         * Open's an already rendered modal\n\t         * @param {HTMLElement} modal\n\t         * @param {Boolean} [internal], set to true to prevent container management\n\t         * @param {Boolean} [maybeEvent], optional event-object that triggered open\n\t         */\n\t\n\t    }, {\n\t        key: 'open',\n\t        value: function open(modal, internal, maybeEvent) {\n\t            if (!internal) {\n\t                this.modalContainer.classList.add('open');\n\t            }\n\t            this.switchModals(modal, this.currentOpen);\n\t\n\t            _Event2.default.dispatch(modal, EVENT_MODAL_OPENED).withOriginal(maybeEvent).fire();\n\t        }\n\t    }, {\n\t        key: 'registerEvents',\n\t        value: function registerEvents(delegate) {\n\t            var _this2 = this;\n\t\n\t            var delegateContainer = delegate || this.container;\n\t            // Modals should always be fixed\n\t            _FixedWindow2.default.getInstance().addScreenConstraint(Modal, function () {\n\t                return true;\n\t            });\n\t            // register modal instance so we can detect multiple registrars\n\t            delegateContainer.flexModalInstance = this;\n\t            this.eventFunction = function () {\n\t                for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n\t                    args[_key] = arguments[_key];\n\t                }\n\t\n\t                _this2.createWidget.apply(_this2, args);\n\t            };\n\t            delegateContainer.addEventListener(_Settings2.default.getTabEvent(), this.eventFunction, false);\n\t\n\t            this.eventContainer = delegateContainer;\n\t            return this;\n\t        }\n\t\n\t        /**\n\t         * Creates a new Dialog Instance either directly from HTML Element or a Widget instance\n\t         * @param {HTMLElement|Widget} widget instance or html element\n\t         * @returns {Promise}\n\t         */\n\t\n\t    }, {\n\t        key: 'fromWidget',\n\t        value: function fromWidget(widget) {\n\t            return this.createWidget(widget);\n\t        }\n\t\n\t        /**\n\t         * Creates a Widget from event\n\t         * @param e\n\t         * @returns {Promise}\n\t         */\n\t\n\t    }, {\n\t        key: 'fromEvent',\n\t        value: function fromEvent(e) {\n\t            return this.createWidget(e);\n\t        }\n\t    }, {\n\t        key: 'setDestroyOnFinish',\n\t        value: function setDestroyOnFinish(v) {\n\t            this.destroyOnFinish = v;\n\t            return this;\n\t        }\n\t\n\t        /**\n\t         * Destroy this widget instance, cleans empty DOM nodes\n\t         * Will use fast MutationObserver if available, otherwise falls back to DOMNodeRemoved event\n\t         */\n\t\n\t    }, {\n\t        key: 'destroy',\n\t        value: function destroy() {\n\t            var modalContainer = this.modalContainer;\n\t            var isEmptyContainer = modalContainer.childNodes.length === 0;\n\t            // Remove event listener on destroy, do not remove DOM node\n\t            if (this.eventContainer) {\n\t                this.eventContainer.removeEventListener(_Settings2.default.getTabEvent(), this.eventFunction, true);\n\t            }\n\t\n\t            if (isEmptyContainer) {\n\t                if (modalContainer.parentNode) {\n\t                    modalContainer.parentNode.removeChild(modalContainer);\n\t                }\n\t            }\n\t            if (global.MutationObserver) {\n\t                var observer = new MutationObserver(function (mutations) {\n\t                    mutations.forEach(function () {\n\t                        if (modalContainer.childNodes.length === 0) {\n\t                            modalContainer.parentNode.removeChild(modalContainer);\n\t                            observer.disconnect();\n\t                        }\n\t                    });\n\t                });\n\t                observer.observe(modalContainer, {\n\t                    childList: true\n\t                });\n\t            } else {\n\t                modalContainer.addEventListener('DOMNodeRemoved', function (e) {\n\t                    if (e.target !== modalContainer && modalContainer.childNodes.length - 1 === 0) {\n\t                        modalContainer.parentNode.removeChild(modalContainer);\n\t                    }\n\t                });\n\t            }\n\t        }\n\t    }]);\n\t\n\t    return Modal;\n\t}();\n\t\n\t// Static variable that keeps track of all open modals\n\t\n\t\n\tModal._modalInstances = [];\n\t\n\tif (global.addEventListener) {\n\t    // Global keydown listener for modal\n\t    global.addEventListener('keydown', function (e) {\n\t        if (e.keyCode === KEY_ESC) {\n\t            var lastModal = Modal._modalInstances[Modal._modalInstances.length - 1];\n\t            if (lastModal) {\n\t                _Widget2.default.findWidget(lastModal).close(e);\n\t            }\n\t        }\n\t    });\n\t}\n\t\n\texports.default = Modal;\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 9 */,\n/* 10 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t    value: true\n\t});\n\t\n\texports.default = function (fn, ms) {\n\t    return function () {\n\t        for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n\t            args[_key] = arguments[_key];\n\t        }\n\t\n\t        clearTimeout(fn.timeout);\n\t        fn.timeout = setTimeout(fn.bind.apply(fn, [undefined].concat(args)), ms);\n\t        return fn.timeout;\n\t    };\n\t};\n\n/***/ },\n/* 11 */,\n/* 12 */,\n/* 13 */,\n/* 14 */,\n/* 15 */,\n/* 16 */,\n/* 17 */,\n/* 18 */,\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t    value: true\n\t});\n\t\n\tvar _Modal = __webpack_require__(8);\n\t\n\tvar _Modal2 = _interopRequireDefault(_Modal);\n\t\n\tvar _Settings = __webpack_require__(2);\n\t\n\tvar _Settings2 = _interopRequireDefault(_Settings);\n\t\n\tvar _Widget = __webpack_require__(4);\n\t\n\tvar _Widget2 = _interopRequireDefault(_Widget);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t// default export as component object\n\texports.default = {\n\t    Modal: _Modal2.default,\n\t    Settings: _Settings2.default,\n\t    Widget: _Widget2.default\n\t};\n\n/***/ }\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// js/modal.min.js"," \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\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n \t__webpack_require__.p = \"../\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap c14592c10d64a660ef67","/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2015 David Heidrich, BowlingX <me@bowlingx.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nconst PFX = [\"webkit\", \"moz\", \"MS\", \"o\", \"\"];\n\nconst COL_LEFT_CLASS = 'is-collision-left';\n\nconst COL_RIGHT_CLASS = 'is-collision-right';\n\nconst COL_BOTTOM_CLASS = 'is-collision-bottom';\n\n/**\n * Provides shared DOM-Utility functions\n */\nclass Util {\n\n    /**\n     * Will register the right animation event based on browser\n     * @param element\n     * @param type\n     * @param callback\n     */\n    static prefixedAnimateEvent(element, type, callback) {\n        const thisFunction = function thisFunction(e) {\n            callback.apply(element, [e, thisFunction]);\n        };\n\n        for (let p = 0; p < PFX.length; p++) {\n            let thisType = type;\n            if (!PFX[p]) {\n                thisType = type.toLowerCase();\n            }\n            const name = PFX[p] + thisType;\n            element.addEventListener(name, thisFunction, true);\n        }\n    }\n\n    /**\n     * Get correct transitionend event\n     * @returns {String}\n     * @private\n     */\n    static whichTransitionEndEvent() {\n        const el = document.createElement('fake');\n\n        const transitions = {\n            transition: 'transitionend',\n            OTransition: 'oTransitionEnd',\n            MozTransition: 'transitionend',\n            WebkitTransition: 'webkitTransitionEnd'\n        };\n\n        for (const [key, value] of Object.entries(transitions)) {\n            if (el.style[key] !== undefined) {\n                return value;\n            }\n        }\n    }\n\n    /**\n     * Check if target is part of parent node\n     * @param target\n     * @param parent\n     * @returns {boolean}\n     */\n    static isPartOfNode(target, parent) {\n        if (!target || !parent) {\n            return false;\n        }\n        let now = target;\n        while (now !== parent && now !== null) {\n            if (now === parent) {\n                break;\n            }\n            now = now.parentNode;\n        }\n        return now !== null;\n    }\n\n    /**\n     * Finds the closest element including itself matching a callback\n     * @param {Node} el\n     * @param {Function} callback\n     * @returns {Node|boolean}\n     */\n    static closestCallback(el, callback) {\n        let element = el;\n        while (element !== null) {\n            if (callback(element)) {\n                return element;\n            }\n            element = element.parentNode;\n        }\n        return false;\n    }\n\n    /**\n     * Walks the tree until func returns true for given argument\n     * @param target\n     * @param func\n     * @returns {boolean|HTMLElement}\n     */\n    static parentsUntil(target, func) {\n        if (!target) {\n            return false;\n        }\n        let now = target;\n        while (!func(now) && now !== null) {\n            now = now.parentNode;\n        }\n\n        return now;\n    }\n\n    /**\n     * Generates a unique id\n     * @return {String}\n     */\n    static guid() {\n        function s4() {\n            return Math.floor((1 + Math.random()) * 0x10000)\n                .toString(16)\n                .substring(1);\n        }\n\n        return `${s4() + s4()}-${s4()}-${s4()}-${s4()}-${s4() + s4() + s4()}`;\n    }\n\n    /**\n     * Detects scrollbar width\n     * @see http://stackoverflow.com/questions/986937/how-can-i-get-the-browsers-scrollbar-sizes\n     * @returns {number}\n     */\n    static getScrollBarWidth() {\n        const doc = global.document;\n        const inner = doc.createElement('p');\n\n        inner.style.width = \"100%\";\n        inner.style.height = \"200px\";\n\n        const outer = doc.createElement('div');\n        outer.style.position = \"absolute\";\n        outer.style.top = \"0px\";\n        outer.style.left = \"0px\";\n        outer.style.visibility = \"hidden\";\n        outer.style.width = \"200px\";\n        outer.style.height = \"150px\";\n        outer.style.overflow = \"hidden\";\n        outer.appendChild(inner);\n\n        doc.body.appendChild(outer);\n        const w1 = inner.offsetWidth;\n        outer.style.overflow = 'scroll';\n        let w2 = inner.offsetWidth;\n        if (w1 === w2) {\n            w2 = outer.clientWidth;\n        }\n        doc.body.removeChild(outer);\n\n        return (w1 - w2);\n    }\n\n\n    /**\n     * Run an event once\n     * @param {String} ev\n     * @param {HTMLElement|HTMLDocument} target\n     * @param {Function} func\n     * @param {boolean} [capture]\n     * @return Function created listener\n     */\n    static addEventOnce(ev, target, func, capture) {\n        const thisFunction = function thisFunction(event) {\n            func(event, func);\n            target.removeEventListener(ev, thisFunction, capture);\n        };\n        target.addEventListener(ev, thisFunction, capture);\n        return thisFunction;\n    }\n\n    /**\n     * Checks if an element is visible\n     * @param {HTMLElement} element\n     * @returns bool\n     */\n    static isVisible(element) {\n        return element.offsetWidth > 0 && element.offsetHeight > 0;\n    }\n\n    /**\n     * Creates a camelCaseRepresentation of a dashed string\n     * @param {String} str\n     * @returns String\n     */\n    static dashToCamelCase(str) {\n        return str.replace(/-([a-z])/g, (g) => {\n            return g[1].toUpperCase();\n        });\n    }\n\n    /**\n     * Creates a copy of `input`\n     * @param {*} input\n     * @return *\n     */\n    static copy(input) {\n        return JSON.parse(JSON.stringify(input));\n    }\n\n    /**\n     * Reads options from element (data attributes) and applies to base\n     * @param {HTMLElement} element\n     * @param {Object} base\n     * @return {Object}\n     */\n    static applyOptionsFromElement(element, base) {\n        if (!element) {\n            return base;\n        }\n        const attrs = element.attributes;\n        for (let i = 0; i < attrs.length; i++) {\n            const attr = attrs[i];\n            if (attr) {\n                const s = Util.dashToCamelCase(attr.nodeName.replace('data-', ''));\n                const val = attr.nodeValue;\n                if (base.hasOwnProperty(s)) {\n                    // skip functions\n                    if (typeof base[s] === 'function') {\n                        continue;\n                    }\n                    if (typeof base[s] === 'boolean') {\n                        base[s] = parseInt(val || 1, 10) === 1;\n                    } else {\n                        base[s] = val;\n                    }\n                }\n            }\n        }\n        return base;\n    }\n\n    /**\n     * Will position an element directly at given target\n     * Is aware of a given collision container to detect edges\n     * Will put elementToPosition either to left, center or right edge (prefer right)\n     *  and either to bottom or top (prefers bottom)\n     *\n     * You may overwrite preferred positioned with `centerHorizontal` and `positionTop`\n     *\n     * @param {HTMLElement|ClientRect} target the target container to align to\n     * @param {HTMLElement} elementToPosition the element to position\n     * @param {HTMLElement} collisionContainer the outer container to prevent collisions\n     * @param {boolean} [centerHorizontal] set true to center element, otherwise it's put on the right border by default\n     * @param {boolean} [positionTop] flip top, by default element is positioned to the bottom.\n     * @returns {HTMLElement}\n     */\n    static setupPositionNearby(target, elementToPosition, collisionContainer, centerHorizontal, positionTop) {\n        // determine relative offsets\n        let amountTop = 0;\n        let amountLeft = 0;\n        Util.parentsUntil(target.parentNode, (el) => {\n            if (!(el instanceof HTMLElement)) {\n                return false;\n            }\n            const style = window.getComputedStyle(el);\n            if (Util.isPartOfNode(elementToPosition, el)) {\n                if (style && style.position === 'relative') {\n                    amountTop += el.offsetTop || 0;\n                    amountLeft += el.offsetLeft || 0;\n                }\n                return false;\n            }\n            return true;\n        });\n\n        const targetPosition = target instanceof HTMLElement ? target.getBoundingClientRect() : target;\n        const elementRect = elementToPosition.getBoundingClientRect();\n        const colRect = collisionContainer.getBoundingClientRect();\n        const targetTop = targetPosition.top - amountTop;\n        const targetRight = targetPosition.right;\n        const isCollisionTop = (targetTop - elementRect.height) <= 0;\n        const isCollisionBottom =\n            window.innerHeight < (targetTop + amountTop + targetPosition.height + elementRect.height);\n        const isCollisionLeft = targetRight < elementRect.width;\n        const targetLeft = targetPosition.left;\n        const isCollisionRight = (targetLeft + elementRect.width) > colRect.width;\n        const classList = elementToPosition.classList;\n\n        classList.remove(COL_RIGHT_CLASS);\n        classList.remove(COL_LEFT_CLASS);\n        classList.remove(COL_BOTTOM_CLASS);\n\n        let calcTop;\n        let calcLeft;\n        if (isCollisionLeft && !isCollisionRight) {\n            // put element to left if collision with left\n            calcLeft = `${(targetPosition.left - colRect.left - amountLeft)}px`;\n            classList.add(COL_LEFT_CLASS);\n        } else {\n            // maybe center if no collision with either side\n            const rightPosition = `${(targetRight - elementRect.width - colRect.left - amountLeft)}px`;\n            const leftCentered = ((targetLeft + targetPosition.width / 2) -\n                    (elementRect.width / 2) || 0) - colRect.left;\n            const collisionCentered = (leftCentered + elementRect.width) > colRect.width;\n            if (centerHorizontal && !collisionCentered) {\n                calcLeft = `${leftCentered}px`;\n            } else {\n                classList.add(COL_RIGHT_CLASS);\n                calcLeft = rightPosition;\n            }\n        }\n\n        if (isCollisionBottom || (positionTop && !isCollisionTop)) {\n            // Put Element on top if collision\n            calcTop = `${(targetTop - elementRect.height) - colRect.top}px`;\n            classList.add(COL_BOTTOM_CLASS);\n        } else {\n            calcTop = `${(targetTop + targetPosition.height) - colRect.top}px`;\n        }\n\n        elementToPosition.style.cssText = `top:${calcTop};left:${calcLeft};`;\n\n        return elementToPosition;\n    }\n\n    /**\n     * Brings a given element into viewport\n     * @param {HTMLElement} el\n     * @param {int|function}[optionalOffset]\n     */\n    static scrollToElement(el, optionalOffset) {\n        el.scrollIntoView();\n        let thisOffset = optionalOffset;\n        // optionally use a additional scrollDif\n        if (thisOffset) {\n            if (typeof thisOffset === 'function') {\n                thisOffset = optionalOffset();\n            }\n            const scrolledY = window.pageYOffset;\n            window.scroll(0, scrolledY - thisOffset);\n        }\n    }\n}\n\nexport default Util;\n\n\n\n// WEBPACK FOOTER //\n// ./src/main/util/Util.js","/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2015 David Heidrich, BowlingX <me@bowlingx.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\nimport Util from './Util';\n\n// we attach global settings to global once because settings might be shared a lot of times trough the application\n// Maybe find a better way to handle that scenario\nif (global.document && !global.FLEXCSS_GLOBAL_SETTINGS) {\n    global.FLEXCSS_GLOBAL_SETTINGS = {\n        // defined breakpoint for small devices < n\n        smallBreakpoint: 768,\n        // breakpoint when touchmove should be available\n        touchMoveBreakpointOffCanvas: 768,\n        // nodes that should be updated when no scrollbar is expected\n        scrollbarUpdateNodes: global.document.body !== null ? [global.document.body] : [],\n        // additional Delay until darkener is fully hidden\n        darkenerFadeDelay: 100,\n        // class that is added if canvas has been toggled\n        canvasToggledClass: 'toggled-canvas'\n    };\n\n    global.FLEXCSS_CONST_IS_IOS = null;\n\n    global.FLEXCSS_CONST_IS_TOUCH = null;\n\n    global.FLEXCSS_CONST_IS_SAFARI = null;\n\n    global.FLEXCSS_CONST_IS_IE = null;\n\n    global.FLEXCSS_CONST_TAB_EVENT = 'click';\n\n    global.FLEXCSS_IS_SMALL_SCREEN = false;\n\n    const init = () => {\n        // Measure scrollbar width\n        global.FLEXCSS_CONST_SCROLLBAR_WIDTH = Util.getScrollBarWidth();\n        // detect right transition end event\n        global.FLEXCSS_CONST_TRANSITION_EVENT = Util.whichTransitionEndEvent();\n    };\n\n    if (global.document.readyState !== 'loading') {\n        init();\n    } else {\n        // it's possible that global.document.body is not available if the document is not\n        // loaded completely\n        document.addEventListener('DOMContentLoaded', () => {\n            init();\n        });\n    }\n}\n\n/**\n * Utility class that setups global settings\n */\nclass Settings {\n\n    /**\n     * Setup global settings, overwrite default values\n     * @param {Object} settings\n     */\n    static setup(settings) {\n        Object.assign(global.FLEXCSS_GLOBAL_SETTINGS, settings);\n    }\n\n    /**\n     * Access to global settings\n     * @returns {Object}\n     */\n    static get() {\n        return global.FLEXCSS_GLOBAL_SETTINGS;\n    }\n\n    /**\n     * Detects a IOS Device, caches subsequent calls\n     * @returns {boolean}\n     */\n    static isIosDevice() {\n        if (!global.FLEXCSS_CONST_IS_IOS) {\n            global.FLEXCSS_CONST_IS_IOS = global.navigator.userAgent.match(/(iPad|iPhone|iPod)/i);\n        }\n\n        return global.FLEXCSS_CONST_IS_IOS;\n    }\n\n    /**\n     * Detects a safari browser\n     * @returns {boolean}\n     */\n    static isSafari() {\n        if (!global.FLEXCSS_CONST_IS_SAFARI) {\n            global.FLEXCSS_CONST_IS_SAFARI = !!/^((?!chrome|android).)*safari/i.test(global.navigator.userAgent);\n        }\n        return global.FLEXCSS_CONST_IS_SAFARI;\n    }\n\n    /**\n     * @returns {boolean}\n     */\n    static isSmallScreen() {\n        return window.innerWidth < Settings.get().smallBreakpoint;\n    }\n\n    /**\n     * Detects a touch device, caches subsequent calls\n     * @returns {boolean}\n     */\n    static isTouchDevice() {\n        if (!global.FLEXCSS_CONST_IS_TOUCH) {\n            global.FLEXCSS_CONST_IS_TOUCH = 'ontouchstart' in window || !!(global.navigator.msMaxTouchPoints);\n        }\n        return global.FLEXCSS_CONST_IS_TOUCH;\n    }\n\n    /**\n     * Checks if current browser is Internet Explorer\n     * @returns {boolean|*}\n     */\n    static isIE() {\n        if (!global.FLEXCSS_CONST_IS_IE) {\n            global.FLEXCSS_CONST_IS_IE = \"ActiveXObject\" in window;\n        }\n        return global.FLEXCSS_CONST_IS_IE;\n    }\n\n    /**\n     * @returns {String}\n     */\n    static getTransitionEvent() {\n        return global.FLEXCSS_CONST_TRANSITION_EVENT;\n    }\n\n    /**\n     * @returns {int}\n     */\n    static getScrollbarWidth() {\n        return global.FLEXCSS_CONST_SCROLLBAR_WIDTH;\n    }\n\n    /**\n     * @returns {String}\n     */\n    static getTabEvent() {\n        return global.FLEXCSS_CONST_TAB_EVENT;\n    }\n}\n\nexport default Settings;\n\n\n\n// WEBPACK FOOTER //\n// ./src/main/util/Settings.js","/* global CustomEvent */\n\n/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2015 David Heidrich, BowlingX <me@bowlingx.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n// polyfill for custom events to make thinks work in IE\n// The needed polyfill is so small that I embedded it here\n(function poly() {\n    if (global.document && (!global.CustomEvent || typeof global.CustomEvent !== 'function')) {\n        const CustomEvent = function CustomEvent(event, params) {\n            const thisParams = params || {\n                bubbles: false,\n                cancelable: false,\n                detail: undefined\n            };\n            const evt = document.createEvent(\"CustomEvent\");\n            evt.initCustomEvent(event, thisParams.bubbles,\n                thisParams.cancelable, thisParams.detail);\n            evt.superPreventDefault = evt.preventDefault;\n            evt.preventDefault = () => {\n                // Due a bug in IE11, we need to set defaultPrevented manually\n                Object.defineProperty(evt, \"defaultPrevented\", {\n                    get: () => {\n                        return true;\n                    }\n                });\n                evt.superPreventDefault();\n            };\n            return evt;\n        };\n        CustomEvent.prototype = global.Event.prototype;\n        global.CustomEvent = CustomEvent;\n    }\n}());\n/**\n * Simpler Event dispatching\n */\nclass EventHandler {\n\n    /**\n     * @param {HTMLElement} target\n     * @param {String} name\n     */\n    constructor(target, name) {\n        this.target = target;\n        this.defaultOptions = {\n            bubbles: true,\n            cancelable: true\n        };\n\n        this.name = name;\n    }\n\n    /**\n     * Set more options\n     * @param {Object} options\n     * @returns {EventHandler}\n     */\n    withOptions(options) {\n        Object.assign(this.defaultOptions, (options || {}));\n        return this;\n    }\n\n    /**\n     * Call with the originalEvent\n     * @param {Event} e\n     * @returns {EventHandler}\n     */\n    withOriginal(e) {\n        return this.withDetail({\n            originalEvent: e\n        });\n    }\n\n    /**\n     * Extends the detail part of the event\n     * @param {Object} o\n     * @returns {EventHandler}\n     */\n    withDetail(o) {\n        if (!this.defaultOptions.detail) {\n            this.defaultOptions.detail = {};\n        }\n        Object.assign(this.defaultOptions.detail, o);\n        return this;\n    }\n\n    /**\n     * @returns {CustomEvent}\n     */\n    fire() {\n        const e = new CustomEvent(this.name, this.defaultOptions);\n        if (this.target) {\n            this.target.dispatchEvent(e);\n        }\n        return e;\n    }\n}\n\nclass Event {\n    /**\n     * Prepares to dispatch a custom event (without firing)\n     * @param {HTMLElement} target\n     * @param {String} name\n     * @returns {EventHandler}\n     */\n    static dispatch(target, name) {\n        return new EventHandler(target, name);\n    }\n\n    /**\n     * Dispatches a custom event and fires it directly\n     * @param {HTMLElement} target\n     * @param {String} name\n     * @param {Object} [options]\n     * @returns {CustomEvent}\n     */\n    static dispatchAndFire(target, name, options) {\n        return new EventHandler(target, name).withOptions(options).fire();\n    }\n}\n\nexport default Event;\n\n\n\n// WEBPACK FOOTER //\n// ./src/main/util/Event.js","/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2015 David Heidrich, BowlingX <me@bowlingx.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/*!\n * FlexCss.Widget\n * Licensed under the MIT License (MIT)\n * Copyright (c) 2015 David Heidrich, BowlingX <me@bowlingx.com>\n */\n\n/**\n * A Widget provides async content on a specific target (e.g. a modal link)\n */\nclass Widget {\n\n    /**\n     * Creates a new Widget\n     * @param [element], optional define the content of widget\n     */\n    constructor(element) {\n        /**\n         *\n         * @type {Promise}\n         */\n        this.asyncContent = null;\n\n        /**\n         * @type {boolean}\n         */\n        this._isWidget = true;\n\n        if (element) {\n            /**\n             * @type {HTMLElement}\n             */\n            this.element = element instanceof HTMLElement ? element : global.document.getElementById(element);\n            if (this.element) {\n                this.element.hfWidgetInstance = this;\n                this.setAsync(() => {\n                    return new Promise((s) => {\n                        s(this.element);\n                    });\n                });\n            } else {\n                throw new Error(`Could not found element with ID: ${element}`);\n            }\n        }\n        /**\n         * The final resulted content that a widget did create (e.g. a modal container)\n         * @type {HTMLElement}\n         */\n        this.finalContent = null;\n    }\n\n    /**\n     *\n     * @returns {Promise}\n     */\n    getAsync() {\n        return this.asyncContent();\n    }\n\n    /**\n     * @param {Function.<Promise>} async\n     * @returns {Widget}\n     */\n    setAsync(async) {\n        this.asyncContent = async;\n        return this;\n    }\n\n    /**\n     * @returns {HTMLElement}\n     */\n    getFinalContent() {\n        return this.finalContent;\n    }\n\n    /**\n     * @param {HTMLElement} element\n     * @returns {Widget}\n     */\n    setElement(element) {\n        this.element = element;\n        return this;\n    }\n\n    /**\n     * Destroys the generated content of this widget\n     * @returns {boolean}\n     */\n    destroy() {\n        if (this.finalContent && this.finalContent.parentNode) {\n            this.finalContent.parentNode.removeChild(this.finalContent);\n            return true;\n        }\n\n        delete this.element;\n        delete this.asyncContent;\n        delete this.finalContent;\n\n        return false;\n    }\n\n    /**\n     * Will find a widget on an Element\n     * @param {HTMLElement} element\n     * @returns {Widget|undefined}\n     */\n    static findWidget(element) {\n        return element ? element.hfWidgetInstance : undefined;\n    }\n\n    /**\n     * Checks if a given object is an instance\n     * @param {Object} self\n     * @returns {boolean}\n     */\n    static isWidget(self) {\n        return self instanceof Widget || typeof self === 'object' && self.hasOwnProperty('_isWidget');\n    }\n}\n\nexport default Widget;\n\n\n\n// WEBPACK FOOTER //\n// ./src/main/Widget.js","import Settings from '../util/Settings';\nimport debounce from './debounce';\nimport Event from '../util/Event';\nimport Util from '../util/Util';\n\nconst CLS_FIXED_WINDOW = 'fixed-window-open';\n\nexport const EVENT_BEFORE_FIXED_ADD = 'flexcss.fixedWindow.beforeAdd';\nexport const EVENT_AFTER_FIXED_REMOVE = 'flexcss.fixedWindow.afterRemove';\n\n/**\n * @type {string}\n */\nexport const ALLOW_ELEMENT_OVERFLOW_TOUCH = 'data-overflow';\n\n/**\n * @type {FixedWindow}\n */\nlet fixedWindowInstance;\n\nexport default class FixedWindow {\n\n    constructor() {\n        this.widgets = [];\n        this.currentScrollTop = 0;\n        this.fixedScreenConstraints = [];\n        this.windowWidth = 0;\n        this.isFixedWindowActive = false;\n        this.touchListener = null;\n    }\n\n    /**\n     * Adds a constraint to detect if the window needs to be changed when the screensize changes\n     *\n     * @param {Function} widget\n     * @param {Function} fixedBreakpointFn gets a width argument, return true to open a window\n     */\n    addScreenConstraint(widget, fixedBreakpointFn) {\n        this.fixedScreenConstraints[widget] = fixedBreakpointFn;\n    }\n\n    /**\n     * @returns {null|DestroyableWidget}\n     */\n    getCurrentWidget() {\n        return this.widgets.length > 0 ? this.widgets[this.widgets.length - 1] : null;\n    }\n\n    getLastFixedWidget() {\n        let length = this.widgets.length;\n        let widget = null;\n        while (length > 0) {\n            const thisWidget = this.widgets[length - 1];\n            if (thisWidget.fixed) {\n                widget = thisWidget;\n                break;\n            }\n            length--;\n        }\n        return widget;\n    }\n\n    /**\n     * @private\n     */\n    _checkFixedNeeded() {\n        if (this.widgets.length === 0) {\n            return;\n        }\n        const widgets = new Set(this.widgets);\n        const widgetsThatRequireFixedWindow = Array.from(widgets).some(el => {\n            const { widget } = el;\n            const isFixed = this.fixedScreenConstraints[widget] &&\n              this.fixedScreenConstraints[widget](this.windowWidth, this.getCurrentWidget());\n            const index = this.widgets.indexOf(el);\n            this.widgets[index] = Object.assign(el, { fixed: isFixed });\n            return isFixed;\n        });\n        if (!widgetsThatRequireFixedWindow) {\n            this._removeFixedContainer();\n        } else {\n            this._addFixedContainer();\n        }\n    }\n\n    /**\n     * @private\n     */\n    _addFixedContainer() {\n        if (this.isFixedWindowActive) {\n            return;\n        }\n        Event.dispatchAndFire(global.document, EVENT_BEFORE_FIXED_ADD, {\n            detail: this.getCurrentWidget()\n        });\n        // this causes layout and should be optimized\n        // At lest we write in a batch later\n        Settings.get().scrollbarUpdateNodes.map((n) => {\n            let foundProperty = 'paddingRight';\n            let direction = 1;\n            let node = n;\n            if (n instanceof Array) {\n                const [whatNode, property, d] = n;\n                foundProperty = property;\n                node = whatNode;\n                direction = d || 1;\n            }\n            return {\n                node,\n                property: foundProperty,\n                value: `${parseInt(global.getComputedStyle(node)[foundProperty], 10) +\n                (!node.__fixedWindowMod__ ? (Settings.getScrollbarWidth() * direction) : 0)}px`\n            };\n        }).forEach((d) => {\n            d.node.__fixedWindowMod__ = true;\n            d.node.style[d.property] = d.value;\n        });\n\n        this.touchListener = (e) => {\n            e.preventDefault();\n        };\n\n        let shouldNotMoveUp = false;\n        let shouldNotMoveDown = false;\n        let neverScroll = false;\n        let lastClientY = 0;\n        this.touchStartListener = (e) => {\n            let { element } = this.getLastFixedWidget();\n            const closestOverflow = Util.closestCallback(e.target,\n              (el) => el instanceof HTMLTextAreaElement ||\n              (el.hasAttribute && el.hasAttribute(ALLOW_ELEMENT_OVERFLOW_TOUCH)));\n            if (closestOverflow && closestOverflow.scrollHeight !== closestOverflow.offsetHeight) {\n                element = closestOverflow;\n            }\n            if (Util.isPartOfNode(e.target, element)) {\n                neverScroll = element.scrollHeight === element.offsetHeight;\n                lastClientY = e.touches[0].clientY;\n                // never allow scrolling when there is nothing to scroll\n                if (neverScroll) {\n                    return false;\n                }\n                if (element.scrollTop === 0) {\n                    shouldNotMoveUp = true;\n                } else if (element.scrollHeight === element.scrollTop + element.offsetHeight) {\n                    shouldNotMoveDown = true;\n                }\n            }\n        };\n\n        global.addEventListener('touchmove', this.touchListener);\n        global.document.body.addEventListener('touchstart', this.touchStartListener);\n\n        this.touchMoveListener = (e) => {\n            const { element } = this.getLastFixedWidget();\n            if (Util.isPartOfNode(e.target, element)) {\n                const { clientY } = e.touches[0];\n                const isScrollingDown = (lastClientY - clientY) > 0;\n                lastClientY = clientY;\n                if (neverScroll) {\n                    return false;\n                }\n                if ((!shouldNotMoveDown && isScrollingDown) ||\n                    (shouldNotMoveDown && !isScrollingDown) ||\n                    (!shouldNotMoveDown && !shouldNotMoveUp && !isScrollingDown) ||\n                    (shouldNotMoveDown && shouldNotMoveUp && isScrollingDown)\n                ) {\n                    e.stopImmediatePropagation();\n                }\n            }\n        };\n\n        this.touchEndListener = () => {\n            neverScroll = false;\n            shouldNotMoveUp = false;\n            shouldNotMoveDown = false;\n            lastClientY = 0;\n        };\n\n        global.document.body.addEventListener('touchmove', this.touchMoveListener);\n        global.document.body.addEventListener('touchend', this.touchEndListener);\n        global.document.documentElement.classList.add(CLS_FIXED_WINDOW);\n        this.isFixedWindowActive = true;\n    }\n\n    /**\n     * @private\n     */\n    _removeFixedContainer() {\n        if (this.isFixedWindowActive) {\n            // cleanup event listeners\n            global.removeEventListener('touchmove', this.touchListener);\n            global.document.body.removeEventListener('touchstart', this.touchStartListener);\n            global.document.body.removeEventListener('touchmove', this.touchMoveListener);\n            global.document.body.removeEventListener('touchend', this.touchEndListener);\n\n            // reset scrollbar nodes\n            Settings.get().scrollbarUpdateNodes.forEach((node) => {\n                if (node instanceof Array) {\n                    const [whatNode, property] = node;\n                    delete whatNode.__fixedWindowMod__;\n                    whatNode.style[property] = '';\n                } else {\n                    delete node.__fixedWindowMod__;\n                    node.style.paddingRight = '';\n                }\n            });\n            global.document.documentElement.classList.remove(CLS_FIXED_WINDOW);\n            Event.dispatchAndFire(global.document, EVENT_AFTER_FIXED_REMOVE);\n            this.isFixedWindowActive = false;\n        }\n    }\n\n    /**\n     * Will close a window when no widgets are opened that need one\n     */\n    resizeListener() {\n        this.windowWidth = global.innerWidth;\n        this._checkFixedNeeded();\n    }\n\n    /**\n     * @returns {FixedWindow}\n     */\n    static getInstance() {\n        if (!fixedWindowInstance) {\n            fixedWindowInstance = new FixedWindow();\n            fixedWindowInstance.windowWidth = global.innerWidth;\n            const eventHandler = fixedWindowInstance.resizeListener.bind(fixedWindowInstance);\n            global.addEventListener(\n                'resize',\n                debounce(eventHandler, 500)\n            );\n            global.addEventListener('orientationchange', eventHandler);\n        }\n        return fixedWindowInstance;\n    }\n\n    /**\n     * Request a close of the fixed window\n     */\n    close() {\n        this.widgets.pop();\n        this._checkFixedNeeded();\n        if (this.widgets.length === 0) {\n            this._removeFixedContainer();\n        }\n    }\n\n    /**\n     * Request to open a fixed windows\n     * @param {Object|DestroyableWidget} instance\n     * @param {HTMLElement} element\n     */\n    open(instance, element) {\n        let fixed = false;\n        if (typeof instance === 'object') {\n            const widget = instance.constructor;\n            const fixedWidget = this.fixedScreenConstraints[instance.constructor];\n            if (widget && fixedWidget) {\n                fixed = fixedWidget(this.windowWidth, instance);\n            }\n            this.widgets.push(\n                {\n                    widget,\n                    element,\n                    fixed\n                }\n            );\n            // open a new window if there is no window active\n            if (!this.isFixedWindowActive && fixed) {\n                this._addFixedContainer();\n            }\n        }\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/main/lib/FixedWindow.js","/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2015 David Heidrich, BowlingX <me@bowlingx.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/*!\n * FlexCss.Modal\n * Licensed under the MIT License (MIT)\n * Copyright (c) 2015 David Heidrich, BowlingX <me@bowlingx.com>\n */\n\n/* global KeyboardEvent */\n\nimport Settings from './util/Settings';\nimport Event from './util/Event';\nimport Util from './util/Util';\nimport Widget from './Widget';\nimport FixedWindow from './lib/FixedWindow';\nconst KEY_ESC = 27;\n/* Attribute Names */\nconst ATTR_CREATE_NEW = 'data-new-instance';\nconst ATTR_CLOSE = 'data-close-modal';\nconst ATTR_NAME = 'data-modal';\n\n/* Class names */\nconst CLS_CONTAINER_CURRENT = 'front';\nconst CLS_OPEN = 'open';\nconst CLS_CURRENT = 'current';\nconst CLS_PART_OF_STACK = 'part-of-stack';\nconst CLS_MODAL_CONTAINER = 'modal-container';\nconst CLS_ANIM_END = 'modal-anim-end';\nconst CLS_LOADER_CONTAINER = 'loader-container';\nconst CLS_LOADER = 'loader';\nconst CLS_BACKDROP = 'backdrop';\n\n/* Events */\n\n/**\n * Event triggered when modal is closed\n * @type {string}\n */\nexport const EVENT_MODAL_CLOSED = 'flexcss.modal.closed';\n/**\n * Event triggered before a modal is closed, cancelable\n * @type {string}\n */\nexport const EVENT_MODAL_BEFORE_CLOSED = 'flexcss.modal.beforeClose';\n/**\n * Event triggered when a modal is opened\n * @type {string}\n */\nexport const EVENT_MODAL_OPENED = 'flexcss.modal.opened';\n\n/**\n * Event triggered when modal is initilized, called on target\n * @type {string}\n */\nexport const EVENT_MODAL_INIT = 'flexcss.modal.init';\n\n/**\n * Triggered when the content of an async modal on a target is loaded, called on target\n * @type {string}\n */\nexport const EVENT_MODAL_ASYNC_TARGET_LOADED = 'flexcss.modal.asyncTargetLoaded';\n\n/**\n * A Modal Implementation\n */\nclass Modal {\n    constructor(DelegateContainer, options) {\n        const doc = global.document;\n        const container = DelegateContainer instanceof HTMLElement ?\n            DelegateContainer : doc.getElementById(DelegateContainer);\n\n        // Instance vars:\n        if (!container) {\n            throw new Error(`Could not found container element by given ID/Element: ${DelegateContainer}`);\n        }\n\n        this.currentOpen = null;\n\n        this.loading = false;\n\n        this.container = container;\n\n        /**\n         * Default Options\n         */\n        this.options = {\n            classNames: 'modal',\n            closeOnEscape: true,\n            closeOnBackgroundClick: true,\n            destroyOnFinish: false,\n            fixedContainer: true,\n            containerClassNames: ''\n        };\n\n        Object.assign(this.options, options);\n\n        // Container where events are delegated\n        this.eventContainer = null;\n        this.eventFunction = null;\n\n        this.dataMainPageContainer = global.document.body;\n\n        this.currentScrollTop = 0;\n\n        this.modalContainer = null;\n\n        // Destroy full modal instance when no dialogs are bind to?\n        // Otherwise container is recycled\n        this.destroyOnFinish = this.options.destroyOnFinish;\n    }\n\n    /**\n     * Removes this modal from global stack\n     * Will handle fixing main html element too\n     * @private\n     * @param n\n     */\n    _removeModalFromStack(n) {\n        const t = Modal._modalInstances.indexOf(n);\n        if (t > -1) {\n            Modal._modalInstances.splice(t, 1);\n            FixedWindow.getInstance().close();\n        }\n    }\n\n\n    /**\n     * Modal container that contains all `stacked` modals for this instance\n     * @returns {HTMLElement}\n     */\n    getModalContainer() {\n        return this.modalContainer;\n    }\n\n    /**\n     * Closes the current open modal of this stack\n     * @params [e], optional event\n     * @returns {*}\n     */\n    close(e) {\n        const self = this;\n\n        const options = self.currentOpen ? Util.applyOptionsFromElement(\n            self.currentOpen, Util.copy(self.options)) : self.options;\n\n        // close only on keyboard if instance should\n        if (!options.closeOnEscape && e instanceof KeyboardEvent) {\n            return false;\n        }\n\n        // close only on background if instance should\n        if (!options.closeOnBackgroundClick && e &&\n            e.type === Settings.getTabEvent() && !e.target.hasAttribute(ATTR_CLOSE)) {\n            return false;\n        }\n\n        // if an instance is currently loading, prevent from closing\n        if (self.loading) {\n            return false;\n        }\n\n        if (e) {\n            e.preventDefault();\n        }\n\n        if (self.currentOpen) {\n            // dispatch beforeClose event, if prevented prevent modal from closing\n            const ev = Event.dispatchAndFire(self.currentOpen, EVENT_MODAL_BEFORE_CLOSED);\n            if (ev.defaultPrevented) {\n                return false;\n            }\n\n            this._finishState(self.currentOpen);\n            // if there is an previous modal\n            if (self.currentOpen.prevModal) {\n                // switch to the next modal\n                return self.switchModals(self.currentOpen.prevModal,\n                    self.currentOpen.prevModal.prevModal || null);\n            }\n\n            // finally trigger closed event\n            Event.dispatch(self.currentOpen, EVENT_MODAL_CLOSED).withOriginal(e).fire();\n        }\n        self._removeModalFromStack(self.currentOpen);\n\n        // Full stack closed:\n        self.currentOpen = null;\n        if (self.modalContainer) {\n            // setup next open\n            const lastContainer = Modal._modalInstances[Modal._modalInstances.length - 1];\n            const classList = self.modalContainer.classList;\n            classList.remove(CLS_CONTAINER_CURRENT);\n            classList.remove(CLS_BACKDROP);\n            classList.remove(CLS_OPEN);\n            // Remove all current classes from child-nodes\n            for (let i = 0; i < self.modalContainer.childNodes.length; i++) {\n                const node = self.modalContainer.childNodes[i];\n                const cl = node.classList;\n                // remove applied styles\n                self._finishState(node);\n                cl.remove(CLS_CURRENT);\n                cl.remove(CLS_PART_OF_STACK);\n            }\n            if (lastContainer) {\n                lastContainer.parentNode.classList.add(CLS_CONTAINER_CURRENT);\n            }\n        }\n\n        if (self.destroyOnFinish) {\n            self.destroy();\n        }\n        return self;\n    }\n\n    /**\n     * Resets a target when newly initilizes\n     * @param target\n     * @private\n     */\n    _finishState(target) {\n        target.classList.remove(CLS_ANIM_END);\n    }\n\n    /**\n     * Handler called when a Modal has finished an animation\n     * @param e\n     * @param self\n     * @private\n     */\n    _finishAnim(e, self) {\n        e.target.classList.add(CLS_ANIM_END);\n        e.target.removeEventListener(e.type, self, true);\n    }\n\n    /**\n     * Brings the given modal to front\n     * @param co\n     * @param last\n     */\n    switchModals(co, last) {\n        co.prevModal = last;\n        Modal._modalInstances.push(co);\n        FixedWindow.getInstance().open(this, this.modalContainer);\n        if (last) {\n            this._finishState(last);\n            Util.prefixedAnimateEvent(last, 'AnimationEnd', this._finishAnim);\n            last.classList.add(CLS_PART_OF_STACK);\n        }\n        // set new currentOpen\n        this.currentOpen = co;\n\n        // bring current container to the front\n        const instances = Modal._modalInstances;\n\n        for (let m = 0; m < instances.length; m++) {\n            instances[m].parentNode.classList.remove(CLS_CONTAINER_CURRENT);\n        }\n        this.modalContainer.classList.add(CLS_CONTAINER_CURRENT);\n        // remove animations if animations has been completed, fixes various bugs:\n        // - fixes nested scrolling element issue in iOS Browsers / Mobile-Safari\n        Util.prefixedAnimateEvent(co, 'AnimationEnd', this._finishAnim);\n\n        for (let i = 0; i < this.modalContainer.childNodes.length; i++) {\n            const n = this.modalContainer.childNodes[i];\n            const isCurrent = n.classList.contains(CLS_CURRENT);\n            if (n === co) {\n                co.classList.add(CLS_CURRENT);\n                co.classList.remove(CLS_PART_OF_STACK);\n                this._finishState(co);\n            } else {\n                n.classList.remove(CLS_CURRENT);\n                if (isCurrent) {\n                    this._removeModalFromStack(n);\n                    Event.dispatchAndFire(n, EVENT_MODAL_CLOSED);\n                }\n            }\n        }\n    }\n\n    /**\n     * Creates a Modal and opens it (later)\n     * @param e\n     * @returns {Promise|boolean}\n     */\n    createWidget(e) {\n        const self = this;\n        if (this.loading) {\n            return false;\n        }\n\n        // check if another modal has registered events on this dom path:\n        if (e && e.target) {\n            const foundInstance = Util.parentsUntil(e.target, (node) => {\n                return node && node.flexModalInstance;\n            });\n\n            // if another instance has been found, abort\n            if (foundInstance !== this.container) {\n                return false;\n            }\n        }\n        let targetContent;\n        let future;\n        let widget;\n        let target;\n        let hasTarget = true;\n        const isHtmlElement = e instanceof HTMLElement;\n        const isWidget = Widget.isWidget(e);\n        if (isHtmlElement || isWidget) {\n            if (isHtmlElement) {\n                targetContent = e;\n            } else {\n                widget = e;\n                targetContent = widget.element;\n            }\n        } else {\n            target = e.target;\n            if (!target) {\n                throw new Error('Could not find target, did you pass an event, a HTMLElement or an Widget?');\n            }\n            hasTarget = target.hasAttribute(ATTR_NAME);\n            targetContent = target.getAttribute(ATTR_NAME);\n            widget = Widget.findWidget(target);\n            if (target.hasAttribute(ATTR_CREATE_NEW) && !e.newInstance) {\n                const newInstance = new Modal(this.container)\n                    .setDestroyOnFinish(true);\n                e.newInstance = true;\n                newInstance.fromEvent(e).then(() => {\n                    newInstance.registerEvents(newInstance.getModalContainer());\n                });\n                return false;\n            }\n            if (hasTarget) {\n                e.stopImmediatePropagation();\n                e.preventDefault();\n            }\n        }\n\n        if (!hasTarget) {\n            return false;\n        }\n\n        let modalContainerClasses = this.modalContainer ? this.modalContainer.classList : [];\n\n        // lazy create modal container\n        if (!this.modalContainer) {\n            this.modalContainer = global.document.createElement('div');\n            this.modalContainer.className = `${CLS_MODAL_CONTAINER} ${this.options.containerClassNames} ${CLS_OPEN}`;\n            const closeModalFunction = (ce) => {\n                if (this.loading) {\n                    return false;\n                }\n                if (Util.isPartOfNode(ce.target, this.currentOpen)) {\n                    if (!ce.target.hasAttribute(ATTR_CLOSE)) {\n                        return false;\n                    }\n                }\n                this.close(ce);\n            };\n\n            this.modalContainer.addEventListener(Settings.getTabEvent(), closeModalFunction, false);\n\n            modalContainerClasses = this.modalContainer.classList;\n            this.container.appendChild(this.modalContainer);\n        } else {\n            modalContainerClasses.add(CLS_OPEN);\n        }\n\n        let loader;\n        const doc = global.document;\n        const toggleLoader = (show) => {\n            if (show) {\n                loader = doc.createElement('div');\n                loader.className = CLS_LOADER_CONTAINER;\n                const loaderLoader = doc.createElement('div');\n                loaderLoader.className = CLS_LOADER;\n                loader.appendChild(loaderLoader);\n                this.modalContainer.appendChild(loader);\n            } else {\n                loader.parentNode.removeChild(loader);\n            }\n        };\n        modalContainerClasses.add('loading');\n        modalContainerClasses.add(CLS_CONTAINER_CURRENT);\n\n        requestAnimationFrame(() => {\n            requestAnimationFrame(() => {\n                modalContainerClasses.add(CLS_BACKDROP);\n            });\n        });\n\n        this.loading = true;\n        toggleLoader(true);\n        const async = widget ? widget.getAsync() : null;\n        if (Widget.isWidget(widget) && async) {\n            future = async.then((r) => {\n                let result;\n                if (r instanceof HTMLElement || r instanceof DocumentFragment) {\n                    result = r;\n                } else {\n                    // Create container Element:\n                    const element = doc.createElement('div');\n                    element.className = self.options.classNames;\n                    element.innerHTML = r;\n                    element.id = Util.guid();\n                    result = element;\n                }\n                widget.finalContent = result;\n                Event.dispatchAndFire(target, EVENT_MODAL_ASYNC_TARGET_LOADED);\n                return result;\n            });\n        } else {\n            const el = targetContent instanceof HTMLElement ||\n            targetContent instanceof DocumentFragment ? targetContent : doc.getElementById(targetContent);\n            if (el) {\n                future = new Promise((resolve) => {\n                    resolve(el);\n                });\n            } else {\n                throw new Error(`Could not found given modal element (content) with ID: ${targetContent}`);\n            }\n        }\n\n        Event.dispatchAndFire(target, EVENT_MODAL_INIT);\n\n        return future.then((thisEl) => {\n            thisEl.hfWidgetInstance = this;\n            this.modalContainer.appendChild(thisEl);\n            modalContainerClasses.remove('loading');\n            this.loading = false;\n            toggleLoader(false);\n            this.open(thisEl, true, e);\n            return thisEl;\n        });\n    }\n\n    /**\n     * Open's an already rendered modal\n     * @param {HTMLElement} modal\n     * @param {Boolean} [internal], set to true to prevent container management\n     * @param {Boolean} [maybeEvent], optional event-object that triggered open\n     */\n    open(modal, internal, maybeEvent) {\n        if (!internal) {\n            this.modalContainer.classList.add('open');\n        }\n        this.switchModals(modal, this.currentOpen);\n\n        Event.dispatch(modal, EVENT_MODAL_OPENED).withOriginal(maybeEvent).fire();\n    }\n\n\n    registerEvents(delegate) {\n        const delegateContainer = delegate || this.container;\n        // Modals should always be fixed\n        FixedWindow.getInstance().addScreenConstraint(Modal, () => true);\n        // register modal instance so we can detect multiple registrars\n        delegateContainer.flexModalInstance = this;\n        this.eventFunction = (...args) => {\n            this.createWidget.apply(this, args);\n        };\n        delegateContainer.addEventListener(Settings.getTabEvent(), this.eventFunction, false);\n\n        this.eventContainer = delegateContainer;\n        return this;\n    }\n\n\n    /**\n     * Creates a new Dialog Instance either directly from HTML Element or a Widget instance\n     * @param {HTMLElement|Widget} widget instance or html element\n     * @returns {Promise}\n     */\n    fromWidget(widget) {\n        return this.createWidget(widget);\n    }\n\n    /**\n     * Creates a Widget from event\n     * @param e\n     * @returns {Promise}\n     */\n    fromEvent(e) {\n        return this.createWidget(e);\n    }\n\n    setDestroyOnFinish(v) {\n        this.destroyOnFinish = v;\n        return this;\n    }\n\n    /**\n     * Destroy this widget instance, cleans empty DOM nodes\n     * Will use fast MutationObserver if available, otherwise falls back to DOMNodeRemoved event\n     */\n    destroy() {\n        const modalContainer = this.modalContainer;\n        const isEmptyContainer = modalContainer.childNodes.length === 0;\n        // Remove event listener on destroy, do not remove DOM node\n        if (this.eventContainer) {\n            this.eventContainer.removeEventListener(Settings.getTabEvent(), this.eventFunction, true);\n        }\n\n        if (isEmptyContainer) {\n            if (modalContainer.parentNode) {\n                modalContainer.parentNode.removeChild(modalContainer);\n            }\n        }\n        if (global.MutationObserver) {\n            const observer = new MutationObserver((mutations) => {\n                mutations.forEach(() => {\n                    if (modalContainer.childNodes.length === 0) {\n                        modalContainer.parentNode.removeChild(modalContainer);\n                        observer.disconnect();\n                    }\n                });\n            });\n            observer.observe(modalContainer,\n                {\n                    childList: true\n                }\n            );\n        } else {\n            modalContainer.addEventListener('DOMNodeRemoved', (e) => {\n                if (e.target !== modalContainer && (modalContainer.childNodes.length - 1) === 0) {\n                    modalContainer.parentNode.removeChild(modalContainer);\n                }\n            });\n        }\n    }\n}\n\n\n// Static variable that keeps track of all open modals\nModal._modalInstances = [];\n\nif (global.addEventListener) {\n// Global keydown listener for modal\n    global.addEventListener('keydown', (e) => {\n        if (e.keyCode === KEY_ESC) {\n            const lastModal = Modal._modalInstances[Modal._modalInstances.length - 1];\n            if (lastModal) {\n                Widget.findWidget(lastModal).close(e);\n            }\n        }\n    });\n}\n\nexport default Modal;\n\n\n\n// WEBPACK FOOTER //\n// ./src/main/Modal.js","export default (fn, ms) => (...args) => {\n    clearTimeout(fn.timeout);\n    fn.timeout = setTimeout(fn.bind(this, ...args), ms);\n    return fn.timeout;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/main/lib/debounce.js","import Modal from '../Modal';\nimport Settings from '../util/Settings';\nimport Widget from '../Widget';\n\n// default export as component object\nexport default {\n    Modal,\n    Settings,\n    Widget\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/main/modules/Modal.js"],"sourceRoot":""}