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