{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///ionic.material.min.js","webpack:///webpack/bootstrap aca4d68e3e47af1bef6a","webpack:///./src/js/ionic-material.js","webpack:///external \"angular\"","webpack:///./src/js/lib/_ink.js","webpack:///./src/js/lib/_motion.js"],"names":["root","factory","exports","module","require","e","define","amd","this","__WEBPACK_EXTERNAL_MODULE_1__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","angular","err","version","window","Error","app","code","angularApp","ink","isWindow","obj","getWindow","elem","nodeType","defaultView","offset","docElem","win","box","top","left","doc","ownerDocument","documentElement","getBoundingClientRect","pageYOffset","clientTop","pageXOffset","clientLeft","hexToRgb","hex","result","exec","r","parseInt","g","b","convertStyle","style","a","hasOwnProperty","$$","Ink","document","querySelectorAll","bind","element","slicePolyfill","arr","start","end","len","length","Math","max","min","push","bindPolyfill","fn","context","args","argsArr","arguments","apply","concat","Effect","duration","show","button","el","ripple","createElement","customColor","dataset","inkColor","customOpacity","inkOpacity","hasCustomRipple","className","appendChild","pos","relativeY","pageY","relativeX","pageX","scale","clientWidth","touches","setAttribute","Date","now","rippleStyle","colorRgb","fromHex","bg","replace","transform","opacity","hide","childrenLength","children","indexOf","getAttribute","diff","Number","delay","setTimeout","-webkit-transition-duration","-moz-transition-duration","-o-transition-duration","transition-duration","-webkit-transform","-moz-transform","-ms-transform","-o-transform","removeChild","wrapInput","elements","tagName","toLowerCase","parent","parentNode","wrapper","elementStyle","removeAttribute","replaceChild","displayEffect","options","selectors","Array","prototype","forEach","i","addEventListener","inject","Motion","getViewportHeight","innerHeight","showNotAnimatedElements","total","child","blinds","defaults","finishDelayThrottle","finishSpeedPercent","leftOffsetPercentage","selector","startVelocity","isInvalidSelector","console","log","animateBlindsDom","elementsCount","elementAnimationCount","viewportHeight","offsetTop","speed","childOffset","parseFloat","toFixed","webkitTransitionDelay","transitionDelay","fadeSlideIn","animateFadeSlideInDom","delayValue","fadeSlideInRight","animateSlideInRightDom","animateRippleDom","panInLeft","animatePanInLeftDom","classNameToRemove","indexOfClassNameToRemove","lastIndexOf","substr","pushDown","animatePushDownDom","split","slideUp","animateSlideUpDom","motion","$inject"],"mappings":"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","file":"ionic.material.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory((function webpackLoadOptionalExternalModule() { try { return require(\"angular\"); } catch(e) {} }()));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"angular\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ionicMaterial\"] = factory((function webpackLoadOptionalExternalModule() { try { return require(\"angular\"); } catch(e) {} }()));\n\telse\n\t\troot[\"ionicMaterial\"] = factory(root[\"angular\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory((function webpackLoadOptionalExternalModule() { try { return require(\"angular\"); } catch(e) {} }()));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"angular\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ionicMaterial\"] = factory((function webpackLoadOptionalExternalModule() { try { return require(\"angular\"); } catch(e) {} }()));\n\telse\n\t\troot[\"ionicMaterial\"] = factory(root[\"angular\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {\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\t/**\n\t * Ionic Material\n\t * \"Bundle Index\" / \"Entryfile\"\n\t * https://github.com/zachsoft/ionic-material\n\t *\n\t * Recommended: use a compiled version, especially in production!\n\t */\n\t\n\t'use strict';\n\t\n\tmodule.exports = (function(){\n\t\n\t    var angular;\n\t\n\t    try {\n\t        angular = __webpack_require__(1);\n\t    } catch(err){ }\n\t\n\t    if(!angular || !angular.version){\n\t        /*global window: true*/\n\t        angular = window.angular;\n\t        /*global window: false*/\n\t    }\n\t\n\t    if(!angular || !angular.version){\n\t        throw new Error('ionic-material could not load angular module :(');\n\t    }\n\t\n\t    // set up angular module\n\t    var app = angular.module('ionic-material', ['ionic']);\n\t\n\t    // Import Dependencies\n\t    __webpack_require__(2)(app);\n\t    __webpack_require__(3)(app);\n\t\n\t    return 'ionic-material';\n\t})();\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tif(typeof __WEBPACK_EXTERNAL_MODULE_1__ === 'undefined') {var e = new Error(\"Cannot find module \\\"angular\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e;}\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/*!\n\t * Fork by Zach Fitzgerald and other contributors of Ionic Material\n\t *\n\t * Waves v0.5.4\n\t * http://fian.my.id/Waves\n\t *\n\t * Copyright 2014 Alfiana E. Sibuea and other contributors\n\t *\n\t * Released under the MIT license\n\t * https://github.com/fians/Waves/blob/master/LICENSE\n\t *\n\t */\n\tmodule.exports = function (angularApp) {\n\t\n\t    angularApp.factory('ionicMaterialInk', ink);\n\t\n\t    function ink (){\n\t        /*global document*/\n\t        var Ink = Ink || {};\n\t\n\t            // all DOM nodes\n\t            var $$;\n\t\n\t            // phantomJS throws an error when you try to use document.querySelectorAll.bind\n\t            if(document && document.querySelectorAll && document.querySelectorAll.bind){\n\t                try{\n\t                    // all DOM nodes\n\t                    $$ = document.querySelectorAll.bind(document);\n\t\n\t                } catch(e){}\n\t            } else if (window && window.angular && window.angular.element) {\n\t                // we can use angular.element instead\n\t                $$ = window.angular.element;\n\t            } else {\n\t\n\t\n\t                    /**\n\t                     * mout.js 0.11.0 bind and slice polyfills (substitutes?)\n\t                     * TODO: pull out mout.js bind and slice molyfills and inject into material.ink\n\t                     */\n\t\n\t                    /**\n\t                     * Create slice of source array or array-like object\n\t                     */\n\t                    var slicePolyfill = function moutslicePolyfill(arr, start, end){\n\t                        var len = arr.length;\n\t                        /*jshint eqnull:true */\n\t                        if (start == null) {\n\t                            start = 0;\n\t                        } else if (start < 0) {\n\t                            start = Math.max(len + start, 0);\n\t                        } else {\n\t                            start = Math.min(start, len);\n\t                        }\n\t\n\t\n\t                        if (end == null) {\n\t\n\t                            end = len;\n\t                        } else if (end < 0) {\n\t                            end = Math.max(len + end, 0);\n\t                        } else {\n\t                            end = Math.min(end, len);\n\t                        }\n\t\n\t                        var result = [];\n\t                        while (start < end) {\n\t                            result.push(arr[start++]);\n\t                        }\n\t\n\t                        return result;\n\t                    };\n\t\n\t\n\t\n\t                    /**\n\t                     * Return a function that will execute in the given context, optionally adding any additional supplied parameters to the beginning of the arguments collection.\n\t                     * @param {Function} fn  Function.\n\t                     * @param {object} context   Execution context.\n\t                     * @param {rest} args    Arguments (0...n arguments).\n\t                     * @return {Function} Wrapped Function.\n\t                     */\n\t                    var bindPolyfill = function moutBind(fn, context, args){\n\t                        var argsArr = slicePolyfill(arguments, 2); //curried args\n\t                        return function(){\n\t                            return fn.apply(context, argsArr.concat(slicePolyfill(arguments)));\n\t                        };\n\t                    };\n\t\n\t                    $$ = bindPolyfill(document.querySelectorAll, document);\n\t                    /*jshint ignore:end */\n\t            }\n\t\n\t            if (!$$){\n\t                throw new Error('ionic material ink module could not create reference of DOM nodes');\n\t            }\n\t\n\t            // Find exact position of element\n\t            function isWindow(obj) {\n\t                return obj !== null && obj === obj.window;\n\t            }\n\t\n\t            function getWindow(elem) {\n\t                return isWindow(elem) ? elem : elem.nodeType === 9 && elem.defaultView;\n\t            }\n\t\n\t            function offset(elem) {\n\t                var docElem, win,\n\t                    box = {\n\t                        top: 0,\n\t                        left: 0\n\t                    },\n\t                    doc = elem && elem.ownerDocument;\n\t\n\t                docElem = doc.documentElement;\n\t\n\t                if (typeof elem.getBoundingClientRect !== typeof undefined) {\n\t                    box = elem.getBoundingClientRect();\n\t                }\n\t                win = getWindow(doc);\n\t                return {\n\t                    top: box.top + win.pageYOffset - docElem.clientTop,\n\t                    left: box.left + win.pageXOffset - docElem.clientLeft\n\t                };\n\t            }\n\t\n\t            function hexToRgb(hex) {\n\t                var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n\t                return result ? {\n\t                    r: parseInt(result[1], 16),\n\t                    g: parseInt(result[2], 16),\n\t                    b: parseInt(result[3], 16)\n\t                } : null;\n\t            }\n\t\n\t            function convertStyle(obj) {\n\t                var style = '';\n\t\n\t                for (var a in obj) {\n\t                    if (obj.hasOwnProperty(a)) {\n\t                        style += (a + ':' + obj[a] + ';');\n\t                    }\n\t                }\n\t\n\t                return style;\n\t            }\n\t\n\t            var Effect = {\n\t\n\t                // Effect delay\n\t                duration: 500,\n\t\n\t                show: function(e) {\n\t\n\t                    // Disable right click\n\t                    if (e.button === 2) {\n\t                        return false;\n\t                    }\n\t\n\t                    var el = this;\n\t\n\t                    // Create ripple\n\t                    var ripple = document.createElement('div');\n\t                    var customColor = this.dataset.inkColor;\n\t                    var customOpacity = this.dataset.inkOpacity;\n\t                    var hasCustomRipple = customColor || customOpacity;\n\t                    ripple.className = 'ink-ripple';\n\t                    el.appendChild(ripple);\n\t\n\t                    // Get click coordinate and element witdh\n\t                    var pos = offset(el);\n\t                    var relativeY = (e.pageY - pos.top);\n\t                    var relativeX = (e.pageX - pos.left);\n\t                    var scale = 'scale(' + ((el.clientWidth / 100) * 2.5) + ')';\n\t\n\t                    // Support for touch devices\n\t                    if ('touches' in e) {\n\t                        relativeY = (e.touches[0].pageY - pos.top);\n\t                        relativeX = (e.touches[0].pageX - pos.left);\n\t                    }\n\t\n\t                    // Attach data to element\n\t                    ripple.setAttribute('data-hold', Date.now());\n\t                    ripple.setAttribute('data-scale', scale);\n\t                    ripple.setAttribute('data-x', relativeX);\n\t                    ripple.setAttribute('data-y', relativeY);\n\t\n\t                    // Set ripple position\n\t                    var rippleStyle = {\n\t                        'top': relativeY + 'px',\n\t                        'left': relativeX + 'px'\n\t                    };\n\t\n\t                    ripple.className = ripple.className + ' ink-notransition';\n\t\n\t                    if (hasCustomRipple) {\n\t                        var colorRgb;\n\t                        if (customColor) {\n\t                            var fromHex = hexToRgb(customColor);\n\t                            colorRgb = fromHex.r + ',' + fromHex.g + ',' + fromHex.b;\n\t                        } else {\n\t                            colorRgb = '0,0,0';\n\t                        }\n\t                        if (!customOpacity) {\n\t                            customOpacity = 0.2;\n\t                        }\n\t                        var bg = 'rgba(' + colorRgb + ',' + customOpacity + ')';\n\t                        rippleStyle['background-color'] = bg;\n\t                    }\n\t\n\t                    ripple.setAttribute('style', convertStyle(rippleStyle));\n\t                    ripple.className = ripple.className.replace('ink-notransition', '');\n\t\n\t                    // Scale the ripple\n\t                    rippleStyle['-webkit-transform'] = scale;\n\t                    rippleStyle['-moz-transform'] = scale;\n\t                    rippleStyle['-ms-transform'] = scale;\n\t                    rippleStyle['-o-transform'] = scale;\n\t                    rippleStyle.transform = scale;\n\t                    rippleStyle.opacity = '1';\n\t\n\t                    rippleStyle['-webkit-transition-duration'] = Effect.duration + 'ms';\n\t                    rippleStyle['-moz-transition-duration'] = Effect.duration + 'ms';\n\t                    rippleStyle['-o-transition-duration'] = Effect.duration + 'ms';\n\t                    rippleStyle['transition-duration'] = Effect.duration + 'ms';\n\t\n\t                    ripple.setAttribute('style', convertStyle(rippleStyle));\n\t                },\n\t\n\t                hide: function() {\n\t\n\t                    var el = this;\n\t\n\t                    var width = el.clientWidth * 1.4;\n\t\n\t                    // Get first ripple\n\t                    var ripple = null;\n\t\n\t                    var childrenLength = el.children.length;\n\t\n\t                    for (var a = 0; a < childrenLength; a++) {\n\t                        if (el.children[a].className.indexOf('ink-ripple') !== -1) {\n\t                            ripple = el.children[a];\n\t                            continue;\n\t                        }\n\t                    }\n\t\n\t                    if (!ripple) {\n\t                        return false;\n\t                    }\n\t\n\t                    var relativeX = ripple.getAttribute('data-x');\n\t                    var relativeY = ripple.getAttribute('data-y');\n\t                    var scale = ripple.getAttribute('data-scale');\n\t\n\t                    // Get delay beetween mousedown and mouse leave\n\t                    var diff = Date.now() - Number(ripple.getAttribute('data-hold'));\n\t                    var delay = 500 - diff;\n\t\n\t                    if (delay < 0) {\n\t                        delay = 0;\n\t                    }\n\t\n\t                    // Fade out ripple after delay\n\t                    setTimeout(function() {\n\t\n\t                        var style = {\n\t                            'top': relativeY + 'px',\n\t                            'left': relativeX + 'px',\n\t                            'opacity': '0',\n\t\n\t                            // Duration\n\t                            '-webkit-transition-duration': Effect.duration + 'ms',\n\t                            '-moz-transition-duration': Effect.duration + 'ms',\n\t                            '-o-transition-duration': Effect.duration + 'ms',\n\t                            'transition-duration': Effect.duration + 'ms',\n\t                            '-webkit-transform': scale,\n\t                            '-moz-transform': scale,\n\t                            '-ms-transform': scale,\n\t                            '-o-transform': scale,\n\t                            'transform': scale,\n\t                        };\n\t\n\t                        ripple.setAttribute('style', convertStyle(style));\n\t\n\t                        setTimeout(function() {\n\t                            try {\n\t                                el.removeChild(ripple);\n\t                            } catch (e) {\n\t                                return false;\n\t                            }\n\t                        }, Effect.duration);\n\t                    }, delay);\n\t                },\n\t\n\t                // Little hack to make <input> can perform ink effect\n\t                wrapInput: function(elements) {\n\t\n\t                    for (var a = 0; a < elements.length; a++) {\n\t\n\t                        var el = elements[a];\n\t\n\t                        if (el.tagName.toLowerCase() === 'input') {\n\t\n\t                            var parent = el.parentNode;\n\t\n\t                            // If input already have parent just pass through\n\t                            if (parent.tagName.toLowerCase() === 'i' &&\n\t                                parent.className.indexOf('ink') !== -1 &&\n\t                                parent.className.indexOf('tab-item') !== -1 &&\n\t                                parent.className.indexOf('button-fab') !== -1 &&\n\t                                parent.className.indexOf('button-raised') !== -1 &&\n\t                                parent.className.indexOf('button-flat') !== -1 &&\n\t                                parent.className.indexOf('button-clear') !== -1 &&\n\t                                parent.className.indexOf('button') !== -1 &&\n\t                                parent.className.indexOf('item') !== -1) {\n\t                                return false;\n\t                            }\n\t\n\t                            // Put element class and style to the specified parent\n\t                            var wrapper = document.createElement('i');\n\t                            wrapper.className = el.className + ' ink-input-wrapper';\n\t\n\t                            var elementStyle = el.getAttribute('style');\n\t\n\t                            if (!elementStyle) {\n\t                                elementStyle = '';\n\t                            }\n\t\n\t                            wrapper.setAttribute('style', elementStyle);\n\t\n\t                            el.className = 'ink-button-input';\n\t                            el.removeAttribute('style');\n\t\n\t                            // Put element as child\n\t                            parent.replaceChild(wrapper, el);\n\t                            wrapper.appendChild(el);\n\t                        }\n\t                    }\n\t                }\n\t            };\n\t\n\t            Ink.displayEffect = function(options) {\n\t                options = options || {};\n\t\n\t                if ('duration' in options) {\n\t                    Effect.duration = options.duration;\n\t                }\n\t\n\t                //Wrap input inside <i> tag\n\t                var selectors = '.ink,.tab-item,.button-fab,.button-raised,.button-flat,.button-clear,a.item,.popup .button';\n\t                Effect.wrapInput($$(selectors));\n\t\n\t                Array.prototype.forEach.call($$(selectors), function(i) {\n\t                    if ('ontouchstart' in window) {\n\t                        i.addEventListener('touchstart', Effect.show, false);\n\t                        i.addEventListener('touchend', Effect.hide, false);\n\t                        i.addEventListener('touchcancel', Effect.hide, false);\n\t                    } else {\n\t                        i.addEventListener('mousedown', Effect.show, false);\n\t                        i.addEventListener('mouseup', Effect.hide, false);\n\t                        i.addEventListener('mouseleave', Effect.hide, false);\n\t                    }\n\t                });\n\t            };\n\t\n\t            return Ink;\n\t    }\n\t\n\t    ink.inject = [];\n\t};\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = function(angularApp) {\n\t    angularApp.factory('ionicMaterialMotion', Motion);\n\t\n\t    function Motion() {\n\t        /*global document, window*/\n\t\n\t        'use strict';\n\t\n\t        /*============================================================================*/\n\t        /* HELPERS (non-exports)\n\t        /=============================================================================*\n\t        /   Abstract common lookups and manipulations in case better alternatives\n\t        /   arise or future cross-platform differences warrant separate handling\n\t        /=============================================================================*/\n\t\n\t        function getViewportHeight() {\n\t            return window.innerHeight;\n\t        }\n\t\n\t        function getBoundingClientRect(domNode) {\n\t            return domNode.getBoundingClientRect;\n\t        }\n\t\n\t        function showNotAnimatedElements(elements, total) {\n\t            // Load the elements without effect\n\t            for (var i = 0; i < total; i++) {\n\t                var child = elements[i];\n\t                child.className += ' in';\n\t                child.className += ' done';\n\t            }\n\t        }\n\t\n\t\n\t\n\t        /*============================================================================*/\n\t        /* MOTION (EXPORT)\n\t        /=============================================================================*\n\t        /   Animation methods for the library\n\t        /=============================================================================*/\n\t\n\t        var motion = {\n\t            blinds: blinds,\n\t            fadeSlideIn: fadeSlideIn,\n\t            fadeSlideInRight: fadeSlideInRight,\n\t            panInLeft: panInLeft,\n\t            pushDown: pushDown,\n\t            ripple: ripple,\n\t            slideUp: slideUp\n\t        };\n\t\n\t        function blinds(options) {\n\t\n\t            // Declare our defaults\n\t            var defaults = {\n\t                finishDelayThrottle: 2,\n\t                finishSpeedPercent: 0.5,\n\t                leftOffsetPercentage: 0.8,\n\t                selector: '.animate-blinds .item',\n\t                startVelocity: 1100\n\t            };\n\t\n\t            // Apply defaults if properties are not passed\n\t            if (typeof options === 'undefined') {\n\t                options = {};\n\t            }\n\t\n\t            options.finishDelayThrottle = options.finishDelayThrottle || defaults.finishDelayThrottle;\n\t            options.finishSpeedPercent = options.finishSpeedPercent || defaults.finishSpeedPercent;\n\t            options.leftOffsetPercentage = options.leftOffsetPercentage || defaults.leftOffsetPercentage;\n\t            options.startVelocity = options.startVelocity || defaults.startVelocity;\n\t\n\t            if (typeof options.selector == 'undefined') {\n\t                options.selector = defaults.selector;\n\t            }\n\t\n\t            // Fail early & silently log\n\t            var isInvalidSelector = typeof options.selector === 'undefined' || options.selector === '';\n\t\n\t            if (isInvalidSelector) {\n\t                console.log('invalid blinds selector');\n\t                return false;\n\t            }\n\t\n\t            var animateBlindsDom = document.querySelectorAll(options.selector);\n\t            var elementsCount = animateBlindsDom.length;\n\t            var elementAnimationCount = 0;\n\t\n\t            // Count the elements within the starting viewport so we're not exacting\n\t            // more effort than required...\n\t            //\n\t            // We use css visiblity: hidden instead of display: none so the elements\n\t            // maintain their DOM flow\n\t\n\t            var viewportHeight = getViewportHeight();\n\t            for (var i = 0; i < elementsCount; i++) {\n\t                if (animateBlindsDom[i].offsetTop < viewportHeight) {\n\t                    elementAnimationCount += 1;\n\t                    continue;\n\t                }\n\t                break;\n\t            }\n\t\n\t            // Sequentially animate with a delay based on proximity\n\t            var speed = options.startVelocity;\n\t            for (var i = 0; i < elementAnimationCount; i++) {\n\t                var child = animateBlindsDom[i];\n\t                var childOffset = child.getBoundingClientRect();\n\t                var offset = childOffset.left * options.leftOffsetPercentage + childOffset.top;\n\t                var delay = parseFloat(offset / speed).toFixed(2);\n\t                child.style.webkitTransitionDelay = delay + \"s\";\n\t                child.style.transitionDelay = delay + \"s\";\n\t                child.className += ' in';\n\t            }\n\t\n\t            // When we're done animating, switch the class to 'done'\n\t            setTimeout(function() {\n\t                for (var i = 0; i < elementAnimationCount; i++) {\n\t                    var child = animateBlindsDom[i];\n\t                    var childOffset = child.getBoundingClientRect();\n\t                    var offset = childOffset.left * options.leftOffsetPercentage + childOffset.top;\n\t                    var delay = parseFloat(offset / speed / options.finishDelayThrottle).toFixed(2);\n\t                    //child.querySelector('img').style.webkitTransitionDelay = delay + \"s\";\n\t                    //child.querySelector('img').style.transitionDelay = delay + \"s\";\n\t                    //child.querySelector('img').className += ' in';\n\t                    animateBlindsDom[i].className += ' done';\n\t                }\n\t\n\t            }, speed * options.finishSpeedPercent);\n\t\n\t            // Load the elements without effect\n\t            showNotAnimatedElements(animateBlindsDom, elementsCount);\n\t        }\n\t\n\t        function fadeSlideIn(options) {\n\t\n\t            // Declare our defaults\n\t            var defaults = {\n\t                finishDelayThrottle: 2,\n\t                finishSpeedPercent: 0.72,\n\t                leftOffsetPercentage: 0.8,\n\t                selector: '.animate-fade-slide-in .item',\n\t                startVelocity: 1100\n\t            };\n\t\n\t            // Apply defaults if properties are not passed\n\t            if (typeof options === 'undefined') {\n\t                options = {};\n\t            }\n\t\n\t            options.finishDelayThrottle = options.finishDelayThrottle || defaults.finishDelayThrottle;\n\t            options.finishSpeedPercent = options.finishSpeedPercent || defaults.finishSpeedPercent;\n\t            options.leftOffsetPercentage = options.leftOffsetPercentage || defaults.leftOffsetPercentage;\n\t            options.startVelocity = options.startVelocity || defaults.startVelocity;\n\t\n\t            if (typeof options.selector == 'undefined') {\n\t                options.selector = defaults.selector;\n\t            }\n\t\n\t            // Fail early & silently log\n\t            var isInvalidSelector = typeof options.selector === 'undefined' || options.selector === '';\n\t\n\t            if (isInvalidSelector) {\n\t                console.log('invalid fadeSlideIn selector');\n\t                return false;\n\t            }\n\t\n\t            var animateFadeSlideInDom = document.querySelectorAll(options.selector);\n\t            var elementsCount = animateFadeSlideInDom.length;\n\t            var elementAnimationCount = 0;\n\t\n\t            // Count the elements within the starting viewport so we're not exacting\n\t            // more effort than required...\n\t            //\n\t            // We use css visiblity: hidden instead of display: none so the elements\n\t            // maintain their DOM flow\n\t\n\t            var viewportHeight = getViewportHeight();\n\t            for (var i = 0; i < elementsCount; i++) {\n\t                if (animateFadeSlideInDom[i].offsetTop < viewportHeight) {\n\t                    elementAnimationCount += 1;\n\t                    continue;\n\t                }\n\t                break;\n\t            }\n\t\n\t            // Sequentially animate with a delay based on proximity\n\t            var speed = options.startVelocity;\n\t            for (var i = 0; i < elementAnimationCount; i++) {\n\t                var child = animateFadeSlideInDom[i];\n\t                var childOffset = child.getBoundingClientRect();\n\t                var offset = childOffset.left * options.leftOffsetPercentage + childOffset.top;\n\t                var delay = parseFloat(offset / speed).toFixed(2);\n\t                child.style.webkitTransitionDelay = delay + \"s\";\n\t                child.style.transitionDelay = delay + \"s\";\n\t                child.className += ' in';\n\t            }\n\t\n\t            // When we're done animating, switch the class to 'done'\n\t            setTimeout(function() {\n\t                for (var i = 0; i < elementAnimationCount; i++) {\n\t                    var child = animateFadeSlideInDom[i];\n\t                    var childOffset = child.getBoundingClientRect();\n\t                    var offset = childOffset.left * options.leftOffsetPercentage + childOffset.top;\n\t                    var delayValue = offset / speed / options.finishDelayThrottle;\n\t                    var delay = parseFloat(delayValue).toFixed(2);\n\t                }\n\t                animateFadeSlideInDom[0].className += ' done';\n\t\n\t            }, speed * options.finishSpeedPercent);\n\t\n\t            // Load the elements without effect\n\t            showNotAnimatedElements(animateFadeSlideInDom, elementsCount);\n\t        }\n\t\n\t        function fadeSlideInRight(options) {\n\t\n\t            // Declare our defaults\n\t            var defaults = {\n\t                finishDelayThrottle: 2,\n\t                finishSpeedPercent: 0.72,\n\t                leftOffsetPercentage: 0.8,\n\t                selector: '.animate-fade-slide-in-right .item',\n\t                startVelocity: 1100\n\t            };\n\t\n\t            // Apply defaults if properties are not passed\n\t            if (typeof options === 'undefined') {\n\t                options = {};\n\t            }\n\t\n\t            options.finishDelayThrottle = options.finishDelayThrottle || defaults.finishDelayThrottle;\n\t            options.finishSpeedPercent = options.finishSpeedPercent || defaults.finishSpeedPercent;\n\t            options.leftOffsetPercentage = options.leftOffsetPercentage || defaults.leftOffsetPercentage;\n\t            options.startVelocity = options.startVelocity || defaults.startVelocity;\n\t\n\t            if (typeof options.selector == 'undefined') {\n\t                options.selector = defaults.selector;\n\t            }\n\t\n\t            // Fail early & silently log\n\t            var isInvalidSelector = typeof options.selector === 'undefined' || options.selector === '';\n\t\n\t            if (isInvalidSelector) {\n\t                console.log('invalid fadeSlideInRight selector');\n\t                return false;\n\t            }\n\t\n\t            var animateSlideInRightDom = document.querySelectorAll(options.selector);\n\t            var elementsCount = animateSlideInRightDom.length;\n\t            var elementAnimationCount = 0;\n\t\n\t            // Count the elements within the starting viewport so we're not\n\t            // exacting more effort than required...\n\t            //\n\t            // We use css visiblity: hidden instead of display: none so the\n\t            // elements maintain their DOM flow\n\t\n\t            var viewportHeight = getViewportHeight();\n\t            for (var i = 0; i < elementsCount; i++) {\n\t                if (animateSlideInRightDom[i].offsetTop < viewportHeight) {\n\t                    elementAnimationCount += 1;\n\t                    continue;\n\t                }\n\t                break;\n\t            }\n\t\n\t            // Sequentially animate with a delay based on proximity\n\t            var speed = options.startVelocity;\n\t            for (var i = 0; i < elementAnimationCount; i++) {\n\t                var child = animateSlideInRightDom[i];\n\t                var childOffset = child.getBoundingClientRect();\n\t                var offset = childOffset.left * options.leftOffsetPercentage + childOffset.top;\n\t                var delay = parseFloat(offset / speed).toFixed(2);\n\t                child.style.webkitTransitionDelay = delay + \"s\";\n\t                child.style.transitionDelay = delay + \"s\";\n\t                child.className += ' in';\n\t            }\n\t\n\t            // When we're done animating, switch the class to 'done'\n\t            setTimeout(function() {\n\t                for (var i = 0; i < elementAnimationCount; i++) {\n\t                    var child = animateSlideInRightDom[i];\n\t                    var childOffset = child.getBoundingClientRect();\n\t                    var offset = childOffset.left * options.leftOffsetPercentage + childOffset.top;\n\t                    var delayValue = offset / speed / options.finishDelayThrottle;\n\t                    var delay = parseFloat(delayValue).toFixed(2);\n\t                }\n\t                animateSlideInRightDom[0].className += ' done';\n\t\n\t            }, speed * options.finishSpeedPercent);\n\t\n\t            // Load the elements without effect\n\t            showNotAnimatedElements(animateSlideInRightDom, elementsCount);\n\t\n\t        }\n\t\n\t        function ripple(options) {\n\t\n\t            // Declare our defaults\n\t            var defaults = {\n\t                finishDelayThrottle: 2,\n\t                finishSpeedPercent: 0.72,\n\t                leftOffsetPercentage: 0.8,\n\t                selector: '.animate-ripple .item',\n\t                startVelocity: 1100\n\t            };\n\t\n\t            // Apply defaults if properties are not passed\n\t            if (typeof options === 'undefined') {\n\t                options = {};\n\t            }\n\t\n\t            options.finishDelayThrottle = options.finishDelayThrottle || defaults.finishDelayThrottle;\n\t            options.finishSpeedPercent = options.finishSpeedPercent || defaults.finishSpeedPercent;\n\t            options.leftOffsetPercentage = options.leftOffsetPercentage || defaults.leftOffsetPercentage;\n\t            options.startVelocity = options.startVelocity || defaults.startVelocity;\n\t\n\t            if (typeof options.selector == 'undefined') {\n\t                options.selector = defaults.selector;\n\t            }\n\t\n\t            // Fail early & silently log\n\t            var isInvalidSelector = typeof options.selector === 'undefined' || options.selector === '';\n\t\n\t            if (isInvalidSelector) {\n\t                console.log('invalid ripple selector');\n\t                return false;\n\t            }\n\t\n\t            var animateRippleDom = document.querySelectorAll(options.selector);\n\t            var elementsCount = animateRippleDom.length;\n\t            var elementAnimationCount = 0;\n\t\n\t            // Count the elements within the starting viewport so we're not\n\t            // exacting more effort than required...\n\t            //\n\t            // We use css visiblity: hidden instead of display: none so the\n\t            // elements maintain their DOM flow\n\t\n\t            var viewportHeight = getViewportHeight();\n\t            for (var i = 0; i < animateRippleDom.length; i++) {\n\t                if (animateRippleDom[i].offsetTop < viewportHeight) {\n\t                    elementAnimationCount += 1;\n\t                    continue;\n\t                }\n\t                break;\n\t            }\n\t\n\t            // Sequentially animate with a delay based on proximity\n\t            var speed = options.startVelocity;\n\t            for (var i = 0; i < elementAnimationCount; i++) {\n\t                var child = animateRippleDom[i];\n\t                var childOffset = child.getBoundingClientRect();\n\t                var offset = childOffset.left * options.leftOffsetPercentage + childOffset.top;\n\t                var delay = parseFloat(offset / speed).toFixed(2);\n\t                child.style.webkitTransitionDelay = delay + \"s\";\n\t                child.style.transitionDelay = delay + \"s\";\n\t                child.className += ' in';\n\t            }\n\t\n\t            // When we're done animating, switch the class to 'done'\n\t            setTimeout(function() {\n\t                for (var i = 0; i < elementAnimationCount; i++) {\n\t                    var child = animateRippleDom[i];\n\t                    var childOffset = child.getBoundingClientRect();\n\t                    var offset = childOffset.left * options.leftOffsetPercentage + childOffset.top;\n\t                    var delayValue = offset / speed / options.finishDelayThrottle;\n\t                    var delay = parseFloat(delayValue).toFixed(2);\n\t                }\n\t                animateRippleDom[0].className += ' done';\n\t\n\t            }, speed * options.finishSpeedPercent);\n\t\n\t            // Load the elements without effect\n\t            showNotAnimatedElements(animateRippleDom, elementsCount);\n\t        }\n\t\n\t        function panInLeft(options) {\n\t\n\t            // We have a single option, so it may be passed as a string or property\n\t            if (typeof options === 'string') {\n\t                options = {\n\t                    selector: options\n\t                };\n\t            }\n\t\n\t            // Fail early & silently log\n\t            var isInvalidSelector = typeof options.selector === 'undefined' || options.selector === '';\n\t\n\t            if (isInvalidSelector) {\n\t                console.log('invalid pushDown selector');\n\t                return false;\n\t            }\n\t\n\t            var animatePanInLeftDom = document.querySelectorAll(options.selector);\n\t            var elementAnimationCount = animatePanInLeftDom.length;\n\t            for (var i = 0; i < elementAnimationCount; i++) {\n\t                var element = animatePanInLeftDom[i];\n\t                var classNameToRemove = 'animate-pan-in-left';\n\t                var indexOfClassNameToRemove = element.className.lastIndexOf(classNameToRemove);\n\t                element.className = element.className.substr(0, indexOfClassNameToRemove);\n\t            }\n\t        }\n\t\n\t        function pushDown(options) {\n\t\n\t            // We have a single option, so it may be passed as a string or property\n\t            if (typeof options === 'string') {\n\t                options = {\n\t                    selector: options\n\t                };\n\t            }\n\t\n\t            // Fail early & silently log\n\t            var isInvalidSelector = typeof options.selector === 'undefined' || options.selector === '';\n\t\n\t            if (isInvalidSelector) {\n\t                console.log('invalid pushDown selector');\n\t                return false;\n\t            }\n\t\n\t            var animatePushDownDom = document.querySelectorAll(options.selector);\n\t            var elementAnimationCount = animatePushDownDom.length;\n\t            for (var i = 0; i < elementAnimationCount; i++) {\n\t                var element = animatePushDownDom[i];\n\t                var classNameToRemove = options.selector.split('.')[1];\n\t                var indexOfClassNameToRemove = element.className.lastIndexOf(classNameToRemove);\n\t                element.className = element.className.substr(0, indexOfClassNameToRemove);\n\t            }\n\t        }\n\t\n\t        function slideUp(options) {\n\t\n\t            // We have a single option, so it may be passed as a string or property\n\t            if (typeof options === 'string') {\n\t                options = {\n\t                    selector: options\n\t                };\n\t            }\n\t\n\t            // Fail early & silently log\n\t            var isInvalidSelector = typeof options.selector === 'undefined' || options.selector === '';\n\t\n\t            if (isInvalidSelector) {\n\t                console.log('invalid pushDown selector');\n\t                return false;\n\t            }\n\t\n\t            var animateSlideUpDom = document.querySelectorAll(options.selector);\n\t            var elementAnimationCount = animateSlideUpDom.length;\n\t            for (var i = 0; i < elementAnimationCount; i++) {\n\t                var element = animateSlideUpDom[i];\n\t                var classNameToRemove = options.selector.split('.')[1];\n\t                var indexOfClassNameToRemove = element.className.lastIndexOf(classNameToRemove);\n\t                element.className = element.className.substr(0, indexOfClassNameToRemove);\n\t            }\n\t        }\n\t\n\t        /* Export object\n\t        /============================================================================*/\n\t        return motion;\n\t    }\n\t\n\t    Motion.$inject = [];\n\t};\n\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** ionic.material.min.js\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/** WEBPACK FOOTER **\n ** webpack/bootstrap aca4d68e3e47af1bef6a\n **/","/**\n * Ionic Material\n * \"Bundle Index\" / \"Entryfile\"\n * https://github.com/zachsoft/ionic-material\n *\n * Recommended: use a compiled version, especially in production!\n */\n\n'use strict';\n\nmodule.exports = (function(){\n\n    var angular;\n\n    try {\n        angular = require('angular');\n    } catch(err){ }\n\n    if(!angular || !angular.version){\n        /*global window: true*/\n        angular = window.angular;\n        /*global window: false*/\n    }\n\n    if(!angular || !angular.version){\n        throw new Error('ionic-material could not load angular module :(');\n    }\n\n    // set up angular module\n    var app = angular.module('ionic-material', ['ionic']);\n\n    // Import Dependencies\n    require('./lib/_ink')(app);\n    require('./lib/_motion')(app);\n\n    return 'ionic-material';\n})();\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/js/ionic-material.js\n ** module id = 0\n ** module chunks = 0\n **/","if(typeof __WEBPACK_EXTERNAL_MODULE_1__ === 'undefined') {var e = new Error(\"Cannot find module \\\"angular\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e;}\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"angular\"\n ** module id = 1\n ** module chunks = 0\n **/","'use strict';\n\n/*!\n * Fork by Zach Fitzgerald and other contributors of Ionic Material\n *\n * Waves v0.5.4\n * http://fian.my.id/Waves\n *\n * Copyright 2014 Alfiana E. Sibuea and other contributors\n *\n * Released under the MIT license\n * https://github.com/fians/Waves/blob/master/LICENSE\n *\n */\nmodule.exports = function (angularApp) {\n\n    angularApp.factory('ionicMaterialInk', ink);\n\n    function ink (){\n        /*global document*/\n        var Ink = Ink || {};\n\n            // all DOM nodes\n            var $$;\n\n            // phantomJS throws an error when you try to use document.querySelectorAll.bind\n            if(document && document.querySelectorAll && document.querySelectorAll.bind){\n                try{\n                    // all DOM nodes\n                    $$ = document.querySelectorAll.bind(document);\n\n                } catch(e){}\n            } else if (window && window.angular && window.angular.element) {\n                // we can use angular.element instead\n                $$ = window.angular.element;\n            } else {\n\n\n                    /**\n                     * mout.js 0.11.0 bind and slice polyfills (substitutes?)\n                     * TODO: pull out mout.js bind and slice molyfills and inject into material.ink\n                     */\n\n                    /**\n                     * Create slice of source array or array-like object\n                     */\n                    var slicePolyfill = function moutslicePolyfill(arr, start, end){\n                        var len = arr.length;\n                        /*jshint eqnull:true */\n                        if (start == null) {\n                            start = 0;\n                        } else if (start < 0) {\n                            start = Math.max(len + start, 0);\n                        } else {\n                            start = Math.min(start, len);\n                        }\n\n\n                        if (end == null) {\n\n                            end = len;\n                        } else if (end < 0) {\n                            end = Math.max(len + end, 0);\n                        } else {\n                            end = Math.min(end, len);\n                        }\n\n                        var result = [];\n                        while (start < end) {\n                            result.push(arr[start++]);\n                        }\n\n                        return result;\n                    };\n\n\n\n                    /**\n                     * Return a function that will execute in the given context, optionally adding any additional supplied parameters to the beginning of the arguments collection.\n                     * @param {Function} fn  Function.\n                     * @param {object} context   Execution context.\n                     * @param {rest} args    Arguments (0...n arguments).\n                     * @return {Function} Wrapped Function.\n                     */\n                    var bindPolyfill = function moutBind(fn, context, args){\n                        var argsArr = slicePolyfill(arguments, 2); //curried args\n                        return function(){\n                            return fn.apply(context, argsArr.concat(slicePolyfill(arguments)));\n                        };\n                    };\n\n                    $$ = bindPolyfill(document.querySelectorAll, document);\n                    /*jshint ignore:end */\n            }\n\n            if (!$$){\n                throw new Error('ionic material ink module could not create reference of DOM nodes');\n            }\n\n            // Find exact position of element\n            function isWindow(obj) {\n                return obj !== null && obj === obj.window;\n            }\n\n            function getWindow(elem) {\n                return isWindow(elem) ? elem : elem.nodeType === 9 && elem.defaultView;\n            }\n\n            function offset(elem) {\n                var docElem, win,\n                    box = {\n                        top: 0,\n                        left: 0\n                    },\n                    doc = elem && elem.ownerDocument;\n\n                docElem = doc.documentElement;\n\n                if (typeof elem.getBoundingClientRect !== typeof undefined) {\n                    box = elem.getBoundingClientRect();\n                }\n                win = getWindow(doc);\n                return {\n                    top: box.top + win.pageYOffset - docElem.clientTop,\n                    left: box.left + win.pageXOffset - docElem.clientLeft\n                };\n            }\n\n            function hexToRgb(hex) {\n                var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n                return result ? {\n                    r: parseInt(result[1], 16),\n                    g: parseInt(result[2], 16),\n                    b: parseInt(result[3], 16)\n                } : null;\n            }\n\n            function convertStyle(obj) {\n                var style = '';\n\n                for (var a in obj) {\n                    if (obj.hasOwnProperty(a)) {\n                        style += (a + ':' + obj[a] + ';');\n                    }\n                }\n\n                return style;\n            }\n\n            var Effect = {\n\n                // Effect delay\n                duration: 500,\n\n                show: function(e) {\n\n                    // Disable right click\n                    if (e.button === 2) {\n                        return false;\n                    }\n\n                    var el = this;\n\n                    // Create ripple\n                    var ripple = document.createElement('div');\n                    var customColor = this.dataset.inkColor;\n                    var customOpacity = this.dataset.inkOpacity;\n                    var hasCustomRipple = customColor || customOpacity;\n                    ripple.className = 'ink-ripple';\n                    el.appendChild(ripple);\n\n                    // Get click coordinate and element witdh\n                    var pos = offset(el);\n                    var relativeY = (e.pageY - pos.top);\n                    var relativeX = (e.pageX - pos.left);\n                    var scale = 'scale(' + ((el.clientWidth / 100) * 2.5) + ')';\n\n                    // Support for touch devices\n                    if ('touches' in e) {\n                        relativeY = (e.touches[0].pageY - pos.top);\n                        relativeX = (e.touches[0].pageX - pos.left);\n                    }\n\n                    // Attach data to element\n                    ripple.setAttribute('data-hold', Date.now());\n                    ripple.setAttribute('data-scale', scale);\n                    ripple.setAttribute('data-x', relativeX);\n                    ripple.setAttribute('data-y', relativeY);\n\n                    // Set ripple position\n                    var rippleStyle = {\n                        'top': relativeY + 'px',\n                        'left': relativeX + 'px'\n                    };\n\n                    ripple.className = ripple.className + ' ink-notransition';\n\n                    if (hasCustomRipple) {\n                        var colorRgb;\n                        if (customColor) {\n                            var fromHex = hexToRgb(customColor);\n                            colorRgb = fromHex.r + ',' + fromHex.g + ',' + fromHex.b;\n                        } else {\n                            colorRgb = '0,0,0';\n                        }\n                        if (!customOpacity) {\n                            customOpacity = 0.2;\n                        }\n                        var bg = 'rgba(' + colorRgb + ',' + customOpacity + ')';\n                        rippleStyle['background-color'] = bg;\n                    }\n\n                    ripple.setAttribute('style', convertStyle(rippleStyle));\n                    ripple.className = ripple.className.replace('ink-notransition', '');\n\n                    // Scale the ripple\n                    rippleStyle['-webkit-transform'] = scale;\n                    rippleStyle['-moz-transform'] = scale;\n                    rippleStyle['-ms-transform'] = scale;\n                    rippleStyle['-o-transform'] = scale;\n                    rippleStyle.transform = scale;\n                    rippleStyle.opacity = '1';\n\n                    rippleStyle['-webkit-transition-duration'] = Effect.duration + 'ms';\n                    rippleStyle['-moz-transition-duration'] = Effect.duration + 'ms';\n                    rippleStyle['-o-transition-duration'] = Effect.duration + 'ms';\n                    rippleStyle['transition-duration'] = Effect.duration + 'ms';\n\n                    ripple.setAttribute('style', convertStyle(rippleStyle));\n                },\n\n                hide: function() {\n\n                    var el = this;\n\n                    var width = el.clientWidth * 1.4;\n\n                    // Get first ripple\n                    var ripple = null;\n\n                    var childrenLength = el.children.length;\n\n                    for (var a = 0; a < childrenLength; a++) {\n                        if (el.children[a].className.indexOf('ink-ripple') !== -1) {\n                            ripple = el.children[a];\n                            continue;\n                        }\n                    }\n\n                    if (!ripple) {\n                        return false;\n                    }\n\n                    var relativeX = ripple.getAttribute('data-x');\n                    var relativeY = ripple.getAttribute('data-y');\n                    var scale = ripple.getAttribute('data-scale');\n\n                    // Get delay beetween mousedown and mouse leave\n                    var diff = Date.now() - Number(ripple.getAttribute('data-hold'));\n                    var delay = 500 - diff;\n\n                    if (delay < 0) {\n                        delay = 0;\n                    }\n\n                    // Fade out ripple after delay\n                    setTimeout(function() {\n\n                        var style = {\n                            'top': relativeY + 'px',\n                            'left': relativeX + 'px',\n                            'opacity': '0',\n\n                            // Duration\n                            '-webkit-transition-duration': Effect.duration + 'ms',\n                            '-moz-transition-duration': Effect.duration + 'ms',\n                            '-o-transition-duration': Effect.duration + 'ms',\n                            'transition-duration': Effect.duration + 'ms',\n                            '-webkit-transform': scale,\n                            '-moz-transform': scale,\n                            '-ms-transform': scale,\n                            '-o-transform': scale,\n                            'transform': scale,\n                        };\n\n                        ripple.setAttribute('style', convertStyle(style));\n\n                        setTimeout(function() {\n                            try {\n                                el.removeChild(ripple);\n                            } catch (e) {\n                                return false;\n                            }\n                        }, Effect.duration);\n                    }, delay);\n                },\n\n                // Little hack to make <input> can perform ink effect\n                wrapInput: function(elements) {\n\n                    for (var a = 0; a < elements.length; a++) {\n\n                        var el = elements[a];\n\n                        if (el.tagName.toLowerCase() === 'input') {\n\n                            var parent = el.parentNode;\n\n                            // If input already have parent just pass through\n                            if (parent.tagName.toLowerCase() === 'i' &&\n                                parent.className.indexOf('ink') !== -1 &&\n                                parent.className.indexOf('tab-item') !== -1 &&\n                                parent.className.indexOf('button-fab') !== -1 &&\n                                parent.className.indexOf('button-raised') !== -1 &&\n                                parent.className.indexOf('button-flat') !== -1 &&\n                                parent.className.indexOf('button-clear') !== -1 &&\n                                parent.className.indexOf('button') !== -1 &&\n                                parent.className.indexOf('item') !== -1) {\n                                return false;\n                            }\n\n                            // Put element class and style to the specified parent\n                            var wrapper = document.createElement('i');\n                            wrapper.className = el.className + ' ink-input-wrapper';\n\n                            var elementStyle = el.getAttribute('style');\n\n                            if (!elementStyle) {\n                                elementStyle = '';\n                            }\n\n                            wrapper.setAttribute('style', elementStyle);\n\n                            el.className = 'ink-button-input';\n                            el.removeAttribute('style');\n\n                            // Put element as child\n                            parent.replaceChild(wrapper, el);\n                            wrapper.appendChild(el);\n                        }\n                    }\n                }\n            };\n\n            Ink.displayEffect = function(options) {\n                options = options || {};\n\n                if ('duration' in options) {\n                    Effect.duration = options.duration;\n                }\n\n                //Wrap input inside <i> tag\n                var selectors = '.ink,.tab-item,.button-fab,.button-raised,.button-flat,.button-clear,a.item,.popup .button';\n                Effect.wrapInput($$(selectors));\n\n                Array.prototype.forEach.call($$(selectors), function(i) {\n                    if ('ontouchstart' in window) {\n                        i.addEventListener('touchstart', Effect.show, false);\n                        i.addEventListener('touchend', Effect.hide, false);\n                        i.addEventListener('touchcancel', Effect.hide, false);\n                    } else {\n                        i.addEventListener('mousedown', Effect.show, false);\n                        i.addEventListener('mouseup', Effect.hide, false);\n                        i.addEventListener('mouseleave', Effect.hide, false);\n                    }\n                });\n            };\n\n            return Ink;\n    }\n\n    ink.inject = [];\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/js/lib/_ink.js\n ** module id = 2\n ** module chunks = 0\n **/","module.exports = function(angularApp) {\n    angularApp.factory('ionicMaterialMotion', Motion);\n\n    function Motion() {\n        /*global document, window*/\n\n        'use strict';\n\n        /*============================================================================*/\n        /* HELPERS (non-exports)\n        /=============================================================================*\n        /   Abstract common lookups and manipulations in case better alternatives\n        /   arise or future cross-platform differences warrant separate handling\n        /=============================================================================*/\n\n        function getViewportHeight() {\n            return window.innerHeight;\n        }\n\n        function getBoundingClientRect(domNode) {\n            return domNode.getBoundingClientRect;\n        }\n\n        function showNotAnimatedElements(elements, total) {\n            // Load the elements without effect\n            for (var i = 0; i < total; i++) {\n                var child = elements[i];\n                child.className += ' in';\n                child.className += ' done';\n            }\n        }\n\n\n\n        /*============================================================================*/\n        /* MOTION (EXPORT)\n        /=============================================================================*\n        /   Animation methods for the library\n        /=============================================================================*/\n\n        var motion = {\n            blinds: blinds,\n            fadeSlideIn: fadeSlideIn,\n            fadeSlideInRight: fadeSlideInRight,\n            panInLeft: panInLeft,\n            pushDown: pushDown,\n            ripple: ripple,\n            slideUp: slideUp\n        };\n\n        function blinds(options) {\n\n            // Declare our defaults\n            var defaults = {\n                finishDelayThrottle: 2,\n                finishSpeedPercent: 0.5,\n                leftOffsetPercentage: 0.8,\n                selector: '.animate-blinds .item',\n                startVelocity: 1100\n            };\n\n            // Apply defaults if properties are not passed\n            if (typeof options === 'undefined') {\n                options = {};\n            }\n\n            options.finishDelayThrottle = options.finishDelayThrottle || defaults.finishDelayThrottle;\n            options.finishSpeedPercent = options.finishSpeedPercent || defaults.finishSpeedPercent;\n            options.leftOffsetPercentage = options.leftOffsetPercentage || defaults.leftOffsetPercentage;\n            options.startVelocity = options.startVelocity || defaults.startVelocity;\n\n            if (typeof options.selector == 'undefined') {\n                options.selector = defaults.selector;\n            }\n\n            // Fail early & silently log\n            var isInvalidSelector = typeof options.selector === 'undefined' || options.selector === '';\n\n            if (isInvalidSelector) {\n                console.log('invalid blinds selector');\n                return false;\n            }\n\n            var animateBlindsDom = document.querySelectorAll(options.selector);\n            var elementsCount = animateBlindsDom.length;\n            var elementAnimationCount = 0;\n\n            // Count the elements within the starting viewport so we're not exacting\n            // more effort than required...\n            //\n            // We use css visiblity: hidden instead of display: none so the elements\n            // maintain their DOM flow\n\n            var viewportHeight = getViewportHeight();\n            for (var i = 0; i < elementsCount; i++) {\n                if (animateBlindsDom[i].offsetTop < viewportHeight) {\n                    elementAnimationCount += 1;\n                    continue;\n                }\n                break;\n            }\n\n            // Sequentially animate with a delay based on proximity\n            var speed = options.startVelocity;\n            for (var i = 0; i < elementAnimationCount; i++) {\n                var child = animateBlindsDom[i];\n                var childOffset = child.getBoundingClientRect();\n                var offset = childOffset.left * options.leftOffsetPercentage + childOffset.top;\n                var delay = parseFloat(offset / speed).toFixed(2);\n                child.style.webkitTransitionDelay = delay + \"s\";\n                child.style.transitionDelay = delay + \"s\";\n                child.className += ' in';\n            }\n\n            // When we're done animating, switch the class to 'done'\n            setTimeout(function() {\n                for (var i = 0; i < elementAnimationCount; i++) {\n                    var child = animateBlindsDom[i];\n                    var childOffset = child.getBoundingClientRect();\n                    var offset = childOffset.left * options.leftOffsetPercentage + childOffset.top;\n                    var delay = parseFloat(offset / speed / options.finishDelayThrottle).toFixed(2);\n                    //child.querySelector('img').style.webkitTransitionDelay = delay + \"s\";\n                    //child.querySelector('img').style.transitionDelay = delay + \"s\";\n                    //child.querySelector('img').className += ' in';\n                    animateBlindsDom[i].className += ' done';\n                }\n\n            }, speed * options.finishSpeedPercent);\n\n            // Load the elements without effect\n            showNotAnimatedElements(animateBlindsDom, elementsCount);\n        }\n\n        function fadeSlideIn(options) {\n\n            // Declare our defaults\n            var defaults = {\n                finishDelayThrottle: 2,\n                finishSpeedPercent: 0.72,\n                leftOffsetPercentage: 0.8,\n                selector: '.animate-fade-slide-in .item',\n                startVelocity: 1100\n            };\n\n            // Apply defaults if properties are not passed\n            if (typeof options === 'undefined') {\n                options = {};\n            }\n\n            options.finishDelayThrottle = options.finishDelayThrottle || defaults.finishDelayThrottle;\n            options.finishSpeedPercent = options.finishSpeedPercent || defaults.finishSpeedPercent;\n            options.leftOffsetPercentage = options.leftOffsetPercentage || defaults.leftOffsetPercentage;\n            options.startVelocity = options.startVelocity || defaults.startVelocity;\n\n            if (typeof options.selector == 'undefined') {\n                options.selector = defaults.selector;\n            }\n\n            // Fail early & silently log\n            var isInvalidSelector = typeof options.selector === 'undefined' || options.selector === '';\n\n            if (isInvalidSelector) {\n                console.log('invalid fadeSlideIn selector');\n                return false;\n            }\n\n            var animateFadeSlideInDom = document.querySelectorAll(options.selector);\n            var elementsCount = animateFadeSlideInDom.length;\n            var elementAnimationCount = 0;\n\n            // Count the elements within the starting viewport so we're not exacting\n            // more effort than required...\n            //\n            // We use css visiblity: hidden instead of display: none so the elements\n            // maintain their DOM flow\n\n            var viewportHeight = getViewportHeight();\n            for (var i = 0; i < elementsCount; i++) {\n                if (animateFadeSlideInDom[i].offsetTop < viewportHeight) {\n                    elementAnimationCount += 1;\n                    continue;\n                }\n                break;\n            }\n\n            // Sequentially animate with a delay based on proximity\n            var speed = options.startVelocity;\n            for (var i = 0; i < elementAnimationCount; i++) {\n                var child = animateFadeSlideInDom[i];\n                var childOffset = child.getBoundingClientRect();\n                var offset = childOffset.left * options.leftOffsetPercentage + childOffset.top;\n                var delay = parseFloat(offset / speed).toFixed(2);\n                child.style.webkitTransitionDelay = delay + \"s\";\n                child.style.transitionDelay = delay + \"s\";\n                child.className += ' in';\n            }\n\n            // When we're done animating, switch the class to 'done'\n            setTimeout(function() {\n                for (var i = 0; i < elementAnimationCount; i++) {\n                    var child = animateFadeSlideInDom[i];\n                    var childOffset = child.getBoundingClientRect();\n                    var offset = childOffset.left * options.leftOffsetPercentage + childOffset.top;\n                    var delayValue = offset / speed / options.finishDelayThrottle;\n                    var delay = parseFloat(delayValue).toFixed(2);\n                }\n                animateFadeSlideInDom[0].className += ' done';\n\n            }, speed * options.finishSpeedPercent);\n\n            // Load the elements without effect\n            showNotAnimatedElements(animateFadeSlideInDom, elementsCount);\n        }\n\n        function fadeSlideInRight(options) {\n\n            // Declare our defaults\n            var defaults = {\n                finishDelayThrottle: 2,\n                finishSpeedPercent: 0.72,\n                leftOffsetPercentage: 0.8,\n                selector: '.animate-fade-slide-in-right .item',\n                startVelocity: 1100\n            };\n\n            // Apply defaults if properties are not passed\n            if (typeof options === 'undefined') {\n                options = {};\n            }\n\n            options.finishDelayThrottle = options.finishDelayThrottle || defaults.finishDelayThrottle;\n            options.finishSpeedPercent = options.finishSpeedPercent || defaults.finishSpeedPercent;\n            options.leftOffsetPercentage = options.leftOffsetPercentage || defaults.leftOffsetPercentage;\n            options.startVelocity = options.startVelocity || defaults.startVelocity;\n\n            if (typeof options.selector == 'undefined') {\n                options.selector = defaults.selector;\n            }\n\n            // Fail early & silently log\n            var isInvalidSelector = typeof options.selector === 'undefined' || options.selector === '';\n\n            if (isInvalidSelector) {\n                console.log('invalid fadeSlideInRight selector');\n                return false;\n            }\n\n            var animateSlideInRightDom = document.querySelectorAll(options.selector);\n            var elementsCount = animateSlideInRightDom.length;\n            var elementAnimationCount = 0;\n\n            // Count the elements within the starting viewport so we're not\n            // exacting more effort than required...\n            //\n            // We use css visiblity: hidden instead of display: none so the\n            // elements maintain their DOM flow\n\n            var viewportHeight = getViewportHeight();\n            for (var i = 0; i < elementsCount; i++) {\n                if (animateSlideInRightDom[i].offsetTop < viewportHeight) {\n                    elementAnimationCount += 1;\n                    continue;\n                }\n                break;\n            }\n\n            // Sequentially animate with a delay based on proximity\n            var speed = options.startVelocity;\n            for (var i = 0; i < elementAnimationCount; i++) {\n                var child = animateSlideInRightDom[i];\n                var childOffset = child.getBoundingClientRect();\n                var offset = childOffset.left * options.leftOffsetPercentage + childOffset.top;\n                var delay = parseFloat(offset / speed).toFixed(2);\n                child.style.webkitTransitionDelay = delay + \"s\";\n                child.style.transitionDelay = delay + \"s\";\n                child.className += ' in';\n            }\n\n            // When we're done animating, switch the class to 'done'\n            setTimeout(function() {\n                for (var i = 0; i < elementAnimationCount; i++) {\n                    var child = animateSlideInRightDom[i];\n                    var childOffset = child.getBoundingClientRect();\n                    var offset = childOffset.left * options.leftOffsetPercentage + childOffset.top;\n                    var delayValue = offset / speed / options.finishDelayThrottle;\n                    var delay = parseFloat(delayValue).toFixed(2);\n                }\n                animateSlideInRightDom[0].className += ' done';\n\n            }, speed * options.finishSpeedPercent);\n\n            // Load the elements without effect\n            showNotAnimatedElements(animateSlideInRightDom, elementsCount);\n\n        }\n\n        function ripple(options) {\n\n            // Declare our defaults\n            var defaults = {\n                finishDelayThrottle: 2,\n                finishSpeedPercent: 0.72,\n                leftOffsetPercentage: 0.8,\n                selector: '.animate-ripple .item',\n                startVelocity: 1100\n            };\n\n            // Apply defaults if properties are not passed\n            if (typeof options === 'undefined') {\n                options = {};\n            }\n\n            options.finishDelayThrottle = options.finishDelayThrottle || defaults.finishDelayThrottle;\n            options.finishSpeedPercent = options.finishSpeedPercent || defaults.finishSpeedPercent;\n            options.leftOffsetPercentage = options.leftOffsetPercentage || defaults.leftOffsetPercentage;\n            options.startVelocity = options.startVelocity || defaults.startVelocity;\n\n            if (typeof options.selector == 'undefined') {\n                options.selector = defaults.selector;\n            }\n\n            // Fail early & silently log\n            var isInvalidSelector = typeof options.selector === 'undefined' || options.selector === '';\n\n            if (isInvalidSelector) {\n                console.log('invalid ripple selector');\n                return false;\n            }\n\n            var animateRippleDom = document.querySelectorAll(options.selector);\n            var elementsCount = animateRippleDom.length;\n            var elementAnimationCount = 0;\n\n            // Count the elements within the starting viewport so we're not\n            // exacting more effort than required...\n            //\n            // We use css visiblity: hidden instead of display: none so the\n            // elements maintain their DOM flow\n\n            var viewportHeight = getViewportHeight();\n            for (var i = 0; i < animateRippleDom.length; i++) {\n                if (animateRippleDom[i].offsetTop < viewportHeight) {\n                    elementAnimationCount += 1;\n                    continue;\n                }\n                break;\n            }\n\n            // Sequentially animate with a delay based on proximity\n            var speed = options.startVelocity;\n            for (var i = 0; i < elementAnimationCount; i++) {\n                var child = animateRippleDom[i];\n                var childOffset = child.getBoundingClientRect();\n                var offset = childOffset.left * options.leftOffsetPercentage + childOffset.top;\n                var delay = parseFloat(offset / speed).toFixed(2);\n                child.style.webkitTransitionDelay = delay + \"s\";\n                child.style.transitionDelay = delay + \"s\";\n                child.className += ' in';\n            }\n\n            // When we're done animating, switch the class to 'done'\n            setTimeout(function() {\n                for (var i = 0; i < elementAnimationCount; i++) {\n                    var child = animateRippleDom[i];\n                    var childOffset = child.getBoundingClientRect();\n                    var offset = childOffset.left * options.leftOffsetPercentage + childOffset.top;\n                    var delayValue = offset / speed / options.finishDelayThrottle;\n                    var delay = parseFloat(delayValue).toFixed(2);\n                }\n                animateRippleDom[0].className += ' done';\n\n            }, speed * options.finishSpeedPercent);\n\n            // Load the elements without effect\n            showNotAnimatedElements(animateRippleDom, elementsCount);\n        }\n\n        function panInLeft(options) {\n\n            // We have a single option, so it may be passed as a string or property\n            if (typeof options === 'string') {\n                options = {\n                    selector: options\n                };\n            }\n\n            // Fail early & silently log\n            var isInvalidSelector = typeof options.selector === 'undefined' || options.selector === '';\n\n            if (isInvalidSelector) {\n                console.log('invalid pushDown selector');\n                return false;\n            }\n\n            var animatePanInLeftDom = document.querySelectorAll(options.selector);\n            var elementAnimationCount = animatePanInLeftDom.length;\n            for (var i = 0; i < elementAnimationCount; i++) {\n                var element = animatePanInLeftDom[i];\n                var classNameToRemove = 'animate-pan-in-left';\n                var indexOfClassNameToRemove = element.className.lastIndexOf(classNameToRemove);\n                element.className = element.className.substr(0, indexOfClassNameToRemove);\n            }\n        }\n\n        function pushDown(options) {\n\n            // We have a single option, so it may be passed as a string or property\n            if (typeof options === 'string') {\n                options = {\n                    selector: options\n                };\n            }\n\n            // Fail early & silently log\n            var isInvalidSelector = typeof options.selector === 'undefined' || options.selector === '';\n\n            if (isInvalidSelector) {\n                console.log('invalid pushDown selector');\n                return false;\n            }\n\n            var animatePushDownDom = document.querySelectorAll(options.selector);\n            var elementAnimationCount = animatePushDownDom.length;\n            for (var i = 0; i < elementAnimationCount; i++) {\n                var element = animatePushDownDom[i];\n                var classNameToRemove = options.selector.split('.')[1];\n                var indexOfClassNameToRemove = element.className.lastIndexOf(classNameToRemove);\n                element.className = element.className.substr(0, indexOfClassNameToRemove);\n            }\n        }\n\n        function slideUp(options) {\n\n            // We have a single option, so it may be passed as a string or property\n            if (typeof options === 'string') {\n                options = {\n                    selector: options\n                };\n            }\n\n            // Fail early & silently log\n            var isInvalidSelector = typeof options.selector === 'undefined' || options.selector === '';\n\n            if (isInvalidSelector) {\n                console.log('invalid pushDown selector');\n                return false;\n            }\n\n            var animateSlideUpDom = document.querySelectorAll(options.selector);\n            var elementAnimationCount = animateSlideUpDom.length;\n            for (var i = 0; i < elementAnimationCount; i++) {\n                var element = animateSlideUpDom[i];\n                var classNameToRemove = options.selector.split('.')[1];\n                var indexOfClassNameToRemove = element.className.lastIndexOf(classNameToRemove);\n                element.className = element.className.substr(0, indexOfClassNameToRemove);\n            }\n        }\n\n        /* Export object\n        /============================================================================*/\n        return motion;\n    }\n\n    Motion.$inject = [];\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/js/lib/_motion.js\n ** module id = 3\n ** module chunks = 0\n **/"],"sourceRoot":""}