{"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 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 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 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 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":""}