{"version":3,"sources":["smoothscroll.js"],"names":["_typeof","Symbol","iterator","constructor","prototype","scrollLeft","scrollTop","Math","cos","PI","behavior","TypeError","parentNode","body","clientHeight","scrollHeight","clientWidth","scrollWidth","getComputedStyle","overflow","startTime","startX","x","startY","y","method","call","scrollable","requestAnimationFrame","bind","scrollX","pageXOffset","scrollY","pageYOffset","scroll","documentElement","style","HTMLElement","Element","scrollTo","scrollBy","elScroll","scrollIntoView","performance","now","Date","arguments","left","top","getBoundingClientRect","exports","module","polyfill","window","document"],"mappings":"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","file":"smoothscroll.js","sourcesContent":["'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*\r\n * smoothscroll polyfill - v0.3.5\r\n * https://iamdustan.github.io/smoothscroll\r\n * 2016 (c) Dustan Kasten, Jeremias Menichelli - MIT License\r\n */\n\n(function (w, d, undefined) {\n\t'use strict';\n\n\t/*\r\n * aliases\r\n * w: window global object\r\n * d: document\r\n * undefined: undefined\r\n */\n\n\t// polyfill\n\n\tfunction polyfill() {\n\t\t// return when scrollBehavior interface is supported\n\t\tif ('scrollBehavior' in d.documentElement.style) {\n\t\t\treturn;\n\t\t}\n\n\t\t/*\r\n * globals\r\n */\n\t\tvar Element = w.HTMLElement || w.Element;\n\t\tvar SCROLL_TIME = 468;\n\n\t\t/*\r\n * object gathering original scroll methods\r\n */\n\t\tvar original = {\n\t\t\tscroll: w.scroll || w.scrollTo,\n\t\t\tscrollBy: w.scrollBy,\n\t\t\telScroll: Element.prototype.scroll || scrollElement,\n\t\t\tscrollIntoView: Element.prototype.scrollIntoView\n\t\t};\n\n\t\t/*\r\n * define timing method\r\n */\n\t\tvar now = w.performance && w.performance.now ? w.performance.now.bind(w.performance) : Date.now;\n\n\t\t/**\r\n * changes scroll position inside an element\r\n * @method scrollElement\r\n * @param {Number} x\r\n * @param {Number} y\r\n */\n\t\tfunction scrollElement(x, y) {\n\t\t\tthis.scrollLeft = x;\n\t\t\tthis.scrollTop = y;\n\t\t}\n\n\t\t/**\r\n * returns result of applying ease math function to a number\r\n * @method ease\r\n * @param {Number} k\r\n * @returns {Number}\r\n */\n\t\tfunction ease(k) {\n\t\t\treturn 0.5 * (1 - Math.cos(Math.PI * k));\n\t\t}\n\n\t\t/**\r\n * indicates if a smooth behavior should be applied\r\n * @method shouldBailOut\r\n * @param {Number|Object} x\r\n * @returns {Boolean}\r\n */\n\t\tfunction shouldBailOut(x) {\n\t\t\tif ((typeof x === 'undefined' ? 'undefined' : _typeof(x)) !== 'object' || x === null || x.behavior === undefined || x.behavior === 'auto' || x.behavior === 'instant') {\n\t\t\t\t// first arg not an object/null\n\t\t\t\t// or behavior is auto, instant or undefined\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif ((typeof x === 'undefined' ? 'undefined' : _typeof(x)) === 'object' && x.behavior === 'smooth') {\n\t\t\t\t// first argument is an object and behavior is smooth\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// throw error when behavior is not supported\n\t\t\tthrow new TypeError('behavior not valid');\n\t\t}\n\n\t\t/**\r\n * finds scrollable parent of an element\r\n * @method findScrollableParent\r\n * @param {Node} el\r\n * @returns {Node} el\r\n */\n\t\tfunction findScrollableParent(el) {\n\t\t\tvar isBody;\n\t\t\tvar hasScrollableSpace;\n\t\t\tvar hasVisibleOverflow;\n\n\t\t\tdo {\n\t\t\t\tel = el.parentNode;\n\n\t\t\t\t// set condition variables\n\t\t\t\tisBody = el === d.body;\n\t\t\t\thasScrollableSpace = el.clientHeight < el.scrollHeight || el.clientWidth < el.scrollWidth;\n\t\t\t\thasVisibleOverflow = w.getComputedStyle(el, null).overflow === 'visible';\n\t\t\t} while (!isBody && !(hasScrollableSpace && !hasVisibleOverflow));\n\n\t\t\tisBody = hasScrollableSpace = hasVisibleOverflow = null;\n\n\t\t\treturn el;\n\t\t}\n\n\t\t/**\r\n * self invoked function that, given a context, steps through scrolling\r\n * @method step\r\n * @param {Object} context\r\n */\n\t\tfunction step(context) {\n\t\t\tvar time = now();\n\t\t\tvar value;\n\t\t\tvar currentX;\n\t\t\tvar currentY;\n\t\t\tvar elapsed = (time - context.startTime) / SCROLL_TIME;\n\n\t\t\t// avoid elapsed times higher than one\n\t\t\telapsed = elapsed > 1 ? 1 : elapsed;\n\n\t\t\t// apply easing to elapsed time\n\t\t\tvalue = ease(elapsed);\n\n\t\t\tcurrentX = context.startX + (context.x - context.startX) * value;\n\t\t\tcurrentY = context.startY + (context.y - context.startY) * value;\n\n\t\t\tcontext.method.call(context.scrollable, currentX, currentY);\n\n\t\t\t// scroll more if we have not reached our destination\n\t\t\tif (currentX !== context.x || currentY !== context.y) {\n\t\t\t\tw.requestAnimationFrame(step.bind(w, context));\n\t\t\t}\n\t\t}\n\n\t\t/**\r\n * scrolls window with a smooth behavior\r\n * @method smoothScroll\r\n * @param {Object|Node} el\r\n * @param {Number} x\r\n * @param {Number} y\r\n */\n\t\tfunction smoothScroll(el, x, y) {\n\t\t\tvar scrollable;\n\t\t\tvar startX;\n\t\t\tvar startY;\n\t\t\tvar method;\n\t\t\tvar startTime = now();\n\n\t\t\t// define scroll context\n\t\t\tif (el === d.body) {\n\t\t\t\tscrollable = w;\n\t\t\t\tstartX = w.scrollX || w.pageXOffset;\n\t\t\t\tstartY = w.scrollY || w.pageYOffset;\n\t\t\t\tmethod = original.scroll;\n\t\t\t} else {\n\t\t\t\tscrollable = el;\n\t\t\t\tstartX = el.scrollLeft;\n\t\t\t\tstartY = el.scrollTop;\n\t\t\t\tmethod = scrollElement;\n\t\t\t}\n\n\t\t\t// scroll looping over a frame\n\t\t\tstep({\n\t\t\t\tscrollable: scrollable,\n\t\t\t\tmethod: method,\n\t\t\t\tstartTime: startTime,\n\t\t\t\tstartX: startX,\n\t\t\t\tstartY: startY,\n\t\t\t\tx: x,\n\t\t\t\ty: y\n\t\t\t});\n\t\t}\n\n\t\t/*\r\n * ORIGINAL METHODS OVERRIDES\r\n */\n\n\t\t// w.scroll and w.scrollTo\n\t\tw.scroll = w.scrollTo = function () {\n\t\t\t// avoid smooth behavior if not required\n\t\t\tif (shouldBailOut(arguments[0])) {\n\t\t\t\toriginal.scroll.call(w, arguments[0].left || arguments[0], arguments[0].top || arguments[1]);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// LET THE SMOOTHNESS BEGIN!\n\t\t\tsmoothScroll.call(w, d.body, ~~arguments[0].left, ~~arguments[0].top);\n\t\t};\n\n\t\t// w.scrollBy\n\t\tw.scrollBy = function () {\n\t\t\t// avoid smooth behavior if not required\n\t\t\tif (shouldBailOut(arguments[0])) {\n\t\t\t\toriginal.scrollBy.call(w, arguments[0].left || arguments[0], arguments[0].top || arguments[1]);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// LET THE SMOOTHNESS BEGIN!\n\t\t\tsmoothScroll.call(w, d.body, ~~arguments[0].left + (w.scrollX || w.pageXOffset), ~~arguments[0].top + (w.scrollY || w.pageYOffset));\n\t\t};\n\n\t\t// Element.prototype.scroll and Element.prototype.scrollTo\n\t\tElement.prototype.scroll = Element.prototype.scrollTo = function () {\n\t\t\t// avoid smooth behavior if not required\n\t\t\tif (shouldBailOut(arguments[0])) {\n\t\t\t\toriginal.elScroll.call(this, arguments[0].left || arguments[0], arguments[0].top || arguments[1]);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar left = arguments[0].left;\n\t\t\tvar top = arguments[0].top;\n\n\t\t\t// LET THE SMOOTHNESS BEGIN!\n\t\t\tsmoothScroll.call(this, this, typeof left === 'number' ? left : this.scrollLeft, typeof top === 'number' ? top : this.scrollTop);\n\t\t};\n\n\t\t// Element.prototype.scrollBy\n\t\tElement.prototype.scrollBy = function () {\n\t\t\tvar arg0 = arguments[0];\n\n\t\t\tif ((typeof arg0 === 'undefined' ? 'undefined' : _typeof(arg0)) === 'object') {\n\t\t\t\tthis.scroll({\n\t\t\t\t\tleft: arg0.left + this.scrollLeft,\n\t\t\t\t\ttop: arg0.top + this.scrollTop,\n\t\t\t\t\tbehavior: arg0.behavior\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.scroll(this.scrollLeft + arg0, this.scrollTop + arguments[1]);\n\t\t\t}\n\t\t};\n\n\t\t// Element.prototype.scrollIntoView\n\t\tElement.prototype.scrollIntoView = function () {\n\t\t\t// avoid smooth behavior if not required\n\t\t\tif (shouldBailOut(arguments[0])) {\n\t\t\t\toriginal.scrollIntoView.call(this, arguments[0] === undefined ? true : arguments[0]);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// LET THE SMOOTHNESS BEGIN!\n\t\t\tvar scrollableParent = findScrollableParent(this);\n\t\t\tvar parentRects = scrollableParent.getBoundingClientRect();\n\t\t\tvar clientRects = this.getBoundingClientRect();\n\n\t\t\tif (scrollableParent !== d.body) {\n\t\t\t\t// reveal element inside parent\n\t\t\t\tsmoothScroll.call(this, scrollableParent, scrollableParent.scrollLeft + clientRects.left - parentRects.left, scrollableParent.scrollTop + clientRects.top - parentRects.top);\n\t\t\t\t// reveal parent in viewport\n\t\t\t\tw.scrollBy({\n\t\t\t\t\tleft: parentRects.left,\n\t\t\t\t\ttop: parentRects.top,\n\t\t\t\t\tbehavior: 'smooth'\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// reveal element in viewport\n\t\t\t\tw.scrollBy({\n\t\t\t\t\tleft: clientRects.left,\n\t\t\t\t\ttop: clientRects.top,\n\t\t\t\t\tbehavior: 'smooth'\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}\n\n\tif ((typeof exports === 'undefined' ? 'undefined' : _typeof(exports)) === 'object') {\n\t\t// commonjs\n\t\tmodule.exports = { polyfill: polyfill };\n\t} else {\n\t\t// global\n\t\tpolyfill();\n\t}\n})(window, document);"]}