{"version":3,"sources":["jsdelivr-header.js","/gh/mfrancis95/smooth-scroll@master/smooth-scroll.js"],"names":[],"mappings":"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","file":"/gh/mfrancis95/smooth-scroll@master/smooth-scroll.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /gh/mfrancis95/smooth-scroll@master/smooth-scroll.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","const easingFunctions = {\n    easeInCirc: (time, start, change, duration) => -change * (Math.sqrt(1 - (time /= duration) * time) - 1) + start,\n    easeInCubic: (time, start, change, duration) => change * (time /= duration) * time * time + start,\n    easeInExpo: (time, start, change, duration) =>  time === 0 ? start : change * Math.pow(2, 10 * (time / duration - 1)) + start,\n    easeInOutCirc: (time, start, change, duration) => {\n        if ((time /= duration / 2 ) < 1) {\n            return -change / 2 * (Math.sqrt(1 - time * time) - 1) + start;\n        }\n        return change / 2 * (Math.sqrt(1 - (time -= 2) * time ) + 1) + start;\n    },\n    easeInOutCubic: (time, start, change, duration) => {\n        if ((time /= duration / 2) < 1) {\n            return change / 2 * time * time * time + start;\n        }\n        return change / 2 * ((time -= 2) * time * time + 2) + start;\n    },\n    easeInOutExpo: (time, start, change, duration) => {\n        if (time === 0) {\n            return start;\n        }\n        if (time === duration) {\n            return start + change;\n        }\n        if ((time /= duration / 2) < 1) {\n            return change / 2 * Math.pow(2, 10 * (time - 1)) + start;\n        }\n        return change / 2 * (-Math.pow(2, -10 * --time) + 2) + start;\n    },\n    easeInOutQuad: (time, start, change, duration) => {\n        if ((time /= duration / 2) < 1) {\n            return change / 2 * time * time + start;\n        }\n        return -change / 2 * ((--time) * (time - 2) - 1) + start;\n    },\n    easeInOutQuart: (time, start, change, duration) => {\n        if ((time /= duration / 2) < 1) {\n            return change / 2 * time * time * time * time + start;\n        }\n        return -change / 2 * ((time -= 2) * time * time * time - 2) + start;\n    },\n    easeInOutQuint: (time, start, change, duration) => {\n        if ((time /= duration / 2) < 1) {\n            return change / 2 * time * time * time * time * time + start;\n        }\n        return change / 2 * ((time -= 2) * time * time * time * time + 2) + start;\n    },\n    easeInOutSine: (time, start, change, duration) => -change / 2 * (Math.cos(Math.PI * time / duration) - 1) + start,\n    easeInQuad: (time, start, change, duration) => change * (time /= duration) * time + start,\n    easeInQuart: (time, start, change, duration) => change * (time /= duration) * time * time * time + start,\n    easeInQuint: (time, start, change, duration) =>  change * (time /= duration) * time * time * time * time + start,\n    easeInSine: (time, start, change, duration) => -change * Math.cos(time / duration * Math.PI / 2) + change + start,\n    easeOutCirc: (time, start, change, duration) => change * Math.sqrt(1 - (time = time / duration - 1) * time) + start,\n    easeOutCubic: (time, start, change, duration) => change * ((time = time / duration - 1) * time * time + 1) + start,\n    easeOutExpo: (time, start, change, duration) => time === duration ? start + change : change * (-Math.pow(2, -10 * time / duration) + 1) + start,\n    easeOutQuad: (time, start, change, duration) => -change * (time /= duration) * (time - 2) + start,\n    easeOutQuart: (time, start, change, duration) => -change * ((time = time / duration - 1) * time * time * time - 1) + start,\n    easeOutQuint: (time, start, change, duration) => change * ((time = time / duration - 1) * time * time * time * time + 1) + start,\n    easeOutSine: (time, start, change, duration) => change * Math.sin(time / duration * Math.PI / 2) + start,\n    linear: (time, start, change, duration) => change * time / duration + start\n};\n\nasync function smoothScroll(position = 0, duration = 500, ease = easingFunctions.linear, interruptible = []) {\n    const start = window.scrollY;\n    if (position === start) {\n        return;\n    }\n    const easingFunction = typeof ease === 'string' ? easingFunctions[ease] ?? easingFunctions.linear : ease;\n\n    const abortController = new AbortController();\n    const { signal } = abortController;\n\n    interruptible.forEach(event => {\n        document.addEventListener(event, () => abortController.abort(), { signal });\n    });\n\n    const startTime = Date.now();\n    const change = position - start;\n\n    const { promise, resolve } = Promise.withResolvers();\n\n    const step = () => {\n        if (!signal.aborted) {\n            const time = Date.now() - startTime;\n            if (time <= duration) {\n                window.scrollTo(0, easingFunction(time, start, change, duration));\n                requestAnimationFrame(step);\n            }\n            else {\n                window.scrollTo(0, position);\n                resolve();\n            }\n        }\n        else {\n            resolve();\n        }\n    };\n\n    requestAnimationFrame(step);\n\n    return promise;\n}\n\nHTMLElement.prototype.smoothScrollify = function() {\n    const { dataset } = this;\n    this.addEventListener('click', async event => {\n        event.preventDefault();\n        const href = this.getAttribute('href');\n        if (dataset.history) {\n            history.pushState(null, '', href);\n        }\n        await smoothScroll(document.getElementById(href.slice(1)).offsetTop, dataset.duration, dataset.ease, dataset.interruptible?.split(' '));\n        window[dataset.callback]?.();\n    });\n};\n\nfor (const element of document.getElementsByClassName('smooth-scroll')) {\n    element.smoothScrollify();\n}"]}