{"version":3,"sources":["webpack:///./node_modules/nespresso-library/src/utils/scrollTo.js","webpack:///./node_modules/nespresso-library/src/utils/deferred.js","webpack:///./node_modules/gvue/src/assets/js/mixins/scrollTo.js"],"names":["scrollTo","scrollDuration","deferred","Deferred","scrollToObj","type","indexOf","document","querySelector","getBoundingClientRect","Error","window","pageYOffset","top","initialTimestamp","performance","now","currentTime","initialScroll","deltaScroll","viewportHeight","innerHeight","bodyHeight","body","clientHeight","Math","abs","finalTimestamp","step","currentTimestamp","moveStep","requestAnimationFrame","setTimeout","resolve","promise","Date","getTime","nowOffset","timing","navigationStart","constructor","this","Promise","reject","goToSmooth","ref","element","minus","arguments","length","undefined","duration","HTMLElement","position"],"mappings":";4GAAA,uBAMA,SAASA,EAAUA,EAAUC,GACzB,MAAMC,EAAW,IAAIC,OAIrB,IAAIC,EACJ,MAAMC,SAAcL,EACpB,GAAI,CAAC,SAAU,UAAUM,QAAQD,IAAS,EAAG,CAOzC,GANAD,EAAcJ,EACD,WAATK,IAEAD,EAAcG,SAASC,cAAcR,KAGrCI,GAA4D,oBAAtCA,EAAYK,sBAGlC,MAAM,IAAIC,MAAO,8CAA6CV,MAF9DA,EAAWW,OAAOC,YAAcR,EAAYK,wBAAwBI,QAI7C,kBAAbb,IAEdA,EAAW,IAMe,kBAAnBC,GAA+BA,EAAiB,KACvDA,EAAiB,KAIrB,IAAIa,EAAmBH,OAAOI,YAAYC,MACtCC,EAAc,EACdC,EAAgBP,OAAOC,YACvBO,EAAcD,EAAgBlB,EAC9BoB,EAAiBT,OAAOU,YACxBC,EAAaf,SAASgB,KAAKC,aAG3BL,GAAeC,IAIfnB,EAAiBwB,KAAKC,IAAIzB,EAAiBA,GAAkBwB,KAAKC,IAAIP,IAAgBG,EAAaF,MAGvG,IAAIO,EAAiBb,EAAmBb,EAExC,SAAS2B,IACL,IAAIC,EAAmBlB,OAAOI,YAAYC,MAC1C,GAAIa,EAAmBF,EAAgB,CACnCV,GAAeY,EAAmBf,GAAoBb,EAEtDgB,IAAiBA,EAAeA,EAAcA,EAAc,EAC5D,MAAMa,EAAWX,EAAcF,EAC/BN,OAAOX,SAAS,EAAGA,GAAYmB,EAAcW,IAC7CnB,OAAOoB,sBAAsBH,QAE7BjB,OAAOX,SAAS,EAAGA,GACnBgC,WAAW,IAAM9B,EAAS+B,UAAW,KAEzC,OAAO/B,EAASgC,QAIpB,OADAvB,OAAOoB,sBAAsBH,GACtB1B,EAASgC,SAOpB,WAOI,GANI,gBAAiBvB,UAAW,IAC5BA,OAAOI,YAAc,IAEzBoB,KAAKnB,IAAOmB,KAAKnB,KAAO,WACpB,OAAO,IAAImB,MAAOC,WAElB,QAASzB,OAAOI,eAAgB,EAAO,CACvC,IAAIsB,EAAYF,KAAKnB,MACjBL,OAAOI,YAAYuB,QAAU3B,OAAOI,YAAYuB,OAAOC,kBACvDF,EAAY1B,OAAOI,YAAYuB,OAAOC,iBAE1C5B,OAAOI,YAAYC,IAAM,WACrB,OAAOmB,KAAKnB,MAAQqB,KAbhC,GAkBerC,gB,oCChGf,kCAAe,MAAMG,EACjBqC,cACIC,KAAKP,QAAU,IAAIQ,QAAQ,CAACT,EAASU,KACjCF,KAAKE,OAASA,EACdF,KAAKR,QAAUA,O,kCCL3B,2EAKe,SAASW,EAAYC,GAAgC,IAC5DC,EADiCC,EAAKC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,EAAGG,EAAQH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,IAGvDF,EADAD,aAAeO,YACLP,EAEAtC,SAASC,cAAcqC,GAGrC7C,qBAASqD,eAASP,GAASjC,IAAMkC,EAAOI","file":"js/scrollTo.js","sourcesContent":["import Deferred from './deferred'\n\n//\n// Smooth scroll-to inspired by:\n// http://stackoverflow.com/a/24559613/728480\n//\nfunction scrollTo (scrollTo, scrollDuration) {\n const deferred = new Deferred()\n //\n // Set a default for where we're scrolling to\n //\n let scrollToObj\n const type = typeof scrollTo\n if (['string', 'object'].indexOf(type) > -1) {\n scrollToObj = scrollTo\n if (type === 'string') {\n // Assuming this is a selector we can use to find an element\n scrollToObj = document.querySelector(scrollTo)\n }\n\n if (scrollToObj && typeof scrollToObj.getBoundingClientRect === 'function') {\n scrollTo = window.pageYOffset + scrollToObj.getBoundingClientRect().top\n } else {\n throw new Error(`error: No element found with the selector \"${scrollTo}\"`)\n }\n } else if (typeof scrollTo !== 'number') {\n // If it's nothing above and not an integer, we assume top of the window\n scrollTo = 0\n }\n\n //\n // Set a default for the duration\n //\n if (typeof scrollDuration !== 'number' || scrollDuration < 0) {\n scrollDuration = 500\n }\n\n // Declarations\n let initialTimestamp = window.performance.now()\n let currentTime = 0\n let initialScroll = window.pageYOffset\n let deltaScroll = initialScroll - scrollTo\n let viewportHeight = window.innerHeight\n let bodyHeight = document.body.clientHeight\n\n // Set scrollDuration indexed on the amount of scroll\n if (deltaScroll <= viewportHeight) {\n // scrollDuration = Math.abs(scrollDuration * Math.sin(Math.abs(deltaScroll) / viewportHeight * Math.PI / 2))\n // scrollDuration = scrollDuration\n } else {\n scrollDuration = Math.abs(scrollDuration + scrollDuration * (Math.abs(deltaScroll) / (bodyHeight - viewportHeight)))\n }\n\n let finalTimestamp = initialTimestamp + scrollDuration\n\n function step () {\n let currentTimestamp = window.performance.now()\n if (currentTimestamp < finalTimestamp) {\n currentTime = (currentTimestamp - initialTimestamp) / scrollDuration\n // currentTime = currentTime * (2 - currentTime) // easeOutQuad\n currentTime = (--currentTime) * currentTime * currentTime + 1 // easeOutCubic\n const moveStep = deltaScroll * currentTime\n window.scrollTo(0, scrollTo + (deltaScroll - moveStep))\n window.requestAnimationFrame(step)\n } else {\n window.scrollTo(0, scrollTo)\n setTimeout(() => deferred.resolve(), 125)\n }\n return deferred.promise\n }\n\n window.requestAnimationFrame(step)\n return deferred.promise\n}\n\n//\n// Performance.now() polyfill from:\n// https://gist.github.com/paulirish/5438650\n//\n(function () {\n if ('performance' in window === false) {\n window.performance = {}\n }\n Date.now = (Date.now || function () { // thanks IE8\n return new Date().getTime()\n })\n if ('now' in window.performance === false) {\n let nowOffset = Date.now()\n if (window.performance.timing && window.performance.timing.navigationStart) {\n nowOffset = window.performance.timing.navigationStart\n }\n window.performance.now = function now () {\n return Date.now() - nowOffset\n }\n }\n})()\n\nexport default scrollTo\n","\nexport default class Deferred {\n constructor () {\n this.promise = new Promise((resolve, reject) => {\n this.reject = reject\n this.resolve = resolve\n })\n }\n}\n","/*\n * Smooth scrolling to a HTMLElement\n */\nimport scrollTo from 'nespresso-library/src/utils/scrollTo'\nimport { position } from 'gaspard'\nexport default function goToSmooth (ref, minus = 0, duration = 325) {\n let element\n if (ref instanceof HTMLElement) {\n element = ref\n } else {\n element = document.querySelector(ref)\n }\n\n scrollTo(position(element).top - minus, duration)\n}\n"],"sourceRoot":""}